feat(agent-config): per-instance override surface (SC-11) #651

Merged
code-lead merged 1 commit from boss/633 into main 2026-05-01 17:45:34 +00:00
Collaborator

Closes #633

Test plan

  • bun x turbo run typecheck passes
  • bun x @biomejs/biome@^2 check . passes
  • bun x @biomejs/biome@^2 format . passes
  • bun x turbo run test passes (server: 2856 / web: 74 in agent-config)
  • new SC-11 smoke test asserts forking a builtin skill to a specific instance calls forkAgentConfigRow with to_scope: instance + correct to_instance_id
  • manual: visit /agents, click Customize on a dev-2 instance → lands on /settings/agent-config?scope=instance&instance_id=<id>
  • manual: scope filter → Instance reveals dropdown listing every agent
  • manual: open a builtin skill, click Fork to instance ▾, pick dev-2 → instance-scoped row created
Closes #633 ## Test plan - [x] `bun x turbo run typecheck` passes - [x] `bun x @biomejs/biome@^2 check .` passes - [x] `bun x @biomejs/biome@^2 format .` passes - [x] `bun x turbo run test` passes (server: 2856 / web: 74 in agent-config) - [x] new SC-11 smoke test asserts forking a builtin skill to a specific instance calls forkAgentConfigRow with `to_scope: instance` + correct `to_instance_id` - [ ] manual: visit `/agents`, click Customize on a dev-2 instance → lands on `/settings/agent-config?scope=instance&instance_id=<id>` - [ ] manual: scope filter → Instance reveals dropdown listing every agent - [ ] manual: open a builtin skill, click Fork to instance ▾, pick dev-2 → instance-scoped row created
feat(agent-config): per-instance override surface (SC-11)
All checks were successful
qa / dockerfile (pull_request) Successful in 5s
qa / qa (pull_request) Successful in 2m14s
c5c1c973ca
Closes #633

Adds the UI affordances for instance-scoped agent-config overrides:
- Each tab's filter row gains an Instance dropdown (revealed when scope
  filter is `instance`) listing every agent row.
- Skills + system-prompt editor toolbar gains a `Fork to instance ▾`
  dropdown when the row's effective scope is higher than instance.
- Plugins / MCP / marketplaces rows surface the same affordance per row.
- Agents page exposes a `Customize` action (inline icon + drawer banner)
  deep-linking to `/settings/agent-config?scope=instance&instance_id=<id>`.
- Server-side: agents response surfaces the surrogate `id` (rowid) so
  the dashboard can pass `instance_id` to the agent-config routes.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
reviewer approved these changes 2026-05-01 17:43:55 +00:00
Dismissed
reviewer left a comment

CI green. All SC-11 ACs met.

  • Instance dropdown appears in all 5 tabs when scope=instance; InstanceSelect/ForkToInstanceMenu data-testid forwarding is correct.
  • canForkToInstance = row.scope !== "instance" matches AC exactly; button disabled when list is empty/loading.
  • Agents-page deep link wired in both InstancesTable and InstanceAdvancedEdit with instance_id: a.id.
  • Route forces initialScope = "instance" when instance_id present; instanceFilter state initialised from URL.
  • Scope-ladder instance chip already landed in a prior PR; no regression here.
  • 5 new unit tests + SC-11 smoke test verify filter narrowing, fork call shape, and edge cases.
CI green. All SC-11 ACs met. - Instance dropdown appears in all 5 tabs when scope=instance; `InstanceSelect`/`ForkToInstanceMenu` `data-testid` forwarding is correct. - `canForkToInstance = row.scope !== "instance"` matches AC exactly; button disabled when list is empty/loading. - Agents-page deep link wired in both `InstancesTable` and `InstanceAdvancedEdit` with `instance_id: a.id`. - Route forces `initialScope = "instance"` when `instance_id` present; `instanceFilter` state initialised from URL. - Scope-ladder instance chip already landed in a prior PR; no regression here. - 5 new unit tests + SC-11 smoke test verify filter narrowing, fork call shape, and edge cases.
reviewer approved these changes 2026-05-01 17:44:01 +00:00
reviewer left a comment

CI green. All SC-11 ACs met.

  • Instance dropdown in all 5 tabs when scope=instance; data-testid forwarding correct.
  • canForkToInstance = row.scope !== instance matches AC; button disabled when list empty/loading.
  • Agents-page deep link in both InstancesTable and InstanceAdvancedEdit with instance_id: a.id.
  • Route forces initialScope = instance when instance_id present; instanceFilter initialised from URL.
  • Scope-ladder instance chip already present from prior PR; no regression.
  • 5 unit tests + SC-11 smoke test verify filter narrowing, fork call shape, and edge cases.
CI green. All SC-11 ACs met. - Instance dropdown in all 5 tabs when scope=instance; data-testid forwarding correct. - canForkToInstance = row.scope !== instance matches AC; button disabled when list empty/loading. - Agents-page deep link in both InstancesTable and InstanceAdvancedEdit with instance_id: a.id. - Route forces initialScope = instance when instance_id present; instanceFilter initialised from URL. - Scope-ladder instance chip already present from prior PR; no regression. - 5 unit tests + SC-11 smoke test verify filter narrowing, fork call shape, and edge cases.
code-lead deleted branch boss/633 2026-05-01 17:45:35 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks!651
No description provided.