@copilot-swarm/core 0.0.7 → 0.0.8

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 (48) hide show
  1. package/defaults/agents/engineer.md +2 -1
  2. package/defaults/agents/pm.md +1 -1
  3. package/defaults/swarm.config.yaml +2 -0
  4. package/dist/analysis-engine.d.ts +3 -1
  5. package/dist/analysis-engine.d.ts.map +1 -1
  6. package/dist/analysis-engine.js +14 -1
  7. package/dist/analysis-engine.js.map +1 -1
  8. package/dist/checkpoint.d.ts +11 -0
  9. package/dist/checkpoint.d.ts.map +1 -1
  10. package/dist/checkpoint.js.map +1 -1
  11. package/dist/checkpoint.test.d.ts +2 -0
  12. package/dist/checkpoint.test.d.ts.map +1 -0
  13. package/dist/checkpoint.test.js +137 -0
  14. package/dist/checkpoint.test.js.map +1 -0
  15. package/dist/config.js +1 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/index.js +65 -4
  18. package/dist/index.js.map +1 -1
  19. package/dist/messages.d.ts +11 -0
  20. package/dist/messages.d.ts.map +1 -1
  21. package/dist/messages.js +22 -0
  22. package/dist/messages.js.map +1 -1
  23. package/dist/orchestrator.d.ts.map +1 -1
  24. package/dist/orchestrator.js +17 -13
  25. package/dist/orchestrator.js.map +1 -1
  26. package/dist/pipeline-config.d.ts.map +1 -1
  27. package/dist/pipeline-config.js +4 -0
  28. package/dist/pipeline-config.js.map +1 -1
  29. package/dist/pipeline-config.test.js +37 -0
  30. package/dist/pipeline-config.test.js.map +1 -1
  31. package/dist/pipeline-engine.d.ts +3 -0
  32. package/dist/pipeline-engine.d.ts.map +1 -1
  33. package/dist/pipeline-engine.js +179 -68
  34. package/dist/pipeline-engine.js.map +1 -1
  35. package/dist/pipeline-types.d.ts +2 -0
  36. package/dist/pipeline-types.d.ts.map +1 -1
  37. package/dist/planning-engine.d.ts +5 -1
  38. package/dist/planning-engine.d.ts.map +1 -1
  39. package/dist/planning-engine.js +17 -2
  40. package/dist/planning-engine.js.map +1 -1
  41. package/dist/progress-tracker.d.ts.map +1 -1
  42. package/dist/progress-tracker.js +4 -0
  43. package/dist/progress-tracker.js.map +1 -1
  44. package/dist/tui-renderer.d.ts +4 -0
  45. package/dist/tui-renderer.d.ts.map +1 -1
  46. package/dist/tui-renderer.js +18 -0
  47. package/dist/tui-renderer.js.map +1 -1
  48. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-config.d.ts","sourceRoot":"","sources":["../src/pipeline-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAMV,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAsL7B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAehE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAkCnE"}
1
+ {"version":3,"file":"pipeline-config.d.ts","sourceRoot":"","sources":["../src/pipeline-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAMV,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAyL7B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAehE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAkCnE"}
@@ -96,6 +96,8 @@ function validatePhase(raw, index) {
96
96
  phase: "implement",
97
97
  parallel,
98
98
  agent: requireString(obj, "agent", ctx),
99
+ clarificationAgent: optionalString(obj, "clarificationAgent"),
100
+ clarificationKeyword: optionalString(obj, "clarificationKeyword"),
99
101
  reviews: validateReviews(obj.reviews, ctx),
100
102
  qa: obj.qa !== undefined ? validateQa(obj.qa, ctx) : undefined,
101
103
  };
@@ -164,6 +166,8 @@ function validateAgentReferences(config) {
164
166
  break;
165
167
  case "implement":
166
168
  check(phase.agent, ctx);
169
+ if (phase.clarificationAgent)
170
+ check(phase.clarificationAgent, `${ctx} clarification`);
167
171
  for (const r of phase.reviews)
168
172
  check(r.agent, `${ctx} review`);
169
173
  if (phase.qa)
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../src/pipeline-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-config.js","sourceRoot":"","sources":["../src/pipeline-config.ts"],"names":[],"mappings":"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"}
@@ -124,6 +124,43 @@ describe("parsePipelineConfig", () => {
124
124
  expect(phase.condition).toBe("hasFrontendTasks");
125
125
  }
126
126
  });
127
+ it("parses implement phase with clarification agent", () => {
128
+ const config = parsePipelineConfig(makeConfig({
129
+ pipeline: [
130
+ {
131
+ phase: "implement",
132
+ parallel: true,
133
+ agent: "engineer",
134
+ clarificationAgent: "pm",
135
+ clarificationKeyword: "CLARIFICATION_NEEDED",
136
+ reviews: [{ agent: "code-reviewer", maxIterations: 3, approvalKeyword: "APPROVED" }],
137
+ },
138
+ ],
139
+ }));
140
+ const phase = config.pipeline[0];
141
+ expect(phase.phase).toBe("implement");
142
+ if (phase.phase === "implement") {
143
+ expect(phase.clarificationAgent).toBe("pm");
144
+ expect(phase.clarificationKeyword).toBe("CLARIFICATION_NEEDED");
145
+ }
146
+ });
147
+ it("allows implement phase without clarification fields", () => {
148
+ const config = parsePipelineConfig(makeConfig({
149
+ pipeline: [
150
+ {
151
+ phase: "implement",
152
+ parallel: false,
153
+ agent: "engineer",
154
+ reviews: [],
155
+ },
156
+ ],
157
+ }));
158
+ const phase = config.pipeline[0];
159
+ if (phase.phase === "implement") {
160
+ expect(phase.clarificationAgent).toBeUndefined();
161
+ expect(phase.clarificationKeyword).toBeUndefined();
162
+ }
163
+ });
127
164
  it("rejects non-object input", () => {
128
165
  expect(() => parsePipelineConfig("not an object")).toThrow("YAML object");
129
166
  expect(() => parsePipelineConfig(null)).toThrow("YAML object");
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-config.test.js","sourceRoot":"","sources":["../src/pipeline-config.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-config.test.js","sourceRoot":"","sources":["../src/pipeline-config.test.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ export declare class PipelineEngine {
9
9
  private readonly tracker?;
10
10
  private readonly sessions;
11
11
  private effectiveConfig;
12
+ private activePhaseKey;
13
+ private phaseDraft;
14
+ private iterationProgress;
12
15
  constructor(config: SwarmConfig, pipeline: PipelineConfig, logger: Logger, tracker?: ProgressTracker | undefined);
13
16
  start(): Promise<void>;
14
17
  stop(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-engine.d.ts","sourceRoot":"","sources":["../src/pipeline-engine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAKV,cAAc,EAGf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAa7D,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAP3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,eAAe,CAAc;gBAGlB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,YAAA;IAMtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YA0GhB,WAAW;YAoBX,gBAAgB;YAoBhB,aAAa;YA6Eb,gBAAgB;YAyHhB,uBAAuB;YAgDvB,aAAa;CAwB5B"}
1
+ {"version":3,"file":"pipeline-engine.d.ts","sourceRoot":"","sources":["../src/pipeline-engine.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAKV,cAAc,EAGf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAa7D,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAZ3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,eAAe,CAAc;IAGrC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,iBAAiB,CAAyC;gBAG/C,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,YAAA;IAMtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAsIhB,WAAW;YAoCX,gBAAgB;YAoBhB,aAAa;YA8Gb,gBAAgB;YAyKhB,uBAAuB;YAgEvB,aAAa;CAqC5B"}
@@ -12,6 +12,10 @@ export class PipelineEngine {
12
12
  tracker;
13
13
  sessions;
14
14
  effectiveConfig;
15
+ // Iteration-level checkpoint state
16
+ activePhaseKey = null;
17
+ phaseDraft = null;
18
+ iterationProgress = {};
15
19
  constructor(config, pipeline, logger, tracker) {
16
20
  this.config = config;
17
21
  this.pipeline = pipeline;
@@ -30,6 +34,7 @@ export class PipelineEngine {
30
34
  this.logger.info(msg.configLoaded(this.pipeline.primaryModel, this.pipeline.reviewModel, this.config.verbose));
31
35
  let ctx = { repoAnalysis: "", spec: "", tasks: [], designSpec: "", streamResults: [] };
32
36
  let completedPhases = new Set();
37
+ let resumedPhaseKey = null;
33
38
  // Load repo analysis if available — provides context for all phases
34
39
  try {
35
40
  ctx.repoAnalysis = await fs.readFile(analysisFilePath(this.config), "utf-8");
@@ -55,11 +60,32 @@ export class PipelineEngine {
55
60
  };
56
61
  completedPhases = new Set(checkpoint.completedPhases);
57
62
  this.logger.info(msg.resuming(completedPhases.size));
63
+ // Restore iteration-level progress for the phase that was active
64
+ if (checkpoint.activePhase) {
65
+ resumedPhaseKey = checkpoint.activePhase;
66
+ this.phaseDraft = checkpoint.phaseDraft ?? null;
67
+ this.iterationProgress = checkpoint.iterationProgress ?? {};
68
+ }
58
69
  }
59
70
  else {
60
71
  this.logger.warn(msg.noCheckpoint);
61
72
  }
62
73
  }
74
+ // Closure that saves the full checkpoint including iteration state
75
+ const saveProgress = async () => {
76
+ await saveCheckpoint(this.effectiveConfig, {
77
+ completedPhases: [...completedPhases],
78
+ spec: ctx.spec,
79
+ tasks: ctx.tasks,
80
+ designSpec: ctx.designSpec,
81
+ streamResults: ctx.streamResults,
82
+ issueBody: this.effectiveConfig.issueBody,
83
+ runId: this.effectiveConfig.runId,
84
+ activePhase: this.activePhaseKey ?? undefined,
85
+ phaseDraft: this.phaseDraft ?? undefined,
86
+ iterationProgress: Object.keys(this.iterationProgress).length > 0 ? this.iterationProgress : undefined,
87
+ });
88
+ };
63
89
  // Initialize progress tracker with pipeline phases
64
90
  this.tracker?.initPhases(this.pipeline.pipeline);
65
91
  for (const key of completedPhases) {
@@ -72,35 +98,37 @@ export class PipelineEngine {
72
98
  this.tracker?.skipPhase(phaseKey);
73
99
  continue;
74
100
  }
101
+ this.activePhaseKey = phaseKey;
102
+ // Only use saved iteration state for the phase that was active when checkpoint was saved
103
+ if (phaseKey !== resumedPhaseKey) {
104
+ this.phaseDraft = null;
105
+ this.iterationProgress = {};
106
+ }
75
107
  this.tracker?.activatePhase(phaseKey);
76
108
  switch (phase.phase) {
77
109
  case "spec":
78
- ctx.spec = await this.executeSpec(phase, ctx);
110
+ ctx.spec = await this.executeSpec(phase, ctx, saveProgress);
79
111
  break;
80
112
  case "decompose":
81
113
  ctx.tasks = await this.executeDecompose(phase, ctx);
82
114
  break;
83
115
  case "design":
84
- ctx.designSpec = await this.executeDesign(phase, ctx);
116
+ ctx.designSpec = await this.executeDesign(phase, ctx, saveProgress);
85
117
  break;
86
118
  case "implement":
87
- ctx.streamResults = await this.executeImplement(phase, ctx);
119
+ ctx.streamResults = await this.executeImplement(phase, ctx, saveProgress);
88
120
  break;
89
121
  case "cross-model-review":
90
- ctx.streamResults = await this.executeCrossModelReview(phase, ctx);
122
+ ctx.streamResults = await this.executeCrossModelReview(phase, ctx, saveProgress);
91
123
  break;
92
124
  }
125
+ // Phase complete — clear iteration state and save phase-level checkpoint
126
+ this.activePhaseKey = null;
127
+ this.phaseDraft = null;
128
+ this.iterationProgress = {};
93
129
  completedPhases.add(phaseKey);
94
130
  this.tracker?.completePhase(phaseKey);
95
- await saveCheckpoint(this.effectiveConfig, {
96
- completedPhases: [...completedPhases],
97
- spec: ctx.spec,
98
- tasks: ctx.tasks,
99
- designSpec: ctx.designSpec,
100
- streamResults: ctx.streamResults,
101
- issueBody: this.effectiveConfig.issueBody,
102
- runId: this.effectiveConfig.runId,
103
- });
131
+ await saveProgress();
104
132
  this.logger.info(msg.checkpointSaved(phase.phase));
105
133
  }
106
134
  // Final summary
@@ -119,16 +147,26 @@ export class PipelineEngine {
119
147
  await clearCheckpoint(this.effectiveConfig);
120
148
  }
121
149
  // --- SPEC PHASE ---
122
- async executeSpec(phase, ctx) {
150
+ async executeSpec(phase, ctx, save) {
123
151
  this.logger.info(msg.pmPhaseStart);
124
152
  this.logger.info(msg.pmDrafting);
125
- const prompt = ctx.repoAnalysis
126
- ? `## Repository Context\n\n${ctx.repoAnalysis}\n\n## Task\n\n${this.config.issueBody}`
127
- : this.config.issueBody;
128
- let spec = await this.sessions.callIsolated(phase.agent, prompt);
129
- for (const review of phase.reviews) {
153
+ let spec;
154
+ if (this.phaseDraft !== null) {
155
+ spec = this.phaseDraft;
156
+ this.logger.info(msg.draftResumed);
157
+ }
158
+ else {
159
+ const prompt = ctx.repoAnalysis
160
+ ? `## Repository Context\n\n${ctx.repoAnalysis}\n\n## Task\n\n${this.config.issueBody}`
161
+ : this.config.issueBody;
162
+ spec = await this.sessions.callIsolated(phase.agent, prompt);
163
+ this.phaseDraft = spec;
164
+ await save();
165
+ }
166
+ for (let ri = 0; ri < phase.reviews.length; ri++) {
167
+ const review = phase.reviews[ri];
130
168
  this.logger.info(msg.reviewPhase(review.agent));
131
- spec = await this.runReviewLoop(review, spec, phase.agent, (content) => `Review this specification:\n${content}`);
169
+ spec = await this.runReviewLoop(review, spec, phase.agent, (content) => `Review this specification:\n${content}`, `review-${ri}`, save);
132
170
  }
133
171
  await writeRoleSummary(this.effectiveConfig, phase.agent, `## Final Specification\n\n${spec}`);
134
172
  return spec;
@@ -146,43 +184,68 @@ export class PipelineEngine {
146
184
  return tasks;
147
185
  }
148
186
  // --- DESIGN PHASE ---
149
- async executeDesign(phase, ctx) {
187
+ async executeDesign(phase, ctx, save) {
150
188
  if (phase.condition === "hasFrontendTasks" && !hasFrontendWork(ctx.tasks)) {
151
189
  return ctx.designSpec;
152
190
  }
153
191
  this.logger.info(msg.designPhaseStart);
154
192
  const session = await this.sessions.createAgentSession(phase.agent);
193
+ let sessionPrimed = false;
155
194
  try {
156
- this.logger.info(msg.designPhase);
157
- let design = await this.sessions.send(session, `Create a detailed UI/UX design specification based on this spec:\n${ctx.spec}\n\n` +
158
- `Include: component hierarchy, layout, interactions, states, and accessibility considerations.`, `${phase.agent} is designing…`);
159
- if (phase.clarificationAgent && responseContains(design, "CLARIFICATION_NEEDED")) {
160
- this.logger.info(msg.designerClarification);
161
- const clarification = await this.sessions.callIsolated(phase.clarificationAgent, `The designer needs clarification:\n${design}`);
162
- design = await this.sessions.send(session, `PM Clarification:\n${clarification}\n\nRevise the design.`, `${phase.agent} is revising…`);
195
+ let design;
196
+ if (this.phaseDraft !== null) {
197
+ design = this.phaseDraft;
198
+ this.logger.info(msg.draftResumed);
199
+ }
200
+ else {
201
+ this.logger.info(msg.designPhase);
202
+ design = await this.sessions.send(session, `Create a detailed UI/UX design specification based on this spec:\n${ctx.spec}\n\n` +
203
+ `Include: component hierarchy, layout, interactions, states, and accessibility considerations.`, `${phase.agent} is designing…`);
204
+ sessionPrimed = true;
205
+ if (phase.clarificationAgent && responseContains(design, "CLARIFICATION_NEEDED")) {
206
+ this.logger.info(msg.designerClarification);
207
+ const clarification = await this.sessions.callIsolated(phase.clarificationAgent, `The designer needs clarification:\n${design}`);
208
+ design = await this.sessions.send(session, `PM Clarification:\n${clarification}\n\nRevise the design.`, `${phase.agent} is revising…`);
209
+ }
210
+ this.phaseDraft = design;
211
+ await save();
163
212
  }
164
- for (const review of phase.reviews) {
213
+ for (let ri = 0; ri < phase.reviews.length; ri++) {
214
+ const review = phase.reviews[ri];
165
215
  this.logger.info(msg.reviewPhase(review.agent));
216
+ const reviewKey = `review-${ri}`;
217
+ const savedReview = this.iterationProgress[reviewKey];
218
+ let startIter = 1;
219
+ if (savedReview) {
220
+ design = savedReview.content;
221
+ startIter = savedReview.completedIterations + 1;
222
+ this.logger.info(msg.iterationResumed(savedReview.completedIterations, review.maxIterations));
223
+ }
166
224
  const maxIter = review.maxIterations;
167
- for (let i = 1; i <= maxIter; i++) {
225
+ for (let i = startIter; i <= maxIter; i++) {
168
226
  this.logger.info(msg.reviewIteration(i, maxIter));
169
227
  const feedback = await this.sessions.callIsolated(review.agent, `Review this design specification:\n${design}`);
170
228
  if (responseContains(feedback, review.approvalKeyword)) {
171
229
  this.logger.info(msg.approved(review.agent));
172
230
  break;
173
231
  }
232
+ // Build fix prompt — include current design if session has no prior context
233
+ const contextPrefix = sessionPrimed ? "" : `Current design:\n${design}\n\n`;
174
234
  if (review.clarificationKeyword && responseContains(feedback, review.clarificationKeyword)) {
175
235
  const clarAgent = review.clarificationAgent ?? phase.clarificationAgent;
176
236
  if (clarAgent) {
177
237
  this.logger.info(msg.reviewerClarification);
178
238
  const clar = await this.sessions.callIsolated(clarAgent, `The design reviewer needs clarification:\n${feedback}`);
179
- design = await this.sessions.send(session, `Review feedback:\n${feedback}\n\nPM Clarification:\n${clar}\n\nRevise the design.`, `${phase.agent} is revising…`);
239
+ design = await this.sessions.send(session, `${contextPrefix}Review feedback:\n${feedback}\n\nPM Clarification:\n${clar}\n\nRevise the design.`, `${phase.agent} is revising…`);
180
240
  }
181
241
  }
182
242
  else {
183
243
  this.logger.info(msg.codeFeedback(feedback.substring(0, 80)));
184
- design = await this.sessions.send(session, `Review feedback:\n${feedback}\n\nRevise the design.`, `${phase.agent} is revising…`);
244
+ design = await this.sessions.send(session, `${contextPrefix}Review feedback:\n${feedback}\n\nRevise the design.`, `${phase.agent} is revising…`);
185
245
  }
246
+ sessionPrimed = true;
247
+ this.iterationProgress[reviewKey] = { content: design, completedIterations: i };
248
+ await save();
186
249
  }
187
250
  }
188
251
  await writeRoleSummary(this.effectiveConfig, phase.agent, design);
@@ -193,7 +256,7 @@ export class PipelineEngine {
193
256
  }
194
257
  }
195
258
  // --- IMPLEMENT PHASE ---
196
- async executeImplement(phase, ctx) {
259
+ async executeImplement(phase, ctx, save) {
197
260
  this.logger.info(msg.launchingStreams(ctx.tasks.length));
198
261
  this.tracker?.initStreams(ctx.tasks);
199
262
  // Pre-fill with any existing partial results from a previous run
@@ -206,21 +269,51 @@ export class PipelineEngine {
206
269
  return results[idx];
207
270
  }
208
271
  const label = msg.streamLabel(idx);
272
+ const streamKey = `stream-${idx}`;
209
273
  this.logger.info(msg.streamStart(label, task));
210
274
  const session = await this.sessions.createAgentSession(phase.agent);
275
+ let sessionPrimed = false;
211
276
  try {
212
- this.logger.info(msg.streamEngineering(label));
213
- this.tracker?.updateStream(idx, "engineering");
214
- const engineeringPrompt = isFrontendTask(task)
215
- ? `Spec:\n${ctx.spec}\n\nDesign:\n${ctx.designSpec}\n\nTask:\n${task}\n\nImplement this task.`
216
- : `Spec:\n${ctx.spec}\n\nTask:\n${task}\n\nImplement this task.`;
217
- let code = await this.sessions.send(session, engineeringPrompt, `${phase.agent} (${label}) is implementing…`);
277
+ let code;
278
+ const savedCode = this.iterationProgress[`${streamKey}-code`];
279
+ if (savedCode) {
280
+ code = savedCode.content;
281
+ this.logger.info(msg.draftResumed);
282
+ }
283
+ else {
284
+ this.logger.info(msg.streamEngineering(label));
285
+ this.tracker?.updateStream(idx, "engineering");
286
+ const engineeringPrompt = isFrontendTask(task)
287
+ ? `Spec:\n${ctx.spec}\n\nDesign:\n${ctx.designSpec}\n\nTask:\n${task}\n\nImplement this task.`
288
+ : `Spec:\n${ctx.spec}\n\nTask:\n${task}\n\nImplement this task.`;
289
+ code = await this.sessions.send(session, engineeringPrompt, `${phase.agent} (${label}) is implementing…`);
290
+ sessionPrimed = true;
291
+ // Engineer-to-PM clarification: if the engineer signals ambiguity, consult the PM
292
+ if (phase.clarificationAgent &&
293
+ phase.clarificationKeyword &&
294
+ responseContains(code, phase.clarificationKeyword)) {
295
+ this.logger.info(msg.streamClarification(label));
296
+ const clarification = await this.sessions.callIsolated(phase.clarificationAgent, `Spec:\n${ctx.spec}\n\nThe engineer working on task "${task}" needs clarification:\n\n${code}`);
297
+ code = await this.sessions.send(session, `PM Clarification:\n${clarification}\n\nProceed with the implementation using this clarification.`, `${phase.agent} (${label}) is implementing with clarification…`);
298
+ }
299
+ this.iterationProgress[`${streamKey}-code`] = { content: code, completedIterations: 0 };
300
+ await save();
301
+ }
218
302
  // Reviews
219
- for (const review of phase.reviews) {
303
+ for (let ri = 0; ri < phase.reviews.length; ri++) {
304
+ const review = phase.reviews[ri];
305
+ const reviewKey = `${streamKey}-review-${ri}`;
306
+ const savedReview = this.iterationProgress[reviewKey];
307
+ let startIter = 1;
308
+ if (savedReview) {
309
+ code = savedReview.content;
310
+ startIter = savedReview.completedIterations + 1;
311
+ this.logger.info(msg.iterationResumed(savedReview.completedIterations, review.maxIterations));
312
+ }
220
313
  this.logger.info(msg.streamCodeReview(label, review.agent));
221
314
  this.tracker?.updateStream(idx, "reviewing");
222
315
  const maxIter = review.maxIterations;
223
- for (let i = 1; i <= maxIter; i++) {
316
+ for (let i = startIter; i <= maxIter; i++) {
224
317
  this.logger.info(msg.reviewIteration(i, maxIter));
225
318
  const feedback = await this.sessions.callIsolated(review.agent, `Review this implementation:\n${code}`);
226
319
  if (responseContains(feedback, review.approvalKeyword)) {
@@ -228,15 +321,27 @@ export class PipelineEngine {
228
321
  break;
229
322
  }
230
323
  this.logger.info(msg.codeFeedback(feedback.substring(0, 80)));
231
- code = await this.sessions.send(session, `Code review feedback:\n${feedback}\n\nFix all issues.`, `${phase.agent} (${label}) is fixing…`);
324
+ const contextPrefix = sessionPrimed ? "" : `Current implementation:\n${code}\n\n`;
325
+ code = await this.sessions.send(session, `${contextPrefix}Code review feedback:\n${feedback}\n\nFix all issues.`, `${phase.agent} (${label}) is fixing…`);
326
+ sessionPrimed = true;
327
+ this.iterationProgress[reviewKey] = { content: code, completedIterations: i };
328
+ await save();
232
329
  }
233
330
  }
234
331
  // QA
235
332
  if (phase.qa) {
333
+ const qaKey = `${streamKey}-qa`;
334
+ const savedQa = this.iterationProgress[qaKey];
335
+ let startQa = 1;
336
+ if (savedQa) {
337
+ code = savedQa.content;
338
+ startQa = savedQa.completedIterations + 1;
339
+ this.logger.info(msg.iterationResumed(savedQa.completedIterations, phase.qa.maxIterations));
340
+ }
236
341
  this.logger.info(msg.streamQa(label));
237
342
  this.tracker?.updateStream(idx, "testing");
238
343
  const maxQa = phase.qa.maxIterations;
239
- for (let i = 1; i <= maxQa; i++) {
344
+ for (let i = startQa; i <= maxQa; i++) {
240
345
  this.logger.info(msg.qaIteration(i, maxQa));
241
346
  const testReport = await this.sessions.callIsolated(phase.qa.agent, `Spec:\n${ctx.spec}\n\nImplementation:\n${code}\n\nValidate the implementation against the spec.`);
242
347
  if (responseContains(testReport, phase.qa.approvalKeyword)) {
@@ -244,22 +349,18 @@ export class PipelineEngine {
244
349
  break;
245
350
  }
246
351
  this.logger.info(msg.defectsFound);
247
- code = await this.sessions.send(session, `QA Report:\n${testReport}\n\nFix all reported issues.`, `${phase.agent} (${label}) is fixing defects…`);
352
+ const contextPrefix = sessionPrimed ? "" : `Current implementation:\n${code}\n\n`;
353
+ code = await this.sessions.send(session, `${contextPrefix}QA Report:\n${testReport}\n\nFix all reported issues.`, `${phase.agent} (${label}) is fixing defects…`);
354
+ sessionPrimed = true;
355
+ this.iterationProgress[qaKey] = { content: code, completedIterations: i };
356
+ await save();
248
357
  }
249
358
  }
250
359
  await writeRoleSummary(this.effectiveConfig, `engineer-stream-${idx + 1}`, code);
251
360
  this.tracker?.updateStream(idx, "done");
252
- // Save intermediate progress so completed streams survive a crash
361
+ // Save completed stream result
253
362
  results[idx] = code;
254
- await saveCheckpoint(this.effectiveConfig, {
255
- completedPhases: [],
256
- spec: ctx.spec,
257
- tasks: ctx.tasks,
258
- designSpec: ctx.designSpec,
259
- streamResults: results,
260
- issueBody: this.effectiveConfig.issueBody,
261
- runId: this.effectiveConfig.runId,
262
- });
363
+ await save();
263
364
  return code;
264
365
  }
265
366
  finally {
@@ -271,16 +372,7 @@ export class PipelineEngine {
271
372
  const failures = settled.filter((r) => r.status === "rejected");
272
373
  if (failures.length > 0) {
273
374
  this.logger.warn(msg.partialStreamFailure(failures.length, settled.length));
274
- // Save partial results before re-throwing so --resume can pick up completed streams
275
- await saveCheckpoint(this.effectiveConfig, {
276
- completedPhases: [],
277
- spec: ctx.spec,
278
- tasks: ctx.tasks,
279
- designSpec: ctx.designSpec,
280
- streamResults: results,
281
- issueBody: this.effectiveConfig.issueBody,
282
- runId: this.effectiveConfig.runId,
283
- });
375
+ await save();
284
376
  throw new Error(`${failures.length}/${settled.length} streams failed. Use --resume to retry failed streams.`);
285
377
  }
286
378
  return results;
@@ -291,7 +383,7 @@ export class PipelineEngine {
291
383
  return results;
292
384
  }
293
385
  // --- CROSS-MODEL REVIEW ---
294
- async executeCrossModelReview(phase, ctx) {
386
+ async executeCrossModelReview(phase, ctx, save) {
295
387
  if (phase.condition === "differentReviewModel" && this.pipeline.reviewModel === this.pipeline.primaryModel) {
296
388
  this.logger.info(msg.crossModelSkipped);
297
389
  return ctx.streamResults;
@@ -300,9 +392,17 @@ export class PipelineEngine {
300
392
  const maxIter = phase.maxIterations;
301
393
  const reviewed = await Promise.all(ctx.streamResults.map(async (code, idx) => {
302
394
  const label = msg.streamLabel(idx);
395
+ const cmKey = `cross-model-${idx}`;
396
+ const savedCm = this.iterationProgress[cmKey];
397
+ let startIter = 1;
398
+ if (savedCm) {
399
+ code = savedCm.content;
400
+ startIter = savedCm.completedIterations + 1;
401
+ this.logger.info(msg.iterationResumed(savedCm.completedIterations, maxIter));
402
+ }
303
403
  this.logger.info(msg.crossModelStreamReview(label));
304
404
  let current = code;
305
- for (let i = 1; i <= maxIter; i++) {
405
+ for (let i = startIter; i <= maxIter; i++) {
306
406
  this.logger.info(msg.crossModelIteration(i, maxIter, this.pipeline.reviewModel));
307
407
  const feedback = await this.sessions.callIsolated(phase.agent, `Spec:\n${ctx.spec}\n\nReview this implementation from scratch. ` +
308
408
  `You are using a different model than the one that wrote this code — look for blind spots.\n\n` +
@@ -313,6 +413,8 @@ export class PipelineEngine {
313
413
  }
314
414
  this.logger.info(msg.crossModelIssues);
315
415
  current = await this.sessions.callIsolated(phase.fixAgent, `Cross-model review feedback:\n${feedback}\n\nOriginal implementation:\n${current}\n\nFix all reported issues.`);
416
+ this.iterationProgress[cmKey] = { content: current, completedIterations: i };
417
+ await save();
316
418
  }
317
419
  return current;
318
420
  }));
@@ -320,10 +422,17 @@ export class PipelineEngine {
320
422
  return reviewed;
321
423
  }
322
424
  // --- GENERIC REVIEW LOOP ---
323
- async runReviewLoop(review, content, authorAgent, buildPrompt) {
425
+ async runReviewLoop(review, content, authorAgent, buildPrompt, progressKey, save) {
324
426
  const maxIter = review.maxIterations;
325
427
  let current = content;
326
- for (let i = 1; i <= maxIter; i++) {
428
+ const saved = this.iterationProgress[progressKey];
429
+ let startIter = 1;
430
+ if (saved) {
431
+ current = saved.content;
432
+ startIter = saved.completedIterations + 1;
433
+ this.logger.info(msg.iterationResumed(saved.completedIterations, maxIter));
434
+ }
435
+ for (let i = startIter; i <= maxIter; i++) {
327
436
  this.logger.info(msg.reviewIteration(i, maxIter));
328
437
  const feedback = await this.sessions.callIsolated(review.agent, buildPrompt(current));
329
438
  if (responseContains(feedback, review.approvalKeyword)) {
@@ -332,6 +441,8 @@ export class PipelineEngine {
332
441
  }
333
442
  this.logger.info(msg.feedbackReceived(feedback.substring(0, 80)));
334
443
  current = await this.sessions.callIsolated(authorAgent, `Previous content:\n${current}\n\nReview feedback:\n${feedback}\n\nRevise accordingly.`);
444
+ this.iterationProgress[progressKey] = { content: current, completedIterations: i };
445
+ await save();
335
446
  }
336
447
  return current;
337
448
  }