opencastle 0.27.3 → 0.29.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.
Files changed (130) hide show
  1. package/README.md +12 -3
  2. package/bin/cli.mjs +13 -5
  3. package/dist/cli/convoy/engine.d.ts.map +1 -1
  4. package/dist/cli/convoy/engine.js +2 -11
  5. package/dist/cli/convoy/engine.js.map +1 -1
  6. package/dist/cli/convoy/engine.test.js +2 -1
  7. package/dist/cli/convoy/engine.test.js.map +1 -1
  8. package/dist/cli/convoy/export.d.ts +1 -3
  9. package/dist/cli/convoy/export.d.ts.map +1 -1
  10. package/dist/cli/convoy/export.js +9 -88
  11. package/dist/cli/convoy/export.js.map +1 -1
  12. package/dist/cli/convoy/export.test.js +7 -186
  13. package/dist/cli/convoy/export.test.js.map +1 -1
  14. package/dist/cli/convoy/issues.js +3 -3
  15. package/dist/cli/convoy/issues.js.map +1 -1
  16. package/dist/cli/convoy/issues.test.js +4 -3
  17. package/dist/cli/convoy/issues.test.js.map +1 -1
  18. package/dist/cli/convoy/pipeline.d.ts.map +1 -1
  19. package/dist/cli/convoy/pipeline.js +0 -21
  20. package/dist/cli/convoy/pipeline.js.map +1 -1
  21. package/dist/cli/convoy/pipeline.test.js +0 -21
  22. package/dist/cli/convoy/pipeline.test.js.map +1 -1
  23. package/dist/cli/dashboard.d.ts.map +1 -1
  24. package/dist/cli/dashboard.js +32 -8
  25. package/dist/cli/dashboard.js.map +1 -1
  26. package/dist/cli/destroy.d.ts.map +1 -1
  27. package/dist/cli/destroy.js +13 -0
  28. package/dist/cli/destroy.js.map +1 -1
  29. package/dist/cli/dispute.d.ts +3 -0
  30. package/dist/cli/dispute.d.ts.map +1 -0
  31. package/dist/cli/dispute.js +25 -0
  32. package/dist/cli/dispute.js.map +1 -0
  33. package/dist/cli/doctor.d.ts +1 -1
  34. package/dist/cli/doctor.d.ts.map +1 -1
  35. package/dist/cli/doctor.js +14 -1
  36. package/dist/cli/doctor.js.map +1 -1
  37. package/dist/cli/eject.d.ts.map +1 -1
  38. package/dist/cli/eject.js +14 -0
  39. package/dist/cli/eject.js.map +1 -1
  40. package/dist/cli/init.d.ts.map +1 -1
  41. package/dist/cli/init.js +14 -0
  42. package/dist/cli/init.js.map +1 -1
  43. package/dist/cli/log.d.ts +0 -11
  44. package/dist/cli/log.d.ts.map +1 -1
  45. package/dist/cli/log.js +2 -114
  46. package/dist/cli/log.js.map +1 -1
  47. package/dist/cli/pipeline.d.ts +3 -0
  48. package/dist/cli/pipeline.d.ts.map +1 -0
  49. package/dist/cli/pipeline.js +321 -0
  50. package/dist/cli/pipeline.js.map +1 -0
  51. package/dist/cli/plan.d.ts +37 -0
  52. package/dist/cli/plan.d.ts.map +1 -1
  53. package/dist/cli/plan.js +321 -161
  54. package/dist/cli/plan.js.map +1 -1
  55. package/dist/cli/run.js +2 -2
  56. package/dist/cli/run.js.map +1 -1
  57. package/dist/cli/update.d.ts.map +1 -1
  58. package/dist/cli/update.js +16 -0
  59. package/dist/cli/update.js.map +1 -1
  60. package/dist/cli/validate.d.ts +3 -0
  61. package/dist/cli/validate.d.ts.map +1 -0
  62. package/dist/cli/validate.js +60 -0
  63. package/dist/cli/validate.js.map +1 -0
  64. package/dist/cli/watch.d.ts.map +1 -1
  65. package/dist/cli/watch.js +1 -3
  66. package/dist/cli/watch.js.map +1 -1
  67. package/package.json +5 -4
  68. package/src/cli/convoy/engine.test.ts +2 -1
  69. package/src/cli/convoy/engine.ts +2 -5
  70. package/src/cli/convoy/export.test.ts +7 -224
  71. package/src/cli/convoy/export.ts +10 -106
  72. package/src/cli/convoy/issues.test.ts +3 -2
  73. package/src/cli/convoy/issues.ts +3 -3
  74. package/src/cli/convoy/pipeline.test.ts +0 -25
  75. package/src/cli/convoy/pipeline.ts +0 -19
  76. package/src/cli/dashboard.ts +33 -8
  77. package/src/cli/destroy.ts +15 -0
  78. package/src/cli/dispute.ts +28 -0
  79. package/src/cli/doctor.ts +16 -1
  80. package/src/cli/eject.ts +16 -0
  81. package/src/cli/init.ts +16 -0
  82. package/src/cli/log.ts +2 -120
  83. package/src/cli/pipeline.ts +362 -0
  84. package/src/cli/plan.ts +357 -153
  85. package/src/cli/run.ts +2 -2
  86. package/src/cli/update.ts +18 -0
  87. package/src/cli/validate.ts +65 -0
  88. package/src/cli/watch.ts +1 -3
  89. package/src/dashboard/dist/_astro/index.Je1YjU_y.css +1 -0
  90. package/src/dashboard/dist/data/convoy-list.json +54 -9
  91. package/src/dashboard/dist/data/convoys/demo-api-v2.json +177 -0
  92. package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +239 -0
  93. package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +328 -0
  94. package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +187 -0
  95. package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +153 -0
  96. package/src/dashboard/dist/data/convoys/demo-docs-update.json +154 -0
  97. package/src/dashboard/dist/data/convoys/demo-perf-opt.json +227 -0
  98. package/src/dashboard/dist/data/events.ndjson +115 -0
  99. package/src/dashboard/dist/data/overall-stats.json +56 -13
  100. package/src/dashboard/dist/data/pipelines.ndjson +5285 -0
  101. package/src/dashboard/dist/index.html +165 -1392
  102. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  103. package/src/dashboard/public/data/convoy-list.json +54 -9
  104. package/src/dashboard/public/data/convoys/demo-api-v2.json +177 -0
  105. package/src/dashboard/public/data/convoys/demo-auth-revamp.json +239 -0
  106. package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +328 -0
  107. package/src/dashboard/public/data/convoys/demo-data-pipeline.json +187 -0
  108. package/src/dashboard/public/data/convoys/demo-deploy-ci.json +153 -0
  109. package/src/dashboard/public/data/convoys/demo-docs-update.json +154 -0
  110. package/src/dashboard/public/data/convoys/demo-perf-opt.json +227 -0
  111. package/src/dashboard/public/data/events.ndjson +115 -0
  112. package/src/dashboard/public/data/overall-stats.json +56 -13
  113. package/src/dashboard/public/data/pipelines.ndjson +5285 -0
  114. package/src/dashboard/scripts/etl.test.ts +4 -62
  115. package/src/dashboard/scripts/etl.ts +11 -10
  116. package/src/dashboard/scripts/generate-demo-db.ts +482 -115
  117. package/src/dashboard/src/pages/index.astro +235 -1638
  118. package/src/dashboard/src/styles/dashboard.css +473 -7
  119. package/src/orchestrator/prompts/brainstorm.prompt.md +1 -0
  120. package/src/orchestrator/prompts/fix-convoy.prompt.md +79 -0
  121. package/src/orchestrator/prompts/generate-convoy.prompt.md +60 -58
  122. package/src/orchestrator/prompts/generate-prd.prompt.md +126 -0
  123. package/src/orchestrator/prompts/validate-convoy.prompt.md +89 -0
  124. package/src/orchestrator/prompts/validate-prd.prompt.md +83 -0
  125. package/dist/cli/convoy/log-merge.test.d.ts +0 -2
  126. package/dist/cli/convoy/log-merge.test.d.ts.map +0 -1
  127. package/dist/cli/convoy/log-merge.test.js +0 -147
  128. package/dist/cli/convoy/log-merge.test.js.map +0 -1
  129. package/src/cli/convoy/log-merge.test.ts +0 -179
  130. package/src/dashboard/dist/_astro/index.6L3_HsPT.css +0 -1
package/dist/cli/log.js CHANGED
@@ -1,27 +1,16 @@
1
1
  import { mkdir, appendFile, stat } from 'node:fs/promises';
2
- import { readdirSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
3
2
  import { join, dirname } from 'node:path';
4
3
  const HELP = `
5
4
  opencastle log [options]
6
- opencastle log merge [--since <ISO-date>] [--until <ISO-date>] [--output <path>]
7
5
 
8
- Append a structured event to the observability log (events.ndjson),
9
- or merge per-convoy NDJSON files into a single file.
6
+ Append a structured event to the observability log (events.ndjson).
10
7
 
11
- Subcommands:
12
- merge Merge all .opencastle/logs/convoys/*.ndjson into convoy-events.ndjson
13
-
14
- Options (log append):
8
+ Options:
15
9
  --type <type> Event type (required): session|delegation|review|panel|dispute
16
10
  --<field> <value> Any field from the event schema (see documentation)
17
11
  --logs-dir <path> Override the logs directory path
18
12
  --help, -h Show this help
19
13
 
20
- Options (merge):
21
- --since <ISO-date> Only include records at or after this date
22
- --until <ISO-date> Only include records at or before this date
23
- --output <path> Output path (default: .opencastle/logs/convoy-events.ndjson)
24
-
25
14
  Array fields (comma-separated): file_partition, lessons_added, discoveries, reviewing_agents
26
15
  Boolean fields: escalated, weighted
27
16
  Numeric fields: auto-detected from value
@@ -30,8 +19,6 @@ const HELP = `
30
19
  opencastle log --type session --agent Developer --model claude-sonnet-4-6 --task "Fix bug" --outcome success
31
20
  opencastle log --type delegation --session_id feat/prj-1 --agent Developer --tier fast --mechanism sub-agent --outcome success
32
21
  opencastle log --type panel --panel_key auth-review --verdict pass --pass_count 3 --block_count 0
33
- opencastle log merge --since 2026-01-01 --output /tmp/merged.ndjson
34
- opencastle log merge
35
22
  `;
36
23
  const VALID_TYPES = ['session', 'delegation', 'review', 'panel', 'dispute'];
37
24
  const ARRAY_FIELDS = new Set([
@@ -71,80 +58,6 @@ export async function resolveLogsDir(override) {
71
58
  }
72
59
  return join(process.cwd(), '.opencastle', 'logs');
73
60
  }
74
- /** Merge per-convoy NDJSON files into a single deduplicated, sorted file. */
75
- export async function mergeConvoyLogs(options) {
76
- const base = options.basePath ?? process.cwd();
77
- const convoysDir = join(base, '.opencastle', 'logs', 'convoys');
78
- let files = [];
79
- try {
80
- files = readdirSync(convoysDir)
81
- .filter(f => f.endsWith('.ndjson'))
82
- .map(f => join(convoysDir, f));
83
- }
84
- catch {
85
- return { merged: 0, deduplicated: 0, written: 0 };
86
- }
87
- if (files.length === 0) {
88
- return { merged: 0, deduplicated: 0, written: 0 };
89
- }
90
- const allRecords = [];
91
- let totalRead = 0;
92
- for (const file of files) {
93
- const content = readFileSync(file, 'utf8');
94
- const lines = content.split('\n').filter(l => l.trim());
95
- for (const line of lines) {
96
- try {
97
- allRecords.push(JSON.parse(line));
98
- totalRead++;
99
- }
100
- catch {
101
- // skip malformed lines
102
- }
103
- }
104
- }
105
- // Deduplicate by _event_id — keep first occurrence
106
- const seen = new Set();
107
- const unique = [];
108
- for (const record of allRecords) {
109
- const id = record['_event_id'];
110
- if (id !== undefined) {
111
- if (seen.has(id))
112
- continue;
113
- seen.add(id);
114
- }
115
- unique.push(record);
116
- }
117
- const deduplicatedCount = totalRead - unique.length;
118
- // Filter by since/until
119
- let filtered = unique;
120
- if (options.since) {
121
- const since = options.since;
122
- filtered = filtered.filter(r => {
123
- const ts = r['timestamp'];
124
- return ts !== undefined && ts >= since;
125
- });
126
- }
127
- if (options.until) {
128
- const until = options.until;
129
- filtered = filtered.filter(r => {
130
- const ts = r['timestamp'];
131
- return ts !== undefined && ts <= until;
132
- });
133
- }
134
- // Sort by timestamp ascending
135
- filtered.sort((a, b) => {
136
- const ta = a['timestamp'] ?? '';
137
- const tb = b['timestamp'] ?? '';
138
- return ta < tb ? -1 : ta > tb ? 1 : 0;
139
- });
140
- if (filtered.length === 0) {
141
- return { merged: totalRead, deduplicated: deduplicatedCount, written: 0 };
142
- }
143
- const outputPath = options.output ?? join(base, '.opencastle', 'logs', 'convoy-events.ndjson');
144
- mkdirSync(dirname(outputPath), { recursive: true });
145
- writeFileSync(outputPath, filtered.map(r => JSON.stringify(r)).join('\n') + '\n', 'utf8');
146
- return { merged: totalRead, deduplicated: deduplicatedCount, written: filtered.length };
147
- }
148
61
  /** Append a structured event record to events.ndjson. */
149
62
  export async function appendEvent(record, logsDir) {
150
63
  const resolvedDir = await resolveLogsDir(logsDir ?? null);
@@ -158,31 +71,6 @@ export default async function log({ args }) {
158
71
  console.log(HELP);
159
72
  return;
160
73
  }
161
- // merge subcommand
162
- if (args[0] === 'merge') {
163
- const mergeArgs = args.slice(1);
164
- let since;
165
- let until;
166
- let output;
167
- for (let i = 0; i < mergeArgs.length; i++) {
168
- const a = mergeArgs[i];
169
- if (a === '--since' && i + 1 < mergeArgs.length) {
170
- since = mergeArgs[++i];
171
- continue;
172
- }
173
- if (a === '--until' && i + 1 < mergeArgs.length) {
174
- until = mergeArgs[++i];
175
- continue;
176
- }
177
- if (a === '--output' && i + 1 < mergeArgs.length) {
178
- output = mergeArgs[++i];
179
- continue;
180
- }
181
- }
182
- const result = await mergeConvoyLogs({ since, until, output });
183
- console.log(` Merged: ${result.merged} records, Deduplicated: ${result.deduplicated}, Written: ${result.written}`);
184
- return;
185
- }
186
74
  let type = null;
187
75
  let logsDir = null;
188
76
  const fields = {};
@@ -1 +1 @@
1
- {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/cli/log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/cli/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliContext } from './types.js';
2
+ export default function pipeline({ args, pkgRoot }: CliContext): Promise<void>;
3
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -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,321 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { c, confirm, closePrompts } 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
+ await printFinalSummary(prdPath, specPath, opts, pkgRoot);
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
+ await printFinalSummary(prdPath, specPath, opts, pkgRoot);
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
+ await printFinalSummary(prdPath, specPath, opts, pkgRoot);
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
+ async function printFinalSummary(prdPath, specPath, opts, pkgRoot) {
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
+ try {
305
+ const shouldRun = await confirm('Run the convoy now?', true);
306
+ if (shouldRun) {
307
+ closePrompts();
308
+ const runModule = await import('./run.js');
309
+ const runArgs = ['-f', specPath];
310
+ if (opts.adapter)
311
+ runArgs.push('-a', opts.adapter);
312
+ if (opts.verbose)
313
+ runArgs.push('--verbose');
314
+ await runModule.default({ args: runArgs, pkgRoot });
315
+ }
316
+ }
317
+ finally {
318
+ closePrompts();
319
+ }
320
+ }
321
+ //# 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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"}
@@ -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
@@ -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;AAmKlD,wBAA8B,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiJ/E"}
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"}