@copilot-swarm/core 0.0.9 → 0.0.11
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.
- package/dist/analysis-engine.d.ts +2 -0
- package/dist/analysis-engine.d.ts.map +1 -1
- package/dist/analysis-engine.js +133 -34
- package/dist/analysis-engine.js.map +1 -1
- package/dist/checkpoint.d.ts +8 -0
- package/dist/checkpoint.d.ts.map +1 -1
- package/dist/checkpoint.js.map +1 -1
- package/dist/checkpoint.test.js +62 -0
- package/dist/checkpoint.test.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +30 -4
- package/dist/config.js.map +1 -1
- package/dist/github-issue.d.ts +6 -0
- package/dist/github-issue.d.ts.map +1 -0
- package/dist/github-issue.js +51 -0
- package/dist/github-issue.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/planning-engine.d.ts +2 -0
- package/dist/planning-engine.d.ts.map +1 -1
- package/dist/planning-engine.js +227 -37
- package/dist/planning-engine.js.map +1 -1
- package/dist/textarea.d.ts +7 -0
- package/dist/textarea.d.ts.map +1 -0
- package/dist/textarea.js +156 -0
- package/dist/textarea.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export declare class PlanningEngine {
|
|
|
10
10
|
private readonly tracker?;
|
|
11
11
|
private readonly renderer?;
|
|
12
12
|
private readonly sessions;
|
|
13
|
+
private activePhaseKey;
|
|
14
|
+
private iterationProgress;
|
|
13
15
|
constructor(config: SwarmConfig, pipeline: PipelineConfig, logger: Logger, tracker?: ProgressTracker | undefined, renderer?: TuiRenderer | undefined);
|
|
14
16
|
start(): Promise<void>;
|
|
15
17
|
stop(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planning-engine.d.ts","sourceRoot":"","sources":["../src/planning-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"planning-engine.d.ts","sourceRoot":"","sources":["../src/planning-engine.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAkHrD,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAT5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,iBAAiB,CAAyC;gBAG/C,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,YAAA,EACzB,QAAQ,CAAC,EAAE,WAAW,YAAA;IAKnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA2P9B;;;OAGG;YACW,UAAU;IA6DxB;;OAEG;YACW,gBAAgB;YA2DhB,mBAAmB;IA2DjC;;;OAGG;YACW,eAAe;IAyD7B;;;;OAIG;YACW,kBAAkB;YAqBlB,eAAe;CAqB9B"}
|
package/dist/planning-engine.js
CHANGED
|
@@ -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";
|
|
@@ -98,6 +99,15 @@ You are a different AI model from the one that produced this plan. Your fresh pe
|
|
|
98
99
|
3. Decision:
|
|
99
100
|
- If the plan is ready for implementation, respond with **PLAN_APPROVED**.
|
|
100
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;
|
|
101
111
|
export class PlanningEngine {
|
|
102
112
|
config;
|
|
103
113
|
pipeline;
|
|
@@ -105,6 +115,8 @@ export class PlanningEngine {
|
|
|
105
115
|
tracker;
|
|
106
116
|
renderer;
|
|
107
117
|
sessions;
|
|
118
|
+
activePhaseKey = null;
|
|
119
|
+
iterationProgress = {};
|
|
108
120
|
constructor(config, pipeline, logger, tracker, renderer) {
|
|
109
121
|
this.config = config;
|
|
110
122
|
this.pipeline = pipeline;
|
|
@@ -135,41 +147,160 @@ export class PlanningEngine {
|
|
|
135
147
|
phases.push({ phase: "plan-cross-review" });
|
|
136
148
|
}
|
|
137
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
|
+
};
|
|
138
198
|
let phaseIdx = 0;
|
|
139
199
|
// Phase 1: PM clarifies requirements interactively
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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
|
+
}
|
|
143
211
|
phaseIdx++;
|
|
144
212
|
// Phase 2: Review PM output
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
+
}
|
|
148
229
|
phaseIdx++;
|
|
149
230
|
// Phase 3: Engineer clarifies technical questions
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
+
}
|
|
153
242
|
phaseIdx++;
|
|
154
243
|
// Phase 4: Review engineer output
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
+
}
|
|
158
260
|
phaseIdx++;
|
|
159
261
|
// Phase 5: Designer clarifies UI/UX
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
+
}
|
|
163
273
|
phaseIdx++;
|
|
164
274
|
// Phase 6: Review designer output
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
+
}
|
|
168
291
|
phaseIdx++;
|
|
169
292
|
// Phase 7: Engineering analyst assesses codebase
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
+
}
|
|
173
304
|
phaseIdx++;
|
|
174
305
|
// Assemble full plan
|
|
175
306
|
let plan = `## Refined Requirements\n\n${spec}\n\n` +
|
|
@@ -178,20 +309,35 @@ export class PlanningEngine {
|
|
|
178
309
|
`## Technical Analysis\n\n${analysis}`;
|
|
179
310
|
// Phase 8: Cross-model review of the full plan
|
|
180
311
|
if (useCrossModel) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
+
}
|
|
184
328
|
}
|
|
185
|
-
// Save
|
|
329
|
+
// Save plan output
|
|
186
330
|
const timestamp = new Date().toISOString();
|
|
187
331
|
const fileTimestamp = timestamp.replace(/[:.]/g, "-");
|
|
188
|
-
const fullPlan = `# Plan\n\n**Timestamp:** ${timestamp}\n\n## Original Request\n\n${
|
|
332
|
+
const fullPlan = `# Plan\n\n**Timestamp:** ${timestamp}\n\n## Original Request\n\n${effectiveIssueBody}\n\n${plan}\n`;
|
|
189
333
|
const dir = plansDir(this.config);
|
|
190
334
|
await fs.mkdir(dir, { recursive: true });
|
|
191
335
|
const timestampedPath = path.join(dir, `plan-${fileTimestamp}.md`);
|
|
192
336
|
const latestPath = path.join(dir, "plan-latest.md");
|
|
193
337
|
await fs.writeFile(timestampedPath, fullPlan);
|
|
194
338
|
await fs.copyFile(timestampedPath, latestPath);
|
|
339
|
+
// Clear checkpoint on success
|
|
340
|
+
await clearCheckpoint(this.config);
|
|
195
341
|
this.logger.info(msg.planningComplete);
|
|
196
342
|
this.logger.info(msg.planSaved(path.relative(this.config.repoRoot, timestampedPath)));
|
|
197
343
|
this.logger.info(`📌 Latest plan: ${path.relative(this.config.repoRoot, latestPath)}`);
|
|
@@ -201,10 +347,18 @@ export class PlanningEngine {
|
|
|
201
347
|
* Review a plan section with a reviewer agent. If issues found, send feedback
|
|
202
348
|
* back to the original agent (via isolated session) for revision.
|
|
203
349
|
*/
|
|
204
|
-
async reviewStep(content, sectionName, reviseSpinner) {
|
|
350
|
+
async reviewStep(content, sectionName, reviseSpinner, phaseKey, saveProgress) {
|
|
205
351
|
this.logger.info(msg.planningReviewPhase(sectionName));
|
|
206
352
|
let revised = content;
|
|
207
|
-
|
|
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++) {
|
|
208
362
|
this.logger.info(msg.planReviewIteration(i, MAX_REVIEW_ITERATIONS));
|
|
209
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})…`);
|
|
210
364
|
if (responseContains(feedback, PLAN_APPROVED_KEYWORD)) {
|
|
@@ -213,19 +367,39 @@ export class PlanningEngine {
|
|
|
213
367
|
}
|
|
214
368
|
this.logger.info(msg.planReviewFeedback(feedback.substring(0, 80)));
|
|
215
369
|
// Have the original role revise based on feedback
|
|
216
|
-
|
|
217
|
-
"A reviewer has provided feedback. Revise the section to address all issues
|
|
218
|
-
"Output
|
|
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();
|
|
219
385
|
}
|
|
220
386
|
return revised;
|
|
221
387
|
}
|
|
222
388
|
/**
|
|
223
389
|
* Cross-model review of the full assembled plan using the review model.
|
|
224
390
|
*/
|
|
225
|
-
async crossModelReview(plan) {
|
|
391
|
+
async crossModelReview(plan, phaseKey, saveProgress) {
|
|
226
392
|
this.logger.info(msg.planCrossModelPhase(this.pipeline.reviewModel));
|
|
227
393
|
let revised = plan;
|
|
228
|
-
|
|
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++) {
|
|
229
403
|
this.logger.info(msg.planReviewIteration(i, MAX_REVIEW_ITERATIONS));
|
|
230
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);
|
|
231
405
|
if (responseContains(feedback, PLAN_APPROVED_KEYWORD)) {
|
|
@@ -234,17 +408,33 @@ export class PlanningEngine {
|
|
|
234
408
|
}
|
|
235
409
|
this.logger.info(msg.planReviewFeedback(feedback.substring(0, 80)));
|
|
236
410
|
// Revise with the primary model
|
|
237
|
-
|
|
238
|
-
"Address all issues raised
|
|
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();
|
|
239
429
|
}
|
|
240
430
|
return revised;
|
|
241
431
|
}
|
|
242
|
-
async clarifyRequirements() {
|
|
432
|
+
async clarifyRequirements(issueBody) {
|
|
243
433
|
this.logger.info(msg.planningPmPhase);
|
|
244
434
|
const session = await this.sessions.createSessionWithInstructions(PLANNER_INSTRUCTIONS);
|
|
245
435
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
246
436
|
try {
|
|
247
|
-
let response = await this.sessions.send(session, `Here is the user's request:\n\n${
|
|
437
|
+
let response = await this.sessions.send(session, `Here is the user's request:\n\n${issueBody}\n\n` +
|
|
248
438
|
"Analyze this request. If it's clear enough, respond with REQUIREMENTS_CLEAR followed by the structured summary. " +
|
|
249
439
|
"If you need more information, ask your clarifying questions.", "PM is analyzing requirements…");
|
|
250
440
|
for (let round = 0; round < MAX_CLARIFICATION_ROUNDS; round++) {
|
|
@@ -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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"}
|
|
@@ -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"}
|
package/dist/textarea.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
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
|
+
const TITLE = " Task Description ";
|
|
7
|
+
const FOOTER_HINT = " Ctrl+Enter submit │ Esc cancel ";
|
|
8
|
+
export async function openTextarea() {
|
|
9
|
+
if (!process.stdin.isTTY)
|
|
10
|
+
return undefined;
|
|
11
|
+
const cols = process.stdout.columns || 80;
|
|
12
|
+
const rows = process.stdout.rows || 24;
|
|
13
|
+
const editorHeight = Math.max(5, rows - 4);
|
|
14
|
+
const innerWidth = cols - 4;
|
|
15
|
+
const lines = [""];
|
|
16
|
+
let curRow = 0;
|
|
17
|
+
let curCol = 0;
|
|
18
|
+
let scroll = 0;
|
|
19
|
+
function clamp() {
|
|
20
|
+
if (curRow < 0)
|
|
21
|
+
curRow = 0;
|
|
22
|
+
if (curRow >= lines.length)
|
|
23
|
+
curRow = lines.length - 1;
|
|
24
|
+
if (curCol < 0)
|
|
25
|
+
curCol = 0;
|
|
26
|
+
if (curCol > lines[curRow].length)
|
|
27
|
+
curCol = lines[curRow].length;
|
|
28
|
+
if (curRow < scroll)
|
|
29
|
+
scroll = curRow;
|
|
30
|
+
if (curRow >= scroll + editorHeight)
|
|
31
|
+
scroll = curRow - editorHeight + 1;
|
|
32
|
+
}
|
|
33
|
+
function render() {
|
|
34
|
+
const titlePad = Math.max(0, cols - 2 - TITLE.length);
|
|
35
|
+
const top = `┌${TITLE}${"─".repeat(titlePad)}┐`;
|
|
36
|
+
const footerPad = Math.max(0, cols - 2 - FOOTER_HINT.length);
|
|
37
|
+
const bottom = `└${"─".repeat(footerPad)}${FOOTER_HINT}┘`;
|
|
38
|
+
process.stdout.write("\x1b[2J\x1b[1;1H");
|
|
39
|
+
process.stdout.write(`${top}\n`);
|
|
40
|
+
for (let i = 0; i < editorHeight; i++) {
|
|
41
|
+
const idx = scroll + i;
|
|
42
|
+
const text = idx < lines.length ? lines[idx] : "";
|
|
43
|
+
const display = text.substring(0, innerWidth);
|
|
44
|
+
const pad = Math.max(0, innerWidth - display.length);
|
|
45
|
+
process.stdout.write(`│ ${display}${" ".repeat(pad)} │\n`);
|
|
46
|
+
}
|
|
47
|
+
process.stdout.write(bottom);
|
|
48
|
+
const screenRow = 2 + (curRow - scroll);
|
|
49
|
+
const screenCol = 3 + curCol;
|
|
50
|
+
process.stdout.write(`\x1b[${screenRow};${screenCol}H`);
|
|
51
|
+
}
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
process.stdout.write("\x1b[?1049h"); // alternate screen
|
|
54
|
+
process.stdout.write("\x1b[?25h"); // show cursor
|
|
55
|
+
process.stdin.setRawMode(true);
|
|
56
|
+
process.stdin.resume();
|
|
57
|
+
process.stdin.setEncoding("utf-8");
|
|
58
|
+
render();
|
|
59
|
+
function cleanup(result) {
|
|
60
|
+
process.stdin.removeListener("data", onData);
|
|
61
|
+
process.stdin.setRawMode(false);
|
|
62
|
+
process.stdin.pause();
|
|
63
|
+
process.stdout.write("\x1b[?1049l"); // leave alternate screen
|
|
64
|
+
resolve(result);
|
|
65
|
+
}
|
|
66
|
+
function onData(data) {
|
|
67
|
+
for (let i = 0; i < data.length; i++) {
|
|
68
|
+
const ch = data.charCodeAt(i);
|
|
69
|
+
// Ctrl+C — cancel
|
|
70
|
+
if (ch === 3) {
|
|
71
|
+
cleanup(undefined);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Ctrl+D (4) or LF (10, Ctrl+Enter in most terminals) — submit
|
|
75
|
+
if (ch === 4 || ch === 10) {
|
|
76
|
+
const text = lines.join("\n").trim();
|
|
77
|
+
cleanup(text || undefined);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Escape / escape sequences
|
|
81
|
+
if (ch === 27) {
|
|
82
|
+
if (i + 2 < data.length && data.charCodeAt(i + 1) === 91) {
|
|
83
|
+
const code = data.charCodeAt(i + 2);
|
|
84
|
+
if (code === 65)
|
|
85
|
+
curRow--;
|
|
86
|
+
else if (code === 66)
|
|
87
|
+
curRow++;
|
|
88
|
+
else if (code === 67)
|
|
89
|
+
curCol++;
|
|
90
|
+
else if (code === 68)
|
|
91
|
+
curCol--;
|
|
92
|
+
else if (code === 72)
|
|
93
|
+
curCol = 0;
|
|
94
|
+
else if (code === 70)
|
|
95
|
+
curCol = lines[curRow].length;
|
|
96
|
+
else if (code === 51 && i + 3 < data.length && data.charCodeAt(i + 3) === 126) {
|
|
97
|
+
// Delete key
|
|
98
|
+
if (curCol < lines[curRow].length) {
|
|
99
|
+
lines[curRow] = lines[curRow].substring(0, curCol) + lines[curRow].substring(curCol + 1);
|
|
100
|
+
}
|
|
101
|
+
else if (curRow < lines.length - 1) {
|
|
102
|
+
lines[curRow] += lines[curRow + 1];
|
|
103
|
+
lines.splice(curRow + 1, 1);
|
|
104
|
+
}
|
|
105
|
+
i++;
|
|
106
|
+
}
|
|
107
|
+
i += 2;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Plain Escape — cancel
|
|
111
|
+
cleanup(undefined);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
clamp();
|
|
115
|
+
render();
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// Enter (CR) — new line
|
|
119
|
+
if (ch === 13) {
|
|
120
|
+
const after = lines[curRow].substring(curCol);
|
|
121
|
+
lines[curRow] = lines[curRow].substring(0, curCol);
|
|
122
|
+
lines.splice(curRow + 1, 0, after);
|
|
123
|
+
curRow++;
|
|
124
|
+
curCol = 0;
|
|
125
|
+
clamp();
|
|
126
|
+
render();
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// Backspace
|
|
130
|
+
if (ch === 127) {
|
|
131
|
+
if (curCol > 0) {
|
|
132
|
+
lines[curRow] = lines[curRow].substring(0, curCol - 1) + lines[curRow].substring(curCol);
|
|
133
|
+
curCol--;
|
|
134
|
+
}
|
|
135
|
+
else if (curRow > 0) {
|
|
136
|
+
curCol = lines[curRow - 1].length;
|
|
137
|
+
lines[curRow - 1] += lines[curRow];
|
|
138
|
+
lines.splice(curRow, 1);
|
|
139
|
+
curRow--;
|
|
140
|
+
}
|
|
141
|
+
clamp();
|
|
142
|
+
render();
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
// Printable characters (ASCII + Unicode)
|
|
146
|
+
if (ch >= 32) {
|
|
147
|
+
lines[curRow] = lines[curRow].substring(0, curCol) + data[i] + lines[curRow].substring(curCol);
|
|
148
|
+
curCol++;
|
|
149
|
+
render();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
process.stdin.on("data", onData);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=textarea.js.map
|