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,279 @@
1
+ /**
2
+ * Incident state machine + phase routing (Sprint 24).
3
+ *
4
+ * Wraps Sprint 19 setIncidentStatus with a GUARDED transition table:
5
+ * invalid transitions reject with a typed error before any disk write.
6
+ *
7
+ * The state machine is deterministic: given (currentPhase, agentOutput),
8
+ * the next phase is fully determined. No human-in-loop required for
9
+ * happy-path autopilot (subject to Tier 2 risky-action gates that fire
10
+ * inside executeAction). This is the integration capstone — no new
11
+ * primitives, only orchestration.
12
+ *
13
+ * Re-open path (resolved → investigating) is the ONLY transition that
14
+ * requires an explicit `reason` arg. Every other transition is implicit
15
+ * from the agent's output.
16
+ *
17
+ * Phase transition diagram:
18
+ *
19
+ * ┌──────────────────────────────────────────────────────┐
20
+ * │ │
21
+ * ▼ │
22
+ * ┌───────────────┐ │
23
+ * │ investigating │ │
24
+ * └───────┬───────┘ │
25
+ * │ │
26
+ * diagnoser produces │
27
+ * nextActions with │
28
+ * ≥1 risky │
29
+ * │ │
30
+ * ▼ │
31
+ * ┌───────────────┐ │
32
+ * │ remediating │ │
33
+ * └───────┬───────┘ │
34
+ * │ │
35
+ * all proposed actions executed │
36
+ * + postcondition passed │
37
+ * │ │
38
+ * ▼ │
39
+ * ┌───────────────┐ ──── verifyResolution fails ─────────────────┤
40
+ * │ monitoring │ │
41
+ * └───────┬───────┘ │
42
+ * │ │
43
+ * verifyResolution.verified=true │
44
+ * for criteria.windowMinutes │
45
+ * │ │
46
+ * ▼ │
47
+ * ┌───────────────┐ ──── user re-opens (reason REQUIRED) ────────┘
48
+ * │ resolved │
49
+ * └───────────────┘ (auto-postmortem triggered by setIncidentStatus)
50
+ *
51
+ * At any phase: user issues `bober incident abort <id> --reason <text> [--confirm-rollback]`
52
+ * ──────────────────────────────────────► aborted (terminal)
53
+ *
54
+ * Sprint 24 — src/incident/orchestrator.ts
55
+ */
56
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
57
+ import { join } from "node:path";
58
+ import { appendTimeline, setIncidentStatus, } from "./timeline.js";
59
+ import { emit } from "../telemetry/emit.js";
60
+ import { IncidentMetadataSchema, STATUS_TRANSITIONS, } from "./types.js";
61
+ import { planRollback, executeRollback, presentPlan, } from "./rollback.js";
62
+ import { verifyResolution, } from "./resolution-verify.js";
63
+ // ── Public types ──────────────────────────────────────────────────────────────
64
+ export class InvalidTransitionError extends Error {
65
+ from;
66
+ to;
67
+ reasonRequired;
68
+ constructor(from, to, reasonRequired = false) {
69
+ const msg = reasonRequired
70
+ ? `Invalid transition ${from} → ${to}: this transition requires an explicit 'reason' (re-open path).`
71
+ : `Invalid transition ${from} → ${to}. Allowed from '${from}': [${STATUS_TRANSITIONS[from].join(", ")}]`;
72
+ super(msg);
73
+ this.from = from;
74
+ this.to = to;
75
+ this.reasonRequired = reasonRequired;
76
+ this.name = "InvalidTransitionError";
77
+ }
78
+ }
79
+ // ── readIncidentMetadata: a thin wrapper for the CLI status command ────────────
80
+ export async function readIncidentMetadata(projectRoot, incidentId) {
81
+ const metaPath = join(projectRoot, ".bober", "incidents", incidentId, "incident.json");
82
+ const raw = await readFile(metaPath, "utf-8");
83
+ return IncidentMetadataSchema.parse(JSON.parse(raw));
84
+ }
85
+ // ── transitionPhase: the guarded gate ─────────────────────────────────────────
86
+ export async function transitionPhase(projectRoot, incidentId, toPhase, opts = {}) {
87
+ // 1. Read current phase.
88
+ const meta = await readIncidentMetadata(projectRoot, incidentId);
89
+ const from = meta.status;
90
+ // 2. Guard: allowed in the transition table.
91
+ const allowed = STATUS_TRANSITIONS[from];
92
+ if (!allowed.includes(toPhase)) {
93
+ throw new InvalidTransitionError(from, toPhase, false);
94
+ }
95
+ // 3. Re-open path: resolved → investigating requires an explicit reason.
96
+ const isReopen = from === "resolved" && toPhase === "investigating";
97
+ if (isReopen && (!opts.reason || opts.reason.trim() === "")) {
98
+ throw new InvalidTransitionError(from, toPhase, true);
99
+ }
100
+ // 4. Persist via the Sprint 19 atomic writer.
101
+ await setIncidentStatus(projectRoot, incidentId, toPhase, undefined, opts.setStatus);
102
+ // 5. Audit timeline event.
103
+ await appendTimeline(projectRoot, incidentId, {
104
+ timestamp: new Date().toISOString(),
105
+ eventKind: "phase_transition",
106
+ source: "system",
107
+ summary: isReopen
108
+ ? `Re-opened: ${from} → ${toPhase}. Reason: ${opts.reason}`
109
+ : `Phase transition: ${from} → ${toPhase}`,
110
+ });
111
+ }
112
+ // ── applyDiagnosisOutcome: routes to 'remediating' or stays at 'investigating' ─
113
+ /**
114
+ * Inspect a diagnosis output and transition the incident phase accordingly.
115
+ *
116
+ * If any nextAction has blastRadius='risky' → transition to 'remediating'.
117
+ * If nextActions is empty (diagnoser found no remediation needed) → leave at
118
+ * 'investigating'; the operator should call transitionPhase or `bober incident end`.
119
+ * If nextActions has entries but all are safe → leave at 'investigating' (no
120
+ * state-mutating actions are needed; diagnose further or end the incident).
121
+ *
122
+ * Returns { newPhase } — the phase AFTER the call. Callers can use this to
123
+ * branch their own logic.
124
+ */
125
+ export async function applyDiagnosisOutcome(projectRoot, incidentId, diagnosis, _opts = {}) {
126
+ const hasRiskyActions = diagnosis.nextActions.some((a) => a.blastRadius === "risky");
127
+ if (hasRiskyActions) {
128
+ // Transition to remediating — some next actions require the deploy gate.
129
+ await transitionPhase(projectRoot, incidentId, "remediating", {});
130
+ return { newPhase: "remediating" };
131
+ }
132
+ // No risky actions: stay at investigating. The orchestrator does not auto-resolve
133
+ // here because "no risky actions" ≠ "incident is resolved" — the diagnoser may
134
+ // have produced safe investigative actions, or no actions at all. Only the
135
+ // operator (via `bober incident end`) can mark the incident resolved.
136
+ const meta = await readIncidentMetadata(projectRoot, incidentId);
137
+ return { newPhase: meta.status };
138
+ }
139
+ // ── applyDeploymentOutcome: routes to 'monitoring' then resolved ──────────────
140
+ /**
141
+ * After deployment actions complete, transition the incident phase.
142
+ *
143
+ * If all actions executed successfully AND verifyResolution is available:
144
+ * - call verifyResolution
145
+ * - if verified=true → transition to 'monitoring'
146
+ * - Returns { newPhase: 'monitoring', verified: true }
147
+ *
148
+ * Transitioning from monitoring → resolved is the caller's responsibility
149
+ * (the CLI / orchestration layer drives the second transition after the
150
+ * criteria window elapses). This function ONLY moves to monitoring.
151
+ *
152
+ * If verifyDeps is not provided or skipVerification=true:
153
+ * - Transition to monitoring unconditionally (operator is asserting success).
154
+ *
155
+ * If any action failed:
156
+ * - Stay in remediating (return { newPhase: 'remediating', verified: false }).
157
+ */
158
+ export async function applyDeploymentOutcome(projectRoot, incidentId, deployResult, opts = {}) {
159
+ const allExecuted = deployResult.executed.every((e) => e.status === "executed");
160
+ if (!allExecuted) {
161
+ // Some actions failed — stay in remediating.
162
+ const meta = await readIncidentMetadata(projectRoot, incidentId);
163
+ return { newPhase: meta.status, verified: false };
164
+ }
165
+ // All actions succeeded. Attempt verification if criteria are provided.
166
+ if (opts.resolutionCriteria && opts.verifyDeps && !opts.skipVerification) {
167
+ const verifyResult = await verifyResolution(incidentId, opts.resolutionCriteria, {
168
+ ...opts.verifyDeps,
169
+ projectRoot,
170
+ });
171
+ if (verifyResult.verified) {
172
+ // Move to monitoring — criteria passed.
173
+ await transitionPhase(projectRoot, incidentId, "monitoring", {});
174
+ return { newPhase: "monitoring", verified: true };
175
+ }
176
+ else {
177
+ // Verification failed — stay in remediating.
178
+ const meta = await readIncidentMetadata(projectRoot, incidentId);
179
+ return { newPhase: meta.status, verified: false };
180
+ }
181
+ }
182
+ // No verification configured or skipped — move to monitoring optimistically.
183
+ await transitionPhase(projectRoot, incidentId, "monitoring", {});
184
+ return { newPhase: "monitoring" };
185
+ }
186
+ // ── abort: terminal escape hatch (s24-c7) ─────────────────────────────────────
187
+ /**
188
+ * Abort an incident at any phase.
189
+ *
190
+ * Writes .bober/incidents/<id>/aborted.txt with reason.
191
+ * Writes .bober/incidents/<id>/abort-report.md with reason + rollback plan.
192
+ * Transitions the incident to status='aborted' (terminal).
193
+ *
194
+ * IF confirmRollback=true: plans + executes rollback for executed-not-rolled-back
195
+ * changes (each step goes through the deploy gate individually).
196
+ * IF confirmRollback=false (default): does NOT execute any rollbacks.
197
+ *
198
+ * Silent rollback on abort is a footgun — confirmRollback=true is the explicit
199
+ * opt-in. Without it, the operator is on the hook for manual cleanup.
200
+ *
201
+ * @throws Error if the incident is already aborted (abort is terminal).
202
+ */
203
+ export async function abort(projectRoot, incidentId, opts) {
204
+ const now = opts.now ?? (() => new Date());
205
+ const reason = opts.reason;
206
+ // Read current state.
207
+ const meta = await readIncidentMetadata(projectRoot, incidentId);
208
+ if (meta.status === "aborted") {
209
+ throw new Error(`Incident ${incidentId} is already aborted. abort is a terminal state — no further transitions are possible.`);
210
+ }
211
+ const incidentDir = join(projectRoot, ".bober", "incidents", incidentId);
212
+ await mkdir(incidentDir, { recursive: true });
213
+ // Write aborted.txt marker.
214
+ const abortedTxtPath = join(incidentDir, "aborted.txt");
215
+ await writeFile(abortedTxtPath, `Incident ${incidentId} aborted at ${now().toISOString()}\nReason: ${reason}\n`, { encoding: "utf-8", mode: 0o600 });
216
+ // Emit timeline event.
217
+ await appendTimeline(projectRoot, incidentId, {
218
+ timestamp: now().toISOString(),
219
+ eventKind: "incident_aborted",
220
+ source: "human",
221
+ summary: `Incident aborted. Reason: ${reason}`,
222
+ });
223
+ // Optionally run rollback.
224
+ let rollbackResult;
225
+ let planText = "(no rollback requested)";
226
+ if (opts.confirmRollback) {
227
+ const plan = await planRollback(projectRoot, incidentId);
228
+ planText = presentPlan(plan);
229
+ if (plan.steps.length > 0) {
230
+ rollbackResult = await executeRollback(projectRoot, incidentId, plan, {
231
+ config: opts.config,
232
+ ...(opts.rollbackOpts ?? {}),
233
+ now,
234
+ });
235
+ }
236
+ else {
237
+ rollbackResult = {
238
+ attempted: 0,
239
+ succeeded: 0,
240
+ failed: 0,
241
+ remaining: [],
242
+ escalated: false,
243
+ };
244
+ }
245
+ }
246
+ // Write abort-report.md.
247
+ const abortReportPath = join(incidentDir, "abort-report.md");
248
+ const rollbackSection = rollbackResult
249
+ ? `## Rollback\n\n${planText}\n\nResult: ${rollbackResult.succeeded}/${rollbackResult.attempted} steps succeeded.${rollbackResult.escalated ? " ESCALATED — manual recovery required." : ""}\n`
250
+ : `## Rollback\n\nNot executed (--confirm-rollback was not provided). Manual cleanup may be required.\n\n${planText}\n`;
251
+ const report = `# Abort Report: ${incidentId}
252
+
253
+ ## Incident Details
254
+
255
+ - **Incident ID:** ${incidentId}
256
+ - **Symptom:** ${meta.symptom}
257
+ - **Phase at abort:** ${meta.status}
258
+ - **Aborted at:** ${now().toISOString()}
259
+ - **Reason:** ${reason}
260
+
261
+ ${rollbackSection}
262
+ ---
263
+
264
+ *This is a brief abort report, not a full postmortem. For a complete root cause analysis, re-open the incident or run \`bober postmortem generate ${incidentId}\`.*
265
+ `;
266
+ await writeFile(abortReportPath, report, { encoding: "utf-8", mode: 0o600 });
267
+ // Transition to aborted (terminal). aborted does not require verifyResult/overrideToken.
268
+ // setIncidentStatus does NOT gate on 'aborted' — only 'resolved' is gated.
269
+ await setIncidentStatus(projectRoot, incidentId, "aborted");
270
+ // Sprint 28 — telemetry: emit incident-aborted (fire-and-forget)
271
+ if (opts.boberConfig) {
272
+ void emit(projectRoot, opts.boberConfig, "incident-aborted", { incidentId });
273
+ }
274
+ return {
275
+ rollback: rollbackResult,
276
+ abortReportPath,
277
+ };
278
+ }
279
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/incident/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Playbook search — symptom-to-playbook matching (Sprint 25).
3
+ *
4
+ * Loads playbooks from .bober/playbooks/*.md (skipping README.md).
5
+ * Each playbook frontmatter (name, classification, applicableSymptoms,
6
+ * prerequisites) is parsed via a minimal YAML block parser — no external dep.
7
+ *
8
+ * searchPlaybooks(symptom) tokenises the symptom string, scores each
9
+ * playbook's applicableSymptoms by token overlap, and returns matches
10
+ * sorted by confidence descending.
11
+ *
12
+ * Confidence thresholds (exported constants):
13
+ * HIGH_CONFIDENCE_THRESHOLD = 0.6 → diagnoser auto-follows playbook
14
+ * LOW_CONFIDENCE_THRESHOLD = 0.3 → diagnoser surfaces as suggestion
15
+ *
16
+ * Sprint 25 — src/incident/playbook-search.ts
17
+ */
18
+ /** A match at or above this threshold triggers automatic playbook execution. */
19
+ export declare const HIGH_CONFIDENCE_THRESHOLD = 0.6;
20
+ /** A match at or above this (and below HIGH) surfaces as a suggestion. */
21
+ export declare const LOW_CONFIDENCE_THRESHOLD = 0.3;
22
+ export interface Playbook {
23
+ name: string;
24
+ classification: "standard" | "emergency";
25
+ applicableSymptoms: string[];
26
+ prerequisites: string[];
27
+ filePath: string;
28
+ /** Raw step sections (## Step N: ...) extracted from the markdown body */
29
+ stepSections: string[];
30
+ }
31
+ export interface PlaybookMatch {
32
+ playbook: Playbook;
33
+ /** Confidence in [0, 1]. Clamped to the range. */
34
+ confidence: number;
35
+ /** The tokens from the query that overlapped with a matched symptom phrase */
36
+ matchedTokens: string[];
37
+ }
38
+ /**
39
+ * Tokenise a string into lowercase, non-empty, non-stopword tokens.
40
+ * Splits on whitespace and common punctuation.
41
+ */
42
+ export declare function tokenize(text: string): string[];
43
+ /**
44
+ * Load all playbooks from .bober/playbooks/*.md in the given projectRoot.
45
+ * - Skips README.md
46
+ * - Skips files with missing or malformed frontmatter (logs a warning)
47
+ * - Returns [] gracefully when the directory does not exist
48
+ */
49
+ export declare function loadPlaybooks(projectRoot: string): Promise<Playbook[]>;
50
+ /**
51
+ * Search the playbook library for playbooks matching the given symptom string.
52
+ *
53
+ * Algorithm:
54
+ * 1. Tokenise the symptom string.
55
+ * 2. For each playbook, score each of its applicableSymptoms phrases.
56
+ * 3. Take the maximum score across phrases as the playbook's confidence.
57
+ * 4. Return all playbooks with confidence > 0, sorted descending by confidence.
58
+ *
59
+ * @param symptom The free-text symptom string from the incident.
60
+ * @param projectRoot Absolute path to the project root. Defaults to process.cwd().
61
+ */
62
+ export declare function searchPlaybooks(symptom: string, projectRoot?: string): Promise<PlaybookMatch[]>;
63
+ /**
64
+ * Search a pre-loaded list of playbooks. Useful for testing without touching disk.
65
+ */
66
+ export declare function searchPlaybooksList(symptom: string, playbooks: Playbook[]): PlaybookMatch[];
67
+ //# sourceMappingURL=playbook-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook-search.d.ts","sourceRoot":"","sources":["../../src/incident/playbook-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAE7C,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAI5C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,UAAU,GAAG,WAAW,CAAC;IACzC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAYD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAK/C;AA8ID;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAuD5E;AAwBD;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,EAAE,CAAC,CAI1B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,QAAQ,EAAE,GACpB,aAAa,EAAE,CAkCjB"}
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Playbook search — symptom-to-playbook matching (Sprint 25).
3
+ *
4
+ * Loads playbooks from .bober/playbooks/*.md (skipping README.md).
5
+ * Each playbook frontmatter (name, classification, applicableSymptoms,
6
+ * prerequisites) is parsed via a minimal YAML block parser — no external dep.
7
+ *
8
+ * searchPlaybooks(symptom) tokenises the symptom string, scores each
9
+ * playbook's applicableSymptoms by token overlap, and returns matches
10
+ * sorted by confidence descending.
11
+ *
12
+ * Confidence thresholds (exported constants):
13
+ * HIGH_CONFIDENCE_THRESHOLD = 0.6 → diagnoser auto-follows playbook
14
+ * LOW_CONFIDENCE_THRESHOLD = 0.3 → diagnoser surfaces as suggestion
15
+ *
16
+ * Sprint 25 — src/incident/playbook-search.ts
17
+ */
18
+ import { readFile, readdir } from "node:fs/promises";
19
+ import { join } from "node:path";
20
+ // ── Confidence thresholds ─────────────────────────────────────────────────────
21
+ /** A match at or above this threshold triggers automatic playbook execution. */
22
+ export const HIGH_CONFIDENCE_THRESHOLD = 0.6;
23
+ /** A match at or above this (and below HIGH) surfaces as a suggestion. */
24
+ export const LOW_CONFIDENCE_THRESHOLD = 0.3;
25
+ // ── Stop-word list ────────────────────────────────────────────────────────────
26
+ const STOPWORDS = new Set([
27
+ "the", "is", "a", "an", "in", "on", "at", "of", "to", "for", "and", "or",
28
+ "be", "are", "was", "were", "has", "have", "had", "been", "not", "by",
29
+ "it", "its", "this", "that", "but", "with", "from", "as", "up",
30
+ ]);
31
+ // ── Tokenizer ─────────────────────────────────────────────────────────────────
32
+ /**
33
+ * Tokenise a string into lowercase, non-empty, non-stopword tokens.
34
+ * Splits on whitespace and common punctuation.
35
+ */
36
+ export function tokenize(text) {
37
+ return text
38
+ .toLowerCase()
39
+ .split(/[\s\-_/.,;:!?()[\]{}'"]+/)
40
+ .filter((t) => t.length > 0 && !STOPWORDS.has(t));
41
+ }
42
+ /**
43
+ * Parse the YAML frontmatter block between the first two `---` lines.
44
+ * Handles only the simple types used in playbook files:
45
+ * - scalar: key: value
46
+ * - list: key:\n - item\n - item
47
+ *
48
+ * Returns null if no frontmatter block is found.
49
+ */
50
+ function parseFrontmatter(content) {
51
+ // Must start with ---
52
+ const lines = content.split("\n");
53
+ if (lines[0]?.trim() !== "---")
54
+ return null;
55
+ // Find closing ---
56
+ let closingIdx = -1;
57
+ for (let i = 1; i < lines.length; i++) {
58
+ if (lines[i]?.trim() === "---") {
59
+ closingIdx = i;
60
+ break;
61
+ }
62
+ }
63
+ if (closingIdx === -1)
64
+ return null;
65
+ const yamlLines = lines.slice(1, closingIdx);
66
+ const result = {};
67
+ let currentKey = null;
68
+ let currentList = null;
69
+ for (const raw of yamlLines) {
70
+ const line = raw;
71
+ // List item under a key
72
+ if (line.startsWith(" - ") || line.startsWith(" - ")) {
73
+ const item = line.replace(/^\s+-\s*/, "").trim();
74
+ if (currentList !== null && currentKey !== null) {
75
+ currentList.push(item);
76
+ }
77
+ continue;
78
+ }
79
+ // Flush previous list if any
80
+ if (currentList !== null && currentKey !== null) {
81
+ switch (currentKey) {
82
+ case "applicableSymptoms":
83
+ result.applicableSymptoms = currentList;
84
+ break;
85
+ case "prerequisites":
86
+ result.prerequisites = currentList;
87
+ break;
88
+ }
89
+ currentList = null;
90
+ currentKey = null;
91
+ }
92
+ // Key: value or Key: (start of list)
93
+ const colonIdx = line.indexOf(":");
94
+ if (colonIdx === -1)
95
+ continue;
96
+ const key = line.slice(0, colonIdx).trim();
97
+ const value = line.slice(colonIdx + 1).trim();
98
+ if (value === "") {
99
+ // Start of a list block
100
+ currentKey = key;
101
+ currentList = [];
102
+ }
103
+ else {
104
+ // Scalar
105
+ switch (key) {
106
+ case "name":
107
+ result.name = value;
108
+ break;
109
+ case "classification":
110
+ result.classification = value;
111
+ break;
112
+ default:
113
+ break;
114
+ }
115
+ currentKey = null;
116
+ currentList = null;
117
+ }
118
+ }
119
+ // Flush trailing list
120
+ if (currentList !== null && currentKey !== null) {
121
+ switch (currentKey) {
122
+ case "applicableSymptoms":
123
+ result.applicableSymptoms = currentList;
124
+ break;
125
+ case "prerequisites":
126
+ result.prerequisites = currentList;
127
+ break;
128
+ }
129
+ }
130
+ return result;
131
+ }
132
+ /**
133
+ * Extract step sections from the markdown body (after the frontmatter).
134
+ * A step section starts with `## Step N:` and ends before the next `## Step` or EOF.
135
+ */
136
+ function extractSteps(content) {
137
+ const lines = content.split("\n");
138
+ // Skip frontmatter
139
+ let bodyStart = 0;
140
+ if (lines[0]?.trim() === "---") {
141
+ for (let i = 1; i < lines.length; i++) {
142
+ if (lines[i]?.trim() === "---") {
143
+ bodyStart = i + 1;
144
+ break;
145
+ }
146
+ }
147
+ }
148
+ const steps = [];
149
+ let currentStep = null;
150
+ for (let i = bodyStart; i < lines.length; i++) {
151
+ const line = lines[i] ?? "";
152
+ if (/^##\s+Step\s+\d+:/.test(line)) {
153
+ if (currentStep !== null) {
154
+ steps.push(currentStep.join("\n").trim());
155
+ }
156
+ currentStep = [line];
157
+ }
158
+ else if (currentStep !== null) {
159
+ currentStep.push(line);
160
+ }
161
+ }
162
+ if (currentStep !== null) {
163
+ steps.push(currentStep.join("\n").trim());
164
+ }
165
+ return steps;
166
+ }
167
+ // ── loadPlaybooks ─────────────────────────────────────────────────────────────
168
+ /**
169
+ * Load all playbooks from .bober/playbooks/*.md in the given projectRoot.
170
+ * - Skips README.md
171
+ * - Skips files with missing or malformed frontmatter (logs a warning)
172
+ * - Returns [] gracefully when the directory does not exist
173
+ */
174
+ export async function loadPlaybooks(projectRoot) {
175
+ const playbooksDir = join(projectRoot, ".bober", "playbooks");
176
+ let entries;
177
+ try {
178
+ entries = await readdir(playbooksDir);
179
+ }
180
+ catch (err) {
181
+ if (err.code === "ENOENT")
182
+ return [];
183
+ throw err;
184
+ }
185
+ const mdFiles = entries.filter((e) => e.endsWith(".md") && e.toLowerCase() !== "readme.md");
186
+ const playbooks = [];
187
+ for (const filename of mdFiles) {
188
+ const filePath = join(playbooksDir, filename);
189
+ let content;
190
+ try {
191
+ content = await readFile(filePath, "utf-8");
192
+ }
193
+ catch {
194
+ process.stderr.write(`[playbook-search] warning: could not read ${filePath}\n`);
195
+ continue;
196
+ }
197
+ const fm = parseFrontmatter(content);
198
+ if (fm === null) {
199
+ process.stderr.write(`[playbook-search] warning: no frontmatter in ${filename}, skipping\n`);
200
+ continue;
201
+ }
202
+ if (!fm.name || !fm.classification || !fm.applicableSymptoms?.length) {
203
+ process.stderr.write(`[playbook-search] warning: malformed frontmatter in ${filename} (missing name/classification/applicableSymptoms), skipping\n`);
204
+ continue;
205
+ }
206
+ const classification = fm.classification;
207
+ if (classification !== "standard" && classification !== "emergency") {
208
+ process.stderr.write(`[playbook-search] warning: unknown classification '${fm.classification}' in ${filename}, skipping\n`);
209
+ continue;
210
+ }
211
+ playbooks.push({
212
+ name: fm.name,
213
+ classification,
214
+ applicableSymptoms: fm.applicableSymptoms,
215
+ prerequisites: fm.prerequisites ?? [],
216
+ filePath,
217
+ stepSections: extractSteps(content),
218
+ });
219
+ }
220
+ return playbooks;
221
+ }
222
+ // ── Scoring helper ────────────────────────────────────────────────────────────
223
+ /**
224
+ * Score a symptom query against a single symptom phrase.
225
+ *
226
+ * score = (number of overlapping tokens) / (number of tokens in the phrase)
227
+ *
228
+ * Clamped to [0, 1].
229
+ */
230
+ function scoreAgainstPhrase(queryTokens, phrase) {
231
+ const phraseTokens = tokenize(phrase);
232
+ if (phraseTokens.length === 0)
233
+ return { score: 0, matchedTokens: [] };
234
+ const matched = phraseTokens.filter((t) => queryTokens.has(t));
235
+ const score = Math.min(1, matched.length / phraseTokens.length);
236
+ return { score, matchedTokens: matched };
237
+ }
238
+ // ── searchPlaybooks ───────────────────────────────────────────────────────────
239
+ /**
240
+ * Search the playbook library for playbooks matching the given symptom string.
241
+ *
242
+ * Algorithm:
243
+ * 1. Tokenise the symptom string.
244
+ * 2. For each playbook, score each of its applicableSymptoms phrases.
245
+ * 3. Take the maximum score across phrases as the playbook's confidence.
246
+ * 4. Return all playbooks with confidence > 0, sorted descending by confidence.
247
+ *
248
+ * @param symptom The free-text symptom string from the incident.
249
+ * @param projectRoot Absolute path to the project root. Defaults to process.cwd().
250
+ */
251
+ export async function searchPlaybooks(symptom, projectRoot) {
252
+ const root = projectRoot ?? process.cwd();
253
+ const playbooks = await loadPlaybooks(root);
254
+ return searchPlaybooksList(symptom, playbooks);
255
+ }
256
+ /**
257
+ * Search a pre-loaded list of playbooks. Useful for testing without touching disk.
258
+ */
259
+ export function searchPlaybooksList(symptom, playbooks) {
260
+ const queryTokens = new Set(tokenize(symptom));
261
+ if (queryTokens.size === 0)
262
+ return [];
263
+ const matches = [];
264
+ for (const playbook of playbooks) {
265
+ let bestScore = 0;
266
+ let bestMatchedTokens = [];
267
+ for (const phrase of playbook.applicableSymptoms) {
268
+ const { score, matchedTokens } = scoreAgainstPhrase(queryTokens, phrase);
269
+ if (score > bestScore) {
270
+ bestScore = score;
271
+ bestMatchedTokens = matchedTokens;
272
+ }
273
+ }
274
+ if (bestScore > 0) {
275
+ matches.push({
276
+ playbook,
277
+ confidence: bestScore,
278
+ matchedTokens: bestMatchedTokens,
279
+ });
280
+ }
281
+ }
282
+ // Sort descending by confidence; ties broken by name for determinism.
283
+ matches.sort((a, b) => b.confidence !== a.confidence
284
+ ? b.confidence - a.confidence
285
+ : a.playbook.name.localeCompare(b.playbook.name));
286
+ return matches;
287
+ }
288
+ //# sourceMappingURL=playbook-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook-search.js","sourceRoot":"","sources":["../../src/incident/playbook-search.ts"],"names":[],"mappings":"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"}