Extract + Drizzle agents aggregate (preserve onAgentDelete hook) #844
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.
Blocks
Depends on
#843 Extract + Drizzle
flows aggregate (flows + runs + audit + legacy_forge_calls)
charles/claude-hooks
#849 Cleanup: delete
db.ts, lint-ban raw SQL outside DB layer, update docs
charles/claude-hooks
#842 Extract + Drizzle
dead_letter_prs + watched_repos aggregates
charles/claude-hooks
Reference
charles/claude-hooks#844
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
As a maintainer, I want the core
agents+agent_provider_state+agent_provider_eventstables split out and Drizzled, so that the most-imported DB surface gets type-safe column refs without breaking theregisterOnAgentDeletelifecycle hook.Acceptance criteria
Extraction
agents-store.ts+agent-provider.ts(split by table cluster).listAgents,getAgent,listAgentsByType,createAgent,updateAgent,deleteAgent,getProviderState,listProviderStates,bumpTier,resetTier,setProviderPaused,listProviderEvents,parseMatchLabels,parsePlugins,seedDefaultAgents,ensureDefaultForTypes,migrateForLegacyTypeRenames,migrateSecretsForLegacyTypeRenames,migrateTokenFilesForLegacyTypeRenames,dropOrphanAgentDefault,applyDefaultMatchLabels,applyGlobalCavemanModeFlip,clearModelOverrideForType.Hooks preserved
registerOnAgentDelete(fn)API unchanged.deleteAgentstill fires registered callbacks before/after delete (verify with existing tests).Drizzle
schema/agents.ts+schema/agent-provider.ts.match_labels,plugins,notesJSON-encoded TEXT columns —text({ mode: "json" }).$type<...>()with explicit NULL handling for tri-stateplugins(NULL = inherit,[]= empty override, array = explicit list). Document in schema file.row override (non-null) → type default) preserved.Tests
db.test.tsslices extracted, green.onAgentDeletecallback fires once per delete (not zero, not twice).Out of scope
domain/agent-config/resolver.ts) — separate story (#845).References
apps/server/src/infrastructure/database/db.ts:600-1500.db.ts:862—registerOnAgentDelete.dead_letter_prs+watched_reposaggregatesflowsaggregate (flows + runs + audit + legacy_forge_calls)db.ts, lint-ban raw SQL outside DB layer, update docs🤖 Auto-assigned to code-lead (heuristic: default → code-lead (no specific label match; safer than code)). Reply
/unassignto reroute.