agent-bober 0.1.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 (212) hide show
  1. package/.claude-plugin/plugin.json +9 -0
  2. package/LICENSE +21 -0
  3. package/README.md +495 -0
  4. package/agents/bober-evaluator.md +323 -0
  5. package/agents/bober-generator.md +245 -0
  6. package/agents/bober-planner.md +248 -0
  7. package/dist/cli/commands/eval.d.ts +6 -0
  8. package/dist/cli/commands/eval.d.ts.map +1 -0
  9. package/dist/cli/commands/eval.js +129 -0
  10. package/dist/cli/commands/eval.js.map +1 -0
  11. package/dist/cli/commands/init.d.ts +5 -0
  12. package/dist/cli/commands/init.d.ts.map +1 -0
  13. package/dist/cli/commands/init.js +547 -0
  14. package/dist/cli/commands/init.js.map +1 -0
  15. package/dist/cli/commands/plan.d.ts +5 -0
  16. package/dist/cli/commands/plan.d.ts.map +1 -0
  17. package/dist/cli/commands/plan.js +87 -0
  18. package/dist/cli/commands/plan.js.map +1 -0
  19. package/dist/cli/commands/run.d.ts +5 -0
  20. package/dist/cli/commands/run.d.ts.map +1 -0
  21. package/dist/cli/commands/run.js +120 -0
  22. package/dist/cli/commands/run.js.map +1 -0
  23. package/dist/cli/commands/sprint.d.ts +6 -0
  24. package/dist/cli/commands/sprint.d.ts.map +1 -0
  25. package/dist/cli/commands/sprint.js +206 -0
  26. package/dist/cli/commands/sprint.js.map +1 -0
  27. package/dist/cli/index.d.ts +3 -0
  28. package/dist/cli/index.d.ts.map +1 -0
  29. package/dist/cli/index.js +124 -0
  30. package/dist/cli/index.js.map +1 -0
  31. package/dist/config/defaults.d.ts +15 -0
  32. package/dist/config/defaults.d.ts.map +1 -0
  33. package/dist/config/defaults.js +226 -0
  34. package/dist/config/defaults.js.map +1 -0
  35. package/dist/config/index.d.ts +4 -0
  36. package/dist/config/index.d.ts.map +1 -0
  37. package/dist/config/index.js +8 -0
  38. package/dist/config/index.js.map +1 -0
  39. package/dist/config/loader.d.ts +18 -0
  40. package/dist/config/loader.d.ts.map +1 -0
  41. package/dist/config/loader.js +189 -0
  42. package/dist/config/loader.js.map +1 -0
  43. package/dist/config/schema.d.ts +904 -0
  44. package/dist/config/schema.d.ts.map +1 -0
  45. package/dist/config/schema.js +181 -0
  46. package/dist/config/schema.js.map +1 -0
  47. package/dist/contracts/eval-result.d.ts +205 -0
  48. package/dist/contracts/eval-result.d.ts.map +1 -0
  49. package/dist/contracts/eval-result.js +87 -0
  50. package/dist/contracts/eval-result.js.map +1 -0
  51. package/dist/contracts/index.d.ts +4 -0
  52. package/dist/contracts/index.d.ts.map +1 -0
  53. package/dist/contracts/index.js +16 -0
  54. package/dist/contracts/index.js.map +1 -0
  55. package/dist/contracts/spec.d.ts +101 -0
  56. package/dist/contracts/spec.d.ts.map +1 -0
  57. package/dist/contracts/spec.js +51 -0
  58. package/dist/contracts/spec.js.map +1 -0
  59. package/dist/contracts/sprint-contract.d.ts +141 -0
  60. package/dist/contracts/sprint-contract.d.ts.map +1 -0
  61. package/dist/contracts/sprint-contract.js +80 -0
  62. package/dist/contracts/sprint-contract.js.map +1 -0
  63. package/dist/evaluators/builtin/api-check.d.ts +13 -0
  64. package/dist/evaluators/builtin/api-check.d.ts.map +1 -0
  65. package/dist/evaluators/builtin/api-check.js +152 -0
  66. package/dist/evaluators/builtin/api-check.js.map +1 -0
  67. package/dist/evaluators/builtin/build-check.d.ts +17 -0
  68. package/dist/evaluators/builtin/build-check.d.ts.map +1 -0
  69. package/dist/evaluators/builtin/build-check.js +155 -0
  70. package/dist/evaluators/builtin/build-check.js.map +1 -0
  71. package/dist/evaluators/builtin/command-runner.d.ts +26 -0
  72. package/dist/evaluators/builtin/command-runner.d.ts.map +1 -0
  73. package/dist/evaluators/builtin/command-runner.js +114 -0
  74. package/dist/evaluators/builtin/command-runner.js.map +1 -0
  75. package/dist/evaluators/builtin/lint.d.ts +17 -0
  76. package/dist/evaluators/builtin/lint.d.ts.map +1 -0
  77. package/dist/evaluators/builtin/lint.js +264 -0
  78. package/dist/evaluators/builtin/lint.js.map +1 -0
  79. package/dist/evaluators/builtin/playwright.d.ts +16 -0
  80. package/dist/evaluators/builtin/playwright.d.ts.map +1 -0
  81. package/dist/evaluators/builtin/playwright.js +238 -0
  82. package/dist/evaluators/builtin/playwright.js.map +1 -0
  83. package/dist/evaluators/builtin/typescript-check.d.ts +12 -0
  84. package/dist/evaluators/builtin/typescript-check.d.ts.map +1 -0
  85. package/dist/evaluators/builtin/typescript-check.js +155 -0
  86. package/dist/evaluators/builtin/typescript-check.js.map +1 -0
  87. package/dist/evaluators/builtin/unit-test.d.ts +18 -0
  88. package/dist/evaluators/builtin/unit-test.d.ts.map +1 -0
  89. package/dist/evaluators/builtin/unit-test.js +279 -0
  90. package/dist/evaluators/builtin/unit-test.js.map +1 -0
  91. package/dist/evaluators/index.d.ts +11 -0
  92. package/dist/evaluators/index.d.ts.map +1 -0
  93. package/dist/evaluators/index.js +13 -0
  94. package/dist/evaluators/index.js.map +1 -0
  95. package/dist/evaluators/plugin-interface.d.ts +50 -0
  96. package/dist/evaluators/plugin-interface.d.ts.map +1 -0
  97. package/dist/evaluators/plugin-interface.js +2 -0
  98. package/dist/evaluators/plugin-interface.js.map +1 -0
  99. package/dist/evaluators/plugin-loader.d.ts +18 -0
  100. package/dist/evaluators/plugin-loader.d.ts.map +1 -0
  101. package/dist/evaluators/plugin-loader.js +107 -0
  102. package/dist/evaluators/plugin-loader.js.map +1 -0
  103. package/dist/evaluators/registry.d.ts +78 -0
  104. package/dist/evaluators/registry.d.ts.map +1 -0
  105. package/dist/evaluators/registry.js +238 -0
  106. package/dist/evaluators/registry.js.map +1 -0
  107. package/dist/index.d.ts +17 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +22 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/orchestrator/context-handoff.d.ts +543 -0
  112. package/dist/orchestrator/context-handoff.d.ts.map +1 -0
  113. package/dist/orchestrator/context-handoff.js +133 -0
  114. package/dist/orchestrator/context-handoff.js.map +1 -0
  115. package/dist/orchestrator/evaluator-agent.d.ts +15 -0
  116. package/dist/orchestrator/evaluator-agent.d.ts.map +1 -0
  117. package/dist/orchestrator/evaluator-agent.js +233 -0
  118. package/dist/orchestrator/evaluator-agent.js.map +1 -0
  119. package/dist/orchestrator/generator-agent.d.ts +16 -0
  120. package/dist/orchestrator/generator-agent.d.ts.map +1 -0
  121. package/dist/orchestrator/generator-agent.js +147 -0
  122. package/dist/orchestrator/generator-agent.js.map +1 -0
  123. package/dist/orchestrator/pipeline.d.ts +24 -0
  124. package/dist/orchestrator/pipeline.d.ts.map +1 -0
  125. package/dist/orchestrator/pipeline.js +290 -0
  126. package/dist/orchestrator/pipeline.js.map +1 -0
  127. package/dist/orchestrator/planner-agent.d.ts +10 -0
  128. package/dist/orchestrator/planner-agent.d.ts.map +1 -0
  129. package/dist/orchestrator/planner-agent.js +187 -0
  130. package/dist/orchestrator/planner-agent.js.map +1 -0
  131. package/dist/state/helpers.d.ts +5 -0
  132. package/dist/state/helpers.d.ts.map +1 -0
  133. package/dist/state/helpers.js +8 -0
  134. package/dist/state/helpers.js.map +1 -0
  135. package/dist/state/history.d.ts +39 -0
  136. package/dist/state/history.d.ts.map +1 -0
  137. package/dist/state/history.js +162 -0
  138. package/dist/state/history.js.map +1 -0
  139. package/dist/state/index.d.ts +8 -0
  140. package/dist/state/index.d.ts.map +1 -0
  141. package/dist/state/index.js +22 -0
  142. package/dist/state/index.js.map +1 -0
  143. package/dist/state/plan-state.d.ts +21 -0
  144. package/dist/state/plan-state.d.ts.map +1 -0
  145. package/dist/state/plan-state.js +108 -0
  146. package/dist/state/plan-state.js.map +1 -0
  147. package/dist/state/sprint-state.d.ts +20 -0
  148. package/dist/state/sprint-state.d.ts.map +1 -0
  149. package/dist/state/sprint-state.js +98 -0
  150. package/dist/state/sprint-state.js.map +1 -0
  151. package/dist/utils/fs.d.ts +31 -0
  152. package/dist/utils/fs.d.ts.map +1 -0
  153. package/dist/utils/fs.js +67 -0
  154. package/dist/utils/fs.js.map +1 -0
  155. package/dist/utils/git.d.ts +35 -0
  156. package/dist/utils/git.d.ts.map +1 -0
  157. package/dist/utils/git.js +84 -0
  158. package/dist/utils/git.js.map +1 -0
  159. package/dist/utils/index.d.ts +4 -0
  160. package/dist/utils/index.d.ts.map +1 -0
  161. package/dist/utils/index.js +4 -0
  162. package/dist/utils/index.js.map +1 -0
  163. package/dist/utils/logger.d.ts +45 -0
  164. package/dist/utils/logger.d.ts.map +1 -0
  165. package/dist/utils/logger.js +73 -0
  166. package/dist/utils/logger.js.map +1 -0
  167. package/hooks/hooks.json +10 -0
  168. package/package.json +67 -0
  169. package/scripts/detect-stack.sh +287 -0
  170. package/scripts/init-project.sh +206 -0
  171. package/scripts/run-eval.sh +175 -0
  172. package/skills/bober.anchor/SKILL.md +365 -0
  173. package/skills/bober.anchor/references/anchor-guide.md +567 -0
  174. package/skills/bober.brownfield/SKILL.md +422 -0
  175. package/skills/bober.brownfield/references/codebase-analysis.md +304 -0
  176. package/skills/bober.eval/SKILL.md +235 -0
  177. package/skills/bober.eval/references/eval-strategies.md +407 -0
  178. package/skills/bober.eval/references/feedback-format.md +182 -0
  179. package/skills/bober.plan/SKILL.md +244 -0
  180. package/skills/bober.plan/references/clarification-guide.md +124 -0
  181. package/skills/bober.plan/references/spec-schema.md +253 -0
  182. package/skills/bober.react/SKILL.md +330 -0
  183. package/skills/bober.react/references/react-scaffold.md +344 -0
  184. package/skills/bober.run/SKILL.md +303 -0
  185. package/skills/bober.solidity/SKILL.md +416 -0
  186. package/skills/bober.solidity/references/solidity-guide.md +487 -0
  187. package/skills/bober.sprint/SKILL.md +280 -0
  188. package/skills/bober.sprint/references/contract-schema.md +251 -0
  189. package/templates/base/CLAUDE.md +20 -0
  190. package/templates/base/bober.config.json +35 -0
  191. package/templates/brownfield/CLAUDE.md +34 -0
  192. package/templates/brownfield/bober.config.json +37 -0
  193. package/templates/presets/anchor/CLAUDE.md +163 -0
  194. package/templates/presets/anchor/bober.config.json +9 -0
  195. package/templates/presets/api-node/CLAUDE.md +153 -0
  196. package/templates/presets/api-node/bober.config.json +10 -0
  197. package/templates/presets/nextjs/CLAUDE.md +82 -0
  198. package/templates/presets/nextjs/bober.config.json +14 -0
  199. package/templates/presets/python-api/CLAUDE.md +202 -0
  200. package/templates/presets/python-api/bober.config.json +9 -0
  201. package/templates/presets/react-vite/CLAUDE.md +71 -0
  202. package/templates/presets/react-vite/bober.config.json +53 -0
  203. package/templates/presets/react-vite/scaffold/package.json +45 -0
  204. package/templates/presets/react-vite/scaffold/server/index.ts +38 -0
  205. package/templates/presets/react-vite/scaffold/server/tsconfig.json +24 -0
  206. package/templates/presets/react-vite/scaffold/src/App.tsx +37 -0
  207. package/templates/presets/react-vite/scaffold/src/index.html +12 -0
  208. package/templates/presets/react-vite/scaffold/src/main.tsx +12 -0
  209. package/templates/presets/react-vite/scaffold/tsconfig.json +27 -0
  210. package/templates/presets/react-vite/scaffold/vite.config.ts +34 -0
  211. package/templates/presets/solidity/CLAUDE.md +106 -0
  212. package/templates/presets/solidity/bober.config.json +9 -0
@@ -0,0 +1,543 @@
1
+ import { z } from "zod";
2
+ import { type PlanSpec } from "../contracts/spec.js";
3
+ import { type SprintContract } from "../contracts/sprint-contract.js";
4
+ export declare const AgentRoleSchema: z.ZodEnum<["planner", "generator", "evaluator", "human"]>;
5
+ export type AgentRole = z.infer<typeof AgentRoleSchema>;
6
+ export declare const DecisionSchema: z.ZodObject<{
7
+ timestamp: z.ZodString;
8
+ description: z.ZodString;
9
+ rationale: z.ZodString;
10
+ madeBy: z.ZodEnum<["planner", "generator", "evaluator", "human"]>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ description: string;
13
+ timestamp: string;
14
+ rationale: string;
15
+ madeBy: "planner" | "generator" | "evaluator" | "human";
16
+ }, {
17
+ description: string;
18
+ timestamp: string;
19
+ rationale: string;
20
+ madeBy: "planner" | "generator" | "evaluator" | "human";
21
+ }>;
22
+ export type Decision = z.infer<typeof DecisionSchema>;
23
+ export declare const ProjectContextSchema: z.ZodObject<{
24
+ name: z.ZodString;
25
+ type: z.ZodString;
26
+ techStack: z.ZodArray<z.ZodString, "many">;
27
+ entryPoints: z.ZodArray<z.ZodString, "many">;
28
+ currentBranch: z.ZodString;
29
+ }, "strip", z.ZodTypeAny, {
30
+ name: string;
31
+ type: string;
32
+ techStack: string[];
33
+ entryPoints: string[];
34
+ currentBranch: string;
35
+ }, {
36
+ name: string;
37
+ type: string;
38
+ techStack: string[];
39
+ entryPoints: string[];
40
+ currentBranch: string;
41
+ }>;
42
+ export type ProjectContext = z.infer<typeof ProjectContextSchema>;
43
+ export declare const ContextHandoffSchema: z.ZodObject<{
44
+ timestamp: z.ZodString;
45
+ from: z.ZodEnum<["planner", "generator", "evaluator", "human"]>;
46
+ to: z.ZodEnum<["planner", "generator", "evaluator", "human"]>;
47
+ projectContext: z.ZodObject<{
48
+ name: z.ZodString;
49
+ type: z.ZodString;
50
+ techStack: z.ZodArray<z.ZodString, "many">;
51
+ entryPoints: z.ZodArray<z.ZodString, "many">;
52
+ currentBranch: z.ZodString;
53
+ }, "strip", z.ZodTypeAny, {
54
+ name: string;
55
+ type: string;
56
+ techStack: string[];
57
+ entryPoints: string[];
58
+ currentBranch: string;
59
+ }, {
60
+ name: string;
61
+ type: string;
62
+ techStack: string[];
63
+ entryPoints: string[];
64
+ currentBranch: string;
65
+ }>;
66
+ spec: z.ZodObject<{
67
+ id: z.ZodString;
68
+ title: z.ZodString;
69
+ description: z.ZodString;
70
+ projectType: z.ZodString;
71
+ techStack: z.ZodArray<z.ZodString, "many">;
72
+ features: z.ZodArray<z.ZodObject<{
73
+ id: z.ZodString;
74
+ title: z.ZodString;
75
+ description: z.ZodString;
76
+ priority: z.ZodEnum<["must", "should", "could"]>;
77
+ estimatedSprints: z.ZodNumber;
78
+ acceptanceCriteria: z.ZodArray<z.ZodString, "many">;
79
+ }, "strip", z.ZodTypeAny, {
80
+ description: string;
81
+ id: string;
82
+ title: string;
83
+ priority: "must" | "should" | "could";
84
+ estimatedSprints: number;
85
+ acceptanceCriteria: string[];
86
+ }, {
87
+ description: string;
88
+ id: string;
89
+ title: string;
90
+ priority: "must" | "should" | "could";
91
+ estimatedSprints: number;
92
+ acceptanceCriteria: string[];
93
+ }>, "many">;
94
+ nonFunctional: z.ZodArray<z.ZodString, "many">;
95
+ constraints: z.ZodArray<z.ZodString, "many">;
96
+ createdAt: z.ZodString;
97
+ updatedAt: z.ZodString;
98
+ }, "strip", z.ZodTypeAny, {
99
+ description: string;
100
+ id: string;
101
+ title: string;
102
+ projectType: string;
103
+ techStack: string[];
104
+ features: {
105
+ description: string;
106
+ id: string;
107
+ title: string;
108
+ priority: "must" | "should" | "could";
109
+ estimatedSprints: number;
110
+ acceptanceCriteria: string[];
111
+ }[];
112
+ nonFunctional: string[];
113
+ constraints: string[];
114
+ createdAt: string;
115
+ updatedAt: string;
116
+ }, {
117
+ description: string;
118
+ id: string;
119
+ title: string;
120
+ projectType: string;
121
+ techStack: string[];
122
+ features: {
123
+ description: string;
124
+ id: string;
125
+ title: string;
126
+ priority: "must" | "should" | "could";
127
+ estimatedSprints: number;
128
+ acceptanceCriteria: string[];
129
+ }[];
130
+ nonFunctional: string[];
131
+ constraints: string[];
132
+ createdAt: string;
133
+ updatedAt: string;
134
+ }>;
135
+ currentContract: z.ZodOptional<z.ZodObject<{
136
+ id: z.ZodString;
137
+ feature: z.ZodString;
138
+ description: z.ZodString;
139
+ successCriteria: z.ZodArray<z.ZodObject<{
140
+ id: z.ZodString;
141
+ description: z.ZodString;
142
+ verificationMethod: z.ZodString;
143
+ passed: z.ZodBoolean;
144
+ notes: z.ZodOptional<z.ZodString>;
145
+ }, "strip", z.ZodTypeAny, {
146
+ description: string;
147
+ id: string;
148
+ verificationMethod: string;
149
+ passed: boolean;
150
+ notes?: string | undefined;
151
+ }, {
152
+ description: string;
153
+ id: string;
154
+ verificationMethod: string;
155
+ passed: boolean;
156
+ notes?: string | undefined;
157
+ }>, "many">;
158
+ expectedChanges: z.ZodArray<z.ZodObject<{
159
+ path: z.ZodString;
160
+ action: z.ZodEnum<["create", "modify", "delete"]>;
161
+ description: z.ZodString;
162
+ }, "strip", z.ZodTypeAny, {
163
+ description: string;
164
+ path: string;
165
+ action: "create" | "modify" | "delete";
166
+ }, {
167
+ description: string;
168
+ path: string;
169
+ action: "create" | "modify" | "delete";
170
+ }>, "many">;
171
+ dependsOn: z.ZodArray<z.ZodString, "many">;
172
+ status: z.ZodEnum<["proposed", "negotiating", "agreed", "in-progress", "evaluating", "passed", "failed", "needs-rework"]>;
173
+ evalResults: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
174
+ generatorNotes: z.ZodOptional<z.ZodString>;
175
+ evaluatorFeedback: z.ZodOptional<z.ZodString>;
176
+ startedAt: z.ZodOptional<z.ZodString>;
177
+ completedAt: z.ZodOptional<z.ZodString>;
178
+ }, "strip", z.ZodTypeAny, {
179
+ description: string;
180
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
181
+ id: string;
182
+ feature: string;
183
+ successCriteria: {
184
+ description: string;
185
+ id: string;
186
+ verificationMethod: string;
187
+ passed: boolean;
188
+ notes?: string | undefined;
189
+ }[];
190
+ expectedChanges: {
191
+ description: string;
192
+ path: string;
193
+ action: "create" | "modify" | "delete";
194
+ }[];
195
+ dependsOn: string[];
196
+ evalResults?: unknown[] | undefined;
197
+ generatorNotes?: string | undefined;
198
+ evaluatorFeedback?: string | undefined;
199
+ startedAt?: string | undefined;
200
+ completedAt?: string | undefined;
201
+ }, {
202
+ description: string;
203
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
204
+ id: string;
205
+ feature: string;
206
+ successCriteria: {
207
+ description: string;
208
+ id: string;
209
+ verificationMethod: string;
210
+ passed: boolean;
211
+ notes?: string | undefined;
212
+ }[];
213
+ expectedChanges: {
214
+ description: string;
215
+ path: string;
216
+ action: "create" | "modify" | "delete";
217
+ }[];
218
+ dependsOn: string[];
219
+ evalResults?: unknown[] | undefined;
220
+ generatorNotes?: string | undefined;
221
+ evaluatorFeedback?: string | undefined;
222
+ startedAt?: string | undefined;
223
+ completedAt?: string | undefined;
224
+ }>>;
225
+ sprintHistory: z.ZodArray<z.ZodObject<{
226
+ id: z.ZodString;
227
+ feature: z.ZodString;
228
+ description: z.ZodString;
229
+ successCriteria: z.ZodArray<z.ZodObject<{
230
+ id: z.ZodString;
231
+ description: z.ZodString;
232
+ verificationMethod: z.ZodString;
233
+ passed: z.ZodBoolean;
234
+ notes: z.ZodOptional<z.ZodString>;
235
+ }, "strip", z.ZodTypeAny, {
236
+ description: string;
237
+ id: string;
238
+ verificationMethod: string;
239
+ passed: boolean;
240
+ notes?: string | undefined;
241
+ }, {
242
+ description: string;
243
+ id: string;
244
+ verificationMethod: string;
245
+ passed: boolean;
246
+ notes?: string | undefined;
247
+ }>, "many">;
248
+ expectedChanges: z.ZodArray<z.ZodObject<{
249
+ path: z.ZodString;
250
+ action: z.ZodEnum<["create", "modify", "delete"]>;
251
+ description: z.ZodString;
252
+ }, "strip", z.ZodTypeAny, {
253
+ description: string;
254
+ path: string;
255
+ action: "create" | "modify" | "delete";
256
+ }, {
257
+ description: string;
258
+ path: string;
259
+ action: "create" | "modify" | "delete";
260
+ }>, "many">;
261
+ dependsOn: z.ZodArray<z.ZodString, "many">;
262
+ status: z.ZodEnum<["proposed", "negotiating", "agreed", "in-progress", "evaluating", "passed", "failed", "needs-rework"]>;
263
+ evalResults: z.ZodOptional<z.ZodArray<z.ZodUnknown, "many">>;
264
+ generatorNotes: z.ZodOptional<z.ZodString>;
265
+ evaluatorFeedback: z.ZodOptional<z.ZodString>;
266
+ startedAt: z.ZodOptional<z.ZodString>;
267
+ completedAt: z.ZodOptional<z.ZodString>;
268
+ }, "strip", z.ZodTypeAny, {
269
+ description: string;
270
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
271
+ id: string;
272
+ feature: string;
273
+ successCriteria: {
274
+ description: string;
275
+ id: string;
276
+ verificationMethod: string;
277
+ passed: boolean;
278
+ notes?: string | undefined;
279
+ }[];
280
+ expectedChanges: {
281
+ description: string;
282
+ path: string;
283
+ action: "create" | "modify" | "delete";
284
+ }[];
285
+ dependsOn: string[];
286
+ evalResults?: unknown[] | undefined;
287
+ generatorNotes?: string | undefined;
288
+ evaluatorFeedback?: string | undefined;
289
+ startedAt?: string | undefined;
290
+ completedAt?: string | undefined;
291
+ }, {
292
+ description: string;
293
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
294
+ id: string;
295
+ feature: string;
296
+ successCriteria: {
297
+ description: string;
298
+ id: string;
299
+ verificationMethod: string;
300
+ passed: boolean;
301
+ notes?: string | undefined;
302
+ }[];
303
+ expectedChanges: {
304
+ description: string;
305
+ path: string;
306
+ action: "create" | "modify" | "delete";
307
+ }[];
308
+ dependsOn: string[];
309
+ evalResults?: unknown[] | undefined;
310
+ generatorNotes?: string | undefined;
311
+ evaluatorFeedback?: string | undefined;
312
+ startedAt?: string | undefined;
313
+ completedAt?: string | undefined;
314
+ }>, "many">;
315
+ instructions: z.ZodString;
316
+ changedFiles: z.ZodArray<z.ZodString, "many">;
317
+ decisions: z.ZodArray<z.ZodObject<{
318
+ timestamp: z.ZodString;
319
+ description: z.ZodString;
320
+ rationale: z.ZodString;
321
+ madeBy: z.ZodEnum<["planner", "generator", "evaluator", "human"]>;
322
+ }, "strip", z.ZodTypeAny, {
323
+ description: string;
324
+ timestamp: string;
325
+ rationale: string;
326
+ madeBy: "planner" | "generator" | "evaluator" | "human";
327
+ }, {
328
+ description: string;
329
+ timestamp: string;
330
+ rationale: string;
331
+ madeBy: "planner" | "generator" | "evaluator" | "human";
332
+ }>, "many">;
333
+ issues: z.ZodArray<z.ZodString, "many">;
334
+ }, "strip", z.ZodTypeAny, {
335
+ issues: string[];
336
+ timestamp: string;
337
+ from: "planner" | "generator" | "evaluator" | "human";
338
+ to: "planner" | "generator" | "evaluator" | "human";
339
+ projectContext: {
340
+ name: string;
341
+ type: string;
342
+ techStack: string[];
343
+ entryPoints: string[];
344
+ currentBranch: string;
345
+ };
346
+ spec: {
347
+ description: string;
348
+ id: string;
349
+ title: string;
350
+ projectType: string;
351
+ techStack: string[];
352
+ features: {
353
+ description: string;
354
+ id: string;
355
+ title: string;
356
+ priority: "must" | "should" | "could";
357
+ estimatedSprints: number;
358
+ acceptanceCriteria: string[];
359
+ }[];
360
+ nonFunctional: string[];
361
+ constraints: string[];
362
+ createdAt: string;
363
+ updatedAt: string;
364
+ };
365
+ sprintHistory: {
366
+ description: string;
367
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
368
+ id: string;
369
+ feature: string;
370
+ successCriteria: {
371
+ description: string;
372
+ id: string;
373
+ verificationMethod: string;
374
+ passed: boolean;
375
+ notes?: string | undefined;
376
+ }[];
377
+ expectedChanges: {
378
+ description: string;
379
+ path: string;
380
+ action: "create" | "modify" | "delete";
381
+ }[];
382
+ dependsOn: string[];
383
+ evalResults?: unknown[] | undefined;
384
+ generatorNotes?: string | undefined;
385
+ evaluatorFeedback?: string | undefined;
386
+ startedAt?: string | undefined;
387
+ completedAt?: string | undefined;
388
+ }[];
389
+ instructions: string;
390
+ changedFiles: string[];
391
+ decisions: {
392
+ description: string;
393
+ timestamp: string;
394
+ rationale: string;
395
+ madeBy: "planner" | "generator" | "evaluator" | "human";
396
+ }[];
397
+ currentContract?: {
398
+ description: string;
399
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
400
+ id: string;
401
+ feature: string;
402
+ successCriteria: {
403
+ description: string;
404
+ id: string;
405
+ verificationMethod: string;
406
+ passed: boolean;
407
+ notes?: string | undefined;
408
+ }[];
409
+ expectedChanges: {
410
+ description: string;
411
+ path: string;
412
+ action: "create" | "modify" | "delete";
413
+ }[];
414
+ dependsOn: string[];
415
+ evalResults?: unknown[] | undefined;
416
+ generatorNotes?: string | undefined;
417
+ evaluatorFeedback?: string | undefined;
418
+ startedAt?: string | undefined;
419
+ completedAt?: string | undefined;
420
+ } | undefined;
421
+ }, {
422
+ issues: string[];
423
+ timestamp: string;
424
+ from: "planner" | "generator" | "evaluator" | "human";
425
+ to: "planner" | "generator" | "evaluator" | "human";
426
+ projectContext: {
427
+ name: string;
428
+ type: string;
429
+ techStack: string[];
430
+ entryPoints: string[];
431
+ currentBranch: string;
432
+ };
433
+ spec: {
434
+ description: string;
435
+ id: string;
436
+ title: string;
437
+ projectType: string;
438
+ techStack: string[];
439
+ features: {
440
+ description: string;
441
+ id: string;
442
+ title: string;
443
+ priority: "must" | "should" | "could";
444
+ estimatedSprints: number;
445
+ acceptanceCriteria: string[];
446
+ }[];
447
+ nonFunctional: string[];
448
+ constraints: string[];
449
+ createdAt: string;
450
+ updatedAt: string;
451
+ };
452
+ sprintHistory: {
453
+ description: string;
454
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
455
+ id: string;
456
+ feature: string;
457
+ successCriteria: {
458
+ description: string;
459
+ id: string;
460
+ verificationMethod: string;
461
+ passed: boolean;
462
+ notes?: string | undefined;
463
+ }[];
464
+ expectedChanges: {
465
+ description: string;
466
+ path: string;
467
+ action: "create" | "modify" | "delete";
468
+ }[];
469
+ dependsOn: string[];
470
+ evalResults?: unknown[] | undefined;
471
+ generatorNotes?: string | undefined;
472
+ evaluatorFeedback?: string | undefined;
473
+ startedAt?: string | undefined;
474
+ completedAt?: string | undefined;
475
+ }[];
476
+ instructions: string;
477
+ changedFiles: string[];
478
+ decisions: {
479
+ description: string;
480
+ timestamp: string;
481
+ rationale: string;
482
+ madeBy: "planner" | "generator" | "evaluator" | "human";
483
+ }[];
484
+ currentContract?: {
485
+ description: string;
486
+ status: "passed" | "proposed" | "negotiating" | "agreed" | "in-progress" | "evaluating" | "failed" | "needs-rework";
487
+ id: string;
488
+ feature: string;
489
+ successCriteria: {
490
+ description: string;
491
+ id: string;
492
+ verificationMethod: string;
493
+ passed: boolean;
494
+ notes?: string | undefined;
495
+ }[];
496
+ expectedChanges: {
497
+ description: string;
498
+ path: string;
499
+ action: "create" | "modify" | "delete";
500
+ }[];
501
+ dependsOn: string[];
502
+ evalResults?: unknown[] | undefined;
503
+ generatorNotes?: string | undefined;
504
+ evaluatorFeedback?: string | undefined;
505
+ startedAt?: string | undefined;
506
+ completedAt?: string | undefined;
507
+ } | undefined;
508
+ }>;
509
+ export type ContextHandoff = z.infer<typeof ContextHandoffSchema>;
510
+ /**
511
+ * Create a new context handoff document.
512
+ */
513
+ export declare function createHandoff(params: {
514
+ from: AgentRole;
515
+ to: AgentRole;
516
+ projectContext: ProjectContext;
517
+ spec: PlanSpec;
518
+ currentContract?: SprintContract;
519
+ sprintHistory: SprintContract[];
520
+ instructions: string;
521
+ changedFiles?: string[];
522
+ decisions?: Decision[];
523
+ issues?: string[];
524
+ }): ContextHandoff;
525
+ /**
526
+ * Serialize a handoff document to a JSON string.
527
+ */
528
+ export declare function serializeHandoff(handoff: ContextHandoff): string;
529
+ /**
530
+ * Deserialize and validate a JSON string into a ContextHandoff.
531
+ * Throws on invalid input.
532
+ */
533
+ export declare function deserializeHandoff(json: string): ContextHandoff;
534
+ /**
535
+ * Summarize older sprints in the handoff to keep document size manageable.
536
+ *
537
+ * Keeps the `keepRecent` most recent sprints in full detail,
538
+ * and replaces older sprints with minimal summary contracts.
539
+ *
540
+ * Returns a new handoff with compacted sprint history.
541
+ */
542
+ export declare function summarizeOlderSprints(handoff: ContextHandoff, keepRecent: number): ContextHandoff;
543
+ //# sourceMappingURL=context-handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-handoff.d.ts","sourceRoot":"","sources":["../../src/orchestrator/context-handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,eAAe,2DAK1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAIxD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAItD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAwBlE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,SAAS,CAAC;IACd,cAAc,EAAE,cAAc,CAAC;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,cAAc,CAcjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAoB/D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,cAAc,CAiChB"}
@@ -0,0 +1,133 @@
1
+ import { z } from "zod";
2
+ import { PlanSpecSchema } from "../contracts/spec.js";
3
+ import { SprintContractSchema, } from "../contracts/sprint-contract.js";
4
+ // ── Enums ───────────────────────────────────────────────────────────
5
+ export const AgentRoleSchema = z.enum([
6
+ "planner",
7
+ "generator",
8
+ "evaluator",
9
+ "human",
10
+ ]);
11
+ // ── Decision ────────────────────────────────────────────────────────
12
+ export const DecisionSchema = z.object({
13
+ timestamp: z.string().datetime(),
14
+ description: z.string().min(1),
15
+ rationale: z.string().min(1),
16
+ madeBy: AgentRoleSchema,
17
+ });
18
+ // ── Project Context ─────────────────────────────────────────────────
19
+ export const ProjectContextSchema = z.object({
20
+ name: z.string().min(1),
21
+ type: z.string().min(1),
22
+ techStack: z.array(z.string()),
23
+ entryPoints: z.array(z.string()),
24
+ currentBranch: z.string(),
25
+ });
26
+ // ── Context Handoff ─────────────────────────────────────────────────
27
+ export const ContextHandoffSchema = z.object({
28
+ timestamp: z.string().datetime(),
29
+ from: AgentRoleSchema,
30
+ to: AgentRoleSchema,
31
+ projectContext: ProjectContextSchema,
32
+ spec: PlanSpecSchema,
33
+ currentContract: SprintContractSchema.optional(),
34
+ sprintHistory: z.array(SprintContractSchema),
35
+ instructions: z.string(),
36
+ changedFiles: z.array(z.string()),
37
+ decisions: z.array(DecisionSchema),
38
+ issues: z.array(z.string()),
39
+ });
40
+ function summarizeSprint(contract) {
41
+ return {
42
+ id: contract.id,
43
+ feature: contract.feature,
44
+ status: contract.status,
45
+ startedAt: contract.startedAt,
46
+ completedAt: contract.completedAt,
47
+ };
48
+ }
49
+ // ── Helpers ─────────────────────────────────────────────────────────
50
+ /**
51
+ * Create a new context handoff document.
52
+ */
53
+ export function createHandoff(params) {
54
+ return {
55
+ timestamp: new Date().toISOString(),
56
+ from: params.from,
57
+ to: params.to,
58
+ projectContext: params.projectContext,
59
+ spec: params.spec,
60
+ currentContract: params.currentContract,
61
+ sprintHistory: params.sprintHistory,
62
+ instructions: params.instructions,
63
+ changedFiles: params.changedFiles ?? [],
64
+ decisions: params.decisions ?? [],
65
+ issues: params.issues ?? [],
66
+ };
67
+ }
68
+ /**
69
+ * Serialize a handoff document to a JSON string.
70
+ */
71
+ export function serializeHandoff(handoff) {
72
+ return JSON.stringify(handoff, null, 2);
73
+ }
74
+ /**
75
+ * Deserialize and validate a JSON string into a ContextHandoff.
76
+ * Throws on invalid input.
77
+ */
78
+ export function deserializeHandoff(json) {
79
+ let parsed;
80
+ try {
81
+ parsed = JSON.parse(json);
82
+ }
83
+ catch (err) {
84
+ throw new Error(`Failed to parse handoff JSON: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
85
+ }
86
+ const result = ContextHandoffSchema.safeParse(parsed);
87
+ if (!result.success) {
88
+ const issues = result.error.issues
89
+ .map((i) => ` - ${i.path.join(".")}: ${i.message}`)
90
+ .join("\n");
91
+ throw new Error(`Invalid handoff document:\n${issues}`);
92
+ }
93
+ return result.data;
94
+ }
95
+ /**
96
+ * Summarize older sprints in the handoff to keep document size manageable.
97
+ *
98
+ * Keeps the `keepRecent` most recent sprints in full detail,
99
+ * and replaces older sprints with minimal summary contracts.
100
+ *
101
+ * Returns a new handoff with compacted sprint history.
102
+ */
103
+ export function summarizeOlderSprints(handoff, keepRecent) {
104
+ const history = handoff.sprintHistory;
105
+ if (history.length <= keepRecent) {
106
+ return handoff;
107
+ }
108
+ const cutoff = history.length - keepRecent;
109
+ const olderSprints = history.slice(0, cutoff);
110
+ const recentSprints = history.slice(cutoff);
111
+ // Build summary entries as minimal SprintContract objects
112
+ const summarized = olderSprints.map((contract) => {
113
+ const summary = summarizeSprint(contract);
114
+ return {
115
+ id: summary.id,
116
+ feature: summary.feature,
117
+ description: `[Summarized] ${contract.description}`,
118
+ successCriteria: [],
119
+ expectedChanges: [],
120
+ dependsOn: [],
121
+ status: contract.status,
122
+ generatorNotes: undefined,
123
+ evaluatorFeedback: undefined,
124
+ startedAt: summary.startedAt,
125
+ completedAt: summary.completedAt,
126
+ };
127
+ });
128
+ return {
129
+ ...handoff,
130
+ sprintHistory: [...summarized, ...recentSprints],
131
+ };
132
+ }
133
+ //# sourceMappingURL=context-handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-handoff.js","sourceRoot":"","sources":["../../src/orchestrator/context-handoff.ts"],"names":[],"mappings":"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"}