agent-bober 0.15.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 (301) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/CHANGELOG.md +30 -0
  4. package/README.md +127 -3
  5. package/agents/bober-architect.md +34 -0
  6. package/agents/bober-code-reviewer.md +2 -0
  7. package/agents/bober-curator.md +12 -0
  8. package/agents/bober-documenter.md +129 -0
  9. package/agents/bober-evaluator.md +46 -0
  10. package/agents/bober-generator.md +12 -0
  11. package/agents/bober-planner.md +8 -1
  12. package/dist/cli/commands/graph.js +3 -3
  13. package/dist/cli/commands/graph.js.map +1 -1
  14. package/dist/cli/commands/init.js +4 -0
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/memory.d.ts +14 -0
  17. package/dist/cli/commands/memory.d.ts.map +1 -0
  18. package/dist/cli/commands/memory.js +132 -0
  19. package/dist/cli/commands/memory.js.map +1 -0
  20. package/dist/cli/index.js +6 -0
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/config/defaults.d.ts.map +1 -1
  23. package/dist/config/defaults.js +14 -3
  24. package/dist/config/defaults.js.map +1 -1
  25. package/dist/config/loader.d.ts.map +1 -1
  26. package/dist/config/loader.js +7 -0
  27. package/dist/config/loader.js.map +1 -1
  28. package/dist/config/role-providers.d.ts +29 -0
  29. package/dist/config/role-providers.d.ts.map +1 -0
  30. package/dist/config/role-providers.js +115 -0
  31. package/dist/config/role-providers.js.map +1 -0
  32. package/dist/config/schema.d.ts +383 -14
  33. package/dist/config/schema.d.ts.map +1 -1
  34. package/dist/config/schema.js +42 -0
  35. package/dist/config/schema.js.map +1 -1
  36. package/dist/contracts/eval-result.d.ts +112 -56
  37. package/dist/contracts/eval-result.d.ts.map +1 -1
  38. package/dist/contracts/eval-result.js +3 -0
  39. package/dist/contracts/eval-result.js.map +1 -1
  40. package/dist/contracts/sprint-contract.d.ts +30 -30
  41. package/dist/fleet/aggregator.d.ts +5 -0
  42. package/dist/fleet/aggregator.d.ts.map +1 -0
  43. package/dist/fleet/aggregator.js +39 -0
  44. package/dist/fleet/aggregator.js.map +1 -0
  45. package/dist/fleet/child-config.d.ts +12 -0
  46. package/dist/fleet/child-config.d.ts.map +1 -0
  47. package/dist/fleet/child-config.js +38 -0
  48. package/dist/fleet/child-config.js.map +1 -0
  49. package/dist/fleet/coordinator.d.ts +25 -0
  50. package/dist/fleet/coordinator.d.ts.map +1 -0
  51. package/dist/fleet/coordinator.js +40 -0
  52. package/dist/fleet/coordinator.js.map +1 -0
  53. package/dist/fleet/index.d.ts +40 -0
  54. package/dist/fleet/index.d.ts.map +1 -0
  55. package/dist/fleet/index.js +117 -0
  56. package/dist/fleet/index.js.map +1 -0
  57. package/dist/fleet/manifest.d.ts +51 -0
  58. package/dist/fleet/manifest.d.ts.map +1 -0
  59. package/dist/fleet/manifest.js +32 -0
  60. package/dist/fleet/manifest.js.map +1 -0
  61. package/dist/fleet/reporter.d.ts +32 -0
  62. package/dist/fleet/reporter.d.ts.map +1 -0
  63. package/dist/fleet/reporter.js +71 -0
  64. package/dist/fleet/reporter.js.map +1 -0
  65. package/dist/fleet/runner.d.ts +48 -0
  66. package/dist/fleet/runner.d.ts.map +1 -0
  67. package/dist/fleet/runner.js +104 -0
  68. package/dist/fleet/runner.js.map +1 -0
  69. package/dist/fleet/scaffolder.d.ts +12 -0
  70. package/dist/fleet/scaffolder.d.ts.map +1 -0
  71. package/dist/fleet/scaffolder.js +82 -0
  72. package/dist/fleet/scaffolder.js.map +1 -0
  73. package/dist/fleet/types.d.ts +21 -0
  74. package/dist/fleet/types.d.ts.map +1 -0
  75. package/dist/fleet/types.js +2 -0
  76. package/dist/fleet/types.js.map +1 -0
  77. package/dist/graph/cli.d.ts +6 -2
  78. package/dist/graph/cli.d.ts.map +1 -1
  79. package/dist/graph/cli.js +53 -12
  80. package/dist/graph/cli.js.map +1 -1
  81. package/dist/graph/pipeline-lifecycle.d.ts +9 -0
  82. package/dist/graph/pipeline-lifecycle.d.ts.map +1 -1
  83. package/dist/graph/pipeline-lifecycle.js +12 -0
  84. package/dist/graph/pipeline-lifecycle.js.map +1 -1
  85. package/dist/graph/preflight-injector.d.ts +14 -0
  86. package/dist/graph/preflight-injector.d.ts.map +1 -1
  87. package/dist/graph/preflight-injector.js +84 -4
  88. package/dist/graph/preflight-injector.js.map +1 -1
  89. package/dist/incident/types.d.ts +24 -24
  90. package/dist/mcp/tools/graph-schemas.d.ts +7 -7
  91. package/dist/mcp/tools/init.d.ts.map +1 -1
  92. package/dist/mcp/tools/init.js +2 -0
  93. package/dist/mcp/tools/init.js.map +1 -1
  94. package/dist/orchestrator/agent-loader.d.ts.map +1 -1
  95. package/dist/orchestrator/agent-loader.js +15 -1
  96. package/dist/orchestrator/agent-loader.js.map +1 -1
  97. package/dist/orchestrator/agentic-loop.d.ts +51 -0
  98. package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
  99. package/dist/orchestrator/agentic-loop.js +123 -4
  100. package/dist/orchestrator/agentic-loop.js.map +1 -1
  101. package/dist/orchestrator/arch-lenses.d.ts +7 -0
  102. package/dist/orchestrator/arch-lenses.d.ts.map +1 -0
  103. package/dist/orchestrator/arch-lenses.js +22 -0
  104. package/dist/orchestrator/arch-lenses.js.map +1 -0
  105. package/dist/orchestrator/architect-agent.d.ts +16 -0
  106. package/dist/orchestrator/architect-agent.d.ts.map +1 -1
  107. package/dist/orchestrator/architect-agent.js +509 -1
  108. package/dist/orchestrator/architect-agent.js.map +1 -1
  109. package/dist/orchestrator/curator-agent.js +1 -1
  110. package/dist/orchestrator/curator-agent.js.map +1 -1
  111. package/dist/orchestrator/deploy/types.d.ts +2 -2
  112. package/dist/orchestrator/documenter-agent.d.ts +57 -0
  113. package/dist/orchestrator/documenter-agent.d.ts.map +1 -0
  114. package/dist/orchestrator/documenter-agent.js +195 -0
  115. package/dist/orchestrator/documenter-agent.js.map +1 -0
  116. package/dist/orchestrator/environment.d.ts +45 -0
  117. package/dist/orchestrator/environment.d.ts.map +1 -0
  118. package/dist/orchestrator/environment.js +151 -0
  119. package/dist/orchestrator/environment.js.map +1 -0
  120. package/dist/orchestrator/eval-lenses.d.ts +7 -0
  121. package/dist/orchestrator/eval-lenses.d.ts.map +1 -0
  122. package/dist/orchestrator/eval-lenses.js +19 -0
  123. package/dist/orchestrator/eval-lenses.js.map +1 -0
  124. package/dist/orchestrator/eval-persist.d.ts +25 -0
  125. package/dist/orchestrator/eval-persist.d.ts.map +1 -0
  126. package/dist/orchestrator/eval-persist.js +74 -0
  127. package/dist/orchestrator/eval-persist.js.map +1 -0
  128. package/dist/orchestrator/evaluator-agent.d.ts +23 -0
  129. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
  130. package/dist/orchestrator/evaluator-agent.js +60 -3
  131. package/dist/orchestrator/evaluator-agent.js.map +1 -1
  132. package/dist/orchestrator/generator-agent.d.ts.map +1 -1
  133. package/dist/orchestrator/generator-agent.js +32 -0
  134. package/dist/orchestrator/generator-agent.js.map +1 -1
  135. package/dist/orchestrator/memory/distill.d.ts +60 -0
  136. package/dist/orchestrator/memory/distill.d.ts.map +1 -0
  137. package/dist/orchestrator/memory/distill.js +177 -0
  138. package/dist/orchestrator/memory/distill.js.map +1 -0
  139. package/dist/orchestrator/memory/eval-source.d.ts +20 -0
  140. package/dist/orchestrator/memory/eval-source.d.ts.map +1 -0
  141. package/dist/orchestrator/memory/eval-source.js +88 -0
  142. package/dist/orchestrator/memory/eval-source.js.map +1 -0
  143. package/dist/orchestrator/memory/retrieve.d.ts +45 -0
  144. package/dist/orchestrator/memory/retrieve.d.ts.map +1 -0
  145. package/dist/orchestrator/memory/retrieve.js +102 -0
  146. package/dist/orchestrator/memory/retrieve.js.map +1 -0
  147. package/dist/orchestrator/model-resolver.d.ts.map +1 -1
  148. package/dist/orchestrator/model-resolver.js +12 -0
  149. package/dist/orchestrator/model-resolver.js.map +1 -1
  150. package/dist/orchestrator/pipeline.d.ts +10 -0
  151. package/dist/orchestrator/pipeline.d.ts.map +1 -1
  152. package/dist/orchestrator/pipeline.js +111 -3
  153. package/dist/orchestrator/pipeline.js.map +1 -1
  154. package/dist/orchestrator/planner-agent.d.ts +22 -1
  155. package/dist/orchestrator/planner-agent.d.ts.map +1 -1
  156. package/dist/orchestrator/planner-agent.js +160 -4
  157. package/dist/orchestrator/planner-agent.js.map +1 -1
  158. package/dist/orchestrator/research-agent.js +2 -2
  159. package/dist/orchestrator/research-agent.js.map +1 -1
  160. package/dist/orchestrator/tools/handlers.d.ts +14 -0
  161. package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
  162. package/dist/orchestrator/tools/handlers.js +29 -4
  163. package/dist/orchestrator/tools/handlers.js.map +1 -1
  164. package/dist/orchestrator/tools/schemas.js +5 -5
  165. package/dist/orchestrator/tools/schemas.js.map +1 -1
  166. package/dist/orchestrator/workflow/args-builder.d.ts +35 -0
  167. package/dist/orchestrator/workflow/args-builder.d.ts.map +1 -0
  168. package/dist/orchestrator/workflow/args-builder.js +142 -0
  169. package/dist/orchestrator/workflow/args-builder.js.map +1 -0
  170. package/dist/orchestrator/workflow/budget.d.ts +57 -0
  171. package/dist/orchestrator/workflow/budget.d.ts.map +1 -0
  172. package/dist/orchestrator/workflow/budget.js +80 -0
  173. package/dist/orchestrator/workflow/budget.js.map +1 -0
  174. package/dist/orchestrator/workflow/conformance.d.ts +27 -0
  175. package/dist/orchestrator/workflow/conformance.d.ts.map +1 -0
  176. package/dist/orchestrator/workflow/conformance.js +111 -0
  177. package/dist/orchestrator/workflow/conformance.js.map +1 -0
  178. package/dist/orchestrator/workflow/eligibility.d.ts +8 -0
  179. package/dist/orchestrator/workflow/eligibility.d.ts.map +1 -0
  180. package/dist/orchestrator/workflow/eligibility.js +10 -0
  181. package/dist/orchestrator/workflow/eligibility.js.map +1 -0
  182. package/dist/orchestrator/workflow/engine.d.ts +10 -0
  183. package/dist/orchestrator/workflow/engine.d.ts.map +1 -0
  184. package/dist/orchestrator/workflow/engine.js +2 -0
  185. package/dist/orchestrator/workflow/engine.js.map +1 -0
  186. package/dist/orchestrator/workflow/errors.d.ts +13 -0
  187. package/dist/orchestrator/workflow/errors.d.ts.map +1 -0
  188. package/dist/orchestrator/workflow/errors.js +26 -0
  189. package/dist/orchestrator/workflow/errors.js.map +1 -0
  190. package/dist/orchestrator/workflow/flusher.d.ts +19 -0
  191. package/dist/orchestrator/workflow/flusher.d.ts.map +1 -0
  192. package/dist/orchestrator/workflow/flusher.js +81 -0
  193. package/dist/orchestrator/workflow/flusher.js.map +1 -0
  194. package/dist/orchestrator/workflow/interpreter.d.ts +48 -0
  195. package/dist/orchestrator/workflow/interpreter.d.ts.map +1 -0
  196. package/dist/orchestrator/workflow/interpreter.js +92 -0
  197. package/dist/orchestrator/workflow/interpreter.js.map +1 -0
  198. package/dist/orchestrator/workflow/pure-sprint.d.ts +65 -0
  199. package/dist/orchestrator/workflow/pure-sprint.d.ts.map +1 -0
  200. package/dist/orchestrator/workflow/pure-sprint.js +82 -0
  201. package/dist/orchestrator/workflow/pure-sprint.js.map +1 -0
  202. package/dist/orchestrator/workflow/reconciler.d.ts +15 -0
  203. package/dist/orchestrator/workflow/reconciler.d.ts.map +1 -0
  204. package/dist/orchestrator/workflow/reconciler.js +65 -0
  205. package/dist/orchestrator/workflow/reconciler.js.map +1 -0
  206. package/dist/orchestrator/workflow/resume-cursor.d.ts +10 -0
  207. package/dist/orchestrator/workflow/resume-cursor.d.ts.map +1 -0
  208. package/dist/orchestrator/workflow/resume-cursor.js +25 -0
  209. package/dist/orchestrator/workflow/resume-cursor.js.map +1 -0
  210. package/dist/orchestrator/workflow/retry.d.ts +50 -0
  211. package/dist/orchestrator/workflow/retry.d.ts.map +1 -0
  212. package/dist/orchestrator/workflow/retry.js +100 -0
  213. package/dist/orchestrator/workflow/retry.js.map +1 -0
  214. package/dist/orchestrator/workflow/scheduler.d.ts +87 -0
  215. package/dist/orchestrator/workflow/scheduler.d.ts.map +1 -0
  216. package/dist/orchestrator/workflow/scheduler.js +158 -0
  217. package/dist/orchestrator/workflow/scheduler.js.map +1 -0
  218. package/dist/orchestrator/workflow/selector.d.ts +26 -0
  219. package/dist/orchestrator/workflow/selector.d.ts.map +1 -0
  220. package/dist/orchestrator/workflow/selector.js +54 -0
  221. package/dist/orchestrator/workflow/selector.js.map +1 -0
  222. package/dist/orchestrator/workflow/synthesizer.d.ts +52 -0
  223. package/dist/orchestrator/workflow/synthesizer.d.ts.map +1 -0
  224. package/dist/orchestrator/workflow/synthesizer.js +75 -0
  225. package/dist/orchestrator/workflow/synthesizer.js.map +1 -0
  226. package/dist/orchestrator/workflow/ts-engine.d.ts +13 -0
  227. package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -0
  228. package/dist/orchestrator/workflow/ts-engine.js +14 -0
  229. package/dist/orchestrator/workflow/ts-engine.js.map +1 -0
  230. package/dist/orchestrator/workflow/types.d.ts +55 -0
  231. package/dist/orchestrator/workflow/types.d.ts.map +1 -0
  232. package/dist/orchestrator/workflow/types.js +3 -0
  233. package/dist/orchestrator/workflow/types.js.map +1 -0
  234. package/dist/orchestrator/workflow/workflow-engine.d.ts +31 -0
  235. package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -0
  236. package/dist/orchestrator/workflow/workflow-engine.js +70 -0
  237. package/dist/orchestrator/workflow/workflow-engine.js.map +1 -0
  238. package/dist/providers/anthropic.d.ts.map +1 -1
  239. package/dist/providers/anthropic.js +49 -6
  240. package/dist/providers/anthropic.js.map +1 -1
  241. package/dist/providers/claude-code.d.ts +44 -0
  242. package/dist/providers/claude-code.d.ts.map +1 -0
  243. package/dist/providers/claude-code.js +143 -0
  244. package/dist/providers/claude-code.js.map +1 -0
  245. package/dist/providers/factory.d.ts +16 -2
  246. package/dist/providers/factory.d.ts.map +1 -1
  247. package/dist/providers/factory.js +66 -12
  248. package/dist/providers/factory.js.map +1 -1
  249. package/dist/providers/google.d.ts.map +1 -1
  250. package/dist/providers/google.js +27 -3
  251. package/dist/providers/google.js.map +1 -1
  252. package/dist/providers/index.d.ts +3 -1
  253. package/dist/providers/index.d.ts.map +1 -1
  254. package/dist/providers/index.js +3 -1
  255. package/dist/providers/index.js.map +1 -1
  256. package/dist/providers/openai.d.ts.map +1 -1
  257. package/dist/providers/openai.js +24 -3
  258. package/dist/providers/openai.js.map +1 -1
  259. package/dist/providers/preflight.d.ts +22 -0
  260. package/dist/providers/preflight.d.ts.map +1 -0
  261. package/dist/providers/preflight.js +54 -0
  262. package/dist/providers/preflight.js.map +1 -0
  263. package/dist/providers/structured.d.ts +130 -0
  264. package/dist/providers/structured.d.ts.map +1 -0
  265. package/dist/providers/structured.js +205 -0
  266. package/dist/providers/structured.js.map +1 -0
  267. package/dist/providers/types.d.ts +28 -0
  268. package/dist/providers/types.d.ts.map +1 -1
  269. package/dist/state/history-rotation.d.ts +17 -0
  270. package/dist/state/history-rotation.d.ts.map +1 -0
  271. package/dist/state/history-rotation.js +84 -0
  272. package/dist/state/history-rotation.js.map +1 -0
  273. package/dist/state/history.d.ts +16 -4
  274. package/dist/state/history.d.ts.map +1 -1
  275. package/dist/state/history.js +62 -20
  276. package/dist/state/history.js.map +1 -1
  277. package/dist/state/index.d.ts +1 -1
  278. package/dist/state/index.d.ts.map +1 -1
  279. package/dist/state/index.js +1 -1
  280. package/dist/state/index.js.map +1 -1
  281. package/dist/state/memory.d.ts +60 -0
  282. package/dist/state/memory.d.ts.map +1 -0
  283. package/dist/state/memory.js +242 -0
  284. package/dist/state/memory.js.map +1 -0
  285. package/hooks/hooks.json +12 -2
  286. package/package.json +9 -5
  287. package/scripts/spike-claude-code-provider.mjs +66 -0
  288. package/scripts/spike-deepseek.mjs +63 -0
  289. package/scripts/sync-targets.json +12 -0
  290. package/scripts/update-all.mjs +255 -0
  291. package/skills/bober.architect/SKILL.md +13 -0
  292. package/skills/bober.architect/references/arch-lens-panel.md +126 -0
  293. package/skills/bober.eval/SKILL.md +9 -0
  294. package/skills/bober.eval/references/lens-panel.md +115 -0
  295. package/skills/bober.plan/SKILL.md +6 -0
  296. package/skills/bober.run/SKILL.md +23 -4
  297. package/skills/bober.run/references/lens-panel.md +115 -0
  298. package/skills/bober.sprint/SKILL.md +44 -2
  299. package/skills/bober.sprint/references/lens-panel.md +115 -0
  300. package/skills/shared/arch-lens-panel.md +126 -0
  301. package/skills/shared/lens-panel.md +115 -0
@@ -1 +1 @@
1
- {"version":3,"file":"eval-result.js","sourceRoot":"","sources":["../../src/contracts/eval-result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eval-result.js","sourceRoot":"","sources":["../../src/contracts/eval-result.ts"],"names":[],"mappings":"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"}
@@ -32,14 +32,14 @@ export declare const SuccessCriterionSchema: z.ZodObject<{
32
32
  required: z.ZodBoolean;
33
33
  }, "strip", z.ZodTypeAny, {
34
34
  description: string;
35
- criterionId: string;
36
- verificationMethod: "manual" | "typecheck" | "lint" | "unit-test" | "playwright" | "api-check" | "build" | "agent-evaluation";
37
35
  required: boolean;
36
+ criterionId: string;
37
+ verificationMethod: "build" | "lint" | "typecheck" | "manual" | "unit-test" | "playwright" | "api-check" | "agent-evaluation";
38
38
  }, {
39
39
  description: string;
40
- criterionId: string;
41
- verificationMethod: "manual" | "typecheck" | "lint" | "unit-test" | "playwright" | "api-check" | "build" | "agent-evaluation";
42
40
  required: boolean;
41
+ criterionId: string;
42
+ verificationMethod: "build" | "lint" | "typecheck" | "manual" | "unit-test" | "playwright" | "api-check" | "agent-evaluation";
43
43
  }>;
44
44
  export type SuccessCriterion = z.infer<typeof SuccessCriterionSchema>;
45
45
  export declare const SprintContractSchema: z.ZodObject<{
@@ -58,14 +58,14 @@ export declare const SprintContractSchema: z.ZodObject<{
58
58
  required: z.ZodBoolean;
59
59
  }, "strip", z.ZodTypeAny, {
60
60
  description: string;
61
- criterionId: string;
62
- verificationMethod: "manual" | "typecheck" | "lint" | "unit-test" | "playwright" | "api-check" | "build" | "agent-evaluation";
63
61
  required: boolean;
62
+ criterionId: string;
63
+ verificationMethod: "build" | "lint" | "typecheck" | "manual" | "unit-test" | "playwright" | "api-check" | "agent-evaluation";
64
64
  }, {
65
65
  description: string;
66
- criterionId: string;
67
- verificationMethod: "manual" | "typecheck" | "lint" | "unit-test" | "playwright" | "api-check" | "build" | "agent-evaluation";
68
66
  required: boolean;
67
+ criterionId: string;
68
+ verificationMethod: "build" | "lint" | "typecheck" | "manual" | "unit-test" | "playwright" | "api-check" | "agent-evaluation";
69
69
  }>, "many">;
70
70
  /** Things the generator MUST NOT do, even if tempting. Forces explicit scope. */
71
71
  nonGoals: z.ZodArray<z.ZodString, "many">;
@@ -96,59 +96,62 @@ export declare const SprintContractSchema: z.ZodObject<{
96
96
  startedAt: z.ZodOptional<z.ZodString>;
97
97
  completedAt: z.ZodOptional<z.ZodString>;
98
98
  }, "strip", z.ZodTypeAny, {
99
- contractId: string;
99
+ status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
100
+ description: string;
100
101
  specId: string;
101
- sprintNumber: number;
102
102
  title: string;
103
- description: string;
104
- status: "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "passed" | "failed" | "needs-rework" | "completed";
105
- dependsOn: string[];
106
103
  features: string[];
104
+ assumptions: string[];
105
+ outOfScope: string[];
106
+ contractId: string;
107
+ sprintNumber: number;
108
+ dependsOn: string[];
107
109
  successCriteria: {
108
110
  description: string;
109
- criterionId: string;
110
- verificationMethod: "manual" | "typecheck" | "lint" | "unit-test" | "playwright" | "api-check" | "build" | "agent-evaluation";
111
111
  required: boolean;
112
+ criterionId: string;
113
+ verificationMethod: "build" | "lint" | "typecheck" | "manual" | "unit-test" | "playwright" | "api-check" | "agent-evaluation";
112
114
  }[];
113
115
  nonGoals: string[];
114
116
  stopConditions: string[];
115
117
  definitionOfDone: string;
116
- assumptions: string[];
117
- outOfScope: string[];
118
118
  estimatedFiles: string[];
119
119
  iterationHistory: unknown[];
120
120
  ambiguityScore?: number | undefined;
121
+ createdAt?: string | undefined;
122
+ updatedAt?: string | undefined;
123
+ completedAt?: string | undefined;
121
124
  generatorNotes?: string | undefined;
122
125
  evaluatorNotes?: string | undefined;
123
126
  estimatedDuration?: "small" | "medium" | "large" | undefined;
124
127
  evaluatorFeedback?: string | undefined;
125
128
  lastEvalId?: string | null | undefined;
126
129
  evalResults?: unknown[] | undefined;
127
- createdAt?: string | undefined;
128
- updatedAt?: string | undefined;
129
130
  startedAt?: string | undefined;
130
- completedAt?: string | undefined;
131
131
  }, {
132
- contractId: string;
132
+ status: "in-progress" | "completed" | "proposed" | "negotiating" | "agreed" | "evaluating" | "passed" | "failed" | "needs-rework";
133
+ description: string;
133
134
  specId: string;
134
- sprintNumber: number;
135
135
  title: string;
136
- description: string;
137
- status: "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "passed" | "failed" | "needs-rework" | "completed";
136
+ contractId: string;
137
+ sprintNumber: number;
138
138
  successCriteria: {
139
139
  description: string;
140
- criterionId: string;
141
- verificationMethod: "manual" | "typecheck" | "lint" | "unit-test" | "playwright" | "api-check" | "build" | "agent-evaluation";
142
140
  required: boolean;
141
+ criterionId: string;
142
+ verificationMethod: "build" | "lint" | "typecheck" | "manual" | "unit-test" | "playwright" | "api-check" | "agent-evaluation";
143
143
  }[];
144
144
  nonGoals: string[];
145
145
  stopConditions: string[];
146
146
  definitionOfDone: string;
147
- dependsOn?: string[] | undefined;
148
147
  features?: string[] | undefined;
149
148
  assumptions?: string[] | undefined;
150
149
  outOfScope?: string[] | undefined;
151
150
  ambiguityScore?: number | undefined;
151
+ createdAt?: string | undefined;
152
+ updatedAt?: string | undefined;
153
+ completedAt?: string | undefined;
154
+ dependsOn?: string[] | undefined;
152
155
  generatorNotes?: string | undefined;
153
156
  evaluatorNotes?: string | undefined;
154
157
  estimatedFiles?: string[] | undefined;
@@ -157,10 +160,7 @@ export declare const SprintContractSchema: z.ZodObject<{
157
160
  iterationHistory?: unknown[] | undefined;
158
161
  lastEvalId?: string | null | undefined;
159
162
  evalResults?: unknown[] | undefined;
160
- createdAt?: string | undefined;
161
- updatedAt?: string | undefined;
162
163
  startedAt?: string | undefined;
163
- completedAt?: string | undefined;
164
164
  }>;
165
165
  export type SprintContract = z.infer<typeof SprintContractSchema>;
166
166
  /**
@@ -0,0 +1,5 @@
1
+ import type { ChildExecution, ChildOutcome } from "./types.js";
2
+ export declare class OutcomeAggregator {
3
+ aggregate(execution: ChildExecution): Promise<ChildOutcome>;
4
+ }
5
+ //# sourceMappingURL=aggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../src/fleet/aggregator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAe,MAAM,YAAY,CAAC;AAY5E,qBAAa,iBAAiB;IACtB,SAAS,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;CA4BlE"}
@@ -0,0 +1,39 @@
1
+ import { readRunStatesFromDisk } from "../state/run-state.js";
2
+ // ── Status mapping ────────────────────────────────────────────────────
3
+ function mapStatus(s) {
4
+ if (s === "completed")
5
+ return "completed";
6
+ if (s === "failed" || s === "aborted")
7
+ return "failed";
8
+ return "other"; // "running"
9
+ }
10
+ // ── OutcomeAggregator ─────────────────────────────────────────────────
11
+ export class OutcomeAggregator {
12
+ async aggregate(execution) {
13
+ const { folder, scaffold, spawn } = execution;
14
+ // Scaffold failed and no spawn → failed via exit-code source
15
+ if (scaffold.error && !spawn) {
16
+ return { folder, status: "failed", source: "exit-code", exitCode: -1 };
17
+ }
18
+ try {
19
+ const states = await readRunStatesFromDisk(scaffold.absPath);
20
+ if (states.length > 0) {
21
+ // newest by startedAt — ISO-8601 strings sort lexicographically
22
+ const newest = states.reduce((a, b) => (b.startedAt > a.startedAt ? b : a));
23
+ return {
24
+ folder,
25
+ status: mapStatus(newest.status),
26
+ source: "disk",
27
+ runId: newest.runId,
28
+ runState: newest,
29
+ };
30
+ }
31
+ }
32
+ catch {
33
+ // readRunStatesFromDisk already swallows IO/JSON errors; guard anyway → fall through
34
+ }
35
+ const code = spawn?.exitCode ?? -1;
36
+ return { folder, status: code === 0 ? "completed" : "failed", source: "exit-code", exitCode: code };
37
+ }
38
+ }
39
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../src/fleet/aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,yEAAyE;AAEzE,SAAS,SAAS,CAAC,CAAqB;IACtC,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACvD,OAAO,OAAO,CAAC,CAAC,YAAY;AAC9B,CAAC;AAED,yEAAyE;AAEzE,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,SAAS,CAAC,SAAyB;QACvC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QAE9C,6DAA6D;QAC7D,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;QACzE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAe,MAAM,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACzE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,gEAAgE;gBAChE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5E,OAAO;oBACL,MAAM;oBACN,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;oBAChC,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,QAAQ,EAAE,MAAM;iBACjB,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qFAAqF;QACvF,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAC;QACnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtG,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { BoberConfig } from "../config/schema.js";
2
+ import type { FleetChild } from "./manifest.js";
3
+ /**
4
+ * Build a Zod-valid BoberConfig for a fleet child process.
5
+ *
6
+ * Starts from createDefaultConfig() with the DeepSeek (openai-compat)
7
+ * provider set on planner, generator, and evaluator, then shallow-merges
8
+ * child.config top-level keys over the base (a child top-level key fully
9
+ * replaces the base value — no deep merge).
10
+ */
11
+ export declare function buildChildConfig(child: FleetChild): BoberConfig;
12
+ //# sourceMappingURL=child-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-config.d.ts","sourceRoot":"","sources":["../../src/fleet/child-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAUhD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAwB/D"}
@@ -0,0 +1,38 @@
1
+ import { BoberConfigSchema, createDefaultConfig } from "../config/schema.js";
2
+ // ── DeepSeek / openai-compat constants ──────────────────────────────
3
+ const DEEPSEEK_PROVIDER = "openai-compat";
4
+ const DEEPSEEK_ENDPOINT = "https://api.deepseek.com";
5
+ const DEEPSEEK_MODEL = "deepseek-v4-pro";
6
+ // ── Builder ──────────────────────────────────────────────────────────
7
+ /**
8
+ * Build a Zod-valid BoberConfig for a fleet child process.
9
+ *
10
+ * Starts from createDefaultConfig() with the DeepSeek (openai-compat)
11
+ * provider set on planner, generator, and evaluator, then shallow-merges
12
+ * child.config top-level keys over the base (a child top-level key fully
13
+ * replaces the base value — no deep merge).
14
+ */
15
+ export function buildChildConfig(child) {
16
+ const base = createDefaultConfig(child.folder, "greenfield");
17
+ base.planner = {
18
+ ...base.planner,
19
+ model: DEEPSEEK_MODEL,
20
+ provider: DEEPSEEK_PROVIDER,
21
+ endpoint: DEEPSEEK_ENDPOINT,
22
+ };
23
+ base.generator = {
24
+ ...base.generator,
25
+ model: DEEPSEEK_MODEL,
26
+ provider: DEEPSEEK_PROVIDER,
27
+ endpoint: DEEPSEEK_ENDPOINT,
28
+ };
29
+ base.evaluator = {
30
+ ...base.evaluator,
31
+ model: DEEPSEEK_MODEL,
32
+ provider: DEEPSEEK_PROVIDER,
33
+ endpoint: DEEPSEEK_ENDPOINT,
34
+ };
35
+ const merged = { ...base, ...(child.config ?? {}) };
36
+ return BoberConfigSchema.parse(merged);
37
+ }
38
+ //# sourceMappingURL=child-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"child-config.js","sourceRoot":"","sources":["../../src/fleet/child-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI7E,uEAAuE;AAEvE,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAC1C,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AACrD,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAEzC,wEAAwE;AAExE;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAE7D,IAAI,CAAC,OAAO,GAAG;QACb,GAAG,IAAI,CAAC,OAAO;QACf,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IACF,IAAI,CAAC,SAAS,GAAG;QACf,GAAG,IAAI,CAAC,SAAS;QACjB,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IACF,IAAI,CAAC,SAAS,GAAG;QACf,GAAG,IAAI,CAAC,SAAS;QACjB,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,iBAAiB;QAC3B,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;IACpD,OAAO,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { FleetManifest, FleetChild } from "./manifest.js";
2
+ import type { ScaffoldResult } from "./scaffolder.js";
3
+ import type { ChildSpawnResult } from "./runner.js";
4
+ import type { ChildExecution } from "./types.js";
5
+ export interface Scaffolder {
6
+ scaffold(rootDir: string, child: FleetChild): Promise<ScaffoldResult>;
7
+ }
8
+ export interface Runner {
9
+ run(spec: {
10
+ cwd: string;
11
+ task: string;
12
+ timeoutMs?: number;
13
+ }): Promise<ChildSpawnResult>;
14
+ }
15
+ export declare class FleetCoordinator {
16
+ private readonly scaffolder;
17
+ private readonly runner;
18
+ constructor(deps?: {
19
+ scaffolder?: Scaffolder;
20
+ runner?: Runner;
21
+ });
22
+ execute(manifest: FleetManifest): Promise<ChildExecution[]>;
23
+ private runChild;
24
+ }
25
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/fleet/coordinator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvE;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACzF;AAID,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAKzD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YASnD,QAAQ;CAsBvB"}
@@ -0,0 +1,40 @@
1
+ import { mapBounded } from "../orchestrator/workflow/scheduler.js";
2
+ import { ChildScaffolder } from "./scaffolder.js";
3
+ import { ChildRunner } from "./runner.js";
4
+ // ── FleetCoordinator ──────────────────────────────────────────────────
5
+ export class FleetCoordinator {
6
+ scaffolder;
7
+ runner;
8
+ constructor(deps) {
9
+ this.scaffolder = deps?.scaffolder ?? new ChildScaffolder();
10
+ this.runner = deps?.runner ?? new ChildRunner();
11
+ }
12
+ async execute(manifest) {
13
+ return mapBounded(manifest.children, manifest.concurrency, (child) => this.runChild(manifest.rootDir, child));
14
+ }
15
+ // The never-reject thunk: EVERYTHING (incl. the awaits) is inside try/catch.
16
+ async runChild(rootDir, child) {
17
+ try {
18
+ const scaffold = await this.scaffolder.scaffold(rootDir, child);
19
+ if (scaffold.error) {
20
+ return { folder: child.folder, scaffold, spawn: undefined };
21
+ }
22
+ const spawn = await this.runner.run({ cwd: scaffold.absPath, task: child.task });
23
+ return { folder: child.folder, scaffold, spawn };
24
+ }
25
+ catch (e) {
26
+ return {
27
+ folder: child.folder,
28
+ scaffold: {
29
+ folder: child.folder,
30
+ absPath: "",
31
+ configWritten: false,
32
+ gitInitialized: false,
33
+ error: String(e),
34
+ },
35
+ spawn: undefined,
36
+ };
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/fleet/coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgB1C,yEAAyE;AAEzE,MAAM,OAAO,gBAAgB;IACV,UAAU,CAAa;IACvB,MAAM,CAAS;IAEhC,YAAY,IAAmD;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,IAAI,eAAe,EAAE,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAuB;QACnC,OAAO,UAAU,CACf,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,WAAW,EACpB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAClD,CAAC;IACJ,CAAC;IAED,6EAA6E;IACrE,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,KAAiB;QACvD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YAC9D,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACjF,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE;oBACR,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,OAAO,EAAE,EAAE;oBACX,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK;oBACrB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;iBACjB;gBACD,KAAK,EAAE,SAAS;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ import type { Command } from "commander";
2
+ import { FleetCoordinator } from "./coordinator.js";
3
+ import { OutcomeAggregator } from "./aggregator.js";
4
+ import { PortfolioReporter } from "./reporter.js";
5
+ import type { PortfolioReport } from "./reporter.js";
6
+ export type { PortfolioReport };
7
+ export interface FleetDeps {
8
+ coordinator?: FleetCoordinator;
9
+ aggregator?: OutcomeAggregator;
10
+ reporter?: PortfolioReporter;
11
+ }
12
+ export interface FleetOptions {
13
+ /** Override manifest.concurrency */
14
+ concurrency?: number;
15
+ /** Override manifest.rootDir */
16
+ rootDir?: string;
17
+ }
18
+ /**
19
+ * Load a fleet manifest, fail fast on missing credentials, fan-out all
20
+ * children through the coordinator, aggregate outcomes, build a portfolio
21
+ * report, write it to <rootDir>/.bober/fleet-report.json, and return it.
22
+ *
23
+ * Per-child failures are data in the report — this function only throws on
24
+ * batch-setup errors (bad manifest, missing credentials, report-write IO).
25
+ *
26
+ * @param manifestPath - Absolute or relative path to the fleet manifest JSON.
27
+ * @param options - Optional overrides for concurrency and rootDir.
28
+ * @param deps - Optional DI for testing (coordinator / aggregator / reporter).
29
+ */
30
+ export declare function runFleet(manifestPath: string, options?: FleetOptions, deps?: FleetDeps): Promise<PortfolioReport>;
31
+ /**
32
+ * Register `agent-bober fleet <manifest>` with the commander program.
33
+ *
34
+ * Exit codes:
35
+ * 0 — always on per-child failures (failures are reported, not fatal)
36
+ * 1 — only on batch-setup errors (bad manifest, missing credentials,
37
+ * report IO failure)
38
+ */
39
+ export declare function registerFleetCommand(program: Command): void;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fleet/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAKlD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,YAAY,EAAE,eAAe,EAAE,CAAC;AAIhC,MAAM,WAAW,SAAS;IACxB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAqCD,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAC5B,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,YAAY,EACtB,IAAI,CAAC,EAAE,SAAS,GACf,OAAO,CAAC,eAAe,CAAC,CA6B1B;AAID;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgC3D"}
@@ -0,0 +1,117 @@
1
+ // ── fleet/index.ts ────────────────────────────────────────────────────
2
+ //
3
+ // runFleet: orchestrates load → credential fail-fast → coordinate →
4
+ // aggregate → report → write, and always resolves with a
5
+ // PortfolioReport (per-child failures are data, not throws).
6
+ //
7
+ // registerFleetCommand: wires `agent-bober fleet <manifest>` into the
8
+ // commander program (mirrors registerWorktreeCommand pattern).
9
+ import chalk from "chalk";
10
+ import { load } from "./manifest.js";
11
+ import { buildChildConfig } from "./child-config.js";
12
+ import { FleetCoordinator } from "./coordinator.js";
13
+ import { OutcomeAggregator } from "./aggregator.js";
14
+ import { PortfolioReporter } from "./reporter.js";
15
+ import { validateApiKey } from "../providers/factory.js";
16
+ import { logger } from "../utils/logger.js";
17
+ // ── Credential fail-fast ──────────────────────────────────────────────
18
+ /**
19
+ * Validate DeepSeek credentials for every child BEFORE spawning anything.
20
+ * Reuses validateApiKey from providers/factory.ts for identical semantics.
21
+ * Throws on the first child whose effective config is missing a required key.
22
+ */
23
+ function validateManifestCredentials(manifest) {
24
+ for (const child of manifest.children) {
25
+ const cfg = buildChildConfig(child);
26
+ const roleCfgs = [
27
+ { role: "Planner", section: cfg.planner },
28
+ { role: "Generator", section: cfg.generator },
29
+ { role: "Evaluator", section: cfg.evaluator },
30
+ ];
31
+ for (const { role, section } of roleCfgs) {
32
+ if (!section)
33
+ continue;
34
+ const s = section;
35
+ const apiKey = typeof s.providerConfig?.["apiKey"] === "string"
36
+ ? s.providerConfig["apiKey"]
37
+ : undefined;
38
+ validateApiKey(s.provider ?? "anthropic", role, apiKey, s.endpoint ?? undefined);
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Load a fleet manifest, fail fast on missing credentials, fan-out all
44
+ * children through the coordinator, aggregate outcomes, build a portfolio
45
+ * report, write it to <rootDir>/.bober/fleet-report.json, and return it.
46
+ *
47
+ * Per-child failures are data in the report — this function only throws on
48
+ * batch-setup errors (bad manifest, missing credentials, report-write IO).
49
+ *
50
+ * @param manifestPath - Absolute or relative path to the fleet manifest JSON.
51
+ * @param options - Optional overrides for concurrency and rootDir.
52
+ * @param deps - Optional DI for testing (coordinator / aggregator / reporter).
53
+ */
54
+ export async function runFleet(manifestPath, options, deps) {
55
+ // 1. Load + validate manifest
56
+ const manifest = await load(manifestPath);
57
+ // 2. Apply options overrides (shallow copy to avoid mutating the parsed object)
58
+ const effectiveManifest = {
59
+ ...manifest,
60
+ ...(options?.concurrency !== undefined ? { concurrency: options.concurrency } : {}),
61
+ ...(options?.rootDir !== undefined ? { rootDir: options.rootDir } : {}),
62
+ };
63
+ // 3. Credential fail-fast BEFORE any spawn
64
+ validateManifestCredentials(effectiveManifest);
65
+ // 4. Execute → aggregate
66
+ const coordinator = deps?.coordinator ?? new FleetCoordinator();
67
+ const aggregator = deps?.aggregator ?? new OutcomeAggregator();
68
+ const reporter = deps?.reporter ?? new PortfolioReporter();
69
+ const executions = await coordinator.execute(effectiveManifest);
70
+ const outcomes = await Promise.all(executions.map((e) => aggregator.aggregate(e)));
71
+ // 5. Build + write report
72
+ const report = reporter.build(outcomes);
73
+ await reporter.write(effectiveManifest.rootDir, report);
74
+ return report;
75
+ }
76
+ // ── registerFleetCommand ──────────────────────────────────────────────
77
+ /**
78
+ * Register `agent-bober fleet <manifest>` with the commander program.
79
+ *
80
+ * Exit codes:
81
+ * 0 — always on per-child failures (failures are reported, not fatal)
82
+ * 1 — only on batch-setup errors (bad manifest, missing credentials,
83
+ * report IO failure)
84
+ */
85
+ export function registerFleetCommand(program) {
86
+ program
87
+ .command("fleet <manifest>")
88
+ .description("Run a fleet of agent-bober children from a manifest")
89
+ .option("--concurrency <n>", "Override manifest concurrency")
90
+ .option("--root <dir>", "Override manifest rootDir")
91
+ .action(async (manifest, opts) => {
92
+ try {
93
+ const report = await runFleet(manifest, {
94
+ concurrency: opts.concurrency ? Number(opts.concurrency) : undefined,
95
+ rootDir: opts.root,
96
+ });
97
+ console.log();
98
+ console.log(chalk.bold("═══ Fleet Summary ═══"));
99
+ console.log();
100
+ console.log(` Total: ${chalk.cyan(String(report.total))} children`);
101
+ console.log(` Completed: ${chalk.green(String(report.completed))}`);
102
+ if (report.failed > 0) {
103
+ console.log(` Failed: ${chalk.red(String(report.failed))}`);
104
+ }
105
+ if (report.other > 0) {
106
+ console.log(` Other: ${chalk.yellow(String(report.other))}`);
107
+ }
108
+ console.log();
109
+ process.exitCode = 0;
110
+ }
111
+ catch (err) {
112
+ logger.error(`Fleet failed: ${err instanceof Error ? err.message : String(err)}`);
113
+ process.exitCode = 1;
114
+ }
115
+ });
116
+ }
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fleet/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ export declare const FleetChildSchema: z.ZodObject<{
3
+ folder: z.ZodString;
4
+ task: z.ZodString;
5
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ folder: string;
8
+ task: string;
9
+ config?: Record<string, unknown> | undefined;
10
+ }, {
11
+ folder: string;
12
+ task: string;
13
+ config?: Record<string, unknown> | undefined;
14
+ }>;
15
+ export type FleetChild = z.infer<typeof FleetChildSchema>;
16
+ export declare const FleetManifestSchema: z.ZodObject<{
17
+ rootDir: z.ZodDefault<z.ZodString>;
18
+ concurrency: z.ZodDefault<z.ZodNumber>;
19
+ children: z.ZodArray<z.ZodObject<{
20
+ folder: z.ZodString;
21
+ task: z.ZodString;
22
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ folder: string;
25
+ task: string;
26
+ config?: Record<string, unknown> | undefined;
27
+ }, {
28
+ folder: string;
29
+ task: string;
30
+ config?: Record<string, unknown> | undefined;
31
+ }>, "many">;
32
+ }, "strip", z.ZodTypeAny, {
33
+ rootDir: string;
34
+ concurrency: number;
35
+ children: {
36
+ folder: string;
37
+ task: string;
38
+ config?: Record<string, unknown> | undefined;
39
+ }[];
40
+ }, {
41
+ children: {
42
+ folder: string;
43
+ task: string;
44
+ config?: Record<string, unknown> | undefined;
45
+ }[];
46
+ rootDir?: string | undefined;
47
+ concurrency?: number | undefined;
48
+ }>;
49
+ export type FleetManifest = z.infer<typeof FleetManifestSchema>;
50
+ export declare function load(manifestPath: string): Promise<FleetManifest>;
51
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/fleet/manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,wBAAsB,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsBvE"}
@@ -0,0 +1,32 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { z } from "zod";
3
+ // ── Schemas ──────────────────────────────────────────────────────────
4
+ export const FleetChildSchema = z.object({
5
+ folder: z.string().min(1),
6
+ task: z.string().min(1),
7
+ config: z.record(z.string(), z.unknown()).optional(),
8
+ });
9
+ export const FleetManifestSchema = z.object({
10
+ rootDir: z.string().default("."),
11
+ concurrency: z.number().int().min(1).default(3),
12
+ children: z.array(FleetChildSchema).min(1),
13
+ });
14
+ // ── Loader ───────────────────────────────────────────────────────────
15
+ export async function load(manifestPath) {
16
+ let raw;
17
+ try {
18
+ raw = await readFile(manifestPath, "utf-8");
19
+ }
20
+ catch (err) {
21
+ throw new Error(`Failed to read fleet manifest at "${manifestPath}": ${err.message}`, { cause: err });
22
+ }
23
+ let parsed;
24
+ try {
25
+ parsed = JSON.parse(raw);
26
+ }
27
+ catch (err) {
28
+ throw new Error(`Fleet manifest at "${manifestPath}" is not valid JSON: ${err.message}`, { cause: err });
29
+ }
30
+ return FleetManifestSchema.parse(parsed);
31
+ }
32
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/fleet/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wEAAwE;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3C,CAAC,CAAC;AAGH,wEAAwE;AAExE,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,YAAoB;IAC7C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,qCAAqC,YAAY,MAAO,GAAa,CAAC,OAAO,EAAE,EAC/E,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,sBAAsB,YAAY,wBAAyB,GAAa,CAAC,OAAO,EAAE,EAClF,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IAED,OAAO,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC"}