Skip to content

feat(settings): make the per-harness SDK Features sections tabs - #779

Draft
Nowaker wants to merge 1 commit into
rynfar:mainfrom
Nowaker:feat/settings-harness-tabs
Draft

feat(settings): make the per-harness SDK Features sections tabs#779
Nowaker wants to merge 1 commit into
rynfar:mainfrom
Nowaker:feat/settings-harness-tabs

Conversation

@Nowaker

@Nowaker Nowaker commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

DRAFT - please do not review or merge yet

Nowaker is still iterating on this. Filed early so the change is visible and
reviewable when it is ready; please hold off until the DRAFT marker is gone.


What

Turns the per-harness SDK Features cards on /settings into a tab strip
over one body. Picking a tab shows that harness's settings and nothing else,
including its two system-prompt toggles - the built-in Claude Code prompt and
the connecting agent's own.

Why

Ten adapters rendered as ten stacked cards is a long scroll whose only structure
is repetition, and it pushes everything below it off the first screen. That is
also what buried the Routing controls (sibling PR).

Details worth a reviewer's attention

  • The strip is built from the same Object.keys(currentConfig) the flat list
    used
    , so an adapter the API returns appears the moment it exists, labelled by
    ADAPTER_LABELS or by its raw name. No hardcoded list to keep in sync.
  • Tabs reuse dashboard.ts's .tab rules verbatim, so the two pages read
    alike rather than gaining a second tab style.
  • They wrap rather than scroll. Ten labels do not fit 900px on one row, and a
    strip that hides harnesses off-screen would reintroduce the discoverability
    problem this is meant to fix.
  • A tab whose harness is off its defaults carries a small dot. Stacked cards
    showed every harness's Active/Default badge at once; one body at a time cannot,
    and losing that signal silently would be a regression.

Verification

  • bunx tsc --noEmit exit 0, 0 errors
  • bun run test (the project's own chain) - 2494 pass, 0 fail, pipeline exit 0
  • Rendered in a browser against a development instance on its own port and config
    dir: every harness tab selects and shows its own toggles, no console errors

Scope

Presentation only - no adapter behaviour, no settings API change.

Cut from main, one commit, independent of the sibling Routing PR. They touch
the same file and will conflict if both are taken; the conflict is textual and
trivial, and either can be taken alone.


This PR is AI generated, but under direct supervision and on request of Nowaker.

SDK Features rendered one card per harness, stacked. With ten adapters that
is a long scroll whose only structure is repetition, and it pushed
everything below it off the first screen.

The harnesses become a tab strip over one body: picking a tab shows that
harness's settings and nothing else, including the two system-prompt
toggles - the built-in Claude Code prompt and the connecting agent's own.

The tab strip is built from the same Object.keys(currentConfig) the flat
list used, so an adapter the API returns still appears the moment it
exists, labelled by ADAPTER_LABELS or by its raw name.

Tabs reuse dashboard.ts's .tab rules verbatim so the two pages read alike.
They wrap rather than scroll: ten labels do not fit 900px on one row, and a
strip that hides harnesses off-screen would reintroduce the discoverability
problem it is meant to fix.

Stacked cards showed every harness's Active/Default badge at once and one
body at a time cannot, so a tab whose harness is off its defaults carries a
small dot.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant