agent-bober 0.12.0 → 0.17.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 (726) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/CHANGELOG.md +243 -0
  4. package/README.md +238 -5
  5. package/agents/bober-architect.md +72 -0
  6. package/agents/bober-code-reviewer.md +238 -0
  7. package/agents/bober-curator.md +49 -0
  8. package/agents/bober-deployer.md +267 -0
  9. package/agents/bober-diagnoser.md +289 -0
  10. package/agents/bober-documenter.md +129 -0
  11. package/agents/bober-evaluator.md +135 -1
  12. package/agents/bober-generator.md +80 -3
  13. package/agents/bober-planner.md +47 -1
  14. package/agents/bober-postmortemer.md +185 -0
  15. package/agents/bober-researcher.md +38 -0
  16. package/dist/cli/commands/approve.d.ts +17 -0
  17. package/dist/cli/commands/approve.d.ts.map +1 -0
  18. package/dist/cli/commands/approve.js +64 -0
  19. package/dist/cli/commands/approve.js.map +1 -0
  20. package/dist/cli/commands/audit-show.d.ts +14 -0
  21. package/dist/cli/commands/audit-show.d.ts.map +1 -0
  22. package/dist/cli/commands/audit-show.js +85 -0
  23. package/dist/cli/commands/audit-show.js.map +1 -0
  24. package/dist/cli/commands/config.d.ts +10 -0
  25. package/dist/cli/commands/config.d.ts.map +1 -0
  26. package/dist/cli/commands/config.js +73 -0
  27. package/dist/cli/commands/config.js.map +1 -0
  28. package/dist/cli/commands/graph.d.ts +8 -0
  29. package/dist/cli/commands/graph.d.ts.map +1 -0
  30. package/dist/cli/commands/graph.js +219 -0
  31. package/dist/cli/commands/graph.js.map +1 -0
  32. package/dist/cli/commands/impact.d.ts +19 -0
  33. package/dist/cli/commands/impact.d.ts.map +1 -0
  34. package/dist/cli/commands/impact.js +191 -0
  35. package/dist/cli/commands/impact.js.map +1 -0
  36. package/dist/cli/commands/incident.d.ts +19 -0
  37. package/dist/cli/commands/incident.d.ts.map +1 -0
  38. package/dist/cli/commands/incident.js +324 -0
  39. package/dist/cli/commands/incident.js.map +1 -0
  40. package/dist/cli/commands/init.js +40 -1
  41. package/dist/cli/commands/init.js.map +1 -1
  42. package/dist/cli/commands/list-approvals.d.ts +16 -0
  43. package/dist/cli/commands/list-approvals.d.ts.map +1 -0
  44. package/dist/cli/commands/list-approvals.js +57 -0
  45. package/dist/cli/commands/list-approvals.js.map +1 -0
  46. package/dist/cli/commands/memory.d.ts +14 -0
  47. package/dist/cli/commands/memory.d.ts.map +1 -0
  48. package/dist/cli/commands/memory.js +132 -0
  49. package/dist/cli/commands/memory.js.map +1 -0
  50. package/dist/cli/commands/onboard.d.ts +3 -0
  51. package/dist/cli/commands/onboard.d.ts.map +1 -0
  52. package/dist/cli/commands/onboard.js +190 -0
  53. package/dist/cli/commands/onboard.js.map +1 -0
  54. package/dist/cli/commands/playbook.d.ts +17 -0
  55. package/dist/cli/commands/playbook.d.ts.map +1 -0
  56. package/dist/cli/commands/playbook.js +123 -0
  57. package/dist/cli/commands/playbook.js.map +1 -0
  58. package/dist/cli/commands/postmortem.d.ts +12 -0
  59. package/dist/cli/commands/postmortem.d.ts.map +1 -0
  60. package/dist/cli/commands/postmortem.js +67 -0
  61. package/dist/cli/commands/postmortem.js.map +1 -0
  62. package/dist/cli/commands/reject.d.ts +17 -0
  63. package/dist/cli/commands/reject.d.ts.map +1 -0
  64. package/dist/cli/commands/reject.js +52 -0
  65. package/dist/cli/commands/reject.js.map +1 -0
  66. package/dist/cli/commands/rollback.d.ts +21 -0
  67. package/dist/cli/commands/rollback.d.ts.map +1 -0
  68. package/dist/cli/commands/rollback.js +90 -0
  69. package/dist/cli/commands/rollback.js.map +1 -0
  70. package/dist/cli/commands/run.d.ts +9 -0
  71. package/dist/cli/commands/run.d.ts.map +1 -1
  72. package/dist/cli/commands/run.js +29 -0
  73. package/dist/cli/commands/run.js.map +1 -1
  74. package/dist/cli/commands/telemetry.d.ts +16 -0
  75. package/dist/cli/commands/telemetry.d.ts.map +1 -0
  76. package/dist/cli/commands/telemetry.js +152 -0
  77. package/dist/cli/commands/telemetry.js.map +1 -0
  78. package/dist/cli/commands/worktree.d.ts +12 -0
  79. package/dist/cli/commands/worktree.d.ts.map +1 -0
  80. package/dist/cli/commands/worktree.js +57 -0
  81. package/dist/cli/commands/worktree.js.map +1 -0
  82. package/dist/cli/index.js +56 -0
  83. package/dist/cli/index.js.map +1 -1
  84. package/dist/config/defaults.d.ts.map +1 -1
  85. package/dist/config/defaults.js +41 -3
  86. package/dist/config/defaults.js.map +1 -1
  87. package/dist/config/index.d.ts +1 -1
  88. package/dist/config/index.d.ts.map +1 -1
  89. package/dist/config/index.js +4 -0
  90. package/dist/config/index.js.map +1 -1
  91. package/dist/config/loader.d.ts.map +1 -1
  92. package/dist/config/loader.js +25 -1
  93. package/dist/config/loader.js.map +1 -1
  94. package/dist/config/role-providers.d.ts +29 -0
  95. package/dist/config/role-providers.d.ts.map +1 -0
  96. package/dist/config/role-providers.js +115 -0
  97. package/dist/config/role-providers.js.map +1 -0
  98. package/dist/config/schema.d.ts +1350 -61
  99. package/dist/config/schema.d.ts.map +1 -1
  100. package/dist/config/schema.js +189 -0
  101. package/dist/config/schema.js.map +1 -1
  102. package/dist/contracts/eval-result.d.ts +112 -56
  103. package/dist/contracts/eval-result.d.ts.map +1 -1
  104. package/dist/contracts/eval-result.js +3 -0
  105. package/dist/contracts/eval-result.js.map +1 -1
  106. package/dist/contracts/sprint-contract.d.ts +30 -30
  107. package/dist/fleet/aggregator.d.ts +5 -0
  108. package/dist/fleet/aggregator.d.ts.map +1 -0
  109. package/dist/fleet/aggregator.js +39 -0
  110. package/dist/fleet/aggregator.js.map +1 -0
  111. package/dist/fleet/child-config.d.ts +12 -0
  112. package/dist/fleet/child-config.d.ts.map +1 -0
  113. package/dist/fleet/child-config.js +38 -0
  114. package/dist/fleet/child-config.js.map +1 -0
  115. package/dist/fleet/coordinator.d.ts +25 -0
  116. package/dist/fleet/coordinator.d.ts.map +1 -0
  117. package/dist/fleet/coordinator.js +40 -0
  118. package/dist/fleet/coordinator.js.map +1 -0
  119. package/dist/fleet/index.d.ts +40 -0
  120. package/dist/fleet/index.d.ts.map +1 -0
  121. package/dist/fleet/index.js +117 -0
  122. package/dist/fleet/index.js.map +1 -0
  123. package/dist/fleet/manifest.d.ts +51 -0
  124. package/dist/fleet/manifest.d.ts.map +1 -0
  125. package/dist/fleet/manifest.js +32 -0
  126. package/dist/fleet/manifest.js.map +1 -0
  127. package/dist/fleet/reporter.d.ts +32 -0
  128. package/dist/fleet/reporter.d.ts.map +1 -0
  129. package/dist/fleet/reporter.js +71 -0
  130. package/dist/fleet/reporter.js.map +1 -0
  131. package/dist/fleet/runner.d.ts +48 -0
  132. package/dist/fleet/runner.d.ts.map +1 -0
  133. package/dist/fleet/runner.js +104 -0
  134. package/dist/fleet/runner.js.map +1 -0
  135. package/dist/fleet/scaffolder.d.ts +12 -0
  136. package/dist/fleet/scaffolder.d.ts.map +1 -0
  137. package/dist/fleet/scaffolder.js +82 -0
  138. package/dist/fleet/scaffolder.js.map +1 -0
  139. package/dist/fleet/types.d.ts +21 -0
  140. package/dist/fleet/types.d.ts.map +1 -0
  141. package/dist/fleet/types.js +2 -0
  142. package/dist/fleet/types.js.map +1 -0
  143. package/dist/graph/artifact-store.d.ts +14 -0
  144. package/dist/graph/artifact-store.d.ts.map +1 -0
  145. package/dist/graph/artifact-store.js +100 -0
  146. package/dist/graph/artifact-store.js.map +1 -0
  147. package/dist/graph/cli.d.ts +53 -0
  148. package/dist/graph/cli.d.ts.map +1 -0
  149. package/dist/graph/cli.js +181 -0
  150. package/dist/graph/cli.js.map +1 -0
  151. package/dist/graph/client.d.ts +64 -0
  152. package/dist/graph/client.d.ts.map +1 -0
  153. package/dist/graph/client.js +216 -0
  154. package/dist/graph/client.js.map +1 -0
  155. package/dist/graph/fallback.d.ts +13 -0
  156. package/dist/graph/fallback.d.ts.map +1 -0
  157. package/dist/graph/fallback.js +57 -0
  158. package/dist/graph/fallback.js.map +1 -0
  159. package/dist/graph/hook-handler.d.ts +50 -0
  160. package/dist/graph/hook-handler.d.ts.map +1 -0
  161. package/dist/graph/hook-handler.js +217 -0
  162. package/dist/graph/hook-handler.js.map +1 -0
  163. package/dist/graph/incidents.d.ts +59 -0
  164. package/dist/graph/incidents.d.ts.map +1 -0
  165. package/dist/graph/incidents.js +22 -0
  166. package/dist/graph/incidents.js.map +1 -0
  167. package/dist/graph/mcp-client.d.ts +51 -0
  168. package/dist/graph/mcp-client.d.ts.map +1 -0
  169. package/dist/graph/mcp-client.js +285 -0
  170. package/dist/graph/mcp-client.js.map +1 -0
  171. package/dist/graph/onboarding-composer.d.ts +30 -0
  172. package/dist/graph/onboarding-composer.d.ts.map +1 -0
  173. package/dist/graph/onboarding-composer.js +275 -0
  174. package/dist/graph/onboarding-composer.js.map +1 -0
  175. package/dist/graph/pipeline-lifecycle.d.ts +95 -0
  176. package/dist/graph/pipeline-lifecycle.d.ts.map +1 -0
  177. package/dist/graph/pipeline-lifecycle.js +341 -0
  178. package/dist/graph/pipeline-lifecycle.js.map +1 -0
  179. package/dist/graph/preflight-budgets.d.ts +52 -0
  180. package/dist/graph/preflight-budgets.d.ts.map +1 -0
  181. package/dist/graph/preflight-budgets.js +78 -0
  182. package/dist/graph/preflight-budgets.js.map +1 -0
  183. package/dist/graph/preflight-injector.d.ts +130 -0
  184. package/dist/graph/preflight-injector.d.ts.map +1 -0
  185. package/dist/graph/preflight-injector.js +618 -0
  186. package/dist/graph/preflight-injector.js.map +1 -0
  187. package/dist/graph/prereq.d.ts +12 -0
  188. package/dist/graph/prereq.d.ts.map +1 -0
  189. package/dist/graph/prereq.js +61 -0
  190. package/dist/graph/prereq.js.map +1 -0
  191. package/dist/graph/prompts.d.ts +42 -0
  192. package/dist/graph/prompts.d.ts.map +1 -0
  193. package/dist/graph/prompts.js +80 -0
  194. package/dist/graph/prompts.js.map +1 -0
  195. package/dist/graph/sandbox.d.ts +19 -0
  196. package/dist/graph/sandbox.d.ts.map +1 -0
  197. package/dist/graph/sandbox.js +25 -0
  198. package/dist/graph/sandbox.js.map +1 -0
  199. package/dist/graph/token-usage.d.ts +21 -0
  200. package/dist/graph/token-usage.d.ts.map +1 -0
  201. package/dist/graph/token-usage.js +22 -0
  202. package/dist/graph/token-usage.js.map +1 -0
  203. package/dist/graph/types.d.ts +129 -0
  204. package/dist/graph/types.d.ts.map +1 -0
  205. package/dist/graph/types.js +12 -0
  206. package/dist/graph/types.js.map +1 -0
  207. package/dist/incident/orchestrator.d.ts +168 -0
  208. package/dist/incident/orchestrator.d.ts.map +1 -0
  209. package/dist/incident/orchestrator.js +279 -0
  210. package/dist/incident/orchestrator.js.map +1 -0
  211. package/dist/incident/playbook-search.d.ts +67 -0
  212. package/dist/incident/playbook-search.d.ts.map +1 -0
  213. package/dist/incident/playbook-search.js +288 -0
  214. package/dist/incident/playbook-search.js.map +1 -0
  215. package/dist/incident/postmortem.d.ts +44 -0
  216. package/dist/incident/postmortem.d.ts.map +1 -0
  217. package/dist/incident/postmortem.js +486 -0
  218. package/dist/incident/postmortem.js.map +1 -0
  219. package/dist/incident/resolution-verify.d.ts +186 -0
  220. package/dist/incident/resolution-verify.d.ts.map +1 -0
  221. package/dist/incident/resolution-verify.js +210 -0
  222. package/dist/incident/resolution-verify.js.map +1 -0
  223. package/dist/incident/rollback.d.ts +137 -0
  224. package/dist/incident/rollback.d.ts.map +1 -0
  225. package/dist/incident/rollback.js +328 -0
  226. package/dist/incident/rollback.js.map +1 -0
  227. package/dist/incident/timeline.d.ts +147 -0
  228. package/dist/incident/timeline.d.ts.map +1 -0
  229. package/dist/incident/timeline.js +452 -0
  230. package/dist/incident/timeline.js.map +1 -0
  231. package/dist/incident/types.d.ts +335 -0
  232. package/dist/incident/types.d.ts.map +1 -0
  233. package/dist/incident/types.js +158 -0
  234. package/dist/incident/types.js.map +1 -0
  235. package/dist/index.d.ts +1 -1
  236. package/dist/index.d.ts.map +1 -1
  237. package/dist/index.js +1 -1
  238. package/dist/index.js.map +1 -1
  239. package/dist/mcp/event-stream.d.ts +46 -0
  240. package/dist/mcp/event-stream.d.ts.map +1 -0
  241. package/dist/mcp/event-stream.js +421 -0
  242. package/dist/mcp/event-stream.js.map +1 -0
  243. package/dist/mcp/external-client.d.ts +38 -0
  244. package/dist/mcp/external-client.d.ts.map +1 -0
  245. package/dist/mcp/external-client.js +121 -0
  246. package/dist/mcp/external-client.js.map +1 -0
  247. package/dist/mcp/run-manager.d.ts +74 -9
  248. package/dist/mcp/run-manager.d.ts.map +1 -1
  249. package/dist/mcp/run-manager.js +127 -31
  250. package/dist/mcp/run-manager.js.map +1 -1
  251. package/dist/mcp/server.d.ts.map +1 -1
  252. package/dist/mcp/server.js +56 -0
  253. package/dist/mcp/server.js.map +1 -1
  254. package/dist/mcp/tools/abort-run.d.ts +2 -0
  255. package/dist/mcp/tools/abort-run.d.ts.map +1 -0
  256. package/dist/mcp/tools/abort-run.js +62 -0
  257. package/dist/mcp/tools/abort-run.js.map +1 -0
  258. package/dist/mcp/tools/anchor.js +1 -1
  259. package/dist/mcp/tools/anchor.js.map +1 -1
  260. package/dist/mcp/tools/approve-checkpoint.d.ts +2 -0
  261. package/dist/mcp/tools/approve-checkpoint.d.ts.map +1 -0
  262. package/dist/mcp/tools/approve-checkpoint.js +70 -0
  263. package/dist/mcp/tools/approve-checkpoint.js.map +1 -0
  264. package/dist/mcp/tools/brownfield.js +1 -1
  265. package/dist/mcp/tools/brownfield.js.map +1 -1
  266. package/dist/mcp/tools/get-project-state.d.ts +2 -0
  267. package/dist/mcp/tools/get-project-state.d.ts.map +1 -0
  268. package/dist/mcp/tools/get-project-state.js +107 -0
  269. package/dist/mcp/tools/get-project-state.js.map +1 -0
  270. package/dist/mcp/tools/get-run-status.d.ts +2 -0
  271. package/dist/mcp/tools/get-run-status.d.ts.map +1 -0
  272. package/dist/mcp/tools/get-run-status.js +40 -0
  273. package/dist/mcp/tools/get-run-status.js.map +1 -0
  274. package/dist/mcp/tools/graph-schemas.d.ts +100 -0
  275. package/dist/mcp/tools/graph-schemas.d.ts.map +1 -0
  276. package/dist/mcp/tools/graph-schemas.js +39 -0
  277. package/dist/mcp/tools/graph-schemas.js.map +1 -0
  278. package/dist/mcp/tools/graph.d.ts +19 -0
  279. package/dist/mcp/tools/graph.d.ts.map +1 -0
  280. package/dist/mcp/tools/graph.js +263 -0
  281. package/dist/mcp/tools/graph.js.map +1 -0
  282. package/dist/mcp/tools/incident.d.ts +2 -0
  283. package/dist/mcp/tools/incident.d.ts.map +1 -0
  284. package/dist/mcp/tools/incident.js +246 -0
  285. package/dist/mcp/tools/incident.js.map +1 -0
  286. package/dist/mcp/tools/index.d.ts +38 -18
  287. package/dist/mcp/tools/index.d.ts.map +1 -1
  288. package/dist/mcp/tools/index.js +74 -18
  289. package/dist/mcp/tools/index.js.map +1 -1
  290. package/dist/mcp/tools/init.d.ts.map +1 -1
  291. package/dist/mcp/tools/init.js +2 -0
  292. package/dist/mcp/tools/init.js.map +1 -1
  293. package/dist/mcp/tools/list-active-runs.d.ts +2 -0
  294. package/dist/mcp/tools/list-active-runs.d.ts.map +1 -0
  295. package/dist/mcp/tools/list-active-runs.js +35 -0
  296. package/dist/mcp/tools/list-active-runs.js.map +1 -0
  297. package/dist/mcp/tools/list-pending-approvals.d.ts +2 -0
  298. package/dist/mcp/tools/list-pending-approvals.d.ts.map +1 -0
  299. package/dist/mcp/tools/list-pending-approvals.js +40 -0
  300. package/dist/mcp/tools/list-pending-approvals.js.map +1 -0
  301. package/dist/mcp/tools/list-projects.d.ts +2 -0
  302. package/dist/mcp/tools/list-projects.d.ts.map +1 -0
  303. package/dist/mcp/tools/list-projects.js +101 -0
  304. package/dist/mcp/tools/list-projects.js.map +1 -0
  305. package/dist/mcp/tools/list-specs.d.ts +2 -0
  306. package/dist/mcp/tools/list-specs.d.ts.map +1 -0
  307. package/dist/mcp/tools/list-specs.js +48 -0
  308. package/dist/mcp/tools/list-specs.js.map +1 -0
  309. package/dist/mcp/tools/playbook.d.ts +2 -0
  310. package/dist/mcp/tools/playbook.d.ts.map +1 -0
  311. package/dist/mcp/tools/playbook.js +104 -0
  312. package/dist/mcp/tools/playbook.js.map +1 -0
  313. package/dist/mcp/tools/postmortem.d.ts +2 -0
  314. package/dist/mcp/tools/postmortem.d.ts.map +1 -0
  315. package/dist/mcp/tools/postmortem.js +75 -0
  316. package/dist/mcp/tools/postmortem.js.map +1 -0
  317. package/dist/mcp/tools/react.js +1 -1
  318. package/dist/mcp/tools/react.js.map +1 -1
  319. package/dist/mcp/tools/reject-checkpoint.d.ts +2 -0
  320. package/dist/mcp/tools/reject-checkpoint.d.ts.map +1 -0
  321. package/dist/mcp/tools/reject-checkpoint.js +79 -0
  322. package/dist/mcp/tools/reject-checkpoint.js.map +1 -0
  323. package/dist/mcp/tools/rollback.d.ts +2 -0
  324. package/dist/mcp/tools/rollback.d.ts.map +1 -0
  325. package/dist/mcp/tools/rollback.js +78 -0
  326. package/dist/mcp/tools/rollback.js.map +1 -0
  327. package/dist/mcp/tools/run-in-worktree.d.ts +2 -0
  328. package/dist/mcp/tools/run-in-worktree.d.ts.map +1 -0
  329. package/dist/mcp/tools/run-in-worktree.js +90 -0
  330. package/dist/mcp/tools/run-in-worktree.js.map +1 -0
  331. package/dist/mcp/tools/run.js +1 -1
  332. package/dist/mcp/tools/run.js.map +1 -1
  333. package/dist/mcp/tools/solidity.js +1 -1
  334. package/dist/mcp/tools/solidity.js.map +1 -1
  335. package/dist/mcp/tools/status.d.ts.map +1 -1
  336. package/dist/mcp/tools/status.js +11 -0
  337. package/dist/mcp/tools/status.js.map +1 -1
  338. package/dist/mcp/tools/subscribe-events.d.ts +2 -0
  339. package/dist/mcp/tools/subscribe-events.d.ts.map +1 -0
  340. package/dist/mcp/tools/subscribe-events.js +48 -0
  341. package/dist/mcp/tools/subscribe-events.js.map +1 -0
  342. package/dist/mcp/tools/unsubscribe-events.d.ts +2 -0
  343. package/dist/mcp/tools/unsubscribe-events.d.ts.map +1 -0
  344. package/dist/mcp/tools/unsubscribe-events.js +45 -0
  345. package/dist/mcp/tools/unsubscribe-events.js.map +1 -0
  346. package/dist/orchestrator/agent-loader.d.ts +16 -0
  347. package/dist/orchestrator/agent-loader.d.ts.map +1 -1
  348. package/dist/orchestrator/agent-loader.js +30 -0
  349. package/dist/orchestrator/agent-loader.js.map +1 -1
  350. package/dist/orchestrator/agentic-loop.d.ts +51 -0
  351. package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
  352. package/dist/orchestrator/agentic-loop.js +123 -4
  353. package/dist/orchestrator/agentic-loop.js.map +1 -1
  354. package/dist/orchestrator/arch-lenses.d.ts +7 -0
  355. package/dist/orchestrator/arch-lenses.d.ts.map +1 -0
  356. package/dist/orchestrator/arch-lenses.js +22 -0
  357. package/dist/orchestrator/arch-lenses.js.map +1 -0
  358. package/dist/orchestrator/architect-agent.d.ts +16 -0
  359. package/dist/orchestrator/architect-agent.d.ts.map +1 -1
  360. package/dist/orchestrator/architect-agent.js +546 -9
  361. package/dist/orchestrator/architect-agent.js.map +1 -1
  362. package/dist/orchestrator/checkpoints/audit.d.ts +128 -0
  363. package/dist/orchestrator/checkpoints/audit.d.ts.map +1 -0
  364. package/dist/orchestrator/checkpoints/audit.js +272 -0
  365. package/dist/orchestrator/checkpoints/audit.js.map +1 -0
  366. package/dist/orchestrator/checkpoints/feedback-router.d.ts +213 -0
  367. package/dist/orchestrator/checkpoints/feedback-router.d.ts.map +1 -0
  368. package/dist/orchestrator/checkpoints/feedback-router.js +438 -0
  369. package/dist/orchestrator/checkpoints/feedback-router.js.map +1 -0
  370. package/dist/orchestrator/checkpoints/index.d.ts +11 -0
  371. package/dist/orchestrator/checkpoints/index.d.ts.map +1 -0
  372. package/dist/orchestrator/checkpoints/index.js +12 -0
  373. package/dist/orchestrator/checkpoints/index.js.map +1 -0
  374. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts +35 -0
  375. package/dist/orchestrator/checkpoints/mechanisms/cli.d.ts.map +1 -0
  376. package/dist/orchestrator/checkpoints/mechanisms/cli.js +153 -0
  377. package/dist/orchestrator/checkpoints/mechanisms/cli.js.map +1 -0
  378. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts +34 -0
  379. package/dist/orchestrator/checkpoints/mechanisms/disk.d.ts.map +1 -0
  380. package/dist/orchestrator/checkpoints/mechanisms/disk.js +139 -0
  381. package/dist/orchestrator/checkpoints/mechanisms/disk.js.map +1 -0
  382. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts +141 -0
  383. package/dist/orchestrator/checkpoints/mechanisms/pr.d.ts.map +1 -0
  384. package/dist/orchestrator/checkpoints/mechanisms/pr.js +445 -0
  385. package/dist/orchestrator/checkpoints/mechanisms/pr.js.map +1 -0
  386. package/dist/orchestrator/checkpoints/noop.d.ts +12 -0
  387. package/dist/orchestrator/checkpoints/noop.d.ts.map +1 -0
  388. package/dist/orchestrator/checkpoints/noop.js +13 -0
  389. package/dist/orchestrator/checkpoints/noop.js.map +1 -0
  390. package/dist/orchestrator/checkpoints/registry.d.ts +48 -0
  391. package/dist/orchestrator/checkpoints/registry.d.ts.map +1 -0
  392. package/dist/orchestrator/checkpoints/registry.js +89 -0
  393. package/dist/orchestrator/checkpoints/registry.js.map +1 -0
  394. package/dist/orchestrator/checkpoints/renderers/_util.d.ts +50 -0
  395. package/dist/orchestrator/checkpoints/renderers/_util.d.ts.map +1 -0
  396. package/dist/orchestrator/checkpoints/renderers/_util.js +137 -0
  397. package/dist/orchestrator/checkpoints/renderers/_util.js.map +1 -0
  398. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts +15 -0
  399. package/dist/orchestrator/checkpoints/renderers/code-review.d.ts.map +1 -0
  400. package/dist/orchestrator/checkpoints/renderers/code-review.js +66 -0
  401. package/dist/orchestrator/checkpoints/renderers/code-review.js.map +1 -0
  402. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts +15 -0
  403. package/dist/orchestrator/checkpoints/renderers/curator-briefing.d.ts.map +1 -0
  404. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js +40 -0
  405. package/dist/orchestrator/checkpoints/renderers/curator-briefing.js.map +1 -0
  406. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts +15 -0
  407. package/dist/orchestrator/checkpoints/renderers/eval-result.d.ts.map +1 -0
  408. package/dist/orchestrator/checkpoints/renderers/eval-result.js +54 -0
  409. package/dist/orchestrator/checkpoints/renderers/eval-result.js.map +1 -0
  410. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts +49 -0
  411. package/dist/orchestrator/checkpoints/renderers/generator-diff.d.ts.map +1 -0
  412. package/dist/orchestrator/checkpoints/renderers/generator-diff.js +154 -0
  413. package/dist/orchestrator/checkpoints/renderers/generator-diff.js.map +1 -0
  414. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts +15 -0
  415. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.d.ts.map +1 -0
  416. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js +59 -0
  417. package/dist/orchestrator/checkpoints/renderers/pipeline-summary.js.map +1 -0
  418. package/dist/orchestrator/checkpoints/renderers/plan.d.ts +15 -0
  419. package/dist/orchestrator/checkpoints/renderers/plan.d.ts.map +1 -0
  420. package/dist/orchestrator/checkpoints/renderers/plan.js +34 -0
  421. package/dist/orchestrator/checkpoints/renderers/plan.js.map +1 -0
  422. package/dist/orchestrator/checkpoints/renderers/registry.d.ts +43 -0
  423. package/dist/orchestrator/checkpoints/renderers/registry.d.ts.map +1 -0
  424. package/dist/orchestrator/checkpoints/renderers/registry.js +83 -0
  425. package/dist/orchestrator/checkpoints/renderers/registry.js.map +1 -0
  426. package/dist/orchestrator/checkpoints/renderers/research.d.ts +15 -0
  427. package/dist/orchestrator/checkpoints/renderers/research.d.ts.map +1 -0
  428. package/dist/orchestrator/checkpoints/renderers/research.js +39 -0
  429. package/dist/orchestrator/checkpoints/renderers/research.js.map +1 -0
  430. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts +20 -0
  431. package/dist/orchestrator/checkpoints/renderers/sprint-contract.d.ts.map +1 -0
  432. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js +57 -0
  433. package/dist/orchestrator/checkpoints/renderers/sprint-contract.js.map +1 -0
  434. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts +15 -0
  435. package/dist/orchestrator/checkpoints/renderers/sprint-summary.d.ts.map +1 -0
  436. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js +38 -0
  437. package/dist/orchestrator/checkpoints/renderers/sprint-summary.js.map +1 -0
  438. package/dist/orchestrator/checkpoints/sites.d.ts +22 -0
  439. package/dist/orchestrator/checkpoints/sites.d.ts.map +1 -0
  440. package/dist/orchestrator/checkpoints/sites.js +57 -0
  441. package/dist/orchestrator/checkpoints/sites.js.map +1 -0
  442. package/dist/orchestrator/checkpoints/types.d.ts +51 -0
  443. package/dist/orchestrator/checkpoints/types.d.ts.map +1 -0
  444. package/dist/orchestrator/checkpoints/types.js +9 -0
  445. package/dist/orchestrator/checkpoints/types.js.map +1 -0
  446. package/dist/orchestrator/code-reviewer-agent.d.ts +50 -0
  447. package/dist/orchestrator/code-reviewer-agent.d.ts.map +1 -0
  448. package/dist/orchestrator/code-reviewer-agent.js +283 -0
  449. package/dist/orchestrator/code-reviewer-agent.js.map +1 -0
  450. package/dist/orchestrator/curator-agent.d.ts.map +1 -1
  451. package/dist/orchestrator/curator-agent.js +60 -9
  452. package/dist/orchestrator/curator-agent.js.map +1 -1
  453. package/dist/orchestrator/deploy/classify.d.ts +31 -0
  454. package/dist/orchestrator/deploy/classify.d.ts.map +1 -0
  455. package/dist/orchestrator/deploy/classify.js +109 -0
  456. package/dist/orchestrator/deploy/classify.js.map +1 -0
  457. package/dist/orchestrator/deploy/execute.d.ts +45 -0
  458. package/dist/orchestrator/deploy/execute.d.ts.map +1 -0
  459. package/dist/orchestrator/deploy/execute.js +146 -0
  460. package/dist/orchestrator/deploy/execute.js.map +1 -0
  461. package/dist/orchestrator/deploy/executor.d.ts +22 -0
  462. package/dist/orchestrator/deploy/executor.d.ts.map +1 -0
  463. package/dist/orchestrator/deploy/executor.js +31 -0
  464. package/dist/orchestrator/deploy/executor.js.map +1 -0
  465. package/dist/orchestrator/deploy/index.d.ts +21 -0
  466. package/dist/orchestrator/deploy/index.d.ts.map +1 -0
  467. package/dist/orchestrator/deploy/index.js +21 -0
  468. package/dist/orchestrator/deploy/index.js.map +1 -0
  469. package/dist/orchestrator/deploy/resolve.d.ts +51 -0
  470. package/dist/orchestrator/deploy/resolve.d.ts.map +1 -0
  471. package/dist/orchestrator/deploy/resolve.js +53 -0
  472. package/dist/orchestrator/deploy/resolve.js.map +1 -0
  473. package/dist/orchestrator/deploy/spawn.d.ts +60 -0
  474. package/dist/orchestrator/deploy/spawn.d.ts.map +1 -0
  475. package/dist/orchestrator/deploy/spawn.js +62 -0
  476. package/dist/orchestrator/deploy/spawn.js.map +1 -0
  477. package/dist/orchestrator/deploy/types.d.ts +98 -0
  478. package/dist/orchestrator/deploy/types.d.ts.map +1 -0
  479. package/dist/orchestrator/deploy/types.js +39 -0
  480. package/dist/orchestrator/deploy/types.js.map +1 -0
  481. package/dist/orchestrator/documenter-agent.d.ts +57 -0
  482. package/dist/orchestrator/documenter-agent.d.ts.map +1 -0
  483. package/dist/orchestrator/documenter-agent.js +195 -0
  484. package/dist/orchestrator/documenter-agent.js.map +1 -0
  485. package/dist/orchestrator/environment.d.ts +45 -0
  486. package/dist/orchestrator/environment.d.ts.map +1 -0
  487. package/dist/orchestrator/environment.js +151 -0
  488. package/dist/orchestrator/environment.js.map +1 -0
  489. package/dist/orchestrator/eval-lenses.d.ts +7 -0
  490. package/dist/orchestrator/eval-lenses.d.ts.map +1 -0
  491. package/dist/orchestrator/eval-lenses.js +19 -0
  492. package/dist/orchestrator/eval-lenses.js.map +1 -0
  493. package/dist/orchestrator/eval-persist.d.ts +25 -0
  494. package/dist/orchestrator/eval-persist.d.ts.map +1 -0
  495. package/dist/orchestrator/eval-persist.js +74 -0
  496. package/dist/orchestrator/eval-persist.js.map +1 -0
  497. package/dist/orchestrator/evaluator-agent.d.ts +23 -0
  498. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
  499. package/dist/orchestrator/evaluator-agent.js +80 -10
  500. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  501. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  502. package/dist/orchestrator/generator-agent.js +53 -8
  503. package/dist/orchestrator/generator-agent.js.map +1 -1
  504. package/dist/orchestrator/memory/distill.d.ts +60 -0
  505. package/dist/orchestrator/memory/distill.d.ts.map +1 -0
  506. package/dist/orchestrator/memory/distill.js +177 -0
  507. package/dist/orchestrator/memory/distill.js.map +1 -0
  508. package/dist/orchestrator/memory/eval-source.d.ts +20 -0
  509. package/dist/orchestrator/memory/eval-source.d.ts.map +1 -0
  510. package/dist/orchestrator/memory/eval-source.js +88 -0
  511. package/dist/orchestrator/memory/eval-source.js.map +1 -0
  512. package/dist/orchestrator/memory/retrieve.d.ts +45 -0
  513. package/dist/orchestrator/memory/retrieve.d.ts.map +1 -0
  514. package/dist/orchestrator/memory/retrieve.js +102 -0
  515. package/dist/orchestrator/memory/retrieve.js.map +1 -0
  516. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  517. package/dist/orchestrator/model-resolver.js +15 -1
  518. package/dist/orchestrator/model-resolver.js.map +1 -1
  519. package/dist/orchestrator/observability/index.d.ts +12 -0
  520. package/dist/orchestrator/observability/index.d.ts.map +1 -0
  521. package/dist/orchestrator/observability/index.js +12 -0
  522. package/dist/orchestrator/observability/index.js.map +1 -0
  523. package/dist/orchestrator/observability/merge.d.ts +73 -0
  524. package/dist/orchestrator/observability/merge.d.ts.map +1 -0
  525. package/dist/orchestrator/observability/merge.js +110 -0
  526. package/dist/orchestrator/observability/merge.js.map +1 -0
  527. package/dist/orchestrator/pipeline.d.ts +31 -0
  528. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  529. package/dist/orchestrator/pipeline.js +267 -5
  530. package/dist/orchestrator/pipeline.js.map +1 -1
  531. package/dist/orchestrator/planner-agent.d.ts +22 -1
  532. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  533. package/dist/orchestrator/planner-agent.js +165 -8
  534. package/dist/orchestrator/planner-agent.js.map +1 -1
  535. package/dist/orchestrator/research-agent.d.ts.map +1 -1
  536. package/dist/orchestrator/research-agent.js +48 -11
  537. package/dist/orchestrator/research-agent.js.map +1 -1
  538. package/dist/orchestrator/tools/handlers.d.ts +16 -0
  539. package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
  540. package/dist/orchestrator/tools/handlers.js +30 -5
  541. package/dist/orchestrator/tools/handlers.js.map +1 -1
  542. package/dist/orchestrator/tools/index.d.ts +84 -1
  543. package/dist/orchestrator/tools/index.d.ts.map +1 -1
  544. package/dist/orchestrator/tools/index.js +164 -1
  545. package/dist/orchestrator/tools/index.js.map +1 -1
  546. package/dist/orchestrator/tools/schemas.js +5 -5
  547. package/dist/orchestrator/tools/schemas.js.map +1 -1
  548. package/dist/orchestrator/workflow/args-builder.d.ts +35 -0
  549. package/dist/orchestrator/workflow/args-builder.d.ts.map +1 -0
  550. package/dist/orchestrator/workflow/args-builder.js +142 -0
  551. package/dist/orchestrator/workflow/args-builder.js.map +1 -0
  552. package/dist/orchestrator/workflow/budget.d.ts +57 -0
  553. package/dist/orchestrator/workflow/budget.d.ts.map +1 -0
  554. package/dist/orchestrator/workflow/budget.js +80 -0
  555. package/dist/orchestrator/workflow/budget.js.map +1 -0
  556. package/dist/orchestrator/workflow/conformance.d.ts +27 -0
  557. package/dist/orchestrator/workflow/conformance.d.ts.map +1 -0
  558. package/dist/orchestrator/workflow/conformance.js +111 -0
  559. package/dist/orchestrator/workflow/conformance.js.map +1 -0
  560. package/dist/orchestrator/workflow/eligibility.d.ts +8 -0
  561. package/dist/orchestrator/workflow/eligibility.d.ts.map +1 -0
  562. package/dist/orchestrator/workflow/eligibility.js +10 -0
  563. package/dist/orchestrator/workflow/eligibility.js.map +1 -0
  564. package/dist/orchestrator/workflow/engine.d.ts +10 -0
  565. package/dist/orchestrator/workflow/engine.d.ts.map +1 -0
  566. package/dist/orchestrator/workflow/engine.js +2 -0
  567. package/dist/orchestrator/workflow/engine.js.map +1 -0
  568. package/dist/orchestrator/workflow/errors.d.ts +13 -0
  569. package/dist/orchestrator/workflow/errors.d.ts.map +1 -0
  570. package/dist/orchestrator/workflow/errors.js +26 -0
  571. package/dist/orchestrator/workflow/errors.js.map +1 -0
  572. package/dist/orchestrator/workflow/flusher.d.ts +19 -0
  573. package/dist/orchestrator/workflow/flusher.d.ts.map +1 -0
  574. package/dist/orchestrator/workflow/flusher.js +81 -0
  575. package/dist/orchestrator/workflow/flusher.js.map +1 -0
  576. package/dist/orchestrator/workflow/interpreter.d.ts +48 -0
  577. package/dist/orchestrator/workflow/interpreter.d.ts.map +1 -0
  578. package/dist/orchestrator/workflow/interpreter.js +92 -0
  579. package/dist/orchestrator/workflow/interpreter.js.map +1 -0
  580. package/dist/orchestrator/workflow/pure-sprint.d.ts +65 -0
  581. package/dist/orchestrator/workflow/pure-sprint.d.ts.map +1 -0
  582. package/dist/orchestrator/workflow/pure-sprint.js +82 -0
  583. package/dist/orchestrator/workflow/pure-sprint.js.map +1 -0
  584. package/dist/orchestrator/workflow/reconciler.d.ts +15 -0
  585. package/dist/orchestrator/workflow/reconciler.d.ts.map +1 -0
  586. package/dist/orchestrator/workflow/reconciler.js +65 -0
  587. package/dist/orchestrator/workflow/reconciler.js.map +1 -0
  588. package/dist/orchestrator/workflow/resume-cursor.d.ts +10 -0
  589. package/dist/orchestrator/workflow/resume-cursor.d.ts.map +1 -0
  590. package/dist/orchestrator/workflow/resume-cursor.js +25 -0
  591. package/dist/orchestrator/workflow/resume-cursor.js.map +1 -0
  592. package/dist/orchestrator/workflow/retry.d.ts +50 -0
  593. package/dist/orchestrator/workflow/retry.d.ts.map +1 -0
  594. package/dist/orchestrator/workflow/retry.js +100 -0
  595. package/dist/orchestrator/workflow/retry.js.map +1 -0
  596. package/dist/orchestrator/workflow/scheduler.d.ts +87 -0
  597. package/dist/orchestrator/workflow/scheduler.d.ts.map +1 -0
  598. package/dist/orchestrator/workflow/scheduler.js +158 -0
  599. package/dist/orchestrator/workflow/scheduler.js.map +1 -0
  600. package/dist/orchestrator/workflow/selector.d.ts +26 -0
  601. package/dist/orchestrator/workflow/selector.d.ts.map +1 -0
  602. package/dist/orchestrator/workflow/selector.js +54 -0
  603. package/dist/orchestrator/workflow/selector.js.map +1 -0
  604. package/dist/orchestrator/workflow/synthesizer.d.ts +52 -0
  605. package/dist/orchestrator/workflow/synthesizer.d.ts.map +1 -0
  606. package/dist/orchestrator/workflow/synthesizer.js +75 -0
  607. package/dist/orchestrator/workflow/synthesizer.js.map +1 -0
  608. package/dist/orchestrator/workflow/ts-engine.d.ts +13 -0
  609. package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -0
  610. package/dist/orchestrator/workflow/ts-engine.js +14 -0
  611. package/dist/orchestrator/workflow/ts-engine.js.map +1 -0
  612. package/dist/orchestrator/workflow/types.d.ts +55 -0
  613. package/dist/orchestrator/workflow/types.d.ts.map +1 -0
  614. package/dist/orchestrator/workflow/types.js +3 -0
  615. package/dist/orchestrator/workflow/types.js.map +1 -0
  616. package/dist/orchestrator/workflow/workflow-engine.d.ts +31 -0
  617. package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -0
  618. package/dist/orchestrator/workflow/workflow-engine.js +70 -0
  619. package/dist/orchestrator/workflow/workflow-engine.js.map +1 -0
  620. package/dist/orchestrator/worktree.d.ts +18 -0
  621. package/dist/orchestrator/worktree.d.ts.map +1 -0
  622. package/dist/orchestrator/worktree.js +129 -0
  623. package/dist/orchestrator/worktree.js.map +1 -0
  624. package/dist/providers/anthropic.d.ts +8 -1
  625. package/dist/providers/anthropic.d.ts.map +1 -1
  626. package/dist/providers/anthropic.js +135 -11
  627. package/dist/providers/anthropic.js.map +1 -1
  628. package/dist/providers/claude-code.d.ts +44 -0
  629. package/dist/providers/claude-code.d.ts.map +1 -0
  630. package/dist/providers/claude-code.js +143 -0
  631. package/dist/providers/claude-code.js.map +1 -0
  632. package/dist/providers/factory.d.ts +16 -2
  633. package/dist/providers/factory.d.ts.map +1 -1
  634. package/dist/providers/factory.js +101 -14
  635. package/dist/providers/factory.js.map +1 -1
  636. package/dist/providers/google.d.ts.map +1 -1
  637. package/dist/providers/google.js +32 -3
  638. package/dist/providers/google.js.map +1 -1
  639. package/dist/providers/index.d.ts +4 -2
  640. package/dist/providers/index.d.ts.map +1 -1
  641. package/dist/providers/index.js +3 -1
  642. package/dist/providers/index.js.map +1 -1
  643. package/dist/providers/openai.d.ts.map +1 -1
  644. package/dist/providers/openai.js +28 -3
  645. package/dist/providers/openai.js.map +1 -1
  646. package/dist/providers/preflight.d.ts +22 -0
  647. package/dist/providers/preflight.d.ts.map +1 -0
  648. package/dist/providers/preflight.js +54 -0
  649. package/dist/providers/preflight.js.map +1 -0
  650. package/dist/providers/structured.d.ts +130 -0
  651. package/dist/providers/structured.d.ts.map +1 -0
  652. package/dist/providers/structured.js +205 -0
  653. package/dist/providers/structured.js.map +1 -0
  654. package/dist/providers/types.d.ts +53 -2
  655. package/dist/providers/types.d.ts.map +1 -1
  656. package/dist/state/approval-state.d.ts +74 -0
  657. package/dist/state/approval-state.d.ts.map +1 -0
  658. package/dist/state/approval-state.js +127 -0
  659. package/dist/state/approval-state.js.map +1 -0
  660. package/dist/state/history-rotation.d.ts +17 -0
  661. package/dist/state/history-rotation.d.ts.map +1 -0
  662. package/dist/state/history-rotation.js +84 -0
  663. package/dist/state/history-rotation.js.map +1 -0
  664. package/dist/state/history.d.ts +16 -4
  665. package/dist/state/history.d.ts.map +1 -1
  666. package/dist/state/history.js +62 -20
  667. package/dist/state/history.js.map +1 -1
  668. package/dist/state/index.d.ts +4 -1
  669. package/dist/state/index.d.ts.map +1 -1
  670. package/dist/state/index.js +5 -2
  671. package/dist/state/index.js.map +1 -1
  672. package/dist/state/memory.d.ts +60 -0
  673. package/dist/state/memory.d.ts.map +1 -0
  674. package/dist/state/memory.js +242 -0
  675. package/dist/state/memory.js.map +1 -0
  676. package/dist/state/review-state.d.ts +15 -0
  677. package/dist/state/review-state.d.ts.map +1 -0
  678. package/dist/state/review-state.js +51 -0
  679. package/dist/state/review-state.js.map +1 -0
  680. package/dist/state/run-state.d.ts +39 -0
  681. package/dist/state/run-state.d.ts.map +1 -0
  682. package/dist/state/run-state.js +101 -0
  683. package/dist/state/run-state.js.map +1 -0
  684. package/dist/telemetry/emit.d.ts +41 -0
  685. package/dist/telemetry/emit.d.ts.map +1 -0
  686. package/dist/telemetry/emit.js +65 -0
  687. package/dist/telemetry/emit.js.map +1 -0
  688. package/dist/utils/git.d.ts +27 -0
  689. package/dist/utils/git.d.ts.map +1 -1
  690. package/dist/utils/git.js +50 -0
  691. package/dist/utils/git.js.map +1 -1
  692. package/hooks/hooks.json +27 -1
  693. package/hooks/session-start +42 -0
  694. package/package.json +13 -6
  695. package/scripts/check-prereqs.sh +12 -0
  696. package/scripts/e2e-graph-smoke.sh +167 -0
  697. package/scripts/graph-hook.mjs +151 -0
  698. package/scripts/run-kpi-gate.mjs +245 -0
  699. package/scripts/spike-claude-code-provider.mjs +66 -0
  700. package/scripts/spike-deepseek.mjs +63 -0
  701. package/scripts/sync-skills.mjs +4 -1
  702. package/scripts/sync-targets.json +12 -0
  703. package/scripts/update-all.mjs +255 -0
  704. package/skills/bober.architect/SKILL.md +13 -0
  705. package/skills/bober.architect/references/arch-lens-panel.md +126 -0
  706. package/skills/bober.code-review/SKILL.md +186 -0
  707. package/skills/bober.debug/SKILL.md +300 -0
  708. package/skills/bober.deploy/SKILL.md +262 -0
  709. package/skills/bober.diagnose/SKILL.md +254 -0
  710. package/skills/bober.eval/SKILL.md +9 -0
  711. package/skills/bober.eval/references/lens-panel.md +115 -0
  712. package/skills/bober.graph/SKILL.md +85 -0
  713. package/skills/bober.impact/SKILL.md +101 -0
  714. package/skills/bober.incident/SKILL.md +245 -0
  715. package/skills/bober.onboard/SKILL.md +84 -0
  716. package/skills/bober.plan/SKILL.md +16 -0
  717. package/skills/bober.postmortem/SKILL.md +231 -0
  718. package/skills/bober.run/SKILL.md +23 -4
  719. package/skills/bober.run/references/lens-panel.md +115 -0
  720. package/skills/bober.runbook/SKILL.md +335 -0
  721. package/skills/bober.sprint/SKILL.md +44 -2
  722. package/skills/bober.sprint/references/lens-panel.md +115 -0
  723. package/skills/bober.using-bober/SKILL.md +133 -0
  724. package/skills/bober.verify/SKILL.md +143 -0
  725. package/skills/shared/arch-lens-panel.md +126 -0
  726. package/skills/shared/lens-panel.md +115 -0
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Postmortem synthesis (Sprint 23).
3
+ *
4
+ * Deterministic, programmatic synthesizer. Reads ALL artifacts under
5
+ * .bober/incidents/<id>/ and assembles an evidence-cited postmortem.md.
6
+ * Does NOT spawn an LLM subagent — postmortems must be reproducible from
7
+ * disk artifacts alone for audit purposes (mirrors resolution-verify.ts).
8
+ *
9
+ * Citation format: per-sentence inline (artifact#L<n>) references. The
10
+ * synthesizer enforces a minimum citation floor; below it, a synthesis-
11
+ * failure warning is appended to the document.
12
+ *
13
+ * Redaction: every quoted artifact snippet is scanned against the secret-
14
+ * pattern regex set BEFORE inclusion. Matches are replaced with [REDACTED]
15
+ * and counted; the count is emitted in the footer.
16
+ *
17
+ * Sprint 23 — src/incident/postmortem.ts
18
+ */
19
+ import { type IncidentId } from "./types.js";
20
+ export interface PostmortemResult {
21
+ /** Absolute path to the written postmortem.md */
22
+ path: string;
23
+ /** The full markdown content (caller can stream to stdout for CLI show) */
24
+ content: string;
25
+ /** Number of secret-like strings redacted from artifacts during synthesis */
26
+ redactionCount: number;
27
+ /** True if 5-Whys synthesis produced fewer than 3 deterministic levels */
28
+ shallowWarning: boolean;
29
+ /** Number of inline citations in the generated markdown */
30
+ citationCount: number;
31
+ }
32
+ /**
33
+ * Synthesize a postmortem document from incident artifacts.
34
+ *
35
+ * Reads all artifact files under .bober/incidents/<incidentId>/ and assembles
36
+ * a structured, evidence-cited postmortem.md. Pure offline — no LLM calls.
37
+ * Every claim cites a specific artifact path (and line number where applicable).
38
+ *
39
+ * @param projectRoot Absolute path to the project root.
40
+ * @param incidentId The incident ID (e.g. 'inc-20260524-500-errors-on').
41
+ * @returns PostmortemResult with path, content, redactionCount, shallowWarning, citationCount.
42
+ */
43
+ export declare function generatePostmortem(projectRoot: string, incidentId: IncidentId): Promise<PostmortemResult>;
44
+ //# sourceMappingURL=postmortem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postmortem.d.ts","sourceRoot":"","sources":["../../src/incident/postmortem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAC;IACxB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;CACvB;AA6jBD;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA2G3B"}
@@ -0,0 +1,486 @@
1
+ /**
2
+ * Postmortem synthesis (Sprint 23).
3
+ *
4
+ * Deterministic, programmatic synthesizer. Reads ALL artifacts under
5
+ * .bober/incidents/<id>/ and assembles an evidence-cited postmortem.md.
6
+ * Does NOT spawn an LLM subagent — postmortems must be reproducible from
7
+ * disk artifacts alone for audit purposes (mirrors resolution-verify.ts).
8
+ *
9
+ * Citation format: per-sentence inline (artifact#L<n>) references. The
10
+ * synthesizer enforces a minimum citation floor; below it, a synthesis-
11
+ * failure warning is appended to the document.
12
+ *
13
+ * Redaction: every quoted artifact snippet is scanned against the secret-
14
+ * pattern regex set BEFORE inclusion. Matches are replaced with [REDACTED]
15
+ * and counted; the count is emitted in the footer.
16
+ *
17
+ * Sprint 23 — src/incident/postmortem.ts
18
+ */
19
+ import { readFile, writeFile, readdir, stat } from "node:fs/promises";
20
+ import { join } from "node:path";
21
+ import { IncidentMetadataSchema, } from "./types.js";
22
+ // ── Redaction patterns (mirror skills/bober.postmortem/SKILL.md) ──────────────
23
+ // These exact regexes are the canonical set — SKILL.md documents them.
24
+ const REDACTION_PATTERNS = [
25
+ /AKIA[0-9A-Z]{16}/g,
26
+ /aws_secret_access_key\s*[=:]\s*\S+/gi,
27
+ /(?:Bearer|Token|token|apikey|api_key|api-key)[\s=:]+["']?[A-Za-z0-9._-]{16,}["']?/gi,
28
+ /sk-[A-Za-z0-9]{20,}/g,
29
+ /sk_(?:live|test)_[A-Za-z0-9]{10,}/g,
30
+ /ghp_[A-Za-z0-9]{20,}/g,
31
+ /secret_[A-Za-z0-9_-]+/gi,
32
+ /password\s*[=:]\s*\S+/gi,
33
+ /Authorization:\s*Bearer\s+\S+/gi,
34
+ /-----BEGIN [A-Z ]+PRIVATE KEY-----[\s\S]+?-----END [A-Z ]+PRIVATE KEY-----/g,
35
+ ];
36
+ const REDACTION_PLACEHOLDER = "[REDACTED]";
37
+ function redact(text) {
38
+ let count = 0;
39
+ let out = text;
40
+ for (const re of REDACTION_PATTERNS) {
41
+ // Reset lastIndex on each application (global flag requires it).
42
+ re.lastIndex = 0;
43
+ out = out.replace(re, () => {
44
+ count++;
45
+ return REDACTION_PLACEHOLDER;
46
+ });
47
+ }
48
+ return { redacted: out, count };
49
+ }
50
+ async function readJsonlWithLineNo(path) {
51
+ try {
52
+ const raw = await readFile(path, "utf-8");
53
+ const results = [];
54
+ const lines = raw.split("\n");
55
+ for (let i = 0; i < lines.length; i++) {
56
+ const line = lines[i].trim();
57
+ if (line) {
58
+ results.push({ record: JSON.parse(line), lineNo: i + 1 });
59
+ }
60
+ }
61
+ return results;
62
+ }
63
+ catch (err) {
64
+ if (err.code === "ENOENT")
65
+ return [];
66
+ throw err;
67
+ }
68
+ }
69
+ // ── Artifact readers ───────────────────────────────────────────────────────────
70
+ async function readDiagnoses(dir) {
71
+ try {
72
+ const entries = await readdir(dir);
73
+ const jsonFiles = entries.filter((e) => e.endsWith(".json"));
74
+ const results = [];
75
+ for (const fname of jsonFiles) {
76
+ try {
77
+ const raw = await readFile(join(dir, fname), "utf-8");
78
+ const parsed = JSON.parse(raw);
79
+ const s = await stat(join(dir, fname));
80
+ parsed._mtime = s.mtimeMs;
81
+ results.push(parsed);
82
+ }
83
+ catch {
84
+ // Skip malformed files — log nothing here, we mention gaps in output
85
+ }
86
+ }
87
+ // Sort by mtime descending — most recent first.
88
+ results.sort((a, b) => (b._mtime ?? 0) - (a._mtime ?? 0));
89
+ return results;
90
+ }
91
+ catch (err) {
92
+ if (err.code === "ENOENT")
93
+ return [];
94
+ throw err;
95
+ }
96
+ }
97
+ async function readResolutionEvidence(dir) {
98
+ try {
99
+ const entries = await readdir(dir);
100
+ const jsonFiles = entries.filter((e) => e.endsWith(".json"));
101
+ const results = [];
102
+ for (const fname of jsonFiles) {
103
+ try {
104
+ const raw = await readFile(join(dir, fname), "utf-8");
105
+ const parsed = JSON.parse(raw);
106
+ parsed._filename = fname;
107
+ results.push(parsed);
108
+ }
109
+ catch {
110
+ // Skip malformed files
111
+ }
112
+ }
113
+ return results;
114
+ }
115
+ catch (err) {
116
+ if (err.code === "ENOENT")
117
+ return [];
118
+ throw err;
119
+ }
120
+ }
121
+ // ── Duration formatter ────────────────────────────────────────────────────────
122
+ function formatDuration(createdAt, resolvedAt) {
123
+ if (!resolvedAt)
124
+ return "ongoing";
125
+ const ms = Date.parse(resolvedAt) - Date.parse(createdAt);
126
+ if (!Number.isFinite(ms) || ms < 0)
127
+ return "unknown";
128
+ const h = Math.floor(ms / 3600000);
129
+ const m = Math.floor((ms % 3600000) / 60000);
130
+ return `${h}h${String(m).padStart(2, "0")}m`;
131
+ }
132
+ function utcHHMM(isoTimestamp) {
133
+ const d = new Date(isoTimestamp);
134
+ if (isNaN(d.getTime()))
135
+ return isoTimestamp;
136
+ return `${String(d.getUTCHours()).padStart(2, "0")}:${String(d.getUTCMinutes()).padStart(2, "0")} UTC`;
137
+ }
138
+ // ── Section composers ──────────────────────────────────────────────────────────
139
+ function composeHeader(meta) {
140
+ const duration = formatDuration(meta.createdAt, meta.resolvedAt);
141
+ const titleSymptom = meta.symptom.length > 80 ? meta.symptom.slice(0, 80) + "..." : meta.symptom;
142
+ const lines = [
143
+ `# Postmortem: ${titleSymptom}`,
144
+ "",
145
+ `**Incident ID:** ${meta.incidentId} (incident.json)`,
146
+ `**Status:** Resolved`,
147
+ `**Severity:** S3 *(default — derive from observation count and impact magnitude)*`,
148
+ `**Date:** ${meta.createdAt} → ${meta.resolvedAt ?? "ongoing"} (incident.json)`,
149
+ `**Duration:** ${duration}`,
150
+ ];
151
+ return lines.join("\n");
152
+ }
153
+ function composeTldr(meta, diagnoses, changelog, tally) {
154
+ const symptom = tally(meta.symptom);
155
+ const topDiag = diagnoses[0];
156
+ const topHyp = topDiag?.hypotheses?.sort((a, b) => {
157
+ const order = { high: 3, medium: 2, low: 1 };
158
+ return (order[b.confidence] - order[a.confidence]) ||
159
+ (b.supportingEvidence.length - a.supportingEvidence.length);
160
+ })[0];
161
+ // Find the last change entry.
162
+ const lastChange = changelog.length > 0 ? changelog[changelog.length - 1] : null;
163
+ let summary = `Symptom: ${symptom} (incident.json). `;
164
+ if (topHyp && topDiag) {
165
+ summary += `Root cause candidate: ${tally(topHyp.statement)} (diagnoses/${topDiag.diagnosisId}.json#${topHyp.id}). `;
166
+ }
167
+ else {
168
+ summary += "Root cause: no diagnosis recorded — human review required. ";
169
+ }
170
+ if (lastChange) {
171
+ summary += `Resolving action: ${tally(lastChange.record.description)} (changelog.jsonl#L${lastChange.lineNo}).`;
172
+ }
173
+ else if (meta.resolutionEvidence?.verified) {
174
+ summary += `Resolution verified via metric check (incident.json).`;
175
+ }
176
+ else {
177
+ summary += `Resolution method: see incident.json for details.`;
178
+ }
179
+ return summary;
180
+ }
181
+ function composeImpact(observations, resolutionEvidence, tally) {
182
+ const lines = [];
183
+ const verifiedObs = observations.filter((o) => o.record.verified && (o.record.phase === 1 || o.record.phase === 2));
184
+ if (verifiedObs.length === 0) {
185
+ lines.push("- No verified observations recorded for this incident — (observations.jsonl is empty or unverified).");
186
+ }
187
+ else {
188
+ for (const o of verifiedObs) {
189
+ lines.push(`- ${tally(o.record.observation)} (observations.jsonl#L${o.lineNo})`);
190
+ }
191
+ }
192
+ const passed = resolutionEvidence.filter((e) => e.allSamplesPassed);
193
+ if (passed.length > 0) {
194
+ const ev = passed[0];
195
+ const sample = ev.samples?.[0];
196
+ if (sample && ev.criteria) {
197
+ lines.push(`- Resolution sample: observed ${sample.value} against threshold ${ev.criteria.threshold} ` +
198
+ `(${ev.criteria.comparison}) at ${sample.timestamp} ` +
199
+ `(resolution-evidence/${ev._filename ?? "evidence.json"})`);
200
+ }
201
+ }
202
+ return lines.join("\n");
203
+ }
204
+ function composeTimelineTable(timeline, tally) {
205
+ const header = [
206
+ "| Time (UTC) | Event | Source |",
207
+ "|------------|-------|--------|",
208
+ ];
209
+ if (timeline.length === 0) {
210
+ return header.join("\n") + "\n| — | No timeline events recorded | (timeline.jsonl is empty) |";
211
+ }
212
+ const rows = timeline.map((t) => {
213
+ const time = utcHHMM(t.record.timestamp);
214
+ const summary = tally(t.record.summary.slice(0, 80));
215
+ const source = `${t.record.source} (timeline.jsonl#L${t.lineNo})`;
216
+ return `| ${time} | ${summary} | ${source} |`;
217
+ });
218
+ return [...header, ...rows].join("\n");
219
+ }
220
+ function composeRootCause(meta, diagnoses, changelog, tally) {
221
+ const whys = [];
222
+ // Why 1: symptom from incident.json.
223
+ whys.push(`1. Why did ${tally(meta.symptom)} happen? (incident.json)`);
224
+ // Why 2: highest-confidence hypothesis from most-recent diagnosis.
225
+ if (diagnoses.length > 0) {
226
+ const d = diagnoses[0];
227
+ const order = { high: 3, medium: 2, low: 1 };
228
+ const top = [...(d.hypotheses ?? [])].sort((a, b) => (order[b.confidence] - order[a.confidence]) ||
229
+ (b.supportingEvidence.length - a.supportingEvidence.length))[0];
230
+ if (top) {
231
+ whys.push(`2. Because ${tally(top.statement)}. (diagnoses/${d.diagnosisId}.json#${top.id})`);
232
+ // Why 3: strongest supporting evidence on that hypothesis.
233
+ if (top.supportingEvidence && top.supportingEvidence.length > 0) {
234
+ const ev = top.supportingEvidence[0];
235
+ whys.push(`3. Because ${tally(ev.snippet)}. (${ev.path})`);
236
+ }
237
+ }
238
+ }
239
+ // Why 4 + 5: changes within 30 min before incident.createdAt, sorted by executedAt desc.
240
+ const created = Date.parse(meta.createdAt);
241
+ const preChanges = changelog
242
+ .filter((c) => {
243
+ const t = Date.parse(c.record.executedAt);
244
+ return Number.isFinite(t) && created - t > 0 && created - t < 30 * 60 * 1000;
245
+ })
246
+ .sort((a, b) => (a.record.executedAt < b.record.executedAt ? 1 : -1));
247
+ if (preChanges[0] && whys.length >= 3) {
248
+ const minutes = Math.round((created - Date.parse(preChanges[0].record.executedAt)) / 60000);
249
+ whys.push(`4. Because ${tally(preChanges[0].record.description)} shipped ${minutes}m before symptom onset. ` +
250
+ `(changelog.jsonl#L${preChanges[0].lineNo})`);
251
+ }
252
+ if (preChanges[1] && whys.length >= 4) {
253
+ const minutes = Math.round((created - Date.parse(preChanges[1].record.executedAt)) / 60000);
254
+ whys.push(`5. Because ${tally(preChanges[1].record.description)} (preceding change ${minutes}m before symptom onset). ` +
255
+ `(changelog.jsonl#L${preChanges[1].lineNo})`);
256
+ }
257
+ const shallowWarning = whys.length < 3;
258
+ let markdown = whys.join("\n");
259
+ if (shallowWarning) {
260
+ const missingArtifact = diagnoses.length === 0 ? "diagnoses/" : "supportingEvidence";
261
+ markdown +=
262
+ "\n\n**Warning:** 5-Whys synthesis was shallow due to missing evidence — only " +
263
+ `${whys.length} level(s) derivable from artifacts (missing evidence in ${missingArtifact}). ` +
264
+ "Human review required to deepen this chain.";
265
+ }
266
+ return { markdown, shallowWarning };
267
+ }
268
+ function composeContributingFactors(runbookExec, observations, tally) {
269
+ const lines = [];
270
+ const FAILED_STATUSES = new Set([
271
+ "precondition_failed",
272
+ "execution_failed",
273
+ "postcondition_failed_no_rollback",
274
+ "rollback_failed",
275
+ ]);
276
+ const failedSteps = runbookExec.filter((r) => FAILED_STATUSES.has(r.record.status));
277
+ for (const step of failedSteps) {
278
+ lines.push(`- Runbook failure: ${tally(step.record.runbookName)} step ${step.record.stepNumber} ` +
279
+ `status=${step.record.status} (runbook-execution.jsonl#L${step.lineNo})`);
280
+ }
281
+ const unverifiedObs = observations.filter((o) => !o.record.verified);
282
+ for (const o of unverifiedObs) {
283
+ lines.push(`- Unverified observation influenced response: ${tally(o.record.observation.slice(0, 120))} ` +
284
+ `(observations.jsonl#L${o.lineNo})`);
285
+ }
286
+ if (lines.length === 0) {
287
+ if (runbookExec.length === 0) {
288
+ lines.push("- No runbook executed for this incident — (runbook-execution.jsonl is empty).");
289
+ }
290
+ else {
291
+ lines.push("- No failed runbook steps or unverified observations recorded (runbook-execution.jsonl).");
292
+ }
293
+ }
294
+ return lines.join("\n");
295
+ }
296
+ function composeWentWell(runbookExec, resolutionEvidence, tally) {
297
+ const lines = [];
298
+ const successStatuses = new Set(["success", "recovered_via_rollback"]);
299
+ const successSteps = runbookExec.filter((r) => successStatuses.has(r.record.status));
300
+ for (const step of successSteps) {
301
+ lines.push(`- Runbook success: ${tally(step.record.runbookName)} step ${step.record.stepNumber} ` +
302
+ `completed with status=${step.record.status} (runbook-execution.jsonl#L${step.lineNo})`);
303
+ }
304
+ const verifiedResolution = resolutionEvidence.filter((e) => e.allSamplesPassed);
305
+ for (const ev of verifiedResolution) {
306
+ if (ev.criteria) {
307
+ lines.push(`- Resolution metric verified: ${ev.criteria.metricName} ${ev.criteria.comparison} ${ev.criteria.threshold} ` +
308
+ `for ${ev.criteria.windowMinutes}m sustained (resolution-evidence/${ev._filename ?? "evidence.json"})`);
309
+ }
310
+ }
311
+ if (lines.length === 0) {
312
+ lines.push("- No explicitly successful runbook steps recorded — (runbook-execution.jsonl has no success entries).");
313
+ }
314
+ return lines.join("\n");
315
+ }
316
+ function composeWentWrong(runbookExec, actions, meta, tally) {
317
+ const lines = [];
318
+ const FAILED_STATUSES = new Set([
319
+ "precondition_failed",
320
+ "execution_failed",
321
+ "postcondition_failed_no_rollback",
322
+ "rollback_failed",
323
+ ]);
324
+ const failedSteps = runbookExec.filter((r) => FAILED_STATUSES.has(r.record.status));
325
+ for (const step of failedSteps) {
326
+ lines.push(`- Runbook execution failure: ${tally(step.record.runbookName)} step ${step.record.stepNumber} ` +
327
+ `failed with status=${step.record.status} (runbook-execution.jsonl#L${step.lineNo})`);
328
+ }
329
+ // Risky actions taken without a preceding precondition pass.
330
+ const precondPassTimes = new Set(runbookExec
331
+ .filter((r) => r.record.preconditionResult === "pass")
332
+ .map((r) => r.record.timestamp));
333
+ const riskyActionsWithoutPrecondition = actions.filter((a) => a.record.blastRadius === "risky" && !precondPassTimes.has(a.record.timestamp));
334
+ for (const a of riskyActionsWithoutPrecondition) {
335
+ lines.push(`- Risky action taken without preceding precondition pass: ${tally(a.record.action.slice(0, 120))} ` +
336
+ `(actions.jsonl#L${a.lineNo})`);
337
+ }
338
+ // Override resolution.
339
+ if (meta.resolutionEvidence?.override) {
340
+ lines.push(`- Incident resolved via override (not metric verification): ${tally(meta.resolutionEvidence.override.reason)} ` +
341
+ `at ${meta.resolutionEvidence.override.at} (incident.json)`);
342
+ }
343
+ if (lines.length === 0) {
344
+ lines.push("- No runbook failures or unguarded risky actions recorded for this incident.");
345
+ }
346
+ return lines.join("\n");
347
+ }
348
+ function composeActionItems(runbookExec, actions) {
349
+ const header = [
350
+ "| Item | Owner | Due | Source |",
351
+ "|------|-------|-----|--------|",
352
+ ];
353
+ const rows = [];
354
+ const FAILED_STATUSES = new Set([
355
+ "precondition_failed",
356
+ "execution_failed",
357
+ "postcondition_failed_no_rollback",
358
+ "rollback_failed",
359
+ ]);
360
+ const failedSteps = runbookExec.filter((r) => FAILED_STATUSES.has(r.record.status));
361
+ for (const step of failedSteps) {
362
+ rows.push(`| Investigate and fix ${step.record.runbookName} step ${step.record.stepNumber} failure | TBD | TBD | (runbook-execution.jsonl#L${step.lineNo}) |`);
363
+ }
364
+ // Risky actions without precondition pass.
365
+ const precondPassTimes = new Set(runbookExec
366
+ .filter((r) => r.record.preconditionResult === "pass")
367
+ .map((r) => r.record.timestamp));
368
+ const riskyActions = actions.filter((a) => a.record.blastRadius === "risky" && !precondPassTimes.has(a.record.timestamp));
369
+ for (const a of riskyActions) {
370
+ rows.push(`| Add precondition gate before: ${a.record.action.slice(0, 60)} | TBD | TBD | (actions.jsonl#L${a.lineNo}) |`);
371
+ }
372
+ // Default monitoring action item — always present.
373
+ rows.push("| Add monitoring for the root-cause signal identified in 5-Whys Level 3 | TBD | TBD | (5-whys-3) |");
374
+ return [...header, ...rows].join("\n");
375
+ }
376
+ // ── Citation counter ───────────────────────────────────────────────────────────
377
+ function countCitations(content) {
378
+ // Match parenthesized references like (incident.json), (timeline.jsonl#L7),
379
+ // (diagnoses/xxx.json#h1), (5-whys-3), (resolution-evidence/file.json)
380
+ const matches = content.match(/\([a-z0-9_./-]+(?:#(?:L?\d+|[a-z0-9-]+))?(?:,\s*[a-z0-9_./-]+(?:#(?:L?\d+|[a-z0-9-]+))?)?\)/gi);
381
+ return matches ? matches.length : 0;
382
+ }
383
+ // ── Main entry point ───────────────────────────────────────────────────────────
384
+ /**
385
+ * Synthesize a postmortem document from incident artifacts.
386
+ *
387
+ * Reads all artifact files under .bober/incidents/<incidentId>/ and assembles
388
+ * a structured, evidence-cited postmortem.md. Pure offline — no LLM calls.
389
+ * Every claim cites a specific artifact path (and line number where applicable).
390
+ *
391
+ * @param projectRoot Absolute path to the project root.
392
+ * @param incidentId The incident ID (e.g. 'inc-20260524-500-errors-on').
393
+ * @returns PostmortemResult with path, content, redactionCount, shallowWarning, citationCount.
394
+ */
395
+ export async function generatePostmortem(projectRoot, incidentId) {
396
+ const dir = join(projectRoot, ".bober", "incidents", incidentId);
397
+ // 1. Read incident.json (required — throws ENOENT if missing).
398
+ const metaRaw = await readFile(join(dir, "incident.json"), "utf-8");
399
+ const meta = IncidentMetadataSchema.parse(JSON.parse(metaRaw));
400
+ // 2. Read JSONL artifacts with line numbers (graceful: missing = empty).
401
+ const timeline = await readJsonlWithLineNo(join(dir, "timeline.jsonl"));
402
+ const observations = await readJsonlWithLineNo(join(dir, "observations.jsonl"));
403
+ const changelog = await readJsonlWithLineNo(join(dir, "changelog.jsonl"));
404
+ const runbookExec = await readJsonlWithLineNo(join(dir, "runbook-execution.jsonl"));
405
+ const actions = await readJsonlWithLineNo(join(dir, "actions.jsonl"));
406
+ // 3. Read diagnoses/ (sort by mtime descending — most recent first).
407
+ const diagnoses = await readDiagnoses(join(dir, "diagnoses"));
408
+ // 4. Read resolution-evidence/*.json.
409
+ const resolutionEvidence = await readResolutionEvidence(join(dir, "resolution-evidence"));
410
+ // 5. Compose each section. The tally() wrapper redacts snippets at extraction time.
411
+ let totalRedactions = 0;
412
+ const tally = (s) => {
413
+ const { redacted, count } = redact(s);
414
+ totalRedactions += count;
415
+ return redacted;
416
+ };
417
+ const header = composeHeader(meta);
418
+ const tldr = composeTldr(meta, diagnoses, changelog, tally);
419
+ const impact = composeImpact(observations, resolutionEvidence, tally);
420
+ const timelineTable = composeTimelineTable(timeline, tally);
421
+ const { markdown: rootCause, shallowWarning } = composeRootCause(meta, diagnoses, changelog, tally);
422
+ const contribFactors = composeContributingFactors(runbookExec, observations, tally);
423
+ const wentWell = composeWentWell(runbookExec, resolutionEvidence, tally);
424
+ const wentWrong = composeWentWrong(runbookExec, actions, meta, tally);
425
+ const actionItems = composeActionItems(runbookExec, actions);
426
+ // 6. Assemble document.
427
+ const parts = [
428
+ header,
429
+ "",
430
+ "## TL;DR",
431
+ "",
432
+ tldr,
433
+ "",
434
+ "## Impact",
435
+ "",
436
+ impact,
437
+ "",
438
+ "## Timeline",
439
+ "",
440
+ timelineTable,
441
+ "",
442
+ "## Root Cause (5-Whys)",
443
+ "",
444
+ rootCause,
445
+ "",
446
+ "## Contributing Factors",
447
+ "",
448
+ contribFactors,
449
+ "",
450
+ "## What Went Well",
451
+ "",
452
+ wentWell,
453
+ "",
454
+ "## What Went Wrong",
455
+ "",
456
+ wentWrong,
457
+ "",
458
+ "## Action Items",
459
+ "",
460
+ actionItems,
461
+ "",
462
+ ];
463
+ if (totalRedactions > 0) {
464
+ parts.push("---", "", `**Redactions:** ${totalRedactions} secret-like string(s) redacted from artifacts. ` +
465
+ "Audit trail: redaction patterns documented in `skills/bober.postmortem/SKILL.md`.", "");
466
+ }
467
+ parts.push(`*Generated by \`bober postmortem generate ${incidentId}\` (Sprint 23).*`, "");
468
+ const content = parts.join("\n");
469
+ // 7. Citation count.
470
+ const citationCount = countCitations(content);
471
+ // 8. Write postmortem.md.
472
+ // The incident directory must already exist (incident.json was read above).
473
+ // We do NOT call mkdir here — if the directory was removed between read and
474
+ // write (e.g., test cleanup race), writeFile throws ENOENT which is caught by
475
+ // the caller's fire-and-forget wrapper in timeline.ts (logs a warn, moves on).
476
+ const outputPath = join(dir, "postmortem.md");
477
+ await writeFile(outputPath, content, { encoding: "utf-8", mode: 0o600 });
478
+ return {
479
+ path: outputPath,
480
+ content,
481
+ redactionCount: totalRedactions,
482
+ shallowWarning,
483
+ citationCount,
484
+ };
485
+ }
486
+ //# sourceMappingURL=postmortem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postmortem.js","sourceRoot":"","sources":["../../src/incident/postmortem.ts"],"names":[],"mappings":"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"}