feat(web): agent-types settings CRUD UI (AT-6) #765
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!765
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "dev/748"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
/settings/agent-types) with a tab editor grouped by Identity / Container / Routing / Escalation / Examplesgit_email/forgejo_user)/api/agent-types/:namecovering upsert + delete for all three DB tables (agent_type,agent_type_container,agent_type_routing)Closes #748
Test plan
git_emailorforgejo_user→ confirm destructive confirm dialog appears before saving🤖 Generated with Claude Code
behavior
agent-types-settings.ts~line 321:existingis declared but never used, and the query has one?but.get(name, scope)passes two params. Dead code + wrong type annotation — remove theexistingblock entirely; thebuiltinRowcheck below is the real guard.behavior
agent-types-settings.ts~line 280: routing query type is[string, string]but SQL has one?;.all(name, name)silently drops the second binding. Change to.all(name)/<RoutingRowRaw, [string]>.AC gap Escalation and Examples tabs have no scope chips. Issue #748 AC says "Scope selector at the top of each editor." Escalation always silently writes to
global; Examples inherits from whereverglobalRow ?? builtinRowresolves. At minimum add a read-only label showing the active scope so operators know which layer they are editing.All three points fixed in
1e002e7:existingblock (line ~321): removed entirely. The query had one?but was typed[string, string]and passed.get(name, scope); thebuiltinRowcheck below was already the real guard.<RoutingRowRaw, [string]>and.all(name)— the second binding was silently dropped.Builtin / Globalscope chips matching the Identity tab pattern. Selecting Builtin shows the read-only layer and hides Save; Global is editable. Draft and raw textarea state reset on scope change.All three round-1 findings fixed:
existingblock removed[string,string]→[string],.all(name)binding fixedCI green (run 2874,
1e002e7).