vgxness 1.20.5 → 1.20.7

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 (377) 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 -246
  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 +364 -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/interfaces/cli/bun-bin.js +46 -0
  147. package/dist/interfaces/cli/cli-flags.js +391 -0
  148. package/dist/interfaces/cli/cli-help.js +173 -0
  149. package/dist/interfaces/cli/cli-helpers.js +77 -0
  150. package/dist/interfaces/cli/cli-types.js +1 -0
  151. package/dist/interfaces/cli/commands/agent-skill-dispatcher.js +700 -0
  152. package/dist/interfaces/cli/commands/index.js +9 -0
  153. package/dist/interfaces/cli/commands/interactive-entrypoint-dispatcher.js +14 -0
  154. package/dist/interfaces/cli/commands/mcp-dispatcher.js +252 -0
  155. package/dist/interfaces/cli/commands/memory-sdd-dispatcher.js +367 -0
  156. package/dist/interfaces/cli/commands/run-permission-dispatcher.js +460 -0
  157. package/dist/interfaces/cli/commands/setup-dispatcher.js +496 -0
  158. package/dist/interfaces/cli/commands/status-dispatcher.js +130 -0
  159. package/dist/interfaces/cli/commands/verification-dispatcher.js +47 -0
  160. package/dist/interfaces/cli/commands/workflow-dispatcher.js +566 -0
  161. package/dist/interfaces/cli/dispatcher.js +247 -0
  162. package/dist/interfaces/cli/doctor-renderer.js +26 -0
  163. package/dist/interfaces/cli/home-tui-app.js +462 -0
  164. package/dist/interfaces/cli/home-tui-controller.js +341 -0
  165. package/dist/interfaces/cli/index.js +27 -0
  166. package/dist/interfaces/cli/mcp-start-path.js +21 -0
  167. package/dist/interfaces/cli/product-resume-renderer.js +32 -0
  168. package/dist/interfaces/cli/product-status-renderer.js +81 -0
  169. package/dist/interfaces/cli/sdd-renderer.js +247 -0
  170. package/dist/interfaces/cli/setup-plan-renderer.js +79 -0
  171. package/dist/interfaces/cli/setup-status-renderer.js +50 -0
  172. package/dist/interfaces/cli/setup-tui-app.js +135 -0
  173. package/dist/interfaces/cli/setup-tui-controller.js +89 -0
  174. package/dist/interfaces/cli/tui/focus-reducer.js +60 -0
  175. package/dist/interfaces/cli/tui/focus-types.js +10 -0
  176. package/dist/interfaces/cli/tui/ink/app-shell.js +16 -0
  177. package/dist/interfaces/cli/tui/ink/components.js +38 -0
  178. package/dist/interfaces/cli/tui/ink/help-overlay.js +6 -0
  179. package/dist/interfaces/cli/tui/ink/state-components.js +22 -0
  180. package/dist/interfaces/cli/tui/ink/theme.js +36 -0
  181. package/dist/interfaces/cli/tui/key-intents.js +33 -0
  182. package/dist/interfaces/cli/tui/keymap.js +20 -0
  183. package/dist/interfaces/cli/tui/navigation.js +10 -0
  184. package/dist/interfaces/cli/tui/screen-registry.js +43 -0
  185. package/dist/interfaces/cli/tui/terminal-capabilities.js +12 -0
  186. package/dist/interfaces/cli/tui/tui-types.js +1 -0
  187. package/dist/interfaces/cli/tui/visual/badges.js +19 -0
  188. package/dist/interfaces/cli/tui/visual/footer.js +27 -0
  189. package/dist/interfaces/cli/tui/visual/index.js +3 -0
  190. package/dist/interfaces/cli/tui/visual/viewport.js +11 -0
  191. package/dist/interfaces/cli/tui-render-helpers.js +200 -0
  192. package/dist/interfaces/cli/verification-plan-renderer.js +25 -0
  193. package/dist/interfaces/cli/verification-report-renderer.js +19 -0
  194. package/dist/interfaces/mcp/contracts/agents.js +1 -0
  195. package/dist/interfaces/mcp/contracts/context.js +1 -0
  196. package/dist/interfaces/mcp/contracts/governance.js +1 -0
  197. package/dist/interfaces/mcp/contracts/index.js +1 -0
  198. package/dist/interfaces/mcp/contracts/memory.js +1 -0
  199. package/dist/interfaces/mcp/contracts/providers.js +1 -0
  200. package/dist/interfaces/mcp/contracts/runs.js +1 -0
  201. package/dist/interfaces/mcp/contracts/sdd.js +1 -0
  202. package/dist/interfaces/mcp/contracts/sessions.js +1 -0
  203. package/dist/interfaces/mcp/contracts/skills.js +1 -0
  204. package/dist/interfaces/mcp/contracts/verification.js +1 -0
  205. package/dist/interfaces/mcp/control-plane/handlers/agents.js +38 -0
  206. package/dist/interfaces/mcp/control-plane/handlers/context.js +12 -0
  207. package/dist/interfaces/mcp/control-plane/handlers/memory.js +95 -0
  208. package/dist/interfaces/mcp/control-plane/handlers/providers.js +19 -0
  209. package/dist/interfaces/mcp/control-plane/handlers/runs.js +134 -0
  210. package/dist/interfaces/mcp/control-plane/handlers/sdd.js +225 -0
  211. package/dist/interfaces/mcp/control-plane/handlers/sessions.js +39 -0
  212. package/dist/interfaces/mcp/control-plane/handlers/skills.js +82 -0
  213. package/dist/interfaces/mcp/control-plane/handlers/verification.js +11 -0
  214. package/dist/interfaces/mcp/control-plane/types.js +1 -0
  215. package/dist/interfaces/mcp/control-plane.js +235 -0
  216. package/dist/interfaces/mcp/schema.js +174 -0
  217. package/dist/interfaces/mcp/schemas/common.js +121 -0
  218. package/dist/interfaces/mcp/schemas/inputs/agents.js +69 -0
  219. package/dist/interfaces/mcp/schemas/inputs/context.js +32 -0
  220. package/dist/interfaces/mcp/schemas/inputs/governance.js +23 -0
  221. package/dist/interfaces/mcp/schemas/inputs/index.js +10 -0
  222. package/dist/interfaces/mcp/schemas/inputs/memory.js +50 -0
  223. package/dist/interfaces/mcp/schemas/inputs/providers.js +35 -0
  224. package/dist/interfaces/mcp/schemas/inputs/runs.js +146 -0
  225. package/dist/interfaces/mcp/schemas/inputs/sdd.js +102 -0
  226. package/dist/interfaces/mcp/schemas/inputs/sessions.js +32 -0
  227. package/dist/interfaces/mcp/schemas/inputs/skills.js +231 -0
  228. package/dist/interfaces/mcp/schemas/inputs/verification.js +9 -0
  229. package/dist/interfaces/mcp/schemas/outputs/index.js +2 -0
  230. package/dist/interfaces/mcp/schemas/outputs/providers.js +28 -0
  231. package/dist/interfaces/mcp/schemas/outputs/sdd.js +166 -0
  232. package/dist/interfaces/mcp/stdio-server.js +116 -0
  233. package/dist/interfaces/mcp/validation/agents.js +189 -0
  234. package/dist/interfaces/mcp/validation/common.js +415 -0
  235. package/dist/interfaces/mcp/validation/governance.js +50 -0
  236. package/dist/interfaces/mcp/validation/memory.js +133 -0
  237. package/dist/interfaces/mcp/validation/providers.js +94 -0
  238. package/dist/interfaces/mcp/validation/runs.js +514 -0
  239. package/dist/interfaces/mcp/validation/sdd.js +247 -0
  240. package/dist/interfaces/mcp/validation/sessions.js +51 -0
  241. package/dist/interfaces/mcp/validation/skills.js +685 -0
  242. package/dist/interfaces/mcp/validation/verification.js +24 -0
  243. package/dist/interfaces/mcp/validation.js +149 -0
  244. package/dist/mcp/control-plane-snapshot-service.js +65 -2
  245. package/dist/mcp/control-plane.js +1 -646
  246. package/dist/mcp/doctor.js +1 -1
  247. package/dist/mcp/index.js +17 -17
  248. package/dist/mcp/schema.js +1 -1132
  249. package/dist/mcp/stdio-server.js +1 -116
  250. package/dist/mcp/validation.js +1 -2383
  251. package/dist/memory/active-work-preview.js +1 -75
  252. package/dist/memory/active-work-topics.js +1 -64
  253. package/dist/memory/agent-memory-capture-service.js +1 -497
  254. package/dist/memory/import/dry-run-planner.js +1 -58
  255. package/dist/memory/import/index.js +1 -3
  256. package/dist/memory/import/observation-writer.js +1 -226
  257. package/dist/memory/import/package.js +1 -179
  258. package/dist/memory/memory-capture-schema.js +1 -1
  259. package/dist/memory/memory-service.js +1 -201
  260. package/dist/memory/repositories/artifacts.js +1 -67
  261. package/dist/memory/repositories/observations.js +1 -217
  262. package/dist/memory/repositories/sessions.js +1 -125
  263. package/dist/memory/repositories/traces.js +1 -78
  264. package/dist/memory/schema.js +1 -1
  265. package/dist/memory/search.js +1 -11
  266. package/dist/memory/sqlite/database.js +1 -228
  267. package/dist/memory/storage-paths.js +1 -72
  268. package/dist/payload/context-budget-policy.js +10 -0
  269. package/dist/payload/context-budget-service.js +26 -0
  270. package/dist/payload/payload-diagnostics.js +50 -0
  271. package/dist/permissions/policy-evaluator.js +12 -5
  272. package/dist/runs/execution-planning.js +1 -178
  273. package/dist/runs/operation-execution.js +1 -1
  274. package/dist/runs/operation-retry.js +1 -129
  275. package/dist/runs/repositories/runs.js +1 -676
  276. package/dist/runs/repositories/task-scoped-command-grants.js +1 -462
  277. package/dist/runs/resume-after-approval-result.js +1 -84
  278. package/dist/runs/run-insights.js +1 -270
  279. package/dist/runs/run-service.js +1 -1470
  280. package/dist/runs/run-snapshot-export-service.js +1 -31
  281. package/dist/runs/sandbox-process-execution.js +1 -240
  282. package/dist/runs/sandbox-worktree-planning.js +1 -59
  283. package/dist/runs/schema.js +1 -5
  284. package/dist/runs/task-scoped-command-grant-service.js +1 -217
  285. package/dist/sdd/artifact-portability-service.js +1 -137
  286. package/dist/sdd/cockpit-read-model.js +1 -195
  287. package/dist/sdd/cockpit-types.js +1 -1
  288. package/dist/sdd/schema.js +1 -111
  289. package/dist/sdd/sdd-continuation-plan.js +1 -265
  290. package/dist/sdd/sdd-workflow-service.js +1 -822
  291. package/dist/setup/providers/claude-setup-adapter.js +11 -4
  292. package/dist/setup/providers/opencode-setup-adapter.js +10 -7
  293. package/dist/setup/setup-plan.js +20 -7
  294. package/dist/skills/boot-seed.js +1 -42
  295. package/dist/skills/personal-skills.js +1 -41
  296. package/dist/skills/repositories/skill-evaluation-requests.js +1 -190
  297. package/dist/skills/repositories/skill-evaluation-scenarios.js +1 -305
  298. package/dist/skills/repositories/skill-improvement-proposals.js +1 -355
  299. package/dist/skills/repositories/skills.js +1 -1077
  300. package/dist/skills/schema.js +1 -1
  301. package/dist/skills/skill-export-service.js +1 -34
  302. package/dist/skills/skill-index-service.js +1 -126
  303. package/dist/skills/skill-payload.js +1 -186
  304. package/dist/skills/skill-registry-service.js +1 -644
  305. package/dist/skills/skill-resolver.js +1 -368
  306. package/dist/skills/skill-seed-service.js +1 -242
  307. package/dist/skills/skill-status-service.js +1 -147
  308. package/dist/storage/agents/repositories/agent-seed-history.js +128 -0
  309. package/dist/storage/agents/repositories/agents.js +200 -0
  310. package/dist/storage/agents/repositories/manager-profile-overlays.js +90 -0
  311. package/dist/storage/memory/repositories/artifacts.js +67 -0
  312. package/dist/storage/memory/repositories/observations.js +217 -0
  313. package/dist/storage/memory/repositories/sessions.js +125 -0
  314. package/dist/storage/memory/repositories/traces.js +78 -0
  315. package/dist/storage/memory/sqlite/database.js +228 -0
  316. package/dist/storage/memory/storage-paths.js +72 -0
  317. package/dist/storage/runs/repositories/runs.js +676 -0
  318. package/dist/storage/runs/repositories/task-scoped-command-grants.js +464 -0
  319. package/dist/storage/skills/repositories/skill-evaluation-requests.js +190 -0
  320. package/dist/storage/skills/repositories/skill-evaluation-scenarios.js +305 -0
  321. package/dist/storage/skills/repositories/skill-improvement-proposals.js +355 -0
  322. package/dist/storage/skills/repositories/skills.js +1084 -0
  323. package/docs/architecture.md +2 -2
  324. package/docs/glossary.md +1 -1
  325. package/docs/mcp.md +1 -1
  326. package/docs/module-boundaries.md +114 -0
  327. package/docs/prd.md +1 -1
  328. package/docs/project-health-audit-v1.10.x.md +1 -1
  329. package/docs/providers.md +2 -2
  330. package/docs/safety.md +3 -3
  331. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/apply-progress.md +122 -0
  332. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/archive-report.md +61 -0
  333. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/design.md +66 -0
  334. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/proposal.md +79 -0
  335. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/spec.md +67 -0
  336. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/tasks.md +63 -0
  337. package/docs/sdd/archive/2026-06-26-ambitious-structure-reorganization/verify-report.md +71 -0
  338. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/apply-progress.md +68 -0
  339. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/archive-report.md +61 -0
  340. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/design.md +43 -0
  341. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/proposal.md +61 -0
  342. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/spec.md +31 -0
  343. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/tasks.md +27 -0
  344. package/docs/sdd/archive/2026-06-26-legacy-facade-cleanup/verify-report.md +58 -0
  345. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/apply-progress.md +65 -0
  346. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/archive-report.md +53 -0
  347. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/design.md +64 -0
  348. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/proposal.md +62 -0
  349. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/spec.md +51 -0
  350. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/tasks.md +50 -0
  351. package/docs/sdd/archive/2026-06-26-provider-install-adapter-boundary/verify-report.md +66 -0
  352. package/docs/sdd/manager-prompt-autonomy/apply-progress.md +28 -0
  353. package/docs/sdd/manager-prompt-autonomy/design.md +63 -0
  354. package/docs/sdd/manager-prompt-autonomy/proposal.md +57 -0
  355. package/docs/sdd/manager-prompt-autonomy/tasks.md +19 -0
  356. package/docs/storage.md +2 -2
  357. package/package.json +2 -2
  358. /package/dist/{mcp → adapters/claude/install}/claude-code-cli.js +0 -0
  359. /package/dist/{memory → storage/memory}/sqlite/migrations/001_initial.sql +0 -0
  360. /package/dist/{memory → storage/memory}/sqlite/migrations/002_observation_revisions.sql +0 -0
  361. /package/dist/{memory → storage/memory}/sqlite/migrations/003_agent_registry.sql +0 -0
  362. /package/dist/{memory → storage/memory}/sqlite/migrations/004_run_runtime.sql +0 -0
  363. /package/dist/{memory → storage/memory}/sqlite/migrations/005_run_approvals.sql +0 -0
  364. /package/dist/{memory → storage/memory}/sqlite/migrations/006_run_operation_attempts.sql +0 -0
  365. /package/dist/{memory → storage/memory}/sqlite/migrations/007_abandoned_operation_attempts.sql +0 -0
  366. /package/dist/{memory → storage/memory}/sqlite/migrations/008_run_execution_plan_events.sql +0 -0
  367. /package/dist/{memory → storage/memory}/sqlite/migrations/009_multiple_operation_attempts.sql +0 -0
  368. /package/dist/{memory → storage/memory}/sqlite/migrations/010_skill_registry.sql +0 -0
  369. /package/dist/{memory → storage/memory}/sqlite/migrations/011_skill_usage_resolution_outcomes.sql +0 -0
  370. /package/dist/{memory → storage/memory}/sqlite/migrations/012_skill_improvement_proposals.sql +0 -0
  371. /package/dist/{memory → storage/memory}/sqlite/migrations/013_skill_evaluation_scenarios.sql +0 -0
  372. /package/dist/{memory → storage/memory}/sqlite/migrations/014_manager_profile_overlays.sql +0 -0
  373. /package/dist/{memory → storage/memory}/sqlite/migrations/015_artifact_metadata.sql +0 -0
  374. /package/dist/{memory → storage/memory}/sqlite/migrations/016_agent_seed_history.sql +0 -0
  375. /package/dist/{memory → storage/memory}/sqlite/migrations/017_intent_signal_skill_targets.sql +0 -0
  376. /package/dist/{memory → storage/memory}/sqlite/migrations/018_skill_system_v2.sql +0 -0
  377. /package/dist/{memory → storage/memory}/sqlite/migrations/019_task_scoped_command_grants.sql +0 -0
@@ -0,0 +1,460 @@
1
+ import { AgentRegistryService } from '../../../agents/agent-registry-service.js';
2
+ import { evaluatePermission } from '../../../permissions/policy-evaluator.js';
3
+ import { RunService } from '../../../runs/run-service.js';
4
+ import { RunSnapshotExportService } from '../../../runs/run-snapshot-export-service.js';
5
+ import { grantEvaluationPayload } from '../../../runs/task-scoped-command-grant-service.js';
6
+ import { csvFlag, finalRunStatusFlag, jsonFlag, optionalRunStatusFlag, optionalStringFlag, optionalTaskGrantStatusFlag, permissionCategoryFlag, requiredFlag, requiredPositiveIntegerFlag, retryPolicyFlag, runOutcomeFlag, taskGrantCategoryFlag, taskGrantExpirationFlag, } from '../cli-flags.js';
7
+ import { usageFailure } from '../cli-help.js';
8
+ import { isJsonObject, jsonResult, resultFailure, writeJsonFile } from '../cli-helpers.js';
9
+ function listCliApprovals(service, runId) {
10
+ const details = [];
11
+ if (runId === undefined) {
12
+ const runs = service.listRuns({});
13
+ if (!runs.ok)
14
+ return runs;
15
+ details.push(...runs.value.map((run) => service.getRun(run.id)));
16
+ }
17
+ else {
18
+ details.push(service.getRun(runId));
19
+ }
20
+ const values = [];
21
+ for (const detail of details) {
22
+ if (!detail.ok)
23
+ return detail;
24
+ for (const approval of detail.value.approvals) {
25
+ const decisionEvent = detail.value.events.find((event) => event.id === approval.decisionEventId);
26
+ values.push({
27
+ id: approval.id,
28
+ runId: approval.runId,
29
+ status: approval.status,
30
+ requestedAt: approval.requestedAt,
31
+ resolvedAt: approval.resolvedAt ?? null,
32
+ resolvedBy: approval.resolvedBy ?? null,
33
+ resolutionReason: approval.resolutionReason ?? null,
34
+ decisionEventId: approval.decisionEventId,
35
+ operation: decisionEvent === undefined || !isJsonObject(decisionEvent.payload)
36
+ ? null
37
+ : {
38
+ category: decisionEvent.payload.category ?? null,
39
+ name: decisionEvent.payload.operation ?? null,
40
+ requestedOperation: decisionEvent.payload.requestedOperation ?? null,
41
+ agent: decisionEvent.payload.agent ?? null,
42
+ },
43
+ });
44
+ }
45
+ }
46
+ return { ok: true, value: values };
47
+ }
48
+ function runRunInsightCommand(command, parsed, service) {
49
+ const id = requiredFlag(parsed.flags, 'id');
50
+ if (!id.ok)
51
+ return resultFailure(id);
52
+ if (command === 'resume-inspect')
53
+ return jsonResult(service.getRunOperatorResumePlan(id.value));
54
+ const insights = service.getRunInsights(id.value);
55
+ if (!insights.ok)
56
+ return resultFailure(insights);
57
+ if (command === 'timeline')
58
+ return jsonResult({ ok: true, value: insights.value.timeline });
59
+ if (command === 'debug')
60
+ return jsonResult({ ok: true, value: insights.value.debug });
61
+ return jsonResult({ ok: true, value: insights.value.resumePlan });
62
+ }
63
+ function permissionRequestFromFlags(parsed, database, environment) {
64
+ const category = permissionCategoryFlag(parsed.flags, 'category');
65
+ const operation = requiredFlag(parsed.flags, 'operation');
66
+ if (!category.ok)
67
+ return category;
68
+ if (!operation.ok)
69
+ return operation;
70
+ const request = {
71
+ category: category.value,
72
+ operation: operation.value,
73
+ workspaceRoot: optionalStringFlag(parsed.flags, 'workspace') ?? environment.cwd,
74
+ };
75
+ const targetPath = optionalStringFlag(parsed.flags, 'path');
76
+ if (targetPath !== undefined)
77
+ request.targetPath = targetPath;
78
+ const providerToolName = optionalStringFlag(parsed.flags, 'provider-tool');
79
+ if (providerToolName !== undefined)
80
+ request.providerToolName = providerToolName;
81
+ if (parsed.flags.destructive === true)
82
+ request.destructive = true;
83
+ if (parsed.flags.external === true)
84
+ request.external = true;
85
+ if (parsed.flags.privileged === true)
86
+ request.privileged = true;
87
+ if (parsed.flags.ambiguous === true)
88
+ request.ambiguous = true;
89
+ const agentId = optionalStringFlag(parsed.flags, 'agent-id');
90
+ if (agentId !== undefined) {
91
+ const agent = new AgentRegistryService(database).getAgent(agentId);
92
+ if (!agent.ok)
93
+ return agent;
94
+ request.agent = agent.value;
95
+ }
96
+ return { ok: true, value: request };
97
+ }
98
+ function rejectExecutableGrantFlags(parsed) {
99
+ if (parsed.flags.executable !== undefined || parsed.flags.argv !== undefined)
100
+ return {
101
+ ok: false,
102
+ error: { code: 'validation_failed', message: 'Task grants accept --command-id only; arbitrary executable/argv inputs are not supported' },
103
+ };
104
+ return { ok: true, value: undefined };
105
+ }
106
+ function taskGrantExternalRoots(parsed) {
107
+ const roots = [...csvFlag(parsed.flags, 'external-roots')];
108
+ const root = optionalStringFlag(parsed.flags, 'external-root');
109
+ if (root !== undefined)
110
+ roots.unshift(root);
111
+ return roots.length > 0
112
+ ? { ok: true, value: roots }
113
+ : { ok: false, error: { code: 'validation_failed', message: 'Missing required --external-root or --external-roots' } };
114
+ }
115
+ function runTaskGrantCommand(command, parsed, service) {
116
+ const grantService = service.taskScopedCommandGrantService();
117
+ const executableFlags = rejectExecutableGrantFlags(parsed);
118
+ if (!executableFlags.ok)
119
+ return resultFailure(executableFlags);
120
+ if (command === 'task-grant-create') {
121
+ const runId = requiredFlag(parsed.flags, 'run-id');
122
+ const agentId = requiredFlag(parsed.flags, 'agent-id');
123
+ const taskFingerprint = requiredFlag(parsed.flags, 'task-fingerprint');
124
+ const category = taskGrantCategoryFlag(parsed.flags, 'category');
125
+ const commandId = requiredFlag(parsed.flags, 'command-id');
126
+ const maxUses = requiredPositiveIntegerFlag(parsed.flags, 'max-uses');
127
+ const expiresAt = taskGrantExpirationFlag(parsed.flags);
128
+ const createdById = requiredFlag(parsed.flags, 'created-by-id');
129
+ const creationReason = requiredFlag(parsed.flags, 'creation-reason');
130
+ const approvedScopeSummary = requiredFlag(parsed.flags, 'approved-scope-summary');
131
+ const externalRoots = taskGrantExternalRoots(parsed);
132
+ if (!runId.ok)
133
+ return resultFailure(runId);
134
+ if (!agentId.ok)
135
+ return resultFailure(agentId);
136
+ if (!taskFingerprint.ok)
137
+ return resultFailure(taskFingerprint);
138
+ if (!category.ok)
139
+ return resultFailure(category);
140
+ if (!commandId.ok)
141
+ return resultFailure(commandId);
142
+ if (!maxUses.ok)
143
+ return resultFailure(maxUses);
144
+ if (!expiresAt.ok)
145
+ return resultFailure(expiresAt);
146
+ if (!createdById.ok)
147
+ return resultFailure(createdById);
148
+ if (!creationReason.ok)
149
+ return resultFailure(creationReason);
150
+ if (!approvedScopeSummary.ok)
151
+ return resultFailure(approvedScopeSummary);
152
+ if (!externalRoots.ok)
153
+ return resultFailure(externalRoots);
154
+ const createdByName = optionalStringFlag(parsed.flags, 'created-by-name');
155
+ const cwdPatterns = csvFlag(parsed.flags, 'cwd-patterns');
156
+ return jsonResult(grantService.create({
157
+ runId: runId.value,
158
+ agentId: agentId.value,
159
+ taskFingerprint: taskFingerprint.value,
160
+ categories: [category.value],
161
+ externalRoots: externalRoots.value,
162
+ ...(cwdPatterns.length === 0 ? {} : { cwdPatterns }),
163
+ commandPolicy: { kind: 'allowlisted-command-ids', ids: [commandId.value] },
164
+ expiresAt: expiresAt.value,
165
+ maxUses: maxUses.value,
166
+ createdBy: { type: 'human', id: createdById.value, ...(createdByName === undefined ? {} : { displayName: createdByName }) },
167
+ audit: { creationReason: creationReason.value, approvedScopeSummary: approvedScopeSummary.value },
168
+ }));
169
+ }
170
+ if (command === 'task-grant-list') {
171
+ const runId = requiredFlag(parsed.flags, 'run-id');
172
+ const status = optionalTaskGrantStatusFlag(parsed.flags, 'status');
173
+ const limit = parsed.flags.limit === undefined ? { ok: true, value: undefined } : requiredPositiveIntegerFlag(parsed.flags, 'limit');
174
+ if (!runId.ok)
175
+ return resultFailure(runId);
176
+ if (!status.ok)
177
+ return resultFailure(status);
178
+ if (!limit.ok)
179
+ return resultFailure(limit);
180
+ const agentId = optionalStringFlag(parsed.flags, 'agent-id');
181
+ return jsonResult(grantService.list({
182
+ runId: runId.value,
183
+ ...(agentId === undefined ? {} : { agentId }),
184
+ ...(status.value === undefined ? {} : { status: status.value }),
185
+ ...(limit.value === undefined ? {} : { limit: limit.value }),
186
+ }));
187
+ }
188
+ if (command === 'task-grant-get') {
189
+ const grantId = requiredFlag(parsed.flags, 'grant-id');
190
+ return grantId.ok ? jsonResult(grantService.get(grantId.value)) : resultFailure(grantId);
191
+ }
192
+ if (command === 'task-grant-revoke') {
193
+ const grantId = requiredFlag(parsed.flags, 'grant-id');
194
+ const actorId = requiredFlag(parsed.flags, 'actor-id');
195
+ const reason = requiredFlag(parsed.flags, 'reason');
196
+ const actorType = optionalStringFlag(parsed.flags, 'actor-type') ?? 'human';
197
+ if (!grantId.ok)
198
+ return resultFailure(grantId);
199
+ if (!actorId.ok)
200
+ return resultFailure(actorId);
201
+ if (!reason.ok)
202
+ return resultFailure(reason);
203
+ if (actorType !== 'human' && actorType !== 'system')
204
+ return resultFailure({ ok: false, error: { code: 'validation_failed', message: '--actor-type must be human or system' } });
205
+ const actorName = optionalStringFlag(parsed.flags, 'actor-name');
206
+ return jsonResult(grantService.revoke({
207
+ grantId: grantId.value,
208
+ actor: { type: actorType, id: actorId.value, ...(actorName === undefined ? {} : { displayName: actorName }) },
209
+ reason: reason.value,
210
+ }));
211
+ }
212
+ if (command === 'task-grant-preview') {
213
+ const runId = requiredFlag(parsed.flags, 'run-id');
214
+ const agentId = requiredFlag(parsed.flags, 'agent-id');
215
+ const taskFingerprint = requiredFlag(parsed.flags, 'task-fingerprint');
216
+ const category = taskGrantCategoryFlag(parsed.flags, 'category');
217
+ const commandId = requiredFlag(parsed.flags, 'command-id');
218
+ const workspaceRoot = requiredFlag(parsed.flags, 'workspace-root');
219
+ const cwd = requiredFlag(parsed.flags, 'cwd');
220
+ if (!runId.ok)
221
+ return resultFailure(runId);
222
+ if (!agentId.ok)
223
+ return resultFailure(agentId);
224
+ if (!taskFingerprint.ok)
225
+ return resultFailure(taskFingerprint);
226
+ if (!category.ok)
227
+ return resultFailure(category);
228
+ if (!commandId.ok)
229
+ return resultFailure(commandId);
230
+ if (!workspaceRoot.ok)
231
+ return resultFailure(workspaceRoot);
232
+ if (!cwd.ok)
233
+ return resultFailure(cwd);
234
+ const operation = optionalStringFlag(parsed.flags, 'operation') ?? `command-allowlist:${commandId.value}`;
235
+ const targetPaths = csvFlag(parsed.flags, 'target-paths');
236
+ const preview = grantService.previewMatch({
237
+ runId: runId.value,
238
+ agentId: agentId.value,
239
+ taskFingerprint: taskFingerprint.value,
240
+ category: category.value,
241
+ commandId: commandId.value,
242
+ operation,
243
+ workspaceRoot: workspaceRoot.value,
244
+ cwd: cwd.value,
245
+ ...(targetPaths.length === 0 ? {} : { targetPaths }),
246
+ });
247
+ return preview.ok ? jsonResult({ ok: true, value: grantEvaluationPayload(preview.value) }) : resultFailure(preview);
248
+ }
249
+ return usageFailure(`Unknown runs command: ${command}`);
250
+ }
251
+ export function runRunsCommand(command, parsed, database, environment) {
252
+ const service = new RunService(database);
253
+ if (command.startsWith('task-grant-'))
254
+ return runTaskGrantCommand(command, parsed, service);
255
+ if (command === 'timeline' || command === 'debug' || command === 'resume-plan' || command === 'resume-inspect')
256
+ return runRunInsightCommand(command, parsed, service);
257
+ if (command === 'create') {
258
+ const project = requiredFlag(parsed.flags, 'project');
259
+ const userIntent = requiredFlag(parsed.flags, 'intent');
260
+ const workflow = requiredFlag(parsed.flags, 'workflow');
261
+ const phase = requiredFlag(parsed.flags, 'phase');
262
+ const selectedAgentId = requiredFlag(parsed.flags, 'agent-id');
263
+ const providerAdapter = requiredFlag(parsed.flags, 'provider-adapter');
264
+ const model = requiredFlag(parsed.flags, 'model');
265
+ if (!project.ok)
266
+ return resultFailure(project);
267
+ if (!userIntent.ok)
268
+ return resultFailure(userIntent);
269
+ if (!workflow.ok)
270
+ return resultFailure(workflow);
271
+ if (!phase.ok)
272
+ return resultFailure(phase);
273
+ if (!selectedAgentId.ok)
274
+ return resultFailure(selectedAgentId);
275
+ if (!providerAdapter.ok)
276
+ return resultFailure(providerAdapter);
277
+ if (!model.ok)
278
+ return resultFailure(model);
279
+ return jsonResult(service.createRun({
280
+ project: project.value,
281
+ userIntent: userIntent.value,
282
+ workflow: workflow.value,
283
+ phase: phase.value,
284
+ selectedAgentId: selectedAgentId.value,
285
+ providerAdapter: providerAdapter.value,
286
+ model: model.value,
287
+ }));
288
+ }
289
+ if (command === 'list') {
290
+ const status = optionalRunStatusFlag(parsed.flags, 'status');
291
+ if (!status.ok)
292
+ return resultFailure(status);
293
+ const filters = {};
294
+ const project = optionalStringFlag(parsed.flags, 'project');
295
+ if (project !== undefined)
296
+ filters.project = project;
297
+ if (status.value !== undefined)
298
+ filters.status = status.value;
299
+ return jsonResult(service.listRuns(filters));
300
+ }
301
+ if (command === 'get') {
302
+ const id = requiredFlag(parsed.flags, 'id');
303
+ return id.ok ? jsonResult(service.getRun(id.value)) : resultFailure(id);
304
+ }
305
+ if (command === 'export-snapshot') {
306
+ const project = requiredFlag(parsed.flags, 'project');
307
+ const runId = requiredFlag(parsed.flags, 'run-id');
308
+ if (!project.ok)
309
+ return resultFailure(project);
310
+ if (!runId.ok)
311
+ return resultFailure(runId);
312
+ const exported = new RunSnapshotExportService(service).exportSnapshot({ project: project.value, runId: runId.value });
313
+ if (!exported.ok)
314
+ return resultFailure(exported);
315
+ const file = optionalStringFlag(parsed.flags, 'file');
316
+ if (file !== undefined) {
317
+ const written = writeJsonFile(file, exported.value, environment);
318
+ if (!written.ok)
319
+ return resultFailure(written);
320
+ }
321
+ return jsonResult(exported);
322
+ }
323
+ if (command === 'checkpoint') {
324
+ const runId = requiredFlag(parsed.flags, 'run-id');
325
+ const label = requiredFlag(parsed.flags, 'label');
326
+ const state = jsonFlag(parsed.flags, 'state', {});
327
+ if (!runId.ok)
328
+ return resultFailure(runId);
329
+ if (!label.ok)
330
+ return resultFailure(label);
331
+ if (!state.ok)
332
+ return resultFailure(state);
333
+ return jsonResult(service.appendCheckpoint({ runId: runId.value, label: label.value, state: state.value }));
334
+ }
335
+ if (command === 'finish') {
336
+ const runId = requiredFlag(parsed.flags, 'run-id');
337
+ const status = finalRunStatusFlag(parsed.flags, 'status');
338
+ const outcome = runOutcomeFlag(parsed.flags, 'outcome');
339
+ if (!runId.ok)
340
+ return resultFailure(runId);
341
+ if (!status.ok)
342
+ return resultFailure(status);
343
+ if (!outcome.ok)
344
+ return resultFailure(outcome);
345
+ const reason = optionalStringFlag(parsed.flags, 'reason');
346
+ return jsonResult(service.updateFinalStatus({
347
+ runId: runId.value,
348
+ status: status.value,
349
+ outcome: outcome.value,
350
+ ...(reason !== undefined ? { outcomeReason: reason } : {}),
351
+ }));
352
+ }
353
+ if (command === 'permission-check') {
354
+ const request = permissionRequestFromFlags(parsed, database, environment);
355
+ if (!request.ok)
356
+ return resultFailure(request);
357
+ const runId = requiredFlag(parsed.flags, 'run-id');
358
+ if (!runId.ok)
359
+ return resultFailure(runId);
360
+ return jsonResult(service.evaluatePermissionForRun({ ...request.value, runId: runId.value }));
361
+ }
362
+ if (command === 'preflight') {
363
+ const request = permissionRequestFromFlags(parsed, database, environment);
364
+ if (!request.ok)
365
+ return resultFailure(request);
366
+ const runId = requiredFlag(parsed.flags, 'run-id');
367
+ if (!runId.ok)
368
+ return resultFailure(runId);
369
+ const run = service.getRun(runId.value);
370
+ const runMetadata = run.ok ? { phase: run.value.phase, agentId: run.value.selectedAgentId } : {};
371
+ return jsonResult(service.preflightOperation({ ...runMetadata, ...request.value, runId: runId.value }));
372
+ }
373
+ if (command === 'approvals') {
374
+ const runId = requiredFlag(parsed.flags, 'run');
375
+ return runId.ok ? jsonResult(service.listApprovals(runId.value)) : resultFailure(runId);
376
+ }
377
+ if (command === 'retry-check') {
378
+ const approvalId = requiredFlag(parsed.flags, 'approval');
379
+ if (!approvalId.ok)
380
+ return resultFailure(approvalId);
381
+ const policy = retryPolicyFlag(parsed.flags);
382
+ if (!policy.ok)
383
+ return resultFailure(policy);
384
+ const approval = service.getApproval(approvalId.value);
385
+ if (!approval.ok)
386
+ return resultFailure(approval);
387
+ const retry = service.evaluateOperationRetry(policy.value === undefined ? { approvalId: approvalId.value } : { approvalId: approvalId.value, policy: policy.value });
388
+ if (!retry.ok)
389
+ return resultFailure(retry);
390
+ return jsonResult({
391
+ ok: true,
392
+ value: {
393
+ approvalId: approval.value.id,
394
+ runId: approval.value.runId,
395
+ decision: retry.value.allowed ? 'allowed' : 'blocked',
396
+ allowed: retry.value.allowed,
397
+ reasonCode: retry.value.reasonCode,
398
+ reason: retry.value.reason,
399
+ policy: retry.value.policy,
400
+ retryableStatuses: retry.value.retryableStatuses,
401
+ evaluatedAttemptCount: retry.value.evaluatedAttemptCount,
402
+ ...(retry.value.latestAttempt === undefined ? {} : { latestAttempt: retry.value.latestAttempt }),
403
+ ...(retry.value.activeAttempt === undefined ? {} : { activeAttempt: retry.value.activeAttempt }),
404
+ executorInvoked: false,
405
+ operationExecuted: false,
406
+ },
407
+ });
408
+ }
409
+ if (command === 'resume-gate') {
410
+ const approvalId = requiredFlag(parsed.flags, 'approval');
411
+ if (!approvalId.ok)
412
+ return resultFailure(approvalId);
413
+ const policy = retryPolicyFlag(parsed.flags);
414
+ if (!policy.ok)
415
+ return resultFailure(policy);
416
+ return jsonResult(service.getRunResumeOrchestrationPlan(policy.value === undefined ? { approvalId: approvalId.value } : { approvalId: approvalId.value, policy: policy.value }));
417
+ }
418
+ if (command === 'approve' || command === 'reject' || command === 'cancel-approval') {
419
+ const approvalId = requiredFlag(parsed.flags, 'approval');
420
+ const actor = requiredFlag(parsed.flags, 'actor');
421
+ if (!approvalId.ok)
422
+ return resultFailure(approvalId);
423
+ if (!actor.ok)
424
+ return resultFailure(actor);
425
+ const reason = optionalStringFlag(parsed.flags, 'reason');
426
+ const status = command === 'approve' ? 'approved' : command === 'reject' ? 'rejected' : 'cancelled';
427
+ return jsonResult(service.resolveApproval({ approvalId: approvalId.value, status, actor: actor.value, ...(reason !== undefined ? { reason } : {}) }));
428
+ }
429
+ return usageFailure(`Unknown runs command: ${command}`);
430
+ }
431
+ export function runApprovalsCommand(command, parsed, database) {
432
+ const service = new RunService(database);
433
+ if (command === 'list') {
434
+ const runId = optionalStringFlag(parsed.flags, 'run-id');
435
+ const approvals = listCliApprovals(service, runId);
436
+ return approvals.ok ? jsonResult({ ok: true, value: approvals.value }) : resultFailure(approvals);
437
+ }
438
+ if (command === 'approve' || command === 'reject') {
439
+ const id = requiredFlag(parsed.flags, 'id');
440
+ if (!id.ok)
441
+ return resultFailure(id);
442
+ const reason = optionalStringFlag(parsed.flags, 'reason');
443
+ const resolved = service.resolveApproval({
444
+ approvalId: id.value,
445
+ status: command === 'approve' ? 'approved' : 'rejected',
446
+ actor: 'cli',
447
+ ...(reason === undefined ? {} : { reason }),
448
+ });
449
+ return jsonResult(resolved);
450
+ }
451
+ return usageFailure(`Unknown approvals command: ${command}`);
452
+ }
453
+ export function runPermissionsCommand(command, parsed, database, environment) {
454
+ if (command !== 'check')
455
+ return usageFailure(`Unknown permissions command: ${command}`);
456
+ const request = permissionRequestFromFlags(parsed, database, environment);
457
+ return request.ok ? jsonResult({ ok: true, value: evaluatePermission(request.value) }) : resultFailure(request);
458
+ }
459
+ // Re-export helpers for external use
460
+ export { listCliApprovals, permissionRequestFromFlags, runRunInsightCommand };