agent-bober 0.17.1 → 0.18.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 (355) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +15 -0
  3. package/README.md +158 -5
  4. package/dist/chat/answerer.d.ts +17 -0
  5. package/dist/chat/answerer.d.ts.map +1 -0
  6. package/dist/chat/answerer.js +52 -0
  7. package/dist/chat/answerer.js.map +1 -0
  8. package/dist/chat/approval-cursor.d.ts +25 -0
  9. package/dist/chat/approval-cursor.d.ts.map +1 -0
  10. package/dist/chat/approval-cursor.js +61 -0
  11. package/dist/chat/approval-cursor.js.map +1 -0
  12. package/dist/chat/approval-reader.d.ts +11 -0
  13. package/dist/chat/approval-reader.d.ts.map +1 -0
  14. package/dist/chat/approval-reader.js +20 -0
  15. package/dist/chat/approval-reader.js.map +1 -0
  16. package/dist/chat/careful-sidecar.d.ts +15 -0
  17. package/dist/chat/careful-sidecar.d.ts.map +1 -0
  18. package/dist/chat/careful-sidecar.js +39 -0
  19. package/dist/chat/careful-sidecar.js.map +1 -0
  20. package/dist/chat/chat-session.d.ts +129 -0
  21. package/dist/chat/chat-session.d.ts.map +1 -0
  22. package/dist/chat/chat-session.js +470 -0
  23. package/dist/chat/chat-session.js.map +1 -0
  24. package/dist/chat/completion-tailer.d.ts +27 -0
  25. package/dist/chat/completion-tailer.d.ts.map +1 -0
  26. package/dist/chat/completion-tailer.js +187 -0
  27. package/dist/chat/completion-tailer.js.map +1 -0
  28. package/dist/chat/conversation-store.d.ts +22 -0
  29. package/dist/chat/conversation-store.d.ts.map +1 -0
  30. package/dist/chat/conversation-store.js +66 -0
  31. package/dist/chat/conversation-store.js.map +1 -0
  32. package/dist/chat/cursor-store.d.ts +23 -0
  33. package/dist/chat/cursor-store.d.ts.map +1 -0
  34. package/dist/chat/cursor-store.js +42 -0
  35. package/dist/chat/cursor-store.js.map +1 -0
  36. package/dist/chat/pid-sidecar.d.ts +22 -0
  37. package/dist/chat/pid-sidecar.d.ts.map +1 -0
  38. package/dist/chat/pid-sidecar.js +42 -0
  39. package/dist/chat/pid-sidecar.js.map +1 -0
  40. package/dist/chat/roster-reader.d.ts +16 -0
  41. package/dist/chat/roster-reader.d.ts.map +1 -0
  42. package/dist/chat/roster-reader.js +39 -0
  43. package/dist/chat/roster-reader.js.map +1 -0
  44. package/dist/chat/run-spawner.d.ts +71 -0
  45. package/dist/chat/run-spawner.d.ts.map +1 -0
  46. package/dist/chat/run-spawner.js +121 -0
  47. package/dist/chat/run-spawner.js.map +1 -0
  48. package/dist/chat/slash-commands.d.ts +36 -0
  49. package/dist/chat/slash-commands.d.ts.map +1 -0
  50. package/dist/chat/slash-commands.js +133 -0
  51. package/dist/chat/slash-commands.js.map +1 -0
  52. package/dist/chat/steer-cleanup.d.ts +12 -0
  53. package/dist/chat/steer-cleanup.d.ts.map +1 -0
  54. package/dist/chat/steer-cleanup.js +60 -0
  55. package/dist/chat/steer-cleanup.js.map +1 -0
  56. package/dist/chat/turn-classifier.d.ts +43 -0
  57. package/dist/chat/turn-classifier.d.ts.map +1 -0
  58. package/dist/chat/turn-classifier.js +150 -0
  59. package/dist/chat/turn-classifier.js.map +1 -0
  60. package/dist/cli/commands/blackboard.d.ts +33 -0
  61. package/dist/cli/commands/blackboard.d.ts.map +1 -0
  62. package/dist/cli/commands/blackboard.js +114 -0
  63. package/dist/cli/commands/blackboard.js.map +1 -0
  64. package/dist/cli/commands/chat.d.ts +13 -0
  65. package/dist/cli/commands/chat.d.ts.map +1 -0
  66. package/dist/cli/commands/chat.js +43 -0
  67. package/dist/cli/commands/chat.js.map +1 -0
  68. package/dist/cli/commands/evolve.d.ts +18 -0
  69. package/dist/cli/commands/evolve.d.ts.map +1 -0
  70. package/dist/cli/commands/evolve.js +72 -0
  71. package/dist/cli/commands/evolve.js.map +1 -0
  72. package/dist/cli/commands/facts.d.ts +15 -0
  73. package/dist/cli/commands/facts.d.ts.map +1 -0
  74. package/dist/cli/commands/facts.js +213 -0
  75. package/dist/cli/commands/facts.js.map +1 -0
  76. package/dist/cli/commands/medical.d.ts +24 -0
  77. package/dist/cli/commands/medical.d.ts.map +1 -0
  78. package/dist/cli/commands/medical.js +132 -0
  79. package/dist/cli/commands/medical.js.map +1 -0
  80. package/dist/cli/commands/memory.d.ts +2 -1
  81. package/dist/cli/commands/memory.d.ts.map +1 -1
  82. package/dist/cli/commands/memory.js +94 -7
  83. package/dist/cli/commands/memory.js.map +1 -1
  84. package/dist/cli/commands/plan.d.ts.map +1 -1
  85. package/dist/cli/commands/plan.js +29 -3
  86. package/dist/cli/commands/plan.js.map +1 -1
  87. package/dist/cli/commands/replay.d.ts +17 -0
  88. package/dist/cli/commands/replay.d.ts.map +1 -0
  89. package/dist/cli/commands/replay.js +261 -0
  90. package/dist/cli/commands/replay.js.map +1 -0
  91. package/dist/cli/commands/run.d.ts +9 -0
  92. package/dist/cli/commands/run.d.ts.map +1 -1
  93. package/dist/cli/commands/run.js +27 -1
  94. package/dist/cli/commands/run.js.map +1 -1
  95. package/dist/cli/commands/sprint.d.ts.map +1 -1
  96. package/dist/cli/commands/sprint.js +17 -3
  97. package/dist/cli/commands/sprint.js.map +1 -1
  98. package/dist/cli/index.js +12 -0
  99. package/dist/cli/index.js.map +1 -1
  100. package/dist/config/defaults.d.ts.map +1 -1
  101. package/dist/config/defaults.js +8 -0
  102. package/dist/config/defaults.js.map +1 -1
  103. package/dist/config/role-providers.d.ts +1 -1
  104. package/dist/config/role-providers.d.ts.map +1 -1
  105. package/dist/config/role-providers.js +6 -1
  106. package/dist/config/role-providers.js.map +1 -1
  107. package/dist/config/schema.d.ts +467 -222
  108. package/dist/config/schema.d.ts.map +1 -1
  109. package/dist/config/schema.js +25 -0
  110. package/dist/config/schema.js.map +1 -1
  111. package/dist/contracts/eval-result.d.ts +84 -84
  112. package/dist/contracts/spec.d.ts +28 -28
  113. package/dist/contracts/sprint-contract.d.ts +4 -4
  114. package/dist/fleet/critic-deep.d.ts +53 -0
  115. package/dist/fleet/critic-deep.d.ts.map +1 -0
  116. package/dist/fleet/critic-deep.js +199 -0
  117. package/dist/fleet/critic-deep.js.map +1 -0
  118. package/dist/fleet/decomposer-deep-constants.d.ts +4 -0
  119. package/dist/fleet/decomposer-deep-constants.d.ts.map +1 -0
  120. package/dist/fleet/decomposer-deep-constants.js +14 -0
  121. package/dist/fleet/decomposer-deep-constants.js.map +1 -0
  122. package/dist/fleet/decomposer-deep-types.d.ts +8 -0
  123. package/dist/fleet/decomposer-deep-types.d.ts.map +1 -0
  124. package/dist/fleet/decomposer-deep-types.js +9 -0
  125. package/dist/fleet/decomposer-deep-types.js.map +1 -0
  126. package/dist/fleet/decomposer-deep.d.ts +51 -0
  127. package/dist/fleet/decomposer-deep.d.ts.map +1 -0
  128. package/dist/fleet/decomposer-deep.js +261 -0
  129. package/dist/fleet/decomposer-deep.js.map +1 -0
  130. package/dist/fleet/decomposer.d.ts +22 -0
  131. package/dist/fleet/decomposer.d.ts.map +1 -0
  132. package/dist/fleet/decomposer.js +144 -0
  133. package/dist/fleet/decomposer.js.map +1 -0
  134. package/dist/fleet/index.d.ts +93 -0
  135. package/dist/fleet/index.d.ts.map +1 -1
  136. package/dist/fleet/index.js +230 -2
  137. package/dist/fleet/index.js.map +1 -1
  138. package/dist/fleet/manifest-write.d.ts +30 -0
  139. package/dist/fleet/manifest-write.d.ts.map +1 -0
  140. package/dist/fleet/manifest-write.js +90 -0
  141. package/dist/fleet/manifest-write.js.map +1 -0
  142. package/dist/fleet/manifest.d.ts +6 -6
  143. package/dist/fleet/shared-blackboard.d.ts +51 -0
  144. package/dist/fleet/shared-blackboard.d.ts.map +1 -0
  145. package/dist/fleet/shared-blackboard.js +79 -0
  146. package/dist/fleet/shared-blackboard.js.map +1 -0
  147. package/dist/fleet/synthesis.d.ts +16 -0
  148. package/dist/fleet/synthesis.d.ts.map +1 -0
  149. package/dist/fleet/synthesis.js +22 -0
  150. package/dist/fleet/synthesis.js.map +1 -0
  151. package/dist/fleet/tier-policy.d.ts +18 -0
  152. package/dist/fleet/tier-policy.d.ts.map +1 -0
  153. package/dist/fleet/tier-policy.js +53 -0
  154. package/dist/fleet/tier-policy.js.map +1 -0
  155. package/dist/fleet/tool-role-guard.d.ts +24 -0
  156. package/dist/fleet/tool-role-guard.d.ts.map +1 -0
  157. package/dist/fleet/tool-role-guard.js +55 -0
  158. package/dist/fleet/tool-role-guard.js.map +1 -0
  159. package/dist/incident/resolution-verify.d.ts +4 -4
  160. package/dist/incident/types.d.ts +8 -8
  161. package/dist/mcp/run-manager.d.ts +9 -1
  162. package/dist/mcp/run-manager.d.ts.map +1 -1
  163. package/dist/mcp/run-manager.js.map +1 -1
  164. package/dist/medical/adapters/apple-health.d.ts +32 -0
  165. package/dist/medical/adapters/apple-health.d.ts.map +1 -0
  166. package/dist/medical/adapters/apple-health.js +100 -0
  167. package/dist/medical/adapters/apple-health.js.map +1 -0
  168. package/dist/medical/audit.d.ts +31 -0
  169. package/dist/medical/audit.d.ts.map +1 -0
  170. package/dist/medical/audit.js +56 -0
  171. package/dist/medical/audit.js.map +1 -0
  172. package/dist/medical/consent.d.ts +37 -0
  173. package/dist/medical/consent.d.ts.map +1 -0
  174. package/dist/medical/consent.js +73 -0
  175. package/dist/medical/consent.js.map +1 -0
  176. package/dist/medical/disclaimer.d.ts +11 -0
  177. package/dist/medical/disclaimer.d.ts.map +1 -0
  178. package/dist/medical/disclaimer.js +21 -0
  179. package/dist/medical/disclaimer.js.map +1 -0
  180. package/dist/medical/egress.d.ts +30 -0
  181. package/dist/medical/egress.d.ts.map +1 -0
  182. package/dist/medical/egress.js +50 -0
  183. package/dist/medical/egress.js.map +1 -0
  184. package/dist/medical/engine.d.ts +73 -0
  185. package/dist/medical/engine.d.ts.map +1 -0
  186. package/dist/medical/engine.js +333 -0
  187. package/dist/medical/engine.js.map +1 -0
  188. package/dist/medical/guardrails.d.ts +47 -0
  189. package/dist/medical/guardrails.d.ts.map +1 -0
  190. package/dist/medical/guardrails.js +92 -0
  191. package/dist/medical/guardrails.js.map +1 -0
  192. package/dist/medical/health-store.d.ts +80 -0
  193. package/dist/medical/health-store.d.ts.map +1 -0
  194. package/dist/medical/health-store.js +204 -0
  195. package/dist/medical/health-store.js.map +1 -0
  196. package/dist/medical/inference.d.ts +22 -0
  197. package/dist/medical/inference.d.ts.map +1 -0
  198. package/dist/medical/inference.js +39 -0
  199. package/dist/medical/inference.js.map +1 -0
  200. package/dist/medical/ingestion.d.ts +33 -0
  201. package/dist/medical/ingestion.d.ts.map +1 -0
  202. package/dist/medical/ingestion.js +52 -0
  203. package/dist/medical/ingestion.js.map +1 -0
  204. package/dist/medical/numerics.d.ts +66 -0
  205. package/dist/medical/numerics.d.ts.map +1 -0
  206. package/dist/medical/numerics.js +216 -0
  207. package/dist/medical/numerics.js.map +1 -0
  208. package/dist/medical/red-flag.d.ts +42 -0
  209. package/dist/medical/red-flag.d.ts.map +1 -0
  210. package/dist/medical/red-flag.js +161 -0
  211. package/dist/medical/red-flag.js.map +1 -0
  212. package/dist/medical/refusal.d.ts +46 -0
  213. package/dist/medical/refusal.d.ts.map +1 -0
  214. package/dist/medical/refusal.js +131 -0
  215. package/dist/medical/refusal.js.map +1 -0
  216. package/dist/medical/retrieval/grounding-critic.d.ts +34 -0
  217. package/dist/medical/retrieval/grounding-critic.d.ts.map +1 -0
  218. package/dist/medical/retrieval/grounding-critic.js +153 -0
  219. package/dist/medical/retrieval/grounding-critic.js.map +1 -0
  220. package/dist/medical/retrieval/literature.d.ts +78 -0
  221. package/dist/medical/retrieval/literature.d.ts.map +1 -0
  222. package/dist/medical/retrieval/literature.js +292 -0
  223. package/dist/medical/retrieval/literature.js.map +1 -0
  224. package/dist/medical/retrieval/medline-source.d.ts +72 -0
  225. package/dist/medical/retrieval/medline-source.d.ts.map +1 -0
  226. package/dist/medical/retrieval/medline-source.js +120 -0
  227. package/dist/medical/retrieval/medline-source.js.map +1 -0
  228. package/dist/medical/team.d.ts +15 -0
  229. package/dist/medical/team.d.ts.map +1 -0
  230. package/dist/medical/team.js +44 -0
  231. package/dist/medical/team.js.map +1 -0
  232. package/dist/medical/types.d.ts +175 -0
  233. package/dist/medical/types.d.ts.map +1 -0
  234. package/dist/medical/types.js +8 -0
  235. package/dist/medical/types.js.map +1 -0
  236. package/dist/medical/whoop/whoop-client.d.ts +114 -0
  237. package/dist/medical/whoop/whoop-client.d.ts.map +1 -0
  238. package/dist/medical/whoop/whoop-client.js +226 -0
  239. package/dist/medical/whoop/whoop-client.js.map +1 -0
  240. package/dist/medical/whoop/whoop-sync.d.ts +25 -0
  241. package/dist/medical/whoop/whoop-sync.d.ts.map +1 -0
  242. package/dist/medical/whoop/whoop-sync.js +97 -0
  243. package/dist/medical/whoop/whoop-sync.js.map +1 -0
  244. package/dist/medical/whoop/whoop-token.d.ts +44 -0
  245. package/dist/medical/whoop/whoop-token.d.ts.map +1 -0
  246. package/dist/medical/whoop/whoop-token.js +66 -0
  247. package/dist/medical/whoop/whoop-token.js.map +1 -0
  248. package/dist/orchestrator/context-handoff.d.ts +60 -60
  249. package/dist/orchestrator/contract-materialization.d.ts +33 -0
  250. package/dist/orchestrator/contract-materialization.d.ts.map +1 -0
  251. package/dist/orchestrator/contract-materialization.js +113 -0
  252. package/dist/orchestrator/contract-materialization.js.map +1 -0
  253. package/dist/orchestrator/memory/distill.d.ts +4 -1
  254. package/dist/orchestrator/memory/distill.d.ts.map +1 -1
  255. package/dist/orchestrator/memory/distill.js +41 -1
  256. package/dist/orchestrator/memory/distill.js.map +1 -1
  257. package/dist/orchestrator/memory/fact-detector.d.ts +61 -0
  258. package/dist/orchestrator/memory/fact-detector.d.ts.map +1 -0
  259. package/dist/orchestrator/memory/fact-detector.js +153 -0
  260. package/dist/orchestrator/memory/fact-detector.js.map +1 -0
  261. package/dist/orchestrator/memory/fact-judge.d.ts +19 -0
  262. package/dist/orchestrator/memory/fact-judge.d.ts.map +1 -0
  263. package/dist/orchestrator/memory/fact-judge.js +121 -0
  264. package/dist/orchestrator/memory/fact-judge.js.map +1 -0
  265. package/dist/orchestrator/memory/fact-retrieve.d.ts +52 -0
  266. package/dist/orchestrator/memory/fact-retrieve.d.ts.map +1 -0
  267. package/dist/orchestrator/memory/fact-retrieve.js +117 -0
  268. package/dist/orchestrator/memory/fact-retrieve.js.map +1 -0
  269. package/dist/orchestrator/memory/hygiene.d.ts +66 -0
  270. package/dist/orchestrator/memory/hygiene.d.ts.map +1 -0
  271. package/dist/orchestrator/memory/hygiene.js +153 -0
  272. package/dist/orchestrator/memory/hygiene.js.map +1 -0
  273. package/dist/orchestrator/memory/reconcile.d.ts +47 -0
  274. package/dist/orchestrator/memory/reconcile.d.ts.map +1 -0
  275. package/dist/orchestrator/memory/reconcile.js +116 -0
  276. package/dist/orchestrator/memory/reconcile.js.map +1 -0
  277. package/dist/orchestrator/memory/retrieve.d.ts +5 -3
  278. package/dist/orchestrator/memory/retrieve.d.ts.map +1 -1
  279. package/dist/orchestrator/memory/retrieve.js +9 -6
  280. package/dist/orchestrator/memory/retrieve.js.map +1 -1
  281. package/dist/orchestrator/pipeline.d.ts +19 -3
  282. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  283. package/dist/orchestrator/pipeline.js +63 -52
  284. package/dist/orchestrator/pipeline.js.map +1 -1
  285. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  286. package/dist/orchestrator/planner-agent.js +16 -1
  287. package/dist/orchestrator/planner-agent.js.map +1 -1
  288. package/dist/orchestrator/selfimprove/eval-guards.d.ts +51 -0
  289. package/dist/orchestrator/selfimprove/eval-guards.d.ts.map +1 -0
  290. package/dist/orchestrator/selfimprove/eval-guards.js +120 -0
  291. package/dist/orchestrator/selfimprove/eval-guards.js.map +1 -0
  292. package/dist/orchestrator/selfimprove/gepa.d.ts +74 -0
  293. package/dist/orchestrator/selfimprove/gepa.d.ts.map +1 -0
  294. package/dist/orchestrator/selfimprove/gepa.js +227 -0
  295. package/dist/orchestrator/selfimprove/gepa.js.map +1 -0
  296. package/dist/orchestrator/selfimprove/replay-harness.d.ts +65 -0
  297. package/dist/orchestrator/selfimprove/replay-harness.d.ts.map +1 -0
  298. package/dist/orchestrator/selfimprove/replay-harness.js +134 -0
  299. package/dist/orchestrator/selfimprove/replay-harness.js.map +1 -0
  300. package/dist/orchestrator/selfimprove/replay-store.d.ts +45 -0
  301. package/dist/orchestrator/selfimprove/replay-store.d.ts.map +1 -0
  302. package/dist/orchestrator/selfimprove/replay-store.js +119 -0
  303. package/dist/orchestrator/selfimprove/replay-store.js.map +1 -0
  304. package/dist/orchestrator/selfimprove/replay-types.d.ts +32 -0
  305. package/dist/orchestrator/selfimprove/replay-types.d.ts.map +1 -0
  306. package/dist/orchestrator/selfimprove/replay-types.js +15 -0
  307. package/dist/orchestrator/selfimprove/replay-types.js.map +1 -0
  308. package/dist/orchestrator/workflow/engine.d.ts +3 -1
  309. package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
  310. package/dist/orchestrator/workflow/selector.d.ts +18 -0
  311. package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
  312. package/dist/orchestrator/workflow/selector.js +41 -0
  313. package/dist/orchestrator/workflow/selector.js.map +1 -1
  314. package/dist/orchestrator/workflow/ts-engine.d.ts +3 -1
  315. package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -1
  316. package/dist/orchestrator/workflow/ts-engine.js +2 -2
  317. package/dist/orchestrator/workflow/ts-engine.js.map +1 -1
  318. package/dist/orchestrator/workflow/workflow-engine.d.ts +3 -1
  319. package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -1
  320. package/dist/orchestrator/workflow/workflow-engine.js +3 -3
  321. package/dist/orchestrator/workflow/workflow-engine.js.map +1 -1
  322. package/dist/state/facts.d.ts +110 -0
  323. package/dist/state/facts.d.ts.map +1 -0
  324. package/dist/state/facts.js +208 -0
  325. package/dist/state/facts.js.map +1 -0
  326. package/dist/state/guidance.d.ts +37 -0
  327. package/dist/state/guidance.d.ts.map +1 -0
  328. package/dist/state/guidance.js +144 -0
  329. package/dist/state/guidance.js.map +1 -0
  330. package/dist/state/history.d.ts +2 -2
  331. package/dist/state/index.d.ts +1 -1
  332. package/dist/state/index.d.ts.map +1 -1
  333. package/dist/state/index.js +1 -1
  334. package/dist/state/index.js.map +1 -1
  335. package/dist/state/memory.d.ts +43 -11
  336. package/dist/state/memory.d.ts.map +1 -1
  337. package/dist/state/memory.js +93 -15
  338. package/dist/state/memory.js.map +1 -1
  339. package/dist/state/pause.d.ts +47 -0
  340. package/dist/state/pause.d.ts.map +1 -0
  341. package/dist/state/pause.js +146 -0
  342. package/dist/state/pause.js.map +1 -0
  343. package/dist/state/sprint-state.d.ts +8 -0
  344. package/dist/state/sprint-state.d.ts.map +1 -1
  345. package/dist/state/sprint-state.js +32 -1
  346. package/dist/state/sprint-state.js.map +1 -1
  347. package/dist/teams/registry.d.ts +16 -0
  348. package/dist/teams/registry.d.ts.map +1 -0
  349. package/dist/teams/registry.js +53 -0
  350. package/dist/teams/registry.js.map +1 -0
  351. package/dist/teams/types.d.ts +25 -0
  352. package/dist/teams/types.d.ts.map +1 -0
  353. package/dist/teams/types.js +2 -0
  354. package/dist/teams/types.js.map +1 -0
  355. package/package.json +3 -1
@@ -9,13 +9,13 @@ export declare const DecisionSchema: z.ZodObject<{
9
9
  rationale: z.ZodString;
10
10
  madeBy: z.ZodEnum<["planner", "generator", "evaluator", "human"]>;
11
11
  }, "strip", z.ZodTypeAny, {
12
- description: string;
13
12
  timestamp: string;
13
+ description: string;
14
14
  rationale: string;
15
15
  madeBy: "planner" | "generator" | "evaluator" | "human";
16
16
  }, {
17
- description: string;
18
17
  timestamp: string;
18
+ description: string;
19
19
  rationale: string;
20
20
  madeBy: "planner" | "generator" | "evaluator" | "human";
21
21
  }>;
@@ -27,14 +27,14 @@ export declare const ProjectContextSchema: z.ZodObject<{
27
27
  entryPoints: z.ZodArray<z.ZodString, "many">;
28
28
  currentBranch: z.ZodString;
29
29
  }, "strip", z.ZodTypeAny, {
30
- name: string;
31
30
  type: string;
31
+ name: string;
32
32
  techStack: string[];
33
33
  entryPoints: string[];
34
34
  currentBranch: string;
35
35
  }, {
36
- name: string;
37
36
  type: string;
37
+ name: string;
38
38
  techStack: string[];
39
39
  entryPoints: string[];
40
40
  currentBranch: string;
@@ -51,14 +51,14 @@ export declare const ContextHandoffSchema: z.ZodObject<{
51
51
  entryPoints: z.ZodArray<z.ZodString, "many">;
52
52
  currentBranch: z.ZodString;
53
53
  }, "strip", z.ZodTypeAny, {
54
- name: string;
55
54
  type: string;
55
+ name: string;
56
56
  techStack: string[];
57
57
  entryPoints: string[];
58
58
  currentBranch: string;
59
59
  }, {
60
- name: string;
61
60
  type: string;
61
+ name: string;
62
62
  techStack: string[];
63
63
  entryPoints: string[];
64
64
  currentBranch: string;
@@ -86,7 +86,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
86
86
  priority: "must-have" | "should-have" | "nice-to-have";
87
87
  acceptanceCriteria: string[];
88
88
  dependencies: string[];
89
- estimatedComplexity?: "medium" | "low" | "high" | undefined;
89
+ estimatedComplexity?: "high" | "medium" | "low" | undefined;
90
90
  estimatedSprints?: number | undefined;
91
91
  }, {
92
92
  description: string;
@@ -95,7 +95,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
95
95
  priority: "must-have" | "should-have" | "nice-to-have";
96
96
  acceptanceCriteria: string[];
97
97
  dependencies?: string[] | undefined;
98
- estimatedComplexity?: "medium" | "low" | "high" | undefined;
98
+ estimatedComplexity?: "high" | "medium" | "low" | undefined;
99
99
  estimatedSprints?: number | undefined;
100
100
  }>, "many">;
101
101
  assumptions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -118,8 +118,8 @@ export declare const ContextHandoffSchema: z.ZodObject<{
118
118
  recommendation: z.ZodOptional<z.ZodString>;
119
119
  ambiguityWeight: z.ZodOptional<z.ZodNumber>;
120
120
  }, "strip", z.ZodTypeAny, {
121
- questionId: string;
122
121
  category: "other" | "scope" | "user-personas" | "data-model" | "tech-constraints" | "design-ux" | "integrations" | "non-functional" | "error-handling" | "integration-risk" | "pattern-conflict" | "regression-risk";
122
+ questionId: string;
123
123
  question: string;
124
124
  options?: {
125
125
  description: string;
@@ -128,8 +128,8 @@ export declare const ContextHandoffSchema: z.ZodObject<{
128
128
  recommendation?: string | undefined;
129
129
  ambiguityWeight?: number | undefined;
130
130
  }, {
131
- questionId: string;
132
131
  category: "other" | "scope" | "user-personas" | "data-model" | "tech-constraints" | "design-ux" | "integrations" | "non-functional" | "error-handling" | "integration-risk" | "pattern-conflict" | "regression-risk";
132
+ questionId: string;
133
133
  question: string;
134
134
  options?: {
135
135
  description: string;
@@ -144,15 +144,15 @@ export declare const ContextHandoffSchema: z.ZodObject<{
144
144
  resolvedAt: z.ZodString;
145
145
  resolvedBy: z.ZodDefault<z.ZodEnum<["user", "planner"]>>;
146
146
  }, "strip", z.ZodTypeAny, {
147
- questionId: string;
148
147
  answer: string;
148
+ questionId: string;
149
149
  resolvedAt: string;
150
- resolvedBy: "planner" | "user";
150
+ resolvedBy: "user" | "planner";
151
151
  }, {
152
- questionId: string;
153
152
  answer: string;
153
+ questionId: string;
154
154
  resolvedAt: string;
155
- resolvedBy?: "planner" | "user" | undefined;
155
+ resolvedBy?: "user" | "planner" | undefined;
156
156
  }>, "many">>;
157
157
  techStack: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
158
158
  techNotes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
@@ -164,8 +164,9 @@ export declare const ContextHandoffSchema: z.ZodObject<{
164
164
  updatedAt: z.ZodString;
165
165
  completedAt: z.ZodOptional<z.ZodString>;
166
166
  }, "strip", z.ZodTypeAny, {
167
+ createdAt: string;
168
+ status: "completed" | "draft" | "needs-clarification" | "ready" | "in-progress" | "abandoned";
167
169
  mode: "greenfield" | "brownfield";
168
- status: "draft" | "needs-clarification" | "ready" | "in-progress" | "completed" | "abandoned";
169
170
  description: string;
170
171
  specId: string;
171
172
  version: number;
@@ -177,14 +178,14 @@ export declare const ContextHandoffSchema: z.ZodObject<{
177
178
  priority: "must-have" | "should-have" | "nice-to-have";
178
179
  acceptanceCriteria: string[];
179
180
  dependencies: string[];
180
- estimatedComplexity?: "medium" | "low" | "high" | undefined;
181
+ estimatedComplexity?: "high" | "medium" | "low" | undefined;
181
182
  estimatedSprints?: number | undefined;
182
183
  }[];
183
184
  assumptions: string[];
184
185
  outOfScope: string[];
185
186
  clarificationQuestions: {
186
- questionId: string;
187
187
  category: "other" | "scope" | "user-personas" | "data-model" | "tech-constraints" | "design-ux" | "integrations" | "non-functional" | "error-handling" | "integration-risk" | "pattern-conflict" | "regression-risk";
188
+ questionId: string;
188
189
  question: string;
189
190
  options?: {
190
191
  description: string;
@@ -194,15 +195,14 @@ export declare const ContextHandoffSchema: z.ZodObject<{
194
195
  ambiguityWeight?: number | undefined;
195
196
  }[];
196
197
  resolvedClarifications: {
197
- questionId: string;
198
198
  answer: string;
199
+ questionId: string;
199
200
  resolvedAt: string;
200
- resolvedBy: "planner" | "user";
201
+ resolvedBy: "user" | "planner";
201
202
  }[];
202
203
  techStack: string[];
203
204
  nonFunctionalRequirements: unknown[];
204
205
  constraints: string[];
205
- createdAt: string;
206
206
  updatedAt: string;
207
207
  ambiguityScore?: number | undefined;
208
208
  techNotes?: Record<string, unknown> | undefined;
@@ -210,8 +210,9 @@ export declare const ContextHandoffSchema: z.ZodObject<{
210
210
  metadata?: Record<string, unknown> | undefined;
211
211
  completedAt?: string | undefined;
212
212
  }, {
213
+ createdAt: string;
214
+ status: "completed" | "draft" | "needs-clarification" | "ready" | "in-progress" | "abandoned";
213
215
  mode: "greenfield" | "brownfield";
214
- status: "draft" | "needs-clarification" | "ready" | "in-progress" | "completed" | "abandoned";
215
216
  description: string;
216
217
  specId: string;
217
218
  title: string;
@@ -222,18 +223,17 @@ export declare const ContextHandoffSchema: z.ZodObject<{
222
223
  priority: "must-have" | "should-have" | "nice-to-have";
223
224
  acceptanceCriteria: string[];
224
225
  dependencies?: string[] | undefined;
225
- estimatedComplexity?: "medium" | "low" | "high" | undefined;
226
+ estimatedComplexity?: "high" | "medium" | "low" | undefined;
226
227
  estimatedSprints?: number | undefined;
227
228
  }[];
228
- createdAt: string;
229
229
  updatedAt: string;
230
230
  version?: number | undefined;
231
231
  assumptions?: string[] | undefined;
232
232
  outOfScope?: string[] | undefined;
233
233
  ambiguityScore?: number | undefined;
234
234
  clarificationQuestions?: {
235
- questionId: string;
236
235
  category: "other" | "scope" | "user-personas" | "data-model" | "tech-constraints" | "design-ux" | "integrations" | "non-functional" | "error-handling" | "integration-risk" | "pattern-conflict" | "regression-risk";
236
+ questionId: string;
237
237
  question: string;
238
238
  options?: {
239
239
  description: string;
@@ -243,10 +243,10 @@ export declare const ContextHandoffSchema: z.ZodObject<{
243
243
  ambiguityWeight?: number | undefined;
244
244
  }[] | undefined;
245
245
  resolvedClarifications?: {
246
- questionId: string;
247
246
  answer: string;
247
+ questionId: string;
248
248
  resolvedAt: string;
249
- resolvedBy?: "planner" | "user" | undefined;
249
+ resolvedBy?: "user" | "planner" | undefined;
250
250
  }[] | undefined;
251
251
  techStack?: string[] | undefined;
252
252
  techNotes?: Record<string, unknown> | undefined;
@@ -300,7 +300,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
300
300
  startedAt: z.ZodOptional<z.ZodString>;
301
301
  completedAt: z.ZodOptional<z.ZodString>;
302
302
  }, "strip", z.ZodTypeAny, {
303
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
303
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
304
304
  description: string;
305
305
  specId: string;
306
306
  title: string;
@@ -321,8 +321,8 @@ export declare const ContextHandoffSchema: z.ZodObject<{
321
321
  definitionOfDone: string;
322
322
  estimatedFiles: string[];
323
323
  iterationHistory: unknown[];
324
- ambiguityScore?: number | undefined;
325
324
  createdAt?: string | undefined;
325
+ ambiguityScore?: number | undefined;
326
326
  updatedAt?: string | undefined;
327
327
  completedAt?: string | undefined;
328
328
  generatorNotes?: string | undefined;
@@ -333,7 +333,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
333
333
  evalResults?: unknown[] | undefined;
334
334
  startedAt?: string | undefined;
335
335
  }, {
336
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
336
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
337
337
  description: string;
338
338
  specId: string;
339
339
  title: string;
@@ -348,11 +348,11 @@ export declare const ContextHandoffSchema: z.ZodObject<{
348
348
  nonGoals: string[];
349
349
  stopConditions: string[];
350
350
  definitionOfDone: string;
351
+ createdAt?: string | undefined;
351
352
  features?: string[] | undefined;
352
353
  assumptions?: string[] | undefined;
353
354
  outOfScope?: string[] | undefined;
354
355
  ambiguityScore?: number | undefined;
355
- createdAt?: string | undefined;
356
356
  updatedAt?: string | undefined;
357
357
  completedAt?: string | undefined;
358
358
  dependsOn?: string[] | undefined;
@@ -410,7 +410,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
410
410
  startedAt: z.ZodOptional<z.ZodString>;
411
411
  completedAt: z.ZodOptional<z.ZodString>;
412
412
  }, "strip", z.ZodTypeAny, {
413
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
413
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
414
414
  description: string;
415
415
  specId: string;
416
416
  title: string;
@@ -431,8 +431,8 @@ export declare const ContextHandoffSchema: z.ZodObject<{
431
431
  definitionOfDone: string;
432
432
  estimatedFiles: string[];
433
433
  iterationHistory: unknown[];
434
- ambiguityScore?: number | undefined;
435
434
  createdAt?: string | undefined;
435
+ ambiguityScore?: number | undefined;
436
436
  updatedAt?: string | undefined;
437
437
  completedAt?: string | undefined;
438
438
  generatorNotes?: string | undefined;
@@ -443,7 +443,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
443
443
  evalResults?: unknown[] | undefined;
444
444
  startedAt?: string | undefined;
445
445
  }, {
446
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
446
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
447
447
  description: string;
448
448
  specId: string;
449
449
  title: string;
@@ -458,11 +458,11 @@ export declare const ContextHandoffSchema: z.ZodObject<{
458
458
  nonGoals: string[];
459
459
  stopConditions: string[];
460
460
  definitionOfDone: string;
461
+ createdAt?: string | undefined;
461
462
  features?: string[] | undefined;
462
463
  assumptions?: string[] | undefined;
463
464
  outOfScope?: string[] | undefined;
464
465
  ambiguityScore?: number | undefined;
465
- createdAt?: string | undefined;
466
466
  updatedAt?: string | undefined;
467
467
  completedAt?: string | undefined;
468
468
  dependsOn?: string[] | undefined;
@@ -484,13 +484,13 @@ export declare const ContextHandoffSchema: z.ZodObject<{
484
484
  rationale: z.ZodString;
485
485
  madeBy: z.ZodEnum<["planner", "generator", "evaluator", "human"]>;
486
486
  }, "strip", z.ZodTypeAny, {
487
- description: string;
488
487
  timestamp: string;
488
+ description: string;
489
489
  rationale: string;
490
490
  madeBy: "planner" | "generator" | "evaluator" | "human";
491
491
  }, {
492
- description: string;
493
492
  timestamp: string;
493
+ description: string;
494
494
  rationale: string;
495
495
  madeBy: "planner" | "generator" | "evaluator" | "human";
496
496
  }>, "many">;
@@ -501,15 +501,16 @@ export declare const ContextHandoffSchema: z.ZodObject<{
501
501
  from: "planner" | "generator" | "evaluator" | "human";
502
502
  to: "planner" | "generator" | "evaluator" | "human";
503
503
  projectContext: {
504
- name: string;
505
504
  type: string;
505
+ name: string;
506
506
  techStack: string[];
507
507
  entryPoints: string[];
508
508
  currentBranch: string;
509
509
  };
510
510
  spec: {
511
+ createdAt: string;
512
+ status: "completed" | "draft" | "needs-clarification" | "ready" | "in-progress" | "abandoned";
511
513
  mode: "greenfield" | "brownfield";
512
- status: "draft" | "needs-clarification" | "ready" | "in-progress" | "completed" | "abandoned";
513
514
  description: string;
514
515
  specId: string;
515
516
  version: number;
@@ -521,14 +522,14 @@ export declare const ContextHandoffSchema: z.ZodObject<{
521
522
  priority: "must-have" | "should-have" | "nice-to-have";
522
523
  acceptanceCriteria: string[];
523
524
  dependencies: string[];
524
- estimatedComplexity?: "medium" | "low" | "high" | undefined;
525
+ estimatedComplexity?: "high" | "medium" | "low" | undefined;
525
526
  estimatedSprints?: number | undefined;
526
527
  }[];
527
528
  assumptions: string[];
528
529
  outOfScope: string[];
529
530
  clarificationQuestions: {
530
- questionId: string;
531
531
  category: "other" | "scope" | "user-personas" | "data-model" | "tech-constraints" | "design-ux" | "integrations" | "non-functional" | "error-handling" | "integration-risk" | "pattern-conflict" | "regression-risk";
532
+ questionId: string;
532
533
  question: string;
533
534
  options?: {
534
535
  description: string;
@@ -538,15 +539,14 @@ export declare const ContextHandoffSchema: z.ZodObject<{
538
539
  ambiguityWeight?: number | undefined;
539
540
  }[];
540
541
  resolvedClarifications: {
541
- questionId: string;
542
542
  answer: string;
543
+ questionId: string;
543
544
  resolvedAt: string;
544
- resolvedBy: "planner" | "user";
545
+ resolvedBy: "user" | "planner";
545
546
  }[];
546
547
  techStack: string[];
547
548
  nonFunctionalRequirements: unknown[];
548
549
  constraints: string[];
549
- createdAt: string;
550
550
  updatedAt: string;
551
551
  ambiguityScore?: number | undefined;
552
552
  techNotes?: Record<string, unknown> | undefined;
@@ -555,7 +555,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
555
555
  completedAt?: string | undefined;
556
556
  };
557
557
  sprintHistory: {
558
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
558
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
559
559
  description: string;
560
560
  specId: string;
561
561
  title: string;
@@ -576,8 +576,8 @@ export declare const ContextHandoffSchema: z.ZodObject<{
576
576
  definitionOfDone: string;
577
577
  estimatedFiles: string[];
578
578
  iterationHistory: unknown[];
579
- ambiguityScore?: number | undefined;
580
579
  createdAt?: string | undefined;
580
+ ambiguityScore?: number | undefined;
581
581
  updatedAt?: string | undefined;
582
582
  completedAt?: string | undefined;
583
583
  generatorNotes?: string | undefined;
@@ -591,13 +591,13 @@ export declare const ContextHandoffSchema: z.ZodObject<{
591
591
  instructions: string;
592
592
  changedFiles: string[];
593
593
  decisions: {
594
- description: string;
595
594
  timestamp: string;
595
+ description: string;
596
596
  rationale: string;
597
597
  madeBy: "planner" | "generator" | "evaluator" | "human";
598
598
  }[];
599
599
  currentContract?: {
600
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
600
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
601
601
  description: string;
602
602
  specId: string;
603
603
  title: string;
@@ -618,8 +618,8 @@ export declare const ContextHandoffSchema: z.ZodObject<{
618
618
  definitionOfDone: string;
619
619
  estimatedFiles: string[];
620
620
  iterationHistory: unknown[];
621
- ambiguityScore?: number | undefined;
622
621
  createdAt?: string | undefined;
622
+ ambiguityScore?: number | undefined;
623
623
  updatedAt?: string | undefined;
624
624
  completedAt?: string | undefined;
625
625
  generatorNotes?: string | undefined;
@@ -636,15 +636,16 @@ export declare const ContextHandoffSchema: z.ZodObject<{
636
636
  from: "planner" | "generator" | "evaluator" | "human";
637
637
  to: "planner" | "generator" | "evaluator" | "human";
638
638
  projectContext: {
639
- name: string;
640
639
  type: string;
640
+ name: string;
641
641
  techStack: string[];
642
642
  entryPoints: string[];
643
643
  currentBranch: string;
644
644
  };
645
645
  spec: {
646
+ createdAt: string;
647
+ status: "completed" | "draft" | "needs-clarification" | "ready" | "in-progress" | "abandoned";
646
648
  mode: "greenfield" | "brownfield";
647
- status: "draft" | "needs-clarification" | "ready" | "in-progress" | "completed" | "abandoned";
648
649
  description: string;
649
650
  specId: string;
650
651
  title: string;
@@ -655,18 +656,17 @@ export declare const ContextHandoffSchema: z.ZodObject<{
655
656
  priority: "must-have" | "should-have" | "nice-to-have";
656
657
  acceptanceCriteria: string[];
657
658
  dependencies?: string[] | undefined;
658
- estimatedComplexity?: "medium" | "low" | "high" | undefined;
659
+ estimatedComplexity?: "high" | "medium" | "low" | undefined;
659
660
  estimatedSprints?: number | undefined;
660
661
  }[];
661
- createdAt: string;
662
662
  updatedAt: string;
663
663
  version?: number | undefined;
664
664
  assumptions?: string[] | undefined;
665
665
  outOfScope?: string[] | undefined;
666
666
  ambiguityScore?: number | undefined;
667
667
  clarificationQuestions?: {
668
- questionId: string;
669
668
  category: "other" | "scope" | "user-personas" | "data-model" | "tech-constraints" | "design-ux" | "integrations" | "non-functional" | "error-handling" | "integration-risk" | "pattern-conflict" | "regression-risk";
669
+ questionId: string;
670
670
  question: string;
671
671
  options?: {
672
672
  description: string;
@@ -676,10 +676,10 @@ export declare const ContextHandoffSchema: z.ZodObject<{
676
676
  ambiguityWeight?: number | undefined;
677
677
  }[] | undefined;
678
678
  resolvedClarifications?: {
679
- questionId: string;
680
679
  answer: string;
680
+ questionId: string;
681
681
  resolvedAt: string;
682
- resolvedBy?: "planner" | "user" | undefined;
682
+ resolvedBy?: "user" | "planner" | undefined;
683
683
  }[] | undefined;
684
684
  techStack?: string[] | undefined;
685
685
  techNotes?: Record<string, unknown> | undefined;
@@ -690,7 +690,7 @@ export declare const ContextHandoffSchema: z.ZodObject<{
690
690
  completedAt?: string | undefined;
691
691
  };
692
692
  sprintHistory: {
693
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
693
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
694
694
  description: string;
695
695
  specId: string;
696
696
  title: string;
@@ -705,11 +705,11 @@ export declare const ContextHandoffSchema: z.ZodObject<{
705
705
  nonGoals: string[];
706
706
  stopConditions: string[];
707
707
  definitionOfDone: string;
708
+ createdAt?: string | undefined;
708
709
  features?: string[] | undefined;
709
710
  assumptions?: string[] | undefined;
710
711
  outOfScope?: string[] | undefined;
711
712
  ambiguityScore?: number | undefined;
712
- createdAt?: string | undefined;
713
713
  updatedAt?: string | undefined;
714
714
  completedAt?: string | undefined;
715
715
  dependsOn?: string[] | undefined;
@@ -726,13 +726,13 @@ export declare const ContextHandoffSchema: z.ZodObject<{
726
726
  instructions: string;
727
727
  changedFiles: string[];
728
728
  decisions: {
729
- description: string;
730
729
  timestamp: string;
730
+ description: string;
731
731
  rationale: string;
732
732
  madeBy: "planner" | "generator" | "evaluator" | "human";
733
733
  }[];
734
734
  currentContract?: {
735
- status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
735
+ status: "failed" | "completed" | "evaluating" | "in-progress" | "proposed" | "negotiating" | "agreed" | "passed" | "needs-rework";
736
736
  description: string;
737
737
  specId: string;
738
738
  title: string;
@@ -747,11 +747,11 @@ export declare const ContextHandoffSchema: z.ZodObject<{
747
747
  nonGoals: string[];
748
748
  stopConditions: string[];
749
749
  definitionOfDone: string;
750
+ createdAt?: string | undefined;
750
751
  features?: string[] | undefined;
751
752
  assumptions?: string[] | undefined;
752
753
  outOfScope?: string[] | undefined;
753
754
  ambiguityScore?: number | undefined;
754
- createdAt?: string | undefined;
755
755
  updatedAt?: string | undefined;
756
756
  completedAt?: string | undefined;
757
757
  dependsOn?: string[] | undefined;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Materialize sprint contracts from a plan spec's feature list.
3
+ *
4
+ * Extracted verbatim from the runTsPipeline inline loop so that both the run
5
+ * pipeline AND the standalone `plan` command (Sprint 2) share one source of
6
+ * truth. Contract content is feature-derived; ids are deterministic and
7
+ * zero-padded as `sprint-<specId>-NN` so listContracts() lexical ordering
8
+ * matches sprint execution order.
9
+ *
10
+ * These auto-generated contracts use placeholder precision fields;
11
+ * a planner-authored contract (saved directly by the bober-planner
12
+ * subagent) supersedes them with substantive nonGoals, stopConditions,
13
+ * and definitionOfDone.
14
+ *
15
+ * The post-plan and post-sprint-contract audit checkpoints are pipeline
16
+ * concerns and live in pipeline.ts — NOT here. This helper has zero
17
+ * runWithAudit / appendHistory / checkpoint references.
18
+ */
19
+ import type { BoberConfig } from "../config/schema.js";
20
+ import type { PlanSpec } from "../contracts/spec.js";
21
+ import type { SprintContract } from "../contracts/sprint-contract.js";
22
+ /**
23
+ * Create and persist one SprintContract per feature in spec.features.
24
+ *
25
+ * Contract content is derived from feature fields. Ids are set to
26
+ * `sprint-<specId>-NN` (width-2 zero-padded) after construction so
27
+ * listContracts() lexical sort equals sprint execution order.
28
+ *
29
+ * Returns the contracts array in feature / sprintNumber order so the caller
30
+ * can pass it to the post-sprint-contract checkpoint and the sprint loop.
31
+ */
32
+ export declare function materializeContracts(spec: PlanSpec, projectRoot: string, config: BoberConfig): Promise<SprintContract[]>;
33
+ //# sourceMappingURL=contract-materialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-materialization.d.ts","sourceRoot":"","sources":["../../src/orchestrator/contract-materialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAMtE;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,cAAc,EAAE,CAAC,CA6F3B"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Materialize sprint contracts from a plan spec's feature list.
3
+ *
4
+ * Extracted verbatim from the runTsPipeline inline loop so that both the run
5
+ * pipeline AND the standalone `plan` command (Sprint 2) share one source of
6
+ * truth. Contract content is feature-derived; ids are deterministic and
7
+ * zero-padded as `sprint-<specId>-NN` so listContracts() lexical ordering
8
+ * matches sprint execution order.
9
+ *
10
+ * These auto-generated contracts use placeholder precision fields;
11
+ * a planner-authored contract (saved directly by the bober-planner
12
+ * subagent) supersedes them with substantive nonGoals, stopConditions,
13
+ * and definitionOfDone.
14
+ *
15
+ * The post-plan and post-sprint-contract audit checkpoints are pipeline
16
+ * concerns and live in pipeline.ts — NOT here. This helper has zero
17
+ * runWithAudit / appendHistory / checkpoint references.
18
+ */
19
+ import { createContract, SprintContractSchema } from "../contracts/sprint-contract.js";
20
+ import { generateContractPrecision } from "./planner-agent.js";
21
+ import { saveContract } from "../state/index.js";
22
+ import { logger } from "../utils/logger.js";
23
+ /**
24
+ * Create and persist one SprintContract per feature in spec.features.
25
+ *
26
+ * Contract content is derived from feature fields. Ids are set to
27
+ * `sprint-<specId>-NN` (width-2 zero-padded) after construction so
28
+ * listContracts() lexical sort equals sprint execution order.
29
+ *
30
+ * Returns the contracts array in feature / sprintNumber order so the caller
31
+ * can pass it to the post-sprint-contract checkpoint and the sprint loop.
32
+ */
33
+ export async function materializeContracts(spec, projectRoot, config) {
34
+ // ── Embedded branch: prefer valid spec.sprints when present ──────────
35
+ // Real bober-authored specs have string sprints (ids) — safeParse fails
36
+ // those and falls through to the feature-derived branch below.
37
+ // External/planner-authored specs may carry full contract objects here.
38
+ if (Array.isArray(spec.sprints) && spec.sprints.length > 0) {
39
+ const embedded = [];
40
+ let allParsed = true;
41
+ for (let i = 0; i < spec.sprints.length; i++) {
42
+ const parsed = SprintContractSchema.safeParse(spec.sprints[i]);
43
+ if (!parsed.success) {
44
+ allParsed = false;
45
+ logger.warn(`Embedded spec.sprints[${i}] failed schema validation; falling back to feature-derived contracts for the whole spec.`);
46
+ break;
47
+ }
48
+ const contract = parsed.data;
49
+ contract.status = "proposed";
50
+ contract.specId = spec.specId;
51
+ contract.sprintNumber = i + 1;
52
+ // bober: width-2 pad covers 1–99; widen to 3 if suite grows past 99.
53
+ contract.contractId = `sprint-${spec.specId}-${String(i + 1).padStart(2, "0")}`;
54
+ embedded.push(contract);
55
+ }
56
+ if (allParsed && embedded.length > 0) {
57
+ try {
58
+ for (const c of embedded) {
59
+ await saveContract(projectRoot, c);
60
+ }
61
+ return embedded;
62
+ }
63
+ catch (err) {
64
+ logger.warn(`Embedded sprints failed the precision gate; falling back to feature-derived contracts: ${err instanceof Error ? err.message : String(err)}`);
65
+ // fall through to feature-derived loop
66
+ }
67
+ }
68
+ }
69
+ // ── Feature-derived branch (fallback and default path) ───────────────
70
+ const contracts = [];
71
+ for (let i = 0; i < spec.features.length; i++) {
72
+ const feature = spec.features[i];
73
+ // Generate substantive precision fields (nonGoals/stopConditions/
74
+ // definitionOfDone) so the contract passes the generator's BLOCKING
75
+ // precision preflight. Without this the standalone pipeline emits
76
+ // placeholder contracts that every generator (Claude or DeepSeek) refuses.
77
+ const precision = await generateContractPrecision(feature, spec, config);
78
+ if (precision) {
79
+ logger.info(`Generated precision fields for sprint ${i + 1} (${precision.nonGoals.length} non-goals, ${precision.stopConditions.length} stop conditions).`);
80
+ }
81
+ else {
82
+ logger.warn(`Could not generate precision fields for sprint ${i + 1}; contract will use placeholders and the generator may block it.`);
83
+ }
84
+ const contract = createContract(feature.title, feature.description, feature.acceptanceCriteria.map((ac, idx) => ({
85
+ criterionId: `${feature.featureId}-criterion-${idx + 1}`,
86
+ description: ac,
87
+ verificationMethod: "agent-evaluation",
88
+ })), {
89
+ specId: spec.specId,
90
+ sprintNumber: i + 1,
91
+ features: [feature.featureId],
92
+ ...(precision
93
+ ? {
94
+ nonGoals: precision.nonGoals,
95
+ stopConditions: precision.stopConditions,
96
+ definitionOfDone: precision.definitionOfDone,
97
+ }
98
+ : {}),
99
+ });
100
+ // createContract doesn't take assumptions/outOfScope; set them directly.
101
+ if (precision) {
102
+ contract.assumptions = precision.assumptions;
103
+ contract.outOfScope = precision.outOfScope;
104
+ }
105
+ // Deterministic, zero-padded id: lexical order == execution order.
106
+ // bober: width-2 pad covers 1–99 sprints; widen to 3 if suite grows past 99.
107
+ contract.contractId = `sprint-${spec.specId}-${String(i + 1).padStart(2, "0")}`;
108
+ contracts.push(contract);
109
+ await saveContract(projectRoot, contract);
110
+ }
111
+ return contracts;
112
+ }
113
+ //# sourceMappingURL=contract-materialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-materialization.js","sourceRoot":"","sources":["../../src/orchestrator/contract-materialization.ts"],"names":[],"mappings":"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"}