@copilot-swarm/core 0.0.8 → 0.0.10

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 (42) hide show
  1. package/defaults/swarm.config.yaml +1 -0
  2. package/dist/checkpoint.d.ts +8 -0
  3. package/dist/checkpoint.d.ts.map +1 -1
  4. package/dist/checkpoint.js.map +1 -1
  5. package/dist/checkpoint.test.js +29 -0
  6. package/dist/checkpoint.test.js.map +1 -1
  7. package/dist/config.d.ts +2 -1
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +48 -8
  10. package/dist/config.js.map +1 -1
  11. package/dist/github-issue.d.ts +6 -0
  12. package/dist/github-issue.d.ts.map +1 -0
  13. package/dist/github-issue.js +51 -0
  14. package/dist/github-issue.js.map +1 -0
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/messages.d.ts +9 -0
  18. package/dist/messages.d.ts.map +1 -1
  19. package/dist/messages.js +9 -0
  20. package/dist/messages.js.map +1 -1
  21. package/dist/pipeline-config.d.ts.map +1 -1
  22. package/dist/pipeline-config.js +1 -0
  23. package/dist/pipeline-config.js.map +1 -1
  24. package/dist/pipeline-config.test.js +17 -0
  25. package/dist/pipeline-config.test.js.map +1 -1
  26. package/dist/pipeline-engine.d.ts.map +1 -1
  27. package/dist/pipeline-engine.js +8 -0
  28. package/dist/pipeline-engine.js.map +1 -1
  29. package/dist/pipeline-types.d.ts +1 -0
  30. package/dist/pipeline-types.d.ts.map +1 -1
  31. package/dist/planning-engine.d.ts +17 -0
  32. package/dist/planning-engine.d.ts.map +1 -1
  33. package/dist/planning-engine.js +399 -16
  34. package/dist/planning-engine.js.map +1 -1
  35. package/dist/progress-tracker.d.ts.map +1 -1
  36. package/dist/progress-tracker.js +4 -0
  37. package/dist/progress-tracker.js.map +1 -1
  38. package/dist/textarea.d.ts +7 -0
  39. package/dist/textarea.d.ts.map +1 -0
  40. package/dist/textarea.js +156 -0
  41. package/dist/textarea.js.map +1 -0
  42. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import * as fs from "node:fs/promises";
2
2
  import * as path from "node:path";
3
3
  import * as readline from "node:readline/promises";
4
+ import { clearCheckpoint, loadCheckpoint, saveCheckpoint } from "./checkpoint.js";
4
5
  import { ResponseKeyword } from "./constants.js";
5
6
  import { msg } from "./messages.js";
6
7
  import { plansDir } from "./paths.js";
@@ -38,14 +39,87 @@ Given a set of requirements, analyze the codebase and produce a structured asses
38
39
  - **Estimated scope:** Number of files to change, new files to create, tests to write
39
40
  3. Be specific. Reference actual file paths and code structures you found in the repo.
40
41
  4. Do not implement anything — analysis only.`;
42
+ const ENGINEER_CLARIFIER_INSTRUCTIONS = `You are a Senior Software Engineer reviewing requirements before implementation.
43
+ Your goal is to identify and resolve any technical ambiguities, missing details, or potential blockers BEFORE implementation begins.
44
+
45
+ **Rules:**
46
+ 1. Use \`list_dir\`, \`read_file\`, and \`run_terminal\` to explore the codebase and understand the current state.
47
+ 2. Think about what you would need to know to implement this. Ask about:
48
+ - API contracts, data models, or interfaces that aren't specified
49
+ - Error handling and edge cases
50
+ - Integration points with existing code
51
+ - Testing expectations (unit, integration, e2e)
52
+ - Performance or security requirements
53
+ 3. Ask at most 3–5 focused questions at a time. Number them clearly.
54
+ 4. After the user answers, assess whether you have enough clarity. Ask follow-ups only if genuinely needed.
55
+ 5. When you have sufficient information to implement, respond with **ENGINEERING_CLEAR** on its own line, followed by a summary of the technical decisions and assumptions.
56
+ 6. Do NOT identify "blockers" that prevent implementation — your job is to resolve ambiguities so implementation can proceed without hesitation.`;
57
+ const DESIGNER_CLARIFIER_INSTRUCTIONS = `You are a Senior UI/UX Designer reviewing requirements before design work begins.
58
+ Your goal is to clarify visual, interaction, and accessibility details.
59
+
60
+ **Rules:**
61
+ 1. Use \`list_dir\` and \`read_file\` to understand the existing UI patterns, components, and design system in use.
62
+ 2. Ask about:
63
+ - Layout and component hierarchy preferences
64
+ - Interaction patterns (hover, click, drag, etc.)
65
+ - Responsive behavior and breakpoints
66
+ - Accessibility requirements
67
+ - Visual style (match existing patterns, or new direction?)
68
+ 3. Ask at most 3–5 focused questions at a time. Number them clearly.
69
+ 4. After the user answers, assess whether you have enough clarity. Ask follow-ups only if genuinely needed.
70
+ 5. When you have sufficient information, respond with **DESIGN_CLEAR** on its own line, followed by a summary of the design decisions and assumptions.`;
71
+ const ENGINEERING_CLEAR_KEYWORD = "ENGINEERING_CLEAR";
72
+ const DESIGN_CLEAR_KEYWORD = "DESIGN_CLEAR";
73
+ const PLAN_APPROVED_KEYWORD = "PLAN_APPROVED";
74
+ const MAX_REVIEW_ITERATIONS = 3;
75
+ const STEP_REVIEWER_INSTRUCTIONS = `You are a Senior Technical Reviewer evaluating one section of a project plan.
76
+ Your goal is to verify the section is clear, complete, and actionable enough for implementation.
77
+
78
+ **Rules:**
79
+ 1. Read the section carefully. Check for:
80
+ - **Clarity:** Would an engineer know exactly what to build from this alone?
81
+ - **Completeness:** Are acceptance criteria testable? Are edge cases covered?
82
+ - **Consistency:** Does it contradict other sections or make conflicting assumptions?
83
+ - **Actionability:** Are there vague phrases like "as appropriate", "if needed", or "etc." that should be specified?
84
+ 2. Decision:
85
+ - If the section is clear, complete, and actionable, respond with **PLAN_APPROVED**.
86
+ - If there are issues, provide a numbered list of specific improvements needed. Be precise about what's wrong and what the fix should be.
87
+ 3. Do NOT rewrite the section yourself. Only provide feedback.`;
88
+ const CROSS_MODEL_PLAN_REVIEWER_INSTRUCTIONS = `You are a Senior Technical Reviewer performing a final quality check on a complete project plan.
89
+ You are a different AI model from the one that produced this plan. Your fresh perspective helps catch blind spots.
90
+
91
+ **Rules:**
92
+ 1. Use \`list_dir\` and \`read_file\` to verify claims about the codebase.
93
+ 2. Check the ENTIRE plan for:
94
+ - **Accuracy:** Are file paths, component names, and technical details correct?
95
+ - **Feasibility:** Can this actually be implemented as described?
96
+ - **Completeness:** Are there missing requirements, edge cases, or integration points?
97
+ - **Conflicts:** Do different sections contradict each other?
98
+ - **Implementation readiness:** Could an engineer start implementing from this plan without further clarification?
99
+ 3. Decision:
100
+ - If the plan is ready for implementation, respond with **PLAN_APPROVED**.
101
+ - If there are issues, provide a numbered list of specific improvements. Be precise.`;
102
+ /** Section headers that must be present in a valid assembled plan. */
103
+ const PLAN_SECTION_HEADERS = [
104
+ "## Refined Requirements",
105
+ "## Engineering Decisions",
106
+ "## Design Decisions",
107
+ "## Technical Analysis",
108
+ ];
109
+ /** Minimum ratio of revised-to-original length before we consider the revision suspicious. */
110
+ const MIN_REVISION_LENGTH_RATIO = 0.3;
41
111
  export class PlanningEngine {
42
112
  config;
113
+ pipeline;
43
114
  logger;
44
115
  tracker;
45
116
  renderer;
46
117
  sessions;
118
+ activePhaseKey = null;
119
+ iterationProgress = {};
47
120
  constructor(config, pipeline, logger, tracker, renderer) {
48
121
  this.config = config;
122
+ this.pipeline = pipeline;
49
123
  this.logger = logger;
50
124
  this.tracker = tracker;
51
125
  this.renderer = renderer;
@@ -59,39 +133,308 @@ export class PlanningEngine {
59
133
  }
60
134
  async execute() {
61
135
  this.logger.info(msg.planningStart);
62
- this.tracker?.initPhases([{ phase: "plan-clarify" }, { phase: "plan-analyze" }]);
136
+ const useCrossModel = this.pipeline.reviewModel !== this.pipeline.primaryModel;
137
+ const phases = [
138
+ { phase: "plan-clarify" },
139
+ { phase: "plan-review" },
140
+ { phase: "plan-eng-clarify" },
141
+ { phase: "plan-review" },
142
+ { phase: "plan-design-clarify" },
143
+ { phase: "plan-review" },
144
+ { phase: "plan-analyze" },
145
+ ];
146
+ if (useCrossModel) {
147
+ phases.push({ phase: "plan-cross-review" });
148
+ }
149
+ this.tracker?.initPhases(phases);
150
+ // State
151
+ const completedPhases = new Set();
152
+ let spec = "";
153
+ let engDecisions = "";
154
+ let designDecisions = "";
155
+ let analysis = "";
156
+ let resumedPhaseKey = null;
157
+ let effectiveIssueBody = this.config.issueBody;
158
+ // Resume from checkpoint
159
+ if (this.config.resume) {
160
+ const cp = await loadCheckpoint(this.config);
161
+ if (cp?.mode === "plan") {
162
+ this.logger.info(msg.resuming(cp.completedPhases.length));
163
+ for (const p of cp.completedPhases) {
164
+ completedPhases.add(p);
165
+ this.tracker?.completePhase(p);
166
+ }
167
+ spec = cp.spec || "";
168
+ engDecisions = cp.engDecisions || "";
169
+ designDecisions = cp.designDecisions || "";
170
+ analysis = cp.analysis || "";
171
+ effectiveIssueBody = cp.issueBody || this.config.issueBody;
172
+ if (cp.activePhase) {
173
+ resumedPhaseKey = cp.activePhase;
174
+ this.iterationProgress = cp.iterationProgress ?? {};
175
+ }
176
+ }
177
+ else {
178
+ this.logger.info(msg.noCheckpoint);
179
+ }
180
+ }
181
+ const saveProgress = async () => {
182
+ await saveCheckpoint(this.config, {
183
+ mode: "plan",
184
+ completedPhases: [...completedPhases],
185
+ spec,
186
+ engDecisions,
187
+ designDecisions,
188
+ analysis,
189
+ issueBody: effectiveIssueBody,
190
+ runId: this.config.runId,
191
+ tasks: [],
192
+ designSpec: "",
193
+ streamResults: [],
194
+ activePhase: this.activePhaseKey ?? undefined,
195
+ iterationProgress: Object.keys(this.iterationProgress).length > 0 ? this.iterationProgress : undefined,
196
+ });
197
+ };
198
+ let phaseIdx = 0;
63
199
  // Phase 1: PM clarifies requirements interactively
64
- this.tracker?.activatePhase("plan-clarify-0");
65
- const spec = await this.clarifyRequirements();
66
- this.tracker?.completePhase("plan-clarify-0");
67
- // Phase 2: Engineering analyst assesses codebase
68
- this.tracker?.activatePhase("plan-analyze-1");
69
- const analysis = await this.analyzeCodebase(spec);
70
- this.tracker?.completePhase("plan-analyze-1");
71
- // Assemble and save plan
200
+ const clarifyKey = `plan-clarify-${phaseIdx}`;
201
+ if (completedPhases.has(clarifyKey)) {
202
+ this.logger.info(msg.phaseSkipped("plan-clarify"));
203
+ }
204
+ else {
205
+ this.tracker?.activatePhase(clarifyKey);
206
+ spec = await this.clarifyRequirements(effectiveIssueBody);
207
+ completedPhases.add(clarifyKey);
208
+ this.tracker?.completePhase(clarifyKey);
209
+ await saveProgress();
210
+ }
211
+ phaseIdx++;
212
+ // Phase 2: Review PM output
213
+ const pmReviewKey = `plan-review-${phaseIdx}`;
214
+ if (completedPhases.has(pmReviewKey)) {
215
+ this.logger.info(msg.phaseSkipped("plan-review"));
216
+ }
217
+ else {
218
+ this.tracker?.activatePhase(pmReviewKey);
219
+ this.activePhaseKey = pmReviewKey;
220
+ if (pmReviewKey !== resumedPhaseKey)
221
+ this.iterationProgress = {};
222
+ spec = await this.reviewStep(spec, "Refined Requirements", "PM is revising requirements…", pmReviewKey, saveProgress);
223
+ this.activePhaseKey = null;
224
+ this.iterationProgress = {};
225
+ completedPhases.add(pmReviewKey);
226
+ this.tracker?.completePhase(pmReviewKey);
227
+ await saveProgress();
228
+ }
229
+ phaseIdx++;
230
+ // Phase 3: Engineer clarifies technical questions
231
+ const engClarifyKey = `plan-eng-clarify-${phaseIdx}`;
232
+ if (completedPhases.has(engClarifyKey)) {
233
+ this.logger.info(msg.phaseSkipped("plan-eng-clarify"));
234
+ }
235
+ else {
236
+ this.tracker?.activatePhase(engClarifyKey);
237
+ engDecisions = await this.clarifyWithRole(ENGINEER_CLARIFIER_INSTRUCTIONS, ENGINEERING_CLEAR_KEYWORD, spec, "Engineer is reviewing requirements…", msg.planningEngClarifyPhase);
238
+ completedPhases.add(engClarifyKey);
239
+ this.tracker?.completePhase(engClarifyKey);
240
+ await saveProgress();
241
+ }
242
+ phaseIdx++;
243
+ // Phase 4: Review engineer output
244
+ const engReviewKey = `plan-review-${phaseIdx}`;
245
+ if (completedPhases.has(engReviewKey)) {
246
+ this.logger.info(msg.phaseSkipped("plan-review"));
247
+ }
248
+ else {
249
+ this.tracker?.activatePhase(engReviewKey);
250
+ this.activePhaseKey = engReviewKey;
251
+ if (engReviewKey !== resumedPhaseKey)
252
+ this.iterationProgress = {};
253
+ engDecisions = await this.reviewStep(engDecisions, "Engineering Decisions", "Engineer is revising decisions…", engReviewKey, saveProgress);
254
+ this.activePhaseKey = null;
255
+ this.iterationProgress = {};
256
+ completedPhases.add(engReviewKey);
257
+ this.tracker?.completePhase(engReviewKey);
258
+ await saveProgress();
259
+ }
260
+ phaseIdx++;
261
+ // Phase 5: Designer clarifies UI/UX
262
+ const designClarifyKey = `plan-design-clarify-${phaseIdx}`;
263
+ if (completedPhases.has(designClarifyKey)) {
264
+ this.logger.info(msg.phaseSkipped("plan-design-clarify"));
265
+ }
266
+ else {
267
+ this.tracker?.activatePhase(designClarifyKey);
268
+ designDecisions = await this.clarifyWithRole(DESIGNER_CLARIFIER_INSTRUCTIONS, DESIGN_CLEAR_KEYWORD, spec, "Designer is reviewing requirements…", msg.planningDesignClarifyPhase);
269
+ completedPhases.add(designClarifyKey);
270
+ this.tracker?.completePhase(designClarifyKey);
271
+ await saveProgress();
272
+ }
273
+ phaseIdx++;
274
+ // Phase 6: Review designer output
275
+ const designReviewKey = `plan-review-${phaseIdx}`;
276
+ if (completedPhases.has(designReviewKey)) {
277
+ this.logger.info(msg.phaseSkipped("plan-review"));
278
+ }
279
+ else {
280
+ this.tracker?.activatePhase(designReviewKey);
281
+ this.activePhaseKey = designReviewKey;
282
+ if (designReviewKey !== resumedPhaseKey)
283
+ this.iterationProgress = {};
284
+ designDecisions = await this.reviewStep(designDecisions, "Design Decisions", "Designer is revising decisions…", designReviewKey, saveProgress);
285
+ this.activePhaseKey = null;
286
+ this.iterationProgress = {};
287
+ completedPhases.add(designReviewKey);
288
+ this.tracker?.completePhase(designReviewKey);
289
+ await saveProgress();
290
+ }
291
+ phaseIdx++;
292
+ // Phase 7: Engineering analyst assesses codebase
293
+ const analyzeKey = `plan-analyze-${phaseIdx}`;
294
+ if (completedPhases.has(analyzeKey)) {
295
+ this.logger.info(msg.phaseSkipped("plan-analyze"));
296
+ }
297
+ else {
298
+ this.tracker?.activatePhase(analyzeKey);
299
+ analysis = await this.analyzeCodebase(spec);
300
+ completedPhases.add(analyzeKey);
301
+ this.tracker?.completePhase(analyzeKey);
302
+ await saveProgress();
303
+ }
304
+ phaseIdx++;
305
+ // Assemble full plan
306
+ let plan = `## Refined Requirements\n\n${spec}\n\n` +
307
+ `## Engineering Decisions\n\n${engDecisions}\n\n` +
308
+ `## Design Decisions\n\n${designDecisions}\n\n` +
309
+ `## Technical Analysis\n\n${analysis}`;
310
+ // Phase 8: Cross-model review of the full plan
311
+ if (useCrossModel) {
312
+ const crossKey = `plan-cross-review-${phaseIdx}`;
313
+ if (completedPhases.has(crossKey)) {
314
+ this.logger.info(msg.phaseSkipped("plan-cross-review"));
315
+ }
316
+ else {
317
+ this.tracker?.activatePhase(crossKey);
318
+ this.activePhaseKey = crossKey;
319
+ if (crossKey !== resumedPhaseKey)
320
+ this.iterationProgress = {};
321
+ plan = await this.crossModelReview(plan, crossKey, saveProgress);
322
+ this.activePhaseKey = null;
323
+ this.iterationProgress = {};
324
+ completedPhases.add(crossKey);
325
+ this.tracker?.completePhase(crossKey);
326
+ await saveProgress();
327
+ }
328
+ }
329
+ // Save plan output
72
330
  const timestamp = new Date().toISOString();
73
331
  const fileTimestamp = timestamp.replace(/[:.]/g, "-");
74
- const plan = `# Plan\n\n**Timestamp:** ${timestamp}\n\n` +
75
- `## Original Request\n\n${this.config.issueBody}\n\n` +
76
- `## Refined Requirements\n\n${spec}\n\n` +
77
- `## Technical Analysis\n\n${analysis}\n`;
332
+ const fullPlan = `# Plan\n\n**Timestamp:** ${timestamp}\n\n## Original Request\n\n${effectiveIssueBody}\n\n${plan}\n`;
78
333
  const dir = plansDir(this.config);
79
334
  await fs.mkdir(dir, { recursive: true });
80
335
  const timestampedPath = path.join(dir, `plan-${fileTimestamp}.md`);
81
336
  const latestPath = path.join(dir, "plan-latest.md");
82
- await fs.writeFile(timestampedPath, plan);
337
+ await fs.writeFile(timestampedPath, fullPlan);
83
338
  await fs.copyFile(timestampedPath, latestPath);
339
+ // Clear checkpoint on success
340
+ await clearCheckpoint(this.config);
84
341
  this.logger.info(msg.planningComplete);
85
342
  this.logger.info(msg.planSaved(path.relative(this.config.repoRoot, timestampedPath)));
86
343
  this.logger.info(`📌 Latest plan: ${path.relative(this.config.repoRoot, latestPath)}`);
87
344
  this.logger.info(`\n💡 Run the pipeline with: swarm --plan ${path.relative(this.config.repoRoot, latestPath)}`);
88
345
  }
89
- async clarifyRequirements() {
346
+ /**
347
+ * Review a plan section with a reviewer agent. If issues found, send feedback
348
+ * back to the original agent (via isolated session) for revision.
349
+ */
350
+ async reviewStep(content, sectionName, reviseSpinner, phaseKey, saveProgress) {
351
+ this.logger.info(msg.planningReviewPhase(sectionName));
352
+ let revised = content;
353
+ // Resume: skip completed iterations
354
+ const progress = this.iterationProgress[phaseKey];
355
+ let startIteration = 1;
356
+ if (progress) {
357
+ revised = progress.content;
358
+ startIteration = progress.completedIterations + 1;
359
+ this.logger.info(msg.iterationResumed(progress.completedIterations, MAX_REVIEW_ITERATIONS));
360
+ }
361
+ for (let i = startIteration; i <= MAX_REVIEW_ITERATIONS; i++) {
362
+ this.logger.info(msg.planReviewIteration(i, MAX_REVIEW_ITERATIONS));
363
+ const feedback = await this.sessions.callIsolatedWithInstructions(STEP_REVIEWER_INSTRUCTIONS, `Review this "${sectionName}" section of a project plan:\n\n${revised}`, `Reviewing ${sectionName} (${i}/${MAX_REVIEW_ITERATIONS})…`);
364
+ if (responseContains(feedback, PLAN_APPROVED_KEYWORD)) {
365
+ this.logger.info(msg.planReviewApproved(sectionName));
366
+ break;
367
+ }
368
+ this.logger.info(msg.planReviewFeedback(feedback.substring(0, 80)));
369
+ // Have the original role revise based on feedback
370
+ const revision = await this.sessions.callIsolatedWithInstructions(`You are the author of a "${sectionName}" section in a project plan. ` +
371
+ "A reviewer has provided feedback. Revise the section to address all issues.\n\n" +
372
+ "**CRITICAL:** Output the COMPLETE revised section — every requirement, criterion, " +
373
+ "and detail. Do NOT output a summary, changelog, or description of your changes. " +
374
+ "The output must be the full section content, ready to replace the original.", `Original section:\n\n${revised}\n\nReviewer feedback:\n\n${feedback}\n\nRevise the section to address all feedback. Output the COMPLETE revised section.`, reviseSpinner);
375
+ // Guard: if revision is suspiciously short, keep original
376
+ if (revision.length >= revised.length * MIN_REVISION_LENGTH_RATIO) {
377
+ revised = revision;
378
+ }
379
+ else {
380
+ this.logger.info(" ⚠️ Revision too short — keeping previous version");
381
+ }
382
+ // Save iteration progress
383
+ this.iterationProgress[phaseKey] = { content: revised, completedIterations: i };
384
+ await saveProgress();
385
+ }
386
+ return revised;
387
+ }
388
+ /**
389
+ * Cross-model review of the full assembled plan using the review model.
390
+ */
391
+ async crossModelReview(plan, phaseKey, saveProgress) {
392
+ this.logger.info(msg.planCrossModelPhase(this.pipeline.reviewModel));
393
+ let revised = plan;
394
+ // Resume: skip completed iterations
395
+ const progress = this.iterationProgress[phaseKey];
396
+ let startIteration = 1;
397
+ if (progress) {
398
+ revised = progress.content;
399
+ startIteration = progress.completedIterations + 1;
400
+ this.logger.info(msg.iterationResumed(progress.completedIterations, MAX_REVIEW_ITERATIONS));
401
+ }
402
+ for (let i = startIteration; i <= MAX_REVIEW_ITERATIONS; i++) {
403
+ this.logger.info(msg.planReviewIteration(i, MAX_REVIEW_ITERATIONS));
404
+ const feedback = await this.sessions.callIsolatedWithInstructions(CROSS_MODEL_PLAN_REVIEWER_INSTRUCTIONS, `Review this complete project plan:\n\n${revised}`, `Cross-model review (${this.pipeline.reviewModel}, ${i}/${MAX_REVIEW_ITERATIONS})…`, this.pipeline.reviewModel);
405
+ if (responseContains(feedback, PLAN_APPROVED_KEYWORD)) {
406
+ this.logger.info(msg.planCrossModelApproved);
407
+ break;
408
+ }
409
+ this.logger.info(msg.planReviewFeedback(feedback.substring(0, 80)));
410
+ // Revise with the primary model
411
+ const revision = await this.sessions.callIsolatedWithInstructions("You are revising a project plan based on feedback from a cross-model reviewer. " +
412
+ "Address all issues raised.\n\n" +
413
+ "**CRITICAL:** Output the COMPLETE revised plan with ALL sections preserved:\n" +
414
+ "## Refined Requirements\n## Engineering Decisions\n## Design Decisions\n## Technical Analysis\n\n" +
415
+ "Do NOT output a summary, changelog, or description of your changes. " +
416
+ "The output must be the full plan document, ready to replace the original.", `Current plan:\n\n${revised}\n\nCross-model reviewer feedback:\n\n${feedback}\n\nRevise the plan. Output the COMPLETE plan with all sections.`, "Revising plan…");
417
+ // Guard: verify the revision preserves plan structure
418
+ const hasAllSections = PLAN_SECTION_HEADERS.every((h) => revision.includes(h));
419
+ const isLongEnough = revision.length >= revised.length * MIN_REVISION_LENGTH_RATIO;
420
+ if (hasAllSections && isLongEnough) {
421
+ revised = revision;
422
+ }
423
+ else {
424
+ this.logger.info(" ⚠️ Revision lost plan structure — keeping previous version");
425
+ }
426
+ // Save iteration progress
427
+ this.iterationProgress[phaseKey] = { content: revised, completedIterations: i };
428
+ await saveProgress();
429
+ }
430
+ return revised;
431
+ }
432
+ async clarifyRequirements(issueBody) {
90
433
  this.logger.info(msg.planningPmPhase);
91
434
  const session = await this.sessions.createSessionWithInstructions(PLANNER_INSTRUCTIONS);
92
435
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
93
436
  try {
94
- let response = await this.sessions.send(session, `Here is the user's request:\n\n${this.config.issueBody}\n\n` +
437
+ let response = await this.sessions.send(session, `Here is the user's request:\n\n${issueBody}\n\n` +
95
438
  "Analyze this request. If it's clear enough, respond with REQUIREMENTS_CLEAR followed by the structured summary. " +
96
439
  "If you need more information, ask your clarifying questions.", "PM is analyzing requirements…");
97
440
  for (let round = 0; round < MAX_CLARIFICATION_ROUNDS; round++) {
@@ -126,6 +469,46 @@ export class PlanningEngine {
126
469
  await session.destroy();
127
470
  }
128
471
  }
472
+ /**
473
+ * Generic interactive clarification round for any role.
474
+ * The agent asks questions, user answers, until the agent signals the keyword.
475
+ */
476
+ async clarifyWithRole(instructions, clearKeyword, spec, spinnerLabel, phaseLabel) {
477
+ this.logger.info(phaseLabel);
478
+ const session = await this.sessions.createSessionWithInstructions(instructions);
479
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
480
+ try {
481
+ let response = await this.sessions.send(session, `Here are the refined requirements:\n\n${spec}\n\n` +
482
+ `Review these requirements from your perspective. If everything is clear, respond with ${clearKeyword} followed by your summary. ` +
483
+ "If you need more information, ask your clarifying questions.", spinnerLabel);
484
+ for (let round = 0; round < MAX_CLARIFICATION_ROUNDS; round++) {
485
+ if (responseContains(response, clearKeyword)) {
486
+ break;
487
+ }
488
+ this.renderer?.pause();
489
+ console.log(`\n${response}`);
490
+ const answer = await this.readMultiLineInput(rl);
491
+ this.renderer?.resume();
492
+ if (!answer.trim()) {
493
+ response = await this.sessions.send(session, `The user skipped this round. Use your best judgment for any open questions and produce your final summary. Respond with ${clearKeyword} followed by the summary.`, spinnerLabel);
494
+ }
495
+ else {
496
+ response = await this.sessions.send(session, `User's answers:\n\n${answer}`, spinnerLabel);
497
+ }
498
+ }
499
+ const idx = response.toUpperCase().indexOf(clearKeyword);
500
+ const result = idx !== -1 ? response.substring(idx + clearKeyword.length).trim() : response;
501
+ this.renderer?.pause();
502
+ console.log(`\n${phaseLabel}\n`);
503
+ console.log(result);
504
+ this.renderer?.resume();
505
+ return result;
506
+ }
507
+ finally {
508
+ rl.close();
509
+ await session.destroy();
510
+ }
511
+ }
129
512
  /**
130
513
  * Reads multi-line input from the user. Lines are collected until the user
131
514
  * submits an empty line (presses Enter twice). Literal `\n` sequences typed
@@ -1 +1 @@
1
- {"version":3,"file":"planning-engine.js","sourceRoot":"","sources":["../src/planning-engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"planning-engine.js","sourceRoot":"","sources":["../src/planning-engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress-tracker.d.ts","sourceRoot":"","sources":["../src/progress-tracker.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9G,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAClC;AAgBD,qBAAa,eAAe;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,OAAO,EAAE,UAAU,EAAE,CAAM;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,SAAS,SAAc;IACvB,IAAI,EAAE,QAAQ,EAAE,CAAM;IACtB,KAAK,SAAM;IAEX,UAAU,CAAC,YAAY,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI;IAQ5D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMhC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMhC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM5B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IASlC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAMvD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI1C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,QAAQ,CAAC,OAAO,CAAU,GAAG,IAAI;IAOhE,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;CACF"}
1
+ {"version":3,"file":"progress-tracker.d.ts","sourceRoot":"","sources":["../src/progress-tracker.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE9G,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAClC;AAoBD,qBAAa,eAAe;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,OAAO,EAAE,UAAU,EAAE,CAAM;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,SAAS,SAAc;IACvB,IAAI,EAAE,QAAQ,EAAE,CAAM;IACtB,KAAK,SAAM;IAEX,UAAU,CAAC,YAAY,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI;IAQ5D,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMhC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMhC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM5B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IASlC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAMvD,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI1C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,QAAQ,CAAC,OAAO,CAAU,GAAG,IAAI;IAOhE,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;CACF"}
@@ -5,6 +5,10 @@ const PHASE_NAMES = {
5
5
  implement: "Implementation",
6
6
  "cross-model-review": "Cross-Model Review",
7
7
  "plan-clarify": "Requirements Clarification",
8
+ "plan-eng-clarify": "Engineer Clarification",
9
+ "plan-design-clarify": "Designer Clarification",
10
+ "plan-review": "Plan Review",
11
+ "plan-cross-review": "Cross-Model Review",
8
12
  "plan-analyze": "Technical Analysis",
9
13
  "analyze-architect": "Architecture Analysis",
10
14
  "analyze-review": "Peer Review",
@@ -1 +1 @@
1
- {"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../src/progress-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../src/progress-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Interactive multi-line text editor for the terminal.
3
+ * Uses raw stdin mode with ANSI rendering — no external dependencies.
4
+ * Arrow keys to navigate, Enter for newlines, Ctrl+Enter (or Ctrl+D) to submit, Esc to cancel.
5
+ */
6
+ export declare function openTextarea(): Promise<string | undefined>;
7
+ //# sourceMappingURL=textarea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../src/textarea.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuJhE"}