agent-bober 0.11.6 → 0.15.0

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 (570) hide show
  1. package/CHANGELOG.md +311 -0
  2. package/README.md +124 -9
  3. package/agents/bober-architect.md +38 -0
  4. package/agents/bober-code-reviewer.md +236 -0
  5. package/agents/bober-curator.md +37 -0
  6. package/agents/bober-deployer.md +267 -0
  7. package/agents/bober-diagnoser.md +289 -0
  8. package/agents/bober-evaluator.md +127 -1
  9. package/agents/bober-generator.md +122 -3
  10. package/agents/bober-planner.md +293 -32
  11. package/agents/bober-postmortemer.md +185 -0
  12. package/agents/bober-researcher.md +38 -0
  13. package/dist/cli/commands/approve.d.ts +17 -0
  14. package/dist/cli/commands/approve.d.ts.map +1 -0
  15. package/dist/cli/commands/approve.js +64 -0
  16. package/dist/cli/commands/approve.js.map +1 -0
  17. package/dist/cli/commands/audit-show.d.ts +14 -0
  18. package/dist/cli/commands/audit-show.d.ts.map +1 -0
  19. package/dist/cli/commands/audit-show.js +85 -0
  20. package/dist/cli/commands/audit-show.js.map +1 -0
  21. package/dist/cli/commands/config.d.ts +10 -0
  22. package/dist/cli/commands/config.d.ts.map +1 -0
  23. package/dist/cli/commands/config.js +73 -0
  24. package/dist/cli/commands/config.js.map +1 -0
  25. package/dist/cli/commands/eval.js +6 -6
  26. package/dist/cli/commands/eval.js.map +1 -1
  27. package/dist/cli/commands/graph.d.ts +8 -0
  28. package/dist/cli/commands/graph.d.ts.map +1 -0
  29. package/dist/cli/commands/graph.js +219 -0
  30. package/dist/cli/commands/graph.js.map +1 -0
  31. package/dist/cli/commands/impact.d.ts +19 -0
  32. package/dist/cli/commands/impact.d.ts.map +1 -0
  33. package/dist/cli/commands/impact.js +191 -0
  34. package/dist/cli/commands/impact.js.map +1 -0
  35. package/dist/cli/commands/incident.d.ts +19 -0
  36. package/dist/cli/commands/incident.d.ts.map +1 -0
  37. package/dist/cli/commands/incident.js +324 -0
  38. package/dist/cli/commands/incident.js.map +1 -0
  39. package/dist/cli/commands/init.js +82 -3
  40. package/dist/cli/commands/init.js.map +1 -1
  41. package/dist/cli/commands/list-approvals.d.ts +16 -0
  42. package/dist/cli/commands/list-approvals.d.ts.map +1 -0
  43. package/dist/cli/commands/list-approvals.js +57 -0
  44. package/dist/cli/commands/list-approvals.js.map +1 -0
  45. package/dist/cli/commands/onboard.d.ts +3 -0
  46. package/dist/cli/commands/onboard.d.ts.map +1 -0
  47. package/dist/cli/commands/onboard.js +190 -0
  48. package/dist/cli/commands/onboard.js.map +1 -0
  49. package/dist/cli/commands/plan.d.ts +12 -0
  50. package/dist/cli/commands/plan.d.ts.map +1 -1
  51. package/dist/cli/commands/plan.js +232 -37
  52. package/dist/cli/commands/plan.js.map +1 -1
  53. package/dist/cli/commands/playbook.d.ts +17 -0
  54. package/dist/cli/commands/playbook.d.ts.map +1 -0
  55. package/dist/cli/commands/playbook.js +123 -0
  56. package/dist/cli/commands/playbook.js.map +1 -0
  57. package/dist/cli/commands/postmortem.d.ts +12 -0
  58. package/dist/cli/commands/postmortem.d.ts.map +1 -0
  59. package/dist/cli/commands/postmortem.js +67 -0
  60. package/dist/cli/commands/postmortem.js.map +1 -0
  61. package/dist/cli/commands/reject.d.ts +17 -0
  62. package/dist/cli/commands/reject.d.ts.map +1 -0
  63. package/dist/cli/commands/reject.js +52 -0
  64. package/dist/cli/commands/reject.js.map +1 -0
  65. package/dist/cli/commands/rollback.d.ts +21 -0
  66. package/dist/cli/commands/rollback.d.ts.map +1 -0
  67. package/dist/cli/commands/rollback.js +90 -0
  68. package/dist/cli/commands/rollback.js.map +1 -0
  69. package/dist/cli/commands/run.d.ts +9 -0
  70. package/dist/cli/commands/run.d.ts.map +1 -1
  71. package/dist/cli/commands/run.js +31 -2
  72. package/dist/cli/commands/run.js.map +1 -1
  73. package/dist/cli/commands/sprint.d.ts.map +1 -1
  74. package/dist/cli/commands/sprint.js +8 -8
  75. package/dist/cli/commands/sprint.js.map +1 -1
  76. package/dist/cli/commands/telemetry.d.ts +16 -0
  77. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  78. package/dist/cli/commands/telemetry.js +152 -0
  79. package/dist/cli/commands/telemetry.js.map +1 -0
  80. package/dist/cli/commands/worktree.d.ts +12 -0
  81. package/dist/cli/commands/worktree.d.ts.map +1 -0
  82. package/dist/cli/commands/worktree.js +57 -0
  83. package/dist/cli/commands/worktree.js.map +1 -0
  84. package/dist/cli/index.js +73 -2
  85. package/dist/cli/index.js.map +1 -1
  86. package/dist/config/defaults.d.ts.map +1 -1
  87. package/dist/config/defaults.js +27 -0
  88. package/dist/config/defaults.js.map +1 -1
  89. package/dist/config/index.d.ts +1 -1
  90. package/dist/config/index.d.ts.map +1 -1
  91. package/dist/config/index.js +4 -0
  92. package/dist/config/index.js.map +1 -1
  93. package/dist/config/loader.d.ts.map +1 -1
  94. package/dist/config/loader.js +18 -1
  95. package/dist/config/loader.js.map +1 -1
  96. package/dist/config/schema.d.ts +1016 -96
  97. package/dist/config/schema.d.ts.map +1 -1
  98. package/dist/config/schema.js +147 -0
  99. package/dist/config/schema.js.map +1 -1
  100. package/dist/contracts/eval-result.d.ts +38 -38
  101. package/dist/contracts/index.d.ts +2 -2
  102. package/dist/contracts/index.d.ts.map +1 -1
  103. package/dist/contracts/index.js +8 -4
  104. package/dist/contracts/index.js.map +1 -1
  105. package/dist/contracts/spec.d.ts +335 -40
  106. package/dist/contracts/spec.d.ts.map +1 -1
  107. package/dist/contracts/spec.js +210 -18
  108. package/dist/contracts/spec.js.map +1 -1
  109. package/dist/contracts/sprint-contract.d.ts +155 -88
  110. package/dist/contracts/sprint-contract.d.ts.map +1 -1
  111. package/dist/contracts/sprint-contract.js +176 -29
  112. package/dist/contracts/sprint-contract.js.map +1 -1
  113. package/dist/evaluators/builtin/api-check.js +1 -1
  114. package/dist/evaluators/builtin/api-check.js.map +1 -1
  115. package/dist/graph/artifact-store.d.ts +14 -0
  116. package/dist/graph/artifact-store.d.ts.map +1 -0
  117. package/dist/graph/artifact-store.js +100 -0
  118. package/dist/graph/artifact-store.js.map +1 -0
  119. package/dist/graph/cli.d.ts +49 -0
  120. package/dist/graph/cli.d.ts.map +1 -0
  121. package/dist/graph/cli.js +140 -0
  122. package/dist/graph/cli.js.map +1 -0
  123. package/dist/graph/client.d.ts +64 -0
  124. package/dist/graph/client.d.ts.map +1 -0
  125. package/dist/graph/client.js +216 -0
  126. package/dist/graph/client.js.map +1 -0
  127. package/dist/graph/fallback.d.ts +13 -0
  128. package/dist/graph/fallback.d.ts.map +1 -0
  129. package/dist/graph/fallback.js +57 -0
  130. package/dist/graph/fallback.js.map +1 -0
  131. package/dist/graph/hook-handler.d.ts +50 -0
  132. package/dist/graph/hook-handler.d.ts.map +1 -0
  133. package/dist/graph/hook-handler.js +217 -0
  134. package/dist/graph/hook-handler.js.map +1 -0
  135. package/dist/graph/incidents.d.ts +59 -0
  136. package/dist/graph/incidents.d.ts.map +1 -0
  137. package/dist/graph/incidents.js +22 -0
  138. package/dist/graph/incidents.js.map +1 -0
  139. package/dist/graph/mcp-client.d.ts +51 -0
  140. package/dist/graph/mcp-client.d.ts.map +1 -0
  141. package/dist/graph/mcp-client.js +285 -0
  142. package/dist/graph/mcp-client.js.map +1 -0
  143. package/dist/graph/onboarding-composer.d.ts +30 -0
  144. package/dist/graph/onboarding-composer.d.ts.map +1 -0
  145. package/dist/graph/onboarding-composer.js +275 -0
  146. package/dist/graph/onboarding-composer.js.map +1 -0
  147. package/dist/graph/pipeline-lifecycle.d.ts +86 -0
  148. package/dist/graph/pipeline-lifecycle.d.ts.map +1 -0
  149. package/dist/graph/pipeline-lifecycle.js +329 -0
  150. package/dist/graph/pipeline-lifecycle.js.map +1 -0
  151. package/dist/graph/preflight-budgets.d.ts +52 -0
  152. package/dist/graph/preflight-budgets.d.ts.map +1 -0
  153. package/dist/graph/preflight-budgets.js +78 -0
  154. package/dist/graph/preflight-budgets.js.map +1 -0
  155. package/dist/graph/preflight-injector.d.ts +116 -0
  156. package/dist/graph/preflight-injector.d.ts.map +1 -0
  157. package/dist/graph/preflight-injector.js +538 -0
  158. package/dist/graph/preflight-injector.js.map +1 -0
  159. package/dist/graph/prereq.d.ts +12 -0
  160. package/dist/graph/prereq.d.ts.map +1 -0
  161. package/dist/graph/prereq.js +61 -0
  162. package/dist/graph/prereq.js.map +1 -0
  163. package/dist/graph/prompts.d.ts +42 -0
  164. package/dist/graph/prompts.d.ts.map +1 -0
  165. package/dist/graph/prompts.js +80 -0
  166. package/dist/graph/prompts.js.map +1 -0
  167. package/dist/graph/sandbox.d.ts +19 -0
  168. package/dist/graph/sandbox.d.ts.map +1 -0
  169. package/dist/graph/sandbox.js +25 -0
  170. package/dist/graph/sandbox.js.map +1 -0
  171. package/dist/graph/token-usage.d.ts +21 -0
  172. package/dist/graph/token-usage.d.ts.map +1 -0
  173. package/dist/graph/token-usage.js +22 -0
  174. package/dist/graph/token-usage.js.map +1 -0
  175. package/dist/graph/types.d.ts +129 -0
  176. package/dist/graph/types.d.ts.map +1 -0
  177. package/dist/graph/types.js +12 -0
  178. package/dist/graph/types.js.map +1 -0
  179. package/dist/incident/orchestrator.d.ts +168 -0
  180. package/dist/incident/orchestrator.d.ts.map +1 -0
  181. package/dist/incident/orchestrator.js +279 -0
  182. package/dist/incident/orchestrator.js.map +1 -0
  183. package/dist/incident/playbook-search.d.ts +67 -0
  184. package/dist/incident/playbook-search.d.ts.map +1 -0
  185. package/dist/incident/playbook-search.js +288 -0
  186. package/dist/incident/playbook-search.js.map +1 -0
  187. package/dist/incident/postmortem.d.ts +44 -0
  188. package/dist/incident/postmortem.d.ts.map +1 -0
  189. package/dist/incident/postmortem.js +486 -0
  190. package/dist/incident/postmortem.js.map +1 -0
  191. package/dist/incident/resolution-verify.d.ts +186 -0
  192. package/dist/incident/resolution-verify.d.ts.map +1 -0
  193. package/dist/incident/resolution-verify.js +210 -0
  194. package/dist/incident/resolution-verify.js.map +1 -0
  195. package/dist/incident/rollback.d.ts +137 -0
  196. package/dist/incident/rollback.d.ts.map +1 -0
  197. package/dist/incident/rollback.js +328 -0
  198. package/dist/incident/rollback.js.map +1 -0
  199. package/dist/incident/timeline.d.ts +147 -0
  200. package/dist/incident/timeline.d.ts.map +1 -0
  201. package/dist/incident/timeline.js +452 -0
  202. package/dist/incident/timeline.js.map +1 -0
  203. package/dist/incident/types.d.ts +335 -0
  204. package/dist/incident/types.d.ts.map +1 -0
  205. package/dist/incident/types.js +158 -0
  206. package/dist/incident/types.js.map +1 -0
  207. package/dist/index.d.ts +3 -3
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +3 -3
  210. package/dist/index.js.map +1 -1
  211. package/dist/mcp/event-stream.d.ts +46 -0
  212. package/dist/mcp/event-stream.d.ts.map +1 -0
  213. package/dist/mcp/event-stream.js +421 -0
  214. package/dist/mcp/event-stream.js.map +1 -0
  215. package/dist/mcp/external-client.d.ts +38 -0
  216. package/dist/mcp/external-client.d.ts.map +1 -0
  217. package/dist/mcp/external-client.js +121 -0
  218. package/dist/mcp/external-client.js.map +1 -0
  219. package/dist/mcp/run-manager.d.ts +74 -9
  220. package/dist/mcp/run-manager.d.ts.map +1 -1
  221. package/dist/mcp/run-manager.js +127 -31
  222. package/dist/mcp/run-manager.js.map +1 -1
  223. package/dist/mcp/server.d.ts.map +1 -1
  224. package/dist/mcp/server.js +56 -0
  225. package/dist/mcp/server.js.map +1 -1
  226. package/dist/mcp/tools/abort-run.d.ts +2 -0
  227. package/dist/mcp/tools/abort-run.d.ts.map +1 -0
  228. package/dist/mcp/tools/abort-run.js +62 -0
  229. package/dist/mcp/tools/abort-run.js.map +1 -0
  230. package/dist/mcp/tools/anchor.js +1 -1
  231. package/dist/mcp/tools/anchor.js.map +1 -1
  232. package/dist/mcp/tools/approve-checkpoint.d.ts +2 -0
  233. package/dist/mcp/tools/approve-checkpoint.d.ts.map +1 -0
  234. package/dist/mcp/tools/approve-checkpoint.js +70 -0
  235. package/dist/mcp/tools/approve-checkpoint.js.map +1 -0
  236. package/dist/mcp/tools/brownfield.js +1 -1
  237. package/dist/mcp/tools/brownfield.js.map +1 -1
  238. package/dist/mcp/tools/contracts.js +2 -2
  239. package/dist/mcp/tools/contracts.js.map +1 -1
  240. package/dist/mcp/tools/eval.js +8 -8
  241. package/dist/mcp/tools/eval.js.map +1 -1
  242. package/dist/mcp/tools/get-project-state.d.ts +2 -0
  243. package/dist/mcp/tools/get-project-state.d.ts.map +1 -0
  244. package/dist/mcp/tools/get-project-state.js +107 -0
  245. package/dist/mcp/tools/get-project-state.js.map +1 -0
  246. package/dist/mcp/tools/get-run-status.d.ts +2 -0
  247. package/dist/mcp/tools/get-run-status.d.ts.map +1 -0
  248. package/dist/mcp/tools/get-run-status.js +40 -0
  249. package/dist/mcp/tools/get-run-status.js.map +1 -0
  250. package/dist/mcp/tools/graph-schemas.d.ts +100 -0
  251. package/dist/mcp/tools/graph-schemas.d.ts.map +1 -0
  252. package/dist/mcp/tools/graph-schemas.js +39 -0
  253. package/dist/mcp/tools/graph-schemas.js.map +1 -0
  254. package/dist/mcp/tools/graph.d.ts +19 -0
  255. package/dist/mcp/tools/graph.d.ts.map +1 -0
  256. package/dist/mcp/tools/graph.js +263 -0
  257. package/dist/mcp/tools/graph.js.map +1 -0
  258. package/dist/mcp/tools/incident.d.ts +2 -0
  259. package/dist/mcp/tools/incident.d.ts.map +1 -0
  260. package/dist/mcp/tools/incident.js +246 -0
  261. package/dist/mcp/tools/incident.js.map +1 -0
  262. package/dist/mcp/tools/index.d.ts +38 -18
  263. package/dist/mcp/tools/index.d.ts.map +1 -1
  264. package/dist/mcp/tools/index.js +74 -18
  265. package/dist/mcp/tools/index.js.map +1 -1
  266. package/dist/mcp/tools/list-active-runs.d.ts +2 -0
  267. package/dist/mcp/tools/list-active-runs.d.ts.map +1 -0
  268. package/dist/mcp/tools/list-active-runs.js +35 -0
  269. package/dist/mcp/tools/list-active-runs.js.map +1 -0
  270. package/dist/mcp/tools/list-pending-approvals.d.ts +2 -0
  271. package/dist/mcp/tools/list-pending-approvals.d.ts.map +1 -0
  272. package/dist/mcp/tools/list-pending-approvals.js +40 -0
  273. package/dist/mcp/tools/list-pending-approvals.js.map +1 -0
  274. package/dist/mcp/tools/list-projects.d.ts +2 -0
  275. package/dist/mcp/tools/list-projects.d.ts.map +1 -0
  276. package/dist/mcp/tools/list-projects.js +101 -0
  277. package/dist/mcp/tools/list-projects.js.map +1 -0
  278. package/dist/mcp/tools/list-specs.d.ts +2 -0
  279. package/dist/mcp/tools/list-specs.d.ts.map +1 -0
  280. package/dist/mcp/tools/list-specs.js +48 -0
  281. package/dist/mcp/tools/list-specs.js.map +1 -0
  282. package/dist/mcp/tools/plan.d.ts.map +1 -1
  283. package/dist/mcp/tools/plan.js +40 -14
  284. package/dist/mcp/tools/plan.js.map +1 -1
  285. package/dist/mcp/tools/playbook.d.ts +2 -0
  286. package/dist/mcp/tools/playbook.d.ts.map +1 -0
  287. package/dist/mcp/tools/playbook.js +104 -0
  288. package/dist/mcp/tools/playbook.js.map +1 -0
  289. package/dist/mcp/tools/postmortem.d.ts +2 -0
  290. package/dist/mcp/tools/postmortem.d.ts.map +1 -0
  291. package/dist/mcp/tools/postmortem.js +75 -0
  292. package/dist/mcp/tools/postmortem.js.map +1 -0
  293. package/dist/mcp/tools/react.js +1 -1
  294. package/dist/mcp/tools/react.js.map +1 -1
  295. package/dist/mcp/tools/reject-checkpoint.d.ts +2 -0
  296. package/dist/mcp/tools/reject-checkpoint.d.ts.map +1 -0
  297. package/dist/mcp/tools/reject-checkpoint.js +79 -0
  298. package/dist/mcp/tools/reject-checkpoint.js.map +1 -0
  299. package/dist/mcp/tools/rollback.d.ts +2 -0
  300. package/dist/mcp/tools/rollback.d.ts.map +1 -0
  301. package/dist/mcp/tools/rollback.js +78 -0
  302. package/dist/mcp/tools/rollback.js.map +1 -0
  303. package/dist/mcp/tools/run-in-worktree.d.ts +2 -0
  304. package/dist/mcp/tools/run-in-worktree.d.ts.map +1 -0
  305. package/dist/mcp/tools/run-in-worktree.js +90 -0
  306. package/dist/mcp/tools/run-in-worktree.js.map +1 -0
  307. package/dist/mcp/tools/run.js +1 -1
  308. package/dist/mcp/tools/run.js.map +1 -1
  309. package/dist/mcp/tools/solidity.js +1 -1
  310. package/dist/mcp/tools/solidity.js.map +1 -1
  311. package/dist/mcp/tools/sprint.d.ts.map +1 -1
  312. package/dist/mcp/tools/sprint.js +11 -11
  313. package/dist/mcp/tools/sprint.js.map +1 -1
  314. package/dist/mcp/tools/status.d.ts.map +1 -1
  315. package/dist/mcp/tools/status.js +11 -0
  316. package/dist/mcp/tools/status.js.map +1 -1
  317. package/dist/mcp/tools/subscribe-events.d.ts +2 -0
  318. package/dist/mcp/tools/subscribe-events.d.ts.map +1 -0
  319. package/dist/mcp/tools/subscribe-events.js +48 -0
  320. package/dist/mcp/tools/subscribe-events.js.map +1 -0
  321. package/dist/mcp/tools/unsubscribe-events.d.ts +2 -0
  322. package/dist/mcp/tools/unsubscribe-events.d.ts.map +1 -0
  323. package/dist/mcp/tools/unsubscribe-events.js +45 -0
  324. package/dist/mcp/tools/unsubscribe-events.js.map +1 -0
  325. package/dist/orchestrator/agent-loader.d.ts +16 -0
  326. package/dist/orchestrator/agent-loader.d.ts.map +1 -1
  327. package/dist/orchestrator/agent-loader.js +16 -0
  328. package/dist/orchestrator/agent-loader.js.map +1 -1
  329. package/dist/orchestrator/architect-agent.d.ts.map +1 -1
  330. package/dist/orchestrator/architect-agent.js +37 -8
  331. package/dist/orchestrator/architect-agent.js.map +1 -1
  332. package/dist/orchestrator/checkpoints/audit.d.ts +128 -0
  333. package/dist/orchestrator/checkpoints/audit.d.ts.map +1 -0
  334. package/dist/orchestrator/checkpoints/audit.js +272 -0
  335. package/dist/orchestrator/checkpoints/audit.js.map +1 -0
  336. package/dist/orchestrator/checkpoints/feedback-router.d.ts +213 -0
  337. package/dist/orchestrator/checkpoints/feedback-router.d.ts.map +1 -0
  338. package/dist/orchestrator/checkpoints/feedback-router.js +438 -0
  339. package/dist/orchestrator/checkpoints/feedback-router.js.map +1 -0
  340. package/dist/orchestrator/checkpoints/index.d.ts +11 -0
  341. package/dist/orchestrator/checkpoints/index.d.ts.map +1 -0
  342. package/dist/orchestrator/checkpoints/index.js +12 -0
  343. package/dist/orchestrator/checkpoints/index.js.map +1 -0
  344. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts +35 -0
  345. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts.map +1 -0
  346. package/dist/orchestrator/checkpoints/mechanisms/cli.js +153 -0
  347. package/dist/orchestrator/checkpoints/mechanisms/cli.js.map +1 -0
  348. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts +34 -0
  349. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts.map +1 -0
  350. package/dist/orchestrator/checkpoints/mechanisms/disk.js +139 -0
  351. package/dist/orchestrator/checkpoints/mechanisms/disk.js.map +1 -0
  352. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts +141 -0
  353. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts.map +1 -0
  354. package/dist/orchestrator/checkpoints/mechanisms/pr.js +445 -0
  355. package/dist/orchestrator/checkpoints/mechanisms/pr.js.map +1 -0
  356. package/dist/orchestrator/checkpoints/noop.d.ts +12 -0
  357. package/dist/orchestrator/checkpoints/noop.d.ts.map +1 -0
  358. package/dist/orchestrator/checkpoints/noop.js +13 -0
  359. package/dist/orchestrator/checkpoints/noop.js.map +1 -0
  360. package/dist/orchestrator/checkpoints/registry.d.ts +48 -0
  361. package/dist/orchestrator/checkpoints/registry.d.ts.map +1 -0
  362. package/dist/orchestrator/checkpoints/registry.js +89 -0
  363. package/dist/orchestrator/checkpoints/registry.js.map +1 -0
  364. package/dist/orchestrator/checkpoints/renderers/_util.d.ts +50 -0
  365. package/dist/orchestrator/checkpoints/renderers/_util.d.ts.map +1 -0
  366. package/dist/orchestrator/checkpoints/renderers/_util.js +137 -0
  367. package/dist/orchestrator/checkpoints/renderers/_util.js.map +1 -0
  368. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts +15 -0
  369. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts.map +1 -0
  370. package/dist/orchestrator/checkpoints/renderers/code-review.js +66 -0
  371. package/dist/orchestrator/checkpoints/renderers/code-review.js.map +1 -0
  372. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts +15 -0
  373. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts.map +1 -0
  374. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js +40 -0
  375. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js.map +1 -0
  376. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts +15 -0
  377. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts.map +1 -0
  378. package/dist/orchestrator/checkpoints/renderers/eval-result.js +54 -0
  379. package/dist/orchestrator/checkpoints/renderers/eval-result.js.map +1 -0
  380. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts +49 -0
  381. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts.map +1 -0
  382. package/dist/orchestrator/checkpoints/renderers/generator-diff.js +154 -0
  383. package/dist/orchestrator/checkpoints/renderers/generator-diff.js.map +1 -0
  384. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts +15 -0
  385. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts.map +1 -0
  386. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js +59 -0
  387. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js.map +1 -0
  388. package/dist/orchestrator/checkpoints/renderers/plan.d.ts +15 -0
  389. package/dist/orchestrator/checkpoints/renderers/plan.d.ts.map +1 -0
  390. package/dist/orchestrator/checkpoints/renderers/plan.js +34 -0
  391. package/dist/orchestrator/checkpoints/renderers/plan.js.map +1 -0
  392. package/dist/orchestrator/checkpoints/renderers/registry.d.ts +43 -0
  393. package/dist/orchestrator/checkpoints/renderers/registry.d.ts.map +1 -0
  394. package/dist/orchestrator/checkpoints/renderers/registry.js +83 -0
  395. package/dist/orchestrator/checkpoints/renderers/registry.js.map +1 -0
  396. package/dist/orchestrator/checkpoints/renderers/research.d.ts +15 -0
  397. package/dist/orchestrator/checkpoints/renderers/research.d.ts.map +1 -0
  398. package/dist/orchestrator/checkpoints/renderers/research.js +39 -0
  399. package/dist/orchestrator/checkpoints/renderers/research.js.map +1 -0
  400. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts +20 -0
  401. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts.map +1 -0
  402. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js +57 -0
  403. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js.map +1 -0
  404. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts +15 -0
  405. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts.map +1 -0
  406. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js +38 -0
  407. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js.map +1 -0
  408. package/dist/orchestrator/checkpoints/sites.d.ts +22 -0
  409. package/dist/orchestrator/checkpoints/sites.d.ts.map +1 -0
  410. package/dist/orchestrator/checkpoints/sites.js +57 -0
  411. package/dist/orchestrator/checkpoints/sites.js.map +1 -0
  412. package/dist/orchestrator/checkpoints/types.d.ts +51 -0
  413. package/dist/orchestrator/checkpoints/types.d.ts.map +1 -0
  414. package/dist/orchestrator/checkpoints/types.js +9 -0
  415. package/dist/orchestrator/checkpoints/types.js.map +1 -0
  416. package/dist/orchestrator/code-reviewer-agent.d.ts +50 -0
  417. package/dist/orchestrator/code-reviewer-agent.d.ts.map +1 -0
  418. package/dist/orchestrator/code-reviewer-agent.js +283 -0
  419. package/dist/orchestrator/code-reviewer-agent.js.map +1 -0
  420. package/dist/orchestrator/context-handoff.d.ts +484 -224
  421. package/dist/orchestrator/context-handoff.d.ts.map +1 -1
  422. package/dist/orchestrator/context-handoff.js +32 -12
  423. package/dist/orchestrator/context-handoff.js.map +1 -1
  424. package/dist/orchestrator/curator-agent.d.ts.map +1 -1
  425. package/dist/orchestrator/curator-agent.js +63 -12
  426. package/dist/orchestrator/curator-agent.js.map +1 -1
  427. package/dist/orchestrator/deploy/classify.d.ts +31 -0
  428. package/dist/orchestrator/deploy/classify.d.ts.map +1 -0
  429. package/dist/orchestrator/deploy/classify.js +109 -0
  430. package/dist/orchestrator/deploy/classify.js.map +1 -0
  431. package/dist/orchestrator/deploy/execute.d.ts +45 -0
  432. package/dist/orchestrator/deploy/execute.d.ts.map +1 -0
  433. package/dist/orchestrator/deploy/execute.js +146 -0
  434. package/dist/orchestrator/deploy/execute.js.map +1 -0
  435. package/dist/orchestrator/deploy/executor.d.ts +22 -0
  436. package/dist/orchestrator/deploy/executor.d.ts.map +1 -0
  437. package/dist/orchestrator/deploy/executor.js +31 -0
  438. package/dist/orchestrator/deploy/executor.js.map +1 -0
  439. package/dist/orchestrator/deploy/index.d.ts +21 -0
  440. package/dist/orchestrator/deploy/index.d.ts.map +1 -0
  441. package/dist/orchestrator/deploy/index.js +21 -0
  442. package/dist/orchestrator/deploy/index.js.map +1 -0
  443. package/dist/orchestrator/deploy/resolve.d.ts +51 -0
  444. package/dist/orchestrator/deploy/resolve.d.ts.map +1 -0
  445. package/dist/orchestrator/deploy/resolve.js +53 -0
  446. package/dist/orchestrator/deploy/resolve.js.map +1 -0
  447. package/dist/orchestrator/deploy/spawn.d.ts +60 -0
  448. package/dist/orchestrator/deploy/spawn.d.ts.map +1 -0
  449. package/dist/orchestrator/deploy/spawn.js +62 -0
  450. package/dist/orchestrator/deploy/spawn.js.map +1 -0
  451. package/dist/orchestrator/deploy/types.d.ts +98 -0
  452. package/dist/orchestrator/deploy/types.d.ts.map +1 -0
  453. package/dist/orchestrator/deploy/types.js +39 -0
  454. package/dist/orchestrator/deploy/types.js.map +1 -0
  455. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
  456. package/dist/orchestrator/evaluator-agent.js +23 -10
  457. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  458. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  459. package/dist/orchestrator/generator-agent.js +24 -11
  460. package/dist/orchestrator/generator-agent.js.map +1 -1
  461. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  462. package/dist/orchestrator/model-resolver.js +4 -2
  463. package/dist/orchestrator/model-resolver.js.map +1 -1
  464. package/dist/orchestrator/observability/index.d.ts +12 -0
  465. package/dist/orchestrator/observability/index.d.ts.map +1 -0
  466. package/dist/orchestrator/observability/index.js +12 -0
  467. package/dist/orchestrator/observability/index.js.map +1 -0
  468. package/dist/orchestrator/observability/merge.d.ts +73 -0
  469. package/dist/orchestrator/observability/merge.d.ts.map +1 -0
  470. package/dist/orchestrator/observability/merge.js +110 -0
  471. package/dist/orchestrator/observability/merge.js.map +1 -0
  472. package/dist/orchestrator/pipeline.d.ts +28 -0
  473. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  474. package/dist/orchestrator/pipeline.js +223 -30
  475. package/dist/orchestrator/pipeline.js.map +1 -1
  476. package/dist/orchestrator/planner-agent.d.ts +21 -1
  477. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  478. package/dist/orchestrator/planner-agent.js +16 -6
  479. package/dist/orchestrator/planner-agent.js.map +1 -1
  480. package/dist/orchestrator/research-agent.d.ts.map +1 -1
  481. package/dist/orchestrator/research-agent.js +46 -9
  482. package/dist/orchestrator/research-agent.js.map +1 -1
  483. package/dist/orchestrator/tools/handlers.d.ts +2 -0
  484. package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
  485. package/dist/orchestrator/tools/handlers.js +1 -1
  486. package/dist/orchestrator/tools/handlers.js.map +1 -1
  487. package/dist/orchestrator/tools/index.d.ts +84 -1
  488. package/dist/orchestrator/tools/index.d.ts.map +1 -1
  489. package/dist/orchestrator/tools/index.js +164 -1
  490. package/dist/orchestrator/tools/index.js.map +1 -1
  491. package/dist/orchestrator/worktree.d.ts +18 -0
  492. package/dist/orchestrator/worktree.d.ts.map +1 -0
  493. package/dist/orchestrator/worktree.js +129 -0
  494. package/dist/orchestrator/worktree.js.map +1 -0
  495. package/dist/providers/anthropic.d.ts +8 -1
  496. package/dist/providers/anthropic.d.ts.map +1 -1
  497. package/dist/providers/anthropic.js +86 -5
  498. package/dist/providers/anthropic.js.map +1 -1
  499. package/dist/providers/factory.d.ts.map +1 -1
  500. package/dist/providers/factory.js +35 -2
  501. package/dist/providers/factory.js.map +1 -1
  502. package/dist/providers/google.d.ts.map +1 -1
  503. package/dist/providers/google.js +5 -0
  504. package/dist/providers/google.js.map +1 -1
  505. package/dist/providers/index.d.ts +1 -1
  506. package/dist/providers/index.d.ts.map +1 -1
  507. package/dist/providers/index.js.map +1 -1
  508. package/dist/providers/openai.d.ts.map +1 -1
  509. package/dist/providers/openai.js +4 -0
  510. package/dist/providers/openai.js.map +1 -1
  511. package/dist/providers/types.d.ts +25 -2
  512. package/dist/providers/types.d.ts.map +1 -1
  513. package/dist/state/approval-state.d.ts +74 -0
  514. package/dist/state/approval-state.d.ts.map +1 -0
  515. package/dist/state/approval-state.js +127 -0
  516. package/dist/state/approval-state.js.map +1 -0
  517. package/dist/state/history.d.ts.map +1 -1
  518. package/dist/state/history.js +3 -3
  519. package/dist/state/history.js.map +1 -1
  520. package/dist/state/index.d.ts +3 -0
  521. package/dist/state/index.d.ts.map +1 -1
  522. package/dist/state/index.js +4 -1
  523. package/dist/state/index.js.map +1 -1
  524. package/dist/state/plan-state.js +1 -1
  525. package/dist/state/plan-state.js.map +1 -1
  526. package/dist/state/review-state.d.ts +15 -0
  527. package/dist/state/review-state.d.ts.map +1 -0
  528. package/dist/state/review-state.js +51 -0
  529. package/dist/state/review-state.js.map +1 -0
  530. package/dist/state/run-state.d.ts +39 -0
  531. package/dist/state/run-state.d.ts.map +1 -0
  532. package/dist/state/run-state.js +101 -0
  533. package/dist/state/run-state.js.map +1 -0
  534. package/dist/state/sprint-state.d.ts +9 -2
  535. package/dist/state/sprint-state.d.ts.map +1 -1
  536. package/dist/state/sprint-state.js +25 -11
  537. package/dist/state/sprint-state.js.map +1 -1
  538. package/dist/telemetry/emit.d.ts +41 -0
  539. package/dist/telemetry/emit.d.ts.map +1 -0
  540. package/dist/telemetry/emit.js +65 -0
  541. package/dist/telemetry/emit.js.map +1 -0
  542. package/dist/utils/git.d.ts +27 -0
  543. package/dist/utils/git.d.ts.map +1 -1
  544. package/dist/utils/git.js +50 -0
  545. package/dist/utils/git.js.map +1 -1
  546. package/hooks/hooks.json +17 -1
  547. package/hooks/session-start +42 -0
  548. package/package.json +6 -2
  549. package/scripts/check-prereqs.sh +12 -0
  550. package/scripts/e2e-graph-smoke.sh +167 -0
  551. package/scripts/graph-hook.mjs +151 -0
  552. package/scripts/migrate-specs.mjs +127 -0
  553. package/scripts/run-kpi-gate.mjs +245 -0
  554. package/scripts/sync-skills.mjs +99 -0
  555. package/skills/bober.code-review/SKILL.md +186 -0
  556. package/skills/bober.debug/SKILL.md +300 -0
  557. package/skills/bober.deploy/SKILL.md +262 -0
  558. package/skills/bober.diagnose/SKILL.md +254 -0
  559. package/skills/bober.graph/SKILL.md +85 -0
  560. package/skills/bober.impact/SKILL.md +101 -0
  561. package/skills/bober.incident/SKILL.md +245 -0
  562. package/skills/bober.onboard/SKILL.md +84 -0
  563. package/skills/bober.plan/SKILL.md +51 -0
  564. package/skills/bober.plan/references/spec-schema.md +31 -4
  565. package/skills/bober.postmortem/SKILL.md +231 -0
  566. package/skills/bober.run/SKILL.md +41 -7
  567. package/skills/bober.runbook/SKILL.md +335 -0
  568. package/skills/bober.sprint/SKILL.md +6 -259
  569. package/skills/bober.using-bober/SKILL.md +133 -0
  570. package/skills/bober.verify/SKILL.md +143 -0
@@ -1 +1 @@
1
- {"version":3,"file":"context-handoff.d.ts","sourceRoot":"","sources":["../../src/orchestrator/context-handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,eAAe,2DAK1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAIxD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAItD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAwBlE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;IACd,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,cAAc,CAcjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAoB/D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,cAAc,CAiChB"}
1
+ {"version":3,"file":"context-handoff.d.ts","sourceRoot":"","sources":["../../src/orchestrator/context-handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,eAAe,2DAK1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAIxD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAItD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AA4BlE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;IACd,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,cAAc,CAcjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAoB/D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,cAAc,CAqDhB"}
@@ -39,8 +39,10 @@ export const ContextHandoffSchema = z.object({
39
39
  });
40
40
  function summarizeSprint(contract) {
41
41
  return {
42
- id: contract.id,
43
- feature: contract.feature,
42
+ contractId: contract.contractId,
43
+ specId: contract.specId,
44
+ sprintNumber: contract.sprintNumber,
45
+ title: contract.title,
44
46
  status: contract.status,
45
47
  startedAt: contract.startedAt,
46
48
  completedAt: contract.completedAt,
@@ -108,19 +110,37 @@ export function summarizeOlderSprints(handoff, keepRecent) {
108
110
  const cutoff = history.length - keepRecent;
109
111
  const olderSprints = history.slice(0, cutoff);
110
112
  const recentSprints = history.slice(cutoff);
111
- // Build summary entries as minimal SprintContract objects
113
+ // Build summary entries as minimal SprintContract objects.
114
+ // Even summaries must satisfy the schema's precision-field minimums so
115
+ // that downstream code can rely on the shape unconditionally.
112
116
  const summarized = olderSprints.map((contract) => {
113
117
  const summary = summarizeSprint(contract);
118
+ const summarizedDescription = `[Summarized] ${contract.description}`;
114
119
  return {
115
- id: summary.id,
116
- feature: summary.feature,
117
- description: `[Summarized] ${contract.description}`,
118
- successCriteria: [],
119
- expectedChanges: [],
120
- dependsOn: [],
121
- status: contract.status,
122
- generatorNotes: undefined,
123
- evaluatorFeedback: undefined,
120
+ contractId: summary.contractId,
121
+ specId: summary.specId,
122
+ sprintNumber: summary.sprintNumber,
123
+ title: summary.title,
124
+ description: summarizedDescription,
125
+ status: summary.status,
126
+ dependsOn: contract.dependsOn,
127
+ features: contract.features,
128
+ successCriteria: [
129
+ {
130
+ criterionId: "summary",
131
+ description: "Sprint history summarized — original criteria omitted to save context.",
132
+ verificationMethod: "manual",
133
+ required: false,
134
+ },
135
+ ],
136
+ nonGoals: ["Re-evaluating this summarized sprint"],
137
+ stopConditions: ["Sprint already terminal at summary time"],
138
+ definitionOfDone: "Summarized historical sprint — see source contract for original criteria.",
139
+ assumptions: [],
140
+ outOfScope: [],
141
+ estimatedFiles: [],
142
+ iterationHistory: [],
143
+ lastEvalId: contract.lastEvalId ?? null,
124
144
  startedAt: summary.startedAt,
125
145
  completedAt: summary.completedAt,
126
146
  };
@@ -1 +1 @@
1
- {"version":3,"file":"context-handoff.js","sourceRoot":"","sources":["../../src/orchestrator/context-handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,oBAAoB,GAErB,MAAM,iCAAiC,CAAC;AAEzC,uEAAuE;AAEvE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,SAAS;IACT,WAAW;IACX,WAAW;IACX,OAAO;CACR,CAAC,CAAC;AAGH,uEAAuE;AAEvE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,eAAe;CACxB,CAAC,CAAC;AAGH,uEAAuE;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAGH,uEAAuE;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,eAAe;IACrB,EAAE,EAAE,eAAe;IACnB,cAAc,EAAE,oBAAoB;IACpC,IAAI,EAAE,cAAc;IACpB,eAAe,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAChD,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAC5C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AAaH,SAAS,eAAe,CAAC,QAAwB;IAC/C,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAW7B;IACC,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;QACvC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACnF,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACnD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAuB,EACvB,UAAkB;IAElB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE5C,0DAA0D;IAC1D,MAAM,UAAU,GAAqB,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,gBAAgB,QAAQ,CAAC,WAAW,EAAE;YACnD,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,EAAE;YACnB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,cAAc,EAAE,SAAS;YACzB,iBAAiB,EAAE,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context-handoff.js","sourceRoot":"","sources":["../../src/orchestrator/context-handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,oBAAoB,GAErB,MAAM,iCAAiC,CAAC;AAEzC,uEAAuE;AAEvE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,SAAS;IACT,WAAW;IACX,WAAW;IACX,OAAO;CACR,CAAC,CAAC;AAGH,uEAAuE;AAEvE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,eAAe;CACxB,CAAC,CAAC;AAGH,uEAAuE;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAGH,uEAAuE;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,eAAe;IACrB,EAAE,EAAE,eAAe;IACnB,cAAc,EAAE,oBAAoB;IACpC,IAAI,EAAE,cAAc;IACpB,eAAe,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAChD,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAC5C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CAC5B,CAAC,CAAC;AAeH,SAAS,eAAe,CAAC,QAAwB;IAC/C,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAW7B;IACC,OAAO;QACL,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;QACvC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACnF,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACnD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAuB,EACvB,UAAkB;IAElB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE5C,2DAA2D;IAC3D,uEAAuE;IACvE,8DAA8D;IAC9D,MAAM,UAAU,GAAqB,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,qBAAqB,GAAG,gBAAgB,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrE,OAAO;YACL,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,qBAAqB;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,eAAe,EAAE;gBACf;oBACE,WAAW,EAAE,SAAS;oBACtB,WAAW,EACT,wEAAwE;oBAC1E,kBAAkB,EAAE,QAAQ;oBAC5B,QAAQ,EAAE,KAAK;iBAChB;aACF;YACD,QAAQ,EAAE,CAAC,sCAAsC,CAAC;YAClD,cAAc,EAAE,CAAC,yCAAyC,CAAC;YAC3D,gBAAgB,EACd,2EAA2E;YAC7E,WAAW,EAAE,EAAE;YACf,UAAU,EAAE,EAAE;YACd,cAAc,EAAE,EAAE;YAClB,gBAAgB,EAAE,EAAE;YACpB,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,IAAI;YACvC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EAAE,CAAC,GAAG,UAAU,EAAE,GAAG,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"curator-agent.d.ts","sourceRoot":"","sources":["../../src/orchestrator/curator-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAcrD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;CACzB;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,QAAQ,EACd,gBAAgB,EAAE,cAAc,EAAE,EAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC,CA0GzB"}
1
+ {"version":3,"file":"curator-agent.d.ts","sourceRoot":"","sources":["../../src/orchestrator/curator-agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAkBrD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,eAAe,EAAE,MAAM,CAAC;CACzB;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,QAAQ,EACd,gBAAgB,EAAE,cAAc,EAAE,EAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,CAAC,CAyJzB"}
@@ -1,9 +1,15 @@
1
+ import { writeFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
1
3
  import { createClient } from "../providers/factory.js";
2
4
  import { logger } from "../utils/logger.js";
3
5
  import { resolveModel } from "./model-resolver.js";
4
- import { loadAgentDefinition } from "./agent-loader.js";
5
- import { buildToolSet } from "./tools/index.js";
6
+ import { assembleSystemPrompt } from "./agent-loader.js";
7
+ import { resolveRoleTools, getGraphState, getGraphDeps } from "./tools/index.js";
6
8
  import { runAgenticLoop } from "./agentic-loop.js";
9
+ import { PreflightContextInjector } from "../graph/preflight-injector.js";
10
+ import { graphPipelineLifecycle } from "../graph/pipeline-lifecycle.js";
11
+ import { ensureDir } from "../utils/fs.js";
12
+ import { emit } from "../telemetry/emit.js";
7
13
  // ── Constants ──────────────────────────────────────────────────────
8
14
  const CURATOR_MAX_TURNS = 25;
9
15
  // ── Main ───────────────────────────────────────────────────────────
@@ -22,27 +28,32 @@ const CURATOR_MAX_TURNS = 25;
22
28
  * @returns A SprintBriefing with curated codebase context.
23
29
  */
24
30
  export async function runCurator(contract, spec, completedSprints, projectRoot, config) {
25
- const contractId = contract.id;
26
- logger.sprint(contractId, `Curating: ${contract.feature}`);
27
- // Load agent definition (system prompt from .md file)
28
- const agentDef = await loadAgentDefinition("bober-curator", projectRoot);
31
+ const contractId = contract.contractId;
32
+ logger.sprint(contractId, `Curating: ${contract.title}`);
33
+ // Sprint 28 telemetry: emit agent-spawn at entry (fire-and-forget)
34
+ void emit(projectRoot, config, "agent-spawn", { agentName: "curator", contractId });
29
35
  // Curator uses its own model config, falling back to planner model
30
36
  const curatorConfig = config.curator;
31
37
  const curatorModel = curatorConfig?.model ?? config.planner.model;
32
38
  const model = resolveModel(curatorModel);
33
39
  const curatorMaxTurns = curatorConfig?.maxTurns ?? CURATOR_MAX_TURNS;
34
- // Curator gets read-only tools (same as planner)
35
- const toolSet = buildToolSet("planner", projectRoot);
40
+ // Curator gets read-only tools. When graph is enabled and ready,
41
+ // bash/grep/glob are removed and graph_* tools are added (ADR-8).
42
+ const graphState = getGraphState(config);
43
+ const graphDeps = graphState.engineHealth === "ready" ? getGraphDeps() : undefined;
44
+ const toolSet = resolveRoleTools("curator", projectRoot, graphState, graphDeps ?? undefined);
45
+ // Assemble system prompt with graph-prompt decoration (ADR-5, Sprint 7).
46
+ const systemPrompt = await assembleSystemPrompt("curator", "bober-curator", projectRoot, graphState);
36
47
  const client = createClient(curatorConfig?.provider ?? config.planner.provider ?? null, curatorConfig?.endpoint ?? config.planner.endpoint ?? null, curatorConfig?.providerConfig ?? config.planner.providerConfig, curatorModel, "Curator");
37
48
  // Build the completed sprints summary
38
49
  const completedSummary = completedSprints.length > 0
39
50
  ? completedSprints
40
- .map((s) => `- Sprint "${s.feature}" (${s.id}): ${s.description}`)
51
+ .map((s) => `- Sprint "${s.title}" (${s.contractId}): ${s.description}`)
41
52
  .join("\n")
42
53
  : "No prior sprints completed.";
43
54
  // Build the contract JSON for the curator's context
44
55
  const contractJson = JSON.stringify(contract, null, 2);
45
- const userMessage = `# Sprint Contract
56
+ const baseUserMessage = `# Sprint Contract
46
57
 
47
58
  ${contractJson}
48
59
 
@@ -51,7 +62,7 @@ ${contractJson}
51
62
  **Plan:** ${spec.title}
52
63
  **Description:** ${spec.description}
53
64
  **Tech Stack:** ${spec.techStack.join(", ") || "Not specified"}
54
- **Project Type:** ${spec.projectType}
65
+ **Project Type:** ${spec.mode}
55
66
 
56
67
  # Completed Sprints
57
68
 
@@ -84,12 +95,35 @@ Your final response must contain ONLY a JSON object (no markdown fences):
84
95
  "utilsIdentified": <number>,
85
96
  "summary": "<2-3 sentence summary>"
86
97
  }`;
98
+ // Pre-flight graph context injection (ADR-9 — special Curator case).
99
+ // Curator: write pre-flight content to .bober/briefings/<contractId>-briefing.md
100
+ // and reference it in the user message. The curator's own exploration output
101
+ // appends to the same file during the agentic loop.
102
+ const graphClient = graphPipelineLifecycle.getGraphClient();
103
+ const preflightInjector = new PreflightContextInjector(graphClient, config.graph);
104
+ const preflightPath = `.bober/briefings/${contractId}-briefing.md`;
105
+ // Pass "" as firstMessage — we only want the pre-flight content itself (not prepended to anything).
106
+ const preflightContent = await preflightInjector.inject("curator", contract, "");
107
+ let preflightNotice = "";
108
+ if (preflightContent.trim().length > 0) {
109
+ try {
110
+ const absPath = resolve(projectRoot, preflightPath);
111
+ await ensureDir(resolve(absPath, ".."));
112
+ await writeFile(absPath, preflightContent, "utf-8");
113
+ preflightNotice = `\n\n# Graph Pre-Flight Context\n\nA graph pre-flight analysis has been prepared at ${preflightPath} — read it FIRST as part of your codebase exploration. It contains relevant graph queries (callers, tests, search results) to accelerate your analysis.\n`;
114
+ logger.debug(`[curator] Pre-flight graph context written to ${preflightPath}`);
115
+ }
116
+ catch (err) {
117
+ logger.debug(`[curator] Pre-flight write failed (non-blocking): ${err instanceof Error ? err.message : String(err)}`);
118
+ }
119
+ }
120
+ const userMessage = `${baseUserMessage}${preflightNotice}`;
87
121
  logger.info(`Calling curator model (${curatorModel} → ${model})...`);
88
122
  const filesRead = new Set();
89
123
  const result = await runAgenticLoop({
90
124
  client,
91
125
  model,
92
- systemPrompt: agentDef.systemPrompt,
126
+ systemPrompt,
93
127
  userMessage,
94
128
  tools: toolSet.schemas,
95
129
  toolHandlers: toolSet.handlers,
@@ -107,6 +141,23 @@ Your final response must contain ONLY a JSON object (no markdown fences):
107
141
  },
108
142
  });
109
143
  logger.debug(`Curator completed in ${result.turnsUsed} turns (${result.toolsCalled.length} tool calls)`);
144
+ // Token-usage capture (graph integration sprint 2, s2-c8).
145
+ // Mirrors the cumulative-usage pattern from src/orchestrator/agentic-loop.ts:117-118.
146
+ // Failure to write must NOT break curation — swallow errors.
147
+ try {
148
+ const { TokenUsageLog } = await import("../graph/token-usage.js");
149
+ await new TokenUsageLog(projectRoot).append({
150
+ agent: "curator",
151
+ runId: contractId,
152
+ timestamp: new Date().toISOString(),
153
+ inputTokens: result.usage.inputTokens,
154
+ outputTokens: result.usage.outputTokens,
155
+ graphEnabled: config.graph?.enabled === true,
156
+ });
157
+ }
158
+ catch (err) {
159
+ logger.debug(`Token usage capture failed (curator): ${err instanceof Error ? err.message : String(err)}`);
160
+ }
110
161
  return parseCuratorResult(result.finalText, contractId, filesRead);
111
162
  }
112
163
  // ── JSON parser ────────────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"curator-agent.js","sourceRoot":"","sources":["../../src/orchestrator/curator-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curator-agent.js","sourceRoot":"","sources":["../../src/orchestrator/curator-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Command classifier for the deploy module (Sprint 20).
3
+ *
4
+ * classifyCommand(commandText) returns 'safe' | 'risky' based solely on the
5
+ * COMMAND CONTENT — never on the agent's self-declared classification.
6
+ *
7
+ * This is the safety guarantee against multi-command Bash invocations such as
8
+ * `echo 'safe' && kubectl scale ...`. The classifier scans the entire command
9
+ * string for state-mutating verbs before any execution occurs.
10
+ *
11
+ * Pattern sources:
12
+ * - agents/bober-diagnoser.md:188-198 (forbidden command list)
13
+ * - skills/bober.runbook/SKILL.md (risky-step examples)
14
+ * - Sprint 20 contract evaluatorNotes: multi-command gate requirement.
15
+ *
16
+ * Default-deny: when in doubt, classify risky.
17
+ */
18
+ /**
19
+ * Classify a command string by blast radius.
20
+ *
21
+ * Rules:
22
+ * 1. Scan the full command string for any risky pattern (takes priority over allowlist).
23
+ * 2. If no risky pattern matched AND the command has no chain operators (&&/||/;/|),
24
+ * check if it matches the safe allowlist.
25
+ * 3. When in doubt → risky (default-deny).
26
+ *
27
+ * @param commandText - The raw shell command string.
28
+ * @returns 'safe' if the command is confirmed read-only/reversible; 'risky' otherwise.
29
+ */
30
+ export declare function classifyCommand(commandText: string): "safe" | "risky";
31
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/deploy/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyDH;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAyBrE"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Command classifier for the deploy module (Sprint 20).
3
+ *
4
+ * classifyCommand(commandText) returns 'safe' | 'risky' based solely on the
5
+ * COMMAND CONTENT — never on the agent's self-declared classification.
6
+ *
7
+ * This is the safety guarantee against multi-command Bash invocations such as
8
+ * `echo 'safe' && kubectl scale ...`. The classifier scans the entire command
9
+ * string for state-mutating verbs before any execution occurs.
10
+ *
11
+ * Pattern sources:
12
+ * - agents/bober-diagnoser.md:188-198 (forbidden command list)
13
+ * - skills/bober.runbook/SKILL.md (risky-step examples)
14
+ * - Sprint 20 contract evaluatorNotes: multi-command gate requirement.
15
+ *
16
+ * Default-deny: when in doubt, classify risky.
17
+ */
18
+ /** Risky patterns — matched against the full command string.
19
+ * Most-specific patterns listed first to avoid false positives on substrings. */
20
+ const RISKY_PATTERNS = [
21
+ // kubectl mutators
22
+ /\bkubectl\s+(delete|apply|patch|edit|scale|rollout|exec\b.*--\s+(?!.*\bget\b))/,
23
+ // docker mutators
24
+ /\bdocker\s+(rm|stop|kill|restart|run|exec\b.*(?:bash|sh))/,
25
+ // git mutators
26
+ /\bgit\s+(reset\s+--hard|push|rebase|commit|revert|clean)/,
27
+ // terraform / helm
28
+ /\b(terraform\s+(apply|destroy)|helm\s+(install|upgrade|uninstall|rollback))\b/,
29
+ // file mutation: rm, rmdir, mv, cp with overwrite intent
30
+ /(?:^|\s)(rm|rmdir)\s+/,
31
+ /(?:^|\s)(mv|cp)\s+.*\s+\S+/, // mv/cp with destination argument (potential overwrite)
32
+ // shell redirect to file (> or >>)
33
+ /(?:^|[\s;|&])[^>]*>[>]?\s*\S+/,
34
+ // chmod / chown
35
+ /\bchmod\b|\bchown\b/,
36
+ // service / process control
37
+ /\bsystemctl\s+(start|stop|restart|enable|disable|mask|unmask)\b/,
38
+ /\bservice\s+\S+\s+(start|stop|restart)\b/,
39
+ /\b(kill|pkill|killall)\b/,
40
+ // package install
41
+ /\b(npm\s+install|pip\s+install|apt(\s+|-get\s+)install|brew\s+install|yarn\s+add|gem\s+install|cargo\s+install)\b/,
42
+ // privilege escalation
43
+ /(?:^|\s)sudo\s+/,
44
+ // state-mutating HTTP
45
+ /\bcurl\b[^|]*\s-X\s+(POST|PUT|PATCH|DELETE)\b/i,
46
+ // wget downloading executables (heuristic)
47
+ /\bwget\s+[^|]*\.(sh|bin|exe)\b/i,
48
+ // AWS mutation
49
+ /\baws\s+(ec2|elbv2|route53)\s+(create|delete|modify|put|update)/i,
50
+ // GCloud mutation
51
+ /\bgcloud\s+\S+\s+(create|delete|update|set)\b/i,
52
+ // Database migrations (heuristic — covers common runners)
53
+ /\b(flyway\s+migrate|liquibase\s+update|alembic\s+upgrade|rake\s+db:migrate|knex\s+migrate)\b/i,
54
+ // Secret rotation (heuristic)
55
+ /\b(vault\s+(rotate|write|delete)|aws\s+secretsmanager\s+(rotate|put|delete|update))\b/i,
56
+ ];
57
+ /**
58
+ * Safe explicit allowlist — used as SHORT-CIRCUIT only when the ENTIRE command
59
+ * matches (no chain operators present). Any command with && / || / ; chains is
60
+ * evaluated via RISKY_PATTERNS first before reaching this list.
61
+ */
62
+ const SAFE_SINGLE_COMMAND_PATTERNS = [
63
+ /^kubectl\s+(get|describe|logs|top|version|config\s+view)\b[^&;|]*$/,
64
+ /^docker\s+(ps|logs|inspect|images|version)\b[^&;|]*$/,
65
+ /^(grep|rg|ag|find|cat|head|tail|less|wc|awk|jq|yq)\b[^&;|]*$/,
66
+ /^git\s+(log|diff|show|blame|status|rev-parse|describe)\b[^&;|]*$/,
67
+ /^curl\b(?![^|]*\s-X\s+(POST|PUT|PATCH|DELETE))[^&;|]*$/i,
68
+ /^(ps|top|htop|lsof|netstat|ss|dig|nslookup|host|ping|traceroute|df|du|free|uname|uptime|date)\b[^&;|]*$/,
69
+ /^(sed\s+-n|awk)\b[^&;|]*$/, // read-only sed (-n only)
70
+ ];
71
+ /**
72
+ * Classify a command string by blast radius.
73
+ *
74
+ * Rules:
75
+ * 1. Scan the full command string for any risky pattern (takes priority over allowlist).
76
+ * 2. If no risky pattern matched AND the command has no chain operators (&&/||/;/|),
77
+ * check if it matches the safe allowlist.
78
+ * 3. When in doubt → risky (default-deny).
79
+ *
80
+ * @param commandText - The raw shell command string.
81
+ * @returns 'safe' if the command is confirmed read-only/reversible; 'risky' otherwise.
82
+ */
83
+ export function classifyCommand(commandText) {
84
+ const trimmed = commandText.trim();
85
+ if (trimmed.length === 0)
86
+ return "safe"; // empty / no-op
87
+ // Step 1: Scan for risky patterns first — this catches multi-command invocations.
88
+ for (const pattern of RISKY_PATTERNS) {
89
+ if (pattern.test(trimmed))
90
+ return "risky";
91
+ }
92
+ // Step 2: If no risky pattern matched, check if the whole command is a known-safe single command.
93
+ // A command with chain operators (&&, ||, ;, |) that passed risky-scan is still examined:
94
+ // pipe (|) alone can be safe (e.g., kubectl get pods | head) but && / || / ; chains to
95
+ // other commands need more scrutiny. Here we allow simple pipes to safe commands.
96
+ const hasRiskyChainOperator = /&&|\|\|/.test(trimmed);
97
+ const hasSemicolon = /;(?!\s*$)/.test(trimmed); // semicolons not at end
98
+ if (!hasRiskyChainOperator && !hasSemicolon) {
99
+ // Strip any trailing pipe chain and classify the base command.
100
+ const baseCommand = trimmed.split("|")[0].trim();
101
+ for (const safe of SAFE_SINGLE_COMMAND_PATTERNS) {
102
+ if (safe.test(baseCommand))
103
+ return "safe";
104
+ }
105
+ }
106
+ // Step 3: When in doubt, classify risky (default-deny).
107
+ return "risky";
108
+ }
109
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/orchestrator/deploy/classify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;kFACkF;AAClF,MAAM,cAAc,GAA0B;IAC5C,mBAAmB;IACnB,gFAAgF;IAChF,kBAAkB;IAClB,2DAA2D;IAC3D,eAAe;IACf,0DAA0D;IAC1D,mBAAmB;IACnB,+EAA+E;IAC/E,yDAAyD;IACzD,uBAAuB;IACvB,4BAA4B,EAAE,wDAAwD;IACtF,mCAAmC;IACnC,+BAA+B;IAC/B,gBAAgB;IAChB,qBAAqB;IACrB,4BAA4B;IAC5B,iEAAiE;IACjE,0CAA0C;IAC1C,0BAA0B;IAC1B,kBAAkB;IAClB,mHAAmH;IACnH,uBAAuB;IACvB,iBAAiB;IACjB,sBAAsB;IACtB,gDAAgD;IAChD,2CAA2C;IAC3C,iCAAiC;IACjC,eAAe;IACf,kEAAkE;IAClE,kBAAkB;IAClB,gDAAgD;IAChD,0DAA0D;IAC1D,+FAA+F;IAC/F,8BAA8B;IAC9B,wFAAwF;CACzF,CAAC;AAEF;;;;GAIG;AACH,MAAM,4BAA4B,GAA0B;IAC1D,oEAAoE;IACpE,sDAAsD;IACtD,8DAA8D;IAC9D,kEAAkE;IAClE,yDAAyD;IACzD,yGAAyG;IACzG,2BAA2B,EAAE,0BAA0B;CACxD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,gBAAgB;IAEzD,kFAAkF;IAClF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC;IAC5C,CAAC;IAED,kGAAkG;IAClG,0FAA0F;IAC1F,uFAAuF;IACvF,kFAAkF;IAClF,MAAM,qBAAqB,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;IACxE,IAAI,CAAC,qBAAqB,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5C,+DAA+D;QAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,4BAA4B,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;gBAAE,OAAO,MAAM,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * executeAction — main entrypoint for the deploy module (Sprint 20).
3
+ *
4
+ * Execution sequence:
5
+ * 0. Validate action shape (inverse required) — throws BEFORE any I/O.
6
+ * 1. Authoritative classification via classifyCommand() — overrides agent's self-declaration.
7
+ * 2. Log proposed action to actions.jsonl for audit.
8
+ * 3. If risky: gate via Tier 2 checkpoint (or auto-approve with warning if allowAutopilotRiskyActions).
9
+ * 4. Write ChangeEntry with status='pending' BEFORE execution.
10
+ * 5. Execute via injected seam.
11
+ * 6. Write ChangeEntry with terminal status ('executed' | 'failed') AFTER execution.
12
+ *
13
+ * Critical invariants:
14
+ * - ChangeEntry is ALWAYS written (even on crash) once execution starts.
15
+ * - inverse.description is REQUIRED and validated up-front (Zod + explicit guard).
16
+ * - The agent's self-declared classification is a HINT; classifyCommand() is authoritative.
17
+ * - allowAutopilotRiskyActions=true skips interactive approval but NOT the audit trail.
18
+ */
19
+ import { type ProposedAction, type ExecutorSeam } from "./types.js";
20
+ import { type RiskyActionConfig } from "./resolve.js";
21
+ export interface ExecuteActionDeps {
22
+ /** Override for tests. Default = execa wrapper (defaultExecutor). */
23
+ executor?: ExecutorSeam;
24
+ /** Override for tests to capture stderr warnings. Default = process.stderr.write. */
25
+ writeWarn?: (msg: string) => void;
26
+ /** Override for tests — injectable clock. Default = () => new Date(). */
27
+ now?: () => Date;
28
+ }
29
+ export interface ExecuteActionResult {
30
+ status: "executed" | "failed" | "aborted";
31
+ reason?: "checkpoint_rejected" | "precondition_failed" | "missing_inverse" | "postcondition_failed";
32
+ durationMs: number;
33
+ error?: string;
34
+ }
35
+ /**
36
+ * Execute a single proposed action under the deploy discipline.
37
+ *
38
+ * @param action - The proposed action (agent's self-classified).
39
+ * @param incidentId - Incident ID for audit trail writes.
40
+ * @param projectRoot - Root path for incident artifact writes.
41
+ * @param config - Pipeline config (controls allowAutopilotRiskyActions + mechanism resolution).
42
+ * @param deps - Optional injection overrides (executor, writeWarn, now).
43
+ */
44
+ export declare function executeAction(action: ProposedAction, incidentId: string, projectRoot: string, config: RiskyActionConfig | undefined, deps?: ExecuteActionDeps): Promise<ExecuteActionResult>;
45
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/deploy/execute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1F,OAAO,EAA4D,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKhH,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,qFAAqF;IACrF,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAID,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,MAAM,CAAC,EAAE,qBAAqB,GAAG,qBAAqB,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;IACpG,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACrC,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAiI9B"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * executeAction — main entrypoint for the deploy module (Sprint 20).
3
+ *
4
+ * Execution sequence:
5
+ * 0. Validate action shape (inverse required) — throws BEFORE any I/O.
6
+ * 1. Authoritative classification via classifyCommand() — overrides agent's self-declaration.
7
+ * 2. Log proposed action to actions.jsonl for audit.
8
+ * 3. If risky: gate via Tier 2 checkpoint (or auto-approve with warning if allowAutopilotRiskyActions).
9
+ * 4. Write ChangeEntry with status='pending' BEFORE execution.
10
+ * 5. Execute via injected seam.
11
+ * 6. Write ChangeEntry with terminal status ('executed' | 'failed') AFTER execution.
12
+ *
13
+ * Critical invariants:
14
+ * - ChangeEntry is ALWAYS written (even on crash) once execution starts.
15
+ * - inverse.description is REQUIRED and validated up-front (Zod + explicit guard).
16
+ * - The agent's self-declared classification is a HINT; classifyCommand() is authoritative.
17
+ * - allowAutopilotRiskyActions=true skips interactive approval but NOT the audit trail.
18
+ */
19
+ import { appendChange, appendTimeline, appendAction } from "../../incident/timeline.js";
20
+ import { ProposedActionSchema } from "./types.js";
21
+ import { classifyCommand } from "./classify.js";
22
+ import { getRiskyActionMechanism, resolveRiskyActionMechanismName } from "./resolve.js";
23
+ import { defaultExecutor } from "./executor.js";
24
+ // ── executeAction ──────────────────────────────────────────────────────────────
25
+ /**
26
+ * Execute a single proposed action under the deploy discipline.
27
+ *
28
+ * @param action - The proposed action (agent's self-classified).
29
+ * @param incidentId - Incident ID for audit trail writes.
30
+ * @param projectRoot - Root path for incident artifact writes.
31
+ * @param config - Pipeline config (controls allowAutopilotRiskyActions + mechanism resolution).
32
+ * @param deps - Optional injection overrides (executor, writeWarn, now).
33
+ */
34
+ export async function executeAction(action, incidentId, projectRoot, config, deps = {}) {
35
+ const executor = deps.executor ?? defaultExecutor;
36
+ const writeWarn = deps.writeWarn ?? ((m) => process.stderr.write(m));
37
+ const now = deps.now ?? (() => new Date());
38
+ // ── Step 0: validate action shape BEFORE any I/O. ───────────────────────────
39
+ // Explicit guard first — throws a clear, test-matchable error for the most
40
+ // critical invariant (inverse required). Then Zod validates the rest.
41
+ const rawAction = action;
42
+ if (!rawAction.inverse?.description ||
43
+ rawAction.inverse.description.trim() === "") {
44
+ throw new Error(`executeAction: action.inverse is required and must be non-empty (action id: ${rawAction.id ?? "unknown"})`);
45
+ }
46
+ // Full schema validation (validates all remaining fields).
47
+ ProposedActionSchema.parse(action);
48
+ // ── Step 1: authoritative classification (overrides agent's self-declared). ──
49
+ // If the command content is risky, the action IS risky regardless of `action.classification`.
50
+ const commandClassification = action.command ? classifyCommand(action.command) : action.classification;
51
+ const isRisky = commandClassification === "risky" || action.classification === "risky";
52
+ // ── Step 2: log proposed action (always, for audit trail). ─────────────────
53
+ await appendAction(projectRoot, incidentId, {
54
+ timestamp: now().toISOString(),
55
+ action: action.description,
56
+ blastRadius: isRisky ? "risky" : "safe",
57
+ requiresApproval: isRisky,
58
+ rationale: action.reasoning,
59
+ });
60
+ // ── Step 3: if risky, gate via Tier 2 checkpoint. ──────────────────────────
61
+ if (isRisky) {
62
+ const allow = config?.pipeline?.allowAutopilotRiskyActions === true;
63
+ const mechanismName = resolveRiskyActionMechanismName(config, true, action.id);
64
+ if (allow) {
65
+ // Auto-approve with STERN warning to stderr. Audit trail STILL written below.
66
+ writeWarn(`[bober deploy] WARN allowAutopilotRiskyActions=true — auto-approved risky action ${action.id}: ` +
67
+ `${action.description}. Inverse recorded: "${action.inverse.description}". ` +
68
+ `Mechanism would have been: ${mechanismName}.\n`);
69
+ }
70
+ else {
71
+ const mech = getRiskyActionMechanism(config, true, action.id);
72
+ const outcome = await mech.request(`risky-action-${action.id}`, {
73
+ kind: "risky-action",
74
+ actionId: action.id,
75
+ description: action.description,
76
+ classification: "risky",
77
+ classificationReasoning: action.reasoning,
78
+ command: action.command,
79
+ inverse: action.inverse,
80
+ });
81
+ // Handle all three CheckpointOutcome variants.
82
+ if ("approved" in outcome && outcome.approved === false) {
83
+ await appendTimeline(projectRoot, incidentId, {
84
+ timestamp: now().toISOString(),
85
+ eventKind: "action_aborted",
86
+ source: "deployer",
87
+ summary: `Action ${action.id} rejected at checkpoint: ${outcome.feedback}`,
88
+ });
89
+ return { status: "aborted", reason: "checkpoint_rejected", durationMs: 0 };
90
+ }
91
+ if ("edit" in outcome) {
92
+ // The operator modified the command via checkpoint edit. Log the modification.
93
+ // Re-classification of the modified command is deferred to Sprint 24 (full /bober-incident flow).
94
+ // For now, treat as approved and proceed with the original action.
95
+ writeWarn(`[bober deploy] INFO checkpoint edit received for action ${action.id}. ` +
96
+ `Edit delta recorded; proceeding with original command.\n`);
97
+ }
98
+ // If neither rejected nor edited, fall through — approved=true.
99
+ }
100
+ }
101
+ // ── Step 4: write ChangeEntry with status='pending' BEFORE execution. ───────
102
+ const startedAt = now().toISOString();
103
+ const pendingEntry = {
104
+ id: action.id,
105
+ type: isRisky ? "risky-action" : "safe-action",
106
+ executedAt: startedAt,
107
+ description: action.description,
108
+ inverse: action.inverse,
109
+ status: "pending",
110
+ };
111
+ await appendChange(projectRoot, incidentId, pendingEntry);
112
+ // ── Step 5: execute via injected seam. ──────────────────────────────────────
113
+ const startTime = Date.now();
114
+ let exitCode = 0;
115
+ let stderr = "";
116
+ let crashed = false;
117
+ try {
118
+ if (action.command) {
119
+ const r = await executor.run(action.command);
120
+ exitCode = r.exitCode;
121
+ stderr = r.stderr;
122
+ }
123
+ }
124
+ catch (err) {
125
+ crashed = true;
126
+ stderr = err instanceof Error ? err.message : String(err);
127
+ }
128
+ const durationMs = Date.now() - startTime;
129
+ // ── Step 6: write ChangeEntry with terminal status AFTER execution. ──────────
130
+ // Written even if the executor crashed — the audit trail is preserved.
131
+ const finalStatus = crashed || exitCode !== 0 ? "failed" : "executed";
132
+ const finalEntry = {
133
+ id: action.id,
134
+ type: isRisky ? "risky-action" : "safe-action",
135
+ executedAt: now().toISOString(),
136
+ description: action.description,
137
+ inverse: action.inverse,
138
+ status: finalStatus,
139
+ };
140
+ await appendChange(projectRoot, incidentId, finalEntry);
141
+ if (finalStatus === "failed") {
142
+ return { status: "failed", durationMs, error: stderr };
143
+ }
144
+ return { status: "executed", durationMs };
145
+ }
146
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/orchestrator/deploy/execute.ts"],"names":[],"mappings":"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"}