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,6 +1,9 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
2
  import { ReactionsService } from '../src/application/services/reactions-service.js';
3
- import type { GateRepairContext, ReactionsPolicy } from '../src/application/services/reactions-service.js';
3
+ import type {
4
+ GateRepairContext,
5
+ ReactionsPolicy,
6
+ } from '../src/application/services/reactions-service.js';
4
7
  import type { ToolCaller } from '../src/core/tool-caller.js';
5
8
  import { TOOLS } from '../src/core/constants.js';
6
9
 
@@ -8,7 +11,10 @@ function makeToolCaller(statePatchFn?: () => Promise<Record<string, unknown>>):
8
11
  return {
9
12
  callTool: vi.fn(async (_role: string, toolName: string, _args?: Record<string, unknown>) => {
10
13
  if (toolName === TOOLS.FEATURE_STATE_GET) {
11
- return { ok: true, data: { front_matter: { version: 1, status: 'qa', gate_retry_count: 0 } } };
14
+ return {
15
+ ok: true,
16
+ data: { front_matter: { version: 1, status: 'qa', gate_retry_count: 0 } },
17
+ };
12
18
  }
13
19
  if (toolName === TOOLS.FEATURE_STATE_PATCH) {
14
20
  if (statePatchFn) {
@@ -17,17 +23,19 @@ function makeToolCaller(statePatchFn?: () => Promise<Record<string, unknown>>):
17
23
  return { ok: true, data: { updated: true } };
18
24
  }
19
25
  return { ok: true, data: {} };
20
- }) as unknown as ToolCaller['callTool']
26
+ }) as unknown as ToolCaller['callTool'],
21
27
  };
22
28
  }
23
29
 
24
30
  function makeNotifier() {
25
31
  return {
26
- notify: vi.fn(async () => undefined)
32
+ notify: vi.fn(async () => undefined),
27
33
  };
28
34
  }
29
35
 
30
- function makeEnabledPolicy(overrides: Partial<ReactionsPolicy['gate_failed']> = {}): ReactionsPolicy {
36
+ function makeEnabledPolicy(
37
+ overrides: Partial<ReactionsPolicy['gate_failed']> = {},
38
+ ): ReactionsPolicy {
31
39
  return {
32
40
  gate_failed: {
33
41
  enabled: true,
@@ -35,8 +43,8 @@ function makeEnabledPolicy(overrides: Partial<ReactionsPolicy['gate_failed']> =
35
43
  action: 'retry_with_agent_repair',
36
44
  escalate_after: 2,
37
45
  retry_delay_ms: 30000,
38
- ...overrides
39
- }
46
+ ...overrides,
47
+ },
40
48
  };
41
49
  }
42
50
 
@@ -45,7 +53,7 @@ describe('ReactionsService', () => {
45
53
  const toolCaller = makeToolCaller();
46
54
  const service = new ReactionsService({
47
55
  toolCaller: toolCaller as never,
48
- policy: makeEnabledPolicy()
56
+ policy: makeEnabledPolicy(),
49
57
  });
50
58
 
51
59
  const ctx: GateRepairContext = {
@@ -54,7 +62,7 @@ describe('ReactionsService', () => {
54
62
  exitCode: 1,
55
63
  logs: 'Test run failed',
56
64
  evidenceSummary: '.aop/features/feature_a/evidence/full.json',
57
- retryCount: 0
65
+ retryCount: 0,
58
66
  };
59
67
 
60
68
  const shouldRetry = service.shouldRetry('feature_a', 0);
@@ -72,7 +80,7 @@ describe('ReactionsService', () => {
72
80
  const service = new ReactionsService({
73
81
  toolCaller: toolCaller as never,
74
82
  notifier: notifier as never,
75
- policy: makeEnabledPolicy({ max_retries: 2, escalate_after: 2 })
83
+ policy: makeEnabledPolicy({ max_retries: 2, escalate_after: 2 }),
76
84
  });
77
85
 
78
86
  const ctx: GateRepairContext = {
@@ -81,7 +89,7 @@ describe('ReactionsService', () => {
81
89
  exitCode: 1,
82
90
  logs: 'error',
83
91
  evidenceSummary: '',
84
- retryCount: 2
92
+ retryCount: 2,
85
93
  };
86
94
 
87
95
  const shouldEscalate = service.shouldEscalate(2);
@@ -90,7 +98,7 @@ describe('ReactionsService', () => {
90
98
  expect(shouldEscalate).toBe(true);
91
99
  expect(notifier.notify).toHaveBeenCalledWith(
92
100
  'gate_failed',
93
- expect.objectContaining({ feature_id: 'feature_b' })
101
+ expect.objectContaining({ feature_id: 'feature_b' }),
94
102
  );
95
103
  });
96
104
 
@@ -104,9 +112,9 @@ describe('ReactionsService', () => {
104
112
  max_retries: 2,
105
113
  action: 'retry_with_agent_repair',
106
114
  escalate_after: 2,
107
- retry_delay_ms: 30000
108
- }
109
- }
115
+ retry_delay_ms: 30000,
116
+ },
117
+ },
110
118
  });
111
119
 
112
120
  const shouldRetry = service.shouldRetry('feature_c', 0);
@@ -121,13 +129,15 @@ describe('ReactionsService', () => {
121
129
  });
122
130
  const service = new ReactionsService({
123
131
  toolCaller: toolCaller as never,
124
- policy: makeEnabledPolicy()
132
+ policy: makeEnabledPolicy(),
125
133
  });
126
134
 
127
135
  await service.recordRetry('feature_d', 1);
128
136
 
129
137
  expect(patchCallCount).toBe(1);
130
- const patchCall = vi.mocked(toolCaller.callTool).mock.calls.find(([, tool]) => tool === TOOLS.FEATURE_STATE_PATCH);
138
+ const patchCall = vi
139
+ .mocked(toolCaller.callTool)
140
+ .mock.calls.find(([, tool]) => tool === TOOLS.FEATURE_STATE_PATCH);
131
141
  expect(patchCall).toBeDefined();
132
142
  const patchArgs = patchCall?.[2] ?? {};
133
143
  const patch = (patchArgs['patch'] ?? {}) as Record<string, unknown>;
@@ -139,13 +149,15 @@ describe('ReactionsService', () => {
139
149
  const toolCaller = makeToolCaller();
140
150
  const service = new ReactionsService({
141
151
  toolCaller: toolCaller as never,
142
- policy: makeEnabledPolicy()
152
+ policy: makeEnabledPolicy(),
143
153
  });
144
154
 
145
155
  // Simulate force reset by calling recordRetry with 0
146
156
  await service.recordRetry('feature_e', 0);
147
157
 
148
- const patchCall = vi.mocked(toolCaller.callTool).mock.calls.find(([, tool]) => tool === TOOLS.FEATURE_STATE_PATCH);
158
+ const patchCall = vi
159
+ .mocked(toolCaller.callTool)
160
+ .mock.calls.find(([, tool]) => tool === TOOLS.FEATURE_STATE_PATCH);
149
161
  expect(patchCall).toBeDefined();
150
162
  const patchArgs = patchCall?.[2] ?? {};
151
163
  const patch = (patchArgs['patch'] ?? {}) as Record<string, unknown>;
@@ -159,7 +171,7 @@ describe('ReactionsService', () => {
159
171
  const service = new ReactionsService({
160
172
  toolCaller: toolCaller as never,
161
173
  notifier: notifier as never,
162
- policy: makeEnabledPolicy({ escalate_after: 2 })
174
+ policy: makeEnabledPolicy({ escalate_after: 2 }),
163
175
  });
164
176
 
165
177
  const shouldEscalateAt2 = service.shouldEscalate(2);
@@ -176,7 +188,7 @@ describe('ReactionsService', () => {
176
188
  exitCode: 1,
177
189
  logs: 'failed',
178
190
  evidenceSummary: 'no evidence',
179
- retryCount: 2
191
+ retryCount: 2,
180
192
  };
181
193
  await service.notifyEscalation('feature_f', ctx);
182
194
  expect(notifier.notify).toHaveBeenCalledOnce();
@@ -186,7 +198,7 @@ describe('ReactionsService', () => {
186
198
  const toolCaller = makeToolCaller();
187
199
  const service = new ReactionsService({
188
200
  toolCaller: toolCaller as never,
189
- policy: makeEnabledPolicy()
201
+ policy: makeEnabledPolicy(),
190
202
  });
191
203
 
192
204
  const ctx: GateRepairContext = {
@@ -195,7 +207,7 @@ describe('ReactionsService', () => {
195
207
  exitCode: 2,
196
208
  logs: 'compilation error on line 42',
197
209
  evidenceSummary: 'build-fast.json summary',
198
- retryCount: 1
210
+ retryCount: 1,
199
211
  };
200
212
 
201
213
  const prompt = service.buildRepairPrompt(ctx);
@@ -210,7 +222,7 @@ describe('ReactionsService', () => {
210
222
  it('GIVEN policy undefined WHEN reactions service created THEN defaults applied (disabled)', () => {
211
223
  const toolCaller = makeToolCaller();
212
224
  const service = new ReactionsService({
213
- toolCaller: toolCaller as never
225
+ toolCaller: toolCaller as never,
214
226
  });
215
227
 
216
228
  const shouldRetry = service.shouldRetry('feature_h', 0);
@@ -231,9 +243,9 @@ describe('ReactionsService', () => {
231
243
  max_retries: 3,
232
244
  action: 'notify_only',
233
245
  escalate_after: 2,
234
- retry_delay_ms: 5000
235
- }
236
- }
246
+ retry_delay_ms: 5000,
247
+ },
248
+ },
237
249
  });
238
250
 
239
251
  const shouldRetry = service.shouldRetry('feature_i', 0);
@@ -244,7 +256,7 @@ describe('ReactionsService', () => {
244
256
  const toolCaller = makeToolCaller();
245
257
  const service = new ReactionsService({
246
258
  toolCaller: toolCaller as never,
247
- policy: makeEnabledPolicy()
259
+ policy: makeEnabledPolicy(),
248
260
  // no notifier provided
249
261
  });
250
262
 
@@ -254,7 +266,7 @@ describe('ReactionsService', () => {
254
266
  exitCode: 1,
255
267
  logs: 'error log',
256
268
  evidenceSummary: 'no evidence',
257
- retryCount: 3
269
+ retryCount: 3,
258
270
  };
259
271
 
260
272
  // notifier is undefined → early return, no notification sent
@@ -266,7 +278,7 @@ describe('ReactionsService branch coverage', () => {
266
278
  it('GIVEN_policy_with_retry_delay_ms_WHEN_retryDelayMs_called_THEN_returns_configured_value', () => {
267
279
  const service = new ReactionsService({
268
280
  toolCaller: makeToolCaller(),
269
- policy: makeEnabledPolicy({ retry_delay_ms: 5000 })
281
+ policy: makeEnabledPolicy({ retry_delay_ms: 5000 }),
270
282
  });
271
283
  expect(service.retryDelayMs()).toBe(5000);
272
284
  });
@@ -274,7 +286,7 @@ describe('ReactionsService branch coverage', () => {
274
286
  it('GIVEN_policy_with_invalid_retry_delay_ms_WHEN_retryDelayMs_called_THEN_returns_default', () => {
275
287
  const service = new ReactionsService({
276
288
  toolCaller: makeToolCaller(),
277
- policy: makeEnabledPolicy({ retry_delay_ms: -1 })
289
+ policy: makeEnabledPolicy({ retry_delay_ms: -1 }),
278
290
  });
279
291
  // Negative → falls through to default (30000)
280
292
  expect(service.retryDelayMs()).toBe(30000);
@@ -283,7 +295,7 @@ describe('ReactionsService branch coverage', () => {
283
295
  it('GIVEN_policy_with_max_retries_WHEN_maxRetries_called_THEN_returns_configured_value', () => {
284
296
  const service = new ReactionsService({
285
297
  toolCaller: makeToolCaller(),
286
- policy: makeEnabledPolicy({ max_retries: 5 })
298
+ policy: makeEnabledPolicy({ max_retries: 5 }),
287
299
  });
288
300
  expect(service.maxRetries()).toBe(5);
289
301
  });
@@ -291,7 +303,7 @@ describe('ReactionsService branch coverage', () => {
291
303
  it('GIVEN_no_policy_WHEN_maxRetries_called_THEN_returns_default', () => {
292
304
  const service = new ReactionsService({
293
305
  toolCaller: makeToolCaller(),
294
- policy: {}
306
+ policy: {},
295
307
  });
296
308
  expect(service.maxRetries()).toBeGreaterThanOrEqual(0);
297
309
  });
@@ -299,7 +311,7 @@ describe('ReactionsService branch coverage', () => {
299
311
  it('GIVEN_delay_ms_zero_WHEN_waitBeforeRetry_called_THEN_resolves_immediately', async () => {
300
312
  const service = new ReactionsService({
301
313
  toolCaller: makeToolCaller(),
302
- policy: makeEnabledPolicy({ retry_delay_ms: 0 })
314
+ policy: makeEnabledPolicy({ retry_delay_ms: 0 }),
303
315
  });
304
316
  await expect(service.waitBeforeRetry()).resolves.toBeUndefined();
305
317
  });
@@ -308,7 +320,7 @@ describe('ReactionsService branch coverage', () => {
308
320
  vi.useFakeTimers();
309
321
  const service = new ReactionsService({
310
322
  toolCaller: makeToolCaller(),
311
- policy: makeEnabledPolicy({ retry_delay_ms: 1000 })
323
+ policy: makeEnabledPolicy({ retry_delay_ms: 1000 }),
312
324
  });
313
325
  const waitPromise = service.waitBeforeRetry();
314
326
  vi.advanceTimersByTime(1001);
@@ -319,7 +331,7 @@ describe('ReactionsService branch coverage', () => {
319
331
  it('GIVEN_buildRepairPrompt_with_empty_failure_history_WHEN_called_THEN_shows_none', () => {
320
332
  const service = new ReactionsService({
321
333
  toolCaller: makeToolCaller(),
322
- policy: makeEnabledPolicy()
334
+ policy: makeEnabledPolicy(),
323
335
  });
324
336
  const ctx: GateRepairContext = {
325
337
  featureId: 'feature_history_none',
@@ -327,7 +339,7 @@ describe('ReactionsService branch coverage', () => {
327
339
  exitCode: 1,
328
340
  logs: 'test output',
329
341
  evidenceSummary: 'summary',
330
- retryCount: 0
342
+ retryCount: 0,
331
343
  };
332
344
  const prompt = service.buildRepairPrompt(ctx);
333
345
  expect(prompt).toContain('(none)');
@@ -338,7 +350,15 @@ describe('ReactionsService additional coverage', () => {
338
350
  it('GIVEN_policy_with_valid_max_retries_number_WHEN_maxRetries_called_THEN_returns_floor_of_value', () => {
339
351
  const service = new ReactionsService({
340
352
  toolCaller: makeToolCaller(),
341
- policy: { gate_failed: { enabled: true, action: 'retry_with_agent_repair', max_retries: 3.7, escalate_after: 2, retry_delay_ms: 0 } }
353
+ policy: {
354
+ gate_failed: {
355
+ enabled: true,
356
+ action: 'retry_with_agent_repair',
357
+ max_retries: 3.7,
358
+ escalate_after: 2,
359
+ retry_delay_ms: 0,
360
+ },
361
+ },
342
362
  });
343
363
  expect(service.maxRetries()).toBe(3);
344
364
  });
@@ -346,7 +366,15 @@ describe('ReactionsService additional coverage', () => {
346
366
  it('GIVEN_non_finite_max_retries_WHEN_maxRetries_called_THEN_returns_default', () => {
347
367
  const service = new ReactionsService({
348
368
  toolCaller: makeToolCaller(),
349
- policy: { gate_failed: { enabled: true, action: 'retry_with_agent_repair', max_retries: Infinity, escalate_after: 2, retry_delay_ms: 0 } }
369
+ policy: {
370
+ gate_failed: {
371
+ enabled: true,
372
+ action: 'retry_with_agent_repair',
373
+ max_retries: Infinity,
374
+ escalate_after: 2,
375
+ retry_delay_ms: 0,
376
+ },
377
+ },
350
378
  });
351
379
  expect(service.maxRetries()).toBeGreaterThanOrEqual(0);
352
380
  });
@@ -354,7 +382,7 @@ describe('ReactionsService additional coverage', () => {
354
382
  it('GIVEN_failure_history_with_items_WHEN_buildRepairPrompt_called_THEN_shows_history', () => {
355
383
  const service = new ReactionsService({
356
384
  toolCaller: makeToolCaller(),
357
- policy: makeEnabledPolicy()
385
+ policy: makeEnabledPolicy(),
358
386
  });
359
387
  const ctx: GateRepairContext = {
360
388
  featureId: 'feat_hist',
@@ -364,8 +392,16 @@ describe('ReactionsService additional coverage', () => {
364
392
  evidenceSummary: 'summary',
365
393
  retryCount: 1,
366
394
  failureHistory: [
367
- { attempt: 1, gate_name: 'fast', exit_code: 1, evidence_summary: 'ev1', logs_excerpt: 'log1', failed_at: new Date().toISOString(), retry_delay_ms: 1000 }
368
- ]
395
+ {
396
+ attempt: 1,
397
+ gate_name: 'fast',
398
+ exit_code: 1,
399
+ evidence_summary: 'ev1',
400
+ logs_excerpt: 'log1',
401
+ failed_at: new Date().toISOString(),
402
+ retry_delay_ms: 1000,
403
+ },
404
+ ],
369
405
  };
370
406
  const prompt = service.buildRepairPrompt(ctx);
371
407
  expect(prompt).toContain('attempt=1');
@@ -375,7 +411,7 @@ describe('ReactionsService additional coverage', () => {
375
411
  it('GIVEN_evidence_summary_empty_in_history_WHEN_buildRepairPrompt_called_THEN_shows_n_a', () => {
376
412
  const service = new ReactionsService({
377
413
  toolCaller: makeToolCaller(),
378
- policy: makeEnabledPolicy()
414
+ policy: makeEnabledPolicy(),
379
415
  });
380
416
  const ctx: GateRepairContext = {
381
417
  featureId: 'feat_hist2',
@@ -385,8 +421,15 @@ describe('ReactionsService additional coverage', () => {
385
421
  evidenceSummary: '',
386
422
  retryCount: 1,
387
423
  failureHistory: [
388
- { attempt: 1, gate_name: 'fast', exit_code: 1, evidence_summary: '', logs_excerpt: '', failed_at: new Date().toISOString() }
389
- ]
424
+ {
425
+ attempt: 1,
426
+ gate_name: 'fast',
427
+ exit_code: 1,
428
+ evidence_summary: '',
429
+ logs_excerpt: '',
430
+ failed_at: new Date().toISOString(),
431
+ },
432
+ ],
390
433
  };
391
434
  const prompt = service.buildRepairPrompt(ctx);
392
435
  expect(prompt).toContain('n/a');
@@ -6,7 +6,7 @@ describe('response helpers', () => {
6
6
  it('GIVEN_data_without_evidence_WHEN_ok_THEN_returns_minimal_success_shape', () => {
7
7
  expect(ok({ feature_id: 'feature_a' })).toEqual({
8
8
  ok: true,
9
- data: { feature_id: 'feature_a' }
9
+ data: { feature_id: 'feature_a' },
10
10
  });
11
11
  });
12
12
 
@@ -14,7 +14,7 @@ describe('response helpers', () => {
14
14
  expect(ok({ accepted: true }, { trace_id: 'trace-1' })).toEqual({
15
15
  ok: true,
16
16
  data: { accepted: true },
17
- evidence: { trace_id: 'trace-1' }
17
+ evidence: { trace_id: 'trace-1' },
18
18
  });
19
19
  });
20
20
 
@@ -36,20 +36,20 @@ describe('response helpers', () => {
36
36
  feature_id: 'feature_a',
37
37
  retryable: false,
38
38
  requires_human: false,
39
- suggested_next_actions: ['Retry', 'Escalate']
39
+ suggested_next_actions: ['Retry', 'Escalate'],
40
40
  });
41
41
  });
42
42
 
43
43
  it('GIVEN_existing_flags_WHEN_withSuggestedActions_THEN_keeps_existing_flags', () => {
44
44
  const details = withSuggestedActions(
45
45
  { retryable: true, requires_human: true, reason: 'manual' },
46
- ['Open incident']
46
+ ['Open incident'],
47
47
  );
48
48
  expect(details).toEqual({
49
49
  retryable: true,
50
50
  requires_human: true,
51
51
  reason: 'manual',
52
- suggested_next_actions: ['Open incident']
52
+ suggested_next_actions: ['Open incident'],
53
53
  });
54
54
  });
55
55
  });