vgxness 1.20.4 → 1.20.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/dist/adapters/claude/agent-renderer.js +82 -0
  2. package/dist/{mcp → adapters/claude/install}/claude-code-agent-config.js +64 -9
  3. package/dist/{mcp → adapters/claude/install}/claude-code-config.js +28 -6
  4. package/dist/{mcp → adapters/claude/install}/claude-code-project-memory.js +35 -5
  5. package/dist/{mcp → adapters/claude/install}/claude-code-scope.js +12 -3
  6. package/dist/{mcp → adapters/claude/install}/claude-code-user-config.js +26 -5
  7. package/dist/{mcp → adapters/claude/install}/claude-code-user-memory.js +47 -7
  8. package/dist/{mcp → adapters/claude/install}/client-install-claude-code-contract.js +45 -8
  9. package/dist/{mcp → adapters/claude/install}/client-install-claude-code.js +98 -14
  10. package/dist/adapters/json/agent-renderer.js +104 -0
  11. package/dist/adapters/opencode/agent-renderer.js +113 -0
  12. package/dist/{mcp → adapters/opencode/install}/client-install-opencode-contract.js +2 -2
  13. package/dist/{mcp → adapters/opencode/install}/client-install-opencode.js +1 -1
  14. package/dist/{mcp → adapters/opencode/install}/opencode-default-agent-config.js +2 -2
  15. package/dist/{mcp → adapters/opencode/install}/opencode-handoff-preview.js +60 -7
  16. package/dist/{mcp → adapters/opencode/install}/opencode-visibility.js +1 -1
  17. package/dist/adapters/provider-renderer.js +6 -0
  18. package/dist/agents/agent-activation-service.js +1 -263
  19. package/dist/agents/agent-lookup-contexts.js +1 -28
  20. package/dist/agents/agent-registry-service.js +1 -81
  21. package/dist/agents/agent-resolver.js +1 -287
  22. package/dist/agents/agent-seed-service.js +1 -157
  23. package/dist/agents/agent-seed-upgrade-service.js +1 -231
  24. package/dist/agents/agent-selector-resolver.js +1 -28
  25. package/dist/agents/boot-upgrade.js +1 -59
  26. package/dist/agents/canonical-agent-manifest.js +1 -245
  27. package/dist/agents/canonical-agent-projection.js +1 -236
  28. package/dist/agents/manager-profile-overlay-service.js +1 -60
  29. package/dist/agents/profile-model-routing.js +1 -30
  30. package/dist/agents/renderers/claude-renderer.js +1 -82
  31. package/dist/agents/renderers/index.js +1 -14
  32. package/dist/agents/renderers/json-renderer.js +1 -104
  33. package/dist/agents/renderers/opencode-renderer.js +1 -113
  34. package/dist/agents/renderers/provider-adapter.js +1 -6
  35. package/dist/agents/repositories/agent-seed-history.js +1 -128
  36. package/dist/agents/repositories/agents.js +1 -200
  37. package/dist/agents/repositories/manager-profile-overlays.js +1 -90
  38. package/dist/agents/schema.js +1 -1
  39. package/dist/application/agents/agent-activation-service.js +261 -0
  40. package/dist/application/agents/agent-lookup-contexts.js +28 -0
  41. package/dist/application/agents/agent-registry-service.js +81 -0
  42. package/dist/application/agents/agent-resolver.js +287 -0
  43. package/dist/application/agents/agent-seed-service.js +157 -0
  44. package/dist/application/agents/agent-seed-upgrade-service.js +231 -0
  45. package/dist/application/agents/agent-selector-resolver.js +28 -0
  46. package/dist/application/agents/boot-upgrade.js +59 -0
  47. package/dist/application/agents/canonical-agent-projection.js +236 -0
  48. package/dist/application/agents/manager-profile-overlay-service.js +68 -0
  49. package/dist/application/agents/profile-model-routing.js +30 -0
  50. package/dist/application/agents/renderers/claude-renderer.js +1 -0
  51. package/dist/application/agents/renderers/index.js +14 -0
  52. package/dist/application/agents/renderers/json-renderer.js +1 -0
  53. package/dist/application/agents/renderers/opencode-renderer.js +1 -0
  54. package/dist/application/agents/renderers/provider-adapter.js +1 -0
  55. package/dist/application/memory/active-work-preview.js +75 -0
  56. package/dist/application/memory/agent-memory-capture-service.js +498 -0
  57. package/dist/application/memory/import/dry-run-planner.js +58 -0
  58. package/dist/application/memory/import/index.js +3 -0
  59. package/dist/application/memory/import/observation-writer.js +226 -0
  60. package/dist/application/memory/import/package.js +179 -0
  61. package/dist/application/memory/memory-service.js +202 -0
  62. package/dist/application/memory/search.js +11 -0
  63. package/dist/{mcp → application/provider-setup}/provider-change-plan.js +74 -13
  64. package/dist/{mcp → application/provider-setup}/provider-doctor.js +201 -31
  65. package/dist/{mcp → application/provider-setup}/provider-health-types.js +1 -1
  66. package/dist/{mcp → application/provider-setup}/provider-status.js +170 -33
  67. package/dist/application/runs/execution-planning.js +180 -0
  68. package/dist/application/runs/operation-execution.js +1 -0
  69. package/dist/application/runs/operation-retry.js +129 -0
  70. package/dist/application/runs/resume-after-approval-result.js +88 -0
  71. package/dist/application/runs/run-insights.js +270 -0
  72. package/dist/application/runs/run-service.js +1480 -0
  73. package/dist/application/runs/run-snapshot-export-service.js +31 -0
  74. package/dist/application/runs/sandbox-process-execution.js +244 -0
  75. package/dist/application/runs/sandbox-worktree-planning.js +59 -0
  76. package/dist/application/runs/task-scoped-command-grant-service.js +224 -0
  77. package/dist/application/sdd/artifact-portability-service.js +137 -0
  78. package/dist/application/sdd/cockpit-read-model.js +195 -0
  79. package/dist/application/sdd/sdd-continuation-plan.js +265 -0
  80. package/dist/application/sdd/sdd-workflow-service.js +892 -0
  81. package/dist/application/skills/boot-seed.js +42 -0
  82. package/dist/application/skills/personal-skills.js +41 -0
  83. package/dist/application/skills/skill-export-service.js +34 -0
  84. package/dist/application/skills/skill-index-service.js +126 -0
  85. package/dist/application/skills/skill-payload.js +186 -0
  86. package/dist/application/skills/skill-registry-service.js +648 -0
  87. package/dist/application/skills/skill-resolver.js +368 -0
  88. package/dist/application/skills/skill-seed-service.js +242 -0
  89. package/dist/application/skills/skill-status-service.js +147 -0
  90. package/dist/cli/bun-bin.js +0 -0
  91. package/dist/cli/cli-flags.js +1 -387
  92. package/dist/cli/cli-help.js +1 -173
  93. package/dist/cli/cli-helpers.js +1 -77
  94. package/dist/cli/cli-types.js +1 -1
  95. package/dist/cli/commands/agent-skill-dispatcher.js +1 -700
  96. package/dist/cli/commands/index.js +1 -9
  97. package/dist/cli/commands/interactive-entrypoint-dispatcher.js +1 -14
  98. package/dist/cli/commands/mcp-dispatcher.js +1 -232
  99. package/dist/cli/commands/memory-sdd-dispatcher.js +1 -367
  100. package/dist/cli/commands/run-permission-dispatcher.js +1 -455
  101. package/dist/cli/commands/setup-dispatcher.js +1 -496
  102. package/dist/cli/commands/status-dispatcher.js +1 -130
  103. package/dist/cli/commands/verification-dispatcher.js +1 -47
  104. package/dist/cli/commands/workflow-dispatcher.js +1 -566
  105. package/dist/cli/dispatcher.js +1 -247
  106. package/dist/cli/doctor-renderer.js +1 -26
  107. package/dist/cli/home-tui-app.js +1 -411
  108. package/dist/cli/home-tui-controller.js +1 -314
  109. package/dist/cli/mcp-start-path.js +1 -21
  110. package/dist/cli/product-resume-renderer.js +1 -32
  111. package/dist/cli/product-status-renderer.js +1 -81
  112. package/dist/cli/sdd-renderer.js +1 -247
  113. package/dist/cli/setup-plan-renderer.js +1 -79
  114. package/dist/cli/setup-status-renderer.js +1 -50
  115. package/dist/cli/setup-tui-app.js +1 -130
  116. package/dist/cli/setup-tui-controller.js +1 -89
  117. package/dist/cli/tui/focus-reducer.js +1 -0
  118. package/dist/cli/tui/focus-types.js +1 -0
  119. package/dist/cli/tui/ink/app-shell.js +1 -0
  120. package/dist/cli/tui/ink/components.js +1 -38
  121. package/dist/cli/tui/ink/help-overlay.js +1 -0
  122. package/dist/cli/tui/ink/state-components.js +1 -0
  123. package/dist/cli/tui/ink/theme.js +1 -36
  124. package/dist/cli/tui/key-intents.js +1 -0
  125. package/dist/cli/tui/keymap.js +1 -20
  126. package/dist/cli/tui/navigation.js +1 -10
  127. package/dist/cli/tui/screen-registry.js +1 -0
  128. package/dist/cli/tui/terminal-capabilities.js +1 -12
  129. package/dist/cli/tui/tui-types.js +1 -1
  130. package/dist/cli/tui/visual/badges.js +1 -19
  131. package/dist/cli/tui/visual/footer.js +1 -27
  132. package/dist/cli/tui/visual/index.js +1 -3
  133. package/dist/cli/tui/visual/viewport.js +1 -11
  134. package/dist/cli/tui-render-helpers.js +1 -200
  135. package/dist/cli/verification-plan-renderer.js +1 -25
  136. package/dist/cli/verification-report-renderer.js +1 -19
  137. package/dist/domain/agents/canonical-agent-manifest.js +355 -0
  138. package/dist/domain/agents/schema.js +1 -0
  139. package/dist/domain/memory/active-work-topics.js +64 -0
  140. package/dist/domain/memory/memory-capture-schema.js +1 -0
  141. package/dist/domain/memory/schema.js +1 -0
  142. package/dist/domain/runs/schema.js +5 -0
  143. package/dist/domain/sdd/cockpit-types.js +1 -0
  144. package/dist/domain/sdd/schema.js +111 -0
  145. package/dist/domain/skills/schema.js +1 -0
  146. package/dist/governance/risk-classifier.js +2 -0
  147. package/dist/interfaces/cli/bun-bin.js +46 -0
  148. package/dist/interfaces/cli/cli-flags.js +391 -0
  149. package/dist/interfaces/cli/cli-help.js +173 -0
  150. package/dist/interfaces/cli/cli-helpers.js +77 -0
  151. package/dist/interfaces/cli/cli-types.js +1 -0
  152. package/dist/interfaces/cli/commands/agent-skill-dispatcher.js +700 -0
  153. package/dist/interfaces/cli/commands/index.js +9 -0
  154. package/dist/interfaces/cli/commands/interactive-entrypoint-dispatcher.js +14 -0
  155. package/dist/interfaces/cli/commands/mcp-dispatcher.js +252 -0
  156. package/dist/interfaces/cli/commands/memory-sdd-dispatcher.js +367 -0
  157. package/dist/interfaces/cli/commands/run-permission-dispatcher.js +460 -0
  158. package/dist/interfaces/cli/commands/setup-dispatcher.js +496 -0
  159. package/dist/interfaces/cli/commands/status-dispatcher.js +130 -0
  160. package/dist/interfaces/cli/commands/verification-dispatcher.js +47 -0
  161. package/dist/interfaces/cli/commands/workflow-dispatcher.js +566 -0
  162. package/dist/interfaces/cli/dispatcher.js +247 -0
  163. package/dist/interfaces/cli/doctor-renderer.js +26 -0
  164. package/dist/interfaces/cli/home-tui-app.js +462 -0
  165. package/dist/interfaces/cli/home-tui-controller.js +341 -0
  166. package/dist/interfaces/cli/index.js +27 -0
  167. package/dist/interfaces/cli/mcp-start-path.js +21 -0
  168. package/dist/interfaces/cli/product-resume-renderer.js +32 -0
  169. package/dist/interfaces/cli/product-status-renderer.js +81 -0
  170. package/dist/interfaces/cli/sdd-renderer.js +247 -0
  171. package/dist/interfaces/cli/setup-plan-renderer.js +79 -0
  172. package/dist/interfaces/cli/setup-status-renderer.js +50 -0
  173. package/dist/interfaces/cli/setup-tui-app.js +135 -0
  174. package/dist/interfaces/cli/setup-tui-controller.js +89 -0
  175. package/dist/interfaces/cli/tui/focus-reducer.js +60 -0
  176. package/dist/interfaces/cli/tui/focus-types.js +10 -0
  177. package/dist/interfaces/cli/tui/ink/app-shell.js +16 -0
  178. package/dist/interfaces/cli/tui/ink/components.js +38 -0
  179. package/dist/interfaces/cli/tui/ink/help-overlay.js +6 -0
  180. package/dist/interfaces/cli/tui/ink/state-components.js +22 -0
  181. package/dist/interfaces/cli/tui/ink/theme.js +36 -0
  182. package/dist/interfaces/cli/tui/key-intents.js +33 -0
  183. package/dist/interfaces/cli/tui/keymap.js +20 -0
  184. package/dist/interfaces/cli/tui/navigation.js +10 -0
  185. package/dist/interfaces/cli/tui/screen-registry.js +43 -0
  186. package/dist/interfaces/cli/tui/terminal-capabilities.js +12 -0
  187. package/dist/interfaces/cli/tui/tui-types.js +1 -0
  188. package/dist/interfaces/cli/tui/visual/badges.js +19 -0
  189. package/dist/interfaces/cli/tui/visual/footer.js +27 -0
  190. package/dist/interfaces/cli/tui/visual/index.js +3 -0
  191. package/dist/interfaces/cli/tui/visual/viewport.js +11 -0
  192. package/dist/interfaces/cli/tui-render-helpers.js +200 -0
  193. package/dist/interfaces/cli/verification-plan-renderer.js +25 -0
  194. package/dist/interfaces/cli/verification-report-renderer.js +19 -0
  195. package/dist/interfaces/mcp/contracts/agents.js +1 -0
  196. package/dist/interfaces/mcp/contracts/context.js +1 -0
  197. package/dist/interfaces/mcp/contracts/governance.js +1 -0
  198. package/dist/interfaces/mcp/contracts/index.js +1 -0
  199. package/dist/interfaces/mcp/contracts/memory.js +1 -0
  200. package/dist/interfaces/mcp/contracts/providers.js +1 -0
  201. package/dist/interfaces/mcp/contracts/runs.js +1 -0
  202. package/dist/interfaces/mcp/contracts/sdd.js +1 -0
  203. package/dist/interfaces/mcp/contracts/sessions.js +1 -0
  204. package/dist/interfaces/mcp/contracts/skills.js +1 -0
  205. package/dist/interfaces/mcp/contracts/verification.js +1 -0
  206. package/dist/interfaces/mcp/control-plane/handlers/agents.js +38 -0
  207. package/dist/interfaces/mcp/control-plane/handlers/context.js +12 -0
  208. package/dist/interfaces/mcp/control-plane/handlers/memory.js +95 -0
  209. package/dist/interfaces/mcp/control-plane/handlers/providers.js +19 -0
  210. package/dist/interfaces/mcp/control-plane/handlers/runs.js +134 -0
  211. package/dist/interfaces/mcp/control-plane/handlers/sdd.js +225 -0
  212. package/dist/interfaces/mcp/control-plane/handlers/sessions.js +39 -0
  213. package/dist/interfaces/mcp/control-plane/handlers/skills.js +82 -0
  214. package/dist/interfaces/mcp/control-plane/handlers/verification.js +11 -0
  215. package/dist/interfaces/mcp/control-plane/types.js +1 -0
  216. package/dist/interfaces/mcp/control-plane.js +235 -0
  217. package/dist/interfaces/mcp/schema.js +174 -0
  218. package/dist/interfaces/mcp/schemas/common.js +121 -0
  219. package/dist/interfaces/mcp/schemas/inputs/agents.js +69 -0
  220. package/dist/interfaces/mcp/schemas/inputs/context.js +32 -0
  221. package/dist/interfaces/mcp/schemas/inputs/governance.js +23 -0
  222. package/dist/interfaces/mcp/schemas/inputs/index.js +10 -0
  223. package/dist/interfaces/mcp/schemas/inputs/memory.js +50 -0
  224. package/dist/interfaces/mcp/schemas/inputs/providers.js +35 -0
  225. package/dist/interfaces/mcp/schemas/inputs/runs.js +146 -0
  226. package/dist/interfaces/mcp/schemas/inputs/sdd.js +102 -0
  227. package/dist/interfaces/mcp/schemas/inputs/sessions.js +32 -0
  228. package/dist/interfaces/mcp/schemas/inputs/skills.js +231 -0
  229. package/dist/interfaces/mcp/schemas/inputs/verification.js +9 -0
  230. package/dist/interfaces/mcp/schemas/outputs/index.js +2 -0
  231. package/dist/interfaces/mcp/schemas/outputs/providers.js +28 -0
  232. package/dist/interfaces/mcp/schemas/outputs/sdd.js +166 -0
  233. package/dist/interfaces/mcp/stdio-server.js +116 -0
  234. package/dist/interfaces/mcp/validation/agents.js +189 -0
  235. package/dist/interfaces/mcp/validation/common.js +415 -0
  236. package/dist/interfaces/mcp/validation/governance.js +50 -0
  237. package/dist/interfaces/mcp/validation/memory.js +133 -0
  238. package/dist/interfaces/mcp/validation/providers.js +94 -0
  239. package/dist/interfaces/mcp/validation/runs.js +514 -0
  240. package/dist/interfaces/mcp/validation/sdd.js +247 -0
  241. package/dist/interfaces/mcp/validation/sessions.js +51 -0
  242. package/dist/interfaces/mcp/validation/skills.js +685 -0
  243. package/dist/interfaces/mcp/validation/verification.js +24 -0
  244. package/dist/interfaces/mcp/validation.js +149 -0
  245. package/dist/mcp/control-plane-snapshot-service.js +65 -2
  246. package/dist/mcp/control-plane.js +1 -646
  247. package/dist/mcp/doctor.js +1 -1
  248. package/dist/mcp/index.js +17 -17
  249. package/dist/mcp/schema.js +1 -1072
  250. package/dist/mcp/stdio-server.js +1 -116
  251. package/dist/mcp/validation.js +1 -2239
  252. package/dist/memory/active-work-preview.js +1 -75
  253. package/dist/memory/active-work-topics.js +1 -64
  254. package/dist/memory/agent-memory-capture-service.js +1 -497
  255. package/dist/memory/import/dry-run-planner.js +1 -58
  256. package/dist/memory/import/index.js +1 -3
  257. package/dist/memory/import/observation-writer.js +1 -226
  258. package/dist/memory/import/package.js +1 -179
  259. package/dist/memory/memory-capture-schema.js +1 -1
  260. package/dist/memory/memory-service.js +1 -201
  261. package/dist/memory/repositories/artifacts.js +1 -67
  262. package/dist/memory/repositories/observations.js +1 -217
  263. package/dist/memory/repositories/sessions.js +1 -125
  264. package/dist/memory/repositories/traces.js +1 -78
  265. package/dist/memory/schema.js +1 -1
  266. package/dist/memory/search.js +1 -11
  267. package/dist/memory/sqlite/database.js +1 -228
  268. package/dist/memory/storage-paths.js +1 -72
  269. package/dist/payload/context-budget-policy.js +10 -0
  270. package/dist/payload/context-budget-service.js +26 -0
  271. package/dist/payload/payload-diagnostics.js +50 -0
  272. package/dist/permissions/explicit-request-authorization.js +126 -0
  273. package/dist/permissions/policy-evaluator.js +54 -14
  274. package/dist/runs/execution-planning.js +1 -178
  275. package/dist/runs/operation-execution.js +1 -1
  276. package/dist/runs/operation-retry.js +1 -129
  277. package/dist/runs/repositories/runs.js +1 -676
  278. package/dist/runs/repositories/task-scoped-command-grants.js +1 -462
  279. package/dist/runs/resume-after-approval-result.js +1 -84
  280. package/dist/runs/run-insights.js +1 -270
  281. package/dist/runs/run-service.js +1 -1439
  282. package/dist/runs/run-snapshot-export-service.js +1 -31
  283. package/dist/runs/sandbox-process-execution.js +1 -240
  284. package/dist/runs/sandbox-worktree-planning.js +1 -59
  285. package/dist/runs/schema.js +1 -5
  286. package/dist/runs/task-scoped-command-grant-service.js +1 -216
  287. package/dist/sdd/artifact-portability-service.js +1 -137
  288. package/dist/sdd/cockpit-read-model.js +1 -195
  289. package/dist/sdd/cockpit-types.js +1 -1
  290. package/dist/sdd/schema.js +1 -111
  291. package/dist/sdd/sdd-continuation-plan.js +1 -265
  292. package/dist/sdd/sdd-workflow-service.js +1 -822
  293. package/dist/setup/providers/claude-setup-adapter.js +11 -4
  294. package/dist/setup/providers/opencode-setup-adapter.js +10 -7
  295. package/dist/setup/setup-plan.js +20 -7
  296. package/dist/skills/boot-seed.js +1 -42
  297. package/dist/skills/personal-skills.js +1 -41
  298. package/dist/skills/repositories/skill-evaluation-requests.js +1 -190
  299. package/dist/skills/repositories/skill-evaluation-scenarios.js +1 -305
  300. package/dist/skills/repositories/skill-improvement-proposals.js +1 -355
  301. package/dist/skills/repositories/skills.js +1 -1077
  302. package/dist/skills/schema.js +1 -1
  303. package/dist/skills/skill-export-service.js +1 -34
  304. package/dist/skills/skill-index-service.js +1 -126
  305. package/dist/skills/skill-payload.js +1 -186
  306. package/dist/skills/skill-registry-service.js +1 -644
  307. package/dist/skills/skill-resolver.js +1 -368
  308. package/dist/skills/skill-seed-service.js +1 -242
  309. package/dist/skills/skill-status-service.js +1 -147
  310. package/dist/storage/agents/repositories/agent-seed-history.js +128 -0
  311. package/dist/storage/agents/repositories/agents.js +200 -0
  312. package/dist/storage/agents/repositories/manager-profile-overlays.js +90 -0
  313. package/dist/storage/memory/repositories/artifacts.js +67 -0
  314. package/dist/storage/memory/repositories/observations.js +217 -0
  315. package/dist/storage/memory/repositories/sessions.js +125 -0
  316. package/dist/storage/memory/repositories/traces.js +78 -0
  317. package/dist/storage/memory/sqlite/database.js +228 -0
  318. package/dist/storage/memory/storage-paths.js +72 -0
  319. package/dist/storage/runs/repositories/runs.js +676 -0
  320. package/dist/storage/runs/repositories/task-scoped-command-grants.js +464 -0
  321. package/dist/storage/skills/repositories/skill-evaluation-requests.js +190 -0
  322. package/dist/storage/skills/repositories/skill-evaluation-scenarios.js +305 -0
  323. package/dist/storage/skills/repositories/skill-improvement-proposals.js +355 -0
  324. package/dist/storage/skills/repositories/skills.js +1084 -0
  325. package/docs/architecture.md +2 -2
  326. package/docs/glossary.md +1 -1
  327. package/docs/mcp.md +1 -1
  328. package/docs/module-boundaries.md +114 -0
  329. package/docs/prd.md +1 -1
  330. package/docs/project-health-audit-v1.10.x.md +1 -1
  331. package/docs/providers.md +2 -2
  332. package/docs/safety.md +3 -3
  333. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/apply-progress.md +122 -0
  334. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/archive-report.md +61 -0
  335. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/design.md +66 -0
  336. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/proposal.md +79 -0
  337. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/spec.md +67 -0
  338. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/tasks.md +63 -0
  339. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/verify-report.md +71 -0
  340. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/apply-progress.md +68 -0
  341. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/archive-report.md +61 -0
  342. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/design.md +43 -0
  343. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/proposal.md +61 -0
  344. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/spec.md +31 -0
  345. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/tasks.md +27 -0
  346. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/verify-report.md +58 -0
  347. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/apply-progress.md +65 -0
  348. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/archive-report.md +53 -0
  349. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/design.md +64 -0
  350. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/proposal.md +62 -0
  351. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/spec.md +51 -0
  352. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/tasks.md +50 -0
  353. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/verify-report.md +66 -0
  354. package/docs/storage.md +2 -2
  355. package/package.json +2 -2
  356. /package/dist/{mcp → adapters/claude/install}/claude-code-cli.js +0 -0
  357. /package/dist/{memory → storage/memory}/sqlite/migrations/001_initial.sql +0 -0
  358. /package/dist/{memory → storage/memory}/sqlite/migrations/002_observation_revisions.sql +0 -0
  359. /package/dist/{memory → storage/memory}/sqlite/migrations/003_agent_registry.sql +0 -0
  360. /package/dist/{memory → storage/memory}/sqlite/migrations/004_run_runtime.sql +0 -0
  361. /package/dist/{memory → storage/memory}/sqlite/migrations/005_run_approvals.sql +0 -0
  362. /package/dist/{memory → storage/memory}/sqlite/migrations/006_run_operation_attempts.sql +0 -0
  363. /package/dist/{memory → storage/memory}/sqlite/migrations/007_abandoned_operation_attempts.sql +0 -0
  364. /package/dist/{memory → storage/memory}/sqlite/migrations/008_run_execution_plan_events.sql +0 -0
  365. /package/dist/{memory → storage/memory}/sqlite/migrations/009_multiple_operation_attempts.sql +0 -0
  366. /package/dist/{memory → storage/memory}/sqlite/migrations/010_skill_registry.sql +0 -0
  367. /package/dist/{memory → storage/memory}/sqlite/migrations/011_skill_usage_resolution_outcomes.sql +0 -0
  368. /package/dist/{memory → storage/memory}/sqlite/migrations/012_skill_improvement_proposals.sql +0 -0
  369. /package/dist/{memory → storage/memory}/sqlite/migrations/013_skill_evaluation_scenarios.sql +0 -0
  370. /package/dist/{memory → storage/memory}/sqlite/migrations/014_manager_profile_overlays.sql +0 -0
  371. /package/dist/{memory → storage/memory}/sqlite/migrations/015_artifact_metadata.sql +0 -0
  372. /package/dist/{memory → storage/memory}/sqlite/migrations/016_agent_seed_history.sql +0 -0
  373. /package/dist/{memory → storage/memory}/sqlite/migrations/017_intent_signal_skill_targets.sql +0 -0
  374. /package/dist/{memory → storage/memory}/sqlite/migrations/018_skill_system_v2.sql +0 -0
  375. /package/dist/{memory → storage/memory}/sqlite/migrations/019_task_scoped_command_grants.sql +0 -0
@@ -1,82 +1 @@
1
- import { canonicalPromptContractVersion } from '../canonical-agent-manifest.js';
2
- import { canonicalBehaviorContractVersion } from '../../behavior/behavior-contract-manifest.js';
3
- import { ok, validationFailure } from './provider-adapter.js';
4
- const previewWarnings = [
5
- 'Claude rendering returns installable preview artifacts only; it does not install and does not write provider configuration.',
6
- 'VGX does not execute Claude or run Claude Code from this preview.',
7
- 'VGXNESS does not install Claude Code or write provider configuration from renderer previews; project-root CLAUDE.md is only managed by confirmed/preflighted Claude project install.',
8
- 'VGX does not guarantee exact Claude Code configuration compatibility; this output is a neutral preview only.',
9
- ];
10
- const previewSafety = {
11
- executesProvider: false,
12
- writesProviderConfig: false,
13
- installable: true,
14
- previewOnly: true,
15
- };
16
- const claudeCapabilities = {
17
- supportedAgentFields: ['name', 'description', 'instructions', 'mode', 'adapter model', 'adapter profile', 'permissions', 'memory', 'skills'],
18
- skillInjectionModes: ['included as neutral skill identifiers in preview output'],
19
- permissionCategories: ['included as registry permission metadata in preview output'],
20
- memoryInjectionModes: ['included as registry memory metadata in preview output'],
21
- delegationModel: 'registry agents and subagents are represented in preview output without executing Claude delegation',
22
- lifecycleHooks: ['preview render/export only; confirmed install is handled by MCP install service'],
23
- configFileLocations: ['rendered/claude/.../.mcp.json', 'rendered/claude/.../.claude/agents/*.md'],
24
- limitations: [
25
- 'Preview artifacts only; does not execute Claude or Claude Code.',
26
- 'Does not install Claude Code or provider tooling.',
27
- 'Renderer preview does not write .claude/, CLAUDE.md, or provider configuration.',
28
- 'Confirmed apply writes only project .mcp.json, .claude/agents/*.md, and the project-root CLAUDE.md managed block.',
29
- 'Claude Code compatibility can drift; validate with provider doctor after confirmed install.',
30
- ],
31
- render: {
32
- format: 'claude-code-project-preview',
33
- artifactContentTypes: ['application/json', 'text/markdown'],
34
- installable: true,
35
- previewOnly: true,
36
- },
37
- };
38
- export class ClaudeAgentRenderer {
39
- provider = 'claude';
40
- capabilities = claudeCapabilities;
41
- render(input) {
42
- const agents = [input.agent, ...(input.subagents ?? [])];
43
- const artifacts = [
44
- {
45
- relativePath: `rendered/claude/${pathSegment(input.agent.project)}/${input.agent.scope}/${pathSegment(input.agent.name)}/.mcp.json`,
46
- contentType: 'application/json',
47
- contents: `${JSON.stringify({ mcpServers: { vgxness: { type: 'stdio', command: 'vgxness', args: ['mcp', 'start'] } } }, null, 2)}\n`,
48
- },
49
- ];
50
- const renderedKeys = new Set();
51
- for (const agent of agents) {
52
- const key = claudeAgentKey(agent.name);
53
- if (renderedKeys.has(key))
54
- return validationFailure(`Rendered Claude agent key collision: ${key}`);
55
- renderedKeys.add(key);
56
- artifacts.push({
57
- relativePath: `rendered/claude/${pathSegment(input.agent.project)}/${input.agent.scope}/${pathSegment(input.agent.name)}/.claude/agents/${key}.md`,
58
- contentType: 'text/markdown',
59
- contents: renderClaudeAgentMarkdown(agent, key),
60
- });
61
- }
62
- return ok({
63
- provider: this.provider,
64
- installable: true,
65
- artifacts,
66
- warnings: previewWarnings,
67
- });
68
- }
69
- }
70
- function renderClaudeAgentMarkdown(agent, key) {
71
- return `---\nname: ${JSON.stringify(key)}\ndescription: ${JSON.stringify(agent.description)}\n---\n\n<!-- VGXNESS-GENERATED claude-code-provider-support provider=claude artifact=claude-code-subagent promptContractVersion=${canonicalPromptContractVersion} behaviorContractVersion=${canonicalBehaviorContractVersion} safe-update=true -->\n\n${agent.instructions.value.trim()}\n`;
72
- }
73
- function claudeAgentKey(value) {
74
- return pathSegment(value);
75
- }
76
- function pathSegment(value) {
77
- return (value
78
- .trim()
79
- .toLowerCase()
80
- .replace(/[^a-z0-9._-]+/g, '-')
81
- .replace(/^-+|-+$/g, '') || 'unnamed');
82
- }
1
+ export * from '../../application/agents/renderers/claude-renderer.js';
@@ -1,14 +1 @@
1
- import { ClaudeAgentRenderer } from './claude-renderer.js';
2
- import { JsonAgentRenderer } from './json-renderer.js';
3
- import { OpenCodeAgentRenderer } from './opencode-renderer.js';
4
- import { ok, validationFailure } from './provider-adapter.js';
5
- const renderers = {
6
- json: new JsonAgentRenderer(),
7
- opencode: new OpenCodeAgentRenderer(),
8
- claude: new ClaudeAgentRenderer(),
9
- };
10
- export function getProviderRenderer(provider) {
11
- const normalized = provider.trim().toLowerCase();
12
- const renderer = renderers[normalized];
13
- return renderer === undefined ? validationFailure(`Unknown provider renderer: ${provider}`) : ok(renderer);
14
- }
1
+ export * from '../../application/agents/renderers/index.js';
@@ -1,104 +1 @@
1
- import { ok, validationFailure, } from './provider-adapter.js';
2
- const previewSafety = {
3
- executesProvider: false,
4
- writesProviderConfig: false,
5
- installable: false,
6
- previewOnly: true,
7
- };
8
- const jsonCapabilities = {
9
- supportedAgentFields: [
10
- 'id',
11
- 'project',
12
- 'scope',
13
- 'mode',
14
- 'name',
15
- 'description',
16
- 'instructions',
17
- 'capabilities',
18
- 'permissions',
19
- 'memory',
20
- 'workflows',
21
- 'skills',
22
- 'adapters',
23
- 'timestamps',
24
- 'parentAgentId',
25
- ],
26
- skillInjectionModes: ['preserved as registry metadata in neutral export'],
27
- permissionCategories: ['preserved registry permission policy metadata'],
28
- memoryInjectionModes: ['preserved registry memory scope metadata'],
29
- delegationModel: 'preserves registry agent/subagent relationships without provider delegation execution',
30
- lifecycleHooks: ['preview render/export only'],
31
- configFileLocations: [],
32
- limitations: [
33
- 'Generic debug/export output; it is not executable provider configuration.',
34
- 'Does not execute providers or run lifecycle hooks.',
35
- 'Does not install provider tooling.',
36
- 'Does not write provider configuration files.',
37
- ],
38
- render: {
39
- format: 'neutral-json-export',
40
- artifactContentTypes: ['application/json'],
41
- installable: false,
42
- previewOnly: true,
43
- },
44
- };
45
- export class JsonAgentRenderer {
46
- provider = 'json';
47
- capabilities = jsonCapabilities;
48
- render(input) {
49
- const subagents = input.subagents ?? [];
50
- const basePath = `rendered/json/${pathSegment(input.agent.project)}/${input.agent.scope}/${pathSegment(input.agent.name)}`;
51
- const artifacts = [
52
- jsonArtifact(`${basePath}.agent.json`, renderedDefinition(input.agent, this.provider)),
53
- jsonArtifact(`${basePath}.manifest.json`, {
54
- provider: this.provider,
55
- installable: false,
56
- safety: previewSafety,
57
- rootAgentId: input.agent.id,
58
- rootAgentName: input.agent.name,
59
- subagentIds: subagents.map((subagent) => subagent.id),
60
- artifacts: [`${basePath}.agent.json`, ...subagents.map((subagent) => `${basePath}.subagents/${pathSegment(subagent.name)}.json`)],
61
- }),
62
- ...subagents.map((subagent) => jsonArtifact(`${basePath}.subagents/${pathSegment(subagent.name)}.json`, renderedDefinition(subagent, this.provider))),
63
- ];
64
- const duplicatePath = firstDuplicate(artifacts.map((artifact) => artifact.relativePath));
65
- if (duplicatePath !== undefined)
66
- return validationFailure(`Rendered artifact path collision: ${duplicatePath}`);
67
- return ok({
68
- provider: this.provider,
69
- installable: false,
70
- artifacts,
71
- warnings: ['Rendering returns preview artifacts only; it does not install or write provider configuration.'],
72
- });
73
- }
74
- }
75
- function renderedDefinition(agent, provider) {
76
- const rendered = { agent, safety: previewSafety };
77
- const selectedAdapter = agent.adapters[provider];
78
- if (selectedAdapter !== undefined)
79
- rendered.selectedAdapter = selectedAdapter;
80
- return rendered;
81
- }
82
- function jsonArtifact(relativePath, value) {
83
- return {
84
- relativePath,
85
- contentType: 'application/json',
86
- contents: `${JSON.stringify(value, null, 2)}\n`,
87
- };
88
- }
89
- function pathSegment(value) {
90
- return (value
91
- .trim()
92
- .toLowerCase()
93
- .replace(/[^a-z0-9._-]+/g, '-')
94
- .replace(/^-+|-+$/g, '') || 'unnamed');
95
- }
96
- function firstDuplicate(values) {
97
- const seen = new Set();
98
- for (const value of values) {
99
- if (seen.has(value))
100
- return value;
101
- seen.add(value);
102
- }
103
- return undefined;
104
- }
1
+ export * from '../../application/agents/renderers/json-renderer.js';
@@ -1,113 +1 @@
1
- import { behaviorContractProjectionMetadata } from '../../behavior/behavior-contract-manifest.js';
2
- import { ok, validationFailure } from './provider-adapter.js';
3
- const openCodeSchema = 'https://opencode.ai/config.json';
4
- const previewWarning = 'Rendering returns preview artifacts only; it does not install or write .opencode/, .claude/, or provider configuration.';
5
- const previewSafety = {
6
- executesProvider: false,
7
- writesProviderConfig: false,
8
- installable: false,
9
- previewOnly: true,
10
- };
11
- const openCodeCapabilities = {
12
- supportedAgentFields: [
13
- 'name',
14
- 'description',
15
- 'instructions',
16
- 'mode',
17
- 'adapter model',
18
- 'adapter config keys: variant, temperature, top_p, hidden, options, color, steps, permission, tools',
19
- ],
20
- skillInjectionModes: ['external preview services may inject skill payloads before rendering; renderer does not resolve skills'],
21
- permissionCategories: ['registry permission metadata mapped from adapter permission config'],
22
- memoryInjectionModes: ['external preview services may inject memory payloads before rendering; renderer does not load memory'],
23
- delegationModel: 'registry agents render as primary agents and registry subagents render as subagents without executing delegation',
24
- lifecycleHooks: ['preview render/export only'],
25
- configFileLocations: ['rendered/opencode/.../opencode.json'],
26
- limitations: [
27
- 'Preview artifacts only; does not execute OpenCode or provider commands.',
28
- 'Does not install OpenCode or global tooling.',
29
- 'Does not write .opencode/, .claude/, or provider configuration.',
30
- 'Does not provide TUI support or sandbox/worktree enforcement.',
31
- ],
32
- render: {
33
- format: 'opencode-json-preview',
34
- artifactContentTypes: ['application/json'],
35
- installable: false,
36
- previewOnly: true,
37
- },
38
- };
39
- export class OpenCodeAgentRenderer {
40
- provider = 'opencode';
41
- capabilities = openCodeCapabilities;
42
- render(input) {
43
- const agents = [input.agent, ...(input.subagents ?? [])];
44
- const renderedAgents = {};
45
- for (const agent of agents) {
46
- const key = openCodeAgentKey(agent.name);
47
- if (renderedAgents[key] !== undefined)
48
- return validationFailure(`Rendered OpenCode agent key collision: ${key}`);
49
- renderedAgents[key] = openCodeAgentConfig(agent);
50
- }
51
- const artifact = {
52
- relativePath: `rendered/opencode/${pathSegment(input.agent.project)}/${input.agent.scope}/${pathSegment(input.agent.name)}/opencode.json`,
53
- contentType: 'application/json',
54
- contents: `${JSON.stringify({ $schema: openCodeSchema, behaviorContract: behaviorContractProjectionMetadata, agent: renderedAgents, safety: previewSafety }, null, 2)}\n`,
55
- };
56
- return ok({
57
- provider: this.provider,
58
- installable: false,
59
- artifacts: [artifact],
60
- warnings: [previewWarning, 'Top-level registry agents render as OpenCode primary agents by default; registry subagents render as OpenCode subagents.'],
61
- });
62
- }
63
- }
64
- function openCodeAgentConfig(agent) {
65
- const adapter = agent.adapters.opencode;
66
- const config = adapter?.config ?? {};
67
- const rendered = {
68
- ...(adapter?.model !== undefined ? { model: adapter.model } : {}),
69
- description: agent.description,
70
- prompt: agent.instructions.value,
71
- mode: agent.mode === 'subagent' ? 'subagent' : 'primary',
72
- };
73
- copyString(config, rendered, 'variant');
74
- copyNumber(config, rendered, 'temperature');
75
- copyNumber(config, rendered, 'top_p');
76
- copyBoolean(config, rendered, 'hidden');
77
- copyJson(config, rendered, 'options');
78
- copyString(config, rendered, 'color');
79
- copyNumber(config, rendered, 'steps');
80
- copyJson(config, rendered, 'permission');
81
- copyJson(config, rendered, 'tools');
82
- return rendered;
83
- }
84
- function copyString(source, target, key) {
85
- const value = source[key];
86
- if (typeof value === 'string')
87
- target[key] = value;
88
- }
89
- function copyNumber(source, target, key) {
90
- const value = source[key];
91
- if (typeof value === 'number')
92
- target[key] = value;
93
- }
94
- function copyBoolean(source, target, key) {
95
- const value = source[key];
96
- if (typeof value === 'boolean')
97
- target[key] = value;
98
- }
99
- function copyJson(source, target, key) {
100
- const value = source[key];
101
- if (value !== undefined)
102
- target[key] = value;
103
- }
104
- function openCodeAgentKey(value) {
105
- return pathSegment(value);
106
- }
107
- function pathSegment(value) {
108
- return (value
109
- .trim()
110
- .toLowerCase()
111
- .replace(/[^a-z0-9._-]+/g, '-')
112
- .replace(/^-+|-+$/g, '') || 'unnamed');
113
- }
1
+ export * from '../../application/agents/renderers/opencode-renderer.js';
@@ -1,6 +1 @@
1
- export function validationFailure(message) {
2
- return { ok: false, error: { code: 'validation_failed', message } };
3
- }
4
- export function ok(value) {
5
- return { ok: true, value };
6
- }
1
+ export * from '../../application/agents/renderers/provider-adapter.js';
@@ -1,128 +1 @@
1
- import { randomUUID } from 'node:crypto';
2
- export class AgentSeedHistoryRepository {
3
- db;
4
- constructor(db) {
5
- this.db = db;
6
- }
7
- append(input) {
8
- const validation = validate(input);
9
- if (!validation.ok)
10
- return validation;
11
- try {
12
- const id = randomUUID();
13
- const appliedAt = new Date().toISOString();
14
- this.db.connection
15
- .prepare(`
16
- INSERT INTO agent_seed_history(id, applied_at, from_version, to_version, agent_name, project, scope, outcome, reason, source)
17
- VALUES (@id, @appliedAt, @fromVersion, @toVersion, @agentName, @project, @scope, @outcome, @reason, @source)
18
- `)
19
- .run({
20
- id,
21
- appliedAt,
22
- fromVersion: input.fromVersion,
23
- toVersion: input.toVersion,
24
- agentName: input.agentName,
25
- project: input.project,
26
- scope: input.scope,
27
- outcome: input.outcome,
28
- reason: input.reason ?? null,
29
- source: input.source,
30
- });
31
- const entry = {
32
- id,
33
- appliedAt,
34
- fromVersion: input.fromVersion,
35
- toVersion: input.toVersion,
36
- agentName: input.agentName,
37
- project: input.project,
38
- scope: input.scope,
39
- outcome: input.outcome,
40
- reason: input.reason ?? null,
41
- source: input.source,
42
- };
43
- return ok(entry);
44
- }
45
- catch (cause) {
46
- return fail('Failed to append agent_seed_history entry', cause);
47
- }
48
- }
49
- listRecent(filters = {}) {
50
- try {
51
- const where = [];
52
- const parameters = {};
53
- for (const [key, column] of [
54
- ['project', 'project'],
55
- ['scope', 'scope'],
56
- ['agentName', 'agent_name'],
57
- ]) {
58
- const value = filters[key];
59
- if (value !== undefined) {
60
- where.push(`${column}=@${key}`);
61
- parameters[key] = value;
62
- }
63
- }
64
- const limit = Math.max(1, Math.min(filters.limit ?? 100, 1000));
65
- const rows = this.db.connection
66
- .prepare(`
67
- SELECT * FROM agent_seed_history
68
- ${where.length ? `WHERE ${where.join(' AND ')}` : ''}
69
- ORDER BY applied_at DESC
70
- LIMIT ${limit}
71
- `)
72
- .all(parameters);
73
- return ok(rows.map(map));
74
- }
75
- catch (cause) {
76
- return fail('Failed to list agent_seed_history entries', cause);
77
- }
78
- }
79
- }
80
- function validate(input) {
81
- if (!input.project.trim())
82
- return validationFailure('agent_seed_history project is required');
83
- if (input.scope !== 'project' && input.scope !== 'personal')
84
- return validationFailure('agent_seed_history scope is invalid');
85
- if (!input.agentName.trim())
86
- return validationFailure('agent_seed_history agentName is required');
87
- if (!Number.isInteger(input.toVersion) || input.toVersion <= 0)
88
- return validationFailure('agent_seed_history toVersion must be a positive integer');
89
- if (input.fromVersion !== null && (!Number.isInteger(input.fromVersion) || input.fromVersion < 0))
90
- return validationFailure('agent_seed_history fromVersion must be null or non-negative integer');
91
- if (!input.source.trim())
92
- return validationFailure('agent_seed_history source is required');
93
- if (input.outcome !== 'created' &&
94
- input.outcome !== 'upgraded' &&
95
- input.outcome !== 'noop' &&
96
- input.outcome !== 'overwrote-custom-instructions' &&
97
- input.outcome !== 'validation_failed' &&
98
- input.outcome !== 'db_error') {
99
- return validationFailure(`agent_seed_history outcome is invalid: ${input.outcome}`);
100
- }
101
- return ok(undefined);
102
- }
103
- function map(row) {
104
- return {
105
- id: String(row.id),
106
- appliedAt: String(row.applied_at),
107
- fromVersion: row.from_version === null || row.from_version === undefined ? null : Number(row.from_version),
108
- toVersion: Number(row.to_version),
109
- agentName: String(row.agent_name),
110
- project: String(row.project),
111
- scope: row.scope,
112
- outcome: String(row.outcome),
113
- reason: row.reason === null || row.reason === undefined ? null : String(row.reason),
114
- source: String(row.source),
115
- };
116
- }
117
- function ok(value) {
118
- return { ok: true, value };
119
- }
120
- function validationFailure(message) {
121
- return { ok: false, error: { code: 'validation_failed', message } };
122
- }
123
- function fail(message, cause) {
124
- const error = { code: 'validation_failed', message };
125
- if (cause !== undefined)
126
- error.cause = cause;
127
- return { ok: false, error };
128
- }
1
+ export * from '../../storage/agents/repositories/agent-seed-history.js';
@@ -1,200 +1 @@
1
- import { randomUUID } from 'node:crypto';
2
- export class AgentRepository {
3
- db;
4
- constructor(db) {
5
- this.db = db;
6
- }
7
- register(input) {
8
- const validation = validate(input);
9
- if (!validation.ok)
10
- return validation;
11
- const parentValidation = input.mode === 'subagent' ? this.validateParent(input) : ok(undefined);
12
- if (!parentValidation.ok)
13
- return parentValidation;
14
- const result = this.db.transaction(() => {
15
- const existing = this.findByNaturalKey(input.project, input.scope, input.name);
16
- if (existing !== undefined && existing.mode !== input.mode) {
17
- throw new AgentRegistryValidationError(`Agent already exists as ${existing.mode}: ${input.project}/${input.scope}/${input.name}`);
18
- }
19
- const id = existing?.id ?? randomUUID();
20
- const now = new Date().toISOString();
21
- const parameters = toRowParameters(input, id, existing?.created_at ?? now, now);
22
- this.db.connection
23
- .prepare(`
24
- INSERT INTO agents(id, project, scope, mode, name, description, instructions_json, capabilities_json, permissions_json, memory_json, workflows_json, skills_json, adapters_json, parent_agent_id, created_at, updated_at)
25
- VALUES (@id, @project, @scope, @mode, @name, @description, @instructionsJson, @capabilitiesJson, @permissionsJson, @memoryJson, @workflowsJson, @skillsJson, @adaptersJson, @parentAgentId, @createdAt, @updatedAt)
26
- ON CONFLICT(project, scope, name) DO UPDATE SET
27
- mode=excluded.mode,
28
- description=excluded.description,
29
- instructions_json=excluded.instructions_json,
30
- capabilities_json=excluded.capabilities_json,
31
- permissions_json=excluded.permissions_json,
32
- memory_json=excluded.memory_json,
33
- workflows_json=excluded.workflows_json,
34
- skills_json=excluded.skills_json,
35
- adapters_json=excluded.adapters_json,
36
- parent_agent_id=excluded.parent_agent_id,
37
- updated_at=excluded.updated_at
38
- `)
39
- .run(parameters);
40
- const found = this.getById(id);
41
- if (!found.ok)
42
- throw new Error(found.error.message);
43
- return found.value;
44
- });
45
- if (!result.ok && result.error.cause instanceof AgentRegistryValidationError) {
46
- return validationFailure(result.error.cause.message);
47
- }
48
- return result;
49
- }
50
- getById(id) {
51
- try {
52
- const row = this.db.connection.prepare('SELECT * FROM agents WHERE id=?').get(id);
53
- return row ? ok(map(row)) : missing(`Agent not found: ${id}`);
54
- }
55
- catch (cause) {
56
- return fail('Failed to read agent', cause);
57
- }
58
- }
59
- getByName(project, scope, name) {
60
- try {
61
- const row = this.findByNaturalKey(project, scope, name);
62
- return row ? ok(map(row)) : missing(`Agent not found: ${project}/${scope}/${name}`);
63
- }
64
- catch (cause) {
65
- return fail('Failed to read agent by name', cause);
66
- }
67
- }
68
- list(filters = {}) {
69
- try {
70
- const where = [];
71
- const parameters = {};
72
- for (const [key, column] of [
73
- ['project', 'project'],
74
- ['scope', 'scope'],
75
- ['mode', 'mode'],
76
- ['parentAgentId', 'parent_agent_id'],
77
- ]) {
78
- const value = filters[key];
79
- if (value !== undefined) {
80
- where.push(`${column}=@${key}`);
81
- parameters[key] = value;
82
- }
83
- }
84
- const rows = this.db.connection
85
- .prepare(`
86
- SELECT * FROM agents
87
- ${where.length ? `WHERE ${where.join(' AND ')}` : ''}
88
- ORDER BY name ASC
89
- `)
90
- .all(parameters);
91
- return ok(rows.map((row) => toSummary(map(row))));
92
- }
93
- catch (cause) {
94
- return fail('Failed to list agents', cause);
95
- }
96
- }
97
- findByNaturalKey(project, scope, name) {
98
- return this.db.connection.prepare('SELECT * FROM agents WHERE project=? AND scope=? AND name=?').get(project, scope, name);
99
- }
100
- validateParent(input) {
101
- if (input.parentAgentId === undefined)
102
- return validationFailure('Subagents require parentAgentId');
103
- const parent = this.getById(input.parentAgentId);
104
- if (!parent.ok)
105
- return validationFailure(parent.error.message);
106
- if (parent.value.mode !== 'agent')
107
- return validationFailure('Subagent parent must be an agent');
108
- if (parent.value.project !== input.project || parent.value.scope !== input.scope)
109
- return validationFailure('Subagent parent must share project and scope');
110
- return ok(undefined);
111
- }
112
- }
113
- function validate(input) {
114
- if (!input.project.trim())
115
- return validationFailure('Agent project is required');
116
- if (!input.name.trim())
117
- return validationFailure('Agent name is required');
118
- if (!input.description.trim())
119
- return validationFailure('Agent description is required');
120
- if (!input.instructions.value.trim())
121
- return validationFailure('Agent instructions are required');
122
- if (input.mode === 'agent' && input.parentAgentId !== undefined)
123
- return validationFailure('Top-level agents cannot have parentAgentId');
124
- return ok(undefined);
125
- }
126
- function toRowParameters(input, id, createdAt, updatedAt) {
127
- return {
128
- id,
129
- project: input.project,
130
- scope: input.scope,
131
- mode: input.mode,
132
- name: input.name,
133
- description: input.description,
134
- instructionsJson: JSON.stringify(input.instructions),
135
- capabilitiesJson: JSON.stringify(input.capabilities ?? []),
136
- permissionsJson: JSON.stringify(input.permissions ?? {}),
137
- memoryJson: JSON.stringify(input.memory ?? { scopes: [] }),
138
- workflowsJson: JSON.stringify(input.workflows ?? []),
139
- skillsJson: JSON.stringify(input.skills ?? []),
140
- adaptersJson: JSON.stringify(input.adapters ?? {}),
141
- parentAgentId: input.parentAgentId ?? null,
142
- createdAt,
143
- updatedAt,
144
- };
145
- }
146
- function map(row) {
147
- const value = {
148
- id: row.id,
149
- project: row.project,
150
- scope: row.scope,
151
- mode: row.mode,
152
- name: row.name,
153
- description: row.description,
154
- instructions: JSON.parse(row.instructions_json),
155
- capabilities: JSON.parse(row.capabilities_json),
156
- permissions: JSON.parse(row.permissions_json),
157
- memory: JSON.parse(row.memory_json),
158
- workflows: JSON.parse(row.workflows_json),
159
- skills: JSON.parse(row.skills_json),
160
- adapters: JSON.parse(row.adapters_json),
161
- createdAt: row.created_at,
162
- updatedAt: row.updated_at,
163
- };
164
- if (row.parent_agent_id !== null)
165
- value.parentAgentId = row.parent_agent_id;
166
- return value;
167
- }
168
- function toSummary(agent) {
169
- const value = {
170
- id: agent.id,
171
- project: agent.project,
172
- scope: agent.scope,
173
- mode: agent.mode,
174
- name: agent.name,
175
- description: agent.description,
176
- capabilities: agent.capabilities,
177
- createdAt: agent.createdAt,
178
- updatedAt: agent.updatedAt,
179
- };
180
- if (agent.parentAgentId !== undefined)
181
- value.parentAgentId = agent.parentAgentId;
182
- return value;
183
- }
184
- function ok(value) {
185
- return { ok: true, value };
186
- }
187
- function missing(message) {
188
- return { ok: false, error: { code: 'not_found', message } };
189
- }
190
- function validationFailure(message) {
191
- return { ok: false, error: { code: 'validation_failed', message } };
192
- }
193
- function fail(message, cause) {
194
- const error = { code: 'validation_failed', message };
195
- if (cause !== undefined)
196
- error.cause = cause;
197
- return { ok: false, error };
198
- }
199
- class AgentRegistryValidationError extends Error {
200
- }
1
+ export * from '../../storage/agents/repositories/agents.js';