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
@@ -1 +1 @@
1
- {"version":3,"file":"generator-agent.js","sourceRoot":"","sources":["../../src/orchestrator/generator-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator-agent.js","sourceRoot":"","sources":["../../src/orchestrator/generator-agent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAiB5C,sEAAsE;AAEtE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,WAAmB,EACnB,MAAmB;IAEnB,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,UAAU,IAAI,SAAS,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,EAAE,KAAK,IAAI,SAAS,CAAC;IAE1D,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,KAAK,EAAE,CAAC,CAAC;IAClD,qEAAqE;IACrE,KAAK,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;IAEtF,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAEpD,sEAAsE;IACtE,wDAAwD;IACxD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,MAAM,OAAO,GAAG,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,IAAI,SAAS,CAAC,CAAC;IAC/F,yEAAyE;IACzE,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAEzG,MAAM,MAAM,GAAG,YAAY,CACzB,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,EACjC,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,EACjC,MAAM,CAAC,SAAS,CAAC,cAAc,EAC/B,MAAM,CAAC,SAAS,CAAC,KAAK,CACvB,CAAC;IACF,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE9C,sDAAsD;IACtD,MAAM,YAAY,GAAG,oBAAoB,UAAU,cAAc,CAAC;IAElE,MAAM,WAAW,GAAG;EACpB,WAAW;;;EAGX,WAAW;EACX,YAAY,CAAC,CAAC,CAAC,uEAAuE,YAAY,mMAAmM,CAAC,CAAC,CAAC,EAAE;;;EAG1S,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,+BAA+B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;;;;mBAI5E,UAAU;;;;;;;;;;;;EAY3B,CAAC;IAED,oFAAoF;IACpF,gFAAgF;IAChF,MAAM,WAAW,GAAG,sBAAsB,CAAC,cAAc,EAAE,CAAC;IAC5D,MAAM,iBAAiB,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,MAAM,CACpD,WAAW,EACX,OAAO,CAAC,eAAe,IAAI,IAAI,EAC/B,WAAW,CACZ,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,SAAS,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;IAEjF,kDAAkD;IAClD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,MAAM;QACN,KAAK;QACL,YAAY;QACZ,WAAW,EAAE,eAAe;QAC5B,KAAK,EAAE,OAAO,CAAC,OAAO;QACtB,YAAY,EAAE,OAAO,CAAC,QAAQ;QAC9B,QAAQ;QACR,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACzB,MAAM,GAAG,GAAG,KAAgC,CAAC;YAC7C,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAmB,CAAC;gBACrC,IAAI,IAAI;oBAAE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnD,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI,IAAI,QAAQ,GAAG,CAAC,CAAC;QACrD,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,uEAAuE;QACvE,gEAAgE;QAChE,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACzD,YAAY,EACV,uEAAuE;YACvE,2EAA2E;YAC3E,0EAA0E;YAC1E,0EAA0E;YAC1E,mDAAmD;QACrD,SAAS,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CACV,0BAA0B,MAAM,CAAC,SAAS,WAAW,MAAM,CAAC,WAAW,CAAC,MAAM,cAAc,CAC7F,CAAC;IAEF,OAAO,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAY,CAAC;QAC9D,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;YACvB,GAAG,KAAK,IAAI;YACZ,CAAC,QAAQ,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,CACtC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,sEAAsE;AAEtE;;GAEG;AACH,SAAS,oBAAoB,CAC3B,IAAY,EACZ,YAAyB,EACzB,UAA8G;IAE9G,IAAI,MAAe,CAAC;IAEpB,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;QACtC,MAAM,UAAU,GAAG,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;gBAC/C,IAAI,CAAC;oBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IACE,MAAM;QACN,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,CAAC,SAAS,IAAI,MAAM,IAAI,QAAQ,IAAI,MAAM,CAAC,EAC3C,CAAC;QACD,MAAM,GAAG,GAAG,MAAiC,CAAC;QAE9C,0EAA0E;QAC1E,MAAM,OAAO,GACX,SAAS,IAAI,GAAG;YACd,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACtB,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC;QAEhC,0DAA0D;QAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YACjD,CAAC,CAAE,GAAG,CAAC,YAA0B;iBAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,CAAC,CAAC;gBACpC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC;oBACpD,OAAO,MAAM,CAAE,CAA6B,CAAC,IAAI,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;YAC3C,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAEjE,OAAO;YACL,OAAO;YACP,KAAK,EACH,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;gBAC3B,CAAC,CAAC,GAAG,CAAC,KAAK;gBACX,CAAC,CAAC,oBAAoB;YAC1B,YAAY,EAAE,QAAQ;YACtB,UAAU,EACR,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YACjE,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,mBAAmB,YAAY,CAAC,IAAI,0DAA0D,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnI,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;YAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,KAAK,EAAE,UAAU,CAAC,KAAK;SACxB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,oDAAoD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC/E,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,KAAK,EAAE,UAAU,CAAC,KAAK;KACxB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * PURE deterministic distillation of sprint outcomes into LessonEntry records.
3
+ *
4
+ * PURE — must not import from ../providers; no network, no Date.now(), no side effects,
5
+ * no filesystem access. createdAt is stamped at PERSIST TIME by the CLI handler, not here.
6
+ * lessonId is a sha256 content-hash of category+tags+sourceEntryRefs — never derived from time.
7
+ *
8
+ * IMPORTANT — this distills from the data shapes the REAL pipeline actually produces, NOT
9
+ * an invented vocabulary. The three signals are:
10
+ * (a) recurring failed-criterion categories — from eval results' criteriaResults[].result==="fail",
11
+ * grouped by the criterion's verificationMethod (resolved from the owning contract).
12
+ * (b) repeated failing eval strategies — from eval results' strategyResults[].result==="fail",
13
+ * grouped by strategy name.
14
+ * (c) sprints that needed rework — from contract.iterationHistory entries whose
15
+ * result==="fail" (real shape: { iteration, evalId, result }), reinforced by history
16
+ * entries with phase==="rework" && event==="evaluation-failed".
17
+ *
18
+ * The eval-result inputs are read LENIENTLY (see DistillableEval) because the on-disk
19
+ * .bober/eval-results/*.json files and the compiled EvalResultSchema use different shapes;
20
+ * every field is optional and defensively narrowed.
21
+ */
22
+ import type { HistoryEntry } from "../../state/history.js";
23
+ import type { SprintContract } from "../../contracts/sprint-contract.js";
24
+ import type { LessonEntry } from "../../state/memory.js";
25
+ /**
26
+ * Lenient, structurally-typed view of an eval result for distillation.
27
+ *
28
+ * Unifies BOTH the on-disk .bober/eval-results/*.json shape
29
+ * ({ overallResult, strategyResults, criteriaResults }) AND the compiled
30
+ * EvalResultSchema shape ({ passed, criteriaResults }). Every field is optional;
31
+ * distill never assumes a field is present.
32
+ */
33
+ export interface DistillableEval {
34
+ evalId?: string;
35
+ contractId?: string;
36
+ iteration?: number;
37
+ /** on-disk variant: "pass" | "fail" */
38
+ overallResult?: string;
39
+ /** compiled-schema variant */
40
+ passed?: boolean;
41
+ criteriaResults?: Array<{
42
+ criterionId?: string;
43
+ result?: string;
44
+ verificationMethod?: string;
45
+ }>;
46
+ strategyResults?: Array<{
47
+ strategy?: string;
48
+ result?: string;
49
+ }>;
50
+ }
51
+ /**
52
+ * Pure, side-effect-free distillation of sprint outcomes into LessonEntry records.
53
+ *
54
+ * Derives lessons from structured fields only (see file header for the three signals).
55
+ * The returned array is sorted by lessonId for byte-identical output across calls.
56
+ * The `createdAt` field is set to SENTINEL_CREATED_AT — the CLI handler MUST
57
+ * replace it with the real wall-clock ISO string before persisting.
58
+ */
59
+ export declare function distill(history: HistoryEntry[], contracts: SprintContract[], evalResults?: DistillableEval[]): LessonEntry[];
60
+ //# sourceMappingURL=distill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distill.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/memory/distill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAezD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC,CAAC;IACH,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AA2CD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,YAAY,EAAE,EACvB,SAAS,EAAE,cAAc,EAAE,EAC3B,WAAW,GAAE,eAAe,EAAO,GAClC,WAAW,EAAE,CAgIf"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * PURE deterministic distillation of sprint outcomes into LessonEntry records.
3
+ *
4
+ * PURE — must not import from ../providers; no network, no Date.now(), no side effects,
5
+ * no filesystem access. createdAt is stamped at PERSIST TIME by the CLI handler, not here.
6
+ * lessonId is a sha256 content-hash of category+tags+sourceEntryRefs — never derived from time.
7
+ *
8
+ * IMPORTANT — this distills from the data shapes the REAL pipeline actually produces, NOT
9
+ * an invented vocabulary. The three signals are:
10
+ * (a) recurring failed-criterion categories — from eval results' criteriaResults[].result==="fail",
11
+ * grouped by the criterion's verificationMethod (resolved from the owning contract).
12
+ * (b) repeated failing eval strategies — from eval results' strategyResults[].result==="fail",
13
+ * grouped by strategy name.
14
+ * (c) sprints that needed rework — from contract.iterationHistory entries whose
15
+ * result==="fail" (real shape: { iteration, evalId, result }), reinforced by history
16
+ * entries with phase==="rework" && event==="evaluation-failed".
17
+ *
18
+ * The eval-result inputs are read LENIENTLY (see DistillableEval) because the on-disk
19
+ * .bober/eval-results/*.json files and the compiled EvalResultSchema use different shapes;
20
+ * every field is optional and defensively narrowed.
21
+ */
22
+ import { createHash } from "node:crypto";
23
+ // ── Constants ───────────────────────────────────────────────────────
24
+ /** A sprint with at least this many failed iterations is flagged as needing rework. */
25
+ const REWORK_THRESHOLD = 1;
26
+ /** createdAt sentinel used internally so distill() returns LessonEntry-shaped objects.
27
+ * The CLI handler MUST overwrite this with the real wall-clock ISO string before
28
+ * calling appendLesson — this value is intentionally an epoch so that if it ever
29
+ * leaks to persistence it is obviously a placeholder. */
30
+ const SENTINEL_CREATED_AT = "1970-01-01T00:00:00.000Z";
31
+ // ── Helpers ──────────────────────────────────────────────────────────
32
+ /** Narrow an unknown value to a string-keyed record. */
33
+ function isRecord(v) {
34
+ return typeof v === "object" && v !== null && !Array.isArray(v);
35
+ }
36
+ /**
37
+ * Derive a deterministic 16-char hex lessonId from the failure signature.
38
+ * Sorts tags and refs before hashing so ordering does not affect the id.
39
+ */
40
+ function lessonIdFromSignature(category, tags, refs) {
41
+ const canonical = JSON.stringify({
42
+ category,
43
+ tags: [...tags].sort(),
44
+ refs: [...refs].sort(),
45
+ });
46
+ return createHash("sha256").update(canonical).digest("hex").slice(0, 16);
47
+ }
48
+ /** Map occurrence count to severity band. */
49
+ function severityFor(occurrences) {
50
+ if (occurrences >= 5)
51
+ return "high";
52
+ if (occurrences >= 3)
53
+ return "warn";
54
+ return "info";
55
+ }
56
+ // ── Core ─────────────────────────────────────────────────────────────
57
+ /**
58
+ * Pure, side-effect-free distillation of sprint outcomes into LessonEntry records.
59
+ *
60
+ * Derives lessons from structured fields only (see file header for the three signals).
61
+ * The returned array is sorted by lessonId for byte-identical output across calls.
62
+ * The `createdAt` field is set to SENTINEL_CREATED_AT — the CLI handler MUST
63
+ * replace it with the real wall-clock ISO string before persisting.
64
+ */
65
+ export function distill(history, contracts, evalResults = []) {
66
+ const groups = new Map();
67
+ function upsertGroup(category, tags, summary, ref) {
68
+ const sortedTags = [...tags].sort();
69
+ const key = `${category}|${sortedTags.join(",")}`;
70
+ let group = groups.get(key);
71
+ if (!group) {
72
+ group = { category, tags: sortedTags, summary, sourceEntryRefs: new Set() };
73
+ groups.set(key, group);
74
+ }
75
+ group.sourceEntryRefs.add(ref);
76
+ }
77
+ // Lookup: contractId -> (criterionId -> verificationMethod), resolved from the contract.
78
+ const vmByContractCriterion = new Map();
79
+ for (const c of contracts) {
80
+ const m = new Map();
81
+ for (const sc of c.successCriteria ?? []) {
82
+ if (sc.criterionId && sc.verificationMethod) {
83
+ m.set(sc.criterionId, sc.verificationMethod);
84
+ }
85
+ }
86
+ vmByContractCriterion.set(c.contractId, m);
87
+ }
88
+ // ── (a) failed-criterion categories & (b) failing eval strategies ──────
89
+ for (const ev of evalResults) {
90
+ const evRef = ev.evalId ?? ev.contractId ?? "unknown-eval";
91
+ // (b) repeated failing eval strategies (only present in the richer on-disk shape).
92
+ for (const s of ev.strategyResults ?? []) {
93
+ if (s?.result === "fail" && typeof s.strategy === "string" && s.strategy.length > 0) {
94
+ const category = `eval-strategy-failure:${s.strategy}`;
95
+ const tags = [`strategy:${s.strategy}`];
96
+ const summary = `Eval strategy '${s.strategy}' failed across sprints — recurring failing gate`;
97
+ upsertGroup(category, tags, summary, evRef);
98
+ }
99
+ }
100
+ // (a) recurring failed-criterion categories, grouped by the criterion's verificationMethod.
101
+ for (const cr of ev.criteriaResults ?? []) {
102
+ if (cr?.result === "fail" && typeof cr.criterionId === "string" && cr.criterionId.length > 0) {
103
+ const resolvedVm = (ev.contractId && vmByContractCriterion.get(ev.contractId)?.get(cr.criterionId)) ||
104
+ cr.verificationMethod ||
105
+ "unknown";
106
+ const category = `failed-criterion:${resolvedVm}`;
107
+ const tags = [`verificationMethod:${resolvedVm}`];
108
+ const summary = `Success criteria verified by '${resolvedVm}' failed across sprints`;
109
+ upsertGroup(category, tags, summary, `${evRef}:${cr.criterionId}`);
110
+ }
111
+ }
112
+ }
113
+ // ── (c) sprints that needed rework (from contract iterationHistory) ──────
114
+ // Track which sprints we already counted from iterationHistory so the history
115
+ // fallback below does not double-count the same sprint.
116
+ const sprintsCountedFromContracts = new Set();
117
+ for (const contract of contracts) {
118
+ const iters = Array.isArray(contract.iterationHistory)
119
+ ? contract.iterationHistory
120
+ : [];
121
+ const failedRefs = [];
122
+ for (const it of iters) {
123
+ if (isRecord(it) && it["result"] === "fail") {
124
+ const n = typeof it["iteration"] === "number" ? it["iteration"] : "?";
125
+ failedRefs.push(`${contract.contractId}:iteration-${n}`);
126
+ }
127
+ }
128
+ if (failedRefs.length >= REWORK_THRESHOLD) {
129
+ sprintsCountedFromContracts.add(contract.contractId);
130
+ const tags = ["phase:rework", `sprintId:${contract.contractId}`];
131
+ const summary = `Sprint '${contract.contractId}' needed ${failedRefs.length} rework iteration(s) before passing`;
132
+ for (const ref of failedRefs) {
133
+ upsertGroup("sprint-rework", tags, summary, ref);
134
+ }
135
+ }
136
+ }
137
+ // ── (c, fallback) rework signal straight from history events ────────────
138
+ // The real pipeline writes { event:"evaluation-failed", phase:"rework", sprintId, details:{iteration} }.
139
+ // Only used for sprints not already accounted for via iterationHistory (avoids double-count).
140
+ for (const entry of history) {
141
+ if (entry.phase === "rework" && entry.event === "evaluation-failed") {
142
+ const sid = entry.sprintId ?? "unknown";
143
+ if (sprintsCountedFromContracts.has(sid))
144
+ continue;
145
+ const iter = entry.details["iteration"];
146
+ const refSuffix = typeof iter === "number" ? `iteration-${iter}` : entry.timestamp;
147
+ const tags = ["phase:rework", `sprintId:${sid}`];
148
+ const summary = `Sprint '${sid}' had a failed evaluation requiring rework`;
149
+ upsertGroup("sprint-rework", tags, summary, `${sid}:${refSuffix}`);
150
+ }
151
+ }
152
+ // ── Build LessonEntry array ──────────────────────────────────────────
153
+ const lessons = [];
154
+ for (const group of groups.values()) {
155
+ const refs = [...group.sourceEntryRefs].sort();
156
+ // Enforce non-empty sourceEntryRefs (schema invariant).
157
+ if (refs.length === 0)
158
+ continue;
159
+ const occurrences = refs.length;
160
+ const lessonId = lessonIdFromSignature(group.category, group.tags, refs);
161
+ const severity = severityFor(occurrences);
162
+ lessons.push({
163
+ lessonId,
164
+ createdAt: SENTINEL_CREATED_AT,
165
+ category: group.category,
166
+ tags: group.tags,
167
+ summary: group.summary,
168
+ occurrences,
169
+ severity,
170
+ sourceEntryRefs: refs,
171
+ });
172
+ }
173
+ // Sort by lessonId for deterministic, byte-identical output.
174
+ lessons.sort((a, b) => a.lessonId.localeCompare(b.lessonId));
175
+ return lessons;
176
+ }
177
+ //# sourceMappingURL=distill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distill.js","sourceRoot":"","sources":["../../../src/orchestrator/memory/distill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Lenient loader for .bober/eval-results/*.json, used to feed distill().
3
+ *
4
+ * This is the IMPURE counterpart to the pure distill() function: it touches the
5
+ * filesystem. It deliberately does NOT validate against the compiled EvalResultSchema,
6
+ * because the on-disk eval-result files use a richer shape
7
+ * ({ overallResult, strategyResults, criteriaResults }) than the compiled schema
8
+ * ({ passed, details, criteriaResults? }). We read every file leniently and project
9
+ * only the fields distill consumes, so distillation is robust to schema drift.
10
+ */
11
+ import type { DistillableEval } from "./distill.js";
12
+ /**
13
+ * Load all eval results from .bober/eval-results/, projected onto DistillableEval.
14
+ *
15
+ * Returns entries sorted by filename for deterministic distill input. A missing
16
+ * directory yields an empty array; malformed JSON files are skipped silently
17
+ * (mirrors listContracts' skip-on-bad-file behaviour).
18
+ */
19
+ export declare function loadEvalResults(projectRoot: string): Promise<DistillableEval[]>;
20
+ //# sourceMappingURL=eval-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-source.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/memory/eval-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAgDpD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,EAAE,CAAC,CA0B5B"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Lenient loader for .bober/eval-results/*.json, used to feed distill().
3
+ *
4
+ * This is the IMPURE counterpart to the pure distill() function: it touches the
5
+ * filesystem. It deliberately does NOT validate against the compiled EvalResultSchema,
6
+ * because the on-disk eval-result files use a richer shape
7
+ * ({ overallResult, strategyResults, criteriaResults }) than the compiled schema
8
+ * ({ passed, details, criteriaResults? }). We read every file leniently and project
9
+ * only the fields distill consumes, so distillation is robust to schema drift.
10
+ */
11
+ import { readFile, readdir } from "node:fs/promises";
12
+ import { join } from "node:path";
13
+ const EVAL_RESULTS_DIR = ".bober/eval-results";
14
+ function evalResultsDir(projectRoot) {
15
+ return join(projectRoot, EVAL_RESULTS_DIR);
16
+ }
17
+ /** Narrow an unknown value to a string-keyed record. */
18
+ function isRecord(v) {
19
+ return typeof v === "object" && v !== null && !Array.isArray(v);
20
+ }
21
+ /** Project a raw parsed JSON object onto the lenient DistillableEval shape. */
22
+ function toDistillable(raw) {
23
+ if (!isRecord(raw))
24
+ return null;
25
+ const out = {};
26
+ if (typeof raw["evalId"] === "string")
27
+ out.evalId = raw["evalId"];
28
+ if (typeof raw["contractId"] === "string")
29
+ out.contractId = raw["contractId"];
30
+ if (typeof raw["iteration"] === "number")
31
+ out.iteration = raw["iteration"];
32
+ if (typeof raw["overallResult"] === "string")
33
+ out.overallResult = raw["overallResult"];
34
+ if (typeof raw["passed"] === "boolean")
35
+ out.passed = raw["passed"];
36
+ if (Array.isArray(raw["criteriaResults"])) {
37
+ out.criteriaResults = raw["criteriaResults"]
38
+ .filter(isRecord)
39
+ .map((c) => ({
40
+ criterionId: typeof c["criterionId"] === "string" ? c["criterionId"] : undefined,
41
+ result: typeof c["result"] === "string" ? c["result"] : undefined,
42
+ verificationMethod: typeof c["verificationMethod"] === "string" ? c["verificationMethod"] : undefined,
43
+ }));
44
+ }
45
+ if (Array.isArray(raw["strategyResults"])) {
46
+ out.strategyResults = raw["strategyResults"]
47
+ .filter(isRecord)
48
+ .map((s) => ({
49
+ strategy: typeof s["strategy"] === "string" ? s["strategy"] : undefined,
50
+ result: typeof s["result"] === "string" ? s["result"] : undefined,
51
+ }));
52
+ }
53
+ return out;
54
+ }
55
+ /**
56
+ * Load all eval results from .bober/eval-results/, projected onto DistillableEval.
57
+ *
58
+ * Returns entries sorted by filename for deterministic distill input. A missing
59
+ * directory yields an empty array; malformed JSON files are skipped silently
60
+ * (mirrors listContracts' skip-on-bad-file behaviour).
61
+ */
62
+ export async function loadEvalResults(projectRoot) {
63
+ const dir = evalResultsDir(projectRoot);
64
+ let entries;
65
+ try {
66
+ entries = await readdir(dir);
67
+ }
68
+ catch {
69
+ // Directory doesn't exist yet — no eval results.
70
+ return [];
71
+ }
72
+ const jsonFiles = entries.filter((f) => f.endsWith(".json")).sort();
73
+ const results = [];
74
+ for (const file of jsonFiles) {
75
+ try {
76
+ const content = await readFile(join(dir, file), "utf-8");
77
+ const parsed = JSON.parse(content);
78
+ const projected = toDistillable(parsed);
79
+ if (projected)
80
+ results.push(projected);
81
+ }
82
+ catch {
83
+ // Skip malformed files.
84
+ }
85
+ }
86
+ return results;
87
+ }
88
+ //# sourceMappingURL=eval-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval-source.js","sourceRoot":"","sources":["../../../src/orchestrator/memory/eval-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * PURE deterministic, INDEX-ONLY retrieval of relevant lessons for the planner.
3
+ *
4
+ * Reads only the bounded .bober/memory/INDEX.md (via loadLessonIndex) — never history.jsonl,
5
+ * never per-lesson files. Scoring is deterministic lowercased token overlap; ties break on lessonId.
6
+ *
7
+ * PURE — no network, no Date.now(), no side effects. All fs access flows through loadLessonIndex.
8
+ */
9
+ import type { LessonIndexRecord } from "../../state/memory.js";
10
+ /**
11
+ * Load and rank at most `topK` lessons from the bounded index that are relevant
12
+ * to the given `keywords`.
13
+ *
14
+ * Scoring is deterministic token-overlap between the lowercased keyword tokens
15
+ * and each record's tags + category + summarySnippet. Ties break by lessonId
16
+ * (ASC lexicographic) for byte-stable output.
17
+ *
18
+ * A non-matching keyword set (no overlap with any record) yields an empty result.
19
+ *
20
+ * @param projectRoot - Absolute path to the project root containing .bober/
21
+ * @param keywords - Keywords derived from the feature title/description
22
+ * @param options - topK cap (default 5) and optional charBudget (ignored here; passed to serializer)
23
+ * @returns At most topK records sorted by relevance (descending), then lessonId (ascending)
24
+ */
25
+ export declare function retrieveRelevantLessons(projectRoot: string, keywords: string[], { topK, charBudget: _charBudget, }?: {
26
+ topK?: number;
27
+ charBudget?: number;
28
+ }): Promise<LessonIndexRecord[]>;
29
+ /**
30
+ * Render a compact planner context block from an array of LessonIndexRecord values.
31
+ *
32
+ * Each lesson becomes one line:
33
+ * [<category>/<severity>] (x<occurrences>) tags: <t1,t2,...> — <summarySnippet>
34
+ *
35
+ * The block is prefixed with a header line and truncated to `charBudget` characters
36
+ * (hard slice) so the planner always receives a predictably-bounded string.
37
+ *
38
+ * @param records - Already-ranked records (from retrieveRelevantLessons)
39
+ * @param options - charBudget: hard character limit (default DEFAULT_CHAR_BUDGET)
40
+ * @returns Compact string block, at most charBudget characters
41
+ */
42
+ export declare function serializeLessonsForPlanner(records: LessonIndexRecord[], { charBudget }?: {
43
+ charBudget?: number;
44
+ }): string;
45
+ //# sourceMappingURL=retrieve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/memory/retrieve.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAsD/D;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,EACE,IAAoB,EACpB,UAAU,EAAE,WAAW,GACxB,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7C,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAe9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,iBAAiB,EAAE,EAC5B,EAAE,UAAgC,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACjE,MAAM,CAmBR"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * PURE deterministic, INDEX-ONLY retrieval of relevant lessons for the planner.
3
+ *
4
+ * Reads only the bounded .bober/memory/INDEX.md (via loadLessonIndex) — never history.jsonl,
5
+ * never per-lesson files. Scoring is deterministic lowercased token overlap; ties break on lessonId.
6
+ *
7
+ * PURE — no network, no Date.now(), no side effects. All fs access flows through loadLessonIndex.
8
+ */
9
+ import { loadLessonIndex } from "../../state/memory.js";
10
+ // ── Constants ───────────────────────────────────────────────────────
11
+ /** Default number of lessons to return. */
12
+ const DEFAULT_TOP_K = 5;
13
+ /** Default character budget for the serialized planner block. */
14
+ const DEFAULT_CHAR_BUDGET = 1200;
15
+ /** Maximum records to load from the index before scoring (bounded read). */
16
+ const INDEX_LOAD_LIMIT = 200;
17
+ // ── Helpers ──────────────────────────────────────────────────────────
18
+ /**
19
+ * Tokenize a string into lowercase alphanumeric tokens.
20
+ * Splits on any non-alphanumeric character and filters empty tokens.
21
+ */
22
+ function tokenize(s) {
23
+ return s
24
+ .toLowerCase()
25
+ .split(/[^a-z0-9]+/)
26
+ .filter((t) => t.length > 0);
27
+ }
28
+ /**
29
+ * Score a LessonIndexRecord against a set of lowercased keyword tokens.
30
+ * Counts shared tokens across tags, category, and summarySnippet.
31
+ * Returns 0 if there is no overlap (caller should filter these out).
32
+ */
33
+ function scoreRecord(record, keywordTokens) {
34
+ if (keywordTokens.size === 0)
35
+ return 0;
36
+ const recordTokens = new Set([
37
+ ...tokenize(record.category),
38
+ ...record.tags.flatMap(tokenize),
39
+ ...tokenize(record.summarySnippet),
40
+ ]);
41
+ let count = 0;
42
+ for (const token of keywordTokens) {
43
+ if (recordTokens.has(token)) {
44
+ count++;
45
+ }
46
+ }
47
+ return count;
48
+ }
49
+ // ── Core ─────────────────────────────────────────────────────────────
50
+ /**
51
+ * Load and rank at most `topK` lessons from the bounded index that are relevant
52
+ * to the given `keywords`.
53
+ *
54
+ * Scoring is deterministic token-overlap between the lowercased keyword tokens
55
+ * and each record's tags + category + summarySnippet. Ties break by lessonId
56
+ * (ASC lexicographic) for byte-stable output.
57
+ *
58
+ * A non-matching keyword set (no overlap with any record) yields an empty result.
59
+ *
60
+ * @param projectRoot - Absolute path to the project root containing .bober/
61
+ * @param keywords - Keywords derived from the feature title/description
62
+ * @param options - topK cap (default 5) and optional charBudget (ignored here; passed to serializer)
63
+ * @returns At most topK records sorted by relevance (descending), then lessonId (ascending)
64
+ */
65
+ export async function retrieveRelevantLessons(projectRoot, keywords, { topK = DEFAULT_TOP_K, charBudget: _charBudget, } = {}) {
66
+ const records = await loadLessonIndex(projectRoot, { limit: INDEX_LOAD_LIMIT });
67
+ const keywordTokens = new Set(keywords.flatMap(tokenize));
68
+ const scored = records
69
+ .map((r) => ({ r, score: scoreRecord(r, keywordTokens) }))
70
+ .filter((x) => x.score > 0); // C1: non-matching keyword -> empty
71
+ // Sort: score DESC, then lessonId ASC for stable tiebreak
72
+ scored.sort((a, b) => b.score - a.score || a.r.lessonId.localeCompare(b.r.lessonId));
73
+ return scored.slice(0, topK).map((x) => x.r);
74
+ }
75
+ /**
76
+ * Render a compact planner context block from an array of LessonIndexRecord values.
77
+ *
78
+ * Each lesson becomes one line:
79
+ * [<category>/<severity>] (x<occurrences>) tags: <t1,t2,...> — <summarySnippet>
80
+ *
81
+ * The block is prefixed with a header line and truncated to `charBudget` characters
82
+ * (hard slice) so the planner always receives a predictably-bounded string.
83
+ *
84
+ * @param records - Already-ranked records (from retrieveRelevantLessons)
85
+ * @param options - charBudget: hard character limit (default DEFAULT_CHAR_BUDGET)
86
+ * @returns Compact string block, at most charBudget characters
87
+ */
88
+ export function serializeLessonsForPlanner(records, { charBudget = DEFAULT_CHAR_BUDGET } = {}) {
89
+ if (records.length === 0) {
90
+ return "";
91
+ }
92
+ const lines = [
93
+ "## Lessons from past sprints (bounded memory index)",
94
+ "",
95
+ ...records.map((r) => `- [${r.category}/${r.severity}] (x${r.occurrences}) tags: ${r.tags.join(",")} — ${r.summarySnippet}`),
96
+ "",
97
+ ];
98
+ const block = lines.join("\n");
99
+ // Hard truncation to charBudget (C3 guarantee)
100
+ return block.slice(0, charBudget);
101
+ }
102
+ //# sourceMappingURL=retrieve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../../src/orchestrator/memory/retrieve.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/orchestrator/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAqBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,GACxB,aAAa,CAwBf;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnD"}
1
+ {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../../src/orchestrator/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,GACxB,aAAa,CAgCf;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGnD"}
@@ -11,7 +11,9 @@
11
11
  */
12
12
  const SHORTHAND_MAP = {
13
13
  // Anthropic
14
- opus: { provider: "anthropic", modelId: "claude-opus-4-7" },
14
+ opus: { provider: "anthropic", modelId: "claude-opus-4-8" },
15
+ "opus-4-8": { provider: "anthropic", modelId: "claude-opus-4-8" }, // symmetry alias
16
+ "opus-4-7": { provider: "anthropic", modelId: "claude-opus-4-7" }, // pinned previous GA
15
17
  sonnet: { provider: "anthropic", modelId: "claude-sonnet-4-6" },
16
18
  haiku: { provider: "anthropic", modelId: "claude-haiku-4-5" },
17
19
  // OpenAI
@@ -22,6 +24,10 @@ const SHORTHAND_MAP = {
22
24
  // Google
23
25
  "gemini-pro": { provider: "google", modelId: "gemini-2.5-pro" },
24
26
  "gemini-flash": { provider: "google", modelId: "gemini-2.5-flash" },
27
+ // DeepSeek — resolved via openai-compat adapter at api.deepseek.com
28
+ deepseek: { provider: "openai-compat", modelId: "deepseek-v4-pro" },
29
+ "deepseek-v4-pro": { provider: "openai-compat", modelId: "deepseek-v4-pro" },
30
+ "deepseek-v4-flash": { provider: "openai-compat", modelId: "deepseek-v4-flash" },
25
31
  };
26
32
  /**
27
33
  * Resolve a model string and optional explicit provider into a ResolvedModel.
@@ -54,6 +60,14 @@ export function resolveProviderModel(model, explicitProvider) {
54
60
  // 3. Known shorthand
55
61
  const mapped = SHORTHAND_MAP[model];
56
62
  if (mapped) {
63
+ if (mapped.provider === "openai-compat") {
64
+ // openai-compat shorthands (e.g. deepseek) need an endpoint attached.
65
+ return {
66
+ provider: mapped.provider,
67
+ modelId: mapped.modelId,
68
+ endpoint: "https://api.deepseek.com",
69
+ };
70
+ }
57
71
  return { provider: mapped.provider, modelId: mapped.modelId };
58
72
  }
59
73
  // 4. Unknown string — default to anthropic, pass through as-is
@@ -1 +1 @@
1
- {"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/orchestrator/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH;;;GAGG;AACH,MAAM,aAAa,GAA0D;IAC3E,YAAY;IACZ,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE;IAC3D,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE;IAC/D,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAC7D,SAAS;IACT,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE;IACrD,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE;IAC/D,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IACzC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE;IACrD,SAAS;IACT,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;IAC/D,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;CACpE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,gBAAyB;IAEzB,oEAAoE;IACpE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,OAAO;YACP,QAAQ,EAAE,2BAA2B;SACtC,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC;IAED,+DAA+D;IAC/D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../src/orchestrator/model-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH;;;GAGG;AACH,MAAM,aAAa,GAA0D;IAC3E,YAAY;IACZ,IAAI,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE;IAC3D,UAAU,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,iBAAiB;IACpF,UAAU,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,qBAAqB;IACxF,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,mBAAmB,EAAE;IAC/D,KAAK,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAC7D,SAAS;IACT,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE;IACrD,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE;IAC/D,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE;IACzC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE;IACrD,SAAS;IACT,YAAY,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;IAC/D,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE;IACnE,oEAAoE;IACpE,QAAQ,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE;IACnE,iBAAiB,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE;IAC5E,mBAAmB,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,EAAE;CACjF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa,EACb,gBAAyB;IAEzB,oEAAoE;IACpE,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,OAAO;YACP,QAAQ,EAAE,2BAA2B;SACtC,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;YACxC,sEAAsE;YACtE,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ,EAAE,0BAA0B;aACrC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC;IAED,+DAA+D;IAC/D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Observability MCP plugin slot barrel (Sprint 16).
3
+ *
4
+ * Exports the public API for starting and merging observability MCP server
5
+ * tool lists into the diagnoser's tool set at spawn time.
6
+ *
7
+ * Sprint 24 (/bober-incident) will import these symbols at the diagnoser
8
+ * spawn site in src/incident/orchestrator.ts.
9
+ */
10
+ export { mergeObsTools, stopAll, namespaceToolName, type ToolDescriptor, type NamespacedTool, type MergeResult, } from "./merge.js";
11
+ export { ExternalMcpServer } from "../../mcp/external-client.js";
12
+ //# sourceMappingURL=index.d.ts.map