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
@@ -0,0 +1,9 @@
1
+ export { runAgentCommand, runSkillCommand, runSubagentCommand } from './agent-skill-dispatcher.js';
2
+ export { runDefaultInteractiveEntrypoint } from './interactive-entrypoint-dispatcher.js';
3
+ export { runDoctorAliasCommand, runMcpDoctorCommand, runMcpDoctorOpenCodeCommand, runMcpInstallCommand, runMcpSetupCommand } from './mcp-dispatcher.js';
4
+ export { runMemoryCommand, runMemoryImportCommand, runOpenCodeCommand, runOrchestratorCommand, runSddCommand } from './memory-sdd-dispatcher.js';
5
+ export { runApprovalsCommand, runPermissionsCommand, runRunsCommand } from './run-permission-dispatcher.js';
6
+ export { applySetupPlanInput, collectRunDetails, collectRunInsights, createSetupLifecycleService, promptSetupWizard, readSetupStatus, runHomeTuiCommand, runInitCommand, runSetupApplyCommand, runSetupBackupCommand, runSetupLifecycleCommand, runSetupPlanCommand, runSetupReinstallApplyCommand, runSetupReinstallCommand, runSetupRollbackCommand, setupMcpEvidence, setupPlanInputFromFlags, } from './setup-dispatcher.js';
7
+ export { runProductNextCommand, runProductResumeCommand, runProductStatusCommand } from './status-dispatcher.js';
8
+ export { runVerificationPlanCommand, runVerificationReportCommand } from './verification-dispatcher.js';
9
+ export { runWorkflowExecuteCommand, runWorkflowPreviewCommand, runWorkflowRunCommand } from './workflow-dispatcher.js';
@@ -0,0 +1,14 @@
1
+ import { okText } from '../cli-help.js';
2
+ function defaultNoArgsGuidance() {
3
+ return ([
4
+ 'VGXNESS no-args entrypoint is safe and deterministic; no local DB was opened and no provider config was written.',
5
+ 'In a real terminal, `vgxness` opens the read-only Home TUI. In non-TTY contexts, use explicit CLI commands.',
6
+ 'Next: use `vgxness setup plan`, `vgxness init --plan`, `vgxness status`, `vgxness next`, or `vgxness --help`.',
7
+ ].join('\n') + '\n');
8
+ }
9
+ export async function runDefaultInteractiveEntrypoint(environment) {
10
+ void environment;
11
+ return okText(defaultNoArgsGuidance());
12
+ }
13
+ // Re-export helper for focused CLI tests.
14
+ export { defaultNoArgsGuidance };
@@ -0,0 +1,252 @@
1
+ import { resolveClaudeCodeScope } from '../../../adapters/claude/install/claude-code-scope.js';
2
+ import { installClaudeCodeMcpClient } from '../../../adapters/claude/install/client-install-claude-code.js';
3
+ import { planClaudeCodeMcpInstall } from '../../../adapters/claude/install/client-install-claude-code-contract.js';
4
+ import { installOpenCodeMcpClient } from '../../../adapters/opencode/install/client-install-opencode.js';
5
+ import { planOpenCodeMcpInstall } from '../../../adapters/opencode/install/client-install-opencode-contract.js';
6
+ import { createOpenCodeMcpVisibilityReport } from '../../../adapters/opencode/install/opencode-visibility.js';
7
+ import { computeEffectiveManagerInstructions } from '../../../agents/manager-profile-overlay-service.js';
8
+ import { createMcpClientSetupPreview, isMcpClientSetupProvider } from '../../../mcp/client-setup-preview.js';
9
+ import { createMcpDoctorReport } from '../../../mcp/doctor.js';
10
+ import { RunService } from '../../../runs/run-service.js';
11
+ import { isTerminalRunStatus } from '../../../runs/schema.js';
12
+ import { databasePathFor, databasePathSelectionFor, opencodeDiagnosticScopeFlag, opencodeInstallScopeFlag, optionalNumberFlag, optionalStringFlag, providerUserGlobalOnlyMigrationMessage, } from '../cli-flags.js';
13
+ import { usageFailure, validationFailure } from '../cli-help.js';
14
+ import { jsonResult, openCliDatabase, resultFailure } from '../cli-helpers.js';
15
+ import { renderDoctorReport } from '../doctor-renderer.js';
16
+ export function runMcpInstallCommand(parsed, environment) {
17
+ return (async () => {
18
+ const client = parsed.positionals[2];
19
+ if (client !== 'opencode' && client !== 'claude')
20
+ return usageFailure('mcp install requires client opencode or claude');
21
+ const databasePath = databasePathSelectionFor(parsed.flags, environment);
22
+ if (!databasePath.ok)
23
+ return resultFailure(databasePath);
24
+ const scope = opencodeInstallScopeFlag(parsed.flags, 'scope');
25
+ if (!scope.ok)
26
+ return resultFailure(scope);
27
+ const mcpOnly = parsed.flags['mcp-only'] === true || parsed.flags['no-agents'] === true;
28
+ const overwriteVgxness = parsed.flags['overwrite-vgxness'] === true || parsed.flags.reinstall === true;
29
+ if (client === 'claude') {
30
+ const claudeScope = claudeInstallScopeFlag(parsed.flags);
31
+ if (!claudeScope.ok)
32
+ return resultFailure(claudeScope);
33
+ if (parsed.flags.plan === true) {
34
+ return jsonResult({
35
+ ok: true,
36
+ value: planClaudeCodeMcpInstall({
37
+ cwd: environment.cwd,
38
+ databasePath: databasePath.value.path,
39
+ databasePathSource: databasePath.value.source,
40
+ overwriteVgxness,
41
+ scope: claudeScope.value,
42
+ }),
43
+ });
44
+ }
45
+ if (parsed.flags.yes !== true) {
46
+ return resultFailure({
47
+ ok: false,
48
+ error: { code: 'validation_failed', message: 'confirmation_required: `mcp install claude` requires explicit --yes before any project config write.' },
49
+ });
50
+ }
51
+ if (optionalStringFlag(parsed.flags, 'run-id') === undefined) {
52
+ return resultFailure({
53
+ ok: false,
54
+ error: {
55
+ code: 'validation_failed',
56
+ message: 'preflight_failed: Claude Code provider config writes require VGXNESS preflight; pass --run-id for an existing VGXNESS run before using --yes.',
57
+ },
58
+ });
59
+ }
60
+ const opened = openCliDatabase(databasePath.value.path);
61
+ if (!opened.ok)
62
+ return resultFailure(opened);
63
+ try {
64
+ const preflight = createClaudeCodeInstallPreflight(parsed, opened.value, environment);
65
+ const effectiveManagerInstructions = computeEffectiveManagerInstructions(opened.value);
66
+ const result = await installClaudeCodeMcpClient({
67
+ cwd: environment.cwd,
68
+ databasePath: databasePath.value.path,
69
+ databasePathSource: databasePath.value.source,
70
+ confirmed: true,
71
+ overwriteVgxness,
72
+ scope: claudeScope.value,
73
+ preflight,
74
+ ...(effectiveManagerInstructions === undefined ? {} : { effectiveManagerInstructions }),
75
+ });
76
+ return result.status === 'installed'
77
+ ? jsonResult({ ok: true, value: result })
78
+ : resultFailure({ ok: false, error: { code: 'validation_failed', message: `${result.reason}: ${result.message}` } });
79
+ }
80
+ finally {
81
+ opened.value.close();
82
+ }
83
+ }
84
+ if (parsed.flags.plan === true) {
85
+ return jsonResult({
86
+ ok: true,
87
+ value: planOpenCodeMcpInstall({
88
+ cwd: environment.cwd,
89
+ databasePath: databasePath.value.path,
90
+ databasePathSource: databasePath.value.source,
91
+ scope: scope.value,
92
+ env: environment.env,
93
+ mcpOnly,
94
+ overwriteVgxness,
95
+ }),
96
+ });
97
+ }
98
+ if (parsed.flags.yes !== true) {
99
+ const result = await installOpenCodeMcpClient({
100
+ cwd: environment.cwd,
101
+ databasePath: databasePath.value.path,
102
+ databasePathSource: databasePath.value.source,
103
+ scope: scope.value,
104
+ env: environment.env,
105
+ confirmed: false,
106
+ mcpOnly,
107
+ overwriteVgxness,
108
+ });
109
+ return result.status === 'installed'
110
+ ? jsonResult({ ok: true, value: result })
111
+ : resultFailure({
112
+ ok: false,
113
+ error: {
114
+ code: 'validation_failed',
115
+ message: `${result.reason}: ${result.message} Manual doctor command: ${result.manualTest.doctorCommand.join(' ')}`,
116
+ },
117
+ });
118
+ }
119
+ const opened = openCliDatabase(databasePath.value.path);
120
+ if (!opened.ok)
121
+ return resultFailure(opened);
122
+ try {
123
+ const effectiveManagerInstructions = computeEffectiveManagerInstructions(opened.value);
124
+ const result = await installOpenCodeMcpClient({
125
+ cwd: environment.cwd,
126
+ databasePath: databasePath.value.path,
127
+ databasePathSource: databasePath.value.source,
128
+ scope: scope.value,
129
+ env: environment.env,
130
+ confirmed: true,
131
+ mcpOnly,
132
+ overwriteVgxness,
133
+ ...(effectiveManagerInstructions === undefined ? {} : { effectiveManagerInstructions }),
134
+ });
135
+ return result.status === 'installed'
136
+ ? jsonResult({ ok: true, value: result })
137
+ : resultFailure({
138
+ ok: false,
139
+ error: {
140
+ code: 'validation_failed',
141
+ message: `${result.reason}: ${result.message} Manual doctor command: ${result.manualTest.doctorCommand.join(' ')}`,
142
+ },
143
+ });
144
+ }
145
+ finally {
146
+ opened.value.close();
147
+ }
148
+ })();
149
+ }
150
+ function claudeInstallScopeFlag(flags) {
151
+ const value = optionalStringFlag(flags, 'scope');
152
+ const resolved = resolveClaudeCodeScope(value, 'user');
153
+ if (!resolved.ok)
154
+ return validationFailure(resolved.error.message);
155
+ if (resolved.value.canonical === 'project' || resolved.value.canonical === 'local')
156
+ return validationFailure(providerUserGlobalOnlyMigrationMessage);
157
+ return { ok: true, value: resolved.value.canonical };
158
+ }
159
+ function createClaudeCodeInstallPreflight(parsed, database, environment) {
160
+ return (request) => {
161
+ const runId = optionalStringFlag(parsed.flags, 'run-id');
162
+ if (runId === undefined) {
163
+ return validationFailure('Claude Code provider config writes require VGXNESS preflight; pass --run-id for an existing VGXNESS run before using --yes.');
164
+ }
165
+ const service = new RunService(database);
166
+ const details = service.getRun(runId);
167
+ if (!details.ok)
168
+ return details;
169
+ if (isTerminalRunStatus(details.value.status)) {
170
+ return validationFailure(`VGXNESS run ${runId} is in terminal state '${details.value.status}'; Claude Code provider config writes require a live run (created/planned/running/needs-human). Start a new run with \`vgxness run start\` and pass its --run-id.`);
171
+ }
172
+ const phase = optionalStringFlag(parsed.flags, 'phase') ?? details.value.phase;
173
+ const agentId = optionalStringFlag(parsed.flags, 'agent-id') ?? details.value.selectedAgentId;
174
+ const preflight = service.preflightOperation({
175
+ runId,
176
+ category: request.category,
177
+ operation: request.operation,
178
+ workspaceRoot: environment.cwd,
179
+ targetPath: request.targetPath,
180
+ providerToolName: request.providerToolName,
181
+ phase,
182
+ agentId,
183
+ });
184
+ if (!preflight.ok)
185
+ return preflight;
186
+ if (preflight.value.outcome !== 'allowed') {
187
+ return validationFailure(`VGXNESS preflight ${preflight.value.outcome} for Claude Code provider config write: ${request.targetPath}`);
188
+ }
189
+ return { ok: true, value: preflight.value };
190
+ };
191
+ }
192
+ export function runMcpSetupCommand(parsed, environment) {
193
+ if (parsed.flags.preview !== true)
194
+ return usageFailure('mcp setup requires --preview; provider config installation is not supported');
195
+ const provider = optionalStringFlag(parsed.flags, 'provider') ?? 'opencode';
196
+ if (!isMcpClientSetupProvider(provider))
197
+ return resultFailure(validationFailure('--provider must be opencode or claude'));
198
+ const databasePath = databasePathSelectionFor(parsed.flags, environment);
199
+ if (!databasePath.ok)
200
+ return resultFailure(databasePath);
201
+ return jsonResult({
202
+ ok: true,
203
+ value: createMcpClientSetupPreview({ provider, databasePath: databasePath.value.path, databasePathSource: databasePath.value.source }),
204
+ });
205
+ }
206
+ export function runMcpDoctorCommand(parsed, environment, output = 'json') {
207
+ return (async () => {
208
+ if (parsed.positionals[2] === 'opencode')
209
+ return runMcpDoctorOpenCodeCommand(parsed, environment);
210
+ const timeoutMs = optionalNumberFlag(parsed.flags, 'timeout-ms');
211
+ if (!timeoutMs.ok)
212
+ return resultFailure(timeoutMs);
213
+ const databasePath = databasePathFor(parsed.flags, environment);
214
+ if (!databasePath.ok)
215
+ return resultFailure(databasePath);
216
+ const report = await createMcpDoctorReport({
217
+ cwd: environment.cwd,
218
+ databasePath: databasePath.value,
219
+ project: optionalStringFlag(parsed.flags, 'project') ?? 'vgxness',
220
+ change: optionalStringFlag(parsed.flags, 'change') ?? 'doctor-smoke',
221
+ timeoutMs: timeoutMs.value ?? 5_000,
222
+ env: environment.env,
223
+ });
224
+ if (output === 'json')
225
+ return { exitCode: report.ready ? 0 : 1, stdout: `${JSON.stringify(report, null, 2)}\n`, stderr: '' };
226
+ return {
227
+ exitCode: report.ready ? 0 : 1,
228
+ stdout: renderDoctorReport({
229
+ report,
230
+ project: optionalStringFlag(parsed.flags, 'project') ?? 'vgxness',
231
+ change: optionalStringFlag(parsed.flags, 'change') ?? 'doctor-smoke',
232
+ }),
233
+ stderr: '',
234
+ };
235
+ })();
236
+ }
237
+ export function runMcpDoctorOpenCodeCommand(parsed, environment) {
238
+ const scope = opencodeDiagnosticScopeFlag(parsed.flags, 'scope');
239
+ if (!scope.ok)
240
+ return resultFailure(scope);
241
+ const projectRoot = optionalStringFlag(parsed.flags, 'project-root');
242
+ const report = createOpenCodeMcpVisibilityReport({
243
+ cwd: environment.cwd,
244
+ env: environment.env,
245
+ scope: scope.value,
246
+ ...(projectRoot !== undefined ? { projectRoot } : {}),
247
+ });
248
+ return { exitCode: report.ready ? 0 : 1, stdout: `${JSON.stringify(report, null, 2)}\n`, stderr: '' };
249
+ }
250
+ export function runDoctorAliasCommand(parsed, environment) {
251
+ return runMcpDoctorCommand({ ...parsed, positionals: ['mcp', 'doctor', ...parsed.positionals.slice(1)] }, environment, parsed.flags.json === true ? 'json' : 'human');
252
+ }
@@ -0,0 +1,367 @@
1
+ import { AgentRegistryService } from '../../../agents/agent-registry-service.js';
2
+ import { ManagerProfileOverlayService } from '../../../agents/manager-profile-overlay-service.js';
3
+ import { ManagerProfileOverlayRepository } from '../../../agents/repositories/manager-profile-overlays.js';
4
+ import { createMemoryToolHandlers } from '../../../harness/tools/memory.js';
5
+ import { planMemoryImportDryRun, validateMemoryImportPackage, writeMemoryImportObservations } from '../../../memory/import/index.js';
6
+ import { MemoryService } from '../../../memory/memory-service.js';
7
+ import { createNaturalLanguagePlan } from '../../../orchestrator/natural-language-planner.js';
8
+ import { OpenCodeInjectionPreviewService } from '../../../providers/opencode/injection-preview.js';
9
+ import { RunService } from '../../../runs/run-service.js';
10
+ import { ArtifactPortabilityService } from '../../../sdd/artifact-portability-service.js';
11
+ import { buildSddCockpitSurfaceResponse } from '../../../sdd/cockpit-read-model.js';
12
+ import { normalizeSddArtifact, normalizeSddPhaseInput, sddPhases } from '../../../sdd/schema.js';
13
+ import { SddWorkflowService } from '../../../sdd/sdd-workflow-service.js';
14
+ import { SkillRegistryService } from '../../../skills/skill-registry-service.js';
15
+ import { acceptedAtFlag, databasePathSelectionFor, optionalNumberFlag, optionalScopeFlag, optionalStringFlag, optionalTrimmedFlag, requiredFlag, requiredTrimmedFlag, scopeFlag, } from '../cli-flags.js';
16
+ import { okText, usageFailure, validationFailure } from '../cli-help.js';
17
+ import { formatMemoryImportValidationErrors, jsonResult, openCliDatabase, readJsonFile, resultFailure, validateMemoryImportMode, writeJsonFile, } from '../cli-helpers.js';
18
+ import { renderSddArtifactAccepted, renderSddArtifactDetail, renderSddArtifactList, renderSddArtifactReopened, renderSddCockpit, renderSddContinuationPlan, renderSddNext, renderSddStatus, sddContinuationPlanFrom, } from '../sdd-renderer.js';
19
+ export function runMemoryCommand(command, parsed, database) {
20
+ const handlers = createMemoryToolHandlers({ service: new MemoryService(database), config: { localMemoryEnabled: true } });
21
+ const context = { actor: 'cli' };
22
+ if (command === 'save') {
23
+ const project = requiredFlag(parsed.flags, 'project');
24
+ const scope = scopeFlag(parsed.flags, 'scope', 'project');
25
+ const type = requiredFlag(parsed.flags, 'type');
26
+ const title = requiredFlag(parsed.flags, 'title');
27
+ const content = requiredFlag(parsed.flags, 'content');
28
+ if (!project.ok)
29
+ return resultFailure(project);
30
+ if (!scope.ok)
31
+ return resultFailure(scope);
32
+ if (!type.ok)
33
+ return resultFailure(type);
34
+ if (!title.ok)
35
+ return resultFailure(title);
36
+ if (!content.ok)
37
+ return resultFailure(content);
38
+ const topicKey = optionalStringFlag(parsed.flags, 'topic-key');
39
+ return jsonResult(handlers.saveObservation({
40
+ project: project.value,
41
+ scope: scope.value,
42
+ type: type.value,
43
+ title: title.value,
44
+ content: content.value,
45
+ ...(topicKey !== undefined ? { topicKey } : {}),
46
+ }, context));
47
+ }
48
+ if (command === 'search') {
49
+ const scope = optionalScopeFlag(parsed.flags, 'scope');
50
+ if (!scope.ok)
51
+ return resultFailure(scope);
52
+ const limit = optionalNumberFlag(parsed.flags, 'limit');
53
+ if (!limit.ok)
54
+ return resultFailure(limit);
55
+ const filters = {};
56
+ const query = optionalStringFlag(parsed.flags, 'query');
57
+ if (query !== undefined)
58
+ filters.query = query;
59
+ const project = optionalStringFlag(parsed.flags, 'project');
60
+ if (project !== undefined)
61
+ filters.project = project;
62
+ if (scope.value !== undefined)
63
+ filters.scope = scope.value;
64
+ const type = optionalStringFlag(parsed.flags, 'type');
65
+ if (type !== undefined)
66
+ filters.type = type;
67
+ if (limit.value !== undefined)
68
+ filters.limit = limit.value;
69
+ return jsonResult(handlers.searchObservations(filters, context));
70
+ }
71
+ return usageFailure(`Unknown memory command: ${command}`);
72
+ }
73
+ export function runMemoryImportCommand(parsed, environment) {
74
+ const mode = validateMemoryImportMode(parsed.flags);
75
+ if (!mode.ok)
76
+ return resultFailure(mode);
77
+ const file = requiredFlag(parsed.flags, 'file');
78
+ if (!file.ok)
79
+ return resultFailure(file);
80
+ const importPackage = readJsonFile(file.value, environment);
81
+ if (!importPackage.ok)
82
+ return resultFailure(importPackage);
83
+ const databasePath = databasePathSelectionFor(parsed.flags, environment);
84
+ if (!databasePath.ok)
85
+ return resultFailure(databasePath);
86
+ if (mode.value === 'dry-run')
87
+ return jsonResult(planMemoryImportDryRun({ packageJson: importPackage.value, targetDatabase: databasePath.value }));
88
+ const packageValidation = validateMemoryImportPackage(importPackage.value);
89
+ if (!packageValidation.ok)
90
+ return resultFailure(validationFailure(`Invalid memory import package: ${formatMemoryImportValidationErrors(packageValidation.errors)}`));
91
+ const opened = openCliDatabase(databasePath.value.path);
92
+ if (!opened.ok)
93
+ return resultFailure(opened);
94
+ try {
95
+ return jsonResult(writeMemoryImportObservations({
96
+ packageJson: importPackage.value,
97
+ targetDatabase: databasePath.value,
98
+ service: new MemoryService(opened.value),
99
+ duplicatePolicy: mode.value,
100
+ }));
101
+ }
102
+ finally {
103
+ opened.value.close();
104
+ }
105
+ }
106
+ export function runSddCommand(command, parsed, database, environment) {
107
+ const memory = new MemoryService(database);
108
+ const service = new SddWorkflowService(memory);
109
+ const project = requiredFlag(parsed.flags, 'project');
110
+ const change = requiredFlag(parsed.flags, 'change');
111
+ if (!project.ok)
112
+ return resultFailure(project);
113
+ if (!change.ok)
114
+ return resultFailure(change);
115
+ if (command === 'status') {
116
+ const status = service.getStatus({ project: project.value, change: change.value });
117
+ if (!status.ok || parsed.flags.json === true)
118
+ return jsonResult(status);
119
+ return okText(renderSddStatus({ project: project.value, status: status.value }));
120
+ }
121
+ if (command === 'next') {
122
+ const next = service.getNext({ project: project.value, change: change.value });
123
+ if (!next.ok || parsed.flags.json === true)
124
+ return jsonResult(next);
125
+ return okText(renderSddNext({ project: project.value, decision: next.value }));
126
+ }
127
+ if (command === 'continue') {
128
+ const next = service.getNext({ project: project.value, change: change.value });
129
+ if (!next.ok)
130
+ return jsonResult(next);
131
+ const cockpit = service.getCockpit({ project: project.value, change: change.value });
132
+ if (!cockpit.ok)
133
+ return jsonResult(cockpit);
134
+ const explicitDatabasePath = optionalStringFlag(parsed.flags, 'db');
135
+ const relatedRun = new RunService(database).findRelatedInterruptedSddRun({ project: project.value, change: change.value });
136
+ if (!relatedRun.ok)
137
+ return jsonResult(relatedRun);
138
+ const plan = sddContinuationPlanFrom({
139
+ project: project.value,
140
+ next: next.value,
141
+ cockpit: cockpit.value,
142
+ ...(relatedRun.value === undefined ? {} : { relatedRunContext: relatedRun.value }),
143
+ ...(explicitDatabasePath === undefined ? {} : { explicitDatabasePath }),
144
+ });
145
+ return parsed.flags.json === true ? jsonResult({ ok: true, value: plan }) : okText(renderSddContinuationPlan(plan));
146
+ }
147
+ if (command === 'cockpit') {
148
+ const cockpit = service.getCockpit({ project: project.value, change: change.value });
149
+ if (!cockpit.ok)
150
+ return jsonResult(cockpit);
151
+ const surface = buildSddCockpitSurfaceResponse(cockpit.value);
152
+ if (parsed.flags.json === true)
153
+ return jsonResult({ ok: true, value: surface });
154
+ return okText(renderSddCockpit(surface));
155
+ }
156
+ if (command === 'ready') {
157
+ const phase = requiredFlag(parsed.flags, 'phase');
158
+ if (!phase.ok)
159
+ return resultFailure(phase);
160
+ return jsonResult(service.getReady({ project: project.value, change: change.value, phase: phase.value }));
161
+ }
162
+ if (command === 'save-artifact') {
163
+ const phase = requiredFlag(parsed.flags, 'phase');
164
+ const content = requiredFlag(parsed.flags, 'content');
165
+ if (!phase.ok)
166
+ return resultFailure(phase);
167
+ if (!content.ok)
168
+ return resultFailure(content);
169
+ return jsonResult(service.saveArtifact({ project: project.value, change: change.value, phase: phase.value, content: content.value }));
170
+ }
171
+ if (command === 'accept-artifact') {
172
+ const phase = requiredTrimmedFlag(parsed.flags, 'phase');
173
+ const actor = requiredTrimmedFlag(parsed.flags, 'actor');
174
+ const displayName = optionalTrimmedFlag(parsed.flags, 'display-name');
175
+ const note = optionalTrimmedFlag(parsed.flags, 'note');
176
+ const acceptedAt = acceptedAtFlag(parsed.flags);
177
+ if (!phase.ok)
178
+ return resultFailure(phase);
179
+ if (!actor.ok)
180
+ return resultFailure(actor);
181
+ if (!displayName.ok)
182
+ return resultFailure(displayName);
183
+ if (!note.ok)
184
+ return resultFailure(note);
185
+ if (!acceptedAt.ok)
186
+ return resultFailure(acceptedAt);
187
+ const canonicalPhase = normalizeSddPhaseInput(phase.value);
188
+ if (canonicalPhase === undefined)
189
+ return resultFailure(validationFailure(`Unknown SDD phase: ${phase.value}. Expected one of: ${sddPhases.join(', ')}`));
190
+ const acceptedBy = {
191
+ type: 'human',
192
+ id: actor.value,
193
+ displayName: displayName.value ?? actor.value,
194
+ };
195
+ const accepted = service.acceptArtifact({
196
+ project: project.value,
197
+ change: change.value,
198
+ phase: canonicalPhase,
199
+ acceptedBy,
200
+ acceptedAt: acceptedAt.value,
201
+ ...(note.value === undefined ? {} : { note: note.value }),
202
+ });
203
+ if (!accepted.ok)
204
+ return resultFailure(accepted);
205
+ const view = {
206
+ project: accepted.value.project,
207
+ change: change.value,
208
+ phase: canonicalPhase,
209
+ topicKey: accepted.value.topicKey,
210
+ artifactId: accepted.value.id,
211
+ status: 'accepted',
212
+ acceptedBy,
213
+ acceptedAt: acceptedAt.value,
214
+ ...(note.value === undefined ? {} : { note: note.value }),
215
+ };
216
+ return parsed.flags.json === true ? jsonResult({ ok: true, value: view }) : okText(renderSddArtifactAccepted(view));
217
+ }
218
+ if (command === 'reopen-artifact') {
219
+ const phase = requiredTrimmedFlag(parsed.flags, 'phase');
220
+ const actor = requiredTrimmedFlag(parsed.flags, 'actor');
221
+ const displayName = optionalTrimmedFlag(parsed.flags, 'display-name');
222
+ const note = optionalTrimmedFlag(parsed.flags, 'note');
223
+ if (!phase.ok)
224
+ return resultFailure(phase);
225
+ if (!actor.ok)
226
+ return resultFailure(actor);
227
+ if (!displayName.ok)
228
+ return resultFailure(displayName);
229
+ if (!note.ok)
230
+ return resultFailure(note);
231
+ const canonicalPhase = normalizeSddPhaseInput(phase.value);
232
+ if (canonicalPhase === undefined)
233
+ return resultFailure(validationFailure(`Unknown SDD phase: ${phase.value}. Expected one of: ${sddPhases.join(', ')}`));
234
+ const reopenedBy = {
235
+ type: 'human',
236
+ id: actor.value,
237
+ displayName: displayName.value ?? actor.value,
238
+ };
239
+ const reopened = service.reopenArtifact({
240
+ project: project.value,
241
+ change: change.value,
242
+ phase: canonicalPhase,
243
+ reopenedBy,
244
+ ...(note.value === undefined ? {} : { note: note.value }),
245
+ });
246
+ if (!reopened.ok)
247
+ return resultFailure(reopened);
248
+ const normalized = normalizeSddArtifact(reopened.value);
249
+ const view = {
250
+ project: reopened.value.project,
251
+ change: change.value,
252
+ phase: canonicalPhase,
253
+ topicKey: reopened.value.topicKey,
254
+ artifactId: reopened.value.id,
255
+ status: normalized.metadata.status,
256
+ reopenedBy,
257
+ reopenedAt: normalized.metadata.reopen?.reopenedAt ?? normalized.metadata.updatedAt ?? reopened.value.updatedAt,
258
+ ...(note.value === undefined ? {} : { note: note.value }),
259
+ };
260
+ return parsed.flags.json === true ? jsonResult({ ok: true, value: view }) : okText(renderSddArtifactReopened(view));
261
+ }
262
+ if (command === 'get-artifact') {
263
+ const phase = requiredFlag(parsed.flags, 'phase');
264
+ if (!phase.ok)
265
+ return resultFailure(phase);
266
+ const result = service.getArtifact({ project: project.value, change: change.value, phase: phase.value });
267
+ if (!result.ok || parsed.flags.json === true)
268
+ return jsonResult(result);
269
+ return okText(renderSddArtifactDetail({ project: project.value, change: change.value, phase: phase.value, artifact: result.value }));
270
+ }
271
+ if (command === 'list-artifacts') {
272
+ if (parsed.flags.json === true)
273
+ return jsonResult(service.listArtifacts({ project: project.value, change: change.value }));
274
+ const result = service.listArtifacts({ project: project.value, change: change.value, payloadMode: 'compact' });
275
+ if (!result.ok)
276
+ return jsonResult(result);
277
+ return okText(renderSddArtifactList({ project: project.value, change: change.value, artifacts: result.value.artifacts }));
278
+ }
279
+ if (command === 'export') {
280
+ const portability = new ArtifactPortabilityService(memory, service);
281
+ const exported = portability.exportPackage({ project: project.value, change: change.value });
282
+ if (!exported.ok)
283
+ return resultFailure(exported);
284
+ const file = optionalStringFlag(parsed.flags, 'file');
285
+ if (file !== undefined) {
286
+ const written = writeJsonFile(file, exported.value, environment);
287
+ if (!written.ok)
288
+ return resultFailure(written);
289
+ }
290
+ return jsonResult(exported);
291
+ }
292
+ if (command === 'import') {
293
+ const file = requiredFlag(parsed.flags, 'file');
294
+ if (!file.ok)
295
+ return resultFailure(file);
296
+ const artifactPackage = readJsonFile(file.value, environment);
297
+ if (!artifactPackage.ok)
298
+ return resultFailure(artifactPackage);
299
+ const portability = new ArtifactPortabilityService(memory, service);
300
+ const input = { project: project.value, change: change.value, package: artifactPackage.value, overwrite: parsed.flags.overwrite === true };
301
+ return jsonResult(parsed.flags.write === true ? portability.importPackage(input) : portability.planImport(input));
302
+ }
303
+ return usageFailure(`Unknown sdd command: ${command}`);
304
+ }
305
+ export function runOrchestratorCommand(command, parsed, database) {
306
+ if (command !== 'preview')
307
+ return usageFailure(`Unknown orchestrator command: ${command}`);
308
+ const project = requiredFlag(parsed.flags, 'project');
309
+ const intent = requiredFlag(parsed.flags, 'intent');
310
+ if (!project.ok)
311
+ return resultFailure(project);
312
+ if (!intent.ok)
313
+ return resultFailure(intent);
314
+ const change = optionalStringFlag(parsed.flags, 'change');
315
+ const sdd = new SddWorkflowService(new MemoryService(database));
316
+ const sddContext = {};
317
+ if (change !== undefined) {
318
+ const status = sdd.getStatus({ project: project.value, change });
319
+ if (!status.ok)
320
+ return resultFailure(status);
321
+ const next = sdd.getNext({ project: project.value, change });
322
+ if (!next.ok)
323
+ return resultFailure(next);
324
+ sddContext.status = status.value;
325
+ sddContext.next = next.value;
326
+ }
327
+ return jsonResult({
328
+ ok: true,
329
+ value: createNaturalLanguagePlan({
330
+ project: project.value,
331
+ intent: intent.value,
332
+ ...(change !== undefined ? { change } : {}),
333
+ ...(change !== undefined ? { sdd: sddContext } : {}),
334
+ }),
335
+ });
336
+ }
337
+ export function runOpenCodeCommand(command, parsed, database, environment) {
338
+ if (command !== 'preview')
339
+ return usageFailure(`Unknown opencode command: ${command}`);
340
+ const scope = optionalScopeFlag(parsed.flags, 'scope');
341
+ if (!scope.ok)
342
+ return resultFailure(scope);
343
+ const agents = new AgentRegistryService(database);
344
+ const managerProfiles = new ManagerProfileOverlayService({ agents, overlays: new ManagerProfileOverlayRepository(database) });
345
+ const service = new OpenCodeInjectionPreviewService({
346
+ agents,
347
+ managerProfiles,
348
+ skills: new SkillRegistryService(database),
349
+ sdd: new SddWorkflowService(new MemoryService(database)),
350
+ });
351
+ const provider = optionalStringFlag(parsed.flags, 'provider');
352
+ const project = optionalStringFlag(parsed.flags, 'project');
353
+ const change = optionalStringFlag(parsed.flags, 'change');
354
+ const phase = optionalStringFlag(parsed.flags, 'phase');
355
+ const agentId = optionalStringFlag(parsed.flags, 'agent-id');
356
+ const agentName = optionalStringFlag(parsed.flags, 'agent');
357
+ return jsonResult(service.preview({
358
+ ...(provider !== undefined ? { provider } : {}),
359
+ ...(project !== undefined ? { project } : {}),
360
+ ...(change !== undefined ? { change } : {}),
361
+ ...(phase !== undefined ? { phase } : {}),
362
+ ...(agentId !== undefined ? { agentId } : {}),
363
+ ...(agentName !== undefined ? { agentName } : {}),
364
+ ...(scope.value !== undefined ? { scope: scope.value } : {}),
365
+ workspaceRoot: environment.cwd,
366
+ }));
367
+ }