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
@@ -0,0 +1,42 @@
1
+ /**
2
+ * AgentGraphPrompts — ADR-5.
3
+ *
4
+ * Per-role system-prompt fragments that teach agents when to prefer graph_* tools.
5
+ * All fragments are static top-level const strings (no interpolation, no I/O).
6
+ *
7
+ * Invariants (ADR-5):
8
+ * - RESEARCHER-PHASE2 fragment is a literal const with ZERO template interpolation.
9
+ * The snapshot test in tests/researcher-phase2-prompt-isolation.test.ts pins
10
+ * the exact bytes. Any edit forces an explicit snapshot update + reviewer ack.
11
+ * - All fragments are <100 words and contain no feature/task/sprint references.
12
+ * - 'disabled' mode returns "" for every role.
13
+ * - decorate() is pure and synchronous — no I/O, no async.
14
+ */
15
+ import type { BoberAgentRole } from "./preflight-injector.js";
16
+ export type AgentPromptMode = "gated" | "dual" | "disabled";
17
+ export declare class AgentGraphPrompts {
18
+ /**
19
+ * Return the prompt fragment for a (role, mode) pair. Returns "" when no
20
+ * fragment exists (e.g. planner, or 'disabled' mode). Callers MUST treat
21
+ * the empty string as "no decoration".
22
+ */
23
+ static fragmentFor(role: BoberAgentRole, mode: AgentPromptMode): string;
24
+ /**
25
+ * Append the role's graph-prompt fragment to baseSystemPrompt.
26
+ *
27
+ * Returns baseSystemPrompt UNCHANGED when:
28
+ * - graph is not enabled, OR
29
+ * - engine health is not 'ready', OR
30
+ * - the fragment for (role, modeForRole(role)) is empty.
31
+ *
32
+ * Otherwise returns `baseSystemPrompt + "\n\n---\n\n" + fragment`.
33
+ *
34
+ * Gating predicate mirrors src/orchestrator/tools/index.ts:204-211 exactly
35
+ * so the prompt surface and tool surface flip atomically.
36
+ */
37
+ static decorate(role: BoberAgentRole, baseSystemPrompt: string, ctx: {
38
+ graphEnabled: boolean;
39
+ engineHealth: string;
40
+ }): string;
41
+ }
42
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/graph/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAI9D,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AA4B5D,qBAAa,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM;IAIvE;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,CACb,IAAI,EAAE,cAAc,EACpB,gBAAgB,EAAE,MAAM,EACxB,GAAG,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GACnD,MAAM;CAOV"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * AgentGraphPrompts — ADR-5.
3
+ *
4
+ * Per-role system-prompt fragments that teach agents when to prefer graph_* tools.
5
+ * All fragments are static top-level const strings (no interpolation, no I/O).
6
+ *
7
+ * Invariants (ADR-5):
8
+ * - RESEARCHER-PHASE2 fragment is a literal const with ZERO template interpolation.
9
+ * The snapshot test in tests/researcher-phase2-prompt-isolation.test.ts pins
10
+ * the exact bytes. Any edit forces an explicit snapshot update + reviewer ack.
11
+ * - All fragments are <100 words and contain no feature/task/sprint references.
12
+ * - 'disabled' mode returns "" for every role.
13
+ * - decorate() is pure and synchronous — no I/O, no async.
14
+ */
15
+ // ── Fragments (top-level const strings — see ADR-5) ───────────────
16
+ const RESEARCHER_PHASE2_GATED = "For codebase exploration use graph_search, graph_query, graph_review_context, and read_file. Bash, grep, and glob are unavailable for this role.";
17
+ const CURATOR_GATED = "You have graph_search, graph_query, graph_review_context. Use them for ALL exploration. read_file is only for reading specific known files. Prefer graph_query(pattern: \"callers_of\", target: <symbol>) over grep when looking for who calls a function.";
18
+ const ARCHITECT_GATED = "You have graph_search, graph_query, graph_review_context. Use them for ALL exploration. Prefer graph_query(pattern: \"imports_of\", target: <symbol>) to map module boundaries and graph_search for high-level structure discovery.";
19
+ const GENERATOR_DUAL = "You have BOTH grep and graph_* tools. Prefer graph_impact(target: <symbol>) before editing any function with callers. Use grep for line-precise edits and known-file inspection.";
20
+ const EVALUATOR_DUAL = "You have BOTH grep and graph_* tools. Prefer graph_changes(since: <baseline>) and graph_impact(target: <symbol>) to triage the diff. Use grep when you need a literal-string search across the working tree.";
21
+ // ── Lookup table ──────────────────────────────────────────────────
22
+ const FRAGMENTS = {
23
+ "planner": {},
24
+ "researcher-phase1": {},
25
+ "researcher-phase2": { gated: RESEARCHER_PHASE2_GATED },
26
+ "curator": { gated: CURATOR_GATED },
27
+ "architect": { gated: ARCHITECT_GATED },
28
+ "generator": { dual: GENERATOR_DUAL },
29
+ "evaluator": { dual: EVALUATOR_DUAL },
30
+ };
31
+ // ── Public API ────────────────────────────────────────────────────
32
+ export class AgentGraphPrompts {
33
+ /**
34
+ * Return the prompt fragment for a (role, mode) pair. Returns "" when no
35
+ * fragment exists (e.g. planner, or 'disabled' mode). Callers MUST treat
36
+ * the empty string as "no decoration".
37
+ */
38
+ static fragmentFor(role, mode) {
39
+ return FRAGMENTS[role]?.[mode] ?? "";
40
+ }
41
+ /**
42
+ * Append the role's graph-prompt fragment to baseSystemPrompt.
43
+ *
44
+ * Returns baseSystemPrompt UNCHANGED when:
45
+ * - graph is not enabled, OR
46
+ * - engine health is not 'ready', OR
47
+ * - the fragment for (role, modeForRole(role)) is empty.
48
+ *
49
+ * Otherwise returns `baseSystemPrompt + "\n\n---\n\n" + fragment`.
50
+ *
51
+ * Gating predicate mirrors src/orchestrator/tools/index.ts:204-211 exactly
52
+ * so the prompt surface and tool surface flip atomically.
53
+ */
54
+ static decorate(role, baseSystemPrompt, ctx) {
55
+ if (!ctx.graphEnabled || ctx.engineHealth !== "ready")
56
+ return baseSystemPrompt;
57
+ const mode = modeForRole(role);
58
+ const fragment = AgentGraphPrompts.fragmentFor(role, mode);
59
+ if (fragment.length === 0)
60
+ return baseSystemPrompt;
61
+ return `${baseSystemPrompt}\n\n---\n\n${fragment}`;
62
+ }
63
+ }
64
+ // ── Per-role mode selection ───────────────────────────────────────
65
+ function modeForRole(role) {
66
+ switch (role) {
67
+ case "researcher-phase2":
68
+ case "curator":
69
+ case "architect":
70
+ return "gated";
71
+ case "generator":
72
+ case "evaluator":
73
+ return "dual";
74
+ case "planner":
75
+ case "researcher-phase1":
76
+ default:
77
+ return "disabled";
78
+ }
79
+ }
80
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/graph/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,qEAAqE;AAErE,MAAM,uBAAuB,GAAG,kJAAkJ,CAAC;AAEnL,MAAM,aAAa,GAAG,4PAA4P,CAAC;AAEnR,MAAM,eAAe,GAAG,qOAAqO,CAAC;AAE9P,MAAM,cAAc,GAAG,kLAAkL,CAAC;AAE1M,MAAM,cAAc,GAAG,8MAA8M,CAAC;AAEtO,qEAAqE;AAErE,MAAM,SAAS,GAAqE;IAClF,SAAS,EAAE,EAAE;IACb,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE;IACvD,SAAS,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACnC,WAAW,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;IACvC,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IACrC,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;CACtC,CAAC;AAEF,qEAAqE;AAErE,MAAM,OAAO,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAoB,EAAE,IAAqB;QAC5D,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,QAAQ,CACb,IAAoB,EACpB,gBAAwB,EACxB,GAAoD;QAEpD,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO;YAAE,OAAO,gBAAgB,CAAC;QAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,gBAAgB,CAAC;QACnD,OAAO,GAAG,gBAAgB,cAAc,QAAQ,EAAE,CAAC;IACrD,CAAC;CACF;AAED,qEAAqE;AAErE,SAAS,WAAW,CAAC,IAAoB;IACvC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,mBAAmB,CAAC;QACzB,KAAK,SAAS,CAAC;QACf,KAAK,WAAW;YACd,OAAO,OAAO,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,mBAAmB,CAAC;QACzB;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Validate a path lives inside projectRoot.
3
+ *
4
+ * Returns `{ok: true, abs}` if `inputPath` resolves to a location
5
+ * within `projectRoot`. Returns `{ok: false}` for:
6
+ * - null/undefined inputs (buggy upstream responses)
7
+ * - paths that resolve outside the project root (e.g. "../../etc/passwd")
8
+ *
9
+ * Mirrors `sandboxPath` from src/orchestrator/tools/handlers.ts:31-45
10
+ * but returns a result envelope instead of throwing — graph code drops
11
+ * out-of-sandbox NodeRefs silently rather than crashing the agent loop.
12
+ */
13
+ export declare function sandboxNodePath(projectRoot: string, inputPath: string | null | undefined): {
14
+ ok: true;
15
+ abs: string;
16
+ } | {
17
+ ok: false;
18
+ };
19
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/graph/sandbox.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAW3C"}
@@ -0,0 +1,25 @@
1
+ import { resolve, relative, isAbsolute } from "node:path";
2
+ /**
3
+ * Validate a path lives inside projectRoot.
4
+ *
5
+ * Returns `{ok: true, abs}` if `inputPath` resolves to a location
6
+ * within `projectRoot`. Returns `{ok: false}` for:
7
+ * - null/undefined inputs (buggy upstream responses)
8
+ * - paths that resolve outside the project root (e.g. "../../etc/passwd")
9
+ *
10
+ * Mirrors `sandboxPath` from src/orchestrator/tools/handlers.ts:31-45
11
+ * but returns a result envelope instead of throwing — graph code drops
12
+ * out-of-sandbox NodeRefs silently rather than crashing the agent loop.
13
+ */
14
+ export function sandboxNodePath(projectRoot, inputPath) {
15
+ if (!inputPath || typeof inputPath !== "string")
16
+ return { ok: false };
17
+ const abs = isAbsolute(inputPath)
18
+ ? resolve(inputPath)
19
+ : resolve(projectRoot, inputPath);
20
+ const rel = relative(projectRoot, abs);
21
+ if (rel.startsWith("..") || isAbsolute(rel))
22
+ return { ok: false };
23
+ return { ok: true, abs };
24
+ }
25
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/graph/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,SAAoC;IAEpC,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAEtE,MAAM,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACpB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEpC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAElE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface TokenUsageRecord {
2
+ agent: "generator" | "researcher-phase2" | "curator" | "architect";
3
+ runId: string;
4
+ timestamp: string;
5
+ inputTokens: number;
6
+ outputTokens: number;
7
+ graphEnabled: boolean;
8
+ }
9
+ /**
10
+ * Append-only writer for .bober/graph/token-usage.jsonl.
11
+ *
12
+ * Each call writes ONE line (one JSON object) per agent run.
13
+ * A metrics-write failure must not break the agent — callers should
14
+ * wrap calls in try/catch and swallow errors.
15
+ */
16
+ export declare class TokenUsageLog {
17
+ private readonly path;
18
+ constructor(projectRoot: string);
19
+ append(r: TokenUsageRecord): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=token-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage.d.ts","sourceRoot":"","sources":["../../src/graph/token-usage.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,GAAG,mBAAmB,GAAG,SAAS,GAAG,WAAW,CAAC;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAID;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;gBAElB,WAAW,EAAE,MAAM;IAIzB,MAAM,CAAC,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjD"}
@@ -0,0 +1,22 @@
1
+ import { appendFile } from "node:fs/promises";
2
+ import { resolve } from "node:path";
3
+ import { ensureDir } from "../utils/fs.js";
4
+ // ── TokenUsageLog ──────────────────────────────────────────────────
5
+ /**
6
+ * Append-only writer for .bober/graph/token-usage.jsonl.
7
+ *
8
+ * Each call writes ONE line (one JSON object) per agent run.
9
+ * A metrics-write failure must not break the agent — callers should
10
+ * wrap calls in try/catch and swallow errors.
11
+ */
12
+ export class TokenUsageLog {
13
+ path;
14
+ constructor(projectRoot) {
15
+ this.path = resolve(projectRoot, ".bober/graph/token-usage.jsonl");
16
+ }
17
+ async append(r) {
18
+ await ensureDir(resolve(this.path, ".."));
19
+ await appendFile(this.path, JSON.stringify(r) + "\n", "utf-8");
20
+ }
21
+ }
22
+ //# sourceMappingURL=token-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-usage.js","sourceRoot":"","sources":["../../src/graph/token-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAa3C,sEAAsE;AAEtE;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACP,IAAI,CAAS;IAE9B,YAAY,WAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,CAAmB;QAC9B,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1C,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;CACF"}
@@ -0,0 +1,129 @@
1
+ import type { z } from "zod";
2
+ import type { GraphSectionSchema } from "../config/schema.js";
3
+ export type GraphSection = z.infer<typeof GraphSectionSchema>;
4
+ export type PrereqResult = {
5
+ ok: true;
6
+ version: string;
7
+ } | {
8
+ ok: false;
9
+ reason: "MISSING" | "INCOMPATIBLE";
10
+ hint: string;
11
+ };
12
+ export type GraphManifest = {
13
+ schemaVersion: 1;
14
+ tokensaveVersion: string;
15
+ createdAt: string;
16
+ lastSyncAt: string;
17
+ indexedFileCount: number;
18
+ languageTier: string;
19
+ lastSyncedHeadSha: string | null;
20
+ pendingFiles: string[];
21
+ };
22
+ export type StalenessVerdict = {
23
+ stale: false;
24
+ } | {
25
+ stale: true;
26
+ reason: "HEAD_DIFFERS" | "NEWER_MTIME" | "NO_MANIFEST";
27
+ detail: string;
28
+ newerFiles?: string[];
29
+ };
30
+ /** Discriminated union for all GraphClient method returns. ADR-3. */
31
+ export type GraphResult<T> = {
32
+ ok: true;
33
+ data: T;
34
+ backend: "mcp" | "binding";
35
+ durationMs: number;
36
+ /** Present only when manifest is stale. Stale data is still data. */
37
+ stale?: true;
38
+ } | {
39
+ ok: false;
40
+ reason: GraphFailureReason;
41
+ detail: string;
42
+ };
43
+ /** Exhaustive set of graph failure modes. Extending this requires a new
44
+ * case in every `switch (reason)` — assertNever enforces this at compile time. */
45
+ export type GraphFailureReason = "GRAPH_DISABLED" | "GRAPH_UNAVAILABLE" | "GRAPH_STALE" | "GRAPH_TIMEOUT" | "GRAPH_ERROR";
46
+ export type NodeRef = {
47
+ id: string;
48
+ kind: "function" | "class" | "module" | "symbol";
49
+ file: string;
50
+ line: number;
51
+ symbol: string;
52
+ };
53
+ export type SearchHit = {
54
+ node: NodeRef;
55
+ score: number;
56
+ snippet: string;
57
+ };
58
+ export type ImpactReport = {
59
+ root: NodeRef;
60
+ affected: NodeRef[];
61
+ testsAffected: NodeRef[];
62
+ };
63
+ export type FallbackHint = {
64
+ message: string;
65
+ suggestedTools: string[];
66
+ retryable: boolean;
67
+ };
68
+ export type PrefetchOp = "search" | "query" | "impact" | "reviewContext" | "overview" | "changes";
69
+ export type PrefetchSpec = {
70
+ key: string;
71
+ op: PrefetchOp;
72
+ /** Op-specific args; GraphClient.prefetch dispatches by `op`. */
73
+ args: unknown;
74
+ };
75
+ export interface OnboardingInputs {
76
+ status: {
77
+ tokensaveVersion: string;
78
+ indexedFileCount: number;
79
+ };
80
+ hotspots: Array<{
81
+ symbol: string;
82
+ file: string;
83
+ line: number;
84
+ score: number;
85
+ reason?: string;
86
+ }>;
87
+ deadCode: Array<{
88
+ symbol: string;
89
+ file: string;
90
+ line: number;
91
+ }>;
92
+ circular: Array<{
93
+ cycle: string[];
94
+ }>;
95
+ largest: Array<{
96
+ symbol: string;
97
+ file: string;
98
+ line: number;
99
+ loc: number;
100
+ }>;
101
+ moduleApis: Array<{
102
+ module: string;
103
+ community?: string;
104
+ symbols: Array<{
105
+ name: string;
106
+ file: string;
107
+ line: number;
108
+ hasInternalCallers: boolean;
109
+ }>;
110
+ }>;
111
+ files: Array<{
112
+ path: string;
113
+ symbols: number;
114
+ }>;
115
+ }
116
+ export interface OnboardingArtifacts {
117
+ readme: string;
118
+ architectureOverview: string;
119
+ hotspots: string;
120
+ knowledgeGaps: string;
121
+ communities: string;
122
+ }
123
+ /**
124
+ * Use as `default: return assertNever(reason);` in switch statements
125
+ * over discriminated unions. If a new variant is added without a case,
126
+ * `tsc --noEmit` fails because the discriminator is no longer `never`.
127
+ */
128
+ export declare function assertNever(x: never): never;
129
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ // Source-of-truth graph types for the harness integration.
2
+ // Mirrors arch-20260524-port-code-review-graph-architecture.md §Data Model.
3
+ // ── Exhaustiveness helper ──────────────────────────────────────────
4
+ /**
5
+ * Use as `default: return assertNever(reason);` in switch statements
6
+ * over discriminated unions. If a new variant is added without a case,
7
+ * `tsc --noEmit` fails because the discriminator is no longer `never`.
8
+ */
9
+ export function assertNever(x) {
10
+ throw new Error(`Unreachable: ${JSON.stringify(x)}`);
11
+ }
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/graph/types.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,4EAA4E;AA4H5E,sEAAsE;AAEtE;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,CAAQ;IAClC,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Incident state machine + phase routing (Sprint 24).
3
+ *
4
+ * Wraps Sprint 19 setIncidentStatus with a GUARDED transition table:
5
+ * invalid transitions reject with a typed error before any disk write.
6
+ *
7
+ * The state machine is deterministic: given (currentPhase, agentOutput),
8
+ * the next phase is fully determined. No human-in-loop required for
9
+ * happy-path autopilot (subject to Tier 2 risky-action gates that fire
10
+ * inside executeAction). This is the integration capstone — no new
11
+ * primitives, only orchestration.
12
+ *
13
+ * Re-open path (resolved → investigating) is the ONLY transition that
14
+ * requires an explicit `reason` arg. Every other transition is implicit
15
+ * from the agent's output.
16
+ *
17
+ * Phase transition diagram:
18
+ *
19
+ * ┌──────────────────────────────────────────────────────┐
20
+ * │ │
21
+ * ▼ │
22
+ * ┌───────────────┐ │
23
+ * │ investigating │ │
24
+ * └───────┬───────┘ │
25
+ * │ │
26
+ * diagnoser produces │
27
+ * nextActions with │
28
+ * ≥1 risky │
29
+ * │ │
30
+ * ▼ │
31
+ * ┌───────────────┐ │
32
+ * │ remediating │ │
33
+ * └───────┬───────┘ │
34
+ * │ │
35
+ * all proposed actions executed │
36
+ * + postcondition passed │
37
+ * │ │
38
+ * ▼ │
39
+ * ┌───────────────┐ ──── verifyResolution fails ─────────────────┤
40
+ * │ monitoring │ │
41
+ * └───────┬───────┘ │
42
+ * │ │
43
+ * verifyResolution.verified=true │
44
+ * for criteria.windowMinutes │
45
+ * │ │
46
+ * ▼ │
47
+ * ┌───────────────┐ ──── user re-opens (reason REQUIRED) ────────┘
48
+ * │ resolved │
49
+ * └───────────────┘ (auto-postmortem triggered by setIncidentStatus)
50
+ *
51
+ * At any phase: user issues `bober incident abort <id> --reason <text> [--confirm-rollback]`
52
+ * ──────────────────────────────────────► aborted (terminal)
53
+ *
54
+ * Sprint 24 — src/incident/orchestrator.ts
55
+ */
56
+ import { type SetStatusOpts } from "./timeline.js";
57
+ import { type IncidentId, type IncidentMetadata, type IncidentPhase } from "./types.js";
58
+ import { type ExecuteRollbackOpts, type RollbackResult } from "./rollback.js";
59
+ import { type ResolutionCriteria, type VerifyResolutionDeps } from "./resolution-verify.js";
60
+ import type { RiskyActionConfig } from "../orchestrator/deploy/resolve.js";
61
+ import type { BoberConfig } from "../config/schema.js";
62
+ export declare class InvalidTransitionError extends Error {
63
+ from: IncidentPhase;
64
+ to: IncidentPhase;
65
+ reasonRequired: boolean;
66
+ constructor(from: IncidentPhase, to: IncidentPhase, reasonRequired?: boolean);
67
+ }
68
+ export interface TransitionOpts {
69
+ reason?: string;
70
+ setStatus?: SetStatusOpts;
71
+ }
72
+ export interface DiagnosisNextAction {
73
+ blastRadius: "safe" | "risky";
74
+ action?: string;
75
+ requiresApproval?: boolean;
76
+ }
77
+ export interface DiagnosisResult {
78
+ nextActions: DiagnosisNextAction[];
79
+ summary?: string;
80
+ }
81
+ export interface ApplyDiagnosisOpts {
82
+ /** Override clock for tests. */
83
+ now?: () => Date;
84
+ }
85
+ export interface ApplyDeploymentDeployedEntry {
86
+ status: "executed" | "failed";
87
+ }
88
+ export interface ApplyDeploymentResult {
89
+ executed: ApplyDeploymentDeployedEntry[];
90
+ }
91
+ export interface ApplyDeploymentOpts {
92
+ /** Forwarded to verifyResolution when monitoring transition is attempted. */
93
+ verifyDeps?: Omit<VerifyResolutionDeps, "projectRoot">;
94
+ resolutionCriteria?: ResolutionCriteria;
95
+ /** Skip verifyResolution call (test seam). */
96
+ skipVerification?: boolean;
97
+ now?: () => Date;
98
+ }
99
+ export interface AbortOpts {
100
+ reason: string;
101
+ confirmRollback?: boolean;
102
+ config?: RiskyActionConfig;
103
+ rollbackOpts?: ExecuteRollbackOpts;
104
+ now?: () => Date;
105
+ /** Sprint 28 — optional BoberConfig for telemetry emit on incident-aborted. */
106
+ boberConfig?: BoberConfig;
107
+ }
108
+ export interface AbortResult {
109
+ rollback?: RollbackResult;
110
+ abortReportPath: string;
111
+ }
112
+ export declare function readIncidentMetadata(projectRoot: string, incidentId: IncidentId): Promise<IncidentMetadata>;
113
+ export declare function transitionPhase(projectRoot: string, incidentId: IncidentId, toPhase: IncidentPhase, opts?: TransitionOpts): Promise<void>;
114
+ /**
115
+ * Inspect a diagnosis output and transition the incident phase accordingly.
116
+ *
117
+ * If any nextAction has blastRadius='risky' → transition to 'remediating'.
118
+ * If nextActions is empty (diagnoser found no remediation needed) → leave at
119
+ * 'investigating'; the operator should call transitionPhase or `bober incident end`.
120
+ * If nextActions has entries but all are safe → leave at 'investigating' (no
121
+ * state-mutating actions are needed; diagnose further or end the incident).
122
+ *
123
+ * Returns { newPhase } — the phase AFTER the call. Callers can use this to
124
+ * branch their own logic.
125
+ */
126
+ export declare function applyDiagnosisOutcome(projectRoot: string, incidentId: IncidentId, diagnosis: DiagnosisResult, _opts?: ApplyDiagnosisOpts): Promise<{
127
+ newPhase: IncidentPhase;
128
+ }>;
129
+ /**
130
+ * After deployment actions complete, transition the incident phase.
131
+ *
132
+ * If all actions executed successfully AND verifyResolution is available:
133
+ * - call verifyResolution
134
+ * - if verified=true → transition to 'monitoring'
135
+ * - Returns { newPhase: 'monitoring', verified: true }
136
+ *
137
+ * Transitioning from monitoring → resolved is the caller's responsibility
138
+ * (the CLI / orchestration layer drives the second transition after the
139
+ * criteria window elapses). This function ONLY moves to monitoring.
140
+ *
141
+ * If verifyDeps is not provided or skipVerification=true:
142
+ * - Transition to monitoring unconditionally (operator is asserting success).
143
+ *
144
+ * If any action failed:
145
+ * - Stay in remediating (return { newPhase: 'remediating', verified: false }).
146
+ */
147
+ export declare function applyDeploymentOutcome(projectRoot: string, incidentId: IncidentId, deployResult: ApplyDeploymentResult, opts?: ApplyDeploymentOpts): Promise<{
148
+ newPhase: IncidentPhase;
149
+ verified?: boolean;
150
+ }>;
151
+ /**
152
+ * Abort an incident at any phase.
153
+ *
154
+ * Writes .bober/incidents/<id>/aborted.txt with reason.
155
+ * Writes .bober/incidents/<id>/abort-report.md with reason + rollback plan.
156
+ * Transitions the incident to status='aborted' (terminal).
157
+ *
158
+ * IF confirmRollback=true: plans + executes rollback for executed-not-rolled-back
159
+ * changes (each step goes through the deploy gate individually).
160
+ * IF confirmRollback=false (default): does NOT execute any rollbacks.
161
+ *
162
+ * Silent rollback on abort is a footgun — confirmRollback=true is the explicit
163
+ * opt-in. Without it, the operator is on the hook for manual cleanup.
164
+ *
165
+ * @throws Error if the incident is already aborted (abort is terminal).
166
+ */
167
+ export declare function abort(projectRoot: string, incidentId: IncidentId, opts: AbortOpts): Promise<AbortResult>;
168
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/incident/orchestrator.ts"],"names":[],"mappings":"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"}