agentic-orchestrator 0.1.3 → 0.1.4

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 (294) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CLAUDE.md +126 -0
  3. package/README.md +166 -25
  4. package/agentic/orchestrator/adapters.yaml +3 -0
  5. package/agentic/orchestrator/gates.yaml +47 -0
  6. package/agentic/orchestrator/policy.yaml +89 -0
  7. package/agentic/orchestrator/schemas/adapters.schema.json +12 -0
  8. package/agentic/orchestrator/schemas/gates.schema.json +6 -1
  9. package/agentic/orchestrator/schemas/index.schema.json +14 -0
  10. package/agentic/orchestrator/schemas/multi-project.schema.json +41 -0
  11. package/agentic/orchestrator/schemas/policy.schema.json +449 -52
  12. package/agentic/orchestrator/schemas/state.schema.json +16 -0
  13. package/agentic/orchestrator/tools/catalog.json +68 -0
  14. package/agentic/orchestrator/tools/schemas/input/cost.get.input.schema.json +10 -0
  15. package/agentic/orchestrator/tools/schemas/input/cost.record.input.schema.json +13 -0
  16. package/agentic/orchestrator/tools/schemas/input/feature.send_message.input.schema.json +11 -0
  17. package/agentic/orchestrator/tools/schemas/input/performance.get_analytics.input.schema.json +10 -0
  18. package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +18 -0
  19. package/agentic/orchestrator/tools/schemas/output/cost.get.output.schema.json +13 -0
  20. package/agentic/orchestrator/tools/schemas/output/cost.record.output.schema.json +13 -0
  21. package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +7 -0
  22. package/agentic/orchestrator/tools/schemas/output/feature.send_message.output.schema.json +23 -0
  23. package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +46 -0
  24. package/agentic/orchestrator/tools/schemas/output/performance.record_outcome.output.schema.json +10 -0
  25. package/agentic/orchestrator/tools.md +5 -0
  26. package/apps/control-plane/scripts/validate-architecture-rules.mjs +28 -2
  27. package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +12 -0
  28. package/apps/control-plane/scripts/validate-mcp-contracts.ts +92 -0
  29. package/apps/control-plane/src/application/adapters/adapter-registry.ts +169 -0
  30. package/apps/control-plane/src/application/multi-project-loader.ts +119 -0
  31. package/apps/control-plane/src/application/services/activity-monitor-service.ts +199 -0
  32. package/apps/control-plane/src/application/services/cost-tracking-service.ts +82 -0
  33. package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +86 -0
  34. package/apps/control-plane/src/application/services/feature-deletion-service.ts +7 -5
  35. package/apps/control-plane/src/application/services/gate-interpolation-service.ts +15 -0
  36. package/apps/control-plane/src/application/services/gate-service.ts +38 -2
  37. package/apps/control-plane/src/application/services/instance-isolation-service.ts +18 -0
  38. package/apps/control-plane/src/application/services/issue-tracker-service.ts +469 -0
  39. package/apps/control-plane/src/application/services/merge-service.ts +67 -3
  40. package/apps/control-plane/src/application/services/notifier-service.ts +295 -0
  41. package/apps/control-plane/src/application/services/performance-analytics-service.ts +122 -0
  42. package/apps/control-plane/src/application/services/plan-service.ts +51 -0
  43. package/apps/control-plane/src/application/services/pr-monitor-service.ts +262 -0
  44. package/apps/control-plane/src/application/services/reactions-service.ts +175 -0
  45. package/apps/control-plane/src/application/services/reporting-service.ts +17 -2
  46. package/apps/control-plane/src/application/services/run-lease-service.ts +16 -38
  47. package/apps/control-plane/src/application/tools/tool-metadata.ts +4 -1
  48. package/apps/control-plane/src/cli/attach-command-handler.ts +120 -0
  49. package/apps/control-plane/src/cli/cleanup-command-handler.ts +190 -0
  50. package/apps/control-plane/src/cli/cli-argument-parser.ts +69 -3
  51. package/apps/control-plane/src/cli/dashboard-command-handler.ts +57 -0
  52. package/apps/control-plane/src/cli/help-command-handler.ts +163 -0
  53. package/apps/control-plane/src/cli/init-command-handler.ts +609 -0
  54. package/apps/control-plane/src/cli/retry-command-handler.ts +138 -0
  55. package/apps/control-plane/src/cli/run-command-handler.ts +115 -3
  56. package/apps/control-plane/src/cli/send-command-handler.ts +65 -0
  57. package/apps/control-plane/src/cli/status-command-handler.ts +102 -2
  58. package/apps/control-plane/src/cli/types.ts +26 -1
  59. package/apps/control-plane/src/core/constants.ts +8 -2
  60. package/apps/control-plane/src/core/error-codes.ts +3 -1
  61. package/apps/control-plane/src/core/gates.ts +170 -50
  62. package/apps/control-plane/src/core/kernel.ts +280 -5
  63. package/apps/control-plane/src/core/path-layout.ts +12 -0
  64. package/apps/control-plane/src/core/tool-caller.ts +36 -0
  65. package/apps/control-plane/src/core/workspace-hooks.ts +87 -0
  66. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +258 -9
  67. package/apps/control-plane/src/providers/providers.ts +235 -14
  68. package/apps/control-plane/src/supervisor/build-wave-executor.ts +129 -8
  69. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +123 -5
  70. package/apps/control-plane/src/supervisor/run-coordinator.ts +143 -6
  71. package/apps/control-plane/src/supervisor/runtime.ts +135 -6
  72. package/apps/control-plane/src/supervisor/types.ts +12 -21
  73. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +8 -0
  74. package/apps/control-plane/test/activity-monitor.spec.ts +294 -0
  75. package/apps/control-plane/test/adapter-registry.spec.ts +132 -0
  76. package/apps/control-plane/test/batch-operations.spec.ts +112 -0
  77. package/apps/control-plane/test/bootstrap-attach.spec.ts +102 -0
  78. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +252 -0
  79. package/apps/control-plane/test/bootstrap.spec.ts +560 -0
  80. package/apps/control-plane/test/cleanup-command.spec.ts +301 -0
  81. package/apps/control-plane/test/cli-helpers.spec.ts +404 -1
  82. package/apps/control-plane/test/cli.unit.spec.ts +182 -1
  83. package/apps/control-plane/test/collision-queue.spec.ts +104 -1
  84. package/apps/control-plane/test/core-utils.spec.ts +175 -2
  85. package/apps/control-plane/test/cost-tracking.spec.ts +143 -0
  86. package/apps/control-plane/test/dashboard-api.integration.spec.ts +247 -0
  87. package/apps/control-plane/test/dashboard-client.spec.ts +116 -0
  88. package/apps/control-plane/test/dashboard-command.spec.ts +103 -0
  89. package/apps/control-plane/test/dependency-scheduler.spec.ts +189 -0
  90. package/apps/control-plane/test/epoch-tracking.spec.ts +4 -4
  91. package/apps/control-plane/test/feature-deletion-service.spec.ts +422 -0
  92. package/apps/control-plane/test/feature-lifecycle.spec.ts +202 -0
  93. package/apps/control-plane/test/git-spawn-error.spec.ts +24 -0
  94. package/apps/control-plane/test/incremental-gates.spec.ts +137 -0
  95. package/apps/control-plane/test/init-wizard.spec.ts +506 -0
  96. package/apps/control-plane/test/instance-isolation.spec.ts +83 -0
  97. package/apps/control-plane/test/issue-tracker.spec.ts +890 -0
  98. package/apps/control-plane/test/kernel.coverage.spec.ts +3 -5
  99. package/apps/control-plane/test/kernel.coverage2.spec.ts +871 -0
  100. package/apps/control-plane/test/kernel.spec.ts +13 -11
  101. package/apps/control-plane/test/lock-service.spec.ts +508 -0
  102. package/apps/control-plane/test/mcp-helpers.spec.ts +176 -0
  103. package/apps/control-plane/test/mcp.spec.ts +50 -15
  104. package/apps/control-plane/test/merge-service.spec.ts +67 -4
  105. package/apps/control-plane/test/multi-project.spec.ts +372 -0
  106. package/apps/control-plane/test/notifier-service.spec.ts +388 -0
  107. package/apps/control-plane/test/parallel-gates.spec.ts +312 -0
  108. package/apps/control-plane/test/patch-service.spec.ts +253 -0
  109. package/apps/control-plane/test/performance-analytics.spec.ts +338 -0
  110. package/apps/control-plane/test/planning-wave-executor.spec.ts +168 -0
  111. package/apps/control-plane/test/pr-monitor.spec.ts +385 -0
  112. package/apps/control-plane/test/providers.spec.ts +344 -1
  113. package/apps/control-plane/test/reactions.spec.ts +392 -0
  114. package/apps/control-plane/test/resume-command.spec.ts +390 -0
  115. package/apps/control-plane/test/run-coordinator.spec.ts +481 -2
  116. package/apps/control-plane/test/schema-date-time.spec.ts +46 -0
  117. package/apps/control-plane/test/service-retry-paths.spec.ts +30 -0
  118. package/apps/control-plane/test/services.spec.ts +95 -2
  119. package/apps/control-plane/test/session-management.spec.ts +450 -0
  120. package/apps/control-plane/test/spec-ingestion.spec.ts +190 -0
  121. package/apps/control-plane/test/supervisor-collaborators.spec.ts +699 -2
  122. package/apps/control-plane/test/supervisor.spec.ts +36 -30
  123. package/apps/control-plane/test/supervisor.unit.spec.ts +405 -0
  124. package/apps/control-plane/test/worker-decision-loop.spec.ts +57 -0
  125. package/apps/control-plane/test/workspace-hooks.spec.ts +177 -0
  126. package/apps/control-plane/vitest.config.ts +21 -5
  127. package/dist/apps/control-plane/application/adapters/adapter-registry.d.ts +44 -0
  128. package/dist/apps/control-plane/application/adapters/adapter-registry.js +76 -0
  129. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -0
  130. package/dist/apps/control-plane/application/multi-project-loader.d.ts +31 -0
  131. package/dist/apps/control-plane/application/multi-project-loader.js +82 -0
  132. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -0
  133. package/dist/apps/control-plane/application/services/activity-monitor-service.d.ts +43 -0
  134. package/dist/apps/control-plane/application/services/activity-monitor-service.js +132 -0
  135. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -0
  136. package/dist/apps/control-plane/application/services/cost-tracking-service.d.ts +28 -0
  137. package/dist/apps/control-plane/application/services/cost-tracking-service.js +48 -0
  138. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -0
  139. package/dist/apps/control-plane/application/services/dependency-scheduler-service.d.ts +26 -0
  140. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js +75 -0
  141. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -0
  142. package/dist/apps/control-plane/application/services/feature-deletion-service.d.ts +2 -0
  143. package/dist/apps/control-plane/application/services/feature-deletion-service.js +5 -5
  144. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  145. package/dist/apps/control-plane/application/services/gate-interpolation-service.d.ts +7 -0
  146. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +7 -0
  147. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -0
  148. package/dist/apps/control-plane/application/services/gate-service.js +32 -2
  149. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  150. package/dist/apps/control-plane/application/services/instance-isolation-service.d.ts +11 -0
  151. package/dist/apps/control-plane/application/services/instance-isolation-service.js +17 -0
  152. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -0
  153. package/dist/apps/control-plane/application/services/issue-tracker-service.d.ts +65 -0
  154. package/dist/apps/control-plane/application/services/issue-tracker-service.js +358 -0
  155. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -0
  156. package/dist/apps/control-plane/application/services/merge-service.d.ts +4 -0
  157. package/dist/apps/control-plane/application/services/merge-service.js +44 -2
  158. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  159. package/dist/apps/control-plane/application/services/notifier-service.d.ts +74 -0
  160. package/dist/apps/control-plane/application/services/notifier-service.js +212 -0
  161. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -0
  162. package/dist/apps/control-plane/application/services/performance-analytics-service.d.ts +39 -0
  163. package/dist/apps/control-plane/application/services/performance-analytics-service.js +75 -0
  164. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -0
  165. package/dist/apps/control-plane/application/services/plan-service.d.ts +1 -0
  166. package/dist/apps/control-plane/application/services/plan-service.js +53 -0
  167. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  168. package/dist/apps/control-plane/application/services/pr-monitor-service.d.ts +44 -0
  169. package/dist/apps/control-plane/application/services/pr-monitor-service.js +192 -0
  170. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -0
  171. package/dist/apps/control-plane/application/services/reactions-service.d.ts +67 -0
  172. package/dist/apps/control-plane/application/services/reactions-service.js +114 -0
  173. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -0
  174. package/dist/apps/control-plane/application/services/reporting-service.d.ts +1 -0
  175. package/dist/apps/control-plane/application/services/reporting-service.js +13 -2
  176. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  177. package/dist/apps/control-plane/application/services/run-lease-service.d.ts +2 -0
  178. package/dist/apps/control-plane/application/services/run-lease-service.js +14 -38
  179. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  180. package/dist/apps/control-plane/application/tools/tool-metadata.js +3 -1
  181. package/dist/apps/control-plane/application/tools/tool-metadata.js.map +1 -1
  182. package/dist/apps/control-plane/cli/attach-command-handler.d.ts +12 -0
  183. package/dist/apps/control-plane/cli/attach-command-handler.js +98 -0
  184. package/dist/apps/control-plane/cli/attach-command-handler.js.map +1 -0
  185. package/dist/apps/control-plane/cli/cleanup-command-handler.d.ts +12 -0
  186. package/dist/apps/control-plane/cli/cleanup-command-handler.js +162 -0
  187. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -0
  188. package/dist/apps/control-plane/cli/cli-argument-parser.js +68 -3
  189. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  190. package/dist/apps/control-plane/cli/dashboard-command-handler.d.ts +7 -0
  191. package/dist/apps/control-plane/cli/dashboard-command-handler.js +45 -0
  192. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -0
  193. package/dist/apps/control-plane/cli/help-command-handler.d.ts +8 -0
  194. package/dist/apps/control-plane/cli/help-command-handler.js +146 -0
  195. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -0
  196. package/dist/apps/control-plane/cli/init-command-handler.d.ts +26 -0
  197. package/dist/apps/control-plane/cli/init-command-handler.js +517 -0
  198. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -0
  199. package/dist/apps/control-plane/cli/retry-command-handler.d.ts +8 -0
  200. package/dist/apps/control-plane/cli/retry-command-handler.js +111 -0
  201. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -0
  202. package/dist/apps/control-plane/cli/run-command-handler.d.ts +5 -0
  203. package/dist/apps/control-plane/cli/run-command-handler.js +82 -3
  204. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  205. package/dist/apps/control-plane/cli/send-command-handler.d.ts +8 -0
  206. package/dist/apps/control-plane/cli/send-command-handler.js +55 -0
  207. package/dist/apps/control-plane/cli/send-command-handler.js.map +1 -0
  208. package/dist/apps/control-plane/cli/status-command-handler.d.ts +12 -1
  209. package/dist/apps/control-plane/cli/status-command-handler.js +55 -2
  210. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  211. package/dist/apps/control-plane/cli/types.d.ts +25 -1
  212. package/dist/apps/control-plane/cli/types.js +15 -1
  213. package/dist/apps/control-plane/cli/types.js.map +1 -1
  214. package/dist/apps/control-plane/core/constants.d.ts +6 -0
  215. package/dist/apps/control-plane/core/constants.js +8 -2
  216. package/dist/apps/control-plane/core/constants.js.map +1 -1
  217. package/dist/apps/control-plane/core/error-codes.d.ts +2 -0
  218. package/dist/apps/control-plane/core/error-codes.js +3 -1
  219. package/dist/apps/control-plane/core/error-codes.js.map +1 -1
  220. package/dist/apps/control-plane/core/gates.d.ts +4 -0
  221. package/dist/apps/control-plane/core/gates.js +140 -43
  222. package/dist/apps/control-plane/core/gates.js.map +1 -1
  223. package/dist/apps/control-plane/core/kernel.d.ts +48 -1
  224. package/dist/apps/control-plane/core/kernel.js +218 -5
  225. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  226. package/dist/apps/control-plane/core/path-layout.d.ts +3 -0
  227. package/dist/apps/control-plane/core/path-layout.js +9 -0
  228. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  229. package/dist/apps/control-plane/core/tool-caller.d.ts +32 -0
  230. package/dist/apps/control-plane/core/tool-caller.js +2 -0
  231. package/dist/apps/control-plane/core/tool-caller.js.map +1 -0
  232. package/dist/apps/control-plane/core/workspace-hooks.d.ts +20 -0
  233. package/dist/apps/control-plane/core/workspace-hooks.js +69 -0
  234. package/dist/apps/control-plane/core/workspace-hooks.js.map +1 -0
  235. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +245 -9
  236. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  237. package/dist/apps/control-plane/providers/providers.d.ts +39 -4
  238. package/dist/apps/control-plane/providers/providers.js +160 -10
  239. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  240. package/dist/apps/control-plane/supervisor/build-wave-executor.d.ts +3 -0
  241. package/dist/apps/control-plane/supervisor/build-wave-executor.js +115 -6
  242. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  243. package/dist/apps/control-plane/supervisor/qa-wave-executor.d.ts +3 -0
  244. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +109 -5
  245. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  246. package/dist/apps/control-plane/supervisor/run-coordinator.d.ts +15 -0
  247. package/dist/apps/control-plane/supervisor/run-coordinator.js +132 -6
  248. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  249. package/dist/apps/control-plane/supervisor/runtime.d.ts +3 -0
  250. package/dist/apps/control-plane/supervisor/runtime.js +110 -6
  251. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  252. package/dist/apps/control-plane/supervisor/types.d.ts +9 -16
  253. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  254. package/dist/apps/control-plane/supervisor/worker-decision-loop.d.ts +3 -0
  255. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +5 -0
  256. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  257. package/eslint.config.mjs +2 -1
  258. package/package.json +12 -2
  259. package/packages/web-dashboard/next-env.d.ts +5 -0
  260. package/packages/web-dashboard/next.config.js +7 -0
  261. package/packages/web-dashboard/package.json +26 -0
  262. package/packages/web-dashboard/src/app/api/actions/route.ts +64 -0
  263. package/packages/web-dashboard/src/app/api/events/route.ts +51 -0
  264. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +256 -0
  265. package/packages/web-dashboard/src/app/api/features/[id]/diff/route.ts +10 -0
  266. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +25 -0
  267. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +63 -0
  268. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +16 -0
  269. package/packages/web-dashboard/src/app/api/projects/route.ts +31 -0
  270. package/packages/web-dashboard/src/app/api/status/route.ts +15 -0
  271. package/packages/web-dashboard/src/app/globals.css +2 -0
  272. package/packages/web-dashboard/src/app/layout.tsx +15 -0
  273. package/packages/web-dashboard/src/app/page.tsx +393 -0
  274. package/packages/web-dashboard/src/lib/aop-client.ts +244 -0
  275. package/packages/web-dashboard/src/lib/multi-project-config.ts +116 -0
  276. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +284 -0
  277. package/packages/web-dashboard/src/lib/types.ts +58 -0
  278. package/packages/web-dashboard/tsconfig.json +40 -0
  279. package/packages/web-dashboard/vitest.config.ts +6 -0
  280. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +1764 -0
  281. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +348 -0
  282. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +344 -0
  283. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +374 -0
  284. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +1059 -0
  285. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +466 -0
  286. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +198 -0
  287. package/spec-files/outstanding/agentic_orchestrator_validator_hardening_spec.md +365 -0
  288. package/spec-files/progress.md +481 -52
  289. /package/spec-files/{agentic_orchestrator_cli_delete_command_spec.md → completed/agentic_orchestrator_cli_delete_command_spec.md} +0 -0
  290. /package/spec-files/{agentic_orchestrator_dot_aop_generated_artifacts_spec.md → completed/agentic_orchestrator_dot_aop_generated_artifacts_spec.md} +0 -0
  291. /package/spec-files/{agentic_orchestrator_mcp_formalization_spec.md → completed/agentic_orchestrator_mcp_formalization_spec.md} +0 -0
  292. /package/spec-files/{agentic_orchestrator_oop_refactor_spec.md → completed/agentic_orchestrator_oop_refactor_spec.md} +0 -0
  293. /package/spec-files/{agentic_orchestrator_single_global_orchestrator_spec.md → completed/agentic_orchestrator_single_global_orchestrator_spec.md} +0 -0
  294. /package/spec-files/{agentic_orchestrator_spec.md → completed/agentic_orchestrator_spec.md} +0 -0
@@ -0,0 +1,517 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { execFile } from 'node:child_process';
4
+ import { createInterface } from 'node:readline/promises';
5
+ import { promisify } from 'node:util';
6
+ import { stdin as input, stdout as output } from 'node:process';
7
+ import { fileURLToPath } from 'node:url';
8
+ import YAML from 'yaml';
9
+ import { SchemaRegistry } from '../core/schemas.js';
10
+ const execFileAsync = promisify(execFile);
11
+ const MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));
12
+ const TEMPLATE_ROOT = path.resolve(MODULE_DIR, '../../../../agentic/orchestrator');
13
+ function createPromptSession() {
14
+ return createInterface({ input, output });
15
+ }
16
+ async function detectGitContext(repoRoot) {
17
+ let remoteUrl = null;
18
+ try {
19
+ const gitConfig = await fs.readFile(path.join(repoRoot, '.git', 'config'), 'utf8');
20
+ const sections = gitConfig.split(/\n(?=\[)/);
21
+ for (const section of sections) {
22
+ if (/^\[remote "origin"\]/.test(section)) {
23
+ const urlMatch = /\s+url\s*=\s*(.+)/.exec(section);
24
+ if (urlMatch) {
25
+ remoteUrl = urlMatch[1].trim();
26
+ }
27
+ break;
28
+ }
29
+ }
30
+ }
31
+ catch {
32
+ // not a git repo or no .git/config
33
+ }
34
+ let defaultBranch = 'main';
35
+ try {
36
+ const { stdout } = await execFileAsync('git', ['-C', repoRoot, 'symbolic-ref', 'refs/remotes/origin/HEAD', '--short'], { timeout: 3000 });
37
+ const ref = stdout.trim();
38
+ const parts = ref.split('/');
39
+ defaultBranch = parts[parts.length - 1] ?? 'main';
40
+ }
41
+ catch {
42
+ // use default
43
+ }
44
+ return { remoteUrl, defaultBranch };
45
+ }
46
+ async function detectTestFramework(repoRoot) {
47
+ try {
48
+ const content = await fs.readFile(path.join(repoRoot, 'package.json'), 'utf8');
49
+ const pkg = JSON.parse(content);
50
+ const deps = {
51
+ ...(typeof pkg.dependencies === 'object' && pkg.dependencies !== null
52
+ ? pkg.dependencies
53
+ : {}),
54
+ ...(typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
55
+ ? pkg.devDependencies
56
+ : {})
57
+ };
58
+ if ('vitest' in deps) {
59
+ return 'vitest';
60
+ }
61
+ if ('jest' in deps) {
62
+ return 'jest';
63
+ }
64
+ }
65
+ catch {
66
+ // no package.json
67
+ }
68
+ const buildFileChecks = [
69
+ ['setup.py', 'pytest'],
70
+ ['pyproject.toml', 'pytest'],
71
+ ['pom.xml', 'maven'],
72
+ ['build.gradle', 'gradle'],
73
+ ['build.gradle.kts', 'gradle']
74
+ ];
75
+ for (const [file, framework] of buildFileChecks) {
76
+ try {
77
+ await fs.access(path.join(repoRoot, file));
78
+ return framework;
79
+ }
80
+ catch {
81
+ // continue
82
+ }
83
+ }
84
+ return 'vitest';
85
+ }
86
+ function buildGateCommands(framework) {
87
+ switch (framework) {
88
+ case 'jest':
89
+ return { test: ['npx', 'jest'], testWithCoverage: ['npx', 'jest', '--coverage'] };
90
+ case 'pytest':
91
+ return { test: ['pytest'], testWithCoverage: ['pytest', '--cov'] };
92
+ case 'maven':
93
+ return { test: ['mvn', 'test'], testWithCoverage: ['mvn', 'verify'] };
94
+ case 'gradle':
95
+ return { test: ['./gradlew', 'test'], testWithCoverage: ['./gradlew', 'check'] };
96
+ default:
97
+ return { test: ['npx', 'vitest', 'run'], testWithCoverage: ['npx', 'vitest', 'run', '--coverage'] };
98
+ }
99
+ }
100
+ function yamlList(items) {
101
+ return items.map((item) => `"${item}"`).join(', ');
102
+ }
103
+ function escapeYamlString(value) {
104
+ return value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
105
+ }
106
+ function generatePolicyYaml(context, wizard) {
107
+ const notificationsEnabled = wizard.notifications.desktop || wizard.notifications.slack || wizard.notifications.webhook;
108
+ return `version: 1
109
+ commit_policy:
110
+ allow_commit: false
111
+ allow_merge: false
112
+ patch_policy:
113
+ enforce_plan: true
114
+ enforce_allowed_areas: true
115
+ locks:
116
+ resources:
117
+ - openapi
118
+ - events
119
+ - db_migrations
120
+ contract_to_resource:
121
+ openapi: openapi
122
+ events: events
123
+ db: db_migrations
124
+ lease_ttl_seconds: 300
125
+ acquire_behavior: wait
126
+ default_wait_timeout_seconds: 300
127
+ acquire_backoff:
128
+ initial_ms: 200
129
+ max_ms: 5000
130
+ multiplier: 2
131
+ jitter_ms: 150
132
+ protected_areas:
133
+ - agentic/orchestrator/schemas
134
+ - agentic/orchestrator/policy.yaml
135
+ required_modes:
136
+ - fast
137
+ - full
138
+ required_merge_mode: merge
139
+ collision_policy: reject
140
+ config_precedence:
141
+ policy_hard_constraints:
142
+ - execution.default_step_timeout_seconds
143
+ - testing.coverage.minimums
144
+ - testing.coverage.targets
145
+ gates_profile_defaults:
146
+ - profiles
147
+ plan_verification_overrides:
148
+ - verification_overrides
149
+ path_rules:
150
+ matching: repo_prefix
151
+ normalize_paths: true
152
+ allow_symlink_traversal: false
153
+ execution:
154
+ default_step_timeout_seconds: 600
155
+ retry_policy:
156
+ transient_max_retries: 1
157
+ transient_error_codes:
158
+ - 124
159
+ non_retryable_error_codes:
160
+ - 2
161
+ - 126
162
+ - 127
163
+ env_allowlist:
164
+ - PATH
165
+ - HOME
166
+ implementation:
167
+ workspace: nx
168
+ testing:
169
+ framework: vitest
170
+ coverage:
171
+ minimums:
172
+ line: 0.7
173
+ branch: 0.7
174
+ targets:
175
+ line: 1.0
176
+ branch: 1.0
177
+ merge_policy:
178
+ require_user_approval: true
179
+ allowed_strategies:
180
+ - merge_commit
181
+ - squash
182
+ - rebase
183
+ worktree:
184
+ base_branch: ${context.defaultBranch}
185
+ rbac:
186
+ orchestrator:
187
+ - feature.discover_specs
188
+ - feature.init
189
+ - feature.get_context
190
+ - feature.state_get
191
+ - feature.state_patch
192
+ - feature.log_append
193
+ - plan.submit
194
+ - plan.get
195
+ - plan.update
196
+ - repo.ensure_worktree
197
+ - repo.apply_patch
198
+ - repo.status
199
+ - repo.diff
200
+ - repo.read_file
201
+ - repo.search
202
+ - gates.list
203
+ - gates.run
204
+ - evidence.latest
205
+ - locks.acquire
206
+ - locks.release
207
+ - collisions.scan
208
+ - report.dashboard
209
+ - report.feature_summary
210
+ - feature.ready_to_merge
211
+ - feature.delete
212
+ planner:
213
+ - feature.get_context
214
+ - feature.state_get
215
+ - plan.submit
216
+ - plan.update
217
+ - collisions.scan
218
+ - repo.read_file
219
+ - repo.search
220
+ builder:
221
+ - feature.get_context
222
+ - feature.state_get
223
+ - repo.apply_patch
224
+ - repo.status
225
+ - repo.diff
226
+ - repo.read_file
227
+ - repo.search
228
+ - gates.run
229
+ qa:
230
+ - feature.get_context
231
+ - feature.state_get
232
+ - repo.apply_patch
233
+ - repo.diff
234
+ - repo.read_file
235
+ - repo.search
236
+ - gates.run
237
+ - evidence.latest
238
+ system:
239
+ - "*"
240
+ recovery:
241
+ orchestrator_session_reattach_timeout_ms: 5000
242
+ orphan_session_cleanup_enabled: true
243
+ supervisor:
244
+ max_iterations_per_phase: 6
245
+ max_parallel_gate_runs: ${wizard.maxParallelGateRuns}
246
+ cleanup:
247
+ auto_after_merge: false
248
+ grace_period_seconds: 3600
249
+ dashboard:
250
+ enabled: true
251
+ port: ${wizard.dashboardPort}
252
+ notifications:
253
+ enabled: ${notificationsEnabled}
254
+ channels:
255
+ desktop:
256
+ enabled: ${wizard.notifications.desktop}
257
+ slack:
258
+ enabled: ${wizard.notifications.slack}
259
+ webhook: "${escapeYamlString(wizard.notifications.slackWebhook)}"
260
+ channel: "#aop-alerts"
261
+ webhook:
262
+ enabled: ${wizard.notifications.webhook}
263
+ url: "${escapeYamlString(wizard.notifications.webhookUrl)}"
264
+ `;
265
+ }
266
+ function generateGatesYaml(framework) {
267
+ const cmds = buildGateCommands(framework);
268
+ return `version: 1
269
+ profiles:
270
+ default:
271
+ modes:
272
+ fast:
273
+ - name: test
274
+ cmd: [${yamlList(cmds.test)}]
275
+ timeout_seconds: 600
276
+ full:
277
+ - name: test_with_coverage
278
+ cmd: [${yamlList(cmds.testWithCoverage)}]
279
+ timeout_seconds: 1200
280
+ merge:
281
+ - name: merge_safety
282
+ cmd: [${yamlList(cmds.testWithCoverage)}]
283
+ timeout_seconds: 1200
284
+ parsers:
285
+ coverage:
286
+ type: lcov
287
+ path: coverage/lcov.info
288
+ thresholds:
289
+ coverage_line_min: 0.7
290
+ coverage_branch_min: 0.7
291
+ coverage_line_target: 1.0
292
+ coverage_branch_target: 1.0
293
+ capabilities:
294
+ - none
295
+ - lcov
296
+ `;
297
+ }
298
+ function generateAgentsYaml() {
299
+ return `version: 1
300
+ roles:
301
+ planner:
302
+ system_prompt_path: agentic/orchestrator/prompts/planner.system.md
303
+ builder:
304
+ system_prompt_path: agentic/orchestrator/prompts/builder.system.md
305
+ qa:
306
+ system_prompt_path: agentic/orchestrator/prompts/qa.system.md
307
+ missing_prompt_behavior: ignore
308
+ runtime:
309
+ default_provider: custom
310
+ default_model: local-default
311
+ provider_config_env: AOP_PROVIDER_CONFIG_ENV
312
+ role_provider_overrides: {}
313
+ `;
314
+ }
315
+ function generateAdaptersYaml() {
316
+ return `notification-channel: desktop
317
+ activity-detector: claude-jsonl
318
+ scm-provider: github
319
+ `;
320
+ }
321
+ function parseInteger(raw, fallback, min, max) {
322
+ const parsed = Number.parseInt(raw, 10);
323
+ if (Number.isNaN(parsed)) {
324
+ return fallback;
325
+ }
326
+ if (parsed < min || parsed > max) {
327
+ return fallback;
328
+ }
329
+ return parsed;
330
+ }
331
+ function parseFramework(raw, fallback) {
332
+ const value = raw.trim().toLowerCase();
333
+ if (value === 'vitest' || value === 'jest' || value === 'pytest' || value === 'maven' || value === 'gradle') {
334
+ return value;
335
+ }
336
+ return fallback;
337
+ }
338
+ function parseNotificationChannels(raw) {
339
+ const normalized = raw.trim().toLowerCase();
340
+ if (!normalized || normalized === 'none') {
341
+ return { desktop: false, slack: false, webhook: false };
342
+ }
343
+ const channels = new Set(normalized.split(',').map((token) => token.trim()).filter((token) => token.length > 0));
344
+ return {
345
+ desktop: channels.has('desktop'),
346
+ slack: channels.has('slack'),
347
+ webhook: channels.has('webhook')
348
+ };
349
+ }
350
+ async function askWithDefault(prompt, label, defaultValue) {
351
+ const raw = (await prompt.question(`${label} [${defaultValue}]: `)).trim();
352
+ return raw.length > 0 ? raw : defaultValue;
353
+ }
354
+ async function collectWizardConfig(defaults, promptFactory) {
355
+ const prompt = promptFactory();
356
+ try {
357
+ const baseBranch = await askWithDefault(prompt, 'Worktree base branch', defaults.branch);
358
+ const maxParallelGateRunsRaw = await askWithDefault(prompt, 'Max parallel gate runs', '3');
359
+ const dashboardPortRaw = await askWithDefault(prompt, 'Dashboard port', '3000');
360
+ const channelsRaw = await askWithDefault(prompt, 'Notification channels (comma-separated: desktop,slack,webhook,none)', 'none');
361
+ const frameworkRaw = await askWithDefault(prompt, 'Test framework (vitest|jest|pytest|maven|gradle)', defaults.framework);
362
+ const channels = parseNotificationChannels(channelsRaw);
363
+ let slackWebhook = '';
364
+ let webhookUrl = '';
365
+ if (channels.slack) {
366
+ slackWebhook = (await prompt.question('Slack webhook URL []: ')).trim();
367
+ }
368
+ if (channels.webhook) {
369
+ webhookUrl = (await prompt.question('Webhook URL []: ')).trim();
370
+ }
371
+ return {
372
+ baseBranch,
373
+ maxParallelGateRuns: parseInteger(maxParallelGateRunsRaw, 3, 1, 64),
374
+ dashboardPort: parseInteger(dashboardPortRaw, 3000, 1, 65535),
375
+ framework: parseFramework(frameworkRaw, defaults.framework),
376
+ notifications: {
377
+ desktop: channels.desktop,
378
+ slack: channels.slack,
379
+ webhook: channels.webhook,
380
+ slackWebhook,
381
+ webhookUrl
382
+ }
383
+ };
384
+ }
385
+ finally {
386
+ prompt.close();
387
+ }
388
+ }
389
+ async function loadTemplateFiles(subdir, matcher) {
390
+ const sourceDir = path.join(TEMPLATE_ROOT, subdir);
391
+ const entries = await fs.readdir(sourceDir, { withFileTypes: true });
392
+ const templates = [];
393
+ for (const entry of entries) {
394
+ if (!entry.isFile() || !matcher(entry.name)) {
395
+ continue;
396
+ }
397
+ const full = path.join(sourceDir, entry.name);
398
+ templates.push({
399
+ rel: `agentic/orchestrator/${subdir}/${entry.name}`,
400
+ content: await fs.readFile(full, 'utf8')
401
+ });
402
+ }
403
+ return templates.sort((a, b) => a.rel.localeCompare(b.rel));
404
+ }
405
+ export class InitCommandHandler {
406
+ repoRoot;
407
+ promptFactory;
408
+ constructor(repoRoot, promptFactory = createPromptSession) {
409
+ this.repoRoot = repoRoot;
410
+ this.promptFactory = promptFactory;
411
+ }
412
+ async execute(options) {
413
+ const gitContext = await detectGitContext(this.repoRoot);
414
+ const framework = await detectTestFramework(this.repoRoot);
415
+ const wizard = options.auto
416
+ ? {
417
+ baseBranch: gitContext.defaultBranch,
418
+ maxParallelGateRuns: 3,
419
+ dashboardPort: 3000,
420
+ framework,
421
+ notifications: {
422
+ desktop: false,
423
+ slack: false,
424
+ webhook: false,
425
+ slackWebhook: '',
426
+ webhookUrl: ''
427
+ }
428
+ }
429
+ : await collectWizardConfig({
430
+ branch: gitContext.defaultBranch,
431
+ framework
432
+ }, this.promptFactory);
433
+ const orchestratorDir = path.join(this.repoRoot, 'agentic', 'orchestrator');
434
+ await fs.mkdir(orchestratorDir, { recursive: true });
435
+ const configFiles = [
436
+ {
437
+ rel: 'agentic/orchestrator/policy.yaml',
438
+ content: generatePolicyYaml({ ...gitContext, defaultBranch: wizard.baseBranch }, wizard)
439
+ },
440
+ { rel: 'agentic/orchestrator/gates.yaml', content: generateGatesYaml(wizard.framework) },
441
+ { rel: 'agentic/orchestrator/agents.yaml', content: generateAgentsYaml() },
442
+ { rel: 'agentic/orchestrator/adapters.yaml', content: generateAdaptersYaml() }
443
+ ];
444
+ const templateFiles = [
445
+ ...(await loadTemplateFiles('prompts', (filename) => filename.endsWith('.md'))),
446
+ ...(await loadTemplateFiles('schemas', (filename) => filename.endsWith('.json')))
447
+ ];
448
+ const writableFiles = [...configFiles, ...templateFiles];
449
+ const created = [];
450
+ const updated = [];
451
+ const skipped = [];
452
+ for (const { rel, content } of writableFiles) {
453
+ const filePath = path.join(this.repoRoot, rel);
454
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
455
+ let exists = false;
456
+ try {
457
+ await fs.access(filePath);
458
+ exists = true;
459
+ }
460
+ catch {
461
+ // file does not exist
462
+ }
463
+ if (exists && !options.force) {
464
+ skipped.push(rel);
465
+ continue;
466
+ }
467
+ await fs.writeFile(filePath, content, 'utf8');
468
+ if (exists) {
469
+ updated.push(rel);
470
+ }
471
+ else {
472
+ created.push(rel);
473
+ }
474
+ }
475
+ const validationWarnings = [];
476
+ const schemaRegistry = new SchemaRegistry(this.repoRoot);
477
+ const validationTargets = [
478
+ { schema: 'policy.schema.json', rel: 'agentic/orchestrator/policy.yaml' },
479
+ { schema: 'gates.schema.json', rel: 'agentic/orchestrator/gates.yaml' },
480
+ { schema: 'agents.schema.json', rel: 'agentic/orchestrator/agents.yaml' },
481
+ { schema: 'adapters.schema.json', rel: 'agentic/orchestrator/adapters.yaml' }
482
+ ];
483
+ for (const { schema, rel } of validationTargets) {
484
+ if (skipped.includes(rel)) {
485
+ continue;
486
+ }
487
+ try {
488
+ const raw = await fs.readFile(path.join(this.repoRoot, rel), 'utf8');
489
+ const parsed = YAML.parse(raw);
490
+ const result = await schemaRegistry.validate(schema, parsed);
491
+ if (!result.valid) {
492
+ const messages = result.errors.map((e) => e.message ?? String(e)).join('; ');
493
+ validationWarnings.push(`${rel}: ${messages}`);
494
+ }
495
+ }
496
+ catch (err) {
497
+ validationWarnings.push(`Failed to validate ${rel}: ${String(err)}`);
498
+ }
499
+ }
500
+ return {
501
+ ok: true,
502
+ data: {
503
+ command: 'init',
504
+ created,
505
+ updated,
506
+ skipped,
507
+ validation_warnings: validationWarnings,
508
+ next_steps: [
509
+ 'Review generated files in agentic/orchestrator/{policy,gates,agents,adapters}.yaml',
510
+ 'Verify prompts under agentic/orchestrator/prompts/ and schemas under agentic/orchestrator/schemas/',
511
+ 'Run: aop run -fi <spec.md> to start orchestrating features'
512
+ ]
513
+ }
514
+ };
515
+ }
516
+ }
517
+ //# sourceMappingURL=init-command-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-command-handler.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/cli/init-command-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ToolClient } from '../mcp/tool-client.js';
2
+ import type { CliOptions } from './types.js';
3
+ export declare class RetryCommandHandler {
4
+ private readonly toolClient;
5
+ private readonly runId;
6
+ constructor(toolClient: ToolClient, runId: string);
7
+ execute(options: CliOptions): Promise<unknown>;
8
+ }
@@ -0,0 +1,111 @@
1
+ import { ERROR_CODES } from '../core/error-codes.js';
2
+ import { TOOLS } from '../core/constants.js';
3
+ import { callCliTool } from './tooling.js';
4
+ function isValidFeatureId(value) {
5
+ return /^[a-z0-9_][a-z0-9_-]*$/.test(value);
6
+ }
7
+ function invalidCliArgs(details) {
8
+ const error = new Error(ERROR_CODES.INVALID_CLI_ARGS);
9
+ error.code = ERROR_CODES.INVALID_CLI_ARGS;
10
+ error.details = details;
11
+ throw error;
12
+ }
13
+ export class RetryCommandHandler {
14
+ toolClient;
15
+ runId;
16
+ constructor(toolClient, runId) {
17
+ this.toolClient = toolClient;
18
+ this.runId = runId;
19
+ }
20
+ async execute(options) {
21
+ const featureId = options.feature_id;
22
+ if (!featureId) {
23
+ invalidCliArgs({
24
+ reason: '--feature-id is required for retry',
25
+ expected: '--feature-id <feature_id>'
26
+ });
27
+ }
28
+ if (!isValidFeatureId(featureId)) {
29
+ invalidCliArgs({
30
+ reason: 'Invalid --feature-id value',
31
+ provided: featureId,
32
+ expected_pattern: '^[a-z0-9_][a-z0-9_-]*$'
33
+ });
34
+ }
35
+ const force = options.force === true;
36
+ let retryCountReset = false;
37
+ let retryExecuted = false;
38
+ let forcedRetryExecuted = false;
39
+ let retryMode = null;
40
+ let retryOutcome = null;
41
+ const current = await callCliTool(this.toolClient, this.runId, TOOLS.FEATURE_STATE_GET, {
42
+ feature_id: featureId
43
+ });
44
+ const statePayload = current.data;
45
+ const status = statePayload.front_matter.status ?? '';
46
+ const lastGateMode = statePayload.front_matter.evidence?.last_gate_mode;
47
+ const inferredMode = typeof lastGateMode === 'string' && lastGateMode.length > 0
48
+ ? lastGateMode
49
+ : status === 'building'
50
+ ? 'fast'
51
+ : status === 'qa' || status === 'ready_to_merge'
52
+ ? 'full'
53
+ : status === 'blocked' && statePayload.front_matter.status_reason?.includes('forced_retry:fast')
54
+ ? 'fast'
55
+ : 'full';
56
+ if (!force && (status === 'merged' || status === 'failed')) {
57
+ invalidCliArgs({
58
+ reason: 'Cannot retry a terminal feature status without --force',
59
+ status,
60
+ expected_status: ['building', 'qa', 'ready_to_merge', 'blocked']
61
+ });
62
+ }
63
+ if (force) {
64
+ const frontMatterPatch = {
65
+ gate_retry_count: 0,
66
+ last_retry_at: null
67
+ };
68
+ if (status === 'blocked') {
69
+ frontMatterPatch.status =
70
+ inferredMode === 'fast'
71
+ ? 'building'
72
+ : inferredMode === 'full'
73
+ ? 'qa'
74
+ : inferredMode === 'merge'
75
+ ? 'ready_to_merge'
76
+ : 'qa';
77
+ frontMatterPatch.status_reason = `forced_retry:${inferredMode}`;
78
+ }
79
+ await callCliTool(this.toolClient, this.runId, TOOLS.FEATURE_STATE_PATCH, {
80
+ feature_id: featureId,
81
+ expected_version: statePayload.front_matter.version,
82
+ patch: {
83
+ front_matter: frontMatterPatch
84
+ }
85
+ });
86
+ retryCountReset = true;
87
+ forcedRetryExecuted = true;
88
+ }
89
+ const gate = await callCliTool(this.toolClient, this.runId, TOOLS.GATES_RUN, {
90
+ feature_id: featureId,
91
+ profile: null,
92
+ mode: inferredMode
93
+ });
94
+ retryMode = inferredMode;
95
+ const gateData = gate.data;
96
+ retryOutcome = typeof gateData.overall === 'string' ? gateData.overall : null;
97
+ retryExecuted = true;
98
+ return {
99
+ ok: true,
100
+ data: {
101
+ feature_id: featureId,
102
+ retry_count_reset: retryCountReset,
103
+ retry_executed: retryExecuted,
104
+ forced_retry_executed: forcedRetryExecuted,
105
+ retry_mode: retryMode,
106
+ retry_outcome: retryOutcome
107
+ }
108
+ };
109
+ }
110
+ }
111
+ //# sourceMappingURL=retry-command-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-command-handler.js","sourceRoot":"","sources":["../../../../apps/control-plane/src/cli/retry-command-handler.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,12 @@ export interface RunCommandContext {
9
9
  options: CliOptions;
10
10
  kernel: AopKernel;
11
11
  toolClient: ToolClient;
12
+ maxActiveFeatures?: number;
13
+ maxParallelGateRuns?: number;
12
14
  }
13
15
  export declare class RunCommandHandler {
16
+ private readonly spawnDelayMs;
17
+ constructor(spawnDelayMs?: number);
14
18
  execute(context: RunCommandContext): Promise<unknown>;
19
+ private executeBatch;
15
20
  }