opencastle 0.27.2 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.mjs +13 -5
- package/dist/cli/convoy/engine.js +2 -2
- package/dist/cli/convoy/engine.js.map +1 -1
- package/dist/cli/convoy/engine.test.js +1 -1
- package/dist/cli/convoy/engine.test.js.map +1 -1
- package/dist/cli/convoy/issues.js +3 -3
- package/dist/cli/convoy/issues.js.map +1 -1
- package/dist/cli/convoy/issues.test.js +4 -3
- package/dist/cli/convoy/issues.test.js.map +1 -1
- package/dist/cli/pipeline.d.ts +3 -0
- package/dist/cli/pipeline.d.ts.map +1 -0
- package/dist/cli/pipeline.js +305 -0
- package/dist/cli/pipeline.js.map +1 -0
- package/dist/cli/plan.d.ts +37 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +321 -161
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +37 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/validate.d.ts +3 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +60 -0
- package/dist/cli/validate.js.map +1 -0
- package/package.json +5 -3
- package/src/cli/convoy/engine.test.ts +1 -1
- package/src/cli/convoy/engine.ts +2 -2
- package/src/cli/convoy/issues.test.ts +3 -2
- package/src/cli/convoy/issues.ts +3 -3
- package/src/cli/pipeline.ts +343 -0
- package/src/cli/plan.ts +357 -153
- package/src/cli/run.ts +37 -1
- package/src/cli/validate.ts +65 -0
- package/src/dashboard/dist/data/convoy-list.json +65 -1
- package/src/dashboard/dist/data/convoys/demo-api-v2.json +177 -0
- package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +239 -0
- package/src/dashboard/dist/data/convoys/demo-convoy-1.json +111 -0
- package/src/dashboard/dist/data/convoys/demo-convoy-2.json +72 -0
- package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +328 -0
- package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +187 -0
- package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +153 -0
- package/src/dashboard/dist/data/convoys/demo-docs-update.json +154 -0
- package/src/dashboard/dist/data/convoys/demo-perf-opt.json +227 -0
- package/src/dashboard/dist/data/events.ndjson +115 -0
- package/src/dashboard/dist/data/overall-stats.json +67 -12
- package/src/dashboard/dist/data/pipelines.ndjson +5285 -0
- package/src/dashboard/dist/index.html +39 -16
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/dashboard/public/data/convoy-list.json +65 -1
- package/src/dashboard/public/data/convoys/demo-api-v2.json +177 -0
- package/src/dashboard/public/data/convoys/demo-auth-revamp.json +239 -0
- package/src/dashboard/public/data/convoys/demo-convoy-1.json +111 -0
- package/src/dashboard/public/data/convoys/demo-convoy-2.json +72 -0
- package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +328 -0
- package/src/dashboard/public/data/convoys/demo-data-pipeline.json +187 -0
- package/src/dashboard/public/data/convoys/demo-deploy-ci.json +153 -0
- package/src/dashboard/public/data/convoys/demo-docs-update.json +154 -0
- package/src/dashboard/public/data/convoys/demo-perf-opt.json +227 -0
- package/src/dashboard/public/data/events.ndjson +115 -0
- package/src/dashboard/public/data/overall-stats.json +67 -12
- package/src/dashboard/public/data/pipelines.ndjson +5285 -0
- package/src/dashboard/scripts/etl.ts +38 -4
- package/src/dashboard/scripts/generate-demo-db.test.ts +30 -0
- package/src/dashboard/scripts/generate-demo-db.ts +507 -0
- package/src/dashboard/scripts/verify-demo-data.sh +51 -0
- package/src/dashboard/src/pages/index.astro +46 -23
- package/src/orchestrator/prompts/fix-convoy.prompt.md +79 -0
- package/src/orchestrator/prompts/generate-convoy.prompt.md +53 -58
- package/src/orchestrator/prompts/generate-prd.prompt.md +120 -0
- package/src/orchestrator/prompts/validate-convoy.prompt.md +89 -0
- package/src/orchestrator/prompts/validate-prd.prompt.md +83 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdtempSync, rmSync, realpathSync, writeFileSync, readFileSync } from 'node:fs';
|
|
1
|
+
import { mkdtempSync, rmSync, realpathSync, writeFileSync, mkdirSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
@@ -6,12 +6,13 @@ import { injectDiscoveredIssuesInstruction, checkDiscoveredIssues, consolidateIs
|
|
|
6
6
|
vi.mock('./gates.js', () => ({
|
|
7
7
|
scanForSecrets: vi.fn(() => ({ clean: true, findings: [] })),
|
|
8
8
|
}));
|
|
9
|
-
const DISCOVERED_REL = 'DISCOVERED-ISSUES.md';
|
|
10
|
-
const KNOWN_REL = 'KNOWN-ISSUES.md';
|
|
9
|
+
const DISCOVERED_REL = '.opencastle/DISCOVERED-ISSUES.md';
|
|
10
|
+
const KNOWN_REL = '.opencastle/KNOWN-ISSUES.md';
|
|
11
11
|
const DISCOVERED_HEADER = '# Discovered Issues\n\n';
|
|
12
12
|
const KNOWN_HEADER = '# Known Issues\n\n';
|
|
13
13
|
function makeBase() {
|
|
14
14
|
const dir = realpathSync(mkdtempSync(join(tmpdir(), 'issues-test-')));
|
|
15
|
+
mkdirSync(join(dir, '.opencastle'), { recursive: true });
|
|
15
16
|
return dir;
|
|
16
17
|
}
|
|
17
18
|
function makeEvents() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.test.js","sourceRoot":"","sources":["../../../src/cli/convoy/issues.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"issues.test.js","sourceRoot":"","sources":["../../../src/cli/convoy/issues.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/cli/pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA2G5C,wBAA8B,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0NnF"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { c } from './prompt.js';
|
|
5
|
+
import { runPromptStep } from './plan.js';
|
|
6
|
+
const HELP = `
|
|
7
|
+
opencastle pipeline [options]
|
|
8
|
+
|
|
9
|
+
Run the full convoy generation pipeline from a feature prompt:
|
|
10
|
+
|
|
11
|
+
Step 1 — Generate PRD (generate-prd)
|
|
12
|
+
Step 2 — Validate PRD (validate-prd)
|
|
13
|
+
Step 3 — Generate convoy spec (generate-convoy, using PRD as BDO)
|
|
14
|
+
Step 4 — Validate convoy spec (validate-convoy)
|
|
15
|
+
Step 5 — Fix convoy spec (fix-convoy, up to 2 retries if invalid)
|
|
16
|
+
|
|
17
|
+
Options:
|
|
18
|
+
--text, -t <text> Feature prompt text (required, unless --prd is set)
|
|
19
|
+
--prd <path> Skip step 1 — use an existing PRD file
|
|
20
|
+
--output-prd <path> Override path for the generated PRD
|
|
21
|
+
--output-spec <path> Override path for the generated convoy spec
|
|
22
|
+
--adapter, -a <name> Override agent runtime adapter
|
|
23
|
+
--verbose Show full agent output for each step
|
|
24
|
+
--dry-run Generate and print the PRD prompt only, then stop
|
|
25
|
+
--skip-validation Skip steps 2 and 4 (PRD and convoy validation)
|
|
26
|
+
--help, -h Show this help
|
|
27
|
+
`;
|
|
28
|
+
function parseArgs(args) {
|
|
29
|
+
const opts = {
|
|
30
|
+
text: null,
|
|
31
|
+
prd: null,
|
|
32
|
+
outputPrd: null,
|
|
33
|
+
outputSpec: null,
|
|
34
|
+
adapter: null,
|
|
35
|
+
verbose: false,
|
|
36
|
+
dryRun: false,
|
|
37
|
+
skipValidation: false,
|
|
38
|
+
help: false,
|
|
39
|
+
};
|
|
40
|
+
for (let i = 0; i < args.length; i++) {
|
|
41
|
+
const arg = args[i];
|
|
42
|
+
switch (arg) {
|
|
43
|
+
case '--help':
|
|
44
|
+
case '-h':
|
|
45
|
+
opts.help = true;
|
|
46
|
+
break;
|
|
47
|
+
case '--text':
|
|
48
|
+
case '-t':
|
|
49
|
+
if (i + 1 >= args.length) {
|
|
50
|
+
console.error(' ✗ --text requires a value');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
opts.text = args[++i];
|
|
54
|
+
break;
|
|
55
|
+
case '--prd':
|
|
56
|
+
if (i + 1 >= args.length) {
|
|
57
|
+
console.error(' ✗ --prd requires a path');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
opts.prd = args[++i];
|
|
61
|
+
break;
|
|
62
|
+
case '--output-prd':
|
|
63
|
+
if (i + 1 >= args.length) {
|
|
64
|
+
console.error(' ✗ --output-prd requires a path');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
opts.outputPrd = args[++i];
|
|
68
|
+
break;
|
|
69
|
+
case '--output-spec':
|
|
70
|
+
if (i + 1 >= args.length) {
|
|
71
|
+
console.error(' ✗ --output-spec requires a path');
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
opts.outputSpec = args[++i];
|
|
75
|
+
break;
|
|
76
|
+
case '--adapter':
|
|
77
|
+
case '-a':
|
|
78
|
+
if (i + 1 >= args.length) {
|
|
79
|
+
console.error(' ✗ --adapter requires a name');
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
opts.adapter = args[++i];
|
|
83
|
+
break;
|
|
84
|
+
case '--verbose':
|
|
85
|
+
opts.verbose = true;
|
|
86
|
+
break;
|
|
87
|
+
case '--dry-run':
|
|
88
|
+
case '--dryRun':
|
|
89
|
+
opts.dryRun = true;
|
|
90
|
+
break;
|
|
91
|
+
case '--skip-validation':
|
|
92
|
+
opts.skipValidation = true;
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
console.error(` ✗ Unknown option: ${arg}`);
|
|
96
|
+
console.log(HELP);
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return opts;
|
|
101
|
+
}
|
|
102
|
+
function relPath(abs) {
|
|
103
|
+
return abs.startsWith(process.cwd()) ? abs.slice(process.cwd().length + 1) : abs;
|
|
104
|
+
}
|
|
105
|
+
function stepLabel(n, total, name) {
|
|
106
|
+
return c.bold(c.cyan(` [${n}/${total}] ${name}`));
|
|
107
|
+
}
|
|
108
|
+
export default async function pipeline({ args, pkgRoot }) {
|
|
109
|
+
const opts = parseArgs(args);
|
|
110
|
+
if (opts.help) {
|
|
111
|
+
console.log(HELP);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if (!opts.text && !opts.prd) {
|
|
115
|
+
console.error(` ✗ Either --text or --prd is required.`);
|
|
116
|
+
console.log(HELP);
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
if (opts.text && opts.prd) {
|
|
120
|
+
console.error(` ✗ --text and --prd are mutually exclusive.`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
if (opts.prd) {
|
|
124
|
+
const resolvedPrd = resolve(process.cwd(), opts.prd);
|
|
125
|
+
if (!existsSync(resolvedPrd)) {
|
|
126
|
+
console.error(` ✗ PRD file not found: ${opts.prd}`);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const totalSteps = opts.skipValidation ? 3 : 5;
|
|
131
|
+
const sharedOpts = {
|
|
132
|
+
adapterName: opts.adapter ?? undefined,
|
|
133
|
+
verbose: opts.verbose,
|
|
134
|
+
pkgRoot,
|
|
135
|
+
};
|
|
136
|
+
console.log(c.bold('\n opencastle pipeline\n'));
|
|
137
|
+
// ── Step 1: Generate PRD ──────────────────────────────────────────────────
|
|
138
|
+
let prdPath;
|
|
139
|
+
if (opts.prd) {
|
|
140
|
+
prdPath = resolve(process.cwd(), opts.prd);
|
|
141
|
+
console.log(c.dim(` [−] Skipping PRD generation — using: ${relPath(prdPath)}`));
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
console.log(stepLabel(1, totalSteps, 'Generating PRD…'));
|
|
145
|
+
let result;
|
|
146
|
+
try {
|
|
147
|
+
result = await runPromptStep({
|
|
148
|
+
...sharedOpts,
|
|
149
|
+
template: 'generate-prd',
|
|
150
|
+
goalText: opts.text,
|
|
151
|
+
outputPath: opts.outputPrd ? resolve(process.cwd(), opts.outputPrd) : undefined,
|
|
152
|
+
dryRun: opts.dryRun,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
console.error(`\n ✗ Step 1 failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
if (opts.dryRun) {
|
|
160
|
+
console.log(c.dim('\n [dry-run] Stopping after step 1. Remove --dry-run to run the full pipeline.'));
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
prdPath = result.outputPath;
|
|
164
|
+
console.log(c.green(` ✓ PRD written to ${relPath(prdPath)}\n`));
|
|
165
|
+
}
|
|
166
|
+
// ── Step 2: Validate PRD ──────────────────────────────────────────────────
|
|
167
|
+
if (!opts.skipValidation) {
|
|
168
|
+
console.log(stepLabel(2, totalSteps, 'Validating PRD…'));
|
|
169
|
+
const prdContent = await readFile(prdPath, 'utf8');
|
|
170
|
+
let result;
|
|
171
|
+
try {
|
|
172
|
+
result = await runPromptStep({
|
|
173
|
+
...sharedOpts,
|
|
174
|
+
template: 'validate-prd',
|
|
175
|
+
goalText: prdContent,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
console.error(`\n ✗ Step 2 failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
if (!result.isValid) {
|
|
183
|
+
console.log(c.red(` ✗ PRD validation failed.\n`));
|
|
184
|
+
console.log(result.errors ?? result.rawOutput);
|
|
185
|
+
console.log(c.dim(`\n Fix the PRD at ${relPath(prdPath)} and re-run with:\n`) +
|
|
186
|
+
` opencastle pipeline --prd ${relPath(prdPath)}${opts.adapter ? ` --adapter ${opts.adapter}` : ''}\n`);
|
|
187
|
+
process.exit(1);
|
|
188
|
+
}
|
|
189
|
+
console.log(c.green(` ✓ PRD is valid\n`));
|
|
190
|
+
}
|
|
191
|
+
// ── Step 3: Generate convoy spec ──────────────────────────────────────────
|
|
192
|
+
const genStep = opts.skipValidation ? 2 : 3;
|
|
193
|
+
console.log(stepLabel(genStep, totalSteps, 'Generating convoy spec…'));
|
|
194
|
+
let specPath;
|
|
195
|
+
try {
|
|
196
|
+
const result = await runPromptStep({
|
|
197
|
+
...sharedOpts,
|
|
198
|
+
template: 'generate-convoy',
|
|
199
|
+
filePath: prdPath,
|
|
200
|
+
outputPath: opts.outputSpec ? resolve(process.cwd(), opts.outputSpec) : undefined,
|
|
201
|
+
});
|
|
202
|
+
specPath = result.outputPath;
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
console.error(`\n ✗ Step ${genStep} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
206
|
+
process.exit(1);
|
|
207
|
+
}
|
|
208
|
+
console.log(c.green(` ✓ Convoy spec written to ${relPath(specPath)}\n`));
|
|
209
|
+
if (opts.skipValidation) {
|
|
210
|
+
printFinalSummary(prdPath, specPath);
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// ── Step 4: Validate convoy spec ──────────────────────────────────────────
|
|
214
|
+
console.log(stepLabel(4, totalSteps, 'Validating convoy spec…'));
|
|
215
|
+
const specContent = await readFile(specPath, 'utf8');
|
|
216
|
+
let validationErrors;
|
|
217
|
+
{
|
|
218
|
+
let result;
|
|
219
|
+
try {
|
|
220
|
+
result = await runPromptStep({
|
|
221
|
+
...sharedOpts,
|
|
222
|
+
template: 'validate-convoy',
|
|
223
|
+
goalText: specContent,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
console.error(`\n ✗ Step 4 failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
if (result.isValid) {
|
|
231
|
+
console.log(c.green(` ✓ Convoy spec is valid\n`));
|
|
232
|
+
printFinalSummary(prdPath, specPath);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
validationErrors = result.errors ?? result.rawOutput;
|
|
236
|
+
console.log(c.yellow(` ⚠ Spec has validation issues — attempting auto-fix…\n`));
|
|
237
|
+
console.log(c.dim(validationErrors));
|
|
238
|
+
console.log();
|
|
239
|
+
}
|
|
240
|
+
// ── Step 5: Fix convoy spec (up to 2 retries) ─────────────────────────────
|
|
241
|
+
const MAX_FIX_RETRIES = 2;
|
|
242
|
+
let fixedSpecContent = specContent;
|
|
243
|
+
for (let attempt = 1; attempt <= MAX_FIX_RETRIES; attempt++) {
|
|
244
|
+
const label = `Fix attempt ${attempt}/${MAX_FIX_RETRIES}…`;
|
|
245
|
+
console.log(stepLabel(5, totalSteps, label));
|
|
246
|
+
let fixResult;
|
|
247
|
+
try {
|
|
248
|
+
fixResult = await runPromptStep({
|
|
249
|
+
...sharedOpts,
|
|
250
|
+
template: 'fix-convoy',
|
|
251
|
+
goalText: fixedSpecContent,
|
|
252
|
+
contextText: validationErrors,
|
|
253
|
+
outputPath: specPath, // overwrite in place
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
console.error(`\n ✗ Step 5 (attempt ${attempt}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
258
|
+
process.exit(1);
|
|
259
|
+
}
|
|
260
|
+
console.log(c.dim(` Re-validating after fix…`));
|
|
261
|
+
// Read the newly written spec
|
|
262
|
+
fixedSpecContent = await readFile(specPath, 'utf8');
|
|
263
|
+
let revalidation;
|
|
264
|
+
try {
|
|
265
|
+
revalidation = await runPromptStep({
|
|
266
|
+
...sharedOpts,
|
|
267
|
+
template: 'validate-convoy',
|
|
268
|
+
goalText: fixedSpecContent,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
catch (err) {
|
|
272
|
+
console.error(`\n ✗ Re-validation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
if (revalidation.isValid) {
|
|
276
|
+
console.log(c.green(` ✓ Spec fixed and validated\n`));
|
|
277
|
+
printFinalSummary(prdPath, specPath);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
validationErrors = revalidation.errors ?? revalidation.rawOutput;
|
|
281
|
+
if (attempt < MAX_FIX_RETRIES) {
|
|
282
|
+
console.log(c.yellow(` ⚠ Still has issues after fix attempt ${attempt} — retrying…\n`));
|
|
283
|
+
console.log(c.dim(validationErrors));
|
|
284
|
+
console.log();
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// All retries exhausted
|
|
288
|
+
console.log(c.red(`\n ✗ Could not auto-fix the convoy spec after ${MAX_FIX_RETRIES} attempts.\n`));
|
|
289
|
+
console.log(` Remaining issues:\n`);
|
|
290
|
+
console.log(validationErrors);
|
|
291
|
+
console.log(c.dim(`\n The spec has been saved to ${relPath(specPath)} with the best available fixes.\n`) +
|
|
292
|
+
c.dim(` Review the remaining issues above and edit the file manually, then validate with:\n`) +
|
|
293
|
+
` opencastle plan --file ${relPath(specPath)} --template validate-convoy\n`);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
function printFinalSummary(prdPath, specPath) {
|
|
297
|
+
const prd = relPath(prdPath);
|
|
298
|
+
const spec = relPath(specPath);
|
|
299
|
+
console.log(c.bold(c.green(' Pipeline complete!\n')));
|
|
300
|
+
console.log(` PRD: ${prd}`);
|
|
301
|
+
console.log(` Convoy spec: ${spec}\n`);
|
|
302
|
+
console.log(` ${c.dim('Preview:')} npx opencastle run -f ${spec} --dry-run\n` +
|
|
303
|
+
` ${c.dim('Execute:')} npx opencastle run -f ${spec}\n`);
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/cli/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/plan.d.ts
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
1
|
import type { CliContext } from './types.js';
|
|
2
|
+
export interface PromptStepOptions {
|
|
3
|
+
/** Template name without extension. Default: 'generate-convoy' */
|
|
4
|
+
template?: string;
|
|
5
|
+
/** Absolute file path whose content fills {{goal}} */
|
|
6
|
+
filePath?: string;
|
|
7
|
+
/** Inline text that fills {{goal}} — alternative to filePath */
|
|
8
|
+
goalText?: string;
|
|
9
|
+
/** File path whose content fills {{context}} */
|
|
10
|
+
contextPath?: string;
|
|
11
|
+
/** Inline text that fills {{context}} — alternative to contextPath */
|
|
12
|
+
contextText?: string;
|
|
13
|
+
/** Explicit output path override */
|
|
14
|
+
outputPath?: string;
|
|
15
|
+
/** Adapter name override */
|
|
16
|
+
adapterName?: string;
|
|
17
|
+
verbose?: boolean;
|
|
18
|
+
dryRun?: boolean;
|
|
19
|
+
/** Absolute path to the opencastle package root (for locating prompt templates) */
|
|
20
|
+
pkgRoot: string;
|
|
21
|
+
}
|
|
22
|
+
export interface PromptStepResult {
|
|
23
|
+
/** Absolute path the output was written to. null for validation output or dry-run */
|
|
24
|
+
outputPath: string | null;
|
|
25
|
+
/** Raw text returned by the AI adapter (or assembled prompt on dry-run) */
|
|
26
|
+
rawOutput: string;
|
|
27
|
+
/** How the output was interpreted */
|
|
28
|
+
outputType: 'convoy-spec' | 'prd' | 'validation';
|
|
29
|
+
/** Set when outputType === 'validation' */
|
|
30
|
+
isValid?: boolean;
|
|
31
|
+
/** Set when outputType === 'validation' and isValid === false */
|
|
32
|
+
errors?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Execute a single prompt template step via an AI adapter.
|
|
36
|
+
* Used by the pipeline command to chain steps programmatically.
|
|
37
|
+
*/
|
|
38
|
+
export declare function runPromptStep(opts: PromptStepOptions): Promise<PromptStepResult>;
|
|
2
39
|
export default function plan({ args, pkgRoot }: CliContext): Promise<void>;
|
|
3
40
|
//# sourceMappingURL=plan.d.ts.map
|
package/dist/cli/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAQ,MAAM,YAAY,CAAA;AA0ClD,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,UAAU,EAAE,aAAa,GAAG,KAAK,GAAG,YAAY,CAAA;IAChD,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAgJD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8HtF;AA4ED,wBAA8B,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwF/E"}
|