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,38 @@
1
+ import { errorEnvelope, successEnvelope, } from '../../schema.js';
2
+ function toEnvelope(tool, result) {
3
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
4
+ }
5
+ export function agentResolveEnvelope(input, services) {
6
+ return toEnvelope('vgxness_agent_resolve', services.agents.resolveAgents(input));
7
+ }
8
+ export function agentActivateEnvelope(input, services) {
9
+ return toEnvelope('vgxness_agent_activate', services.activation.activate(input));
10
+ }
11
+ export function managerProfileGetEnvelope(input, services) {
12
+ if (services.managerProfiles === undefined)
13
+ return errorEnvelope('validation_failed', 'Manager profile service is not available', 'vgxness_manager_profile_get');
14
+ return toEnvelope('vgxness_manager_profile_get', services.managerProfiles.resolveEffectiveManager({
15
+ project: input.project,
16
+ scope: input.scope ?? 'project',
17
+ managerName: input.managerName ?? 'vgxness-manager',
18
+ }));
19
+ }
20
+ export function managerProfileSetEnvelope(input, services) {
21
+ if (services.managerProfiles === undefined)
22
+ return errorEnvelope('validation_failed', 'Manager profile service is not available', 'vgxness_manager_profile_set');
23
+ const baseline = services.managerProfiles.resolveEffectiveManager({ project: input.project, scope: input.scope, managerName: input.managerName });
24
+ if (!baseline.ok)
25
+ return errorEnvelope(baseline.error.code, baseline.error.message, 'vgxness_manager_profile_set');
26
+ const saved = services.managerProfiles.save(input);
27
+ if (!saved.ok)
28
+ return errorEnvelope(saved.error.code, saved.error.message, 'vgxness_manager_profile_set');
29
+ return toEnvelope('vgxness_manager_profile_set', services.managerProfiles.resolveEffectiveManager({ project: input.project, scope: input.scope, managerName: input.managerName }));
30
+ }
31
+ export function opencodeManagerPayloadEnvelope(input, services) {
32
+ return toEnvelope('vgxness_opencode_manager_payload', services.opencodeManagerPayload.build(input));
33
+ }
34
+ export function opencodeHandoffPreviewEnvelope(input, services) {
35
+ if (services.opencodeHandoffPreview === undefined)
36
+ return errorEnvelope('validation_failed', 'OpenCode handoff preview service is not available', 'vgxness_opencode_handoff_preview');
37
+ return toEnvelope('vgxness_opencode_handoff_preview', services.opencodeHandoffPreview.build(input));
38
+ }
@@ -0,0 +1,12 @@
1
+ import { ContextCockpitSnapshotService } from '../../../../mcp/control-plane-snapshot-service.js';
2
+ import { ResumeContextGateService } from '../../../../mcp/resume-context-gate-service.js';
3
+ import { errorEnvelope, successEnvelope } from '../../schema.js';
4
+ function toEnvelope(tool, result) {
5
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
6
+ }
7
+ export function contextCockpitEnvelope(input, services) {
8
+ return toEnvelope('vgxness_context_cockpit', new ContextCockpitSnapshotService({ memory: services.memory, sdd: services.sdd }).build(input));
9
+ }
10
+ export function resumeContextEnvelope(input, services) {
11
+ return toEnvelope('vgxness_resume_context', new ResumeContextGateService({ memory: services.memory, runs: services.runs }).build(input));
12
+ }
@@ -0,0 +1,95 @@
1
+ import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
2
+ import { errorEnvelope, successEnvelope, } from '../../schema.js';
3
+ function memoryContext(sessionId) {
4
+ const context = { actor: 'mcp-control-plane' };
5
+ if (sessionId !== undefined)
6
+ context.sessionId = sessionId;
7
+ return context;
8
+ }
9
+ function toEnvelope(tool, result) {
10
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
11
+ }
12
+ function auditedMemoryEnvelope(tool, result, services, audit) {
13
+ if (result.ok && audit.runId !== undefined) {
14
+ services.runs.appendEvent({
15
+ runId: audit.runId,
16
+ kind: 'timeline',
17
+ title: audit.title,
18
+ payload: audit.payload(result.value),
19
+ relatedType: audit.relatedType,
20
+ ...(audit.relatedId === undefined ? {} : { relatedId: audit.relatedId }),
21
+ });
22
+ }
23
+ return toEnvelope(tool, result);
24
+ }
25
+ function sddSaveAuditPayload(input) {
26
+ return {
27
+ runId: input.runId,
28
+ title: 'Audit: sdd-artifact-saved',
29
+ relatedType: 'sdd-artifact',
30
+ relatedId: `${input.change}:${input.phase}`,
31
+ payload: (value) => ({
32
+ eventType: 'sdd-artifact-saved',
33
+ project: input.project,
34
+ change: input.change,
35
+ phase: input.phase,
36
+ topicKey: value.topicKey,
37
+ artifactId: value.id,
38
+ ...(input.agentId === undefined ? {} : { agentId: input.agentId }),
39
+ }),
40
+ };
41
+ }
42
+ function isMemorySddArtifactSaveInput(input) {
43
+ return 'kind' in input && input.kind === 'sdd-artifact';
44
+ }
45
+ function isMemorySddArtifactGetInput(input) {
46
+ return 'kind' in input && input.kind === 'sdd-artifact';
47
+ }
48
+ function memoryCapturePolicyErrorEnvelope(tool, decision) {
49
+ return errorEnvelope('validation_failed', `Memory capture policy rejected explicit durable memory write. Reason codes: ${decision.reasonCodes.join(', ')}`, tool, {
50
+ policy: {
51
+ service: 'AgentMemoryCaptureService',
52
+ version: decision.version,
53
+ allowed: decision.allowed,
54
+ severity: decision.severity,
55
+ persisted: decision.persisted,
56
+ reasonCodes: decision.reasonCodes,
57
+ warnings: decision.warnings,
58
+ redactions: decision.redactions,
59
+ },
60
+ });
61
+ }
62
+ export function memorySaveEnvelope(input, services) {
63
+ if (isMemorySddArtifactSaveInput(input)) {
64
+ const { kind: _kind, ...artifactInput } = input;
65
+ return auditedMemoryEnvelope('vgxness_memory_save', services.sdd.saveArtifact(artifactInput), services, sddSaveAuditPayload(artifactInput));
66
+ }
67
+ const policy = new AgentMemoryCaptureService().validateExplicitMemorySave(input);
68
+ if (!policy.ok)
69
+ return errorEnvelope(policy.error.code, policy.error.message, 'vgxness_memory_save');
70
+ if (!policy.value.allowed)
71
+ return memoryCapturePolicyErrorEnvelope('vgxness_memory_save', policy.value);
72
+ return toEnvelope('vgxness_memory_save', services.memory.saveObservation({ ...input, scope: input.scope ?? 'project' }, memoryContext()));
73
+ }
74
+ export function memorySearchEnvelope(input, services) {
75
+ return toEnvelope('vgxness_memory_search', services.memory.searchObservations(input, memoryContext()));
76
+ }
77
+ export function memoryGetEnvelope(input, services) {
78
+ if (isMemorySddArtifactGetInput(input)) {
79
+ const { kind: _kind, ...artifactInput } = input;
80
+ return toEnvelope('vgxness_memory_get', services.sdd.getArtifact(artifactInput));
81
+ }
82
+ return toEnvelope('vgxness_memory_get', services.memory.getObservation(input.id, memoryContext()));
83
+ }
84
+ export function memoryUpdateEnvelope(input, services) {
85
+ if (isMemorySddArtifactSaveInput(input)) {
86
+ const { kind: _kind, ...artifactInput } = input;
87
+ return auditedMemoryEnvelope('vgxness_memory_update', services.sdd.saveArtifact(artifactInput), services, sddSaveAuditPayload(artifactInput));
88
+ }
89
+ const policy = new AgentMemoryCaptureService().validateExplicitMemoryUpdate(input);
90
+ if (!policy.ok)
91
+ return errorEnvelope(policy.error.code, policy.error.message, 'vgxness_memory_update');
92
+ if (!policy.value.allowed)
93
+ return memoryCapturePolicyErrorEnvelope('vgxness_memory_update', policy.value);
94
+ return toEnvelope('vgxness_memory_update', services.memory.updateObservation(input, memoryContext()));
95
+ }
@@ -0,0 +1,19 @@
1
+ import { errorEnvelope, successEnvelope, } from '../../schema.js';
2
+ function toEnvelope(tool, result) {
3
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
4
+ }
5
+ export function providerStatusEnvelope(input, services) {
6
+ if (services.providerStatus === undefined)
7
+ return errorEnvelope('validation_failed', 'Provider status service is not available', 'vgxness_provider_status');
8
+ return toEnvelope('vgxness_provider_status', services.providerStatus.getStatus(input));
9
+ }
10
+ export function providerDoctorEnvelope(input, services) {
11
+ if (services.providerDoctor === undefined)
12
+ return errorEnvelope('validation_failed', 'Provider doctor service is not available', 'vgxness_provider_doctor');
13
+ return toEnvelope('vgxness_provider_doctor', services.providerDoctor.getDoctor(input));
14
+ }
15
+ export function providerChangePlanEnvelope(input, services) {
16
+ if (services.providerChangePlan === undefined)
17
+ return errorEnvelope('validation_failed', 'Provider change plan service is not available', 'vgxness_provider_change_plan');
18
+ return toEnvelope('vgxness_provider_change_plan', services.providerChangePlan.getPlan(input));
19
+ }
@@ -0,0 +1,134 @@
1
+ import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
2
+ import { errorEnvelope, successEnvelope, } from '../../schema.js';
3
+ function toEnvelope(tool, result) {
4
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
5
+ }
6
+ export function runListEnvelope(input, services) {
7
+ const { limit, ...filters } = input;
8
+ const result = services.runs.listRuns(filters);
9
+ return result.ok
10
+ ? successEnvelope('vgxness_run_list', result.value.slice(0, limit))
11
+ : errorEnvelope(result.error.code, result.error.message, 'vgxness_run_list');
12
+ }
13
+ export function runGetEnvelope(input, services) {
14
+ return toEnvelope('vgxness_run_get', services.runs.getRun(input.id));
15
+ }
16
+ export function runPreflightEnvelope(input, services) {
17
+ return toEnvelope('vgxness_run_preflight', services.runs.preflightOperation(input));
18
+ }
19
+ export function runTaskGrantCreateEnvelope(input, services) {
20
+ if (services.runs.taskScopedCommandGrantService === undefined)
21
+ return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_create');
22
+ const { creationReason, approvedScopeSummary, ...grantInput } = input;
23
+ return toEnvelope('vgxness_run_task_grant_create', services.runs.taskScopedCommandGrantService().create({
24
+ ...grantInput,
25
+ audit: { creationReason, approvedScopeSummary },
26
+ }));
27
+ }
28
+ export function runTaskGrantListEnvelope(input, services) {
29
+ if (services.runs.taskScopedCommandGrantService === undefined)
30
+ return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_list');
31
+ const { limit, ...filters } = input;
32
+ const result = services.runs.taskScopedCommandGrantService().list(filters);
33
+ return result.ok
34
+ ? successEnvelope('vgxness_run_task_grant_list', limit === undefined ? result.value : result.value.slice(0, limit))
35
+ : errorEnvelope(result.error.code, result.error.message, 'vgxness_run_task_grant_list');
36
+ }
37
+ export function runTaskGrantGetEnvelope(input, services) {
38
+ if (services.runs.taskScopedCommandGrantService === undefined)
39
+ return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_get');
40
+ return toEnvelope('vgxness_run_task_grant_get', services.runs.taskScopedCommandGrantService().get(input.grantId));
41
+ }
42
+ export function runTaskGrantRevokeEnvelope(input, services) {
43
+ if (services.runs.taskScopedCommandGrantService === undefined)
44
+ return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_revoke');
45
+ return toEnvelope('vgxness_run_task_grant_revoke', services.runs.taskScopedCommandGrantService().revoke(input));
46
+ }
47
+ export function runTaskGrantPreviewMatchEnvelope(input, services) {
48
+ if (services.runs.taskScopedCommandGrantService === undefined)
49
+ return errorEnvelope('validation_failed', 'Task-scoped command grant service is not available', 'vgxness_run_task_grant_preview_match');
50
+ return toEnvelope('vgxness_run_task_grant_preview_match', services.runs.taskScopedCommandGrantService().previewMatch(input));
51
+ }
52
+ export function runStartEnvelope(input, services) {
53
+ return toEnvelope('vgxness_run_start', services.runs.createRun(input));
54
+ }
55
+ export function runCheckpointEnvelope(input, services) {
56
+ return toEnvelope('vgxness_run_checkpoint', services.runs.appendCheckpoint(input));
57
+ }
58
+ export function runFinalizeEnvelope(input, services) {
59
+ const finalized = services.runs.updateFinalStatus(input);
60
+ if (!finalized.ok)
61
+ return errorEnvelope(finalized.error.code, finalized.error.message, 'vgxness_run_finalize');
62
+ const memoryCapture = runFinalizeMemoryCapture(input, finalized.value);
63
+ const envelope = { ok: true, tool: 'vgxness_run_finalize', value: finalized.value };
64
+ if (memoryCapture !== undefined)
65
+ envelope.memoryCapture = memoryCapture;
66
+ return envelope;
67
+ }
68
+ function runFinalizeMemoryCapture(input, run) {
69
+ try {
70
+ const boundedEvidence = [
71
+ { kind: 'run-finalization', ref: run.id, note: 'Derived from bounded run finalization response fields only.' },
72
+ ];
73
+ if (run.latestCheckpointId !== undefined) {
74
+ boundedEvidence.push({ kind: 'run-checkpoint', ref: run.latestCheckpointId, note: 'Checkpoint id reference only; checkpoint state omitted.' });
75
+ }
76
+ const captureInput = {
77
+ project: run.project,
78
+ runId: run.id,
79
+ workflow: run.workflow,
80
+ phase: run.phase,
81
+ status: run.status,
82
+ outcome: run.outcome ?? input.outcome,
83
+ boundedEvidence,
84
+ };
85
+ const outcomeReason = run.outcomeReason ?? input.outcomeReason;
86
+ if (outcomeReason !== undefined)
87
+ captureInput.outcomeReason = outcomeReason;
88
+ const result = new AgentMemoryCaptureService().captureFromRunFinalize(captureInput);
89
+ return result.ok ? result.value : undefined;
90
+ }
91
+ catch {
92
+ return undefined;
93
+ }
94
+ }
95
+ export function runResumeCandidatesEnvelope(input, services) {
96
+ const limit = input.limit ?? 5;
97
+ const result = services.runs.listRecentInterruptedRuns({ project: input.project, limit });
98
+ if (!result.ok)
99
+ return errorEnvelope(result.error.code, result.error.message, 'vgxness_run_resume_candidates');
100
+ return successEnvelope('vgxness_run_resume_candidates', {
101
+ kind: 'run-resume-candidates',
102
+ version: 1,
103
+ project: input.project,
104
+ statuses: ['failed', 'blocked', 'needs-human'],
105
+ limit,
106
+ candidates: result.value.map((candidate) => ({
107
+ ...candidate,
108
+ recommendation: 'Inspect this interrupted run before deciding whether to continue manually.',
109
+ inspectTool: 'run_resume_inspect',
110
+ inspectInput: { runId: candidate.runId },
111
+ resumeCommand: `vgxness resume --project ${input.project} --run-id ${candidate.runId}`,
112
+ })),
113
+ nextStep: result.value.length === 0
114
+ ? 'No interrupted run candidates were found for this project. Start from the current project status or a known runId.'
115
+ : 'Call run_resume_inspect with a candidate runId, then use run_resume_gate only when inspect returns a relevant approvalId.',
116
+ safety: {
117
+ readOnly: true,
118
+ runMutation: false,
119
+ retryAdmitted: false,
120
+ providerInvoked: false,
121
+ writesProviderConfig: false,
122
+ writesArtifacts: false,
123
+ writesOpenSpec: false,
124
+ createsSandbox: false,
125
+ createsWorktree: false,
126
+ },
127
+ });
128
+ }
129
+ export function runResumeInspectEnvelope(input, services) {
130
+ return toEnvelope('vgxness_run_resume_inspect', services.runs.getRunOperatorResumePlan(input.runId));
131
+ }
132
+ export function runResumeGateEnvelope(input, services) {
133
+ return toEnvelope('vgxness_run_resume_gate', services.runs.getRunResumeOrchestrationPlan(input));
134
+ }
@@ -0,0 +1,225 @@
1
+ import { GovernanceReportBuilder } from '../../../../governance/index.js';
2
+ import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
3
+ import { buildSddCockpitSurfaceResponse } from '../../../../sdd/cockpit-read-model.js';
4
+ import { sddContinuationPlanFrom } from '../../../../sdd/sdd-continuation-plan.js';
5
+ import { errorEnvelope, successEnvelope, } from '../../schema.js';
6
+ function toEnvelope(tool, result) {
7
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
8
+ }
9
+ function auditedEnvelope(tool, result, services, audit) {
10
+ if (result.ok && audit.runId !== undefined) {
11
+ services.runs.appendEvent({
12
+ runId: audit.runId,
13
+ kind: 'timeline',
14
+ title: audit.title,
15
+ payload: audit.payload(result.value),
16
+ relatedType: audit.relatedType,
17
+ ...(audit.relatedId === undefined ? {} : { relatedId: audit.relatedId }),
18
+ });
19
+ }
20
+ return toEnvelope(tool, result);
21
+ }
22
+ export function sddStatusEnvelope(input, services) {
23
+ return toEnvelope('vgxness_sdd_status', services.sdd.getStatus(input));
24
+ }
25
+ export function sddReadyEnvelope(input, services) {
26
+ return auditedEnvelope('vgxness_sdd_ready', services.sdd.getReady(input), services, sddReadinessAuditPayload(input));
27
+ }
28
+ export function sddGetReadinessEnvelope(input, services) {
29
+ return auditedEnvelope('vgxness_sdd_get_readiness', services.sdd.getReady(input), services, sddReadinessAuditPayload(input));
30
+ }
31
+ export function sddSaveArtifactEnvelope(input, services) {
32
+ return auditedEnvelope('vgxness_sdd_save_artifact', services.sdd.saveArtifact(input), services, sddSaveAuditPayload(input));
33
+ }
34
+ export function sddAcceptArtifactEnvelope(input, services) {
35
+ const accepted = auditedEnvelope('vgxness_sdd_accept_artifact', services.sdd.acceptArtifact(input), services, sddAcceptanceAuditPayload(input));
36
+ if (!accepted.ok)
37
+ return accepted;
38
+ const memoryCapture = sddReferenceMemoryCapture(input, accepted.value);
39
+ if (memoryCapture !== undefined)
40
+ accepted.memoryCapture = memoryCapture;
41
+ return accepted;
42
+ }
43
+ export function sddReopenArtifactEnvelope(input, services) {
44
+ return auditedEnvelope('vgxness_sdd_reopen_artifact', services.sdd.reopenArtifact(input), services, sddReopenAuditPayload(input));
45
+ }
46
+ export function sddGetArtifactEnvelope(input, services) {
47
+ return toEnvelope('vgxness_sdd_get_artifact', services.sdd.getArtifact(input));
48
+ }
49
+ export function sddListArtifactsEnvelope(input, services) {
50
+ return toEnvelope('vgxness_sdd_list_artifacts', services.sdd.listArtifacts(input));
51
+ }
52
+ export function sddNextEnvelope(input, services) {
53
+ return toEnvelope('vgxness_sdd_next', services.sdd.getNext(input));
54
+ }
55
+ export function sddCockpitEnvelope(input, services) {
56
+ return toEnvelope('vgxness_sdd_cockpit', sddCockpitSurfaceResponse(input, services));
57
+ }
58
+ export function sddContinueEnvelope(input, services) {
59
+ const context = services.sdd.getContinuationContext({ project: input.project, change: input.change });
60
+ if (!context.ok)
61
+ return errorEnvelope(context.error.code, context.error.message, 'vgxness_sdd_continue');
62
+ const relatedRun = services.runs.findRelatedInterruptedSddRun({ project: input.project, change: input.change });
63
+ if (!relatedRun.ok)
64
+ return errorEnvelope(relatedRun.error.code, relatedRun.error.message, 'vgxness_sdd_continue');
65
+ return successEnvelope('vgxness_sdd_continue', sddContinuationPlanFrom({
66
+ project: input.project,
67
+ next: context.value.next,
68
+ cockpit: context.value.cockpit,
69
+ ...(relatedRun.value === undefined ? {} : { relatedRunContext: relatedRun.value }),
70
+ }));
71
+ }
72
+ export function governanceReportEnvelope(input, services) {
73
+ return auditedEnvelope('vgxness_governance_report', new GovernanceReportBuilder({
74
+ sdd: governanceSddServices(services.sdd),
75
+ runs: services.runs,
76
+ agents: services.agents,
77
+ ...(services.managerProfiles === undefined ? {} : { managerProfiles: services.managerProfiles }),
78
+ }).build(input), services, governanceReportAuditPayload(input));
79
+ }
80
+ function sddReadinessAuditPayload(input) {
81
+ return {
82
+ runId: input.runId,
83
+ title: 'Audit: sdd-readiness-evaluated',
84
+ relatedType: 'sdd-readiness',
85
+ relatedId: `${input.change}:${input.phase}`,
86
+ payload: (value) => ({
87
+ eventType: 'sdd-readiness-evaluated',
88
+ project: input.project,
89
+ change: input.change,
90
+ phase: input.phase,
91
+ ready: value.ready,
92
+ satisfiedPrerequisites: [...value.satisfiedPrerequisites],
93
+ missingArtifactTopicKeys: [...value.missingArtifactTopicKeys],
94
+ blockedPrerequisites: (value.blockedPrerequisites ?? []).map((blocker) => ({ phase: blocker.phase, topicKey: blocker.topicKey, reason: blocker.reason })),
95
+ ...(input.agentId === undefined ? {} : { agentId: input.agentId }),
96
+ }),
97
+ };
98
+ }
99
+ function sddAcceptanceAuditPayload(input) {
100
+ return {
101
+ runId: input.runId,
102
+ title: 'Audit: sdd-artifact-accepted',
103
+ relatedType: 'sdd-artifact',
104
+ relatedId: `${input.change}:${input.phase}`,
105
+ payload: (value) => ({
106
+ eventType: 'sdd-artifact-accepted',
107
+ project: input.project,
108
+ change: input.change,
109
+ phase: input.phase,
110
+ topicKey: value.topicKey,
111
+ artifactId: value.id,
112
+ acceptedBy: { type: 'human', id: input.acceptedBy?.id ?? 'unknown-human' },
113
+ ...(input.agentId === undefined ? {} : { agentId: input.agentId }),
114
+ }),
115
+ };
116
+ }
117
+ function sddReopenAuditPayload(input) {
118
+ return {
119
+ runId: input.runId,
120
+ title: 'Audit: sdd-artifact-reopened',
121
+ relatedType: 'sdd-artifact',
122
+ relatedId: `${input.change}:${input.phase}`,
123
+ payload: (value) => ({
124
+ eventType: 'sdd-artifact-reopened',
125
+ project: input.project,
126
+ change: input.change,
127
+ phase: input.phase,
128
+ topicKey: value.topicKey,
129
+ artifactId: value.id,
130
+ reopenedBy: { type: 'human', id: input.reopenedBy.id },
131
+ ...(input.agentId === undefined ? {} : { agentId: input.agentId }),
132
+ }),
133
+ };
134
+ }
135
+ function sddSaveAuditPayload(input) {
136
+ return {
137
+ runId: input.runId,
138
+ title: 'Audit: sdd-artifact-saved',
139
+ relatedType: 'sdd-artifact',
140
+ relatedId: `${input.change}:${input.phase}`,
141
+ payload: (value) => ({
142
+ eventType: 'sdd-artifact-saved',
143
+ project: input.project,
144
+ change: input.change,
145
+ phase: input.phase,
146
+ topicKey: value.topicKey,
147
+ artifactId: value.id,
148
+ ...(input.agentId === undefined ? {} : { agentId: input.agentId }),
149
+ }),
150
+ };
151
+ }
152
+ function sddReferenceMemoryCapture(input, artifact) {
153
+ try {
154
+ const captureInput = {
155
+ source: input.phase === 'archive' ? 'sdd_archive' : 'sdd_acceptance',
156
+ project: artifact.project,
157
+ change: input.change,
158
+ phase: input.phase,
159
+ artifactId: artifact.id,
160
+ topicKey: artifact.topicKey,
161
+ artifactState: 'accepted',
162
+ };
163
+ if (input.acceptedBy?.type !== undefined && input.acceptedBy.id !== undefined) {
164
+ captureInput.acceptedBy = {
165
+ type: input.acceptedBy.type,
166
+ id: input.acceptedBy.id,
167
+ ...(input.acceptedBy.displayName === undefined ? {} : { displayName: input.acceptedBy.displayName }),
168
+ };
169
+ }
170
+ if (input.acceptedAt !== undefined)
171
+ captureInput.acceptedAt = input.acceptedAt;
172
+ if (input.runId !== undefined)
173
+ captureInput.runId = input.runId;
174
+ if (input.agentId !== undefined)
175
+ captureInput.agentId = input.agentId;
176
+ const result = new AgentMemoryCaptureService().captureFromSddReferenceEvent(captureInput);
177
+ return result.ok ? result.value : undefined;
178
+ }
179
+ catch {
180
+ return undefined;
181
+ }
182
+ }
183
+ function governanceReportAuditPayload(input) {
184
+ return {
185
+ runId: input.runId,
186
+ title: 'Audit: governance-report-generated',
187
+ relatedType: 'governance-report',
188
+ relatedId: input.change,
189
+ payload: (value) => ({
190
+ eventType: 'governance-report-generated',
191
+ project: value.project,
192
+ ...(value.change === undefined ? {} : { change: value.change }),
193
+ ...(value.runId === undefined ? {} : { runId: value.runId }),
194
+ ...(value.workflow === undefined ? {} : { workflow: value.workflow }),
195
+ ...(value.phase === undefined ? {} : { phase: value.phase }),
196
+ artifactCount: value.sdd.artifacts?.length ?? 0,
197
+ payloadMode: value.payloadMode,
198
+ readinessReady: value.sdd.readiness?.ready ?? null,
199
+ warningCount: value.warnings.length,
200
+ openCodeMode: value.openCode.mode,
201
+ overlayPresent: value.overlay.present,
202
+ ...(value.overlay.source === undefined ? {} : { overlaySource: value.overlay.source }),
203
+ ...(value.overlay.fingerprint === undefined ? {} : { overlayFingerprint: value.overlay.fingerprint }),
204
+ }),
205
+ };
206
+ }
207
+ function governanceSddServices(services) {
208
+ return {
209
+ getStatus: services.getStatus.bind(services),
210
+ getReady: services.getReady.bind(services),
211
+ listArtifacts: (input) => {
212
+ const result = services.listArtifacts({ ...input, payloadMode: 'verbose' });
213
+ return result;
214
+ },
215
+ };
216
+ }
217
+ function sddCockpitSurfaceResponse(input, services) {
218
+ const cockpit = services.sdd.getCockpit(input);
219
+ if (!cockpit.ok)
220
+ return cockpit;
221
+ const operationalEvidence = services.runs.getSddOperationalEvidence({ project: input.project, change: input.change });
222
+ if (!operationalEvidence.ok)
223
+ return { ok: true, value: buildSddCockpitSurfaceResponse(cockpit.value) };
224
+ return { ok: true, value: buildSddCockpitSurfaceResponse(cockpit.value, { operationalEvidenceByPhase: operationalEvidence.value }) };
225
+ }
@@ -0,0 +1,39 @@
1
+ import { AgentMemoryCaptureService } from '../../../../memory/agent-memory-capture-service.js';
2
+ import { errorEnvelope, successEnvelope, } from '../../schema.js';
3
+ function memoryContext(sessionId) {
4
+ const context = { actor: 'mcp-control-plane' };
5
+ if (sessionId !== undefined)
6
+ context.sessionId = sessionId;
7
+ return context;
8
+ }
9
+ function toEnvelope(tool, result) {
10
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
11
+ }
12
+ export function sessionStartEnvelope(input, services) {
13
+ return toEnvelope('vgxness_session_start', services.memory.saveSession(input, memoryContext(input.id)));
14
+ }
15
+ export function sessionAppendActivityEnvelope(input, services) {
16
+ return toEnvelope('vgxness_session_append_activity', services.memory.appendActivity(input, memoryContext(input.sessionId)));
17
+ }
18
+ export function sessionRestoreEnvelope(input, services) {
19
+ return toEnvelope('vgxness_session_restore', services.memory.restoreSession(input));
20
+ }
21
+ export function sessionCloseEnvelope(input, services) {
22
+ const closed = services.memory.closeSession(input, memoryContext(input.sessionId));
23
+ if (!closed.ok)
24
+ return errorEnvelope(closed.error.code, closed.error.message, 'vgxness_session_close');
25
+ const memoryCapture = sessionCloseMemoryCapture(input, closed.value);
26
+ const envelope = { ok: true, tool: 'vgxness_session_close', value: closed.value };
27
+ if (memoryCapture !== undefined)
28
+ envelope.memoryCapture = memoryCapture;
29
+ return envelope;
30
+ }
31
+ function sessionCloseMemoryCapture(input, session) {
32
+ const result = new AgentMemoryCaptureService().captureFromSessionClose({
33
+ project: session.project,
34
+ sessionId: session.id,
35
+ ...(session.directory === undefined ? {} : { directory: session.directory }),
36
+ summary: input.summary,
37
+ });
38
+ return result.ok ? result.value : undefined;
39
+ }
@@ -0,0 +1,82 @@
1
+ import { errorEnvelope, successEnvelope, } from '../../schema.js';
2
+ function toEnvelope(tool, result) {
3
+ return result.ok ? successEnvelope(tool, result.value) : errorEnvelope(result.error.code, result.error.message, tool);
4
+ }
5
+ export function skillIndexEnvelope(input, services) {
6
+ if (services.skillIndex === undefined)
7
+ return errorEnvelope('validation_failed', 'Skill index service is not available', 'vgxness_skill_index');
8
+ return toEnvelope('vgxness_skill_index', services.skillIndex.getIndex(input));
9
+ }
10
+ export function skillSearchEnvelope(input, services) {
11
+ if (services.skills.searchSkills === undefined)
12
+ return errorEnvelope('validation_failed', 'Skill search service is not available', 'vgxness_skill_search');
13
+ return toEnvelope('vgxness_skill_search', services.skills.searchSkills(input));
14
+ }
15
+ export function skillGetEnvelope(input, services) {
16
+ if (services.skills.getSkill === undefined)
17
+ return errorEnvelope('validation_failed', 'Skill get service is not available', 'vgxness_skill_get');
18
+ return toEnvelope('vgxness_skill_get', services.skills.getSkill(input));
19
+ }
20
+ export function skillStatusEnvelope(input, services) {
21
+ if (services.skillStatus === undefined)
22
+ return errorEnvelope('validation_failed', 'Skill status service is not available', 'vgxness_skill_status');
23
+ return toEnvelope('vgxness_skill_status', services.skillStatus.getStatus(input));
24
+ }
25
+ export function skillPayloadEnvelope(input, services) {
26
+ const seeded = services.seedBuiltInSkills?.();
27
+ if (seeded !== undefined && !seeded.ok)
28
+ return errorEnvelope(seeded.error.code, seeded.error.message, 'vgxness_skill_payload');
29
+ const { workspaceRoot, maxSourceBytes, mode, ...resolverInput } = input;
30
+ const options = { workspaceRoot, ...(maxSourceBytes === undefined ? {} : { maxSourceBytes }), ...(mode === undefined ? {} : { mode }) };
31
+ return toEnvelope('vgxness_skill_payload', services.skills.buildSkillPayload(resolverInput, options));
32
+ }
33
+ export function skillActivateEnvelope(input, services) {
34
+ if (services.skills.activateSkill === undefined)
35
+ return errorEnvelope('validation_failed', 'Skill activation service is not available', 'vgxness_skill_activate');
36
+ return toEnvelope('vgxness_skill_activate', services.skills.activateSkill(input));
37
+ }
38
+ export function skillRecordUsageEnvelope(input, services) {
39
+ if (services.skills.recordSkillUsage === undefined)
40
+ return errorEnvelope('validation_failed', 'Skill usage service is not available', 'vgxness_skill_record_usage');
41
+ return toEnvelope('vgxness_skill_record_usage', services.skills.recordSkillUsage(input));
42
+ }
43
+ export function skillProposeImprovementEnvelope(input, services) {
44
+ if (services.skills.proposeSkillImprovement === undefined)
45
+ return errorEnvelope('validation_failed', 'Skill improvement proposal service is not available', 'vgxness_skill_propose_improvement');
46
+ return toEnvelope('vgxness_skill_propose_improvement', services.skills.proposeSkillImprovement(input));
47
+ }
48
+ export function skillListImprovementProposalsEnvelope(input, services) {
49
+ if (services.skills.listSkillImprovementProposals === undefined)
50
+ return errorEnvelope('validation_failed', 'Skill improvement proposal list service is not available', 'vgxness_skill_list_improvement_proposals');
51
+ return toEnvelope('vgxness_skill_list_improvement_proposals', services.skills.listSkillImprovementProposals(input));
52
+ }
53
+ export function skillRequestEvaluationEnvelope(input, services) {
54
+ if (services.skills.requestSkillEvaluation === undefined)
55
+ return errorEnvelope('validation_failed', 'Skill evaluation request service is not available', 'vgxness_skill_request_evaluation');
56
+ return toEnvelope('vgxness_skill_request_evaluation', services.skills.requestSkillEvaluation(input));
57
+ }
58
+ export function skillListEvaluationsEnvelope(input, services) {
59
+ if (services.skills.listSkillEvaluations === undefined)
60
+ return errorEnvelope('validation_failed', 'Skill evaluation list service is not available', 'vgxness_skill_list_evaluations');
61
+ return toEnvelope('vgxness_skill_list_evaluations', services.skills.listSkillEvaluations(input));
62
+ }
63
+ export function skillGetEvaluationEnvelope(input, services) {
64
+ if (services.skills.getSkillEvaluationRequest === undefined)
65
+ return errorEnvelope('validation_failed', 'Skill evaluation get service is not available', 'vgxness_skill_get_evaluation');
66
+ return toEnvelope('vgxness_skill_get_evaluation', services.skills.getSkillEvaluationRequest(input));
67
+ }
68
+ export function skillCreateDraftEnvelope(input, services) {
69
+ if (services.skills.createSkillDraft === undefined)
70
+ return errorEnvelope('validation_failed', 'Skill draft creation service is not available', 'vgxness_skill_create_draft');
71
+ return toEnvelope('vgxness_skill_create_draft', services.skills.createSkillDraft(input));
72
+ }
73
+ export function skillUpdateDraftEnvelope(input, services) {
74
+ if (services.skills.updateSkillDraft === undefined)
75
+ return errorEnvelope('validation_failed', 'Skill draft update service is not available', 'vgxness_skill_update_draft');
76
+ return toEnvelope('vgxness_skill_update_draft', services.skills.updateSkillDraft(input));
77
+ }
78
+ export function skillPublishVersionEnvelope(input, services) {
79
+ if (services.skills.publishSkillVersion === undefined)
80
+ return errorEnvelope('validation_failed', 'Skill version publication service is not available', 'vgxness_skill_publish_version');
81
+ return toEnvelope('vgxness_skill_publish_version', services.skills.publishSkillVersion(input));
82
+ }
@@ -0,0 +1,11 @@
1
+ import { errorEnvelope, successEnvelope } from '../../schema.js';
2
+ function toEnvelope(result) {
3
+ return result.ok
4
+ ? successEnvelope('vgxness_verification_plan', result.value)
5
+ : errorEnvelope(result.error.code, result.error.message, 'vgxness_verification_plan');
6
+ }
7
+ export function verificationPlanEnvelope(input, services) {
8
+ if (services.verificationPlan === undefined)
9
+ return errorEnvelope('validation_failed', 'Verification plan service is not available', 'vgxness_verification_plan');
10
+ return toEnvelope(services.verificationPlan.getPlan(input.changeType));
11
+ }