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,341 @@
1
+ /**
2
+ * GraphPipelineLifecycle — singleton that owns the tokensave serve subprocess
3
+ * for the duration of a single `agent-bober run` pipeline invocation.
4
+ *
5
+ * Module-level export guarantees one instance per Node process (ESM singleton).
6
+ * Importers receive the same object regardless of how many times they import.
7
+ *
8
+ * Responsibilities:
9
+ * - Read bober.config.json graph section.
10
+ * - Run prereq check before spawning.
11
+ * - Orphan cleanup via PID file (`.bober/graph/.serve.pid`).
12
+ * - SIGTERM/SIGINT handlers for graceful shutdown.
13
+ * - Idempotent start() and stop().
14
+ */
15
+ import { rm } from "node:fs/promises";
16
+ import { resolve } from "node:path";
17
+ import { fileExists, readJson, writeJson } from "../utils/fs.js";
18
+ import { logger } from "../utils/logger.js";
19
+ import { TokensavePrereqCheck } from "./prereq.js";
20
+ import { GraphArtifactStore } from "./artifact-store.js";
21
+ import { TokensaveMcpClient } from "./mcp-client.js";
22
+ import { IncidentLog } from "./incidents.js";
23
+ import { GraphClient } from "./client.js";
24
+ import { GraphFallback } from "./fallback.js";
25
+ import { GraphHookHandler } from "./hook-handler.js";
26
+ import { TokensaveCli } from "./cli.js";
27
+ // ── Implementation ─────────────────────────────────────────────────
28
+ class GraphPipelineLifecycleImpl {
29
+ started = false;
30
+ stopping = false;
31
+ healthOverride = null;
32
+ mcpClient = null;
33
+ store = null;
34
+ incidents = null;
35
+ hookHandler = null;
36
+ projectRoot = null;
37
+ pidPath = null;
38
+ sigHandler = null;
39
+ // ── start ────────────────────────────────────────────────────────
40
+ /**
41
+ * Start the lifecycle.
42
+ *
43
+ * - When graph.enabled is false (or graph section is absent): no-op; health = 'disabled'.
44
+ * - Otherwise: prereq check → orphan cleanup → spawn serve → write PID file → register signals.
45
+ * - Idempotent: calling start() twice is safe (second call is a no-op).
46
+ */
47
+ async start(projectRoot, config) {
48
+ if (this.started)
49
+ return;
50
+ this.started = true;
51
+ const cfg = config.graph;
52
+ if (!cfg || cfg.enabled === false) {
53
+ this.healthOverride = "disabled";
54
+ return;
55
+ }
56
+ this.projectRoot = projectRoot;
57
+ this.pidPath = resolve(projectRoot, ".bober/graph/.serve.pid");
58
+ this.incidents = new IncidentLog(projectRoot);
59
+ // Prereq check — fail fast on missing/incompatible binary
60
+ const prereq = await new TokensavePrereqCheck(cfg.tokensavePath ?? "tokensave").check();
61
+ if (!prereq.ok) {
62
+ throw new Error(`Graph prereq failed: ${prereq.reason} — ${prereq.hint}`);
63
+ }
64
+ // Create .bober/graph/ directory
65
+ this.store = new GraphArtifactStore(projectRoot);
66
+ await this.store.ensureLayout();
67
+ // Orphan cleanup
68
+ await this.handleOrphan();
69
+ // Spawn
70
+ this.mcpClient = new TokensaveMcpClient(projectRoot, cfg, this.incidents, cfg.tokensavePath ?? "tokensave");
71
+ await this.mcpClient.start();
72
+ // Instantiate and start hook handler (debounce + queue + IPC poll).
73
+ const cli = new TokensaveCli(projectRoot, this.store, cfg.tokensavePath ?? "tokensave");
74
+ this.hookHandler = new GraphHookHandler(cli, this.store, this.incidents, cfg, projectRoot);
75
+ this.hookHandler.start();
76
+ // Write PID file
77
+ await this.writePidFile();
78
+ // Register SIGTERM / SIGINT handlers
79
+ this.registerSignalHandlers();
80
+ const pid = this.mcpClient.childPid;
81
+ if (pid !== null) {
82
+ try {
83
+ await this.incidents.append({
84
+ ts: new Date().toISOString(),
85
+ event: "start",
86
+ pid,
87
+ });
88
+ }
89
+ catch {
90
+ // Incident write failure must not break startup
91
+ }
92
+ }
93
+ logger.info(`[graph] Pipeline lifecycle started (pid=${String(pid)})`);
94
+ }
95
+ // ── stop ─────────────────────────────────────────────────────────
96
+ /**
97
+ * Gracefully stop the lifecycle.
98
+ * SIGTERM → wait 2000ms (inside mcpClient.stop()) → SIGKILL fallback.
99
+ * Idempotent.
100
+ */
101
+ async stop() {
102
+ if (this.stopping)
103
+ return;
104
+ this.stopping = true;
105
+ // Drain hook queue BEFORE killing the engine; otherwise cli.sync() will fail.
106
+ if (this.hookHandler) {
107
+ try {
108
+ await this.hookHandler.flush();
109
+ }
110
+ catch {
111
+ // flush() errors must not propagate from signal handlers
112
+ }
113
+ }
114
+ if (this.mcpClient) {
115
+ const pid = this.mcpClient.childPid;
116
+ try {
117
+ await this.mcpClient.stop();
118
+ if (pid !== null && this.incidents) {
119
+ await this.incidents.append({
120
+ ts: new Date().toISOString(),
121
+ event: "stop",
122
+ pid,
123
+ reason: "normal",
124
+ });
125
+ }
126
+ }
127
+ catch {
128
+ // stop() errors must not propagate from signal handlers
129
+ }
130
+ }
131
+ await this.removePidFile();
132
+ this.unregisterSignalHandlers();
133
+ logger.info("[graph] Pipeline lifecycle stopped");
134
+ }
135
+ // ── engineHealth ──────────────────────────────────────────────────
136
+ engineHealth() {
137
+ if (this.healthOverride === "disabled")
138
+ return "disabled";
139
+ if (!this.mcpClient)
140
+ return "starting";
141
+ return this.mcpClient.health();
142
+ }
143
+ // ── projectRootOrNull ─────────────────────────────────────────────
144
+ /**
145
+ * Project root of the active pipeline, or null when not started.
146
+ *
147
+ * Used by PreflightContextInjector to resolve a telemetry sink when the
148
+ * injector was constructed without an explicit projectRoot (the common case
149
+ * at most agent call sites). Lets graph-preflight telemetry fire for every
150
+ * role with zero changes to the call sites.
151
+ */
152
+ projectRootOrNull() {
153
+ return this.projectRoot;
154
+ }
155
+ // ── getGraphClient ────────────────────────────────────────────────
156
+ /**
157
+ * Lazy accessor for the GraphClient instance.
158
+ * Returns null if the engine is not 'ready'.
159
+ * Caches the constructed client on first call.
160
+ */
161
+ _graphClient = null;
162
+ getGraphClient() {
163
+ if (this.engineHealth() !== "ready")
164
+ return null;
165
+ if (!this.mcpClient || !this.store || !this.incidents || !this.projectRoot) {
166
+ return null;
167
+ }
168
+ if (!this._graphClient) {
169
+ const fallback = new GraphFallback("dual");
170
+ this._graphClient = new GraphClient(this.projectRoot, this.mcpClient, this.store, fallback, this.incidents,
171
+ // GraphClient constructor takes config as GraphSection — use minimal stub
172
+ // that satisfies the type (lifecycle already validated config at start())
173
+ {
174
+ enabled: true,
175
+ autoSync: true,
176
+ languageTier: "core",
177
+ manifestPath: ".bober/graph/manifest.json",
178
+ syncTimeoutMs: 2000,
179
+ queryTimeoutMs: 5000,
180
+ debounceMs: 750,
181
+ hookQueueMax: 50,
182
+ maxEngineRssMb: 512,
183
+ exposeOnExternalMcp: true,
184
+ preflightBudgets: {
185
+ architect: 4000,
186
+ curator: 2000,
187
+ generator: 1000,
188
+ evaluator: 1500,
189
+ researcherPhase2: 3000,
190
+ },
191
+ });
192
+ }
193
+ return this._graphClient;
194
+ }
195
+ /**
196
+ * Returns {client, fallback} when engine is 'ready', null otherwise.
197
+ * Used by resolveRoleTools to construct gated tool sets.
198
+ */
199
+ getGraphDeps() {
200
+ const client = this.getGraphClient();
201
+ if (!client)
202
+ return null;
203
+ // Construct a matching fallback (dual mode — same as used in getGraphClient)
204
+ const fallback = new GraphFallback("dual");
205
+ return { client, fallback };
206
+ }
207
+ // ── For testing only ──────────────────────────────────────────────
208
+ /**
209
+ * Reset internal state so tests can call start() again on the same instance.
210
+ * NOT intended for production use.
211
+ */
212
+ _reset() {
213
+ this.started = false;
214
+ this.stopping = false;
215
+ this.healthOverride = null;
216
+ this.mcpClient = null;
217
+ this.store = null;
218
+ this.incidents = null;
219
+ this.hookHandler = null;
220
+ this.projectRoot = null;
221
+ this.pidPath = null;
222
+ this._graphClient = null;
223
+ this.unregisterSignalHandlers();
224
+ this.sigHandler = null;
225
+ }
226
+ // ── Private helpers ───────────────────────────────────────────────
227
+ async handleOrphan() {
228
+ if (!this.pidPath)
229
+ return;
230
+ if (!(await fileExists(this.pidPath)))
231
+ return;
232
+ let existing;
233
+ try {
234
+ existing = await readJson(this.pidPath);
235
+ }
236
+ catch {
237
+ // Malformed PID file — remove and continue
238
+ await rm(this.pidPath, { force: true });
239
+ return;
240
+ }
241
+ if (!existing || typeof existing.pid !== "number") {
242
+ await rm(this.pidPath, { force: true });
243
+ return;
244
+ }
245
+ const orphanPid = existing.pid;
246
+ try {
247
+ // probe: throws ESRCH if dead, throws EPERM if dead-but-not-owned
248
+ process.kill(orphanPid, 0);
249
+ // Still alive → kill it
250
+ logger.warn(`[graph] Killing orphan tokensave serve (pid=${orphanPid})`);
251
+ try {
252
+ process.kill(orphanPid, "SIGTERM");
253
+ }
254
+ catch {
255
+ // Already gone
256
+ }
257
+ await delay(500);
258
+ try {
259
+ process.kill(orphanPid, "SIGKILL");
260
+ }
261
+ catch {
262
+ // Already gone
263
+ }
264
+ if (this.incidents) {
265
+ try {
266
+ await this.incidents.append({
267
+ ts: new Date().toISOString(),
268
+ event: "orphan-killed",
269
+ pid: orphanPid,
270
+ });
271
+ }
272
+ catch {
273
+ // Best-effort
274
+ }
275
+ }
276
+ }
277
+ catch {
278
+ // Dead or not accessible — safe to overwrite
279
+ }
280
+ await rm(this.pidPath, { force: true });
281
+ }
282
+ async writePidFile() {
283
+ if (!this.pidPath || !this.mcpClient)
284
+ return;
285
+ const pid = this.mcpClient.childPid;
286
+ if (pid === null)
287
+ return;
288
+ const data = {
289
+ pid,
290
+ startedAt: new Date().toISOString(),
291
+ projectRoot: this.projectRoot ?? "",
292
+ };
293
+ await writeJson(this.pidPath, data);
294
+ }
295
+ async removePidFile() {
296
+ if (!this.pidPath)
297
+ return;
298
+ try {
299
+ await rm(this.pidPath, { force: true });
300
+ }
301
+ catch {
302
+ // Best-effort
303
+ }
304
+ }
305
+ registerSignalHandlers() {
306
+ this.sigHandler = () => {
307
+ this.stop().catch(() => {
308
+ // Signal handlers must not throw
309
+ });
310
+ };
311
+ process.on("SIGTERM", this.sigHandler);
312
+ process.on("SIGINT", this.sigHandler);
313
+ }
314
+ unregisterSignalHandlers() {
315
+ if (this.sigHandler) {
316
+ process.removeListener("SIGTERM", this.sigHandler);
317
+ process.removeListener("SIGINT", this.sigHandler);
318
+ }
319
+ }
320
+ }
321
+ // ── Module-level singleton ─────────────────────────────────────────
322
+ /**
323
+ * The one and only GraphPipelineLifecycle instance per Node process.
324
+ *
325
+ * ESM module caching guarantees this is the same object for all importers
326
+ * in the same realm — even if imported from multiple modules simultaneously.
327
+ *
328
+ * Usage:
329
+ * import { graphPipelineLifecycle } from './pipeline-lifecycle.js';
330
+ * await graphPipelineLifecycle.start(projectRoot, config);
331
+ * // ... pipeline runs ...
332
+ * await graphPipelineLifecycle.stop();
333
+ */
334
+ export const graphPipelineLifecycle = new GraphPipelineLifecycleImpl();
335
+ // Re-export the class for testing purposes (tests can call _reset())
336
+ export { GraphPipelineLifecycleImpl };
337
+ // ── Utilities ──────────────────────────────────────────────────────
338
+ function delay(ms) {
339
+ return new Promise((resolve) => setTimeout(resolve, ms));
340
+ }
341
+ //# sourceMappingURL=pipeline-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-lifecycle.js","sourceRoot":"","sources":["../../src/graph/pipeline-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Pre-flight graph context injection — token budget constants and enforcement.
3
+ *
4
+ * Token counting uses Math.ceil(text.length / 4) as a conservative estimate.
5
+ * Anthropic models average ~3.5–4.0 chars/token for English markdown.
6
+ * Over-estimation is intentional — the cap is firm.
7
+ *
8
+ * TODO(phase-2): swap estimateTokens() to tiktoken when the dep is approved.
9
+ */
10
+ /**
11
+ * Default token budgets for pre-flight graph context injection (ADR-9).
12
+ * These match the defaults in GraphPreflightBudgetsSchema in schema.ts.
13
+ * Runtime code reads budgets from config.graph.preflightBudgets; these
14
+ * constants exist for reference and testing.
15
+ */
16
+ export declare const DEFAULT_PREFLIGHT_BUDGETS: {
17
+ readonly architect: 4000;
18
+ readonly curator: 2000;
19
+ readonly generator: 1000;
20
+ readonly evaluator: 1500;
21
+ readonly "researcher-phase2": 3000;
22
+ };
23
+ /**
24
+ * Estimate token count for a string.
25
+ *
26
+ * Uses a conservative chars/4 heuristic. Anthropic models average ~3.5–4.0
27
+ * chars per token for English markdown. Over-estimation is intentional: the
28
+ * pre-flight budget cap is hard, so rounding up prevents silent overruns.
29
+ *
30
+ * TODO(phase-2): replace chars/4 with tiktoken when available.
31
+ */
32
+ export declare function estimateTokens(text: string): number;
33
+ /**
34
+ * Enforce a token budget on a markdown string composed of `### Section` blocks.
35
+ *
36
+ * Algorithm:
37
+ * 1. If under budget, return unchanged.
38
+ * 2. Split on `\n### ` boundaries (whole-section granularity).
39
+ * 3. Drop sections from the END until under budget.
40
+ * 4. Append `[truncated due to budget — N more results omitted]` marker.
41
+ * 5. Hard-cap fallback: if even header + first section exceeds budget,
42
+ * truncate by character count.
43
+ *
44
+ * @param markdown Full formatted markdown string.
45
+ * @param budget Token budget (positive integer).
46
+ * @returns Object with the capped output string and the number of sections dropped.
47
+ */
48
+ export declare function enforceBudget(markdown: string, budget: number): {
49
+ out: string;
50
+ dropped: number;
51
+ };
52
+ //# sourceMappingURL=preflight-budgets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight-budgets.d.ts","sourceRoot":"","sources":["../../src/graph/preflight-budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB;;;;;;CAMK,CAAC;AAI5C;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA8BlC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Pre-flight graph context injection — token budget constants and enforcement.
3
+ *
4
+ * Token counting uses Math.ceil(text.length / 4) as a conservative estimate.
5
+ * Anthropic models average ~3.5–4.0 chars/token for English markdown.
6
+ * Over-estimation is intentional — the cap is firm.
7
+ *
8
+ * TODO(phase-2): swap estimateTokens() to tiktoken when the dep is approved.
9
+ */
10
+ // ── Per-role budget constants ──────────────────────────────────────
11
+ /**
12
+ * Default token budgets for pre-flight graph context injection (ADR-9).
13
+ * These match the defaults in GraphPreflightBudgetsSchema in schema.ts.
14
+ * Runtime code reads budgets from config.graph.preflightBudgets; these
15
+ * constants exist for reference and testing.
16
+ */
17
+ export const DEFAULT_PREFLIGHT_BUDGETS = {
18
+ architect: 4000,
19
+ curator: 2000,
20
+ generator: 1000,
21
+ evaluator: 1500,
22
+ "researcher-phase2": 3000,
23
+ };
24
+ // ── Token estimator ────────────────────────────────────────────────
25
+ /**
26
+ * Estimate token count for a string.
27
+ *
28
+ * Uses a conservative chars/4 heuristic. Anthropic models average ~3.5–4.0
29
+ * chars per token for English markdown. Over-estimation is intentional: the
30
+ * pre-flight budget cap is hard, so rounding up prevents silent overruns.
31
+ *
32
+ * TODO(phase-2): replace chars/4 with tiktoken when available.
33
+ */
34
+ export function estimateTokens(text) {
35
+ return Math.ceil(text.length / 4);
36
+ }
37
+ // ── Budget enforcement ─────────────────────────────────────────────
38
+ /**
39
+ * Enforce a token budget on a markdown string composed of `### Section` blocks.
40
+ *
41
+ * Algorithm:
42
+ * 1. If under budget, return unchanged.
43
+ * 2. Split on `\n### ` boundaries (whole-section granularity).
44
+ * 3. Drop sections from the END until under budget.
45
+ * 4. Append `[truncated due to budget — N more results omitted]` marker.
46
+ * 5. Hard-cap fallback: if even header + first section exceeds budget,
47
+ * truncate by character count.
48
+ *
49
+ * @param markdown Full formatted markdown string.
50
+ * @param budget Token budget (positive integer).
51
+ * @returns Object with the capped output string and the number of sections dropped.
52
+ */
53
+ export function enforceBudget(markdown, budget) {
54
+ if (budget <= 0) {
55
+ return { out: "[truncated due to budget — budget=0]", dropped: 0 };
56
+ }
57
+ if (estimateTokens(markdown) <= budget) {
58
+ return { out: markdown, dropped: 0 };
59
+ }
60
+ // Split preserving the delimiter so each part starts with "### " except the first.
61
+ const parts = markdown.split(/(?=^### )/m);
62
+ let dropped = 0;
63
+ while (parts.length > 1 && estimateTokens(parts.join("")) > budget) {
64
+ parts.pop();
65
+ dropped++;
66
+ }
67
+ let out = parts.join("");
68
+ if (dropped > 0) {
69
+ out += `\n\n[truncated due to budget — ${dropped} more result${dropped === 1 ? "" : "s"} omitted]\n`;
70
+ }
71
+ // Hard cap fallback: if even header + first section exceeds budget, truncate by chars.
72
+ if (estimateTokens(out) > budget) {
73
+ const maxChars = budget * 4;
74
+ out = out.slice(0, maxChars) + "\n\n[truncated due to budget — hard cap]\n";
75
+ }
76
+ return { out, dropped };
77
+ }
78
+ //# sourceMappingURL=preflight-budgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight-budgets.js","sourceRoot":"","sources":["../../src/graph/preflight-budgets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sEAAsE;AAEtE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,mBAAmB,EAAE,IAAI;CACgB,CAAC;AAE5C,sEAAsE;AAEtE;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,sEAAsE;AAEtE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,MAAc;IAEd,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,sCAAsC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC;QACvC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,mFAAmF;IACnF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;QACnE,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEzB,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,GAAG,IAAI,kCAAkC,OAAO,eAAe,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;IACvG,CAAC;IAED,uFAAuF;IACvF,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC;QAC5B,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,4CAA4C,CAAC;IAC9E,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * PreflightContextInjector — ADR-9 Primary KPI Lever.
3
+ *
4
+ * Runs deterministic per-role graph queries before each agent spawn.
5
+ * Formats results as markdown and prepends to the agent's first message.
6
+ *
7
+ * Key invariants:
8
+ * - DETERMINISTIC: same contract + role → same output. No LLM in this path.
9
+ * - NEVER BLOCKS SPAWN: 5s timeout + try/catch; returns firstMessage unchanged on failure.
10
+ * - RESEARCHER-PHASE2 ISOLATION: NEVER uses contract.title/description/feature text.
11
+ * Uses ONLY overrides.questionKeywords.
12
+ * - graph.enabled=false or engineHealth!='ready' → returns firstMessage unchanged.
13
+ */
14
+ import type { GraphClient } from "./client.js";
15
+ import type { GraphSection } from "./types.js";
16
+ import type { SprintContract } from "../contracts/sprint-contract.js";
17
+ import type { IncidentLog } from "./incidents.js";
18
+ import type { PrefetchSpec } from "./types.js";
19
+ import type { GraphArtifactStore } from "./artifact-store.js";
20
+ export type BoberAgentRole = "planner" | "researcher-phase1" | "researcher-phase2" | "architect" | "curator" | "generator" | "evaluator";
21
+ /** Derived input for QUERY_BATCHES — computed from contract defensively. */
22
+ interface PreflightInput {
23
+ symbols: string[];
24
+ keywords: string[];
25
+ questionKeywords: string[];
26
+ baselineSha: string;
27
+ }
28
+ /** Optional overrides for inject() callers (e.g. pipeline.ts Phase 2 call site). */
29
+ export interface InjectOverrides {
30
+ questionKeywords?: string[];
31
+ baselineSha?: string;
32
+ }
33
+ /**
34
+ * Per-role deterministic query batch factory functions.
35
+ *
36
+ * Each function receives a PreflightInput and returns a PrefetchSpec[].
37
+ * The batch is deterministic: same input → same specs → same output.
38
+ *
39
+ * CRITICAL: 'researcher-phase2' uses ONLY input.questionKeywords.
40
+ * It MUST NOT access contract.title, contract.description, or contract.feature.
41
+ * The PreflightInput for this role is built exclusively from overrides.questionKeywords.
42
+ */
43
+ export declare const QUERY_BATCHES: Record<BoberAgentRole, (c: PreflightInput) => PrefetchSpec[]>;
44
+ /**
45
+ * Derive PreflightInput fields from a SprintContract.
46
+ *
47
+ * SprintContract does NOT have symbols/keywords/questionKeywords/baselineSha fields.
48
+ * This function derives them defensively:
49
+ *
50
+ * - symbols: file basenames from estimatedFiles, stripped of extensions.
51
+ * These are the files the sprint will touch — a good proxy for affected symbols.
52
+ * - keywords: unique tokens (length >= 4) from title + description, top 8.
53
+ * Used by Curator search to find relevant code.
54
+ * - questionKeywords: ALWAYS empty here. Populated only via overrides.questionKeywords
55
+ * (for researcher-phase2 call sites that pass Phase 1 question tokens).
56
+ * - baselineSha: defaults to "HEAD~1"; can be overridden via overrides.baselineSha.
57
+ */
58
+ export declare function deriveFromContract(contract: SprintContract | null): PreflightInput;
59
+ /**
60
+ * Builds and injects deterministic graph context into agent first messages.
61
+ *
62
+ * Constructor takes a GraphClient (may be null if engine not ready) and a
63
+ * GraphSection config. inject() is the only public method.
64
+ *
65
+ * Usage in agent files:
66
+ * ```typescript
67
+ * const injector = new PreflightContextInjector(graphPipelineLifecycle.getGraphClient(), config.graph);
68
+ * const msg = await injector.inject("curator", contract, userMessage);
69
+ * ```
70
+ */
71
+ export declare class PreflightContextInjector {
72
+ private readonly client;
73
+ private readonly config;
74
+ private readonly incidents?;
75
+ private readonly projectRoot?;
76
+ private readonly artifactStore?;
77
+ constructor(client: GraphClient | null, config: GraphSection | undefined, incidents?: IncidentLog | undefined, projectRoot?: string | undefined, artifactStore?: GraphArtifactStore | undefined);
78
+ /**
79
+ * Inject pre-flight graph context into a first message.
80
+ *
81
+ * Fast-path: returns firstMessage UNCHANGED when:
82
+ * - graph.enabled !== true
83
+ * - client is null
84
+ * - engineHealth !== 'ready'
85
+ *
86
+ * Timeout: 5000ms. On timeout or any error, logs an incident and returns
87
+ * firstMessage unchanged. Agent spawn is NEVER blocked.
88
+ *
89
+ * Researcher-Phase2 isolation: NEVER uses contract.title/description/feature.
90
+ * Uses ONLY overrides.questionKeywords. Passing a non-null contract for
91
+ * researcher-phase2 is defensively handled — feature text is still NOT used.
92
+ *
93
+ * @param role Agent role string.
94
+ * @param contract Sprint contract (or null for research phase / architect).
95
+ * @param firstMessage The agent's first user message.
96
+ * @param overrides Optional overrides: questionKeywords, baselineSha.
97
+ */
98
+ inject(role: BoberAgentRole, contract: SprintContract | null, firstMessage: string, overrides?: InjectOverrides): Promise<string>;
99
+ /**
100
+ * Record one `graph-preflight` telemetry event to .bober/history.jsonl.
101
+ *
102
+ * Resolves a project root by preferring the constructor-injected projectRoot,
103
+ * then the active pipeline lifecycle singleton — so telemetry fires for every
104
+ * role even though most call sites construct the injector with only
105
+ * (client, config). Best-effort: any failure is swallowed so telemetry can
106
+ * NEVER break an agent spawn.
107
+ *
108
+ * Each row answers the runtime question directly: did graph context get added
109
+ * (`injected`), roughly how many tokens (`approxTokensAdded`), under what
110
+ * `outcome`, and how long the preflight took (`elapsedMs`).
111
+ */
112
+ private recordTelemetry;
113
+ /** Core injection logic — called by inject() within the timeout race. */
114
+ private runInject;
115
+ /** Look up the token budget for a given role from config, with fallback to defaults. */
116
+ private getBudgetForRole;
117
+ }
118
+ /**
119
+ * Extract meaningful search keywords from a block of text (e.g. Phase 1 questions).
120
+ *
121
+ * Used by pipeline.ts to derive overrides.questionKeywords for researcher-phase2
122
+ * from the Phase 1 questions array.
123
+ *
124
+ * Returns up to 10 unique tokens of length >= 5, lowercased.
125
+ * Does NOT preserve the original text — the output is transformed tokens only,
126
+ * which is safe to pass to researcher-phase2 (no feature text leak).
127
+ */
128
+ export declare function extractKeywords(text: string): string[];
129
+ export {};
130
+ //# sourceMappingURL=preflight-injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preflight-injector.d.ts","sourceRoot":"","sources":["../../src/graph/preflight-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAiD,MAAM,YAAY,CAAC;AAG9F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAK9D,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,mBAAmB,GACnB,mBAAmB,GACnB,WAAW,GACX,SAAS,GACT,WAAW,GACX,WAAW,CAAC;AAEhB,4EAA4E;AAC5E,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkBD;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,YAAY,EAAE,CAkFvF,CAAC;AAIF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,cAAc,CAwBlF;AA6LD;;;;;;;;;;;GAWG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAJd,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,SAAS,CAAC,EAAE,WAAW,YAAA,EACvB,WAAW,CAAC,EAAE,MAAM,YAAA,EACpB,aAAa,CAAC,EAAE,kBAAkB,YAAA;IAGrD;;;;;;;;;;;;;;;;;;;OAmBG;IACG,MAAM,CACV,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,cAAc,GAAG,IAAI,EAC/B,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,eAAe,GAC1B,OAAO,CAAC,MAAM,CAAC;IAuElB;;;;;;;;;;;;OAYG;YACW,eAAe;IAuC7B,yEAAyE;YAC3D,SAAS;IAwGvB,wFAAwF;IACxF,OAAO,CAAC,gBAAgB;CA4CzB;AAID;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtD"}