agentic-orchestrator 0.1.6 → 0.1.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 (426) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc.json +24 -0
  3. package/CLAUDE.md +3 -2
  4. package/README.md +47 -46
  5. package/agentic/orchestrator/defaults/policy.defaults.yaml +1 -1
  6. package/agentic/orchestrator/prompts/planner.system.md +1 -0
  7. package/agentic/orchestrator/schemas/agents.schema.json +4 -21
  8. package/agentic/orchestrator/schemas/gates.schema.json +4 -19
  9. package/agentic/orchestrator/schemas/index.schema.json +3 -14
  10. package/agentic/orchestrator/schemas/multi-project.schema.json +2 -8
  11. package/agentic/orchestrator/schemas/plan.schema.json +6 -26
  12. package/agentic/orchestrator/schemas/policy.schema.json +19 -81
  13. package/agentic/orchestrator/schemas/policy.user.schema.json +1 -5
  14. package/agentic/orchestrator/schemas/qa_test_index.schema.json +5 -29
  15. package/agentic/orchestrator/schemas/state.schema.json +11 -61
  16. package/agentic/orchestrator/tools/catalog.json +33 -164
  17. package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +1 -3
  18. package/agentic/orchestrator/tools/schemas/input/feature.delete.input.schema.json +1 -5
  19. package/agentic/orchestrator/tools/schemas/input/feature.get_context.input.schema.json +1 -3
  20. package/agentic/orchestrator/tools/schemas/input/feature.init.input.schema.json +1 -4
  21. package/agentic/orchestrator/tools/schemas/input/feature.log_append.input.schema.json +1 -5
  22. package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +1 -6
  23. package/agentic/orchestrator/tools/schemas/input/feature.state_get.input.schema.json +1 -3
  24. package/agentic/orchestrator/tools/schemas/input/feature.state_patch.input.schema.json +1 -5
  25. package/agentic/orchestrator/tools/schemas/input/gates.run.input.schema.json +1 -5
  26. package/agentic/orchestrator/tools/schemas/input/locks.acquire.input.schema.json +1 -5
  27. package/agentic/orchestrator/tools/schemas/input/locks.release.input.schema.json +1 -5
  28. package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +10 -1
  29. package/agentic/orchestrator/tools/schemas/input/plan.get.input.schema.json +1 -3
  30. package/agentic/orchestrator/tools/schemas/input/plan.submit.input.schema.json +1 -5
  31. package/agentic/orchestrator/tools/schemas/input/plan.update.input.schema.json +1 -6
  32. package/agentic/orchestrator/tools/schemas/input/qa.test_index_get.input.schema.json +1 -3
  33. package/agentic/orchestrator/tools/schemas/input/qa.test_index_update.input.schema.json +1 -6
  34. package/agentic/orchestrator/tools/schemas/input/repo.apply_patch.input.schema.json +1 -5
  35. package/agentic/orchestrator/tools/schemas/input/repo.diff.input.schema.json +1 -3
  36. package/agentic/orchestrator/tools/schemas/input/repo.diff_bundle.input.schema.json +1 -3
  37. package/agentic/orchestrator/tools/schemas/input/repo.ensure_worktree.input.schema.json +1 -4
  38. package/agentic/orchestrator/tools/schemas/input/repo.read_file.input.schema.json +1 -4
  39. package/agentic/orchestrator/tools/schemas/input/repo.search.input.schema.json +1 -4
  40. package/agentic/orchestrator/tools/schemas/input/repo.status.input.schema.json +1 -3
  41. package/agentic/orchestrator/tools/schemas/input/report.feature_summary.input.schema.json +1 -3
  42. package/agentic/orchestrator/tools/schemas/output/collisions.scan.output.schema.json +1 -3
  43. package/agentic/orchestrator/tools/schemas/output/evidence.latest.output.schema.json +1 -4
  44. package/agentic/orchestrator/tools/schemas/output/feature.delete.output.schema.json +4 -20
  45. package/agentic/orchestrator/tools/schemas/output/feature.discover_specs.output.schema.json +2 -7
  46. package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +1 -8
  47. package/agentic/orchestrator/tools/schemas/output/feature.init.output.schema.json +1 -5
  48. package/agentic/orchestrator/tools/schemas/output/feature.log_append.output.schema.json +1 -5
  49. package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +1 -6
  50. package/agentic/orchestrator/tools/schemas/output/feature.state_get.output.schema.json +1 -4
  51. package/agentic/orchestrator/tools/schemas/output/feature.state_patch.output.schema.json +1 -5
  52. package/agentic/orchestrator/tools/schemas/output/gates.list.output.schema.json +2 -7
  53. package/agentic/orchestrator/tools/schemas/output/gates.run.output.schema.json +1 -8
  54. package/agentic/orchestrator/tools/schemas/output/locks.acquire.output.schema.json +1 -7
  55. package/agentic/orchestrator/tools/schemas/output/locks.release.output.schema.json +1 -5
  56. package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +22 -2
  57. package/agentic/orchestrator/tools/schemas/output/plan.get.output.schema.json +1 -4
  58. package/agentic/orchestrator/tools/schemas/output/plan.submit.output.schema.json +1 -5
  59. package/agentic/orchestrator/tools/schemas/output/plan.update.output.schema.json +1 -5
  60. package/agentic/orchestrator/tools/schemas/output/qa.test_index_get.output.schema.json +1 -5
  61. package/agentic/orchestrator/tools/schemas/output/qa.test_index_update.output.schema.json +1 -4
  62. package/agentic/orchestrator/tools/schemas/output/repo.apply_patch.output.schema.json +1 -6
  63. package/agentic/orchestrator/tools/schemas/output/repo.diff.output.schema.json +1 -4
  64. package/agentic/orchestrator/tools/schemas/output/repo.diff_bundle.output.schema.json +1 -7
  65. package/agentic/orchestrator/tools/schemas/output/repo.ensure_worktree.output.schema.json +1 -6
  66. package/agentic/orchestrator/tools/schemas/output/repo.read_file.output.schema.json +1 -5
  67. package/agentic/orchestrator/tools/schemas/output/repo.search.output.schema.json +1 -5
  68. package/agentic/orchestrator/tools/schemas/output/repo.status.output.schema.json +1 -5
  69. package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +1 -4
  70. package/apps/control-plane/scripts/validate-architecture-rules.mjs +16 -5
  71. package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +30 -8
  72. package/apps/control-plane/scripts/validate-mcp-contracts.ts +13 -7
  73. package/apps/control-plane/src/application/adapters/adapter-registry.ts +35 -15
  74. package/apps/control-plane/src/application/multi-project-loader.ts +27 -10
  75. package/apps/control-plane/src/application/services/activity-monitor-service.ts +26 -14
  76. package/apps/control-plane/src/application/services/collision-queue-service.ts +31 -17
  77. package/apps/control-plane/src/application/services/cost-tracking-service.ts +23 -16
  78. package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +12 -4
  79. package/apps/control-plane/src/application/services/feature-deletion-service.ts +94 -58
  80. package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +19 -13
  81. package/apps/control-plane/src/application/services/feature-state-service.ts +29 -19
  82. package/apps/control-plane/src/application/services/gate-interpolation-service.ts +7 -2
  83. package/apps/control-plane/src/application/services/gate-service.ts +64 -41
  84. package/apps/control-plane/src/application/services/instance-isolation-service.ts +1 -1
  85. package/apps/control-plane/src/application/services/issue-tracker-service.ts +49 -38
  86. package/apps/control-plane/src/application/services/lock-service.ts +75 -49
  87. package/apps/control-plane/src/application/services/merge-service.ts +91 -50
  88. package/apps/control-plane/src/application/services/notifier-service.ts +42 -20
  89. package/apps/control-plane/src/application/services/patch-service.ts +73 -44
  90. package/apps/control-plane/src/application/services/performance-analytics-service.ts +8 -6
  91. package/apps/control-plane/src/application/services/plan-service.ts +148 -89
  92. package/apps/control-plane/src/application/services/policy-loader-service.ts +10 -4
  93. package/apps/control-plane/src/application/services/pr-monitor-service.ts +33 -14
  94. package/apps/control-plane/src/application/services/qa-index-service.ts +20 -16
  95. package/apps/control-plane/src/application/services/reactions-service.ts +30 -15
  96. package/apps/control-plane/src/application/services/reporting-service.ts +16 -12
  97. package/apps/control-plane/src/application/services/run-lease-service.ts +138 -81
  98. package/apps/control-plane/src/application/tools/tool-metadata.ts +5 -5
  99. package/apps/control-plane/src/application/tools/tool-router.ts +6 -3
  100. package/apps/control-plane/src/cli/aop.ts +2 -2
  101. package/apps/control-plane/src/cli/attach-command-handler.ts +9 -9
  102. package/apps/control-plane/src/cli/cleanup-command-handler.ts +16 -11
  103. package/apps/control-plane/src/cli/cli-argument-parser.ts +6 -3
  104. package/apps/control-plane/src/cli/dashboard-command-handler.ts +28 -8
  105. package/apps/control-plane/src/cli/delete-command-handler.ts +7 -7
  106. package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
  107. package/apps/control-plane/src/cli/init-command-handler.ts +110 -54
  108. package/apps/control-plane/src/cli/io.ts +7 -3
  109. package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
  110. package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
  111. package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
  112. package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
  113. package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
  114. package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
  115. package/apps/control-plane/src/cli/spec-utils.ts +2 -2
  116. package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
  117. package/apps/control-plane/src/cli/tooling.ts +3 -3
  118. package/apps/control-plane/src/cli/types.ts +1 -1
  119. package/apps/control-plane/src/core/collisions.ts +27 -10
  120. package/apps/control-plane/src/core/constants.ts +13 -7
  121. package/apps/control-plane/src/core/error-codes.ts +1 -1
  122. package/apps/control-plane/src/core/fs.ts +11 -5
  123. package/apps/control-plane/src/core/gates.ts +53 -27
  124. package/apps/control-plane/src/core/git.ts +18 -6
  125. package/apps/control-plane/src/core/kernel.ts +515 -227
  126. package/apps/control-plane/src/core/patch.ts +7 -3
  127. package/apps/control-plane/src/core/path-layout.ts +5 -1
  128. package/apps/control-plane/src/core/path-rules.ts +19 -5
  129. package/apps/control-plane/src/core/qa-index.ts +26 -12
  130. package/apps/control-plane/src/core/response.ts +9 -6
  131. package/apps/control-plane/src/core/schemas.ts +29 -10
  132. package/apps/control-plane/src/core/tool-caller.ts +1 -1
  133. package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
  134. package/apps/control-plane/src/index.ts +3 -9
  135. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +69 -32
  136. package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
  137. package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
  138. package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
  139. package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
  140. package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
  141. package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
  142. package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
  143. package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
  144. package/apps/control-plane/src/mcp/tool-client.ts +17 -5
  145. package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
  146. package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
  147. package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
  148. package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
  149. package/apps/control-plane/src/providers/providers.ts +72 -48
  150. package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
  151. package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
  152. package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
  153. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
  154. package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
  155. package/apps/control-plane/src/supervisor/runtime.ts +59 -35
  156. package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
  157. package/apps/control-plane/src/supervisor/types.ts +22 -7
  158. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
  159. package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
  160. package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
  161. package/apps/control-plane/test/aop.spec.ts +4 -4
  162. package/apps/control-plane/test/batch-operations.spec.ts +20 -18
  163. package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
  164. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
  165. package/apps/control-plane/test/bootstrap.spec.ts +72 -40
  166. package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
  167. package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
  168. package/apps/control-plane/test/cli.spec.ts +1 -1
  169. package/apps/control-plane/test/cli.unit.spec.ts +226 -167
  170. package/apps/control-plane/test/collision-queue.spec.ts +49 -40
  171. package/apps/control-plane/test/collisions.spec.ts +30 -30
  172. package/apps/control-plane/test/core-utils.spec.ts +29 -15
  173. package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
  174. package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
  175. package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
  176. package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
  177. package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
  178. package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
  179. package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
  180. package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
  181. package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
  182. package/apps/control-plane/test/gates.spec.ts +101 -81
  183. package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
  184. package/apps/control-plane/test/helpers.ts +10 -6
  185. package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
  186. package/apps/control-plane/test/init-wizard.spec.ts +162 -67
  187. package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
  188. package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
  189. package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
  190. package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
  191. package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
  192. package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
  193. package/apps/control-plane/test/kernel.spec.ts +134 -51
  194. package/apps/control-plane/test/lock-service.spec.ts +92 -68
  195. package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
  196. package/apps/control-plane/test/mcp.spec.ts +231 -115
  197. package/apps/control-plane/test/merge-service.spec.ts +142 -94
  198. package/apps/control-plane/test/multi-project.spec.ts +28 -22
  199. package/apps/control-plane/test/notifier-service.spec.ts +136 -92
  200. package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
  201. package/apps/control-plane/test/patch-service.spec.ts +128 -48
  202. package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
  203. package/apps/control-plane/test/plan-service.spec.ts +50 -39
  204. package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
  205. package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
  206. package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
  207. package/apps/control-plane/test/providers.spec.ts +133 -102
  208. package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
  209. package/apps/control-plane/test/qa-index.spec.ts +58 -61
  210. package/apps/control-plane/test/reactions.spec.ts +88 -45
  211. package/apps/control-plane/test/response.spec.ts +5 -5
  212. package/apps/control-plane/test/resume-command.spec.ts +121 -80
  213. package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
  214. package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
  215. package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
  216. package/apps/control-plane/test/services.spec.ts +147 -129
  217. package/apps/control-plane/test/session-management.spec.ts +136 -74
  218. package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
  219. package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
  220. package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
  221. package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
  222. package/apps/control-plane/test/supervisor.spec.ts +67 -43
  223. package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
  224. package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
  225. package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
  226. package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
  227. package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
  228. package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
  229. package/apps/control-plane/tsconfig.build.json +2 -7
  230. package/apps/control-plane/tsconfig.json +1 -5
  231. package/apps/control-plane/vitest.config.ts +7 -7
  232. package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
  233. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
  234. package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
  235. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
  236. package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
  237. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
  238. package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
  239. package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
  240. package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
  241. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
  242. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
  243. package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
  244. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  245. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
  246. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
  247. package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
  248. package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
  249. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
  250. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
  251. package/dist/apps/control-plane/application/services/gate-service.js +26 -26
  252. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  253. package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
  254. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
  255. package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
  256. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
  257. package/dist/apps/control-plane/application/services/lock-service.js +32 -32
  258. package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
  259. package/dist/apps/control-plane/application/services/merge-service.js +41 -27
  260. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  261. package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
  262. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
  263. package/dist/apps/control-plane/application/services/patch-service.js +21 -19
  264. package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
  265. package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
  266. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
  267. package/dist/apps/control-plane/application/services/plan-service.js +33 -33
  268. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  269. package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
  270. package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
  271. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
  272. package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
  273. package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
  274. package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
  275. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
  276. package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
  277. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  278. package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
  279. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  280. package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
  281. package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
  282. package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
  283. package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
  284. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
  285. package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
  286. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  287. package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
  288. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
  289. package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
  290. package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
  291. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
  292. package/dist/apps/control-plane/cli/init-command-handler.js +44 -33
  293. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
  294. package/dist/apps/control-plane/cli/io.js +2 -2
  295. package/dist/apps/control-plane/cli/io.js.map +1 -1
  296. package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
  297. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  298. package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
  299. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
  300. package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
  301. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  302. package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
  303. package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
  304. package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
  305. package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
  306. package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
  307. package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
  308. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  309. package/dist/apps/control-plane/cli/tooling.js +1 -1
  310. package/dist/apps/control-plane/core/collisions.js +11 -8
  311. package/dist/apps/control-plane/core/collisions.js.map +1 -1
  312. package/dist/apps/control-plane/core/constants.js +13 -7
  313. package/dist/apps/control-plane/core/constants.js.map +1 -1
  314. package/dist/apps/control-plane/core/error-codes.js +1 -1
  315. package/dist/apps/control-plane/core/fs.js.map +1 -1
  316. package/dist/apps/control-plane/core/gates.d.ts +2 -2
  317. package/dist/apps/control-plane/core/gates.js +26 -19
  318. package/dist/apps/control-plane/core/gates.js.map +1 -1
  319. package/dist/apps/control-plane/core/git.js +3 -3
  320. package/dist/apps/control-plane/core/git.js.map +1 -1
  321. package/dist/apps/control-plane/core/kernel.d.ts +1 -0
  322. package/dist/apps/control-plane/core/kernel.js +134 -81
  323. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  324. package/dist/apps/control-plane/core/patch.js +7 -3
  325. package/dist/apps/control-plane/core/patch.js.map +1 -1
  326. package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
  327. package/dist/apps/control-plane/core/path-layout.js +4 -1
  328. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  329. package/dist/apps/control-plane/core/path-rules.js +3 -1
  330. package/dist/apps/control-plane/core/path-rules.js.map +1 -1
  331. package/dist/apps/control-plane/core/qa-index.js +5 -5
  332. package/dist/apps/control-plane/core/qa-index.js.map +1 -1
  333. package/dist/apps/control-plane/core/response.js +3 -3
  334. package/dist/apps/control-plane/core/response.js.map +1 -1
  335. package/dist/apps/control-plane/core/schemas.js +10 -6
  336. package/dist/apps/control-plane/core/schemas.js.map +1 -1
  337. package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
  338. package/dist/apps/control-plane/index.d.ts +1 -1
  339. package/dist/apps/control-plane/index.js +1 -1
  340. package/dist/apps/control-plane/index.js.map +1 -1
  341. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +31 -20
  342. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  343. package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
  344. package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
  345. package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
  346. package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
  347. package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
  348. package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
  349. package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
  350. package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
  351. package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
  352. package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
  353. package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
  354. package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
  355. package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
  356. package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
  357. package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
  358. package/dist/apps/control-plane/mcp/tool-client.js +2 -2
  359. package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
  360. package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
  361. package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
  362. package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
  363. package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
  364. package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
  365. package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
  366. package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
  367. package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
  368. package/dist/apps/control-plane/providers/providers.d.ts +1 -1
  369. package/dist/apps/control-plane/providers/providers.js +31 -34
  370. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  371. package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
  372. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  373. package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
  374. package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
  375. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
  376. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
  377. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  378. package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
  379. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  380. package/dist/apps/control-plane/supervisor/runtime.js +25 -21
  381. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  382. package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
  383. package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
  384. package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
  385. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  386. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
  387. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  388. package/eslint.config.mjs +20 -20
  389. package/example-configurations/README.md +1 -1
  390. package/example-configurations/java/agents.yaml +3 -3
  391. package/example-configurations/java/policy.yaml +1 -1
  392. package/example-configurations/node/agents.yaml +3 -3
  393. package/example-configurations/node/policy.yaml +1 -1
  394. package/package.json +10 -5
  395. package/packages/web-dashboard/next.config.js +2 -2
  396. package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
  397. package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
  398. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
  399. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
  400. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
  401. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
  402. package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
  403. package/packages/web-dashboard/src/app/globals.css +10 -2
  404. package/packages/web-dashboard/src/app/page.tsx +100 -37
  405. package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
  406. package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
  407. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
  408. package/packages/web-dashboard/tsconfig.json +3 -11
  409. package/scripts/nx-safe.mjs +10 -10
  410. package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
  411. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +187 -90
  412. package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
  413. package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
  414. package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
  415. package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
  416. package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
  417. package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
  418. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
  419. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
  420. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
  421. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
  422. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
  423. package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
  424. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
  425. package/spec-files/progress.md +186 -175
  426. package/tsconfig.json +2 -8
@@ -8,11 +8,16 @@ import { fileURLToPath } from 'node:url';
8
8
  import YAML from 'yaml';
9
9
  import { SchemaRegistry } from '../core/schemas.js';
10
10
  import { loadComposedPolicy } from '../application/services/policy-loader-service.js';
11
- import { AGENT_PROVIDER_SLOT, SCM_PROVIDER_SLOT, globalAdapterRegistry } from '../application/adapters/adapter-registry.js';
11
+ import {
12
+ AGENT_PROVIDER_SLOT,
13
+ SCM_PROVIDER_SLOT,
14
+ globalAdapterRegistry,
15
+ } from '../application/adapters/adapter-registry.js';
12
16
 
13
17
  const execFileAsync = promisify(execFile);
14
18
  const MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));
15
19
  const TEMPLATE_ROOT = path.resolve(MODULE_DIR, '../../../../agentic/orchestrator');
20
+ const GENERATED_CONFIG_ROOT = 'config/agentic/orchestrator';
16
21
  const DEFAULT_AGENT_PROVIDER = 'custom';
17
22
  const DEFAULT_AGENT_MODEL = 'local-default';
18
23
  const DEFAULT_SCM_PROVIDER = 'github';
@@ -91,7 +96,7 @@ async function detectGitContext(repoRoot: string): Promise<GitContext> {
91
96
  const { stdout } = await execFileAsync(
92
97
  'git',
93
98
  ['-C', repoRoot, 'symbolic-ref', 'refs/remotes/origin/HEAD', '--short'],
94
- { timeout: 3000 }
99
+ { timeout: 3000 },
95
100
  );
96
101
  const ref = stdout.trim();
97
102
  const parts = ref.split('/');
@@ -113,7 +118,7 @@ async function detectTestFramework(repoRoot: string): Promise<TestFramework> {
113
118
  : {}),
114
119
  ...(typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
115
120
  ? (pkg.devDependencies as Record<string, unknown>)
116
- : {})
121
+ : {}),
117
122
  };
118
123
  if ('vitest' in deps) {
119
124
  return 'vitest';
@@ -130,7 +135,7 @@ async function detectTestFramework(repoRoot: string): Promise<TestFramework> {
130
135
  ['pyproject.toml', 'pytest'],
131
136
  ['pom.xml', 'maven'],
132
137
  ['build.gradle', 'gradle'],
133
- ['build.gradle.kts', 'gradle']
138
+ ['build.gradle.kts', 'gradle'],
134
139
  ];
135
140
 
136
141
  for (const [file, framework] of buildFileChecks) {
@@ -145,7 +150,10 @@ async function detectTestFramework(repoRoot: string): Promise<TestFramework> {
145
150
  return 'vitest';
146
151
  }
147
152
 
148
- function buildGateCommands(framework: TestFramework): { test: string[]; testWithCoverage: string[] } {
153
+ function buildGateCommands(framework: TestFramework): {
154
+ test: string[];
155
+ testWithCoverage: string[];
156
+ } {
149
157
  switch (framework) {
150
158
  case 'jest':
151
159
  return { test: ['npx', 'jest'], testWithCoverage: ['npx', 'jest', '--coverage'] };
@@ -156,7 +164,10 @@ function buildGateCommands(framework: TestFramework): { test: string[]; testWith
156
164
  case 'gradle':
157
165
  return { test: ['./gradlew', 'test'], testWithCoverage: ['./gradlew', 'check'] };
158
166
  default:
159
- return { test: ['npx', 'vitest', 'run'], testWithCoverage: ['npx', 'vitest', 'run', '--coverage'] };
167
+ return {
168
+ test: ['npx', 'vitest', 'run'],
169
+ testWithCoverage: ['npx', 'vitest', 'run', '--coverage'],
170
+ };
160
171
  }
161
172
  }
162
173
 
@@ -169,7 +180,8 @@ function escapeYamlString(value: string): string {
169
180
  }
170
181
 
171
182
  function generateLeanPolicyYaml(wizard: WizardConfig): string {
172
- const notificationsEnabled = wizard.notifications.desktop || wizard.notifications.slack || wizard.notifications.webhook;
183
+ const notificationsEnabled =
184
+ wizard.notifications.desktop || wizard.notifications.slack || wizard.notifications.webhook;
173
185
  return `version: 1
174
186
  worktree:
175
187
  base_branch: ${wizard.baseBranch}
@@ -196,7 +208,8 @@ notifications:
196
208
  }
197
209
 
198
210
  function generateFullPolicyYaml(context: GitContext, wizard: WizardConfig): string {
199
- const notificationsEnabled = wizard.notifications.desktop || wizard.notifications.slack || wizard.notifications.webhook;
211
+ const notificationsEnabled =
212
+ wizard.notifications.desktop || wizard.notifications.slack || wizard.notifications.webhook;
200
213
  return `version: 1
201
214
  commit_policy:
202
215
  allow_commit: false
@@ -222,7 +235,7 @@ locks:
222
235
  multiplier: 2
223
236
  jitter_ms: 150
224
237
  protected_areas:
225
- - agentic/orchestrator/policy.yaml
238
+ - config/agentic/orchestrator/policy.yaml
226
239
  required_modes:
227
240
  - fast
228
241
  - full
@@ -392,11 +405,11 @@ function generateAgentsYaml(wizard: WizardConfig): string {
392
405
  return `version: 1
393
406
  roles:
394
407
  planner:
395
- system_prompt_path: agentic/orchestrator/prompts/planner.system.md
408
+ system_prompt_path: config/agentic/orchestrator/prompts/planner.system.md
396
409
  builder:
397
- system_prompt_path: agentic/orchestrator/prompts/builder.system.md
410
+ system_prompt_path: config/agentic/orchestrator/prompts/builder.system.md
398
411
  qa:
399
- system_prompt_path: agentic/orchestrator/prompts/qa.system.md
412
+ system_prompt_path: config/agentic/orchestrator/prompts/qa.system.md
400
413
  missing_prompt_behavior: ignore
401
414
  runtime:
402
415
  default_provider: ${wizard.defaultProvider}
@@ -434,26 +447,45 @@ function parseInteger(raw: string, fallback: number, min: number, max: number):
434
447
 
435
448
  function parseFramework(raw: string, fallback: TestFramework): TestFramework {
436
449
  const value = raw.trim().toLowerCase();
437
- if (value === 'vitest' || value === 'jest' || value === 'pytest' || value === 'maven' || value === 'gradle') {
450
+ if (
451
+ value === 'vitest' ||
452
+ value === 'jest' ||
453
+ value === 'pytest' ||
454
+ value === 'maven' ||
455
+ value === 'gradle'
456
+ ) {
438
457
  return value;
439
458
  }
440
459
  return fallback;
441
460
  }
442
461
 
443
- function parseNotificationChannels(raw: string): { desktop: boolean; slack: boolean; webhook: boolean } {
462
+ function parseNotificationChannels(raw: string): {
463
+ desktop: boolean;
464
+ slack: boolean;
465
+ webhook: boolean;
466
+ } {
444
467
  const normalized = raw.trim().toLowerCase();
445
468
  if (!normalized || normalized === 'none') {
446
469
  return { desktop: false, slack: false, webhook: false };
447
470
  }
448
- const channels = new Set(normalized.split(',').map((token) => token.trim()).filter((token) => token.length > 0));
471
+ const channels = new Set(
472
+ normalized
473
+ .split(',')
474
+ .map((token) => token.trim())
475
+ .filter((token) => token.length > 0),
476
+ );
449
477
  return {
450
478
  desktop: channels.has('desktop'),
451
479
  slack: channels.has('slack'),
452
- webhook: channels.has('webhook')
480
+ webhook: channels.has('webhook'),
453
481
  };
454
482
  }
455
483
 
456
- function parseAdapterName(raw: string, supportedNames: ReadonlySet<string>, fallback: string): string {
484
+ function parseAdapterName(
485
+ raw: string,
486
+ supportedNames: ReadonlySet<string>,
487
+ fallback: string,
488
+ ): string {
457
489
  const value = raw.trim();
458
490
  if (supportedNames.has(value)) {
459
491
  return value;
@@ -471,7 +503,11 @@ function resolveActivityDetector(defaultProvider: string): string {
471
503
  return 'process-heuristic';
472
504
  }
473
505
 
474
- async function askWithDefault(prompt: PromptSession, label: string, defaultValue: string): Promise<string> {
506
+ async function askWithDefault(
507
+ prompt: PromptSession,
508
+ label: string,
509
+ defaultValue: string,
510
+ ): Promise<string> {
475
511
  const raw = (await prompt.question(`${label} [${defaultValue}]: `)).trim();
476
512
  return raw.length > 0 ? raw : defaultValue;
477
513
  }
@@ -484,36 +520,40 @@ async function collectWizardConfig(
484
520
  defaultModel: string;
485
521
  defaultScmProvider: string;
486
522
  },
487
- promptFactory: () => PromptSession
523
+ promptFactory: () => PromptSession,
488
524
  ): Promise<WizardConfig> {
489
525
  const prompt = promptFactory();
490
526
  try {
491
- const supportedProviders = new Set(globalAdapterRegistry.list(AGENT_PROVIDER_SLOT.name).map((adapter) => adapter.name));
492
- const supportedScmProviders = new Set(globalAdapterRegistry.list(SCM_PROVIDER_SLOT.name).map((adapter) => adapter.name));
527
+ const supportedProviders = new Set(
528
+ globalAdapterRegistry.list(AGENT_PROVIDER_SLOT.name).map((adapter) => adapter.name),
529
+ );
530
+ const supportedScmProviders = new Set(
531
+ globalAdapterRegistry.list(SCM_PROVIDER_SLOT.name).map((adapter) => adapter.name),
532
+ );
493
533
 
494
534
  const baseBranch = await askWithDefault(prompt, 'Worktree base branch', defaults.branch);
495
535
  const defaultProviderRaw = await askWithDefault(
496
536
  prompt,
497
537
  `Default agent provider (${Array.from(supportedProviders).join('|')})`,
498
- defaults.defaultProvider
538
+ defaults.defaultProvider,
499
539
  );
500
540
  const defaultModel = await askWithDefault(prompt, 'Default model', defaults.defaultModel);
501
541
  const scmProviderRaw = await askWithDefault(
502
542
  prompt,
503
543
  `SCM provider (${Array.from(supportedScmProviders).join('|')})`,
504
- defaults.defaultScmProvider
544
+ defaults.defaultScmProvider,
505
545
  );
506
546
  const maxParallelGateRunsRaw = await askWithDefault(prompt, 'Max parallel gate runs', '3');
507
547
  const dashboardPortRaw = await askWithDefault(prompt, 'Dashboard port', '3000');
508
548
  const channelsRaw = await askWithDefault(
509
549
  prompt,
510
550
  'Notification channels (comma-separated: desktop,slack,webhook,none)',
511
- 'none'
551
+ 'none',
512
552
  );
513
553
  const frameworkRaw = await askWithDefault(
514
554
  prompt,
515
555
  'Test framework (vitest|jest|pytest|maven|gradle)',
516
- defaults.framework
556
+ defaults.framework,
517
557
  );
518
558
 
519
559
  const channels = parseNotificationChannels(channelsRaw);
@@ -529,9 +569,17 @@ async function collectWizardConfig(
529
569
 
530
570
  return {
531
571
  baseBranch,
532
- defaultProvider: parseAdapterName(defaultProviderRaw, supportedProviders, defaults.defaultProvider),
572
+ defaultProvider: parseAdapterName(
573
+ defaultProviderRaw,
574
+ supportedProviders,
575
+ defaults.defaultProvider,
576
+ ),
533
577
  defaultModel,
534
- scmProvider: parseAdapterName(scmProviderRaw, supportedScmProviders, defaults.defaultScmProvider),
578
+ scmProvider: parseAdapterName(
579
+ scmProviderRaw,
580
+ supportedScmProviders,
581
+ defaults.defaultScmProvider,
582
+ ),
535
583
  maxParallelGateRuns: parseInteger(maxParallelGateRunsRaw, 3, 1, 64),
536
584
  dashboardPort: parseInteger(dashboardPortRaw, 3000, 1, 65535),
537
585
  framework: parseFramework(frameworkRaw, defaults.framework),
@@ -540,8 +588,8 @@ async function collectWizardConfig(
540
588
  slack: channels.slack,
541
589
  webhook: channels.webhook,
542
590
  slackWebhook,
543
- webhookUrl
544
- }
591
+ webhookUrl,
592
+ },
545
593
  };
546
594
  } finally {
547
595
  prompt.close();
@@ -550,7 +598,7 @@ async function collectWizardConfig(
550
598
 
551
599
  async function loadTemplateFiles(
552
600
  subdir: 'prompts',
553
- matcher: (filename: string) => boolean
601
+ matcher: (filename: string) => boolean,
554
602
  ): Promise<Array<{ rel: string; content: string }>> {
555
603
  const sourceDir = path.join(TEMPLATE_ROOT, subdir);
556
604
  const entries = await fs.readdir(sourceDir, { withFileTypes: true });
@@ -561,8 +609,8 @@ async function loadTemplateFiles(
561
609
  }
562
610
  const full = path.join(sourceDir, entry.name);
563
611
  templates.push({
564
- rel: `agentic/orchestrator/${subdir}/${entry.name}`,
565
- content: await fs.readFile(full, 'utf8')
612
+ rel: `${GENERATED_CONFIG_ROOT}/${subdir}/${entry.name}`,
613
+ content: await fs.readFile(full, 'utf8'),
566
614
  });
567
615
  }
568
616
  return templates.sort((a, b) => a.rel.localeCompare(b.rel));
@@ -594,8 +642,8 @@ export class InitCommandHandler {
594
642
  slack: false,
595
643
  webhook: false,
596
644
  slackWebhook: '',
597
- webhookUrl: ''
598
- }
645
+ webhookUrl: '',
646
+ },
599
647
  }
600
648
  : await collectWizardConfig(
601
649
  {
@@ -603,12 +651,12 @@ export class InitCommandHandler {
603
651
  framework,
604
652
  defaultProvider: DEFAULT_AGENT_PROVIDER,
605
653
  defaultModel: DEFAULT_AGENT_MODEL,
606
- defaultScmProvider: DEFAULT_SCM_PROVIDER
654
+ defaultScmProvider: DEFAULT_SCM_PROVIDER,
607
655
  },
608
- this.promptFactory
656
+ this.promptFactory,
609
657
  );
610
658
 
611
- const orchestratorDir = path.join(this.repoRoot, 'agentic', 'orchestrator');
659
+ const orchestratorDir = path.join(this.repoRoot, 'config', 'agentic', 'orchestrator');
612
660
  await fs.mkdir(orchestratorDir, { recursive: true });
613
661
 
614
662
  const policyContent = options.advanced_policy
@@ -617,14 +665,16 @@ export class InitCommandHandler {
617
665
 
618
666
  const configFiles: Array<{ rel: string; content: string }> = [
619
667
  {
620
- rel: 'agentic/orchestrator/policy.yaml',
621
- content: policyContent
668
+ rel: `${GENERATED_CONFIG_ROOT}/policy.yaml`,
669
+ content: policyContent,
622
670
  },
623
- { rel: 'agentic/orchestrator/gates.yaml', content: generateGatesYaml(wizard.framework) },
624
- { rel: 'agentic/orchestrator/agents.yaml', content: generateAgentsYaml(wizard) },
625
- { rel: 'agentic/orchestrator/adapters.yaml', content: generateAdaptersYaml(wizard) }
671
+ { rel: `${GENERATED_CONFIG_ROOT}/gates.yaml`, content: generateGatesYaml(wizard.framework) },
672
+ { rel: `${GENERATED_CONFIG_ROOT}/agents.yaml`, content: generateAgentsYaml(wizard) },
673
+ { rel: `${GENERATED_CONFIG_ROOT}/adapters.yaml`, content: generateAdaptersYaml(wizard) },
626
674
  ];
627
- const templateFiles = await loadTemplateFiles('prompts', (filename) => filename.endsWith('.md'));
675
+ const templateFiles = await loadTemplateFiles('prompts', (filename) =>
676
+ filename.endsWith('.md'),
677
+ );
628
678
  const writableFiles = [...configFiles, ...templateFiles];
629
679
 
630
680
  const created: string[] = [];
@@ -660,19 +710,23 @@ export class InitCommandHandler {
660
710
 
661
711
  // Validate policy.yaml via composition loader (merges user policy over bundled defaults
662
712
  // then validates the merged result against the full schema).
663
- const policyRel = 'agentic/orchestrator/policy.yaml';
713
+ const policyRel = `${GENERATED_CONFIG_ROOT}/policy.yaml`;
664
714
  if (!skipped.includes(policyRel)) {
665
715
  try {
666
- await loadComposedPolicy(this.repoRoot, path.join(this.repoRoot, policyRel), schemaRegistry);
716
+ await loadComposedPolicy(
717
+ this.repoRoot,
718
+ path.join(this.repoRoot, policyRel),
719
+ schemaRegistry,
720
+ );
667
721
  } catch (err) {
668
722
  validationWarnings.push(`Failed to validate ${policyRel}: ${String(err)}`);
669
723
  }
670
724
  }
671
725
 
672
726
  const nonPolicyTargets: Array<{ schema: string; rel: string }> = [
673
- { schema: 'gates.schema.json', rel: 'agentic/orchestrator/gates.yaml' },
674
- { schema: 'agents.schema.json', rel: 'agentic/orchestrator/agents.yaml' },
675
- { schema: 'adapters.schema.json', rel: 'agentic/orchestrator/adapters.yaml' }
727
+ { schema: 'gates.schema.json', rel: `${GENERATED_CONFIG_ROOT}/gates.yaml` },
728
+ { schema: 'agents.schema.json', rel: `${GENERATED_CONFIG_ROOT}/agents.yaml` },
729
+ { schema: 'adapters.schema.json', rel: `${GENERATED_CONFIG_ROOT}/adapters.yaml` },
676
730
  ];
677
731
 
678
732
  for (const { schema, rel } of nonPolicyTargets) {
@@ -695,12 +749,14 @@ export class InitCommandHandler {
695
749
  const policyMode = options.advanced_policy ? 'full (advanced)' : 'lean (common controls only)';
696
750
  const nextSteps = [
697
751
  `Generated policy.yaml in ${policyMode} mode`,
698
- 'Review generated files in agentic/orchestrator/{policy,gates,agents,adapters}.yaml',
699
- 'Verify prompts under agentic/orchestrator/prompts/',
700
- 'Run: aop run -fi <spec.md> to start orchestrating features'
752
+ 'Review generated files in config/agentic/orchestrator/{policy,gates,agents,adapters}.yaml',
753
+ 'Verify prompts under config/agentic/orchestrator/prompts/',
754
+ 'Run: aop run -fi <spec.md> to start orchestrating features',
701
755
  ];
702
756
  if (!options.advanced_policy) {
703
- nextSteps.push('To generate a full explicit policy with all advanced controls, re-run: aop init --advanced-policy --force');
757
+ nextSteps.push(
758
+ 'To generate a full explicit policy with all advanced controls, re-run: aop init --advanced-policy --force',
759
+ );
704
760
  }
705
761
 
706
762
  return {
@@ -711,8 +767,8 @@ export class InitCommandHandler {
711
767
  updated,
712
768
  skipped,
713
769
  validation_warnings: validationWarnings,
714
- next_steps: nextSteps
715
- }
770
+ next_steps: nextSteps,
771
+ },
716
772
  };
717
773
  }
718
774
  }
@@ -2,13 +2,17 @@ export function printPayload(payload: unknown): void {
2
2
  process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
3
3
  }
4
4
 
5
- export function printError(code: string, message: string, details: Record<string, unknown> = {}): void {
5
+ export function printError(
6
+ code: string,
7
+ message: string,
8
+ details: Record<string, unknown> = {},
9
+ ): void {
6
10
  printPayload({
7
11
  ok: false,
8
12
  error: {
9
13
  code,
10
14
  message,
11
- details
12
- }
15
+ details,
16
+ },
13
17
  });
14
18
  }
@@ -97,15 +97,15 @@ export class ResumeCommandHandler {
97
97
  transport,
98
98
  resumed: false,
99
99
  recovery: recovery.data,
100
- resume_plan: resumePlan
101
- }
100
+ resume_plan: resumePlan,
101
+ },
102
102
  };
103
103
  }
104
104
 
105
105
  const selection = resolveProviderSelection({
106
106
  cli: options as unknown as Record<string, string | undefined>,
107
107
  env,
108
- agentsConfig: kernel.getAgentsConfig()
108
+ agentsConfig: kernel.getAgentsConfig(),
109
109
  });
110
110
 
111
111
  const provider = new NullWorkerProvider(selection);
@@ -114,13 +114,13 @@ export class ResumeCommandHandler {
114
114
  max_parallel_gate_runs: 3,
115
115
  run_id: resumePlan.run_id,
116
116
  owner_instance_id: resumePlan.owner_instance_id,
117
- takeover_stale_run: options.takeover_stale_run
117
+ takeover_stale_run: options.takeover_stale_run,
118
118
  });
119
119
 
120
120
  const startResult = await supervisor.start(
121
121
  resumePlan.features.map((feature) => ({
122
- feature_id: feature.feature_id
123
- }))
122
+ feature_id: feature.feature_id,
123
+ })),
124
124
  );
125
125
 
126
126
  return {
@@ -134,8 +134,8 @@ export class ResumeCommandHandler {
134
134
  runtime_status: startResult.status,
135
135
  run_metadata: startResult.run_metadata,
136
136
  dashboard: startResult.dashboard,
137
- recovery: recovery.data
138
- }
137
+ recovery: recovery.data,
138
+ },
139
139
  };
140
140
  }
141
141
 
@@ -177,7 +177,8 @@ export class ResumeCommandHandler {
177
177
  try {
178
178
  const state = await kernel.featureStateGet(featureId);
179
179
  const frontMatter = asRecord(state.data.front_matter);
180
- const status = typeof frontMatter.status === 'string' ? frontMatter.status : STATUS.PLANNING;
180
+ const status =
181
+ typeof frontMatter.status === 'string' ? frontMatter.status : STATUS.PLANNING;
181
182
  if (isTerminalStatus(status)) {
182
183
  continue;
183
184
  }
@@ -186,7 +187,9 @@ export class ResumeCommandHandler {
186
187
  feature_id: featureId,
187
188
  status,
188
189
  resume_phase: toResumePhase(status),
189
- sources: [...(sourcesByFeature.get(featureId) ?? new Set<string>())].sort((a, b) => a.localeCompare(b))
190
+ sources: [...(sourcesByFeature.get(featureId) ?? new Set<string>())].sort((a, b) =>
191
+ a.localeCompare(b),
192
+ ),
190
193
  });
191
194
  } catch (_error) {
192
195
  // Silently skip features with parse errors
@@ -201,7 +204,8 @@ export class ResumeCommandHandler {
201
204
  return a.feature_id.localeCompare(b.feature_id);
202
205
  });
203
206
 
204
- const resolvedRunId = runtimeSessions.run_id !== 'none' ? runtimeSessions.run_id : fallbackRunId;
207
+ const resolvedRunId =
208
+ runtimeSessions.run_id !== 'none' ? runtimeSessions.run_id : fallbackRunId;
205
209
  const resolvedOwnerInstanceId =
206
210
  runtimeSessions.owner_instance_id !== 'none'
207
211
  ? runtimeSessions.owner_instance_id
@@ -210,11 +214,15 @@ export class ResumeCommandHandler {
210
214
  return {
211
215
  run_id: resolvedRunId,
212
216
  owner_instance_id: resolvedOwnerInstanceId,
213
- features: resumable
217
+ features: resumable,
214
218
  };
215
219
  }
216
220
 
217
- private addSource(sourcesByFeature: Map<string, Set<string>>, featureId: string, source: string): void {
221
+ private addSource(
222
+ sourcesByFeature: Map<string, Set<string>>,
223
+ featureId: string,
224
+ source: string,
225
+ ): void {
218
226
  if (!featureId) {
219
227
  return;
220
228
  }
@@ -41,14 +41,14 @@ export class RetryCommandHandler {
41
41
  if (!featureId) {
42
42
  invalidCliArgs({
43
43
  reason: '--feature-id is required for retry',
44
- expected: '--feature-id <feature_id>'
44
+ expected: '--feature-id <feature_id>',
45
45
  });
46
46
  }
47
47
  if (!isValidFeatureId(featureId)) {
48
48
  invalidCliArgs({
49
49
  reason: 'Invalid --feature-id value',
50
50
  provided: featureId,
51
- expected_pattern: '^[a-z0-9_][a-z0-9_-]*$'
51
+ expected_pattern: '^[a-z0-9_][a-z0-9_-]*$',
52
52
  });
53
53
  }
54
54
 
@@ -57,7 +57,7 @@ export class RetryCommandHandler {
57
57
  let forcedRetryExecuted = false;
58
58
 
59
59
  const current = await callCliTool(this.toolClient, this.runId, TOOLS.FEATURE_STATE_GET, {
60
- feature_id: featureId
60
+ feature_id: featureId,
61
61
  });
62
62
  const statePayload = current.data as unknown as RetryFeatureStatePayload;
63
63
 
@@ -70,7 +70,8 @@ export class RetryCommandHandler {
70
70
  ? 'fast'
71
71
  : status === 'qa' || status === 'ready_to_merge'
72
72
  ? 'full'
73
- : status === 'blocked' && statePayload.front_matter.status_reason?.includes('forced_retry:fast')
73
+ : status === 'blocked' &&
74
+ statePayload.front_matter.status_reason?.includes('forced_retry:fast')
74
75
  ? 'fast'
75
76
  : 'full';
76
77
 
@@ -78,14 +79,14 @@ export class RetryCommandHandler {
78
79
  invalidCliArgs({
79
80
  reason: 'Cannot retry a terminal feature status without --force',
80
81
  status,
81
- expected_status: ['building', 'qa', 'ready_to_merge', 'blocked']
82
+ expected_status: ['building', 'qa', 'ready_to_merge', 'blocked'],
82
83
  });
83
84
  }
84
85
 
85
86
  if (force) {
86
87
  const frontMatterPatch: Record<string, unknown> = {
87
88
  gate_retry_count: 0,
88
- last_retry_at: null
89
+ last_retry_at: null,
89
90
  };
90
91
  if (status === 'blocked') {
91
92
  frontMatterPatch.status =
@@ -103,8 +104,8 @@ export class RetryCommandHandler {
103
104
  feature_id: featureId,
104
105
  expected_version: statePayload.front_matter.version,
105
106
  patch: {
106
- front_matter: frontMatterPatch
107
- }
107
+ front_matter: frontMatterPatch,
108
+ },
108
109
  });
109
110
  retryCountReset = true;
110
111
  forcedRetryExecuted = true;
@@ -113,7 +114,7 @@ export class RetryCommandHandler {
113
114
  const gate = await callCliTool(this.toolClient, this.runId, TOOLS.GATES_RUN, {
114
115
  feature_id: featureId,
115
116
  profile: null,
116
- mode: inferredMode
117
+ mode: inferredMode,
117
118
  });
118
119
  const retryExecuted = true;
119
120
  const retryMode = inferredMode;
@@ -128,8 +129,8 @@ export class RetryCommandHandler {
128
129
  retry_executed: retryExecuted,
129
130
  forced_retry_executed: forcedRetryExecuted,
130
131
  retry_mode: retryMode,
131
- retry_outcome: retryOutcome
132
- }
132
+ retry_outcome: retryOutcome,
133
+ },
133
134
  };
134
135
  }
135
136
  }
@@ -51,7 +51,7 @@ export class RunCommandHandler {
51
51
  kernel,
52
52
  toolClient,
53
53
  maxActiveFeatures,
54
- maxParallelGateRuns
54
+ maxParallelGateRuns,
55
55
  } = context;
56
56
 
57
57
  if (options.batch && options.folder_input) {
@@ -67,7 +67,7 @@ export class RunCommandHandler {
67
67
  const selection = resolveProviderSelection({
68
68
  cli: options as unknown as Record<string, string | undefined>,
69
69
  env,
70
- agentsConfig: kernel.getAgentsConfig()
70
+ agentsConfig: kernel.getAgentsConfig(),
71
71
  });
72
72
 
73
73
  const provider = new NullWorkerProvider(selection);
@@ -76,7 +76,7 @@ export class RunCommandHandler {
76
76
  max_parallel_gate_runs: maxParallelGateRuns ?? 3,
77
77
  run_id: runId,
78
78
  owner_instance_id: kernel.instanceId,
79
- takeover_stale_run: options.takeover_stale_run
79
+ takeover_stale_run: options.takeover_stale_run,
80
80
  });
81
81
 
82
82
  const startResult = await supervisor.start(ingested as Array<{ feature_id: string }>);
@@ -90,8 +90,8 @@ export class RunCommandHandler {
90
90
  queue_depth: startResult.queue_depth,
91
91
  runtime_status: startResult.status,
92
92
  run_metadata: startResult.run_metadata,
93
- dashboard: startResult.dashboard
94
- }
93
+ dashboard: startResult.dashboard,
94
+ },
95
95
  };
96
96
  }
97
97
 
@@ -136,7 +136,11 @@ export class RunCommandHandler {
136
136
 
137
137
  if (activeBlocked.has(featureId)) {
138
138
  skipped++;
139
- details.push({ feature_id: featureId, status: 'skipped', reason: 'already active/blocked' });
139
+ details.push({
140
+ feature_id: featureId,
141
+ status: 'skipped',
142
+ reason: 'already active/blocked',
143
+ });
140
144
  continue;
141
145
  }
142
146
 
@@ -162,8 +166,8 @@ export class RunCommandHandler {
162
166
  created,
163
167
  skipped,
164
168
  failed,
165
- details
166
- }
169
+ details,
170
+ },
167
171
  };
168
172
  }
169
173
  }
@@ -30,14 +30,14 @@ export class SendCommandHandler {
30
30
  if (!featureId) {
31
31
  invalidCliArgs({
32
32
  reason: '--feature-id is required for send',
33
- expected: '--feature-id <feature_id>'
33
+ expected: '--feature-id <feature_id>',
34
34
  });
35
35
  }
36
36
  if (!isValidFeatureId(featureId)) {
37
37
  invalidCliArgs({
38
38
  reason: 'Invalid --feature-id value',
39
39
  provided: featureId,
40
- expected_pattern: '^[a-z0-9_][a-z0-9_-]*$'
40
+ expected_pattern: '^[a-z0-9_][a-z0-9_-]*$',
41
41
  });
42
42
  }
43
43
 
@@ -45,21 +45,21 @@ export class SendCommandHandler {
45
45
  if (!message || message.trim().length === 0) {
46
46
  invalidCliArgs({
47
47
  reason: '--message is required for send',
48
- expected: '--message <message>'
48
+ expected: '--message <message>',
49
49
  });
50
50
  }
51
51
 
52
52
  const response = await callCliTool(this.toolClient, this.runId, TOOLS.FEATURE_SEND_MESSAGE, {
53
53
  feature_id: featureId,
54
- message
54
+ message,
55
55
  });
56
56
 
57
57
  return {
58
58
  ok: true,
59
59
  data: {
60
60
  command: 'send',
61
- ...(response.data ?? {})
62
- }
61
+ ...(response.data ?? {}),
62
+ },
63
63
  };
64
64
  }
65
65
  }