opencastle 0.32.7 → 0.32.9
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/cli/convoy/spec-builder.d.ts +5 -0
- package/dist/cli/convoy/spec-builder.d.ts.map +1 -1
- package/dist/cli/convoy/spec-builder.js +39 -0
- package/dist/cli/convoy/spec-builder.js.map +1 -1
- package/dist/cli/pipeline.d.ts.map +1 -1
- package/dist/cli/pipeline.js +252 -100
- package/dist/cli/pipeline.js.map +1 -1
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +5 -3
- package/dist/cli/plan.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/convoy/spec-builder.ts +38 -0
- package/src/cli/pipeline.ts +289 -111
- package/src/cli/plan.ts +5 -3
- package/src/dashboard/dist/data/convoys/demo-api-v2.json +3 -3
- package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +4 -4
- package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +12 -12
- package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +3 -3
- package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +1 -1
- package/src/dashboard/dist/data/convoys/demo-docs-update.json +3 -3
- package/src/dashboard/dist/data/convoys/demo-perf-opt.json +10 -10
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/dashboard/public/data/convoys/demo-api-v2.json +3 -3
- package/src/dashboard/public/data/convoys/demo-auth-revamp.json +4 -4
- package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +12 -12
- package/src/dashboard/public/data/convoys/demo-data-pipeline.json +3 -3
- package/src/dashboard/public/data/convoys/demo-deploy-ci.json +1 -1
- package/src/dashboard/public/data/convoys/demo-docs-update.json +3 -3
- package/src/dashboard/public/data/convoys/demo-perf-opt.json +10 -10
- package/src/orchestrator/prompts/fix-prd.prompt.md +4 -9
- package/src/orchestrator/prompts/generate-convoy.prompt.md +1 -0
- package/src/orchestrator/prompts/generate-prd.prompt.md +29 -0
- package/src/orchestrator/prompts/validate-prd.prompt.md +14 -37
|
@@ -58,6 +58,11 @@ export declare function buildConvoyYaml(plan: TaskPlan, enrichment?: SpecEnrichm
|
|
|
58
58
|
* Applies an array of patches to a task plan. Returns a new TaskPlan (immutable).
|
|
59
59
|
*/
|
|
60
60
|
export declare function applyPatches(plan: TaskPlan, patches: TaskPatch[]): TaskPlan;
|
|
61
|
+
/**
|
|
62
|
+
* Detects whether a JSON string appears to be truncated (output cut off mid-generation).
|
|
63
|
+
* Returns a descriptive reason string, or null if the JSON looks complete.
|
|
64
|
+
*/
|
|
65
|
+
export declare function detectJsonTruncation(jsonText: string): string | null;
|
|
61
66
|
/**
|
|
62
67
|
* Parses a JSON string into a TaskPlan. Returns null if parsing fails or required fields are missing.
|
|
63
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../../../src/cli/convoy/spec-builder.ts"],"names":[],"mappings":"AAGA,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;IAChC,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf;AASD,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IAC5B,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IACjD,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE;IAC/C,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,GAAG,cAAc,CA2CjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,MAAM,CAiEnF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,QAAQ,CAoB3E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../../../src/cli/convoy/spec-builder.ts"],"names":[],"mappings":"AAGA,6FAA6F;AAC7F,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;CAClD;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;IAChC,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf;AASD,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IAC5B,eAAe,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAA;IACjD,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE;IAC/C,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,GAAG,cAAc,CA2CjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,cAAc,GAAG,MAAM,CAiEnF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,QAAQ,CAoB3E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA8E/D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CAcjE"}
|
|
@@ -153,10 +153,49 @@ export function applyPatches(plan, patches) {
|
|
|
153
153
|
}
|
|
154
154
|
return clone;
|
|
155
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Detects whether a JSON string appears to be truncated (output cut off mid-generation).
|
|
158
|
+
* Returns a descriptive reason string, or null if the JSON looks complete.
|
|
159
|
+
*/
|
|
160
|
+
export function detectJsonTruncation(jsonText) {
|
|
161
|
+
const trimmed = jsonText.trim();
|
|
162
|
+
if (!trimmed)
|
|
163
|
+
return 'empty output';
|
|
164
|
+
// Count open/close braces and brackets
|
|
165
|
+
let braces = 0;
|
|
166
|
+
let brackets = 0;
|
|
167
|
+
let inString = false;
|
|
168
|
+
let prevChar = '';
|
|
169
|
+
for (const ch of trimmed) {
|
|
170
|
+
if (ch === '"' && prevChar !== '\\') {
|
|
171
|
+
inString = !inString;
|
|
172
|
+
}
|
|
173
|
+
else if (!inString) {
|
|
174
|
+
if (ch === '{')
|
|
175
|
+
braces++;
|
|
176
|
+
else if (ch === '}')
|
|
177
|
+
braces--;
|
|
178
|
+
else if (ch === '[')
|
|
179
|
+
brackets++;
|
|
180
|
+
else if (ch === ']')
|
|
181
|
+
brackets--;
|
|
182
|
+
}
|
|
183
|
+
prevChar = ch;
|
|
184
|
+
}
|
|
185
|
+
if (braces > 0 || brackets > 0) {
|
|
186
|
+
return `output truncated (${braces} unclosed braces, ${brackets} unclosed brackets) — the LLM likely hit its output token limit`;
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
156
190
|
/**
|
|
157
191
|
* Parses a JSON string into a TaskPlan. Returns null if parsing fails or required fields are missing.
|
|
158
192
|
*/
|
|
159
193
|
export function parseTaskPlan(jsonText) {
|
|
194
|
+
const truncation = detectJsonTruncation(jsonText);
|
|
195
|
+
if (truncation) {
|
|
196
|
+
console.warn(` ⚠ parseTaskPlan: ${truncation}`);
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
160
199
|
try {
|
|
161
200
|
const parsed = JSON.parse(jsonText.trim());
|
|
162
201
|
if (!parsed || typeof parsed.name !== 'string')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-builder.js","sourceRoot":"","sources":["../../../src/cli/convoy/spec-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spec-builder.js","sourceRoot":"","sources":["../../../src/cli/convoy/spec-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/cli/pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/cli/pipeline.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AA+GD,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,0BAA0B,CAAC,EAAE,MAAM,CAAA;IACnC,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;IACrC,oBAAoB,EAAE,QAAQ,GAAG,OAAO,CAAA;IACxC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,WAAW,EAAE,CAAA;IAC5B,eAAe,CAAC,EAAE,KAAK,CAAC;QACtB,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;QAClC,SAAS,EAAE,MAAM,CAAA;KAClB,CAAC,CAAA;CACH;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAmBvF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,oBAAoB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6E7G;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAsC1E;AA+LD,wBAA8B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA4WnF"}
|
package/dist/cli/pipeline.js
CHANGED
|
@@ -6,7 +6,7 @@ import { c, confirm, closePrompts } from './prompt.js';
|
|
|
6
6
|
import { runPromptStep, readProjectMcpServers } from './plan.js';
|
|
7
7
|
import { cleanupAdapters } from './run/adapters/index.js';
|
|
8
8
|
import { parseYaml, validateSpec } from './run/schema.js';
|
|
9
|
-
import { buildConvoyYaml, parseTaskPlan, parsePatches, applyPatches, deriveSpecEnrichment } from './convoy/spec-builder.js';
|
|
9
|
+
import { buildConvoyYaml, parseTaskPlan, parsePatches, applyPatches, deriveSpecEnrichment, detectJsonTruncation } from './convoy/spec-builder.js';
|
|
10
10
|
function appendTaskComplexity(base, taskComplexity) {
|
|
11
11
|
if (!taskComplexity?.length)
|
|
12
12
|
return base;
|
|
@@ -18,6 +18,89 @@ function appendTaskComplexity(base, taskComplexity) {
|
|
|
18
18
|
}
|
|
19
19
|
return result;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* For chain mode, extract only the PRD sections relevant to the given phases.
|
|
23
|
+
* Keeps Overview, Technical Requirements, and the matching phase sections from
|
|
24
|
+
* Task Breakdown, while trimming the full User Stories, Implementation Scope,
|
|
25
|
+
* and non-matching phases to reduce context size and avoid output truncation.
|
|
26
|
+
*/
|
|
27
|
+
function extractRelevantPrdSections(prdContent, phases) {
|
|
28
|
+
const phaseSet = new Set(phases);
|
|
29
|
+
const lines = prdContent.split('\n');
|
|
30
|
+
const result = [];
|
|
31
|
+
// Sections to always include (key context)
|
|
32
|
+
const alwaysInclude = ['overview', 'goals', 'non-goals', 'technical requirements'];
|
|
33
|
+
// Sections to include condensed
|
|
34
|
+
const condenseSection = ['user stories & acceptance criteria', 'implementation scope', 'success criteria', 'risks & open questions'];
|
|
35
|
+
let currentSection = '';
|
|
36
|
+
let inTaskBreakdown = false;
|
|
37
|
+
let inRelevantPhase = false;
|
|
38
|
+
let skipSection = false;
|
|
39
|
+
for (const line of lines) {
|
|
40
|
+
// Detect heading (## level)
|
|
41
|
+
const h2Match = line.match(/^## (.+)/);
|
|
42
|
+
if (h2Match) {
|
|
43
|
+
const heading = h2Match[1].trim().toLowerCase();
|
|
44
|
+
currentSection = heading;
|
|
45
|
+
inTaskBreakdown = heading === 'task breakdown';
|
|
46
|
+
inRelevantPhase = false;
|
|
47
|
+
skipSection = false;
|
|
48
|
+
if (alwaysInclude.some(s => heading.startsWith(s))) {
|
|
49
|
+
result.push(line);
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (inTaskBreakdown) {
|
|
53
|
+
result.push(line);
|
|
54
|
+
result.push('');
|
|
55
|
+
result.push(`*(Only phases ${phases.join(', ')} shown — other phases omitted for brevity)*`);
|
|
56
|
+
result.push('');
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (condenseSection.some(s => heading.startsWith(s))) {
|
|
60
|
+
// Include the heading but mark as condensed
|
|
61
|
+
result.push(line);
|
|
62
|
+
result.push('');
|
|
63
|
+
result.push('*(Condensed — see full PRD for details)*');
|
|
64
|
+
result.push('');
|
|
65
|
+
skipSection = true;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
// # title heading — always include
|
|
69
|
+
result.push(line);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
// H1 heading — always include
|
|
73
|
+
if (line.match(/^# /)) {
|
|
74
|
+
result.push(line);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (skipSection)
|
|
78
|
+
continue;
|
|
79
|
+
if (inTaskBreakdown) {
|
|
80
|
+
// Detect phase headers like "Phase 1 —" or "Phase 2 —"
|
|
81
|
+
const phaseMatch = line.match(/Phase\s+(\d+)/i);
|
|
82
|
+
if (phaseMatch) {
|
|
83
|
+
const phaseNum = parseInt(phaseMatch[1], 10);
|
|
84
|
+
inRelevantPhase = phaseSet.has(phaseNum);
|
|
85
|
+
}
|
|
86
|
+
if (inRelevantPhase) {
|
|
87
|
+
result.push(line);
|
|
88
|
+
}
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
result.push(line);
|
|
92
|
+
}
|
|
93
|
+
return result.join('\n');
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Filter task complexity entries to only those matching the given phases.
|
|
97
|
+
*/
|
|
98
|
+
function filterTaskComplexityByPhases(taskComplexity, phases) {
|
|
99
|
+
if (!taskComplexity?.length)
|
|
100
|
+
return taskComplexity;
|
|
101
|
+
const phaseSet = new Set(phases);
|
|
102
|
+
return taskComplexity.filter(tc => phaseSet.has(tc.phase));
|
|
103
|
+
}
|
|
21
104
|
export function parseComplexityAssessment(jsonText) {
|
|
22
105
|
try {
|
|
23
106
|
const parsed = JSON.parse(jsonText.trim());
|
|
@@ -266,6 +349,62 @@ function relPath(abs) {
|
|
|
266
349
|
function stepLabel(n, total, name) {
|
|
267
350
|
return c.bold(c.cyan(` [${n}/${total}] ${name}`));
|
|
268
351
|
}
|
|
352
|
+
async function fixPrd(sharedOpts, prdPath, prdContent, initialErrors, totalSteps, adapterFlag) {
|
|
353
|
+
const MAX_PRD_FIX_RETRIES = 2;
|
|
354
|
+
let fixedPrdContent = prdContent;
|
|
355
|
+
let prdValidationErrors = initialErrors;
|
|
356
|
+
let prdFixed = false;
|
|
357
|
+
for (let attempt = 1; attempt <= MAX_PRD_FIX_RETRIES; attempt++) {
|
|
358
|
+
const label = `Fix PRD attempt ${attempt}/${MAX_PRD_FIX_RETRIES}…`;
|
|
359
|
+
console.log(stepLabel(3, totalSteps, label));
|
|
360
|
+
try {
|
|
361
|
+
await runPromptStep({
|
|
362
|
+
...sharedOpts,
|
|
363
|
+
template: 'fix-prd',
|
|
364
|
+
goalText: fixedPrdContent,
|
|
365
|
+
contextText: prdValidationErrors,
|
|
366
|
+
outputPath: prdPath,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
console.error(`\n ✗ Step 3 (attempt ${attempt}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
371
|
+
process.exit(1);
|
|
372
|
+
}
|
|
373
|
+
console.log(c.dim(` Re-validating after fix…`));
|
|
374
|
+
fixedPrdContent = await readFile(prdPath, 'utf8');
|
|
375
|
+
let revalidation;
|
|
376
|
+
try {
|
|
377
|
+
revalidation = await runPromptStep({
|
|
378
|
+
...sharedOpts,
|
|
379
|
+
template: 'validate-prd',
|
|
380
|
+
goalText: `<!-- validation-pass: ${attempt + 1} -->\n${fixedPrdContent}`,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
catch (err) {
|
|
384
|
+
console.error(`\n ✗ Re-validation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
385
|
+
process.exit(1);
|
|
386
|
+
}
|
|
387
|
+
if (revalidation.isValid) {
|
|
388
|
+
console.log(c.green(` ✓ PRD fixed and validated\n`));
|
|
389
|
+
prdFixed = true;
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
prdValidationErrors = revalidation.errors ?? revalidation.rawOutput;
|
|
393
|
+
if (attempt < MAX_PRD_FIX_RETRIES) {
|
|
394
|
+
console.log(c.yellow(` ⚠ Still has issues after fix attempt ${attempt} — retrying…\n`));
|
|
395
|
+
console.log(c.dim(prdValidationErrors));
|
|
396
|
+
console.log();
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
if (!prdFixed) {
|
|
400
|
+
console.log(c.yellow(`\n ⚠ Could not fully auto-fix the PRD after ${MAX_PRD_FIX_RETRIES} attempts — continuing with best-effort PRD.\n`));
|
|
401
|
+
console.log(c.dim(` Remaining issues:\n`));
|
|
402
|
+
console.log(c.dim(prdValidationErrors));
|
|
403
|
+
console.log(c.dim(`\n PRD saved to ${relPath(prdPath)} with best available fixes.`) +
|
|
404
|
+
c.dim(`\n You can re-validate later with:\n`) +
|
|
405
|
+
` opencastle start --prd ${relPath(prdPath)}${adapterFlag ? ` --adapter ${adapterFlag}` : ''}\n`);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
269
408
|
export default async function pipeline({ args, pkgRoot }) {
|
|
270
409
|
const opts = parseArgs(args);
|
|
271
410
|
if (opts.help) {
|
|
@@ -331,92 +470,16 @@ export default async function pipeline({ args, pkgRoot }) {
|
|
|
331
470
|
console.log(c.dim('\n [dry-run] Nothing to preview — PRD already provided via --prd. Remove --dry-run to continue.'));
|
|
332
471
|
return;
|
|
333
472
|
}
|
|
334
|
-
// ──
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
let result;
|
|
339
|
-
try {
|
|
340
|
-
result = await runPromptStep({
|
|
341
|
-
...sharedOpts,
|
|
342
|
-
template: 'validate-prd',
|
|
343
|
-
goalText: `<!-- validation-pass: 1 -->\n${prdContent}`,
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
catch (err) {
|
|
347
|
-
console.error(`\n ✗ Step 2 failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
348
|
-
process.exit(1);
|
|
349
|
-
}
|
|
350
|
-
if (!result.isValid) {
|
|
351
|
-
let prdValidationErrors = result.errors ?? result.rawOutput;
|
|
352
|
-
console.log(c.yellow(` ⚠ PRD has validation issues — attempting auto-fix…\n`));
|
|
353
|
-
console.log(c.dim(prdValidationErrors));
|
|
354
|
-
console.log();
|
|
355
|
-
// ── Step 3: Fix PRD (up to 2 retries) ──────────────────────────────────
|
|
356
|
-
const MAX_PRD_FIX_RETRIES = 2;
|
|
357
|
-
let fixedPrdContent = prdContent;
|
|
358
|
-
let prdFixed = false;
|
|
359
|
-
for (let attempt = 1; attempt <= MAX_PRD_FIX_RETRIES; attempt++) {
|
|
360
|
-
const label = `Fix PRD attempt ${attempt}/${MAX_PRD_FIX_RETRIES}…`;
|
|
361
|
-
console.log(stepLabel(3, totalSteps, label));
|
|
362
|
-
try {
|
|
363
|
-
await runPromptStep({
|
|
364
|
-
...sharedOpts,
|
|
365
|
-
template: 'fix-prd',
|
|
366
|
-
goalText: fixedPrdContent,
|
|
367
|
-
contextText: prdValidationErrors,
|
|
368
|
-
outputPath: prdPath, // overwrite in place
|
|
369
|
-
});
|
|
370
|
-
}
|
|
371
|
-
catch (err) {
|
|
372
|
-
console.error(`\n ✗ Step 3 (attempt ${attempt}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
373
|
-
process.exit(1);
|
|
374
|
-
}
|
|
375
|
-
console.log(c.dim(` Re-validating after fix…`));
|
|
376
|
-
fixedPrdContent = await readFile(prdPath, 'utf8');
|
|
377
|
-
let revalidation;
|
|
378
|
-
try {
|
|
379
|
-
revalidation = await runPromptStep({
|
|
380
|
-
...sharedOpts,
|
|
381
|
-
template: 'validate-prd',
|
|
382
|
-
goalText: `<!-- validation-pass: ${attempt + 1} -->\n${fixedPrdContent}`,
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
catch (err) {
|
|
386
|
-
console.error(`\n ✗ Re-validation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
387
|
-
process.exit(1);
|
|
388
|
-
}
|
|
389
|
-
if (revalidation.isValid) {
|
|
390
|
-
console.log(c.green(` ✓ PRD fixed and validated\n`));
|
|
391
|
-
prdFixed = true;
|
|
392
|
-
break;
|
|
393
|
-
}
|
|
394
|
-
prdValidationErrors = revalidation.errors ?? revalidation.rawOutput;
|
|
395
|
-
if (attempt < MAX_PRD_FIX_RETRIES) {
|
|
396
|
-
console.log(c.yellow(` ⚠ Still has issues after fix attempt ${attempt} — retrying…\n`));
|
|
397
|
-
console.log(c.dim(prdValidationErrors));
|
|
398
|
-
console.log();
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
if (!prdFixed) {
|
|
402
|
-
console.log(c.yellow(`\n ⚠ Could not fully auto-fix the PRD after ${MAX_PRD_FIX_RETRIES} attempts — continuing with best-effort PRD.\n`));
|
|
403
|
-
console.log(c.dim(` Remaining issues:\n`));
|
|
404
|
-
console.log(c.dim(prdValidationErrors));
|
|
405
|
-
console.log(c.dim(`\n PRD saved to ${relPath(prdPath)} with best available fixes.`) +
|
|
406
|
-
c.dim(`\n You can re-validate later with:\n`) +
|
|
407
|
-
` opencastle start --prd ${relPath(prdPath)}${opts.adapter ? ` --adapter ${opts.adapter}` : ''}\n`);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
411
|
-
console.log(c.green(` ✓ PRD is valid\n`));
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
// ── Complexity-aware strategy decision ────────────────────────────────────
|
|
473
|
+
// ── Steps 2 + 4: Validate PRD & Assess complexity (in parallel) ────────
|
|
474
|
+
// Both only read the PRD — run them concurrently to save one LLM round-trip.
|
|
475
|
+
// If validation fails we still use the complexity result (fix-prd patches
|
|
476
|
+
// issues without changing the overall structure/phases).
|
|
415
477
|
const complexityStep = opts.skipValidation ? 2 : 4;
|
|
416
478
|
let complexity = null;
|
|
417
479
|
const complexityFilePath = opts.complexity
|
|
418
480
|
? resolve(process.cwd(), opts.complexity)
|
|
419
481
|
: deriveComplexityPath(prdPath);
|
|
482
|
+
// Check for cached / provided complexity before launching LLM calls
|
|
420
483
|
if (opts.complexity) {
|
|
421
484
|
if (!existsSync(complexityFilePath)) {
|
|
422
485
|
console.error(` ✗ Complexity file not found: ${opts.complexity}`);
|
|
@@ -451,24 +514,103 @@ export default async function pipeline({ args, pkgRoot }) {
|
|
|
451
514
|
// ignore — fall through to LLM assessment
|
|
452
515
|
}
|
|
453
516
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
517
|
+
const needsValidation = !opts.skipValidation;
|
|
518
|
+
const needsComplexity = !complexity;
|
|
519
|
+
if (needsValidation || needsComplexity) {
|
|
520
|
+
const prdContent = await readFile(prdPath, 'utf8');
|
|
521
|
+
// Launch validation and complexity in parallel when both are needed
|
|
522
|
+
if (needsValidation && needsComplexity) {
|
|
523
|
+
console.log(stepLabel(2, totalSteps, 'Validating PRD…'));
|
|
524
|
+
console.log(stepLabel(complexityStep, totalSteps, 'Assessing complexity…'));
|
|
525
|
+
console.log(c.dim(` (running in parallel)\n`));
|
|
526
|
+
const [validationResult, complexityResult] = await Promise.all([
|
|
527
|
+
runPromptStep({
|
|
528
|
+
...sharedOpts,
|
|
529
|
+
template: 'validate-prd',
|
|
530
|
+
goalText: `<!-- validation-pass: 1 -->\n${prdContent}`,
|
|
531
|
+
}).catch((err) => {
|
|
532
|
+
console.error(`\n ✗ Validation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
533
|
+
return null;
|
|
534
|
+
}),
|
|
535
|
+
runPromptStep({
|
|
536
|
+
...sharedOpts,
|
|
537
|
+
template: 'assess-complexity',
|
|
538
|
+
filePath: prdPath,
|
|
539
|
+
contextText: opts.text ?? undefined,
|
|
540
|
+
}).catch((err) => {
|
|
541
|
+
console.warn(c.yellow(` ⚠ Complexity assessment failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
542
|
+
return null;
|
|
543
|
+
}),
|
|
544
|
+
]);
|
|
545
|
+
// Process complexity result
|
|
546
|
+
if (complexityResult) {
|
|
547
|
+
complexity = parseComplexityAssessment(complexityResult.rawOutput);
|
|
548
|
+
if (complexity) {
|
|
549
|
+
await writeFile(complexityFilePath, JSON.stringify(complexity, null, 2), 'utf8');
|
|
550
|
+
console.log(c.green(` ✓ Complexity assessment saved to ${relPath(complexityFilePath)}`));
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
// Process validation result
|
|
554
|
+
if (!validationResult) {
|
|
555
|
+
process.exit(1);
|
|
556
|
+
}
|
|
557
|
+
if (!validationResult.isValid) {
|
|
558
|
+
let prdValidationErrors = validationResult.errors ?? validationResult.rawOutput;
|
|
559
|
+
console.log(c.yellow(` ⚠ PRD has validation issues — attempting auto-fix…\n`));
|
|
560
|
+
console.log(c.dim(prdValidationErrors));
|
|
561
|
+
console.log();
|
|
562
|
+
await fixPrd(sharedOpts, prdPath, prdContent, prdValidationErrors, totalSteps, opts.adapter);
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
console.log(c.green(` ✓ PRD is valid\n`));
|
|
467
566
|
}
|
|
468
567
|
}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
console.
|
|
568
|
+
else if (needsValidation) {
|
|
569
|
+
// Only validation needed (complexity was cached)
|
|
570
|
+
console.log(stepLabel(2, totalSteps, 'Validating PRD…'));
|
|
571
|
+
let result;
|
|
572
|
+
try {
|
|
573
|
+
result = await runPromptStep({
|
|
574
|
+
...sharedOpts,
|
|
575
|
+
template: 'validate-prd',
|
|
576
|
+
goalText: `<!-- validation-pass: 1 -->\n${prdContent}`,
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
catch (err) {
|
|
580
|
+
console.error(`\n ✗ Step 2 failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
581
|
+
process.exit(1);
|
|
582
|
+
}
|
|
583
|
+
if (!result.isValid) {
|
|
584
|
+
let prdValidationErrors = result.errors ?? result.rawOutput;
|
|
585
|
+
console.log(c.yellow(` ⚠ PRD has validation issues — attempting auto-fix…\n`));
|
|
586
|
+
console.log(c.dim(prdValidationErrors));
|
|
587
|
+
console.log();
|
|
588
|
+
await fixPrd(sharedOpts, prdPath, prdContent, prdValidationErrors, totalSteps, opts.adapter);
|
|
589
|
+
}
|
|
590
|
+
else {
|
|
591
|
+
console.log(c.green(` ✓ PRD is valid\n`));
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
else {
|
|
595
|
+
// Only complexity needed (validation skipped)
|
|
596
|
+
console.log(stepLabel(complexityStep, totalSteps, 'Assessing complexity…'));
|
|
597
|
+
try {
|
|
598
|
+
const complexityResult = await runPromptStep({
|
|
599
|
+
...sharedOpts,
|
|
600
|
+
template: 'assess-complexity',
|
|
601
|
+
filePath: prdPath,
|
|
602
|
+
contextText: opts.text ?? undefined,
|
|
603
|
+
});
|
|
604
|
+
complexity = parseComplexityAssessment(complexityResult.rawOutput);
|
|
605
|
+
if (complexity) {
|
|
606
|
+
await writeFile(complexityFilePath, JSON.stringify(complexity, null, 2), 'utf8');
|
|
607
|
+
console.log(c.green(` ✓ Complexity assessment saved to ${relPath(complexityFilePath)}\n`));
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
catch (err) {
|
|
611
|
+
console.warn(c.yellow(` ⚠ Complexity assessment failed: ${err instanceof Error ? err.message : String(err)}`));
|
|
612
|
+
console.warn(c.dim(` Falling back to single convoy strategy.\n`));
|
|
613
|
+
}
|
|
472
614
|
}
|
|
473
615
|
}
|
|
474
616
|
if (!complexity) {
|
|
@@ -514,7 +656,9 @@ export default async function pipeline({ args, pkgRoot }) {
|
|
|
514
656
|
group.depends_on.length ? `- **Depends on groups:** ${group.depends_on.join(', ')}` : '',
|
|
515
657
|
].filter(Boolean).join('\n');
|
|
516
658
|
const prdContent = await readFile(prdPath, 'utf8');
|
|
517
|
-
const
|
|
659
|
+
const relevantPrd = extractRelevantPrdSections(prdContent, group.phases);
|
|
660
|
+
const relevantComplexity = filterTaskComplexityByPhases(complexity?.task_complexity, group.phases);
|
|
661
|
+
const contextForSpec = appendTaskComplexity(relevantPrd, relevantComplexity);
|
|
518
662
|
const groupSpecPath = resolve(convoyDir, `${group.name}.convoy.yml`);
|
|
519
663
|
const { specPath: resolvedGroupSpecPath } = await generateAndValidateSpec({
|
|
520
664
|
sharedOpts,
|
|
@@ -708,7 +852,15 @@ async function generateAndValidateSpec(params) {
|
|
|
708
852
|
}
|
|
709
853
|
taskPlan = parseTaskPlan(retryResult.rawOutput);
|
|
710
854
|
if (!taskPlan) {
|
|
711
|
-
|
|
855
|
+
const truncation = detectJsonTruncation(retryResult.rawOutput);
|
|
856
|
+
if (truncation) {
|
|
857
|
+
console.error(` ✗ Task plan JSON was truncated: ${truncation}`);
|
|
858
|
+
console.error(c.dim(`\n The AI model ran out of output tokens before finishing the JSON.`));
|
|
859
|
+
console.error(c.dim(` Try reducing the PRD size or re-running with a model that supports longer output.`));
|
|
860
|
+
}
|
|
861
|
+
else {
|
|
862
|
+
console.error(' ✗ Failed to parse task plan JSON after retry');
|
|
863
|
+
}
|
|
712
864
|
console.error(c.dim(retryResult.rawOutput.slice(0, 500)));
|
|
713
865
|
process.exit(1);
|
|
714
866
|
}
|