agentic-orchestrator 0.1.6 → 0.1.8

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 (438) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc.json +24 -0
  3. package/CLAUDE.md +3 -2
  4. package/README.md +71 -48
  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 +5 -22
  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/env-file.ts +115 -0
  107. package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
  108. package/apps/control-plane/src/cli/init-command-handler.ts +182 -56
  109. package/apps/control-plane/src/cli/io.ts +7 -3
  110. package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
  111. package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
  112. package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
  113. package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
  114. package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
  115. package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
  116. package/apps/control-plane/src/cli/spec-utils.ts +2 -2
  117. package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
  118. package/apps/control-plane/src/cli/tooling.ts +3 -3
  119. package/apps/control-plane/src/cli/types.ts +1 -1
  120. package/apps/control-plane/src/core/collisions.ts +27 -10
  121. package/apps/control-plane/src/core/constants.ts +13 -7
  122. package/apps/control-plane/src/core/error-codes.ts +1 -1
  123. package/apps/control-plane/src/core/fs.ts +11 -5
  124. package/apps/control-plane/src/core/gates.ts +53 -27
  125. package/apps/control-plane/src/core/git.ts +18 -6
  126. package/apps/control-plane/src/core/kernel.ts +513 -227
  127. package/apps/control-plane/src/core/patch.ts +7 -3
  128. package/apps/control-plane/src/core/path-layout.ts +5 -1
  129. package/apps/control-plane/src/core/path-rules.ts +19 -5
  130. package/apps/control-plane/src/core/qa-index.ts +26 -12
  131. package/apps/control-plane/src/core/response.ts +9 -6
  132. package/apps/control-plane/src/core/schemas.ts +29 -10
  133. package/apps/control-plane/src/core/tool-caller.ts +1 -1
  134. package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
  135. package/apps/control-plane/src/index.ts +3 -9
  136. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +79 -35
  137. package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
  138. package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
  139. package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
  140. package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
  141. package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
  142. package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
  143. package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
  144. package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
  145. package/apps/control-plane/src/mcp/tool-client.ts +17 -5
  146. package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
  147. package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
  148. package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
  149. package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
  150. package/apps/control-plane/src/providers/providers.ts +137 -54
  151. package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
  152. package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
  153. package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
  154. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
  155. package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
  156. package/apps/control-plane/src/supervisor/runtime.ts +59 -35
  157. package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
  158. package/apps/control-plane/src/supervisor/types.ts +22 -7
  159. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
  160. package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
  161. package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
  162. package/apps/control-plane/test/aop.spec.ts +4 -4
  163. package/apps/control-plane/test/batch-operations.spec.ts +20 -18
  164. package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
  165. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
  166. package/apps/control-plane/test/bootstrap.spec.ts +72 -40
  167. package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
  168. package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
  169. package/apps/control-plane/test/cli.spec.ts +1 -1
  170. package/apps/control-plane/test/cli.unit.spec.ts +226 -167
  171. package/apps/control-plane/test/collision-queue.spec.ts +49 -40
  172. package/apps/control-plane/test/collisions.spec.ts +30 -30
  173. package/apps/control-plane/test/core-utils.spec.ts +29 -15
  174. package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
  175. package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
  176. package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
  177. package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
  178. package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
  179. package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
  180. package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
  181. package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
  182. package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
  183. package/apps/control-plane/test/gates.spec.ts +101 -81
  184. package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
  185. package/apps/control-plane/test/helpers.ts +10 -6
  186. package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
  187. package/apps/control-plane/test/init-wizard.spec.ts +328 -68
  188. package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
  189. package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
  190. package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
  191. package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
  192. package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
  193. package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
  194. package/apps/control-plane/test/kernel.spec.ts +134 -51
  195. package/apps/control-plane/test/lock-service.spec.ts +92 -68
  196. package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
  197. package/apps/control-plane/test/mcp.spec.ts +231 -115
  198. package/apps/control-plane/test/merge-service.spec.ts +142 -94
  199. package/apps/control-plane/test/multi-project.spec.ts +28 -22
  200. package/apps/control-plane/test/notifier-service.spec.ts +136 -92
  201. package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
  202. package/apps/control-plane/test/patch-service.spec.ts +128 -48
  203. package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
  204. package/apps/control-plane/test/plan-service.spec.ts +50 -39
  205. package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
  206. package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
  207. package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
  208. package/apps/control-plane/test/providers.spec.ts +208 -104
  209. package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
  210. package/apps/control-plane/test/qa-index.spec.ts +58 -61
  211. package/apps/control-plane/test/reactions.spec.ts +88 -45
  212. package/apps/control-plane/test/response.spec.ts +5 -5
  213. package/apps/control-plane/test/resume-command.spec.ts +121 -80
  214. package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
  215. package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
  216. package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
  217. package/apps/control-plane/test/services.spec.ts +147 -129
  218. package/apps/control-plane/test/session-management.spec.ts +136 -74
  219. package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
  220. package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
  221. package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
  222. package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
  223. package/apps/control-plane/test/supervisor.spec.ts +67 -43
  224. package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
  225. package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
  226. package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
  227. package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
  228. package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
  229. package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
  230. package/apps/control-plane/tsconfig.build.json +2 -7
  231. package/apps/control-plane/tsconfig.json +1 -5
  232. package/apps/control-plane/vitest.config.ts +7 -7
  233. package/config/agentic/orchestrator/adapters.yaml +3 -0
  234. package/config/agentic/orchestrator/agents.yaml +14 -0
  235. package/config/agentic/orchestrator/gates.yaml +28 -0
  236. package/config/agentic/orchestrator/policy.yaml +22 -0
  237. package/config/agentic/orchestrator/prompts/builder.system.md +1 -0
  238. package/config/agentic/orchestrator/prompts/planner.system.md +16 -0
  239. package/config/agentic/orchestrator/prompts/qa.system.md +1 -0
  240. package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
  241. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
  242. package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
  243. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
  244. package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
  245. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
  246. package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
  247. package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
  248. package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
  249. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
  250. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
  251. package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
  252. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  253. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
  254. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
  255. package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
  256. package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
  257. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
  258. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
  259. package/dist/apps/control-plane/application/services/gate-service.js +26 -26
  260. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  261. package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
  262. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
  263. package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
  264. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
  265. package/dist/apps/control-plane/application/services/lock-service.js +32 -32
  266. package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
  267. package/dist/apps/control-plane/application/services/merge-service.js +41 -27
  268. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  269. package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
  270. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
  271. package/dist/apps/control-plane/application/services/patch-service.js +21 -19
  272. package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
  273. package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
  274. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
  275. package/dist/apps/control-plane/application/services/plan-service.js +33 -33
  276. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  277. package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
  278. package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
  279. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
  280. package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
  281. package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
  282. package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
  283. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
  284. package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
  285. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  286. package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
  287. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  288. package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
  289. package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
  290. package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
  291. package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
  292. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
  293. package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
  294. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  295. package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
  296. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
  297. package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
  298. package/dist/apps/control-plane/cli/env-file.d.ts +4 -0
  299. package/dist/apps/control-plane/cli/env-file.js +89 -0
  300. package/dist/apps/control-plane/cli/env-file.js.map +1 -0
  301. package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
  302. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
  303. package/dist/apps/control-plane/cli/init-command-handler.js +97 -37
  304. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
  305. package/dist/apps/control-plane/cli/io.js +2 -2
  306. package/dist/apps/control-plane/cli/io.js.map +1 -1
  307. package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
  308. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  309. package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
  310. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
  311. package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
  312. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  313. package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
  314. package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
  315. package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
  316. package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
  317. package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
  318. package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
  319. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  320. package/dist/apps/control-plane/cli/tooling.js +1 -1
  321. package/dist/apps/control-plane/core/collisions.js +11 -8
  322. package/dist/apps/control-plane/core/collisions.js.map +1 -1
  323. package/dist/apps/control-plane/core/constants.js +13 -7
  324. package/dist/apps/control-plane/core/constants.js.map +1 -1
  325. package/dist/apps/control-plane/core/error-codes.js +1 -1
  326. package/dist/apps/control-plane/core/fs.js.map +1 -1
  327. package/dist/apps/control-plane/core/gates.d.ts +2 -2
  328. package/dist/apps/control-plane/core/gates.js +26 -19
  329. package/dist/apps/control-plane/core/gates.js.map +1 -1
  330. package/dist/apps/control-plane/core/git.js +3 -3
  331. package/dist/apps/control-plane/core/git.js.map +1 -1
  332. package/dist/apps/control-plane/core/kernel.d.ts +1 -0
  333. package/dist/apps/control-plane/core/kernel.js +134 -81
  334. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  335. package/dist/apps/control-plane/core/patch.js +7 -3
  336. package/dist/apps/control-plane/core/patch.js.map +1 -1
  337. package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
  338. package/dist/apps/control-plane/core/path-layout.js +4 -1
  339. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  340. package/dist/apps/control-plane/core/path-rules.js +3 -1
  341. package/dist/apps/control-plane/core/path-rules.js.map +1 -1
  342. package/dist/apps/control-plane/core/qa-index.js +5 -5
  343. package/dist/apps/control-plane/core/qa-index.js.map +1 -1
  344. package/dist/apps/control-plane/core/response.js +3 -3
  345. package/dist/apps/control-plane/core/response.js.map +1 -1
  346. package/dist/apps/control-plane/core/schemas.js +10 -6
  347. package/dist/apps/control-plane/core/schemas.js.map +1 -1
  348. package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
  349. package/dist/apps/control-plane/index.d.ts +1 -1
  350. package/dist/apps/control-plane/index.js +1 -1
  351. package/dist/apps/control-plane/index.js.map +1 -1
  352. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +40 -23
  353. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  354. package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
  355. package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
  356. package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
  357. package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
  358. package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
  359. package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
  360. package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
  361. package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
  362. package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
  363. package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
  364. package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
  365. package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
  366. package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
  367. package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
  368. package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
  369. package/dist/apps/control-plane/mcp/tool-client.js +2 -2
  370. package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
  371. package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
  372. package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
  373. package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
  374. package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
  375. package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
  376. package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
  377. package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
  378. package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
  379. package/dist/apps/control-plane/providers/providers.d.ts +3 -2
  380. package/dist/apps/control-plane/providers/providers.js +81 -39
  381. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  382. package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
  383. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  384. package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
  385. package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
  386. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
  387. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
  388. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  389. package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
  390. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  391. package/dist/apps/control-plane/supervisor/runtime.js +25 -21
  392. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  393. package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
  394. package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
  395. package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
  396. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  397. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
  398. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  399. package/eslint.config.mjs +20 -20
  400. package/example-configurations/README.md +1 -1
  401. package/example-configurations/java/agents.yaml +3 -3
  402. package/example-configurations/java/policy.yaml +1 -1
  403. package/example-configurations/node/agents.yaml +3 -3
  404. package/example-configurations/node/policy.yaml +1 -1
  405. package/package.json +10 -5
  406. package/packages/web-dashboard/next.config.js +2 -2
  407. package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
  408. package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
  409. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
  410. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
  411. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
  412. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
  413. package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
  414. package/packages/web-dashboard/src/app/globals.css +10 -2
  415. package/packages/web-dashboard/src/app/page.tsx +100 -37
  416. package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
  417. package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
  418. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
  419. package/packages/web-dashboard/tsconfig.json +3 -11
  420. package/scripts/nx-safe.mjs +10 -10
  421. package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
  422. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +189 -90
  423. package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
  424. package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
  425. package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
  426. package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
  427. package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
  428. package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
  429. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
  430. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
  431. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
  432. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
  433. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
  434. package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
  435. package/spec-files/outstanding/agentic_orchestrator_provider_auth_bootstrap_spec.md +384 -0
  436. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
  437. package/spec-files/progress.md +186 -175
  438. package/tsconfig.json +2 -8
@@ -1,7 +1,10 @@
1
1
  import { GATE_RESULT, STATUS, TOOLS } from '../core/constants.js';
2
2
  import type { FeatureStatePayload, SupervisorToolCaller } from './types.js';
3
3
  import { NOOP_WORKER_DECISION_RUNNER, type WorkerDecisionRunner } from './worker-decision-loop.js';
4
- import type { GateRepairContext, ReactionsService } from '../application/services/reactions-service.js';
4
+ import type {
5
+ GateRepairContext,
6
+ ReactionsService,
7
+ } from '../application/services/reactions-service.js';
5
8
 
6
9
  interface GatesRunData {
7
10
  overall?: string;
@@ -28,9 +31,13 @@ export class BuildWaveExecutor {
28
31
  async run(featureIds: string[], maxParallelGateRuns: number): Promise<void> {
29
32
  const batch: string[] = [];
30
33
  for (const featureId of featureIds) {
31
- const state = await this.toolCaller.callTool<FeatureStatePayload>('builder', TOOLS.FEATURE_STATE_GET, {
32
- feature_id: featureId
33
- });
34
+ const state = await this.toolCaller.callTool<FeatureStatePayload>(
35
+ 'builder',
36
+ TOOLS.FEATURE_STATE_GET,
37
+ {
38
+ feature_id: featureId,
39
+ },
40
+ );
34
41
 
35
42
  if (state.data.front_matter.status === STATUS.BUILDING) {
36
43
  batch.push(featureId);
@@ -40,21 +47,25 @@ export class BuildWaveExecutor {
40
47
  const selected = batch.slice(0, maxParallelGateRuns);
41
48
  for (const featureId of selected) {
42
49
  const context = await this.toolCaller.callTool('builder', TOOLS.FEATURE_GET_CONTEXT, {
43
- feature_id: featureId
50
+ feature_id: featureId,
44
51
  });
45
52
  await this.workerDecisionRunner.execute({
46
53
  role: 'builder',
47
54
  featureId,
48
55
  contextBundle: context.data,
49
56
  instructions:
50
- 'Emit PATCH outputs for code changes, NOTE outputs for progress context, and REQUEST outputs for lock/context needs.'
57
+ 'Emit PATCH outputs for code changes, NOTE outputs for progress context, and REQUEST outputs for lock/context needs.',
51
58
  });
52
59
  }
53
60
 
54
61
  const executing = selected.map(async (featureId) => {
55
- const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>('builder', TOOLS.FEATURE_STATE_GET, {
56
- feature_id: featureId
57
- });
62
+ const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>(
63
+ 'builder',
64
+ TOOLS.FEATURE_STATE_GET,
65
+ {
66
+ feature_id: featureId,
67
+ },
68
+ );
58
69
  const initialRetryCount = stateForRetry.data.front_matter.gate_retry_count ?? 0;
59
70
 
60
71
  let gateOverall: string;
@@ -64,11 +75,15 @@ export class BuildWaveExecutor {
64
75
  const failureHistory: GateRepairContext['failureHistory'] = [];
65
76
 
66
77
  try {
67
- const gateResult = await this.toolCaller.callTool<GatesRunData>('builder', TOOLS.GATES_RUN, {
68
- feature_id: featureId,
69
- profile: null,
70
- mode: 'fast'
71
- });
78
+ const gateResult = await this.toolCaller.callTool<GatesRunData>(
79
+ 'builder',
80
+ TOOLS.GATES_RUN,
81
+ {
82
+ feature_id: featureId,
83
+ profile: null,
84
+ mode: 'fast',
85
+ },
86
+ );
72
87
  gateOverall = gateResult.data.overall ?? GATE_RESULT.PASS;
73
88
  gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
74
89
  gateEvidencePath = gateResult.data.evidence_path ?? '';
@@ -87,13 +102,13 @@ export class BuildWaveExecutor {
87
102
  evidence_summary: gateEvidencePath,
88
103
  logs_excerpt: gateLogs.slice(0, 800),
89
104
  failed_at: new Date().toISOString(),
90
- retry_delay_ms: this.reactionsService?.retryDelayMs()
105
+ retry_delay_ms: this.reactionsService?.retryDelayMs(),
91
106
  });
92
107
  }
93
108
 
94
109
  if (this.reactionsService && gateOverall === GATE_RESULT.FAIL) {
95
110
  const context = await this.toolCaller.callTool('builder', TOOLS.FEATURE_GET_CONTEXT, {
96
- feature_id: featureId
111
+ feature_id: featureId,
97
112
  });
98
113
  let retryCount = initialRetryCount;
99
114
  const retryDelayMs = this.reactionsService.retryDelayMs();
@@ -109,22 +124,26 @@ export class BuildWaveExecutor {
109
124
  logs: gateLogs,
110
125
  evidenceSummary: gateEvidencePath,
111
126
  retryCount,
112
- failureHistory
127
+ failureHistory,
113
128
  };
114
129
  const repairPrompt = this.reactionsService.buildRepairPrompt(ctx);
115
130
  await this.workerDecisionRunner.execute({
116
131
  role: 'builder',
117
132
  featureId,
118
133
  contextBundle: context.data,
119
- instructions: repairPrompt
134
+ instructions: repairPrompt,
120
135
  });
121
136
 
122
137
  try {
123
- const retryResult = await this.toolCaller.callTool<GatesRunData>('builder', TOOLS.GATES_RUN, {
124
- feature_id: featureId,
125
- profile: null,
126
- mode: 'fast'
127
- });
138
+ const retryResult = await this.toolCaller.callTool<GatesRunData>(
139
+ 'builder',
140
+ TOOLS.GATES_RUN,
141
+ {
142
+ feature_id: featureId,
143
+ profile: null,
144
+ mode: 'fast',
145
+ },
146
+ );
128
147
  gateOverall = retryResult.data.overall ?? GATE_RESULT.PASS;
129
148
  gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
130
149
  gateEvidencePath = retryResult.data.evidence_path ?? gateEvidencePath;
@@ -147,7 +166,7 @@ export class BuildWaveExecutor {
147
166
  evidence_summary: gateEvidencePath,
148
167
  logs_excerpt: gateLogs.slice(0, 800),
149
168
  failed_at: new Date().toISOString(),
150
- retry_delay_ms: retryDelayMs
169
+ retry_delay_ms: retryDelayMs,
151
170
  });
152
171
  }
153
172
 
@@ -164,7 +183,7 @@ export class BuildWaveExecutor {
164
183
  logs: gateLogs,
165
184
  evidenceSummary: gateEvidencePath,
166
185
  retryCount,
167
- failureHistory
186
+ failureHistory,
168
187
  };
169
188
  await this.reactionsService.notifyEscalation(featureId, escalateCtx);
170
189
  }
@@ -1,9 +1,5 @@
1
1
  import { STATUS, TOOLS } from '../core/constants.js';
2
- import type {
3
- FeatureContextPayload,
4
- InitialPlanGenerator,
5
- SupervisorToolCaller
6
- } from './types.js';
2
+ import type { FeatureContextPayload, InitialPlanGenerator, SupervisorToolCaller } from './types.js';
7
3
  import { NOOP_WORKER_DECISION_RUNNER, type WorkerDecisionRunner } from './worker-decision-loop.js';
8
4
 
9
5
  type AnyRecord = Record<string, unknown>;
@@ -78,7 +74,7 @@ function deriveEdgeCaseChecklist(specText: string): string[] {
78
74
  const checklist = [
79
75
  'Edge-case: boundary values and size limits are covered.',
80
76
  'Edge-case: negative-path input validation and error handling are covered.',
81
- 'Edge-case: dependency failure and retry behavior are covered.'
77
+ 'Edge-case: dependency failure and retry behavior are covered.',
82
78
  ];
83
79
 
84
80
  const normalizedSpec = specText.toLowerCase();
@@ -123,9 +119,13 @@ export class PlanningWaveExecutor {
123
119
 
124
120
  async run(featureIds: string[]): Promise<void> {
125
121
  for (const featureId of featureIds) {
126
- const context = await this.toolCaller.callTool<FeatureContextPayload>('planner', TOOLS.FEATURE_GET_CONTEXT, {
127
- feature_id: featureId
128
- });
122
+ const context = await this.toolCaller.callTool<FeatureContextPayload>(
123
+ 'planner',
124
+ TOOLS.FEATURE_GET_CONTEXT,
125
+ {
126
+ feature_id: featureId,
127
+ },
128
+ );
129
129
 
130
130
  const state = context.data.state.front_matter;
131
131
  if (state.status !== STATUS.PLANNING && state.status !== STATUS.BLOCKED) {
@@ -138,7 +138,7 @@ export class PlanningWaveExecutor {
138
138
  featureId,
139
139
  contextBundle: asRecord(context.data),
140
140
  instructions:
141
- 'Review feature context and emit PLAN_SUBMISSION/REQUEST/NOTE outputs to advance planning deterministically.'
141
+ 'Review feature context and emit PLAN_SUBMISSION/REQUEST/NOTE outputs to advance planning deterministically.',
142
142
  });
143
143
 
144
144
  if (decision.planSubmission || existingPlan) {
@@ -148,16 +148,20 @@ export class PlanningWaveExecutor {
148
148
  const plan = await this.planGenerator.generateInitialPlan(featureId);
149
149
  await this.toolCaller.callTool('planner', TOOLS.PLAN_SUBMIT, {
150
150
  feature_id: featureId,
151
- plan_json: plan
151
+ plan_json: plan,
152
152
  });
153
153
  }
154
154
  }
155
155
 
156
156
  async runPostQaReconciliation(featureIds: string[], iteration: number): Promise<void> {
157
157
  for (const featureId of featureIds) {
158
- const context = await this.toolCaller.callTool<FeatureContextPayload>('planner', TOOLS.FEATURE_GET_CONTEXT, {
159
- feature_id: featureId
160
- });
158
+ const context = await this.toolCaller.callTool<FeatureContextPayload>(
159
+ 'planner',
160
+ TOOLS.FEATURE_GET_CONTEXT,
161
+ {
162
+ feature_id: featureId,
163
+ },
164
+ );
161
165
 
162
166
  const frontMatter = asRecord(asRecord(context.data.state).front_matter);
163
167
  const status = readStatus(frontMatter.status);
@@ -172,7 +176,7 @@ export class PlanningWaveExecutor {
172
176
  iteration,
173
177
  decision: 'no_update',
174
178
  reasons: ['missing_plan'],
175
- status
179
+ status,
176
180
  });
177
181
  continue;
178
182
  }
@@ -184,7 +188,7 @@ export class PlanningWaveExecutor {
184
188
  iteration,
185
189
  decision: 'no_update',
186
190
  reasons: ['existing_plan_version_invalid'],
187
- status
191
+ status,
188
192
  });
189
193
  continue;
190
194
  }
@@ -199,7 +203,7 @@ export class PlanningWaveExecutor {
199
203
  reasons: decision.reasons,
200
204
  qa_summary: decision.qaSummary,
201
205
  latest_gate_overall: decision.latestGateOverall,
202
- edge_case_checklist: decision.edgeCaseChecklist
206
+ edge_case_checklist: decision.edgeCaseChecklist,
203
207
  });
204
208
  continue;
205
209
  }
@@ -208,7 +212,7 @@ export class PlanningWaveExecutor {
208
212
  await this.toolCaller.callTool('planner', TOOLS.PLAN_UPDATE, {
209
213
  feature_id: featureId,
210
214
  expected_plan_version: planVersion,
211
- plan_json: nextPlan
215
+ plan_json: nextPlan,
212
216
  });
213
217
 
214
218
  await this.appendDecisionLog(featureId, {
@@ -222,7 +226,7 @@ export class PlanningWaveExecutor {
222
226
  reasons: decision.reasons,
223
227
  qa_summary: decision.qaSummary,
224
228
  latest_gate_overall: decision.latestGateOverall,
225
- edge_case_checklist: decision.edgeCaseChecklist
229
+ edge_case_checklist: decision.edgeCaseChecklist,
226
230
  });
227
231
  }
228
232
  }
@@ -230,7 +234,7 @@ export class PlanningWaveExecutor {
230
234
  private evaluateReconciliationDecision(
231
235
  context: FeatureContextPayload,
232
236
  plan: AnyRecord,
233
- status: string
237
+ status: string,
234
238
  ): ReconciliationDecision {
235
239
  const acceptanceCriteria = asStringArray(plan.acceptance_criteria);
236
240
  const riskItems = asStringArray(plan.risk);
@@ -240,9 +244,10 @@ export class PlanningWaveExecutor {
240
244
  const pending = readCount(qaSummary, 'pending');
241
245
  const failed = readCount(qaSummary, 'failed');
242
246
  const running = readCount(qaSummary, 'running');
243
- const latestGateOverall = typeof asRecord(context.latest_evidence).overall === 'string'
244
- ? String(asRecord(context.latest_evidence).overall)
245
- : null;
247
+ const latestGateOverall =
248
+ typeof asRecord(context.latest_evidence).overall === 'string'
249
+ ? String(asRecord(context.latest_evidence).overall)
250
+ : null;
246
251
 
247
252
  const reasons: string[] = [];
248
253
  const acceptanceCriteriaAdditions: string[] = [];
@@ -251,16 +256,17 @@ export class PlanningWaveExecutor {
251
256
  if (missingEdgeCases.length > 0) {
252
257
  reasons.push(`edge_case_checklist_missing:${missingEdgeCases.length}`);
253
258
  acceptanceCriteriaAdditions.push(
254
- 'Planner edge-case checklist has been reviewed and incorporated into the execution plan.'
259
+ 'Planner edge-case checklist has been reviewed and incorporated into the execution plan.',
255
260
  );
256
261
  }
257
262
 
258
- const hasQaSignals = status === STATUS.BLOCKED || failed > 0 || pending > 0 || latestGateOverall === 'fail';
263
+ const hasQaSignals =
264
+ status === STATUS.BLOCKED || failed > 0 || pending > 0 || latestGateOverall === 'fail';
259
265
  const qaCheckpoint = `Planner reconciliation checkpoint [status=${status};failed=${failed};pending=${pending};latest=${latestGateOverall ?? 'unknown'}]`;
260
266
  if (hasQaSignals && !acceptanceCriteria.includes(qaCheckpoint)) {
261
267
  reasons.push(`qa_signals_detected:${status}:failed=${failed}:pending=${pending}`);
262
268
  acceptanceCriteriaAdditions.push(
263
- 'Reconcile QA/gate findings against plan scope and apply corrective updates before merge.'
269
+ 'Reconcile QA/gate findings against plan scope and apply corrective updates before merge.',
264
270
  );
265
271
  acceptanceCriteriaAdditions.push(qaCheckpoint);
266
272
  }
@@ -274,9 +280,9 @@ export class PlanningWaveExecutor {
274
280
  qaSummary: {
275
281
  pending,
276
282
  failed,
277
- running
283
+ running,
278
284
  },
279
- latestGateOverall
285
+ latestGateOverall,
280
286
  };
281
287
  }
282
288
 
@@ -288,13 +294,17 @@ export class PlanningWaveExecutor {
288
294
  qaSummary: {
289
295
  pending,
290
296
  failed,
291
- running
297
+ running,
292
298
  },
293
- latestGateOverall
299
+ latestGateOverall,
294
300
  };
295
301
  }
296
302
 
297
- private buildUpdatedPlan(plan: AnyRecord, planVersion: number, decision: ReconciliationDecision): AnyRecord {
303
+ private buildUpdatedPlan(
304
+ plan: AnyRecord,
305
+ planVersion: number,
306
+ decision: ReconciliationDecision,
307
+ ): AnyRecord {
298
308
  const nextPlan = structuredClone(plan);
299
309
  const acceptanceCriteria = asStringArray(nextPlan.acceptance_criteria);
300
310
  const riskItems = asStringArray(nextPlan.risk);
@@ -302,7 +312,10 @@ export class PlanningWaveExecutor {
302
312
  nextPlan.plan_version = planVersion + 1;
303
313
  nextPlan.revision_of = planVersion;
304
314
  nextPlan.revision_reason = decision.reasons.join('; ');
305
- nextPlan.acceptance_criteria = normalizeList([...acceptanceCriteria, ...decision.acceptanceCriteriaAdditions]);
315
+ nextPlan.acceptance_criteria = normalizeList([
316
+ ...acceptanceCriteria,
317
+ ...decision.acceptanceCriteriaAdditions,
318
+ ]);
306
319
  nextPlan.risk = normalizeList([...riskItems, ...decision.edgeCaseChecklist]);
307
320
  return nextPlan;
308
321
  }
@@ -310,7 +323,7 @@ export class PlanningWaveExecutor {
310
323
  private async appendDecisionLog(featureId: string, note: AnyRecord): Promise<void> {
311
324
  await this.toolCaller.callTool('orchestrator', TOOLS.FEATURE_LOG_APPEND, {
312
325
  feature_id: featureId,
313
- note: JSON.stringify(note)
326
+ note: JSON.stringify(note),
314
327
  });
315
328
  }
316
329
  }
@@ -23,7 +23,7 @@ export class PromptBundleLoader implements AgentPromptProvider {
23
23
  const prompts: PromptBundle = {
24
24
  planner: null,
25
25
  builder: null,
26
- qa: null
26
+ qa: null,
27
27
  };
28
28
 
29
29
  for (const role of ['planner', 'builder', 'qa'] as const) {
@@ -6,11 +6,14 @@ import type {
6
6
  FeatureOrchestrationPort,
7
7
  FeatureStatePayload,
8
8
  SupervisorRuntimeState,
9
- SupervisorToolCaller
9
+ SupervisorToolCaller,
10
10
  } from './types.js';
11
11
  import { UNASSIGNED_SESSION_ID } from './types.js';
12
12
  import { NOOP_WORKER_DECISION_RUNNER, type WorkerDecisionRunner } from './worker-decision-loop.js';
13
- import type { GateRepairContext, ReactionsService } from '../application/services/reactions-service.js';
13
+ import type {
14
+ GateRepairContext,
15
+ ReactionsService,
16
+ } from '../application/services/reactions-service.js';
14
17
 
15
18
  interface GatesRunData {
16
19
  overall?: string;
@@ -52,9 +55,13 @@ export class QaWaveExecutor {
52
55
  async run(featureIds: string[], maxParallelGateRuns: number): Promise<void> {
53
56
  const batch: string[] = [];
54
57
  for (const featureId of featureIds) {
55
- const state = await this.toolCaller.callTool<FeatureStatePayload>('qa', TOOLS.FEATURE_STATE_GET, {
56
- feature_id: featureId
57
- });
58
+ const state = await this.toolCaller.callTool<FeatureStatePayload>(
59
+ 'qa',
60
+ TOOLS.FEATURE_STATE_GET,
61
+ {
62
+ feature_id: featureId,
63
+ },
64
+ );
58
65
 
59
66
  if (state.data.front_matter.status === STATUS.QA) {
60
67
  batch.push(featureId);
@@ -63,19 +70,23 @@ export class QaWaveExecutor {
63
70
 
64
71
  for (const featureId of batch.slice(0, maxParallelGateRuns)) {
65
72
  const context = await this.toolCaller.callTool('qa', TOOLS.FEATURE_GET_CONTEXT, {
66
- feature_id: featureId
73
+ feature_id: featureId,
67
74
  });
68
75
  await this.workerDecisionRunner.execute({
69
76
  role: 'qa',
70
77
  featureId,
71
78
  contextBundle: context.data,
72
79
  instructions:
73
- 'Emit PATCH outputs for deterministic QA remediations, NOTE outputs for findings, and REQUEST outputs for lock/context needs.'
80
+ 'Emit PATCH outputs for deterministic QA remediations, NOTE outputs for findings, and REQUEST outputs for lock/context needs.',
74
81
  });
75
82
 
76
- const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>('qa', TOOLS.FEATURE_STATE_GET, {
77
- feature_id: featureId
78
- });
83
+ const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>(
84
+ 'qa',
85
+ TOOLS.FEATURE_STATE_GET,
86
+ {
87
+ feature_id: featureId,
88
+ },
89
+ );
79
90
  const initialRetryCount = stateForRetry.data.front_matter.gate_retry_count ?? 0;
80
91
 
81
92
  let gateOverall: string;
@@ -88,7 +99,7 @@ export class QaWaveExecutor {
88
99
  const gateResult = await this.toolCaller.callTool<GatesRunData>('qa', TOOLS.GATES_RUN, {
89
100
  feature_id: featureId,
90
101
  profile: null,
91
- mode: 'full'
102
+ mode: 'full',
92
103
  });
93
104
  gateOverall = gateResult.data.overall ?? GATE_RESULT.PASS;
94
105
  gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
@@ -108,7 +119,7 @@ export class QaWaveExecutor {
108
119
  evidence_summary: gateEvidencePath,
109
120
  logs_excerpt: gateLogs.slice(0, 800),
110
121
  failed_at: new Date().toISOString(),
111
- retry_delay_ms: this.reactionsService?.retryDelayMs()
122
+ retry_delay_ms: this.reactionsService?.retryDelayMs(),
112
123
  });
113
124
  }
114
125
 
@@ -127,22 +138,26 @@ export class QaWaveExecutor {
127
138
  logs: gateLogs,
128
139
  evidenceSummary: gateEvidencePath,
129
140
  retryCount,
130
- failureHistory
141
+ failureHistory,
131
142
  };
132
143
  const repairPrompt = this.reactionsService.buildRepairPrompt(ctx);
133
144
  await this.workerDecisionRunner.execute({
134
145
  role: 'qa',
135
146
  featureId,
136
147
  contextBundle: context.data,
137
- instructions: repairPrompt
148
+ instructions: repairPrompt,
138
149
  });
139
150
 
140
151
  try {
141
- const retryResult = await this.toolCaller.callTool<GatesRunData>('qa', TOOLS.GATES_RUN, {
142
- feature_id: featureId,
143
- profile: null,
144
- mode: 'full'
145
- });
152
+ const retryResult = await this.toolCaller.callTool<GatesRunData>(
153
+ 'qa',
154
+ TOOLS.GATES_RUN,
155
+ {
156
+ feature_id: featureId,
157
+ profile: null,
158
+ mode: 'full',
159
+ },
160
+ );
146
161
  gateOverall = retryResult.data.overall ?? GATE_RESULT.PASS;
147
162
  gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
148
163
  gateEvidencePath = retryResult.data.evidence_path ?? gateEvidencePath;
@@ -165,7 +180,7 @@ export class QaWaveExecutor {
165
180
  evidence_summary: gateEvidencePath,
166
181
  logs_excerpt: gateLogs.slice(0, 800),
167
182
  failed_at: new Date().toISOString(),
168
- retry_delay_ms: retryDelayMs
183
+ retry_delay_ms: retryDelayMs,
169
184
  });
170
185
  }
171
186
 
@@ -182,7 +197,7 @@ export class QaWaveExecutor {
182
197
  logs: gateLogs,
183
198
  evidenceSummary: gateEvidencePath,
184
199
  retryCount,
185
- failureHistory
200
+ failureHistory,
186
201
  };
187
202
  await this.reactionsService.notifyEscalation(featureId, escalateCtx);
188
203
  }
@@ -205,12 +220,12 @@ export class QaWaveExecutor {
205
220
  feature_id: featureId,
206
221
  planner_session_id: sessions?.planner ?? UNASSIGNED_SESSION_ID,
207
222
  builder_session_id: sessions?.builder ?? UNASSIGNED_SESSION_ID,
208
- qa_session_id: newQa.session_id
223
+ qa_session_id: newQa.session_id,
209
224
  });
210
225
 
211
226
  await this.featureClusterPatcher.patchFeatureCluster(featureId, {
212
227
  orchestrator_session_id: this.state.orchestratorSessionId ?? 'unknown',
213
- qa_session_id: newQa.session_id
228
+ qa_session_id: newQa.session_id,
214
229
  });
215
230
  }
216
231
  }