Skip to content

bug(jaw-manager): currentModel always renders 'model n/a' in InstanceRow #136

@lidge-jun

Description

@lidge-jun

Context

In the jaw-manager dashboard, every instance row renders its runtime line as:

<cli> / model n/a

even when the underlying instance is actively running with a known model. Live evidence (2026-04-28, dashboard :24576):

port currentCli currentModel
3457 claude (null → "model n/a")
3458 codex (null → "model n/a")
3463 codex (null → "model n/a")
3464 claude (null → "model n/a")

Source of the rendered string: public/manager/src/components/InstanceRow.tsx:80

{props.instance.currentCli || 'cli n/a'} / {props.instance.currentModel || 'model n/a'}

DashboardInstance.currentModel is the field that should carry the live model id (e.g. claude-opus-4-7, gpt-5-pro, claude-haiku-4-5-20251001). It is never populated by the scan pipeline today.

Symptoms

  • Instance row always shows model n/a regardless of the active model.
  • Same problem in mobile drawer and sidebar.
  • Hides which Claude/GPT model variant a given instance is on, which is the most useful disambiguator when several instances share the same CLI.

Likely root cause

The dashboard scan calls each instance's /api/runtime (or equivalent) to infer state, but the runtime endpoint does not expose currentModel on most CLIs, so the field stays null end-to-end:

target serve → /api/runtime → currentModel: null
              ↓
manager/scan.ts → DashboardInstance.currentModel: null
              ↓
public/manager InstanceRow → 'model n/a'

This needs to be verified — the missing piece may be in either:

  • the target serve runtime probe (does not record the active model), or
  • the manager scan (probes the wrong endpoint / drops the field).

Acceptance

  • When a target instance has an active model selected (Claude or GPT family), the dashboard row shows the model id (or a short label) instead of model n/a.
  • Field still falls back to model n/a when the target genuinely cannot report a model (e.g. no message yet, or unsupported CLI).
  • No protocol break for older serve targets — manager must still render rows even if currentModel is missing.

Non-goals

  • No UI redesign of the runtime line. Only the data path.
  • No model-version policy decisions (which model to map to which label).

Links

  • Plan tracker: devlog/_plan/260426_jaw_manager_dashboard/10.10_dashboard_lifecycle_persistence.md (sibling slice — different concern, both under jaw-manager 10.x)
  • Component: public/manager/src/components/InstanceRow.tsx:80
  • Type: src/manager/types.ts:53 (DashboardInstance.currentModel)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority:P2Important, but not next

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions