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,245 +1 @@
1
- import { canonicalBehaviorContractVersion } from '../behavior/behavior-contract-manifest.js';
2
- export const canonicalDefaultAgentName = 'vgxness-manager';
3
- export const canonicalOpenCodeDefaultModel = 'openai/gpt-5.5';
4
- export const canonicalOpenCodeManagerReasoningEffort = 'high';
5
- export const canonicalPromptContractVersion = 18;
6
- export const canonicalSddSubagentNames = [
7
- 'vgxness-sdd-explore',
8
- 'vgxness-sdd-propose',
9
- 'vgxness-sdd-spec',
10
- 'vgxness-sdd-design',
11
- 'vgxness-sdd-tasks',
12
- 'vgxness-sdd-apply',
13
- 'vgxness-sdd-verify',
14
- 'vgxness-sdd-archive',
15
- 'vgxness-sdd-init',
16
- 'vgxness-sdd-onboard',
17
- ];
18
- export function validateCanonicalAgentManifest(manifest) {
19
- const errors = [];
20
- if (manifest.version !== 1)
21
- errors.push('manifest.version must be 1');
22
- if (!manifest.project.trim())
23
- errors.push('manifest.project is required');
24
- if (manifest.scope !== 'project' && manifest.scope !== 'personal')
25
- errors.push('manifest.scope must be project or personal');
26
- if (!Number.isInteger(manifest.promptContractVersion) || manifest.promptContractVersion <= 0)
27
- errors.push('manifest.promptContractVersion must be a positive integer');
28
- if (!manifest.defaultAgentName.trim())
29
- errors.push('manifest.defaultAgentName is required');
30
- const ids = new Set();
31
- const names = new Set();
32
- const managers = manifest.agents.filter((agent) => agent.mode === 'agent');
33
- if (managers.length !== 1)
34
- errors.push(`manifest must declare exactly one manager agent; found ${managers.length}`);
35
- if (!managers.some((agent) => agent.name === manifest.defaultAgentName))
36
- errors.push(`manifest.defaultAgentName ${manifest.defaultAgentName} must match the manager agent`);
37
- for (const agent of manifest.agents) {
38
- const label = `agent ${agent.name || agent.id || '<unknown>'}`;
39
- if (!agent.id.trim())
40
- errors.push(`${label}.id is required`);
41
- if (!agent.name.trim())
42
- errors.push(`${label}.name is required`);
43
- if (ids.has(agent.id))
44
- errors.push(`duplicate canonical agent id: ${agent.id}`);
45
- if (names.has(agent.name))
46
- errors.push(`duplicate canonical agent name: ${agent.name}`);
47
- ids.add(agent.id);
48
- names.add(agent.name);
49
- if (agent.builtIn !== true)
50
- errors.push(`${label}.builtIn must be true`);
51
- if (agent.mode === 'subagent' && !agent.parentAgentName?.trim())
52
- errors.push(`${label}.parentAgentName is required for subagents`);
53
- for (const [provider, support] of Object.entries(agent.providerSupport)) {
54
- if (provider !== support.adapter)
55
- errors.push(`${label}.providerSupport.${provider}.adapter must match provider key`);
56
- if (support.level !== 'managed' && support.level !== 'preview' && support.level !== 'unsupported')
57
- errors.push(`${label}.providerSupport.${provider}.level is invalid`);
58
- if ((support.level === 'preview' || support.level === 'unsupported') && !support.reason?.trim())
59
- errors.push(`${label}.providerSupport.${provider}.reason is required for ${support.level}`);
60
- }
61
- }
62
- for (const agent of manifest.agents.filter((agent) => agent.mode === 'subagent')) {
63
- if (agent.parentAgentName !== undefined && !names.has(agent.parentAgentName))
64
- errors.push(`agent ${agent.name}.parentAgentName is missing: ${agent.parentAgentName}`);
65
- }
66
- return errors.length === 0 ? { ok: true } : { ok: false, errors };
67
- }
68
- function commonSupport() {
69
- return {
70
- opencode: { adapter: 'opencode', level: 'managed' },
71
- claude: { adapter: 'claude', level: 'managed' },
72
- };
73
- }
74
- function managerDefinition() {
75
- return {
76
- id: canonicalDefaultAgentName,
77
- mode: 'agent',
78
- builtIn: true,
79
- name: canonicalDefaultAgentName,
80
- description: 'Coordinates VGXNESS MCP state and SDD sub-agents while routing Tier 0-2 lightweight work, Tier 3 preflight validation, and Tier 4 formal SDD.',
81
- instructions: { kind: 'inline', value: registryManagerInstructionsV11 },
82
- capabilities: ['sdd-orchestration', 'agent-routing', 'mcp-coordination', 'project-local-automation', 'coordination', 'workflow-selection', 'resume'],
83
- permissions: { read: 'allow', edit: 'ask', shell: 'ask', git: 'ask', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' },
84
- memory: { scopes: ['project'] },
85
- workflows: ['explore', 'quickfix', 'plan', 'build', 'debug', 'sdd', 'agent-seeding', 'opencode-install'],
86
- skills: ['vgxness-sdd-manager'],
87
- adapters: {
88
- opencode: {
89
- model: canonicalOpenCodeDefaultModel,
90
- config: {
91
- options: {
92
- reasoningEffort: canonicalOpenCodeManagerReasoningEffort,
93
- vgxnessPromptContractVersion: canonicalPromptContractVersion,
94
- vgxnessBehaviorContractVersion: canonicalBehaviorContractVersion,
95
- },
96
- permission: { task: createCanonicalOpenCodeSddTaskPermissions(), ...createCanonicalOpenCodeSddMcpToolPermissions() },
97
- },
98
- },
99
- },
100
- providerSupport: commonSupport(),
101
- };
102
- }
103
- function subagentDefinition(name) {
104
- const data = subagentData[name];
105
- return {
106
- id: name,
107
- mode: 'subagent',
108
- builtIn: true,
109
- parentAgentName: canonicalDefaultAgentName,
110
- name,
111
- description: data.seedDescription,
112
- instructions: { kind: 'inline', value: data.seedInstructions },
113
- capabilities: data.capabilities,
114
- permissions: data.permissions,
115
- memory: { scopes: ['project'] },
116
- workflows: data.workflows,
117
- skills: data.skills,
118
- adapters: { opencode: { model: canonicalOpenCodeDefaultModel, config: { hidden: true, options: { vgxnessPromptContractVersion: canonicalPromptContractVersion, vgxnessBehaviorContractVersion: canonicalBehaviorContractVersion } } } },
119
- providerSupport: commonSupport(),
120
- };
121
- }
122
- export function createCanonicalOpenCodeSddTaskPermissions() {
123
- return Object.fromEntries([['*', 'deny'], ...canonicalSddSubagentNames.map((name) => [name, 'allow'])]);
124
- }
125
- export function createCanonicalOpenCodeSddMcpToolPermissions() {
126
- return {
127
- vgxness_sdd_status: 'allow',
128
- vgxness_sdd_next: 'allow',
129
- vgxness_sdd_ready: 'allow',
130
- vgxness_sdd_get_readiness: 'allow',
131
- vgxness_sdd_get_artifact: 'allow',
132
- vgxness_sdd_list_artifacts: 'allow',
133
- vgxness_sdd_cockpit: 'allow',
134
- vgxness_context_cockpit: 'allow',
135
- vgxness_resume_context: 'allow',
136
- vgxness_agent_resolve: 'allow',
137
- vgxness_sdd_save_artifact: 'allow',
138
- vgxness_memory_search: 'allow',
139
- vgxness_memory_get: 'allow',
140
- vgxness_memory_save: 'allow',
141
- vgxness_memory_update: 'allow',
142
- vgxness_skill_payload: 'allow',
143
- vgxness_run_list: 'allow',
144
- vgxness_run_preflight: 'allow',
145
- };
146
- }
147
- export function createCanonicalOpenCodeSddSubagentPrompt(name) {
148
- const phase = name.replace('vgxness-sdd-', '');
149
- const common = `You are the VGXNESS SDD ${phase} executor, not the orchestrator. Do this phase's work yourself. Do NOT delegate, do NOT call task/delegate, and do NOT launch sub-agents. Use provided SDD artifacts, VGXNESS MCP state, and repo evidence as needed. Retrieve full artifacts through MCP when needed; do not expect manager-pasted verbose artifacts. Do not depend on local skill files; this inline contract is sufficient. Preserve unrelated user work, keep output concise, and report evidence.`;
150
- const contract = subagentData[name].phaseContract;
151
- return `${common}\n\nPhase contract: ${contract}\n\nBegin your output with a compact result envelope containing required fields: status, executive_summary, artifacts_examined, skill_resolution, risks, next_recommended. Evidence minimum: artifacts examined; MCP/status/readiness checked; repository evidence inspected/not inspected and why; residual uncertainty/risks.\n\nSDD governance v1: SDD artifact acceptance is human-only. Do not mark, describe, or persist generated phase output as accepted unless the user explicitly accepts it or an MCP acceptance record shows a human actor. Before advancing phases, use VGXNESS MCP readiness/status tools so draft, rejected, superseded, or legacy artifacts are not treated as accepted prerequisites. For risky VGX-managed side effects, use VGXNESS run preflight/reporting and include runId, phase, and agent context when available. OpenCode native/provider tools are audit-only and non-hard-blocking in governance v1; do not claim they are hard-blocked by OpenCode config.\n\nSubagent memory policy: Read memory when useful. Write durable memory only when phase/user/run policy allows; preflight/consent if governed/risky. memoryCapture: review-only; no auto-persist. Memory is advisory only and never proves SDD acceptance/readiness/verification/approval/authorization. SDD artifacts are canonical for phase deliverables and governance state. Do not save full SDD artifacts, transcripts, raw logs, hidden reasoning, secrets, credentials, or sensitive data. Report memory candidates separately when writes are not authorized.\n\nProvider-native daily progression: daily SDD progression happens inside OpenCode through conversation, VGXNESS MCP, and hidden SDD subagents. Do not instruct the user to run terminal SDD phase commands for normal daily flow. Return phase output, decisions, changed files, and evidence so the manager can persist artifacts and advance through MCP. Preserve confirmation/preflight requirements for apply, verify, init, archive, edits, shell, git, provider-tool, secrets, destructive, privileged, or ambiguous operations.`;
152
- }
153
- /**
154
- * Provider runtime prompt for generated provider managers.
155
- * This feeds the OpenCode default config and Claude generated agent files; it is
156
- * intentionally separate from registry/seed instructions below.
157
- */
158
- export const canonicalOpenCodeManagerPrompt = `# VGXNESS Manager
159
-
160
- Bind to \`vgxness-manager\` only.
161
-
162
- ## Role
163
- Coordinate SDD; keep chat thin, use MCP state, delegate to exact SDD subagent. Coach while coordinating: teach briefly; explain practical tradeoffs, risk/effort/unknowns; challenge weak assumptions; keep user in control; avoid lectures. Always verify before agreeing with technical claims. When blocked, ask one focused question and stop.
164
-
165
- ## Non-negotiable governance
166
- - VGXNESS uses SQLite artifacts/control-plane; OpenCode as primary provider; artifacts are not openspec files. Do not write to \`openspec/\`.
167
- - SDD artifact acceptance is human-only. Artifact presence is not acceptance. Never infer or fabricate acceptance from generated output, subagent/model output, file presence, confidence, or legacy artifacts; draft/rejected/superseded/stale/unaccepted artifacts are not accepted until a human acceptance record exists.
168
- - Before phase advancement, call \`vgxness_sdd_status\`/\`vgxness_sdd_next\` plus \`vgxness_sdd_ready\` or \`vgxness_sdd_get_readiness\`.
169
- - Before risky VGX-managed side effects (edit, shell/tests, git, network, provider-tool, secrets, external-directory, destructive, privileged, ambiguous), call \`vgxness_run_preflight\` with runId/workflow/phase/agent when available. Stop on approval/block; never invent approval.
170
- - Direct human acceptance via \`vgxness_sdd_accept_artifact\` is not a generic SDD write: do not preflight solely for it; require exact project/change/phase, \`acceptedBy.type\` \`"human"\`, non-empty \`acceptedBy.id\`, and eligible status/readiness. Shortcut only for acceptance/trusted draft autorun; excludes edits, shell/tests, git, provider config, memory writes, external paths, secrets, destructive/privileged/ambiguous operations.
171
- - bounded read/search repo tools may be enabled for inspection; bash, edit, and write remain denied. Diagnostics are config-level evidence, not host runtime proof.
172
- - Do not mutate provider/global OpenCode config. Do not publish packages unless explicitly requested. Never revert/overwrite unrelated user work. Preserve \`permission.task\` deny-by-default with only exact known SDD subagents.
173
- - Do not change provider model/reasoning config unless explicitly requested.
174
-
175
- ## Routing
176
- Use lightest safe path: T0-2 direct, T3 preflight, T4 SDD.
177
- Do not invent or invoke generic reviewer subagents; use only exact canonical SDD subagents or MCP guidance.
178
-
179
- ## Provider-native daily flow
180
- SDD happens in OpenCode conversation + VGXNESS MCP/subagents. No terminal SDD phase commands. CLI is an escape hatch for bootstrap, doctor, recovery, setup gaps, or explicit request.
181
-
182
- ## MCP playbook
183
- - Start/resume/recover: call \`vgxness_resume_context\` first for generic resume/continue; pass \`explicitChange\` only for an exact user change. Use completed run history for retrospective/status prompts; interrupted candidates are old blockers. \`vgxness_context_cockpit\`/\`vgxness_session_restore\` are advisory after the gate. Do not infer a change from \`context_cockpit.memoryPreviews\`. End/pause/handoff/compact with \`vgxness_session_close\` when a session id exists.
184
- - Bounded resume/start hard stop: for generic "continue"/"sigamos"/"continuemos"/"resume development" without an explicit change, call \`vgxness_resume_context\` before any SDD continuation/status. \`proceed-explicit-change\` or \`proceed-single-active-work\` may continue with that change; \`inspect-interrupted-run\` means inspect it. On \`ask-change\`: do not call \`vgxness_agent_resolve\`; do not call SDD continuation/status, do not create runs, do not inspect repo files/native repo tools, do not use Glob/Read/docs, do not delegate to SDD subagents, do not start runs or use skill fallback; ask one question: "¿qué cambio retomamos?".
185
- - Proposal clarity: if product/business clarity is missing, run a proposal question round.
186
- - SDD artifacts: guide with \`vgxness_sdd_next\`/\`vgxness_sdd_cockpit\`; read/list compact (payloadMode: "compact") via \`vgxness_sdd_get_artifact\`/\`vgxness_sdd_list_artifacts\`. After hidden subagent returns a valid current-phase artifact, save draft immediately with \`vgxness_sdd_save_artifact\`, summarize it, then ask: "Do you accept this artifact and should I continue to the next phase?" Use \`vgxness_sdd_reopen_artifact\` for rejected artifacts only, with explicit human actor/audit context.
187
- - delegated phase subagent outputs: inspect delegated result-envelope completeness before SDD artifact persistence or phase advancement (status, executive_summary, artifacts_examined, skill_resolution, risks, next_recommended); this is prompt guidance only, not runtime parsing/rejection.
188
- - Trusted draft autorun: when the exact \`proposal\` artifact is already accepted, run \`spec -> design -> tasks\` without extra human confirmation via subagents; save drafts with \`vgxness_sdd_save_artifact\`. This is draft-only planning, not acceptance or completion. Excludes explore/proposal/apply-progress/verify/archive, accepted overwrites, risky side effects; re-check status/readiness.
189
- - Acceptance/readiness: check exact status/readiness; call \`vgxness_sdd_accept_artifact\` directly with audit context; re-check before reporting. Do not preflight solely for exact acceptance. Affirmative continue/sí/yes/dale to the immediate accept+continue prompt is explicit human acceptance; only save/no/revise keeps draft and must not advance. Never silently auto-accept. Use \`vgxness_governance_report\` for audit.
190
- - Memory: search/get for prior work and duplicate avoidance. Save/update only durable, actionable, scoped, evidence-backed, compact, non-sensitive observations. Prefer \`vgxness_memory_update\` over duplicate save when you know the id/topic key. Treat lifecycle \`memoryCapture\` as review-first advisory metadata only: no automatic persistence, no durable queue. Do not save full SDD artifacts, transcripts, raw logs, hidden reasoning, secrets, credentials, or sensitive user data. Memory is advisory only and never proves SDD acceptance/readiness/verification/approval/authorization. SDD artifacts are canonical for phase deliverables and governance state. OpenCode previews/handoff are read-only and capture-free. Choose scope intentionally: \`project\` for repo facts, \`personal\` for reusable user preferences; \`memory-write\` requires preflight/explicit consent when governed or risky.
191
- - Active-work memory uses existing memory APIs only: \`active-work/{change}/summary\` (+others). No secrets or hidden reasoning. Active-work memory is advisory only; never proves SDD acceptance/readiness, verification, approval, or authorization.
192
- - Agents/skills: Use \`vgxness_skill_payload\` first for contextual skill guidance; preview/context-only, no provider execution or config writes. Use \`vgxness_skill_index\`/\`vgxness_skill_search\` only for explicit diagnostics/catalog, not normal resume fallback. Resolve phase with \`vgxness_agent_resolve\`; if none resolves, report evidence and ask for the smallest decision instead of inventing agent ids. \`vgxness_agent_activate\` and \`vgxness_opencode_manager_payload\` are preview/context-only. \`vgxness_manager_profile_get\` before changes; \`vgxness_manager_profile_set\` needs explicit human authorization.
193
- - Runs/recovery: \`vgxness_run_start\`/\`vgxness_run_list\`/\`vgxness_run_get\`; checkpoint with \`vgxness_run_checkpoint\`, preflight with \`vgxness_run_preflight\`, close with \`vgxness_run_finalize\`. Unknown runId: \`vgxness_run_resume_candidates\`. For interrupted runs, inspect with \`vgxness_run_resume_inspect\`, then call \`vgxness_run_resume_gate\` with approvalId from pendingApprovals/inspect; never pass runId as approvalId. Follow safe \`recommendedActions[]\`.
194
- - Provider diagnostics: \`vgxness_provider_status\`/\`vgxness_provider_doctor\` read-only; report \`providerEvidence.evidenceLevel\` and \`hostToolPresenceVerified\` limits; use vgxness_provider_status for configured/phase/next questions plus vgxness_provider_doctor for read-only OpenCode MCP/manager health.
195
-
196
- ## Minimum flows
197
- - Proposal/spec/design/tasks: status/next -> readiness -> prereqs -> subagent -> save draft -> summarize -> ask accept+continue; trusted autorun may draft spec/design/tasks after accepted proposal; drafts stay unaccepted until human acceptance.
198
- - Apply/verify: prereqs -> artifacts -> exact subagent -> start/recover run -> preflight writes/shell/git/tests -> delegate -> checkpoint -> save -> finalize. Before apply/PR, review workload guard: estimate size/risk/reviewer load; recommend slicing into work units or chained PRs when large.
199
- - Config/provider/prompt change: inspect manager/profile/payload first; persistence needs explicit human authorization.
200
- - Recovery: MCP first. Continue: use \`vgxness_sdd_continue\`; read-only/advisory: no provider execution, run creation, artifact mutation, provider config/openspec writes, or acceptance/apply-progress bypass. CLI \`vgxness sdd continue\` is human fallback only. \`vgxness resume --project\` is for candidate runs. The removed experimental \`vgxness code\` runtime is not an SDD fallback.
201
-
202
- ## Delegation thresholds
203
- Default to delegation for SDD phase-shaped work, repository exploration beyond one narrow lookup, implementation, verification, incident recovery, or multi-step analysis. Inline only conversational guidance, single-fact lookup, MCP/status/readiness checks, and trivial mechanical edits when safe. When uncertain between inline work and subagent work, delegate to the exact smallest SDD subagent. Never delegate to unknown agents; use exact phase mapping.
204
-
205
- ## Output
206
- Be concise.`;
207
- /**
208
- * Registry/seed instructions for the manager agent definition.
209
- * These feed the canonical manifest, checked-in seed, boot upgrade, registry
210
- * render baselines, and manager profile overlay baselines; they are
211
- * intentionally distinct from the provider runtime prompt above.
212
- */
213
- const registryManagerInstructionsV11 = [
214
- 'You are the VGXNESS SDD coordinator, not a monolithic executor. Coach briefly while coordinating: explain useful tradeoffs, be realistic about risks and unknowns, respectfully challenge weak assumptions with better options, keep the user comfortable and in control, and stay concise. Always verify before agreeing with technical claims; when blocked, ask one focused question and stop.',
215
- 'Default to delegation for SDD phase-shaped work, repository exploration beyond one narrow lookup, implementation, verification, incident recovery, or multi-step analysis. Inline only conversational guidance, single-fact lookup, MCP/status/readiness checks, and trivial mechanical edits when safe. When uncertain between inline work and subagent work, delegate to the exact smallest SDD subagent. do not invent or invoke generic reviewer subagents; use exact canonical SDD subagents or MCP guidance only.',
216
- 'Use VGXNESS MCP as the durable control plane: for generic resume/continue prompts call vgxness_resume_context first, pass explicitChange only when the user gave an exact valid change, and do not infer a change from context_cockpit.memoryPreviews; for retrospective/status prompts such as "what did we do?" or "qué habíamos hecho", inspect recent completed run history first with vgxness_run_list completed and mention interrupted candidates only as old blockers, not as latest truth; vgxness_context_cockpit and vgxness_session_restore are advisory context only after the gate, and context cockpit previews, memoryPreviews, and SDD summaries are advisory only. Close/pause/compact with vgxness_session_close using actor manager plus an actionable summary when a current session id exists.',
217
- 'For generic continue/sigamos/continuemos/resume development without an explicit user change, call vgxness_resume_context before any SDD status/continuation. If decision is proceed-explicit-change or proceed-single-active-work, then call SDD tools for that change. If inspect-interrupted-run, call vgxness_run_resume_inspect. If ask-change (no interrupted run, no exact user-specified change, and no single parsed active-work change), hard stop: do not call vgxness_agent_resolve; do not call vgxness_sdd_status or vgxness_sdd_continue, do not create runs, do not inspect repo files/native repo tools, do not delegate to SDD subagents, do not start runs, do not use skill_index/skill_search fallback, or invent agent ids; ask one question: "¿qué cambio retomamos?".',
218
- 'Manager save-then-accept behavior: after a valid hidden phase subagent artifact, save it immediately as a draft with sdd_save_artifact, summarize the saved draft, then ask whether the human accepts it and wants to continue to the next phase. An affirmative continue/sí/yes/dale reply in that immediate context is explicit human acceptance. A reply of only save/no/revise keeps draft and must not advance. Never silently auto-accept.',
219
- 'Check SDD status/next/ready/cockpit, read prerequisites with sdd_get_artifact or sdd_list_artifacts, use public sdd_continue/internal vgxness_sdd_continue first for advisory read-only continuation plans, use sdd_reopen_artifact only for rejected artifacts returning to draft with explicit human actor/audit context, save phase output with sdd_save_artifact only by governance; inspect delegated result-envelope completeness before SDD artifact persistence or phase advancement (status, executive_summary, artifacts_examined, skill_resolution, risks, next_recommended) as prompt guidance only, not runtime parsing/rejection; when proposal is accepted, spec/design/tasks may run sequentially as draft-only autorun without extra confirmation, while acceptance remains human-only. Memory capture policy: save/update only durable, future-relevant, actionable, scoped, evidence-backed, compact, non-sensitive observations; lifecycle memoryCapture candidates are review-first advisory metadata only, not persisted automatically, not a durable candidate queue, and still require explicit save/update policy and consent; prefer update by known id/topicKey over duplicate saves; never save full SDD artifacts, transcripts, raw logs, hidden reasoning, secrets, credentials, or sensitive user data. Memory is advisory only and never proves SDD acceptance, readiness, verification, approval, or authorization. SDD artifacts are canonical for phase deliverables/governance state. OpenCode previews/handoff are read-only and capture-free. Choose project scope for repo-specific facts and personal scope for reusable user preferences; memory-write requires preflight/explicit consent when governed/risky. Resolve exact SDD subagents before substantial phase work, use runs/checkpoints/preflight/finalize for significant implementation or verification, use run_resume_candidates for unknown runId, inspect interrupted runs by runId with run_resume_inspect, then call run_resume_gate with approvalId from pendingApprovals/inspect; never pass runId as approvalId; use vgxness_provider_status for configured/phase/next questions plus vgxness_provider_doctor for read-only OpenCode MCP/manager health.',
220
- 'When sdd_continue/vgxness_sdd_continue returns recommendedActions, prefer the first safe action with agentCallable true and humanOnly false; use targetTool plus suggestedArgs as the starting point, and stop for requiresHumanConfirmation, requiresProviderWriteConsent, requiresPreflight, ambiguous, destructive, privileged, external, or outside-approval actions. For readiness, use cockpit/status/readiness to distinguish missing, draft, ready, blocked, and accepted; never infer acceptance. For provider evidence, report providerEvidence.evidenceLevel, hostToolPresenceVerified, notes, and limitations; do not claim true host presence unless evidence explicitly verifies it.',
221
- 'Prefer payloadMode=compact for manager-facing status/context reads, SDD artifact reads/lists, and activation handoffs so the primary context stays clean; request payloadMode=verbose only when full artifact contents, provider payloads, or skill context are actually needed, preferably inside delegated phase subagents.',
222
- 'MCP sdd_continue must not execute providers, create runs, mutate artifacts, write provider config/openspec, bypass human acceptance, or treat draft-run as apply-progress.',
223
- 'CLI is an escape hatch for bootstrap, doctor, rollback, recovery, MCP unavailable/setup missing, or explicit user request; do not tell users to run terminal SDD phase commands for normal daily flow. CLI vgxness sdd continue is a human/manual fallback only; vgxness resume --project is for candidate runs. The removed experimental vgxness code runtime is not an SDD fallback.',
224
- 'OpenCode native/provider tools are governance-v1 audit-only/non-hard-blocking; report warnings, never say they are hard-blocked by config.',
225
- ].join(' ');
226
- const subagentData = {
227
- 'vgxness-sdd-explore': { seedDescription: 'Investigates codebase context and identifies options before proposals.', seedInstructions: 'You are the explore phase executor, not the orchestrator. Do not delegate. Explore repository evidence for the requested SDD change. Do not implement code changes. Return concise findings, risks, and recommended next artifacts.', capabilities: ['sdd-exploration', 'codebase-research', 'discovery'], permissions: { read: 'allow', edit: 'deny', shell: 'allow', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:explore'], skills: ['vgxness-sdd-explore'], phaseContract: 'Investigate codebase context, constraints, options, and risks. Do not implement code changes. Return findings and recommended next artifacts.' },
228
- 'vgxness-sdd-propose': { seedDescription: 'Creates focused change proposals from exploration findings.', seedInstructions: 'You are the proposal phase executor, not the orchestrator. Do not delegate. Create a focused SDD proposal from exploration evidence. Do not implement code changes. Identify scope, tradeoffs, non-goals, and acceptance direction.', capabilities: ['sdd-proposal', 'proposal-planning', 'scope-definition'], permissions: { read: 'allow', edit: 'deny', shell: 'deny', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:proposal'], skills: ['vgxness-sdd-proposal'], phaseContract: 'Create or refine a focused SDD proposal from exploration evidence. Do not implement code changes. Include scope, tradeoffs, non-goals, and acceptance direction.' },
229
- 'vgxness-sdd-spec': { seedDescription: 'Writes detailed requirements and acceptance criteria for SDD changes.', seedInstructions: 'You are the spec phase executor, not the orchestrator. Do not delegate. Write a detailed SDD specification with requirements, acceptance criteria, edge cases, and out-of-scope items. Do not implement code changes.', capabilities: ['sdd-specification', 'requirements', 'acceptance-criteria'], permissions: { read: 'allow', edit: 'deny', shell: 'deny', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:spec'], skills: ['vgxness-sdd-spec'], phaseContract: 'Write requirements, acceptance criteria, edge cases, and out-of-scope items. Do not implement code changes.' },
230
- 'vgxness-sdd-design': { seedDescription: 'Creates technical design from accepted proposals and accepted or trusted draft specs.', seedInstructions: 'You are the design phase executor, not the orchestrator. Do not delegate. Create a technical design grounded in the repository. Identify affected modules, data shapes, risks, rollout, and verification strategy. Do not implement code changes.', capabilities: ['sdd-design', 'technical-design', 'architecture-planning'], permissions: { read: 'allow', edit: 'deny', shell: 'ask', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:design'], skills: ['vgxness-sdd-design'], phaseContract: 'Create technical design grounded in the repository: affected modules, data shapes, safety, rollout, and verification. You may use an accepted spec or a trusted draft spec produced in the manager autorun chain. Do not implement code changes.' },
231
- 'vgxness-sdd-tasks': { seedDescription: 'Breaks accepted or trusted draft specs and designs into implementation tasks.', seedInstructions: 'You are the tasks phase executor, not the orchestrator. Do not delegate. Break the SDD spec/design into small, ordered, testable implementation tasks. Include a Review Workload Forecast covering expected review size, risk, and reviewer burden. Do not implement code changes.', capabilities: ['sdd-tasks', 'task-breakdown', 'implementation-planning'], permissions: { read: 'allow', edit: 'deny', shell: 'deny', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:tasks'], skills: ['vgxness-sdd-tasks'], phaseContract: 'Break accepted or trusted draft spec/design into small ordered testable implementation tasks. Include a Review Workload Forecast covering expected review size, risk, and reviewer burden. Do not implement code changes.' },
232
- 'vgxness-sdd-apply': { seedDescription: 'Implements code changes from SDD task definitions.', seedInstructions: 'You are the apply phase executor, not the orchestrator. Implement only the assigned SDD tasks directly. Do not delegate. Keep changes small, preserve unrelated user work, run focused checks when authorized, and report changed files plus verification evidence.', capabilities: ['sdd-apply', 'implementation', 'code-change'], permissions: { read: 'allow', edit: 'ask', shell: 'allow', git: 'ask', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:apply-progress'], skills: ['vgxness-sdd-apply'], phaseContract: 'Implement only assigned SDD tasks. Preserve unrelated dirty files and user work. Use focused tests when authorized. Report changed files, tests/evidence, and residual risks.' },
233
- 'vgxness-sdd-verify': { seedDescription: 'Validates implementation against specs, tasks, and evidence.', seedInstructions: 'You are the verify phase executor, not the orchestrator. Do not delegate. Verify the implementation against SDD artifacts. Prefer focused local tests, inspect evidence, and report residual risk. Do not implement unrelated changes.', capabilities: ['sdd-verify', 'verification', 'test-review', 'risk-review'], permissions: { read: 'allow', edit: 'deny', shell: 'ask', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:verify'], skills: ['vgxness-sdd-verify'], phaseContract: 'Validate implementation against SDD artifacts and task acceptance criteria. Prefer focused local tests and evidence review. Do not implement unrelated changes.' },
234
- 'vgxness-sdd-archive': { seedDescription: 'Archives completed SDD change artifacts and outcomes.', seedInstructions: 'You are the archive phase executor, not the orchestrator. Do not delegate. Archive completed SDD artifacts and summarize final outcome, verification, and follow-ups. Confirm before writes beyond the requested archive artifact.', capabilities: ['sdd-archive', 'artifact-archive', 'release-notes'], permissions: { read: 'allow', edit: 'ask', shell: 'deny', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:archive'], skills: ['vgxness-sdd-archive'], phaseContract: 'Archive completed SDD outcome with summary, verification evidence, follow-ups, and residual risks. Confirm before any repository writes beyond the requested archive artifact.' },
235
- 'vgxness-sdd-init': { seedDescription: 'Bootstraps SDD context and project configuration.', seedInstructions: 'You are the init phase executor, not the orchestrator. Do not delegate. Initialize SDD context and project setup safely. Prefer read-only diagnostics and explicit user confirmation before writes or provider/global config changes.', capabilities: ['sdd-init', 'setup', 'bootstrap'], permissions: { read: 'allow', edit: 'ask', shell: 'ask', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:init', 'setup'], skills: [], phaseContract: 'Bootstrap SDD context and project setup safely. Prefer diagnostics/read-only inspection and require explicit confirmation before writes or provider/global config changes.' },
236
- 'vgxness-sdd-onboard': { seedDescription: 'Guides users through a complete SDD cycle using their real codebase.', seedInstructions: 'You are the onboard phase executor, not the orchestrator. Do not delegate. Guide onboarding through the SDD workflow. Ask for the smallest missing decision, keep repository assumptions explicit, and confirm before writes or provider/global config changes.', capabilities: ['sdd-onboard', 'workflow-guidance', 'project-onboarding'], permissions: { read: 'allow', edit: 'ask', shell: 'ask', git: 'deny', memory: 'allow', 'provider-tool': 'deny', secrets: 'deny' }, workflows: ['sdd:onboard', 'sdd'], skills: [], phaseContract: 'Guide the user through the SDD cycle with the smallest missing decision at each step. Keep assumptions explicit and confirm before writes or provider/global config changes.' },
237
- };
238
- export const canonicalAgentManifest = {
239
- version: 1,
240
- project: 'vgxness',
241
- scope: 'project',
242
- promptContractVersion: canonicalPromptContractVersion,
243
- defaultAgentName: canonicalDefaultAgentName,
244
- agents: [managerDefinition(), ...canonicalSddSubagentNames.map(subagentDefinition)],
245
- };
1
+ export * from '../domain/agents/canonical-agent-manifest.js';
@@ -1,236 +1 @@
1
- import { canonicalAgentManifest, canonicalDefaultAgentName, canonicalOpenCodeManagerReasoningEffort, canonicalOpenCodeManagerPrompt, canonicalPromptContractVersion, canonicalSddSubagentNames, createCanonicalOpenCodeSddSubagentPrompt, createCanonicalOpenCodeSddTaskPermissions, validateCanonicalAgentManifest, } from './canonical-agent-manifest.js';
2
- import { composeManagerInstructions } from './manager-profile-overlay-service.js';
3
- export function canonicalManifestValidationErrors(manifest = canonicalAgentManifest) {
4
- const validation = validateCanonicalAgentManifest(manifest);
5
- return validation.ok ? [] : validation.errors;
6
- }
7
- export function projectCanonicalAgentManifestToSeed(manifest = canonicalAgentManifest) {
8
- assertValidCanonicalManifest(manifest);
9
- const agents = manifest.agents.filter((agent) => agent.mode === 'agent').map(toSeedAgent);
10
- const subagents = manifest.agents.filter((agent) => agent.mode === 'subagent').map(toSeedSubagent);
11
- return { version: 1, project: manifest.project, scope: manifest.scope, agents, subagents };
12
- }
13
- export function projectCanonicalAgentManifestToOpenCode(manifest = canonicalAgentManifest) {
14
- assertValidCanonicalManifest(manifest);
15
- const manager = manifest.agents.find((agent) => agent.name === manifest.defaultAgentName && agent.mode === 'agent');
16
- if (manager === undefined)
17
- throw new Error(`Canonical OpenCode projection missing manager agent: ${manifest.defaultAgentName}`);
18
- const agents = {
19
- [canonicalDefaultAgentName]: {
20
- description: 'VGXNESS SDD Manager - coordinates MCP state and SDD sub-agents, avoids inline execution when delegation is safer',
21
- mode: 'primary',
22
- ...(manager.adapters?.opencode?.model !== undefined ? { model: manager.adapters.opencode.model } : {}),
23
- options: { reasoningEffort: canonicalOpenCodeManagerReasoningEffort, vgxnessPromptContractVersion: canonicalPromptContractVersion },
24
- permission: openCodeManagerPermissionsFor(manager),
25
- prompt: canonicalOpenCodeManagerPrompt,
26
- reasoningEffort: canonicalOpenCodeManagerReasoningEffort,
27
- tools: openCodeManagerTools(),
28
- variant: '',
29
- },
30
- };
31
- for (const name of canonicalSddSubagentNames) {
32
- const subagent = manifest.agents.find((agent) => agent.name === name && agent.mode === 'subagent');
33
- if (subagent === undefined)
34
- throw new Error(`Canonical OpenCode projection missing subagent: ${name}`);
35
- agents[name] = {
36
- description: openCodeSubagentDescriptions[name],
37
- hidden: true,
38
- mode: 'subagent',
39
- ...(subagent.adapters?.opencode?.model !== undefined ? { model: subagent.adapters.opencode.model } : {}),
40
- options: { vgxnessPromptContractVersion: canonicalPromptContractVersion },
41
- prompt: createCanonicalOpenCodeSddSubagentPrompt(name),
42
- permission: openCodePermissionsFor(subagent),
43
- tools: { bash: true, edit: true, read: true, write: true },
44
- };
45
- }
46
- return { defaultAgent: canonicalDefaultAgentName, agents };
47
- }
48
- export function withEffectiveOpenCodeManagerInstructions(projection, instructions) {
49
- const trimmed = instructions?.trim() ?? '';
50
- if (trimmed === '')
51
- return projection;
52
- const manager = projection.agents[projection.defaultAgent];
53
- if (manager === undefined)
54
- return projection;
55
- return {
56
- defaultAgent: projection.defaultAgent,
57
- agents: {
58
- ...projection.agents,
59
- [projection.defaultAgent]: { ...manager, prompt: composeManagerInstructions(manager.prompt, trimmed) },
60
- },
61
- };
62
- }
63
- export function projectCanonicalAgentManifestToClaudeCode(manifest = canonicalAgentManifest) {
64
- assertValidCanonicalManifest(manifest);
65
- const manager = manifest.agents.find((agent) => agent.name === manifest.defaultAgentName && agent.mode === 'agent');
66
- if (manager === undefined)
67
- throw new Error(`Canonical Claude projection missing manager agent: ${manifest.defaultAgentName}`);
68
- const agents = [
69
- {
70
- name: canonicalDefaultAgentName,
71
- canonicalName: canonicalDefaultAgentName,
72
- description: manager.description,
73
- fileName: `${canonicalDefaultAgentName}.md`,
74
- instructions: canonicalOpenCodeManagerPrompt,
75
- promptContractVersion: canonicalPromptContractVersion,
76
- },
77
- ];
78
- for (const mapping of claudeSddNameMappings) {
79
- const subagent = manifest.agents.find((agent) => agent.name === mapping.canonical && agent.mode === 'subagent');
80
- if (subagent === undefined)
81
- throw new Error(`Canonical Claude projection missing subagent: ${mapping.canonical}`);
82
- agents.push({
83
- name: mapping.claude,
84
- canonicalName: mapping.canonical,
85
- description: claudeSubagentDescriptions[mapping.claude],
86
- fileName: `${mapping.claude}.md`,
87
- instructions: createCanonicalOpenCodeSddSubagentPrompt(mapping.canonical),
88
- promptContractVersion: canonicalPromptContractVersion,
89
- });
90
- }
91
- return { defaultAgent: canonicalDefaultAgentName, agents };
92
- }
93
- export function withEffectiveManagerInstructions(projection, instructions) {
94
- const trimmed = instructions?.trim() ?? '';
95
- if (trimmed === '')
96
- return projection;
97
- const agents = projection.agents.map((agent) => agent.canonicalName === projection.defaultAgent ? { ...agent, instructions: composeManagerInstructions(agent.instructions, trimmed) } : agent);
98
- return { defaultAgent: projection.defaultAgent, agents };
99
- }
100
- export function projectCanonicalAgentManifestToClaudeProjectMemory(manifest = canonicalAgentManifest) {
101
- assertValidCanonicalManifest(manifest);
102
- return {
103
- defaultAgent: canonicalDefaultAgentName,
104
- promptContractVersion: canonicalPromptContractVersion,
105
- repositoryInstructions: 'AGENTS.md',
106
- guidance: [
107
- `Use \`${canonicalDefaultAgentName}\` as the VGXNESS project manager/personality for this project.`,
108
- 'Follow project-root `AGENTS.md` when present.',
109
- 'Use VGXNESS MCP as durable state for SDD artifacts, runs, memory, agents, permissions, and provider diagnostics.',
110
- 'SDD artifact acceptance is human-only; never infer acceptance from generated output or file presence.',
111
- 'Before phase advancement, check VGXNESS SDD readiness/status.',
112
- 'Preserve confirmation and preflight requirements for risky side effects.',
113
- 'Do not tell users to run terminal SDD phase commands for normal daily SDD flow.',
114
- 'Be concise, evidence-grounded, user-controlled, practical, and willing to challenge unsafe assumptions.',
115
- ],
116
- };
117
- }
118
- export function canonicalProviderProjection(provider, manifest = canonicalAgentManifest) {
119
- assertValidCanonicalManifest(manifest);
120
- const normalized = provider.trim().toLowerCase();
121
- if (normalized === 'opencode')
122
- return { provider: normalized, level: 'managed', manifest, projection: projectCanonicalAgentManifestToOpenCode(manifest) };
123
- if (normalized === 'claude')
124
- return { provider: normalized, level: 'managed', manifest, projection: projectCanonicalAgentManifestToClaudeCode(manifest) };
125
- return { provider: normalized, level: 'unsupported', manifest, reason: `Unsupported provider projection: ${provider}` };
126
- }
127
- function assertValidCanonicalManifest(manifest) {
128
- const errors = canonicalManifestValidationErrors(manifest);
129
- if (errors.length > 0)
130
- throw new Error(`Invalid canonical agent manifest: ${errors.join('; ')}`);
131
- }
132
- function openCodePermissionsFor(agent, additional = {}) {
133
- const adapterPermission = asRecord(agent.adapters?.opencode?.config?.permission);
134
- return { ...adapterPermission, ...additional, ...mapCanonicalPermissionsToOpenCode(agent.permissions) };
135
- }
136
- function openCodeManagerPermissionsFor(agent) {
137
- return {
138
- ...openCodePermissionsFor(agent, { task: createCanonicalOpenCodeSddTaskPermissions() }),
139
- bash: 'deny',
140
- edit: 'deny',
141
- read: 'allow',
142
- write: 'deny',
143
- };
144
- }
145
- function openCodeManagerTools() {
146
- return {
147
- bash: false,
148
- delegate: true,
149
- delegation_list: true,
150
- delegation_read: true,
151
- edit: false,
152
- glob: true,
153
- grep: true,
154
- read: true,
155
- write: false,
156
- };
157
- }
158
- function mapCanonicalPermissionsToOpenCode(permissions) {
159
- const mapped = {};
160
- if (permissions === undefined)
161
- return mapped;
162
- for (const [canonical, openCode] of openCodePermissionMappings) {
163
- const decision = permissions[canonical];
164
- if (decision !== undefined)
165
- mapped[openCode] = decision;
166
- }
167
- return mapped;
168
- }
169
- function asRecord(value) {
170
- if (value === null || typeof value !== 'object' || Array.isArray(value))
171
- return {};
172
- return value;
173
- }
174
- const openCodePermissionMappings = [
175
- ['read', 'read'],
176
- ['edit', 'edit'],
177
- ['shell', 'bash'],
178
- ['external-directory', 'external_directory'],
179
- ];
180
- function toSeedAgent(agent) {
181
- const seed = {
182
- name: agent.name,
183
- description: agent.description,
184
- instructions: agent.instructions,
185
- };
186
- if (agent.capabilities !== undefined)
187
- seed.capabilities = agent.capabilities;
188
- if (agent.permissions !== undefined)
189
- seed.permissions = agent.permissions;
190
- if (agent.memory !== undefined)
191
- seed.memory = agent.memory;
192
- if (agent.workflows !== undefined)
193
- seed.workflows = agent.workflows;
194
- if (agent.skills !== undefined)
195
- seed.skills = agent.skills;
196
- if (agent.adapters !== undefined)
197
- seed.adapters = agent.adapters;
198
- return seed;
199
- }
200
- function toSeedSubagent(agent) {
201
- if (agent.parentAgentName === undefined)
202
- throw new Error(`Canonical subagent ${agent.name} is missing parentAgentName`);
203
- return { ...toSeedAgent(agent), parentAgentName: agent.parentAgentName };
204
- }
205
- const openCodeSubagentDescriptions = {
206
- 'vgxness-sdd-explore': 'Investigate codebase and think through ideas',
207
- 'vgxness-sdd-propose': 'Create change proposals from explorations',
208
- 'vgxness-sdd-spec': 'Write detailed specifications from proposals',
209
- 'vgxness-sdd-design': 'Create technical design from proposals',
210
- 'vgxness-sdd-tasks': 'Break down specs and designs into implementation tasks',
211
- 'vgxness-sdd-apply': 'Implement code changes from task definitions',
212
- 'vgxness-sdd-verify': 'Validate implementation against specs',
213
- 'vgxness-sdd-archive': 'Archive completed change artifacts',
214
- 'vgxness-sdd-init': 'Bootstrap SDD context and project configuration',
215
- 'vgxness-sdd-onboard': 'Guide user through a complete SDD cycle using their real codebase',
216
- };
217
- const claudeSddNameMappings = [
218
- { canonical: 'vgxness-sdd-explore', claude: 'vgxness-sdd-explore' },
219
- { canonical: 'vgxness-sdd-propose', claude: 'vgxness-sdd-proposal' },
220
- { canonical: 'vgxness-sdd-spec', claude: 'vgxness-sdd-spec' },
221
- { canonical: 'vgxness-sdd-design', claude: 'vgxness-sdd-design' },
222
- { canonical: 'vgxness-sdd-tasks', claude: 'vgxness-sdd-tasks' },
223
- { canonical: 'vgxness-sdd-apply', claude: 'vgxness-sdd-apply-progress' },
224
- { canonical: 'vgxness-sdd-verify', claude: 'vgxness-sdd-verify' },
225
- { canonical: 'vgxness-sdd-archive', claude: 'vgxness-sdd-archive' },
226
- ];
227
- const claudeSubagentDescriptions = {
228
- 'vgxness-sdd-explore': 'Investigate codebase context and risks for VGXNESS SDD changes.',
229
- 'vgxness-sdd-proposal': 'Create focused proposals for VGXNESS SDD changes.',
230
- 'vgxness-sdd-spec': 'Write detailed specifications for VGXNESS SDD changes.',
231
- 'vgxness-sdd-design': 'Create technical designs for VGXNESS SDD changes.',
232
- 'vgxness-sdd-tasks': 'Break accepted designs into implementation tasks.',
233
- 'vgxness-sdd-apply-progress': 'Implement accepted VGXNESS SDD tasks and report apply progress.',
234
- 'vgxness-sdd-verify': 'Verify VGXNESS SDD implementation evidence and risks.',
235
- 'vgxness-sdd-archive': 'Archive completed VGXNESS SDD outcomes and follow-ups.',
236
- };
1
+ export * from '../application/agents/canonical-agent-projection.js';
@@ -1,60 +1 @@
1
- import { AgentRegistryService } from './agent-registry-service.js';
2
- import { ManagerProfileOverlayRepository } from './repositories/manager-profile-overlays.js';
3
- export class ManagerProfileOverlayService {
4
- dependencies;
5
- constructor(dependencies) {
6
- this.dependencies = dependencies;
7
- }
8
- save(input) {
9
- return this.dependencies.overlays.save(input);
10
- }
11
- get(project, scope, managerName) {
12
- return this.dependencies.overlays.get(project, scope, managerName);
13
- }
14
- resolveEffectiveManager(input) {
15
- const manager = this.dependencies.agents.getAgentByName(input.project, input.scope, input.managerName);
16
- if (!manager.ok)
17
- return manager;
18
- if (manager.value.mode !== 'agent')
19
- return validationFailure('Effective manager requires a top-level agent');
20
- const overlay = this.dependencies.overlays.get(input.project, input.scope, input.managerName);
21
- if (!overlay.ok) {
22
- if (overlay.error.code === 'not_found')
23
- return ok({ manager: manager.value });
24
- return overlay;
25
- }
26
- return ok({
27
- manager: {
28
- ...manager.value,
29
- instructions: { kind: 'inline', value: composeManagerInstructions(manager.value.instructions.value, overlay.value.instructions) },
30
- },
31
- overlay: overlay.value,
32
- });
33
- }
34
- }
35
- export function composeManagerInstructions(baseline, overlay) {
36
- const baselineInstructions = baseline.trim();
37
- const overlayInstructions = overlay.trim();
38
- if (baselineInstructions === '')
39
- return overlayInstructions;
40
- if (overlayInstructions === '')
41
- return baselineInstructions;
42
- if (overlayInstructions.includes(baselineInstructions))
43
- return overlayInstructions;
44
- return `${baselineInstructions}\n\n## Manager profile overlay\n${overlayInstructions}`;
45
- }
46
- function ok(value) {
47
- return { ok: true, value };
48
- }
49
- function validationFailure(message) {
50
- return { ok: false, error: { code: 'validation_failed', message } };
51
- }
52
- export function computeEffectiveManagerInstructions(database, project = 'vgxness', scope = 'project', managerName = 'vgxness-manager') {
53
- const registry = new AgentRegistryService(database);
54
- const overlays = new ManagerProfileOverlayRepository(database);
55
- const service = new ManagerProfileOverlayService({ agents: registry, overlays });
56
- const resolved = service.resolveEffectiveManager({ project, scope, managerName });
57
- if (!resolved.ok || resolved.value.overlay === undefined)
58
- return undefined;
59
- return resolved.value.manager.instructions.value.trim() || undefined;
60
- }
1
+ export * from '../application/agents/manager-profile-overlay-service.js';
@@ -1,30 +1 @@
1
- export function resolveAgentProfileModel(input) {
2
- const providerAdapter = input.providerAdapter?.trim() || 'opencode';
3
- const adapters = input.agent.adapters;
4
- const adapterNames = Object.keys(adapters);
5
- const adapter = adapters[providerAdapter];
6
- if (adapterNames.length > 0 && adapter === undefined) {
7
- return validationFailure(`Agent ${input.agent.name} does not declare provider adapter: ${providerAdapter}`);
8
- }
9
- const model = adapter?.model?.trim();
10
- if (model !== undefined && model.length > 0) {
11
- const profile = profileFromAdapter(adapter?.config);
12
- return ok({ providerAdapter, model, ...(profile === undefined ? {} : { profile }), source: 'agent-adapter-model', warnings: [] });
13
- }
14
- const previewModel = `${providerAdapter}-preview`;
15
- const warnings = adapter === undefined
16
- ? [`Agent does not declare adapters; using provider-neutral preview model ${previewModel}.`]
17
- : [`Adapter ${providerAdapter} does not declare a model; using ${previewModel}.`];
18
- const profile = profileFromAdapter(adapter?.config);
19
- return ok({ providerAdapter, model: previewModel, ...(profile === undefined ? {} : { profile }), source: 'provider-preview-default', warnings });
20
- }
21
- function profileFromAdapter(config) {
22
- const profile = config?.profile;
23
- return typeof profile === 'string' && profile.trim().length > 0 ? profile.trim() : undefined;
24
- }
25
- function ok(value) {
26
- return { ok: true, value };
27
- }
28
- function validationFailure(message) {
29
- return { ok: false, error: { code: 'validation_failed', message } };
30
- }
1
+ export * from '../application/agents/profile-model-routing.js';