agent-bober 0.12.0 → 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 (518) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/README.md +112 -3
  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 +89 -1
  9. package/agents/bober-generator.md +68 -3
  10. package/agents/bober-planner.md +39 -0
  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/graph.d.ts +8 -0
  26. package/dist/cli/commands/graph.d.ts.map +1 -0
  27. package/dist/cli/commands/graph.js +219 -0
  28. package/dist/cli/commands/graph.js.map +1 -0
  29. package/dist/cli/commands/impact.d.ts +19 -0
  30. package/dist/cli/commands/impact.d.ts.map +1 -0
  31. package/dist/cli/commands/impact.js +191 -0
  32. package/dist/cli/commands/impact.js.map +1 -0
  33. package/dist/cli/commands/incident.d.ts +19 -0
  34. package/dist/cli/commands/incident.d.ts.map +1 -0
  35. package/dist/cli/commands/incident.js +324 -0
  36. package/dist/cli/commands/incident.js.map +1 -0
  37. package/dist/cli/commands/init.js +36 -1
  38. package/dist/cli/commands/init.js.map +1 -1
  39. package/dist/cli/commands/list-approvals.d.ts +16 -0
  40. package/dist/cli/commands/list-approvals.d.ts.map +1 -0
  41. package/dist/cli/commands/list-approvals.js +57 -0
  42. package/dist/cli/commands/list-approvals.js.map +1 -0
  43. package/dist/cli/commands/onboard.d.ts +3 -0
  44. package/dist/cli/commands/onboard.d.ts.map +1 -0
  45. package/dist/cli/commands/onboard.js +190 -0
  46. package/dist/cli/commands/onboard.js.map +1 -0
  47. package/dist/cli/commands/playbook.d.ts +17 -0
  48. package/dist/cli/commands/playbook.d.ts.map +1 -0
  49. package/dist/cli/commands/playbook.js +123 -0
  50. package/dist/cli/commands/playbook.js.map +1 -0
  51. package/dist/cli/commands/postmortem.d.ts +12 -0
  52. package/dist/cli/commands/postmortem.d.ts.map +1 -0
  53. package/dist/cli/commands/postmortem.js +67 -0
  54. package/dist/cli/commands/postmortem.js.map +1 -0
  55. package/dist/cli/commands/reject.d.ts +17 -0
  56. package/dist/cli/commands/reject.d.ts.map +1 -0
  57. package/dist/cli/commands/reject.js +52 -0
  58. package/dist/cli/commands/reject.js.map +1 -0
  59. package/dist/cli/commands/rollback.d.ts +21 -0
  60. package/dist/cli/commands/rollback.d.ts.map +1 -0
  61. package/dist/cli/commands/rollback.js +90 -0
  62. package/dist/cli/commands/rollback.js.map +1 -0
  63. package/dist/cli/commands/run.d.ts +9 -0
  64. package/dist/cli/commands/run.d.ts.map +1 -1
  65. package/dist/cli/commands/run.js +29 -0
  66. package/dist/cli/commands/run.js.map +1 -1
  67. package/dist/cli/commands/telemetry.d.ts +16 -0
  68. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  69. package/dist/cli/commands/telemetry.js +152 -0
  70. package/dist/cli/commands/telemetry.js.map +1 -0
  71. package/dist/cli/commands/worktree.d.ts +12 -0
  72. package/dist/cli/commands/worktree.d.ts.map +1 -0
  73. package/dist/cli/commands/worktree.js +57 -0
  74. package/dist/cli/commands/worktree.js.map +1 -0
  75. package/dist/cli/index.js +50 -0
  76. package/dist/cli/index.js.map +1 -1
  77. package/dist/config/defaults.d.ts.map +1 -1
  78. package/dist/config/defaults.js +27 -0
  79. package/dist/config/defaults.js.map +1 -1
  80. package/dist/config/index.d.ts +1 -1
  81. package/dist/config/index.d.ts.map +1 -1
  82. package/dist/config/index.js +4 -0
  83. package/dist/config/index.js.map +1 -1
  84. package/dist/config/loader.d.ts.map +1 -1
  85. package/dist/config/loader.js +18 -1
  86. package/dist/config/loader.js.map +1 -1
  87. package/dist/config/schema.d.ts +976 -56
  88. package/dist/config/schema.d.ts.map +1 -1
  89. package/dist/config/schema.js +147 -0
  90. package/dist/config/schema.js.map +1 -1
  91. package/dist/graph/artifact-store.d.ts +14 -0
  92. package/dist/graph/artifact-store.d.ts.map +1 -0
  93. package/dist/graph/artifact-store.js +100 -0
  94. package/dist/graph/artifact-store.js.map +1 -0
  95. package/dist/graph/cli.d.ts +49 -0
  96. package/dist/graph/cli.d.ts.map +1 -0
  97. package/dist/graph/cli.js +140 -0
  98. package/dist/graph/cli.js.map +1 -0
  99. package/dist/graph/client.d.ts +64 -0
  100. package/dist/graph/client.d.ts.map +1 -0
  101. package/dist/graph/client.js +216 -0
  102. package/dist/graph/client.js.map +1 -0
  103. package/dist/graph/fallback.d.ts +13 -0
  104. package/dist/graph/fallback.d.ts.map +1 -0
  105. package/dist/graph/fallback.js +57 -0
  106. package/dist/graph/fallback.js.map +1 -0
  107. package/dist/graph/hook-handler.d.ts +50 -0
  108. package/dist/graph/hook-handler.d.ts.map +1 -0
  109. package/dist/graph/hook-handler.js +217 -0
  110. package/dist/graph/hook-handler.js.map +1 -0
  111. package/dist/graph/incidents.d.ts +59 -0
  112. package/dist/graph/incidents.d.ts.map +1 -0
  113. package/dist/graph/incidents.js +22 -0
  114. package/dist/graph/incidents.js.map +1 -0
  115. package/dist/graph/mcp-client.d.ts +51 -0
  116. package/dist/graph/mcp-client.d.ts.map +1 -0
  117. package/dist/graph/mcp-client.js +285 -0
  118. package/dist/graph/mcp-client.js.map +1 -0
  119. package/dist/graph/onboarding-composer.d.ts +30 -0
  120. package/dist/graph/onboarding-composer.d.ts.map +1 -0
  121. package/dist/graph/onboarding-composer.js +275 -0
  122. package/dist/graph/onboarding-composer.js.map +1 -0
  123. package/dist/graph/pipeline-lifecycle.d.ts +86 -0
  124. package/dist/graph/pipeline-lifecycle.d.ts.map +1 -0
  125. package/dist/graph/pipeline-lifecycle.js +329 -0
  126. package/dist/graph/pipeline-lifecycle.js.map +1 -0
  127. package/dist/graph/preflight-budgets.d.ts +52 -0
  128. package/dist/graph/preflight-budgets.d.ts.map +1 -0
  129. package/dist/graph/preflight-budgets.js +78 -0
  130. package/dist/graph/preflight-budgets.js.map +1 -0
  131. package/dist/graph/preflight-injector.d.ts +116 -0
  132. package/dist/graph/preflight-injector.d.ts.map +1 -0
  133. package/dist/graph/preflight-injector.js +538 -0
  134. package/dist/graph/preflight-injector.js.map +1 -0
  135. package/dist/graph/prereq.d.ts +12 -0
  136. package/dist/graph/prereq.d.ts.map +1 -0
  137. package/dist/graph/prereq.js +61 -0
  138. package/dist/graph/prereq.js.map +1 -0
  139. package/dist/graph/prompts.d.ts +42 -0
  140. package/dist/graph/prompts.d.ts.map +1 -0
  141. package/dist/graph/prompts.js +80 -0
  142. package/dist/graph/prompts.js.map +1 -0
  143. package/dist/graph/sandbox.d.ts +19 -0
  144. package/dist/graph/sandbox.d.ts.map +1 -0
  145. package/dist/graph/sandbox.js +25 -0
  146. package/dist/graph/sandbox.js.map +1 -0
  147. package/dist/graph/token-usage.d.ts +21 -0
  148. package/dist/graph/token-usage.d.ts.map +1 -0
  149. package/dist/graph/token-usage.js +22 -0
  150. package/dist/graph/token-usage.js.map +1 -0
  151. package/dist/graph/types.d.ts +129 -0
  152. package/dist/graph/types.d.ts.map +1 -0
  153. package/dist/graph/types.js +12 -0
  154. package/dist/graph/types.js.map +1 -0
  155. package/dist/incident/orchestrator.d.ts +168 -0
  156. package/dist/incident/orchestrator.d.ts.map +1 -0
  157. package/dist/incident/orchestrator.js +279 -0
  158. package/dist/incident/orchestrator.js.map +1 -0
  159. package/dist/incident/playbook-search.d.ts +67 -0
  160. package/dist/incident/playbook-search.d.ts.map +1 -0
  161. package/dist/incident/playbook-search.js +288 -0
  162. package/dist/incident/playbook-search.js.map +1 -0
  163. package/dist/incident/postmortem.d.ts +44 -0
  164. package/dist/incident/postmortem.d.ts.map +1 -0
  165. package/dist/incident/postmortem.js +486 -0
  166. package/dist/incident/postmortem.js.map +1 -0
  167. package/dist/incident/resolution-verify.d.ts +186 -0
  168. package/dist/incident/resolution-verify.d.ts.map +1 -0
  169. package/dist/incident/resolution-verify.js +210 -0
  170. package/dist/incident/resolution-verify.js.map +1 -0
  171. package/dist/incident/rollback.d.ts +137 -0
  172. package/dist/incident/rollback.d.ts.map +1 -0
  173. package/dist/incident/rollback.js +328 -0
  174. package/dist/incident/rollback.js.map +1 -0
  175. package/dist/incident/timeline.d.ts +147 -0
  176. package/dist/incident/timeline.d.ts.map +1 -0
  177. package/dist/incident/timeline.js +452 -0
  178. package/dist/incident/timeline.js.map +1 -0
  179. package/dist/incident/types.d.ts +335 -0
  180. package/dist/incident/types.d.ts.map +1 -0
  181. package/dist/incident/types.js +158 -0
  182. package/dist/incident/types.js.map +1 -0
  183. package/dist/index.d.ts +1 -1
  184. package/dist/index.d.ts.map +1 -1
  185. package/dist/index.js +1 -1
  186. package/dist/index.js.map +1 -1
  187. package/dist/mcp/event-stream.d.ts +46 -0
  188. package/dist/mcp/event-stream.d.ts.map +1 -0
  189. package/dist/mcp/event-stream.js +421 -0
  190. package/dist/mcp/event-stream.js.map +1 -0
  191. package/dist/mcp/external-client.d.ts +38 -0
  192. package/dist/mcp/external-client.d.ts.map +1 -0
  193. package/dist/mcp/external-client.js +121 -0
  194. package/dist/mcp/external-client.js.map +1 -0
  195. package/dist/mcp/run-manager.d.ts +74 -9
  196. package/dist/mcp/run-manager.d.ts.map +1 -1
  197. package/dist/mcp/run-manager.js +127 -31
  198. package/dist/mcp/run-manager.js.map +1 -1
  199. package/dist/mcp/server.d.ts.map +1 -1
  200. package/dist/mcp/server.js +56 -0
  201. package/dist/mcp/server.js.map +1 -1
  202. package/dist/mcp/tools/abort-run.d.ts +2 -0
  203. package/dist/mcp/tools/abort-run.d.ts.map +1 -0
  204. package/dist/mcp/tools/abort-run.js +62 -0
  205. package/dist/mcp/tools/abort-run.js.map +1 -0
  206. package/dist/mcp/tools/anchor.js +1 -1
  207. package/dist/mcp/tools/anchor.js.map +1 -1
  208. package/dist/mcp/tools/approve-checkpoint.d.ts +2 -0
  209. package/dist/mcp/tools/approve-checkpoint.d.ts.map +1 -0
  210. package/dist/mcp/tools/approve-checkpoint.js +70 -0
  211. package/dist/mcp/tools/approve-checkpoint.js.map +1 -0
  212. package/dist/mcp/tools/brownfield.js +1 -1
  213. package/dist/mcp/tools/brownfield.js.map +1 -1
  214. package/dist/mcp/tools/get-project-state.d.ts +2 -0
  215. package/dist/mcp/tools/get-project-state.d.ts.map +1 -0
  216. package/dist/mcp/tools/get-project-state.js +107 -0
  217. package/dist/mcp/tools/get-project-state.js.map +1 -0
  218. package/dist/mcp/tools/get-run-status.d.ts +2 -0
  219. package/dist/mcp/tools/get-run-status.d.ts.map +1 -0
  220. package/dist/mcp/tools/get-run-status.js +40 -0
  221. package/dist/mcp/tools/get-run-status.js.map +1 -0
  222. package/dist/mcp/tools/graph-schemas.d.ts +100 -0
  223. package/dist/mcp/tools/graph-schemas.d.ts.map +1 -0
  224. package/dist/mcp/tools/graph-schemas.js +39 -0
  225. package/dist/mcp/tools/graph-schemas.js.map +1 -0
  226. package/dist/mcp/tools/graph.d.ts +19 -0
  227. package/dist/mcp/tools/graph.d.ts.map +1 -0
  228. package/dist/mcp/tools/graph.js +263 -0
  229. package/dist/mcp/tools/graph.js.map +1 -0
  230. package/dist/mcp/tools/incident.d.ts +2 -0
  231. package/dist/mcp/tools/incident.d.ts.map +1 -0
  232. package/dist/mcp/tools/incident.js +246 -0
  233. package/dist/mcp/tools/incident.js.map +1 -0
  234. package/dist/mcp/tools/index.d.ts +38 -18
  235. package/dist/mcp/tools/index.d.ts.map +1 -1
  236. package/dist/mcp/tools/index.js +74 -18
  237. package/dist/mcp/tools/index.js.map +1 -1
  238. package/dist/mcp/tools/list-active-runs.d.ts +2 -0
  239. package/dist/mcp/tools/list-active-runs.d.ts.map +1 -0
  240. package/dist/mcp/tools/list-active-runs.js +35 -0
  241. package/dist/mcp/tools/list-active-runs.js.map +1 -0
  242. package/dist/mcp/tools/list-pending-approvals.d.ts +2 -0
  243. package/dist/mcp/tools/list-pending-approvals.d.ts.map +1 -0
  244. package/dist/mcp/tools/list-pending-approvals.js +40 -0
  245. package/dist/mcp/tools/list-pending-approvals.js.map +1 -0
  246. package/dist/mcp/tools/list-projects.d.ts +2 -0
  247. package/dist/mcp/tools/list-projects.d.ts.map +1 -0
  248. package/dist/mcp/tools/list-projects.js +101 -0
  249. package/dist/mcp/tools/list-projects.js.map +1 -0
  250. package/dist/mcp/tools/list-specs.d.ts +2 -0
  251. package/dist/mcp/tools/list-specs.d.ts.map +1 -0
  252. package/dist/mcp/tools/list-specs.js +48 -0
  253. package/dist/mcp/tools/list-specs.js.map +1 -0
  254. package/dist/mcp/tools/playbook.d.ts +2 -0
  255. package/dist/mcp/tools/playbook.d.ts.map +1 -0
  256. package/dist/mcp/tools/playbook.js +104 -0
  257. package/dist/mcp/tools/playbook.js.map +1 -0
  258. package/dist/mcp/tools/postmortem.d.ts +2 -0
  259. package/dist/mcp/tools/postmortem.d.ts.map +1 -0
  260. package/dist/mcp/tools/postmortem.js +75 -0
  261. package/dist/mcp/tools/postmortem.js.map +1 -0
  262. package/dist/mcp/tools/react.js +1 -1
  263. package/dist/mcp/tools/react.js.map +1 -1
  264. package/dist/mcp/tools/reject-checkpoint.d.ts +2 -0
  265. package/dist/mcp/tools/reject-checkpoint.d.ts.map +1 -0
  266. package/dist/mcp/tools/reject-checkpoint.js +79 -0
  267. package/dist/mcp/tools/reject-checkpoint.js.map +1 -0
  268. package/dist/mcp/tools/rollback.d.ts +2 -0
  269. package/dist/mcp/tools/rollback.d.ts.map +1 -0
  270. package/dist/mcp/tools/rollback.js +78 -0
  271. package/dist/mcp/tools/rollback.js.map +1 -0
  272. package/dist/mcp/tools/run-in-worktree.d.ts +2 -0
  273. package/dist/mcp/tools/run-in-worktree.d.ts.map +1 -0
  274. package/dist/mcp/tools/run-in-worktree.js +90 -0
  275. package/dist/mcp/tools/run-in-worktree.js.map +1 -0
  276. package/dist/mcp/tools/run.js +1 -1
  277. package/dist/mcp/tools/run.js.map +1 -1
  278. package/dist/mcp/tools/solidity.js +1 -1
  279. package/dist/mcp/tools/solidity.js.map +1 -1
  280. package/dist/mcp/tools/status.d.ts.map +1 -1
  281. package/dist/mcp/tools/status.js +11 -0
  282. package/dist/mcp/tools/status.js.map +1 -1
  283. package/dist/mcp/tools/subscribe-events.d.ts +2 -0
  284. package/dist/mcp/tools/subscribe-events.d.ts.map +1 -0
  285. package/dist/mcp/tools/subscribe-events.js +48 -0
  286. package/dist/mcp/tools/subscribe-events.js.map +1 -0
  287. package/dist/mcp/tools/unsubscribe-events.d.ts +2 -0
  288. package/dist/mcp/tools/unsubscribe-events.d.ts.map +1 -0
  289. package/dist/mcp/tools/unsubscribe-events.js +45 -0
  290. package/dist/mcp/tools/unsubscribe-events.js.map +1 -0
  291. package/dist/orchestrator/agent-loader.d.ts +16 -0
  292. package/dist/orchestrator/agent-loader.d.ts.map +1 -1
  293. package/dist/orchestrator/agent-loader.js +16 -0
  294. package/dist/orchestrator/agent-loader.js.map +1 -1
  295. package/dist/orchestrator/architect-agent.d.ts.map +1 -1
  296. package/dist/orchestrator/architect-agent.js +37 -8
  297. package/dist/orchestrator/architect-agent.js.map +1 -1
  298. package/dist/orchestrator/checkpoints/audit.d.ts +128 -0
  299. package/dist/orchestrator/checkpoints/audit.d.ts.map +1 -0
  300. package/dist/orchestrator/checkpoints/audit.js +272 -0
  301. package/dist/orchestrator/checkpoints/audit.js.map +1 -0
  302. package/dist/orchestrator/checkpoints/feedback-router.d.ts +213 -0
  303. package/dist/orchestrator/checkpoints/feedback-router.d.ts.map +1 -0
  304. package/dist/orchestrator/checkpoints/feedback-router.js +438 -0
  305. package/dist/orchestrator/checkpoints/feedback-router.js.map +1 -0
  306. package/dist/orchestrator/checkpoints/index.d.ts +11 -0
  307. package/dist/orchestrator/checkpoints/index.d.ts.map +1 -0
  308. package/dist/orchestrator/checkpoints/index.js +12 -0
  309. package/dist/orchestrator/checkpoints/index.js.map +1 -0
  310. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts +35 -0
  311. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts.map +1 -0
  312. package/dist/orchestrator/checkpoints/mechanisms/cli.js +153 -0
  313. package/dist/orchestrator/checkpoints/mechanisms/cli.js.map +1 -0
  314. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts +34 -0
  315. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts.map +1 -0
  316. package/dist/orchestrator/checkpoints/mechanisms/disk.js +139 -0
  317. package/dist/orchestrator/checkpoints/mechanisms/disk.js.map +1 -0
  318. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts +141 -0
  319. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts.map +1 -0
  320. package/dist/orchestrator/checkpoints/mechanisms/pr.js +445 -0
  321. package/dist/orchestrator/checkpoints/mechanisms/pr.js.map +1 -0
  322. package/dist/orchestrator/checkpoints/noop.d.ts +12 -0
  323. package/dist/orchestrator/checkpoints/noop.d.ts.map +1 -0
  324. package/dist/orchestrator/checkpoints/noop.js +13 -0
  325. package/dist/orchestrator/checkpoints/noop.js.map +1 -0
  326. package/dist/orchestrator/checkpoints/registry.d.ts +48 -0
  327. package/dist/orchestrator/checkpoints/registry.d.ts.map +1 -0
  328. package/dist/orchestrator/checkpoints/registry.js +89 -0
  329. package/dist/orchestrator/checkpoints/registry.js.map +1 -0
  330. package/dist/orchestrator/checkpoints/renderers/_util.d.ts +50 -0
  331. package/dist/orchestrator/checkpoints/renderers/_util.d.ts.map +1 -0
  332. package/dist/orchestrator/checkpoints/renderers/_util.js +137 -0
  333. package/dist/orchestrator/checkpoints/renderers/_util.js.map +1 -0
  334. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts +15 -0
  335. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts.map +1 -0
  336. package/dist/orchestrator/checkpoints/renderers/code-review.js +66 -0
  337. package/dist/orchestrator/checkpoints/renderers/code-review.js.map +1 -0
  338. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts +15 -0
  339. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts.map +1 -0
  340. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js +40 -0
  341. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js.map +1 -0
  342. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts +15 -0
  343. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts.map +1 -0
  344. package/dist/orchestrator/checkpoints/renderers/eval-result.js +54 -0
  345. package/dist/orchestrator/checkpoints/renderers/eval-result.js.map +1 -0
  346. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts +49 -0
  347. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts.map +1 -0
  348. package/dist/orchestrator/checkpoints/renderers/generator-diff.js +154 -0
  349. package/dist/orchestrator/checkpoints/renderers/generator-diff.js.map +1 -0
  350. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts +15 -0
  351. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts.map +1 -0
  352. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js +59 -0
  353. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js.map +1 -0
  354. package/dist/orchestrator/checkpoints/renderers/plan.d.ts +15 -0
  355. package/dist/orchestrator/checkpoints/renderers/plan.d.ts.map +1 -0
  356. package/dist/orchestrator/checkpoints/renderers/plan.js +34 -0
  357. package/dist/orchestrator/checkpoints/renderers/plan.js.map +1 -0
  358. package/dist/orchestrator/checkpoints/renderers/registry.d.ts +43 -0
  359. package/dist/orchestrator/checkpoints/renderers/registry.d.ts.map +1 -0
  360. package/dist/orchestrator/checkpoints/renderers/registry.js +83 -0
  361. package/dist/orchestrator/checkpoints/renderers/registry.js.map +1 -0
  362. package/dist/orchestrator/checkpoints/renderers/research.d.ts +15 -0
  363. package/dist/orchestrator/checkpoints/renderers/research.d.ts.map +1 -0
  364. package/dist/orchestrator/checkpoints/renderers/research.js +39 -0
  365. package/dist/orchestrator/checkpoints/renderers/research.js.map +1 -0
  366. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts +20 -0
  367. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts.map +1 -0
  368. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js +57 -0
  369. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js.map +1 -0
  370. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts +15 -0
  371. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts.map +1 -0
  372. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js +38 -0
  373. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js.map +1 -0
  374. package/dist/orchestrator/checkpoints/sites.d.ts +22 -0
  375. package/dist/orchestrator/checkpoints/sites.d.ts.map +1 -0
  376. package/dist/orchestrator/checkpoints/sites.js +57 -0
  377. package/dist/orchestrator/checkpoints/sites.js.map +1 -0
  378. package/dist/orchestrator/checkpoints/types.d.ts +51 -0
  379. package/dist/orchestrator/checkpoints/types.d.ts.map +1 -0
  380. package/dist/orchestrator/checkpoints/types.js +9 -0
  381. package/dist/orchestrator/checkpoints/types.js.map +1 -0
  382. package/dist/orchestrator/code-reviewer-agent.d.ts +50 -0
  383. package/dist/orchestrator/code-reviewer-agent.d.ts.map +1 -0
  384. package/dist/orchestrator/code-reviewer-agent.js +283 -0
  385. package/dist/orchestrator/code-reviewer-agent.js.map +1 -0
  386. package/dist/orchestrator/curator-agent.d.ts.map +1 -1
  387. package/dist/orchestrator/curator-agent.js +59 -8
  388. package/dist/orchestrator/curator-agent.js.map +1 -1
  389. package/dist/orchestrator/deploy/classify.d.ts +31 -0
  390. package/dist/orchestrator/deploy/classify.d.ts.map +1 -0
  391. package/dist/orchestrator/deploy/classify.js +109 -0
  392. package/dist/orchestrator/deploy/classify.js.map +1 -0
  393. package/dist/orchestrator/deploy/execute.d.ts +45 -0
  394. package/dist/orchestrator/deploy/execute.d.ts.map +1 -0
  395. package/dist/orchestrator/deploy/execute.js +146 -0
  396. package/dist/orchestrator/deploy/execute.js.map +1 -0
  397. package/dist/orchestrator/deploy/executor.d.ts +22 -0
  398. package/dist/orchestrator/deploy/executor.d.ts.map +1 -0
  399. package/dist/orchestrator/deploy/executor.js +31 -0
  400. package/dist/orchestrator/deploy/executor.js.map +1 -0
  401. package/dist/orchestrator/deploy/index.d.ts +21 -0
  402. package/dist/orchestrator/deploy/index.d.ts.map +1 -0
  403. package/dist/orchestrator/deploy/index.js +21 -0
  404. package/dist/orchestrator/deploy/index.js.map +1 -0
  405. package/dist/orchestrator/deploy/resolve.d.ts +51 -0
  406. package/dist/orchestrator/deploy/resolve.d.ts.map +1 -0
  407. package/dist/orchestrator/deploy/resolve.js +53 -0
  408. package/dist/orchestrator/deploy/resolve.js.map +1 -0
  409. package/dist/orchestrator/deploy/spawn.d.ts +60 -0
  410. package/dist/orchestrator/deploy/spawn.d.ts.map +1 -0
  411. package/dist/orchestrator/deploy/spawn.js +62 -0
  412. package/dist/orchestrator/deploy/spawn.js.map +1 -0
  413. package/dist/orchestrator/deploy/types.d.ts +98 -0
  414. package/dist/orchestrator/deploy/types.d.ts.map +1 -0
  415. package/dist/orchestrator/deploy/types.js +39 -0
  416. package/dist/orchestrator/deploy/types.js.map +1 -0
  417. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
  418. package/dist/orchestrator/evaluator-agent.js +21 -8
  419. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  420. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  421. package/dist/orchestrator/generator-agent.js +21 -8
  422. package/dist/orchestrator/generator-agent.js.map +1 -1
  423. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  424. package/dist/orchestrator/model-resolver.js +3 -1
  425. package/dist/orchestrator/model-resolver.js.map +1 -1
  426. package/dist/orchestrator/observability/index.d.ts +12 -0
  427. package/dist/orchestrator/observability/index.d.ts.map +1 -0
  428. package/dist/orchestrator/observability/index.js +12 -0
  429. package/dist/orchestrator/observability/index.js.map +1 -0
  430. package/dist/orchestrator/observability/merge.d.ts +73 -0
  431. package/dist/orchestrator/observability/merge.d.ts.map +1 -0
  432. package/dist/orchestrator/observability/merge.js +110 -0
  433. package/dist/orchestrator/observability/merge.js.map +1 -0
  434. package/dist/orchestrator/pipeline.d.ts +21 -0
  435. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  436. package/dist/orchestrator/pipeline.js +156 -2
  437. package/dist/orchestrator/pipeline.js.map +1 -1
  438. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  439. package/dist/orchestrator/planner-agent.js +5 -4
  440. package/dist/orchestrator/planner-agent.js.map +1 -1
  441. package/dist/orchestrator/research-agent.d.ts.map +1 -1
  442. package/dist/orchestrator/research-agent.js +46 -9
  443. package/dist/orchestrator/research-agent.js.map +1 -1
  444. package/dist/orchestrator/tools/handlers.d.ts +2 -0
  445. package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
  446. package/dist/orchestrator/tools/handlers.js +1 -1
  447. package/dist/orchestrator/tools/handlers.js.map +1 -1
  448. package/dist/orchestrator/tools/index.d.ts +84 -1
  449. package/dist/orchestrator/tools/index.d.ts.map +1 -1
  450. package/dist/orchestrator/tools/index.js +164 -1
  451. package/dist/orchestrator/tools/index.js.map +1 -1
  452. package/dist/orchestrator/worktree.d.ts +18 -0
  453. package/dist/orchestrator/worktree.d.ts.map +1 -0
  454. package/dist/orchestrator/worktree.js +129 -0
  455. package/dist/orchestrator/worktree.js.map +1 -0
  456. package/dist/providers/anthropic.d.ts +8 -1
  457. package/dist/providers/anthropic.d.ts.map +1 -1
  458. package/dist/providers/anthropic.js +86 -5
  459. package/dist/providers/anthropic.js.map +1 -1
  460. package/dist/providers/factory.d.ts.map +1 -1
  461. package/dist/providers/factory.js +35 -2
  462. package/dist/providers/factory.js.map +1 -1
  463. package/dist/providers/google.d.ts.map +1 -1
  464. package/dist/providers/google.js +5 -0
  465. package/dist/providers/google.js.map +1 -1
  466. package/dist/providers/index.d.ts +1 -1
  467. package/dist/providers/index.d.ts.map +1 -1
  468. package/dist/providers/index.js.map +1 -1
  469. package/dist/providers/openai.d.ts.map +1 -1
  470. package/dist/providers/openai.js +4 -0
  471. package/dist/providers/openai.js.map +1 -1
  472. package/dist/providers/types.d.ts +25 -2
  473. package/dist/providers/types.d.ts.map +1 -1
  474. package/dist/state/approval-state.d.ts +74 -0
  475. package/dist/state/approval-state.d.ts.map +1 -0
  476. package/dist/state/approval-state.js +127 -0
  477. package/dist/state/approval-state.js.map +1 -0
  478. package/dist/state/index.d.ts +3 -0
  479. package/dist/state/index.d.ts.map +1 -1
  480. package/dist/state/index.js +4 -1
  481. package/dist/state/index.js.map +1 -1
  482. package/dist/state/review-state.d.ts +15 -0
  483. package/dist/state/review-state.d.ts.map +1 -0
  484. package/dist/state/review-state.js +51 -0
  485. package/dist/state/review-state.js.map +1 -0
  486. package/dist/state/run-state.d.ts +39 -0
  487. package/dist/state/run-state.d.ts.map +1 -0
  488. package/dist/state/run-state.js +101 -0
  489. package/dist/state/run-state.js.map +1 -0
  490. package/dist/telemetry/emit.d.ts +41 -0
  491. package/dist/telemetry/emit.d.ts.map +1 -0
  492. package/dist/telemetry/emit.js +65 -0
  493. package/dist/telemetry/emit.js.map +1 -0
  494. package/dist/utils/git.d.ts +27 -0
  495. package/dist/utils/git.d.ts.map +1 -1
  496. package/dist/utils/git.js +50 -0
  497. package/dist/utils/git.js.map +1 -1
  498. package/hooks/hooks.json +17 -1
  499. package/hooks/session-start +42 -0
  500. package/package.json +5 -2
  501. package/scripts/check-prereqs.sh +12 -0
  502. package/scripts/e2e-graph-smoke.sh +167 -0
  503. package/scripts/graph-hook.mjs +151 -0
  504. package/scripts/run-kpi-gate.mjs +245 -0
  505. package/scripts/sync-skills.mjs +4 -1
  506. package/skills/bober.code-review/SKILL.md +186 -0
  507. package/skills/bober.debug/SKILL.md +300 -0
  508. package/skills/bober.deploy/SKILL.md +262 -0
  509. package/skills/bober.diagnose/SKILL.md +254 -0
  510. package/skills/bober.graph/SKILL.md +85 -0
  511. package/skills/bober.impact/SKILL.md +101 -0
  512. package/skills/bober.incident/SKILL.md +245 -0
  513. package/skills/bober.onboard/SKILL.md +84 -0
  514. package/skills/bober.plan/SKILL.md +10 -0
  515. package/skills/bober.postmortem/SKILL.md +231 -0
  516. package/skills/bober.runbook/SKILL.md +335 -0
  517. package/skills/bober.using-bober/SKILL.md +133 -0
  518. package/skills/bober.verify/SKILL.md +143 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,219 @@ All notable changes to `agent-bober` will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.15.0] — 2026-05-29
11
+
12
+ ### Added
13
+
14
+ - **Claude Opus 4.8 support** ([#17](https://github.com/BOBER3r/agent-bober/pull/17)): the `opus` shorthand now resolves to `claude-opus-4-8` (1M context, adaptive thinking); added an `opus-4-7` shorthand to pin the previous model.
15
+ - **`@anthropic-ai/sdk` upgraded `0.39.0` → `0.100.1`** to expose the Opus 4.8 request fields, with zero adapter behavior change.
16
+ - **Anthropic prompt caching** (pattern borrowed from nousresearch/hermes-agent): ephemeral `cache_control` breakpoints on the system prompt + recent messages (system-and-last-3, capped at 4 per request), behind `providerConfig.promptCaching` — default **on** for Anthropic, no-op for other providers.
17
+ - **`effort` control**: optional `ChatParams.effort` (`low` | `medium` | `high` | `xhigh` | `max`) forwarded as top-level `output_config.effort`; omitted when unset so the API default (`high` on Opus 4.8) applies. Non-Anthropic adapters ignore it.
18
+ - **Mid-conversation system blocks**: a `SystemUpdateMessage` message variant renders to an Anthropic `mid_conv_system` content block with optional ephemeral `cache_control`; OpenAI and Google adapters handle it best-effort without error.
19
+ - **`bober_list_pending_approvals`**: List all pending careful-flow checkpoints awaiting human
20
+ approval. Accepts optional `{ projectPath?: string }` (must be absolute when supplied; defaults
21
+ to cwd). Returns `[{ checkpointId, ageMs, prompt }]` — identical shape to `bober list-approvals
22
+ --json`. Backed by the new shared `listPendingApprovals(projectRoot)` helper in
23
+ `src/state/approval-state.ts`.
24
+ - **`bober_approve_checkpoint`**: Approve a pending checkpoint over MCP by writing
25
+ `.bober/approvals/<id>.approved.json` with the same payload shape as `bober approve`
26
+ (`{ approvedAt, approverId, editDelta? }`). Accepts `{ checkpointId, projectPath?, editDelta? }`.
27
+ Guards with `pendingExists` before writing. Returns `{ approvedAt, checkpointId }`.
28
+ - **`bober_reject_checkpoint`**: Reject a pending checkpoint over MCP by writing
29
+ `.bober/approvals/<id>.rejected.json` with the same payload shape as `bober reject`
30
+ (`{ rejectedAt, rejecterId, feedback }`). Accepts `{ checkpointId, projectPath?, feedback }`
31
+ (feedback required and non-empty). Guards with `pendingExists` before writing.
32
+ Returns `{ rejectedAt, checkpointId }`.
33
+ - **`bober_list_projects`**: Enumerate bober projects under one or more search roots.
34
+ Accepts `{ searchRoots: string[] }`. Walks each root one level deep; returns
35
+ `[{ projectPath, name, mode?, hasActiveRuns, lastRunAt? }]` for every directory
36
+ containing `bober.config.json`. Unreadable roots are skipped with a stderr warning.
37
+ READ-ONLY — does not instantiate RunManager; reads `.bober/runs/*/state.json` directly.
38
+ - **`bober_list_specs`**: List PlanSpecs in a project. Accepts `{ projectPath }`.
39
+ Reads `.bober/specs/*.json` with loose parsing (invalid files silently skipped).
40
+ Returns `[{ specId, title, status, sprintCount, completedAt? }]`.
41
+ - **`bober_get_project_state`**: Aggregate per-project state counts for the cockpit sidebar.
42
+ Accepts `{ projectPath }`. Returns `{ configExists, activeRunCount, lastRunAt?,
43
+ openIncidentCount, pendingApprovalCount, specCount, mode? }`. READ-ONLY — does not
44
+ instantiate RunManager.
45
+ - All six new tools accept an optional `projectPath` (required for discovery tools; optional
46
+ for approval tools). When supplied, `projectPath` must be absolute — a relative path returns
47
+ a soft-error JSON `{ error: "projectPath must be absolute" }` rather than throwing.
48
+ - **`listPendingApprovals(projectRoot)`** helper extracted from
49
+ `src/cli/commands/list-approvals.ts` into `src/state/approval-state.ts`. Both the CLI and
50
+ the MCP tool `bober_list_pending_approvals` share this helper. Exported from
51
+ `src/state/index.ts` as `listPendingApprovals` / `PendingApprovalRow`.
52
+ - **`readRunStatesFromDisk(projectRoot)`** helper added to `src/state/run-state.ts` as a
53
+ named alias for `listRunStateFiles`. Exported from `src/state/index.ts`. Cockpit discovery
54
+ tools use it to enumerate run states for arbitrary project roots without touching the
55
+ RunManager singleton.
56
+ - MCP tool count: **23 → 29**.
57
+
58
+ - **`bober_run_in_worktree`**: Start a pipeline inside an isolated git worktree on a new branch.
59
+ Input: `{ task: string, allowDirty?: boolean, keepOnSuccess?: boolean }`. Returns
60
+ `{ runId, branch, worktreePath, status: 'running' }` immediately (fire-and-forget like `bober_run`).
61
+ Multiple worktree runs can execute concurrently on the same project. Use `bober_get_run_status`
62
+ to track progress.
63
+ - **`bober worktree run <task>`** CLI subcommand mirroring the MCP tool. Flags:
64
+ `--allow-dirty` (skip uncommitted-changes guard), `--keep-on-success` (retain worktree after success).
65
+ Prints `{ runId, branch, worktreePath, projectRoot }` JSON to stdout.
66
+ - **`runInWorktree(task, projectRoot, config, opts)`** (`src/orchestrator/worktree.ts`): the shared helper
67
+ the CLI and MCP tool both use. Creates a git worktree under `<pipeline.worktreeRoot>/<runId>` on a
68
+ branch derived from `generator.branchPattern`, runs the pipeline inside it, and on success removes
69
+ the worktree per `pipeline.cleanupWorktreeOnSuccess`. On failure (or if `--keep-on-success`/`keepOnSuccess`)
70
+ the worktree is retained for debugging and its path is printed to stderr.
71
+ - **`pipeline.worktreeRoot`** config field: directory (relative to projectRoot) under which
72
+ worktrees are created. Default `.bober/worktrees`.
73
+ - **`pipeline.cleanupWorktreeOnSuccess`** config field: when true (default), remove the worktree
74
+ via `git worktree remove` after a successful run. On failure the worktree is always retained.
75
+ - **`RunState.worktreePath`** and **`RunState.branch`** optional fields. Populated by `runInWorktree`
76
+ before the pipeline starts; surfaced in `bober_get_run_status` output.
77
+ - **`RunManager.startRun(task, projectRoot, config, pipelineFn?, opts?)`** signature extended with
78
+ optional `opts: { runId?, worktreePath?, branch? }`. Existing 3- and 4-arg callers are unchanged.
79
+ - **`git.ts`** helpers: `addWorktree`, `removeWorktree`, `isClean` shelling out to git CLI (no new deps).
80
+
81
+ ### Follow-ups (documented, NOT implemented this sprint)
82
+
83
+ - Garbage collection of orphaned worktrees from prior failed runs (`bober worktree prune`).
84
+ - Worktree-aware bober_status (the cockpit uses bober_get_run_status by runId instead).
85
+ - Cross-worktree merge automation.
86
+
87
+ - **`bober_subscribe_events`**: Subscribe to runId-scoped live events. Input: `{ runId: string, since?: string }`. Returns `{ subscriptionId, status: 'subscribed', startedAt }`. The server begins emitting `bober/events` notifications for every line appended to `.bober/history.jsonl` or `.bober/telemetry/<date>.jsonl` whose `runId` matches the subscription. The optional `since` parameter triggers a one-time backfill of pre-existing events with `timestamp > since`.
88
+ - **`bober_unsubscribe_events`**: Unsubscribe from a runId-scoped event stream. Input: `{ subscriptionId: string }`. Releases file-watch handles when no other subscription is watching the same files. Returns `{ subscriptionId, status: 'unsubscribed' }` or a soft-error `{ error: 'Subscription not found: <id>' }`.
89
+ - **`EventStreamManager`** (`src/mcp/event-stream.ts`): In-process class that tails `.bober/history.jsonl` and `.bober/telemetry/<date>.jsonl` using `fs.watch`. One file-watch handle is shared across all subscriptions watching the same file (reference-counted). Date roll-over is detected via a polling interval (5 s, `unref()`'d). Lines without an extractable `runId` (top-level or `details.runId`) are silently skipped. Per-subscription bounded queue (default 1000) drops the oldest events on overflow; a single `bober/events.dropped` notification with `{ subscriptionId, dropped: N }` is emitted once per overflow window. All diagnostic output is routed to `process.stderr` (stdout is reserved for the MCP JSON-RPC transport).
90
+ - **`pipeline.eventQueueBound`** config field: per-subscription bounded queue limit. Default `1000`, minimum `1`. Readable by the server from `bober.config.json` and passed to `EventStreamManager` at startup.
91
+ - **`bober_list_active_runs`**: Lists all runs tracked by the RunManager. Accepts optional `{ status?: 'running'|'completed'|'failed'|'aborted' }` filter. Returns a JSON array of RunState objects. Omit the filter to get all runs regardless of status.
92
+ - **`bober_get_run_status`**: Fetches the full RunState for a specific run by `runId`. Input: `{ runId: string }` (required). Returns the complete RunState JSON or `{ error: 'Run not found: <runId>' }` when the runId is unknown.
93
+ - **`bober_abort_run`**: Aborts a currently running pipeline run. Input: `{ runId: string, reason?: string }`. Flips `status` to `'aborted'`, persists `abortedAt` and `abortReason` to `state.json`, and returns `{ runId, status: 'aborted', abortedAt }`. Returns `{ error: 'Run not found: <runId>' }` for unknown runs, `{ error: 'Run is not active' }` for non-running runs. Note: this sprint flips state only; forceful in-flight subprocess termination (SIGTERM propagation) is deferred to a future hardening sprint.
94
+ - **`RunState.status`** type union widened to include `'aborted'`; new optional fields `abortedAt?: string` and `abortReason?: string` added.
95
+
96
+ ## [0.14.0] — 2026-05-25
97
+
98
+ Bober Vision — agent-bober becomes a four-mode software engineering teammate
99
+ instead of a single-mode autopilot. The pipeline you already know is Mode 1;
100
+ the other three modes share its scaffolding (planner, evaluator, audit log)
101
+ but pause at different boundaries and operate at different blast radii.
102
+
103
+ The headline change: it is now safe to delegate production-touching work.
104
+ Careful-flow gates every meaningful boundary; Diagnose has a native vocabulary
105
+ for incidents; Postmortem auto-synthesizes from the audit trail.
106
+
107
+ See [VISION.md](./VISION.md) for the full design rationale and example flows.
108
+
109
+ ### Added
110
+
111
+ - **Mode 1 — Autopilot** (unchanged): the existing generator-evaluator loop.
112
+ Use for spikes and greenfield. `bober run`.
113
+ - **Mode 2 — Careful-flow**: checkpoint-gated execution. Every
114
+ research/plan/sprint boundary surfaces a diff and waits for approval via
115
+ CLI prompt, disk marker (`.bober/approvals/*.pending.json`), or GitHub PR.
116
+ Per-run audit log at `.bober/audits/<runId>.jsonl`. New CLI:
117
+ `bober approve <checkpointId>`, `bober reject <checkpointId>`,
118
+ `bober list-approvals`, `bober audit-show <runId>`.
119
+ - **Mode 3 — Diagnose**: production-incident response. Generic observability
120
+ MCP plugin slots (any MCP server matching the schema can supply metrics
121
+ and logs). Structured incident timeline at `.bober/incidents/<id>/`.
122
+ Change-management gates around destructive actions. Playbook library
123
+ searchable by symptom. New CLI: `bober incident [start|status|end|list|abort]`,
124
+ `bober rollback <incidentId>`, `bober playbook [list|show|search]`.
125
+ - **Mode 4 — Postmortem**: auto-synthesized from incident artifacts when an
126
+ incident transitions to `resolved`. Every claim has an inline citation
127
+ back to timeline/changelog/observations. Required sections enforced
128
+ (TL;DR, Impact, Timeline, Root Cause 5-Whys, Contributing Factors, What
129
+ Went Well, What Went Wrong, Action Items). New CLI:
130
+ `bober postmortem [generate|show] <incidentId>`.
131
+ - **Behavioral discipline foundation** (verbatim port of obra/superpowers):
132
+ Iron Laws, Red Flags, Rationalization-Prevention tables, SessionStart
133
+ bootstrap, anti-pattern catalog, AGENTS.md contract. Surfaces as 9 new
134
+ universal skills: `bober.using-bober`, `bober.verify`, `bober.debug`,
135
+ `bober.code-review`, `bober.incident`, `bober.diagnose`, `bober.deploy`,
136
+ `bober.runbook`, `bober.postmortem`. Installed by `agent-bober init` and
137
+ copied to `.claude/commands/`.
138
+ - **4 new agent definitions** in `agents/`: `bober-code-reviewer`,
139
+ `bober-diagnoser`, `bober-deployer`, `bober-postmortemer`.
140
+ - **Opt-in local-only telemetry** (default OFF). When enabled, writes mode-0600
141
+ JSONL events to `.bober/telemetry/<date>.jsonl`. ESLint rule
142
+ (`no-restricted-imports` + `no-restricted-globals`) scoped to
143
+ `src/telemetry/**` blocks all network primitives at lint time. Privacy
144
+ invariant: only IDs, counts, durations, and enums in payloads; never
145
+ user-content strings. New CLI: `bober telemetry [status|purge|export]`.
146
+ - **Config schema migration**: `bober config migrate` rewrites an existing
147
+ `bober.config.json` to explicitly include all new vision-era fields with
148
+ default values. Back-compat parsing handles missing fields automatically —
149
+ the migrate command is informative, not required.
150
+ - **Mode + checkpoint config**: `pipeline.mode` (`autopilot` | `careful`,
151
+ default `autopilot`), `pipeline.checkpointMechanism` (`noop` | `disk` |
152
+ `cli` | `github-pr`, default `noop`). All optional; absence means autopilot.
153
+ - **End-to-end correctness gate**: `tests/e2e/four-modes.test.ts` (11 tests)
154
+ exercises all four modes on a fixture project. Uses the real
155
+ `DiskCheckpointMechanism` (not a mock), spawns the real
156
+ `ExternalMcpServer` subprocess for the MCP protocol boundary, runs the
157
+ real incident lifecycle including `verifyResolution`, and validates the
158
+ auto-generated postmortem against the required-sections + citation rules.
159
+
160
+ ### Changed
161
+
162
+ - `src/cli/commands/init.ts`: `UNIVERSAL_COMMANDS` extended with the 9 new
163
+ vision skills. `agentFiles` extended with the 4 new agent definitions.
164
+ All vision-era surfaces now ship with every brownfield/preset init.
165
+ - `VISION.md`, `README.md`, `AGENTS.md` updated to document the four modes,
166
+ the careful-flow mechanisms, the incident lifecycle, the telemetry
167
+ guarantee, and the slash-command set.
168
+
169
+ ### Tests
170
+
171
+ 563 → **1115 tests passing** across 82 test files (4 pre-existing skipped).
172
+ New test coverage includes: incident timeline + state machine, resolution
173
+ verification, rollback (full + per-step gates), postmortem section/citation
174
+ assertions, playbook search, careful-flow integration, observability MCP
175
+ spawn, deployer change classification + ChangeEntry recording, config
176
+ schema back-compat, telemetry writer (mode-0600, default-off, concurrency,
177
+ privacy), CLI subcommands for config/telemetry.
178
+
179
+ ### Backward compatibility
180
+
181
+ - Existing `bober.config.json` files (pre-vision) parse cleanly with the
182
+ extended schema — all new fields are optional and default to current
183
+ autopilot behavior. No migration required.
184
+ - Existing CLI surface (`bober plan`, `bober sprint`, `bober eval`,
185
+ `bober run`, `bober graph`, etc.) is unchanged.
186
+ - Telemetry defaults OFF. No network egress under any condition; enforced
187
+ statically by ESLint and verified at runtime.
188
+
189
+ ## [0.13.0] — 2026-05-24
190
+
191
+ Graph (tokensave) integration — user-facing CLI commands and slash-command skills for code-graph workflows.
192
+
193
+ ### Added
194
+
195
+ - **`agent-bober graph [init|sync|status]`** — manage the code graph index.
196
+ - `init`: runs `tokensave init`, writes `.bober/graph/manifest.json`. Exits 2 with platform-aware install hint when tokensave is missing.
197
+ - `sync [--force]`: re-indexes changed files (full re-index with `--force`). Updates manifest.
198
+ - `status [--json]`: prints `{ready, indexedFileCount, tokensaveVersion, lastSyncedHeadSha, stale}`. Human-readable or JSON.
199
+ - **`agent-bober onboard`** — generate 5 onboarding markdown files in `.bober/onboarding/` using the code graph (architecture overview, hotspots, knowledge gaps, communities, README). Prints a summary table on completion.
200
+ - **`agent-bober impact <symbol|file>`** — analyse the impact radius of a symbol or file. Writes `.bober/graph/impact/<slug>.md` with sections `# Impact: <target>`, `## Affected symbols`, `## Tests covering this symbol`.
201
+ - **3 new universal skills** (installed in all presets and brownfield):
202
+ - `skills/bober.graph/SKILL.md` (`/bober-graph`) — code graph management
203
+ - `skills/bober.onboard/SKILL.md` (`/bober-onboard`) — onboarding doc generation
204
+ - `skills/bober.impact/SKILL.md` (`/bober-impact`) — impact analysis (with `argument-hint: <symbol|file>`)
205
+ - **`scripts/e2e-graph-smoke.sh`** — end-to-end smoke test script (gates on tokensave binary availability).
206
+ - Architecture document: [`.bober/architecture/arch-20260524-port-code-review-graph-architecture.md`](.bober/architecture/arch-20260524-port-code-review-graph-architecture.md)
207
+
208
+ ### Changed
209
+
210
+ - All 3 graph commands respect `graph.enabled=false` — exit 1 with message: *"Graph integration is disabled. Enable via `graph.enabled: true` in bober.config.json."*
211
+ - `src/cli/commands/init.ts` skill map: `bober.graph`, `bober.onboard`, `bober.impact` added to `UNIVERSAL_COMMANDS` — included in every preset and brownfield init.
212
+
213
+ ### KPI gate result
214
+
215
+ 60% combined reduction (synthetic-fixture baseline; real-pipeline measurement via `node scripts/run-kpi-gate.mjs`).
216
+
217
+ ### Tests
218
+
219
+ 549 → **563 tests passing** (added 14 tests: slug derivation, command success paths, disabled-graph paths, skill bundle frontmatter, init.ts skill inclusion).
220
+
8
221
  ## [0.12.0] — 2026-04-17
9
222
 
10
223
  Tuned for Claude Opus 4.7 — the model now follows instructions literally and
package/README.md CHANGED
@@ -48,6 +48,20 @@ You describe a feature
48
48
 
49
49
  ---
50
50
 
51
+ ## Operating Modes
52
+
53
+ agent-bober operates in four modes — pick the one that matches your situation. See
54
+ [VISION.md](./VISION.md) for full documentation, worked examples, and configuration details.
55
+
56
+ | Mode | When to Use | Entry Point |
57
+ |------|-------------|-------------|
58
+ | **Autopilot** | Feature spikes, greenfield work, no production risk | `bober run` |
59
+ | **Careful-Flow** | Production behavior changes, want checkpoint approval | `bober run --mode careful` |
60
+ | **Diagnose** | Production system is broken right now | `bober incident start` |
61
+ | **Postmortem** | After resolving an incident, generate a retrospective | `bober postmortem generate` |
62
+
63
+ ---
64
+
51
65
  ## Installation
52
66
 
53
67
  ```bash
@@ -60,8 +74,8 @@ npx agent-bober init
60
74
 
61
75
  agent-bober works in multiple environments:
62
76
 
63
- - **Claude Code** -- Plugin with 10 slash commands (`/bober-plan`, `/bober-run`, etc.)
64
- - **Cursor / Windsurf** -- MCP server with 10 tools in the chat interface
77
+ - **Claude Code** -- Plugin with 20+ slash commands (`/bober-plan`, `/bober-run`, etc.)
78
+ - **Cursor / Windsurf** -- MCP server with 37 tools in the chat interface
65
79
  - **Any MCP-compatible IDE** -- MCP server via stdio transport
66
80
  - **Any terminal** -- CLI commands (`npx agent-bober run "feature"`)
67
81
 
@@ -114,6 +128,52 @@ Specialized workflows:
114
128
 
115
129
  ---
116
130
 
131
+ ## Graph (Tokensave) Integration
132
+
133
+ > **Optional.** The graph is an opt-in enhancement — agent-bober's core pipeline (Researcher → Planner → Curator → Generator → Evaluator) works fully without it. Enable it only if you want semantic code search, impact analysis, and auto-generated onboarding docs.
134
+
135
+ agent-bober integrates with [tokensave](https://github.com/aovestdipaperino/tokensave) to build a structural code graph that powers semantic search, impact analysis, and automated onboarding documentation.
136
+
137
+ **Prerequisite — install the `tokensave` binary.** It is a native Rust binary, **not** an npm package, so `npm install -g agent-bober` does **not** install it. Install it separately:
138
+
139
+ ```bash
140
+ # macOS (Homebrew)
141
+ brew install aovestdipaperino/tap/tokensave
142
+ # Windows (Scoop)
143
+ scoop bucket add tokensave https://github.com/aovestdipaperino/scoop-bucket && scoop install tokensave
144
+ # Any platform (Cargo / Rust)
145
+ cargo install tokensave
146
+ ```
147
+
148
+ Required version range: **`>=6.0.0-beta.1 <7.0.0`**. agent-bober verifies this on `agent-bober graph init` and prints the correct install hint if `tokensave` is missing or out of range. If the binary is absent, graph features degrade gracefully and the rest of the pipeline is unaffected.
149
+
150
+ Once `tokensave` is installed, enable the graph by adding a `graph` section to `bober.config.json`:
151
+
152
+ ```json
153
+ {
154
+ "graph": {
155
+ "enabled": true,
156
+ "languageTier": "core"
157
+ }
158
+ }
159
+ ```
160
+
161
+ Once enabled, three new CLI commands and slash commands become available:
162
+
163
+ ```bash
164
+ agent-bober graph init # Initialise the graph index
165
+ agent-bober graph sync # Re-index changed files (--force for full re-index)
166
+ agent-bober graph status # Check graph status (--json for machine-readable)
167
+ agent-bober onboard # Generate .bober/onboarding/ documentation
168
+ agent-bober impact <symbol> # Analyse impact radius and test coverage
169
+ ```
170
+
171
+ In Claude Code, the same workflows are available as slash commands: `/bober-graph`, `/bober-onboard`, `/bober-impact`.
172
+
173
+ For architecture details see: [`.bober/architecture/arch-20260524-port-code-review-graph-architecture.md`](.bober/architecture/arch-20260524-port-code-review-graph-architecture.md)
174
+
175
+ ---
176
+
117
177
  ## Multi-Provider Support
118
178
 
119
179
  agent-bober is **provider-agnostic**. Use any LLM provider for any agent role. Mix and match providers freely -- use one for planning, another for generation, a local model for evaluation.
@@ -163,11 +223,18 @@ npx agent-bober run "feature" --provider openai
163
223
 
164
224
  Provider SDKs (`openai`, `@google/generative-ai`) are **optional peer dependencies** -- install only what you use. Only `@anthropic-ai/sdk` is required by default.
165
225
 
226
+ ### Anthropic features (Claude Opus 4.8)
227
+
228
+ - **Latest model by default.** The `opus` shorthand resolves to **`claude-opus-4-8`** (1M context, adaptive thinking). Pin the previous generation with the `opus-4-7` shorthand.
229
+ - **Prompt caching, on by default.** Multi-turn Anthropic calls reuse a cached system + recent-message prefix (ephemeral `cache_control`, system-and-last-3 strategy), cutting input-token cost. Disable per role with `"providerConfig": { "promptCaching": false }`.
230
+ - **Effort control.** Set `effort` (`low` | `medium` | `high` | `xhigh` | `max`) to trade latency/cost against depth; when omitted, the API default applies (`high` on Opus 4.8). Other providers ignore it.
231
+ - **Mid-conversation system updates.** Instructions can be revised mid-task without breaking the prompt cache (Anthropic `mid_conv_system` blocks).
232
+
166
233
  ---
167
234
 
168
235
  ## MCP Server (Cursor, Windsurf, etc.)
169
236
 
170
- agent-bober includes an MCP (Model Context Protocol) server that exposes all functionality as tools in any MCP-compatible IDE.
237
+ agent-bober includes an MCP (Model Context Protocol) server that exposes **37 tools** across pipeline, run-management, careful-flow approvals, multi-project discovery, incident response, and graph in any MCP-compatible IDE.
171
238
 
172
239
  ### Setup for Cursor
173
240
 
@@ -218,6 +285,13 @@ Add to your Windsurf MCP configuration:
218
285
  | `bober_spec` | read | Read the current PlanSpec |
219
286
  | `bober_principles` | read/write | Read or set project principles |
220
287
  | `bober_config` | read/write | Read or update `bober.config.json` |
288
+ | `bober_list_pending_approvals` · `bober_approve_checkpoint` · `bober_reject_checkpoint` | careful-flow | List / approve / reject checkpoint approvals (careful mode) |
289
+ | `bober_list_active_runs` · `bober_get_run_status` · `bober_abort_run` · `bober_run_in_worktree` | run-mgmt | Manage concurrent and isolated-worktree runs |
290
+ | `bober_subscribe_events` · `bober_unsubscribe_events` | events | Live run event stream |
291
+ | `bober_get_project_state` · `bober_list_projects` · `bober_list_specs` | discovery | Multi-project state + spec discovery |
292
+ | `bober_incident_start` · `bober_incident_status` · `bober_incident_list` · `bober_incident_abort` · `bober_rollback_start` · `bober_postmortem_get` · `bober_playbook_search` · `bober_playbook_list` | incident | Diagnose, roll back, postmortem, and search playbooks |
293
+
294
+ *(37 tools total — the rows above summarize the additional categories beyond the core pipeline tools.)*
221
295
 
222
296
  ---
223
297
 
@@ -300,6 +374,39 @@ npx agent-bober run "feature" # Full autonomous loop
300
374
  npx agent-bober mcp # Start MCP server (Cursor/Windsurf)
301
375
  ```
302
376
 
377
+ #### New Commands (Sprints 9–25)
378
+
379
+ The following commands were added after the initial release. Full reference in [COMMANDS.md](./COMMANDS.md).
380
+
381
+ ```bash
382
+ # Checkpoint approval (careful-flow mode)
383
+ npx agent-bober list-approvals # List pending checkpoints
384
+ npx agent-bober approve <checkpointId> # Approve a checkpoint
385
+ npx agent-bober approve <checkpointId> --edit <file> # Approve with edit delta
386
+ npx agent-bober reject <checkpointId> # Reject a checkpoint
387
+ npx agent-bober audit show <runId> # Show audit log for a run
388
+
389
+ # Incident response
390
+ npx agent-bober incident start '<symptom>' --severity S2 # Start incident
391
+ npx agent-bober incident status <incidentId> # Check status
392
+ npx agent-bober incident end <incidentId> --verified # Mark resolved
393
+ npx agent-bober incident list # List all incidents
394
+ npx agent-bober incident abort <incidentId> --reason "..." # Abort incident
395
+
396
+ # Rollback
397
+ npx agent-bober rollback <incidentId> --dry-run # Preview rollback plan
398
+ npx agent-bober rollback <incidentId> # Execute rollback
399
+
400
+ # Postmortem
401
+ npx agent-bober postmortem generate <incidentId> # Generate retrospective
402
+ npx agent-bober postmortem show <incidentId> # Print retrospective
403
+
404
+ # Playbooks
405
+ npx agent-bober playbook list # List all playbooks
406
+ npx agent-bober playbook show <name> # Show playbook content
407
+ npx agent-bober playbook search '<symptom>' # Search by symptom
408
+ ```
409
+
303
410
  #### Clarification gating
304
411
 
305
412
  When the planner can't fully decompose a feature without more information, it stops with `status: "needs-clarification"` instead of fabricating sprints. The CLI surfaces the open questions and you resolve them via `plan answer`. After the last question is answered the spec auto-promotes to `status: "ready"` and the next `sprint`/`run` proceeds. See the **Architecture** section for the full lifecycle.
@@ -747,6 +854,8 @@ bash scripts/run-eval.sh /path/to/project
747
854
 
748
855
  ## Contributing
749
856
 
857
+ See [AGENTS.md](./AGENTS.md) for contributor discipline including the anti-slop pre-PR checklist.
858
+
750
859
  Contributions are welcome. To set up the development environment:
751
860
 
752
861
  ```bash
@@ -37,6 +37,20 @@ You are being **spawned as a subagent** by the Bober orchestrator. This means:
37
37
 
38
38
  ---
39
39
 
40
+ **IRON LAW:**
41
+
42
+ ```
43
+ NO ADR WITHOUT STRUCTURED TRADEOFF EVIDENCE
44
+ ```
45
+
46
+ Every architectural decision you write down must list ≥2 alternatives with explicit pros AND cons, AND a rationale that names the specific Checkpoint 1 constraint that eliminates the rejected options. A decision presented without rejected alternatives is not a decision — it is a preference dressed up as architecture, and it will be reversed by the first engineer who reads it under pressure.
47
+
48
+ <EXTREMELY-IMPORTANT>
49
+ "I chose Approach A because it's simpler" is a fail. "Checkpoint 1 specified a <100ms latency budget; Approach B requires two network round-trips measured at ~80ms each in src/client/<file>.ts:42; Approach A uses an in-process cache — Approach B is eliminated" is a pass. The constraint must be NAMED, the measurement CITED, and the elimination EXPLICIT.
50
+ </EXTREMELY-IMPORTANT>
51
+
52
+ ---
53
+
40
54
  You are the **Architect** in the Bober multi-agent harness. You produce architecture documents and ADRs. You do NOT write application code — that is the Generator's job.
41
55
 
42
56
  Your output must be useful six months later. No vague references, no temporal language ("currently", "the existing approach"), no jargon without definition.
@@ -484,6 +498,30 @@ Before saving any document, verify:
484
498
  - [ ] Each ADR is under 50 lines
485
499
  - [ ] Executive Summary is 3-5 sentences, no more
486
500
 
501
+ ## Red Flags - STOP
502
+
503
+ - About to present only one approach at Checkpoint 2 (no comparison = not a decision)
504
+ - About to write an ADR with only Pros listed and no Cons (or vice versa)
505
+ - About to describe a component interface in prose instead of a TypeScript signature
506
+ - About to use temporal language ("currently", "the existing approach", "as of now") in the architecture document
507
+ - The Integration Risks table has rows with no severity AND no mitigation
508
+ - About to mark Open Questions as "None" without having checked that all Checkpoint-1 constraints were addressed
509
+ - About to exceed 500 lines for the architecture doc or 50 lines for an ADR
510
+ - An ADR's Rationale does not reference a specific Checkpoint-1 constraint by name
511
+ - **ANY decision in the architecture doc that cannot be defended in a design review by pointing at the rejected alternative and the constraint that killed it**
512
+
513
+ ## Rationalization Prevention
514
+
515
+ | Excuse | Reality |
516
+ |--------|---------|
517
+ | "I'll just pick Approach A — it's obviously better" | Then write down the alternatives you rejected and WHY. If you can't, you don't actually know it's better. |
518
+ | "Pros and cons are obvious — I'll skip them" | The reader six months from now does not have your context. Write them down. |
519
+ | "TypeScript signature is too detailed for a sketch" | Prose interface = invented interface. Generator will not implement what you imagined. |
520
+ | "I'll say 'currently we use X' — everyone knows what that means" | Temporal language ages the doc to uselessness in one sprint. Name X explicitly. |
521
+ | "This risk is unlikely — I'll skip severity" | Unmarked risk = unmitigated risk. Mark it `low` if it's low, but mark it. |
522
+ | "Open Questions section is empty because I resolved everything" | Then write "None — all design questions resolved during the 5-checkpoint flow." Silence ≠ resolution. |
523
+ | "Different words so rule doesn't apply" | Spirit over letter. |
524
+
487
525
  ## What You Must Never Do
488
526
 
489
527
  - Never write application code (TypeScript files, tests, configuration)