agentic-orchestrator 0.1.2 → 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 (300) 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 +8 -7
  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/aop.ts +1 -1
  49. package/apps/control-plane/src/cli/attach-command-handler.ts +120 -0
  50. package/apps/control-plane/src/cli/cleanup-command-handler.ts +190 -0
  51. package/apps/control-plane/src/cli/cli-argument-parser.ts +69 -3
  52. package/apps/control-plane/src/cli/dashboard-command-handler.ts +57 -0
  53. package/apps/control-plane/src/cli/help-command-handler.ts +163 -0
  54. package/apps/control-plane/src/cli/init-command-handler.ts +609 -0
  55. package/apps/control-plane/src/cli/resume-command-handler.ts +1 -0
  56. package/apps/control-plane/src/cli/retry-command-handler.ts +138 -0
  57. package/apps/control-plane/src/cli/run-command-handler.ts +115 -3
  58. package/apps/control-plane/src/cli/send-command-handler.ts +65 -0
  59. package/apps/control-plane/src/cli/status-command-handler.ts +102 -2
  60. package/apps/control-plane/src/cli/types.ts +26 -1
  61. package/apps/control-plane/src/core/constants.ts +8 -2
  62. package/apps/control-plane/src/core/error-codes.ts +3 -1
  63. package/apps/control-plane/src/core/gates.ts +170 -50
  64. package/apps/control-plane/src/core/kernel.ts +280 -5
  65. package/apps/control-plane/src/core/path-layout.ts +12 -0
  66. package/apps/control-plane/src/core/tool-caller.ts +36 -0
  67. package/apps/control-plane/src/core/workspace-hooks.ts +87 -0
  68. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +258 -9
  69. package/apps/control-plane/src/providers/providers.ts +235 -14
  70. package/apps/control-plane/src/supervisor/build-wave-executor.ts +129 -8
  71. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +123 -5
  72. package/apps/control-plane/src/supervisor/run-coordinator.ts +143 -6
  73. package/apps/control-plane/src/supervisor/runtime.ts +135 -6
  74. package/apps/control-plane/src/supervisor/types.ts +12 -21
  75. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +8 -0
  76. package/apps/control-plane/test/activity-monitor.spec.ts +294 -0
  77. package/apps/control-plane/test/adapter-registry.spec.ts +132 -0
  78. package/apps/control-plane/test/batch-operations.spec.ts +112 -0
  79. package/apps/control-plane/test/bootstrap-attach.spec.ts +102 -0
  80. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +252 -0
  81. package/apps/control-plane/test/bootstrap.spec.ts +560 -0
  82. package/apps/control-plane/test/cleanup-command.spec.ts +301 -0
  83. package/apps/control-plane/test/cli-helpers.spec.ts +404 -1
  84. package/apps/control-plane/test/cli.unit.spec.ts +182 -1
  85. package/apps/control-plane/test/collision-queue.spec.ts +104 -1
  86. package/apps/control-plane/test/core-utils.spec.ts +175 -2
  87. package/apps/control-plane/test/cost-tracking.spec.ts +143 -0
  88. package/apps/control-plane/test/dashboard-api.integration.spec.ts +247 -0
  89. package/apps/control-plane/test/dashboard-client.spec.ts +116 -0
  90. package/apps/control-plane/test/dashboard-command.spec.ts +103 -0
  91. package/apps/control-plane/test/dependency-scheduler.spec.ts +189 -0
  92. package/apps/control-plane/test/epoch-tracking.spec.ts +4 -4
  93. package/apps/control-plane/test/feature-deletion-service.spec.ts +422 -0
  94. package/apps/control-plane/test/feature-lifecycle.spec.ts +202 -0
  95. package/apps/control-plane/test/git-spawn-error.spec.ts +24 -0
  96. package/apps/control-plane/test/incremental-gates.spec.ts +137 -0
  97. package/apps/control-plane/test/init-wizard.spec.ts +506 -0
  98. package/apps/control-plane/test/instance-isolation.spec.ts +83 -0
  99. package/apps/control-plane/test/issue-tracker.spec.ts +890 -0
  100. package/apps/control-plane/test/kernel.coverage.spec.ts +3 -5
  101. package/apps/control-plane/test/kernel.coverage2.spec.ts +871 -0
  102. package/apps/control-plane/test/kernel.spec.ts +13 -11
  103. package/apps/control-plane/test/lock-service.spec.ts +508 -0
  104. package/apps/control-plane/test/mcp-helpers.spec.ts +176 -0
  105. package/apps/control-plane/test/mcp.spec.ts +50 -15
  106. package/apps/control-plane/test/merge-service.spec.ts +67 -4
  107. package/apps/control-plane/test/multi-project.spec.ts +372 -0
  108. package/apps/control-plane/test/notifier-service.spec.ts +388 -0
  109. package/apps/control-plane/test/parallel-gates.spec.ts +312 -0
  110. package/apps/control-plane/test/patch-service.spec.ts +253 -0
  111. package/apps/control-plane/test/performance-analytics.spec.ts +338 -0
  112. package/apps/control-plane/test/planning-wave-executor.spec.ts +168 -0
  113. package/apps/control-plane/test/pr-monitor.spec.ts +385 -0
  114. package/apps/control-plane/test/providers.spec.ts +344 -1
  115. package/apps/control-plane/test/reactions.spec.ts +392 -0
  116. package/apps/control-plane/test/resume-command.spec.ts +390 -0
  117. package/apps/control-plane/test/run-coordinator.spec.ts +481 -2
  118. package/apps/control-plane/test/schema-date-time.spec.ts +46 -0
  119. package/apps/control-plane/test/service-retry-paths.spec.ts +30 -0
  120. package/apps/control-plane/test/services.spec.ts +95 -2
  121. package/apps/control-plane/test/session-management.spec.ts +450 -0
  122. package/apps/control-plane/test/spec-ingestion.spec.ts +190 -0
  123. package/apps/control-plane/test/supervisor-collaborators.spec.ts +699 -2
  124. package/apps/control-plane/test/supervisor.spec.ts +36 -30
  125. package/apps/control-plane/test/supervisor.unit.spec.ts +405 -0
  126. package/apps/control-plane/test/worker-decision-loop.spec.ts +57 -0
  127. package/apps/control-plane/test/workspace-hooks.spec.ts +177 -0
  128. package/apps/control-plane/vitest.config.ts +21 -5
  129. package/dist/apps/control-plane/application/adapters/adapter-registry.d.ts +44 -0
  130. package/dist/apps/control-plane/application/adapters/adapter-registry.js +76 -0
  131. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -0
  132. package/dist/apps/control-plane/application/multi-project-loader.d.ts +31 -0
  133. package/dist/apps/control-plane/application/multi-project-loader.js +82 -0
  134. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -0
  135. package/dist/apps/control-plane/application/services/activity-monitor-service.d.ts +43 -0
  136. package/dist/apps/control-plane/application/services/activity-monitor-service.js +132 -0
  137. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -0
  138. package/dist/apps/control-plane/application/services/cost-tracking-service.d.ts +28 -0
  139. package/dist/apps/control-plane/application/services/cost-tracking-service.js +48 -0
  140. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -0
  141. package/dist/apps/control-plane/application/services/dependency-scheduler-service.d.ts +26 -0
  142. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js +75 -0
  143. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -0
  144. package/dist/apps/control-plane/application/services/feature-deletion-service.d.ts +2 -0
  145. package/dist/apps/control-plane/application/services/feature-deletion-service.js +6 -7
  146. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  147. package/dist/apps/control-plane/application/services/gate-interpolation-service.d.ts +7 -0
  148. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +7 -0
  149. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -0
  150. package/dist/apps/control-plane/application/services/gate-service.js +32 -2
  151. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  152. package/dist/apps/control-plane/application/services/instance-isolation-service.d.ts +11 -0
  153. package/dist/apps/control-plane/application/services/instance-isolation-service.js +17 -0
  154. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -0
  155. package/dist/apps/control-plane/application/services/issue-tracker-service.d.ts +65 -0
  156. package/dist/apps/control-plane/application/services/issue-tracker-service.js +358 -0
  157. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -0
  158. package/dist/apps/control-plane/application/services/merge-service.d.ts +4 -0
  159. package/dist/apps/control-plane/application/services/merge-service.js +44 -2
  160. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  161. package/dist/apps/control-plane/application/services/notifier-service.d.ts +74 -0
  162. package/dist/apps/control-plane/application/services/notifier-service.js +212 -0
  163. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -0
  164. package/dist/apps/control-plane/application/services/performance-analytics-service.d.ts +39 -0
  165. package/dist/apps/control-plane/application/services/performance-analytics-service.js +75 -0
  166. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -0
  167. package/dist/apps/control-plane/application/services/plan-service.d.ts +1 -0
  168. package/dist/apps/control-plane/application/services/plan-service.js +53 -0
  169. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  170. package/dist/apps/control-plane/application/services/pr-monitor-service.d.ts +44 -0
  171. package/dist/apps/control-plane/application/services/pr-monitor-service.js +192 -0
  172. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -0
  173. package/dist/apps/control-plane/application/services/reactions-service.d.ts +67 -0
  174. package/dist/apps/control-plane/application/services/reactions-service.js +114 -0
  175. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -0
  176. package/dist/apps/control-plane/application/services/reporting-service.d.ts +1 -0
  177. package/dist/apps/control-plane/application/services/reporting-service.js +13 -2
  178. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  179. package/dist/apps/control-plane/application/services/run-lease-service.d.ts +2 -0
  180. package/dist/apps/control-plane/application/services/run-lease-service.js +14 -38
  181. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  182. package/dist/apps/control-plane/application/tools/tool-metadata.js +3 -1
  183. package/dist/apps/control-plane/application/tools/tool-metadata.js.map +1 -1
  184. package/dist/apps/control-plane/cli/aop.d.ts +1 -1
  185. package/dist/apps/control-plane/cli/aop.js +1 -1
  186. package/dist/apps/control-plane/cli/attach-command-handler.d.ts +12 -0
  187. package/dist/apps/control-plane/cli/attach-command-handler.js +98 -0
  188. package/dist/apps/control-plane/cli/attach-command-handler.js.map +1 -0
  189. package/dist/apps/control-plane/cli/cleanup-command-handler.d.ts +12 -0
  190. package/dist/apps/control-plane/cli/cleanup-command-handler.js +162 -0
  191. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -0
  192. package/dist/apps/control-plane/cli/cli-argument-parser.js +73 -3
  193. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  194. package/dist/apps/control-plane/cli/dashboard-command-handler.d.ts +7 -0
  195. package/dist/apps/control-plane/cli/dashboard-command-handler.js +45 -0
  196. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -0
  197. package/dist/apps/control-plane/cli/help-command-handler.d.ts +8 -0
  198. package/dist/apps/control-plane/cli/help-command-handler.js +146 -0
  199. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -0
  200. package/dist/apps/control-plane/cli/init-command-handler.d.ts +26 -0
  201. package/dist/apps/control-plane/cli/init-command-handler.js +517 -0
  202. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -0
  203. package/dist/apps/control-plane/cli/resume-command-handler.js +1 -1
  204. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  205. package/dist/apps/control-plane/cli/retry-command-handler.d.ts +8 -0
  206. package/dist/apps/control-plane/cli/retry-command-handler.js +111 -0
  207. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -0
  208. package/dist/apps/control-plane/cli/run-command-handler.d.ts +5 -0
  209. package/dist/apps/control-plane/cli/run-command-handler.js +82 -3
  210. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  211. package/dist/apps/control-plane/cli/send-command-handler.d.ts +8 -0
  212. package/dist/apps/control-plane/cli/send-command-handler.js +55 -0
  213. package/dist/apps/control-plane/cli/send-command-handler.js.map +1 -0
  214. package/dist/apps/control-plane/cli/status-command-handler.d.ts +12 -1
  215. package/dist/apps/control-plane/cli/status-command-handler.js +55 -2
  216. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  217. package/dist/apps/control-plane/cli/types.d.ts +26 -1
  218. package/dist/apps/control-plane/cli/types.js +15 -1
  219. package/dist/apps/control-plane/cli/types.js.map +1 -1
  220. package/dist/apps/control-plane/core/constants.d.ts +6 -0
  221. package/dist/apps/control-plane/core/constants.js +8 -2
  222. package/dist/apps/control-plane/core/constants.js.map +1 -1
  223. package/dist/apps/control-plane/core/error-codes.d.ts +2 -0
  224. package/dist/apps/control-plane/core/error-codes.js +3 -1
  225. package/dist/apps/control-plane/core/error-codes.js.map +1 -1
  226. package/dist/apps/control-plane/core/gates.d.ts +4 -0
  227. package/dist/apps/control-plane/core/gates.js +140 -43
  228. package/dist/apps/control-plane/core/gates.js.map +1 -1
  229. package/dist/apps/control-plane/core/kernel.d.ts +50 -1
  230. package/dist/apps/control-plane/core/kernel.js +220 -7
  231. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  232. package/dist/apps/control-plane/core/path-layout.d.ts +3 -0
  233. package/dist/apps/control-plane/core/path-layout.js +9 -0
  234. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  235. package/dist/apps/control-plane/core/tool-caller.d.ts +32 -0
  236. package/dist/apps/control-plane/core/tool-caller.js +2 -0
  237. package/dist/apps/control-plane/core/tool-caller.js.map +1 -0
  238. package/dist/apps/control-plane/core/workspace-hooks.d.ts +20 -0
  239. package/dist/apps/control-plane/core/workspace-hooks.js +69 -0
  240. package/dist/apps/control-plane/core/workspace-hooks.js.map +1 -0
  241. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +245 -9
  242. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  243. package/dist/apps/control-plane/providers/providers.d.ts +42 -3
  244. package/dist/apps/control-plane/providers/providers.js +216 -5
  245. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  246. package/dist/apps/control-plane/supervisor/build-wave-executor.d.ts +3 -0
  247. package/dist/apps/control-plane/supervisor/build-wave-executor.js +115 -6
  248. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  249. package/dist/apps/control-plane/supervisor/qa-wave-executor.d.ts +3 -0
  250. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +109 -5
  251. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  252. package/dist/apps/control-plane/supervisor/run-coordinator.d.ts +15 -0
  253. package/dist/apps/control-plane/supervisor/run-coordinator.js +132 -6
  254. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  255. package/dist/apps/control-plane/supervisor/runtime.d.ts +3 -0
  256. package/dist/apps/control-plane/supervisor/runtime.js +110 -6
  257. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  258. package/dist/apps/control-plane/supervisor/types.d.ts +9 -16
  259. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  260. package/dist/apps/control-plane/supervisor/worker-decision-loop.d.ts +3 -0
  261. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +5 -0
  262. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  263. package/eslint.config.mjs +2 -1
  264. package/package.json +12 -2
  265. package/packages/web-dashboard/next-env.d.ts +5 -0
  266. package/packages/web-dashboard/next.config.js +7 -0
  267. package/packages/web-dashboard/package.json +26 -0
  268. package/packages/web-dashboard/src/app/api/actions/route.ts +64 -0
  269. package/packages/web-dashboard/src/app/api/events/route.ts +51 -0
  270. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +256 -0
  271. package/packages/web-dashboard/src/app/api/features/[id]/diff/route.ts +10 -0
  272. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +25 -0
  273. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +63 -0
  274. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +16 -0
  275. package/packages/web-dashboard/src/app/api/projects/route.ts +31 -0
  276. package/packages/web-dashboard/src/app/api/status/route.ts +15 -0
  277. package/packages/web-dashboard/src/app/globals.css +2 -0
  278. package/packages/web-dashboard/src/app/layout.tsx +15 -0
  279. package/packages/web-dashboard/src/app/page.tsx +393 -0
  280. package/packages/web-dashboard/src/lib/aop-client.ts +244 -0
  281. package/packages/web-dashboard/src/lib/multi-project-config.ts +116 -0
  282. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +284 -0
  283. package/packages/web-dashboard/src/lib/types.ts +58 -0
  284. package/packages/web-dashboard/tsconfig.json +40 -0
  285. package/packages/web-dashboard/vitest.config.ts +6 -0
  286. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +1764 -0
  287. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +348 -0
  288. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +344 -0
  289. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +374 -0
  290. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +1059 -0
  291. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +466 -0
  292. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +198 -0
  293. package/spec-files/outstanding/agentic_orchestrator_validator_hardening_spec.md +365 -0
  294. package/spec-files/progress.md +481 -52
  295. /package/spec-files/{agentic_orchestrator_cli_delete_command_spec.md → completed/agentic_orchestrator_cli_delete_command_spec.md} +0 -0
  296. /package/spec-files/{agentic_orchestrator_dot_aop_generated_artifacts_spec.md → completed/agentic_orchestrator_dot_aop_generated_artifacts_spec.md} +0 -0
  297. /package/spec-files/{agentic_orchestrator_mcp_formalization_spec.md → completed/agentic_orchestrator_mcp_formalization_spec.md} +0 -0
  298. /package/spec-files/{agentic_orchestrator_oop_refactor_spec.md → completed/agentic_orchestrator_oop_refactor_spec.md} +0 -0
  299. /package/spec-files/{agentic_orchestrator_single_global_orchestrator_spec.md → completed/agentic_orchestrator_single_global_orchestrator_spec.md} +0 -0
  300. /package/spec-files/{agentic_orchestrator_spec.md → completed/agentic_orchestrator_spec.md} +0 -0
@@ -0,0 +1,358 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execFileAsync = promisify(execFile);
4
+ export function createGhRunner(fn) {
5
+ if (fn !== undefined) {
6
+ return fn;
7
+ }
8
+ return async (args) => {
9
+ try {
10
+ const { stdout } = await execFileAsync('gh', args, { timeout: 15_000 });
11
+ return { stdout, exitCode: 0 };
12
+ }
13
+ catch (err) {
14
+ const e = err;
15
+ if (e['code'] === 'ENOENT' || e['code'] === 127) {
16
+ return { stdout: '', exitCode: 127 };
17
+ }
18
+ const exitCode = typeof e['code'] === 'number' ? e['code'] : 1;
19
+ return { stdout: '', exitCode };
20
+ }
21
+ };
22
+ }
23
+ export function createHttpRunner(fn) {
24
+ if (fn !== undefined) {
25
+ return fn;
26
+ }
27
+ return async (url, init) => {
28
+ try {
29
+ const response = await fetch(url, init);
30
+ return {
31
+ status: response.status,
32
+ ok: response.ok,
33
+ body: await response.text()
34
+ };
35
+ }
36
+ catch {
37
+ return { status: 0, ok: false, body: '' };
38
+ }
39
+ };
40
+ }
41
+ function tryParseJson(value) {
42
+ if (!value) {
43
+ return null;
44
+ }
45
+ try {
46
+ const parsed = JSON.parse(value);
47
+ if (parsed && typeof parsed === 'object') {
48
+ return parsed;
49
+ }
50
+ return null;
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ export class GitHubIssueTracker {
57
+ repo;
58
+ ghRunner;
59
+ constructor(config = {}, ghRunner) {
60
+ this.repo = config['repo'];
61
+ this.ghRunner = ghRunner ?? createGhRunner();
62
+ }
63
+ async getIssue(issueId) {
64
+ const repoArgs = this.repo ? ['--repo', this.repo] : [];
65
+ const result = await this.ghRunner([
66
+ 'issue', 'view', issueId,
67
+ ...repoArgs,
68
+ '--json', 'number,title,body,state,url'
69
+ ]);
70
+ if (result.exitCode !== 0 || !result.stdout) {
71
+ return { id: issueId, title: '', body: '', status: 'unknown', url: '' };
72
+ }
73
+ const parsed = JSON.parse(result.stdout);
74
+ return {
75
+ id: String(parsed.number),
76
+ title: parsed.title,
77
+ body: parsed.body,
78
+ status: parsed.state.toLowerCase(),
79
+ url: parsed.url
80
+ };
81
+ }
82
+ async updateIssueStatus(issueId, status) {
83
+ const repoArgs = this.repo ? ['--repo', this.repo] : [];
84
+ const stateArg = status === 'closed' || status === 'merged' ? 'closed' : 'open';
85
+ await this.ghRunner(['issue', 'edit', issueId, ...repoArgs, '--state', stateArg]);
86
+ }
87
+ async addComment(issueId, comment) {
88
+ const repoArgs = this.repo ? ['--repo', this.repo] : [];
89
+ await this.ghRunner(['issue', 'comment', issueId, ...repoArgs, '--body', comment]);
90
+ }
91
+ }
92
+ function readString(value) {
93
+ return typeof value === 'string' ? value : '';
94
+ }
95
+ function lowerCaseStatus(value) {
96
+ return value ? value.toLowerCase() : 'unknown';
97
+ }
98
+ function normalizeAopStatus(status) {
99
+ return status.trim().toLowerCase().replace(/[^a-z0-9]+/g, '_');
100
+ }
101
+ function mapDefaultLinearStatus(status) {
102
+ const normalized = normalizeAopStatus(status);
103
+ if (normalized === 'merged' || normalized === 'closed') {
104
+ return 'done';
105
+ }
106
+ if (normalized === 'blocked' || normalized === 'failed') {
107
+ return 'blocked';
108
+ }
109
+ if (normalized === 'planning') {
110
+ return 'backlog';
111
+ }
112
+ if (normalized === 'qa' || normalized === 'ready_to_merge') {
113
+ return 'in_review';
114
+ }
115
+ if (normalized === 'building') {
116
+ return 'in_progress';
117
+ }
118
+ return 'in_progress';
119
+ }
120
+ function mapDefaultJiraTransition(status) {
121
+ const normalized = normalizeAopStatus(status);
122
+ if (normalized === 'merged' || normalized === 'closed') {
123
+ return 'done';
124
+ }
125
+ if (normalized === 'planning') {
126
+ return 'to do';
127
+ }
128
+ if (normalized === 'blocked' || normalized === 'failed') {
129
+ return 'blocked';
130
+ }
131
+ return 'in progress';
132
+ }
133
+ // --- Linear adapter (GraphQL HTTP) ---
134
+ export class LinearIssueTracker {
135
+ token;
136
+ baseUrl;
137
+ config;
138
+ httpRunner;
139
+ constructor(config = {}, httpRunner) {
140
+ this.token = config['token'] ?? '';
141
+ this.baseUrl = config['base_url'] ?? 'https://api.linear.app/graphql';
142
+ this.config = config;
143
+ this.httpRunner = createHttpRunner(httpRunner);
144
+ }
145
+ async graphQl(query, variables) {
146
+ const headers = {
147
+ 'Content-Type': 'application/json'
148
+ };
149
+ if (this.token) {
150
+ headers['Authorization'] = `Bearer ${this.token}`;
151
+ }
152
+ const result = await this.httpRunner(this.baseUrl, {
153
+ method: 'POST',
154
+ headers,
155
+ body: JSON.stringify({ query, variables })
156
+ });
157
+ if (!result.ok || !result.body) {
158
+ return null;
159
+ }
160
+ const parsed = tryParseJson(result.body);
161
+ if (!parsed) {
162
+ return null;
163
+ }
164
+ if (Array.isArray(parsed['errors']) && parsed['errors'].length > 0) {
165
+ return null;
166
+ }
167
+ const data = parsed['data'];
168
+ if (data && typeof data === 'object') {
169
+ return data;
170
+ }
171
+ return null;
172
+ }
173
+ static parseIssueNode(value) {
174
+ if (!value || typeof value !== 'object') {
175
+ return null;
176
+ }
177
+ const raw = value;
178
+ const stateRaw = raw['state'];
179
+ return {
180
+ id: readString(raw['id']),
181
+ identifier: readString(raw['identifier']),
182
+ title: readString(raw['title']),
183
+ description: readString(raw['description']),
184
+ url: readString(raw['url']),
185
+ state: stateRaw && typeof stateRaw === 'object'
186
+ ? {
187
+ name: readString(stateRaw['name'])
188
+ }
189
+ : null
190
+ };
191
+ }
192
+ async resolveIssueNode(issueId) {
193
+ const byIdentifier = await this.graphQl('query AopIssueByIdentifier($identifier: String!) { issueByIdentifier(identifier: $identifier) { id identifier title description url state { name } } }', { identifier: issueId });
194
+ const identifierIssue = LinearIssueTracker.parseIssueNode(byIdentifier?.issueByIdentifier);
195
+ if (identifierIssue) {
196
+ return identifierIssue;
197
+ }
198
+ const byId = await this.graphQl('query AopIssueById($id: String!) { issue(id: $id) { id identifier title description url state { name } } }', { id: issueId });
199
+ return LinearIssueTracker.parseIssueNode(byId?.issue);
200
+ }
201
+ resolveStateId(status) {
202
+ const normalized = normalizeAopStatus(status);
203
+ const explicit = this.config[`state_id_${normalized}`];
204
+ if (explicit && explicit.length > 0) {
205
+ return explicit;
206
+ }
207
+ const defaultKey = mapDefaultLinearStatus(status);
208
+ if (!defaultKey) {
209
+ return null;
210
+ }
211
+ const defaultMapped = this.config[`state_id_${defaultKey}`];
212
+ return defaultMapped && defaultMapped.length > 0 ? defaultMapped : null;
213
+ }
214
+ async getIssue(issueId) {
215
+ const issue = await this.resolveIssueNode(issueId).catch(() => null);
216
+ if (!issue) {
217
+ return { id: issueId, title: '', body: '', status: 'unknown', url: '' };
218
+ }
219
+ return {
220
+ id: issue.identifier || issue.id || issueId,
221
+ title: issue.title,
222
+ body: issue.description,
223
+ status: lowerCaseStatus(issue.state?.name ?? ''),
224
+ url: issue.url
225
+ };
226
+ }
227
+ async updateIssueStatus(issueId, status) {
228
+ const issue = await this.resolveIssueNode(issueId).catch(() => null);
229
+ if (!issue?.id) {
230
+ return;
231
+ }
232
+ const stateId = this.resolveStateId(status);
233
+ if (!stateId) {
234
+ return;
235
+ }
236
+ await this.graphQl('mutation AopIssueUpdate($id: String!, $stateId: String!) { issueUpdate(id: $id, input: { stateId: $stateId }) { success } }', { id: issue.id, stateId });
237
+ }
238
+ async addComment(issueId, comment) {
239
+ const issue = await this.resolveIssueNode(issueId).catch(() => null);
240
+ if (!issue?.id) {
241
+ return;
242
+ }
243
+ await this.graphQl('mutation AopCommentCreate($issueId: String!, $body: String!) { commentCreate(input: { issueId: $issueId, body: $body }) { success } }', { issueId: issue.id, body: comment });
244
+ }
245
+ }
246
+ function toJiraDescription(value) {
247
+ if (typeof value === 'string') {
248
+ return value;
249
+ }
250
+ if (!value || typeof value !== 'object') {
251
+ return '';
252
+ }
253
+ return JSON.stringify(value);
254
+ }
255
+ // --- Jira adapter (REST HTTP) ---
256
+ export class JiraIssueTracker {
257
+ baseUrl;
258
+ token;
259
+ email;
260
+ config;
261
+ httpRunner;
262
+ constructor(config = {}, httpRunner) {
263
+ this.baseUrl = (config['base_url'] ?? config['url'] ?? '').replace(/\/+$/, '');
264
+ this.token = config['token'] ?? '';
265
+ this.email = config['email'] ?? config['user'] ?? '';
266
+ this.config = config;
267
+ this.httpRunner = createHttpRunner(httpRunner);
268
+ }
269
+ authHeader() {
270
+ if (this.email && this.token) {
271
+ return `Basic ${Buffer.from(`${this.email}:${this.token}`, 'utf8').toString('base64')}`;
272
+ }
273
+ if (this.token) {
274
+ return `Bearer ${this.token}`;
275
+ }
276
+ return null;
277
+ }
278
+ async requestJson(endpoint, method, body) {
279
+ if (!this.baseUrl) {
280
+ return null;
281
+ }
282
+ const headers = {
283
+ Accept: 'application/json'
284
+ };
285
+ const authHeader = this.authHeader();
286
+ if (authHeader) {
287
+ headers['Authorization'] = authHeader;
288
+ }
289
+ if (body !== undefined) {
290
+ headers['Content-Type'] = 'application/json';
291
+ }
292
+ const result = await this.httpRunner(`${this.baseUrl}${endpoint}`, {
293
+ method,
294
+ headers,
295
+ body: body === undefined ? undefined : JSON.stringify(body)
296
+ });
297
+ if (!result.ok || !result.body) {
298
+ return null;
299
+ }
300
+ const parsed = tryParseJson(result.body);
301
+ return parsed;
302
+ }
303
+ resolveTransitionName(status) {
304
+ const normalized = normalizeAopStatus(status);
305
+ const explicit = this.config[`transition_${normalized}`];
306
+ if (explicit && explicit.length > 0) {
307
+ return explicit.toLowerCase();
308
+ }
309
+ return mapDefaultJiraTransition(status);
310
+ }
311
+ async getIssue(issueId) {
312
+ const payload = await this.requestJson(`/rest/api/2/issue/${encodeURIComponent(issueId)}?fields=summary,description,status`, 'GET');
313
+ if (!payload) {
314
+ return { id: issueId, title: '', body: '', status: 'unknown', url: '' };
315
+ }
316
+ const fields = payload.fields ?? {};
317
+ return {
318
+ id: readString(payload.key) || issueId,
319
+ title: readString(fields.summary),
320
+ body: toJiraDescription(fields.description),
321
+ status: lowerCaseStatus(readString(fields.status?.name)),
322
+ url: this.baseUrl ? `${this.baseUrl}/browse/${issueId}` : ''
323
+ };
324
+ }
325
+ async updateIssueStatus(issueId, status) {
326
+ const transitionsPayload = await this.requestJson(`/rest/api/2/issue/${encodeURIComponent(issueId)}/transitions`, 'GET');
327
+ const transitions = transitionsPayload?.transitions ?? [];
328
+ const targetName = this.resolveTransitionName(status);
329
+ const transition = transitions.find((item) => typeof item.name === 'string' && item.name.toLowerCase() === targetName);
330
+ if (!transition?.id) {
331
+ return;
332
+ }
333
+ await this.requestJson(`/rest/api/2/issue/${encodeURIComponent(issueId)}/transitions`, 'POST', { transition: { id: transition.id } });
334
+ }
335
+ async addComment(issueId, comment) {
336
+ await this.requestJson(`/rest/api/2/issue/${encodeURIComponent(issueId)}/comment`, 'POST', { body: comment });
337
+ }
338
+ }
339
+ // --- Factory ---
340
+ export function createIssueTracker(config, ghRunner, httpRunner) {
341
+ if (!config) {
342
+ return undefined;
343
+ }
344
+ if (config.enabled === false) {
345
+ return undefined;
346
+ }
347
+ switch (config.type) {
348
+ case 'github':
349
+ return new GitHubIssueTracker(config.config ?? {}, ghRunner);
350
+ case 'linear':
351
+ return new LinearIssueTracker(config.config ?? {}, httpRunner);
352
+ case 'jira':
353
+ return new JiraIssueTracker(config.config ?? {}, httpRunner);
354
+ default:
355
+ return undefined;
356
+ }
357
+ }
358
+ //# sourceMappingURL=issue-tracker-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-tracker-service.js","sourceRoot":"","sources":["../../../../../apps/control-plane/src/application/services/issue-tracker-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AA2B1C,MAAM,UAAU,cAAc,CAAC,EAAa;IAC1C,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,EAAE,IAAc,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACxE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA8B,CAAC;YACzC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChD,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACvC,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAe;IAC9C,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,EAAE,GAAW,EAAE,IAAiB,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;aAC5B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;QAC5C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,MAAiC,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,OAAO,kBAAkB;IACZ,IAAI,CAAqB;IACzB,QAAQ,CAAW;IAEpC,YAAY,SAAiC,EAAE,EAAE,QAAmB;QAClE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,cAAc,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC;YACjC,OAAO,EAAE,MAAM,EAAE,OAAO;YACxB,GAAG,QAAQ;YACX,QAAQ,EAAE,6BAA6B;SACxC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5C,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAC1E,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAMtC,CAAC;QACF,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;YAClC,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,MAAc;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QAChF,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,OAAe;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IACrF,CAAC;CACF;AAaD,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAc;IAC5C,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QAC3D,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAc;IAC9C,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,wCAAwC;AACxC,MAAM,OAAO,kBAAkB;IACZ,KAAK,CAAS;IACd,OAAO,CAAS;IAChB,MAAM,CAAyB;IAC/B,UAAU,CAAa;IAExC,YAAY,SAAiC,EAAE,EAAE,UAAuB;QACtE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,gCAAgC,CAAC;QACtE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,OAAO,CAAQ,KAAa,EAAE,SAAkC;QAC5E,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,IAAa,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,KAAc;QAC1C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO;YACL,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACzC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC/B,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3C,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,KAAK,EACH,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBACtC,CAAC,CAAC;oBACE,IAAI,EAAE,UAAU,CAAE,QAAoC,CAAC,MAAM,CAAC,CAAC;iBAChE;gBACH,CAAC,CAAC,IAAI;SACX,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAAe;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CACrC,wJAAwJ,EACxJ,EAAE,UAAU,EAAE,OAAO,EAAE,CACxB,CAAC;QACF,MAAM,eAAe,GAAG,kBAAkB,CAAC,cAAc,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC3F,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAC7B,4GAA4G,EAC5G,EAAE,EAAE,EAAE,OAAO,EAAE,CAChB,CAAC;QACF,OAAO,kBAAkB,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAEO,cAAc,CAAC,MAAc;QACnC,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;QACvD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;QAC5D,OAAO,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE,IAAI,OAAO;YAC3C,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;YAChD,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,MAAc;QACrD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAChB,6HAA6H,EAC7H,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAC1B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,OAAe;QAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAChB,uIAAuI,EACvI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CACrC,CAAC;IACJ,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,mCAAmC;AACnC,MAAM,OAAO,gBAAgB;IACV,OAAO,CAAS;IAChB,KAAK,CAAS;IACd,KAAK,CAAS;IACd,MAAM,CAAyB;IAC/B,UAAU,CAAa;IAExC,YAAY,SAAiC,EAAE,EAAE,UAAuB;QACtE,IAAI,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,OAAO,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,QAAgB,EAChB,MAAsB,EACtB,IAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;SAC3B,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;QACxC,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;YACjE,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC5D,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,MAAkB,CAAC;IAC5B,CAAC;IAEO,qBAAqB,CAAC,MAAc;QAC1C,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;QACzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CASnC,qBAAqB,kBAAkB,CAAC,OAAO,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAC1E,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACpC,OAAO;YACL,EAAE,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO;YACtC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;YACjC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC;YAC3C,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxD,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;SAC7D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,MAAc;QACrD,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,WAAW,CAC/C,qBAAqB,kBAAkB,CAAC,OAAO,CAAC,cAAc,EAC9D,KAAK,CACN,CAAC;QACF,MAAM,WAAW,GAAG,kBAAkB,EAAE,WAAW,IAAI,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CACjC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,CAClF,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,WAAW,CACpB,qBAAqB,kBAAkB,CAAC,OAAO,CAAC,cAAc,EAC9D,MAAM,EACN,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,CACtC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,OAAe;QAC/C,MAAM,IAAI,CAAC,WAAW,CACpB,qBAAqB,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAC1D,MAAM,EACN,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACJ,CAAC;CACF;AAED,kBAAkB;AAClB,MAAM,UAAU,kBAAkB,CAChC,MAAsC,EACtC,QAAmB,EACnB,UAAuB;IAEvB,IAAI,CAAC,MAAM,EAAE,CAAC;QAAA,OAAO,SAAS,CAAC;IAAA,CAAC;IAChC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAAA,OAAO,SAAS,CAAC;IAAA,CAAC;IACjD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC/D,KAAK,QAAQ;YACX,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QACjE,KAAK,MAAM;YACT,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/D;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -21,12 +21,16 @@ export interface MergeServicePort {
21
21
  export declare class MergeService {
22
22
  private readonly port;
23
23
  constructor(port: MergeServicePort);
24
+ private cleanupMergedFeatureArtifacts;
25
+ private scheduleFeatureCleanup;
24
26
  featureReadyToMerge(featureId: string, commitMessage: string, mergeStrategy: string, userApprovalToken: string | null): Promise<{
25
27
  data: {
26
28
  feature_id: string;
27
29
  merge_sha: string;
28
30
  merge_strategy: string;
29
31
  status: string;
32
+ retained_for_cleanup?: boolean;
33
+ cleanup_grace_period_seconds?: number;
30
34
  };
31
35
  }>;
32
36
  }
@@ -4,6 +4,7 @@ import { runGit } from '../../core/git.js';
4
4
  import { ERROR_CODES } from '../../core/error-codes.js';
5
5
  import { fail } from '../../core/response.js';
6
6
  import { GATE_RESULT, STATUS } from '../../core/constants.js';
7
+ import { resolveDepBlocked } from './dependency-scheduler-service.js';
7
8
  function normalizeSet(array) {
8
9
  return [...new Set(array)].sort((a, b) => a.localeCompare(b));
9
10
  }
@@ -23,6 +24,32 @@ export class MergeService {
23
24
  constructor(port) {
24
25
  this.port = port;
25
26
  }
27
+ async cleanupMergedFeatureArtifacts(featureId) {
28
+ const repoRoot = this.port.getRepoRoot();
29
+ const worktreePath = this.port.worktreePath(featureId);
30
+ const removeWorktreeResult = await runGit(repoRoot, ['worktree', 'remove', '--force', worktreePath]);
31
+ if (removeWorktreeResult.code !== 0) {
32
+ // Best-effort cleanup; merged state must remain intact even if git cleanup fails.
33
+ console.warn(`[aop] auto-cleanup worktree removal failed for ${featureId}: ${removeWorktreeResult.stderr.trim() || `exit ${removeWorktreeResult.code}`}`);
34
+ }
35
+ const removeBranchResult = await runGit(repoRoot, ['branch', '-D', featureId]);
36
+ if (removeBranchResult.code !== 0) {
37
+ // Best-effort cleanup; branch may already be removed.
38
+ console.warn(`[aop] auto-cleanup branch removal failed for ${featureId}: ${removeBranchResult.stderr.trim() || `exit ${removeBranchResult.code}`}`);
39
+ }
40
+ await fs.rm(this.port.featurePath(featureId), { recursive: true, force: true });
41
+ }
42
+ scheduleFeatureCleanup(featureId, gracePeriodSeconds) {
43
+ const delayMs = Math.max(0, Math.floor(gracePeriodSeconds * 1000));
44
+ const timeout = setTimeout(() => {
45
+ void this.cleanupMergedFeatureArtifacts(featureId).catch((error) => {
46
+ console.warn(`[aop] auto-cleanup failed for ${featureId}: ${error instanceof Error ? error.message : String(error)}`);
47
+ });
48
+ }, delayMs);
49
+ if (typeof timeout.unref === 'function') {
50
+ timeout.unref();
51
+ }
52
+ }
26
53
  async featureReadyToMerge(featureId, commitMessage, mergeStrategy, userApprovalToken) {
27
54
  const policy = this.port.getPolicySnapshot();
28
55
  const state = await this.port.readState(featureId);
@@ -176,17 +203,32 @@ export class MergeService {
176
203
  }
177
204
  runtimeSessions.feature_sessions = featureSessions;
178
205
  index.runtime_sessions = runtimeSessions;
206
+ // N4: Promote features that were blocked waiting for this feature to merge
207
+ resolveDepBlocked(index, featureId);
179
208
  index.version += 1;
180
209
  index.updated_at = nowIso();
181
210
  await this.port.writeIndex(index);
182
211
  });
183
- await fs.rm(this.port.featurePath(featureId), { recursive: true, force: true });
212
+ const cleanupPolicy = asRecord(policy.cleanup);
213
+ const autoAfterMerge = cleanupPolicy.auto_after_merge === true;
214
+ const gracePeriodSeconds = typeof cleanupPolicy.grace_period_seconds === 'number' && Number.isFinite(cleanupPolicy.grace_period_seconds)
215
+ ? cleanupPolicy.grace_period_seconds
216
+ : 3600;
217
+ const shouldCleanupNow = autoAfterMerge && gracePeriodSeconds <= 0;
218
+ if (shouldCleanupNow) {
219
+ await this.cleanupMergedFeatureArtifacts(featureId);
220
+ }
221
+ else if (autoAfterMerge) {
222
+ this.scheduleFeatureCleanup(featureId, gracePeriodSeconds);
223
+ }
184
224
  return {
185
225
  data: {
186
226
  feature_id: featureId,
187
227
  merge_sha: mergeSha,
188
228
  merge_strategy: mergeStrategy,
189
- status: STATUS.MERGED
229
+ status: STATUS.MERGED,
230
+ retained_for_cleanup: !shouldCleanupNow,
231
+ cleanup_grace_period_seconds: gracePeriodSeconds
190
232
  }
191
233
  };
192
234
  }
@@ -1 +1 @@
1
- {"version":3,"file":"merge-service.js","sourceRoot":"","sources":["../../../../../apps/control-plane/src/application/services/merge-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"merge-service.js","sourceRoot":"","sources":["../../../../../apps/control-plane/src/application/services/merge-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ export type NotificationPriority = 'critical' | 'warning' | 'info';
2
+ export type NotificationEvent = 'gate_failed' | 'collision_detected' | 'feature_blocked' | 'ready_to_merge' | 'feature_merged' | 'stale_lease' | 'agent_stuck' | 'changes_requested' | 'budget_exceeded' | 'budget_alert';
3
+ export interface NotificationPayload {
4
+ event: NotificationEvent;
5
+ priority: NotificationPriority;
6
+ feature_id?: string;
7
+ message: string;
8
+ details?: Record<string, unknown>;
9
+ timestamp: string;
10
+ }
11
+ export interface NotifierChannel {
12
+ name: string;
13
+ send(payload: NotificationPayload): Promise<void>;
14
+ }
15
+ export interface NotificationChannelConfig {
16
+ desktop?: {
17
+ enabled?: boolean;
18
+ };
19
+ slack?: {
20
+ enabled?: boolean;
21
+ webhook?: string;
22
+ channel?: string;
23
+ };
24
+ webhook?: {
25
+ enabled?: boolean;
26
+ url?: string;
27
+ };
28
+ }
29
+ export interface NotificationRoutingConfig {
30
+ critical?: string[];
31
+ warning?: string[];
32
+ info?: string[];
33
+ urgent?: string[];
34
+ action?: string[];
35
+ }
36
+ export interface NotificationConfig {
37
+ enabled: boolean;
38
+ channels?: NotificationChannelConfig;
39
+ routing?: NotificationRoutingConfig;
40
+ }
41
+ export declare class DesktopNotifierChannel implements NotifierChannel {
42
+ readonly name = "desktop";
43
+ send(payload: NotificationPayload): Promise<void>;
44
+ }
45
+ export declare class SlackNotifierChannel implements NotifierChannel {
46
+ readonly name = "slack";
47
+ private readonly webhookUrl;
48
+ private readonly channel;
49
+ constructor(webhookUrl: string, channel: string);
50
+ send(payload: NotificationPayload): Promise<void>;
51
+ }
52
+ export declare class WebhookNotifierChannel implements NotifierChannel {
53
+ readonly name = "webhook";
54
+ private readonly url;
55
+ constructor(url: string);
56
+ send(payload: NotificationPayload): Promise<void>;
57
+ }
58
+ export declare class NotifierService {
59
+ private readonly config;
60
+ private readonly channels;
61
+ private readonly routing;
62
+ private readonly throttleCache;
63
+ private readonly dashboardUrl;
64
+ constructor(config: NotificationConfig, dashboardUrl?: string | null);
65
+ private buildRouting;
66
+ private buildChannels;
67
+ private isThrottled;
68
+ notify(event: NotificationEvent, context: {
69
+ feature_id?: string;
70
+ message: string;
71
+ details?: Record<string, unknown>;
72
+ }): Promise<void>;
73
+ }
74
+ export declare function createNotifierService(policySnapshot: Record<string, unknown>, preferredChannel?: string | null): NotifierService;