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/plan.js CHANGED
@@ -8,81 +8,28 @@ import { c } from './prompt.js';
8
8
  const HELP = `
9
9
  opencastle plan [options]
10
10
 
11
- Generate a convoy spec from a task description file by running it through the
12
- generate-convoy prompt via an AI adapter.
11
+ Generate a convoy spec (or other AI output) from a task description by running
12
+ it through a prompt template via an AI adapter.
13
13
 
14
14
  Options:
15
- --file, -f <path> Path to a text file with the task description (required)
16
- --context <path> Optional path to an additional context file
17
- --output, -o <path> Output path for the generated convoy spec
15
+ --file, -f <path> Path to a text file (fills {{goal}} in the template)
16
+ --text, -t <text> Inline text to use as {{goal}} (alternative to --file)
17
+ --template <name> Prompt template name (default: generate-convoy)
18
+ Built-in templates:
19
+ generate-prd — Write a PRD from a feature prompt
20
+ validate-prd — Check a PRD for completeness
21
+ generate-convoy — Generate a convoy spec from a PRD (default)
22
+ validate-convoy — Check a convoy spec for correctness
23
+ fix-convoy — Fix validation errors in a convoy spec
24
+ --context <path> Optional path to an additional context file (fills {{context}})
25
+ --context-text <text> Inline text to fill {{context}} (alternative to --context)
26
+ --output, -o <path> Output path override (skipped for validation output)
18
27
  --adapter, -a <name> Override agent runtime adapter
19
28
  --verbose Show full agent output
20
- --dry-run Print the prompt that would be sent without executing
29
+ --dry-run Print the assembled prompt without executing
21
30
  --help, -h Show this help
22
31
  `;
23
- function parseArgs(args) {
24
- const opts = {
25
- file: null,
26
- context: null,
27
- output: null,
28
- adapter: null,
29
- verbose: false,
30
- dryRun: false,
31
- help: false,
32
- };
33
- for (let i = 0; i < args.length; i++) {
34
- const arg = args[i];
35
- switch (arg) {
36
- case '--help':
37
- case '-h':
38
- opts.help = true;
39
- break;
40
- case '--file':
41
- case '-f':
42
- if (i + 1 >= args.length) {
43
- console.error(' ✗ --file requires a path');
44
- process.exit(1);
45
- }
46
- opts.file = args[++i];
47
- break;
48
- case '--context':
49
- if (i + 1 >= args.length) {
50
- console.error(' ✗ --context requires a path');
51
- process.exit(1);
52
- }
53
- opts.context = args[++i];
54
- break;
55
- case '--output':
56
- case '-o':
57
- if (i + 1 >= args.length) {
58
- console.error(' ✗ --output requires a path');
59
- process.exit(1);
60
- }
61
- opts.output = args[++i];
62
- break;
63
- case '--adapter':
64
- case '-a':
65
- if (i + 1 >= args.length) {
66
- console.error(' ✗ --adapter requires a name');
67
- process.exit(1);
68
- }
69
- opts.adapter = args[++i];
70
- break;
71
- case '--verbose':
72
- opts.verbose = true;
73
- break;
74
- case '--dry-run':
75
- case '--dryRun':
76
- opts.dryRun = true;
77
- break;
78
- default:
79
- console.error(` ✗ Unknown option: ${arg}`);
80
- console.log(HELP);
81
- process.exit(1);
82
- }
83
- }
84
- return opts;
85
- }
32
+ // ── Private helpers ─────────────────────────────────────────────────────────
86
33
  function printAdapterError(detectionFailed, adapterName) {
87
34
  if (detectionFailed) {
88
35
  console.error(` ✗ No agent CLI found on your PATH.\n` +
@@ -96,7 +43,7 @@ function printAdapterError(detectionFailed, adapterName) {
96
43
  }
97
44
  else {
98
45
  const hints = {
99
- 'claude': ' Install: npm install -g @anthropic-ai/claude-code\n' +
46
+ claude: ' Install: npm install -g @anthropic-ai/claude-code\n' +
100
47
  ' Docs: https://docs.anthropic.com/en/docs/claude-code',
101
48
  copilot: ' Requires the Copilot CLI installed and authenticated:\n' +
102
49
  ' https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli\n' +
@@ -114,9 +61,7 @@ function printAdapterError(detectionFailed, adapterName) {
114
61
  hint);
115
62
  }
116
63
  }
117
- /**
118
- * Strip YAML frontmatter (everything between first and second --- lines).
119
- */
64
+ /** Strip YAML frontmatter (everything between first and second --- delimiters). */
120
65
  function stripFrontmatter(text) {
121
66
  const lines = text.split('\n');
122
67
  if (lines[0]?.trim() !== '---')
@@ -126,9 +71,23 @@ function stripFrontmatter(text) {
126
71
  return text;
127
72
  return lines.slice(closingIdx + 1).join('\n').trimStart();
128
73
  }
129
- /**
130
- * Extract YAML content from a fenced code block (```yaml or ```yml).
131
- */
74
+ /** Extract key: value pairs from YAML frontmatter (top-level scalar values only). */
75
+ function parseFrontmatter(text) {
76
+ const result = {};
77
+ const lines = text.split('\n');
78
+ if (lines[0]?.trim() !== '---')
79
+ return result;
80
+ const closingIdx = lines.findIndex((line, i) => i > 0 && line.trim() === '---');
81
+ if (closingIdx === -1)
82
+ return result;
83
+ for (let i = 1; i < closingIdx; i++) {
84
+ const match = lines[i].match(/^(\w[\w-]*):\s*['"]?([^'"]+?)['"]?\s*$/);
85
+ if (match)
86
+ result[match[1]] = match[2].trim();
87
+ }
88
+ return result;
89
+ }
90
+ /** Extract YAML content from a fenced ```yaml ... ``` block. */
132
91
  function extractYamlBlock(text) {
133
92
  const match = text.match(/```ya?ml\s*\n([\s\S]*?)```/);
134
93
  if (!match)
@@ -136,17 +95,14 @@ function extractYamlBlock(text) {
136
95
  return match[1].trim();
137
96
  }
138
97
  /**
139
- * Derive an output filename from YAML content.
140
- * Checks for a comment on the first line, then falls back to the `name` field.
98
+ * Derive a .convoy.yml filename from YAML content.
99
+ * Checks for a first-line comment, then falls back to the `name:` field.
141
100
  */
142
101
  function deriveOutputFilename(yaml) {
143
- // First line comment: # .opencastle/convoys/some-name.convoy.yml
144
102
  const firstLine = yaml.split('\n')[0] ?? '';
145
103
  const commentMatch = firstLine.match(/^#\s*(.+\.convoy\.ya?ml)\s*$/);
146
- if (commentMatch) {
104
+ if (commentMatch)
147
105
  return basename(commentMatch[1]);
148
- }
149
- // Fall back to `name:` field
150
106
  const nameMatch = yaml.match(/^name:\s*['"]?([^'"\n]+)['"]?\s*$/m);
151
107
  if (nameMatch) {
152
108
  const kebab = nameMatch[1].trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
@@ -155,62 +111,98 @@ function deriveOutputFilename(yaml) {
155
111
  }
156
112
  return 'convoy-plan.convoy.yml';
157
113
  }
158
- export default async function plan({ args, pkgRoot }) {
159
- const opts = parseArgs(args);
160
- if (opts.help) {
161
- console.log(HELP);
162
- return;
114
+ /**
115
+ * Derive a .prd.md filename from PRD Markdown content.
116
+ * Looks for a # Heading to extract a kebab-case name.
117
+ */
118
+ function derivePrdFilename(content) {
119
+ const headingMatch = content.match(/^#\s+(.+?)(?:\s*[-—–]+\s*PRD)?\s*$/m);
120
+ if (headingMatch) {
121
+ const kebab = headingMatch[1]
122
+ .trim()
123
+ .toLowerCase()
124
+ .replace(/[^a-z0-9]+/g, '-')
125
+ .replace(/^-|-$/g, '');
126
+ if (kebab)
127
+ return `${kebab}.prd.md`;
163
128
  }
164
- // ── Validate required --file arg ──────────────────────────────
165
- if (!opts.file) {
166
- console.error(` ✗ --file is required. Specify a text file with the task description.`);
167
- console.log(HELP);
168
- process.exit(1);
129
+ return `prd-${Date.now()}.prd.md`;
130
+ }
131
+ /**
132
+ * Extract Markdown body from AI output.
133
+ * Strips wrapping ```markdown / ```md fences if present.
134
+ * If a heading is present but prefixed with preamble, trims to the first heading.
135
+ */
136
+ function extractMarkdownBody(output) {
137
+ // Strip explicit markdown fence
138
+ const mdFenceMatch = output.match(/^```(?:markdown|md)\s*\n([\s\S]*?)```\s*$/m);
139
+ if (mdFenceMatch)
140
+ return mdFenceMatch[1].trim();
141
+ const lines = output.trim().split('\n');
142
+ // Strip plain ``` wrapping (first and last line are fences)
143
+ if (lines[0]?.startsWith('```') && lines[lines.length - 1]?.trim() === '```') {
144
+ return lines.slice(1, -1).join('\n').trim();
169
145
  }
170
- const filePath = resolve(process.cwd(), opts.file);
171
- if (!existsSync(filePath)) {
172
- console.error(` ✗ File not found: ${opts.file}`);
173
- process.exit(1);
146
+ // If there's preamble before the first heading, strip it
147
+ const headingIdx = lines.findIndex((l) => /^#{1,3}\s/.test(l));
148
+ if (headingIdx > 0)
149
+ return lines.slice(headingIdx).join('\n').trim();
150
+ return output.trim();
151
+ }
152
+ /**
153
+ * Parse a validation AI response for VALID / INVALID verdict.
154
+ * INVALID takes precedence because VALID is a substring of INVALID.
155
+ */
156
+ function parseValidationResult(output) {
157
+ const trimmed = output.trim();
158
+ const hasInvalid = /\bINVALID\b/.test(trimmed);
159
+ const hasValid = /\bVALID\b/.test(trimmed);
160
+ if (hasValid && !hasInvalid)
161
+ return { isValid: true, errors: '' };
162
+ const errorsMatch = trimmed.match(/(?:Issues|Errors):\s*\n([\s\S]+)/i);
163
+ return { isValid: false, errors: errorsMatch ? errorsMatch[1].trim() : trimmed };
164
+ }
165
+ // ── Exported programmatic API ───────────────────────────────────────────────
166
+ /**
167
+ * Execute a single prompt template step via an AI adapter.
168
+ * Used by the pipeline command to chain steps programmatically.
169
+ */
170
+ export async function runPromptStep(opts) {
171
+ const templateName = opts.template ?? 'generate-convoy';
172
+ const templatePath = join(opts.pkgRoot, 'src', 'orchestrator', 'prompts', `${templateName}.prompt.md`);
173
+ if (!existsSync(templatePath)) {
174
+ throw new Error(`Prompt template not found: ${templatePath}`);
174
175
  }
175
- // ── Read task description ──────────────────────────────────────
176
- const taskDescription = await readFile(filePath, 'utf8');
177
- // ── Read optional context file ─────────────────────────────────
178
- let contextContent = '';
179
- if (opts.context) {
180
- const contextPath = resolve(process.cwd(), opts.context);
181
- if (!existsSync(contextPath)) {
182
- console.error(` Context file not found: ${opts.context}`);
183
- process.exit(1);
184
- }
185
- contextContent = await readFile(contextPath, 'utf8');
176
+ const rawTemplate = await readFile(templatePath, 'utf8');
177
+ const frontmatter = parseFrontmatter(rawTemplate);
178
+ const outputType = (frontmatter['output'] ?? 'convoy-spec');
179
+ const template = stripFrontmatter(rawTemplate);
180
+ let goalContent = opts.goalText ?? '';
181
+ if (!goalContent && opts.filePath) {
182
+ if (!existsSync(opts.filePath))
183
+ throw new Error(`File not found: ${opts.filePath}`);
184
+ goalContent = await readFile(opts.filePath, 'utf8');
186
185
  }
187
- // ── Load and assemble the prompt template ─────────────────────
188
- const promptTemplatePath = join(pkgRoot, 'src', 'orchestrator', 'prompts', 'generate-convoy.prompt.md');
189
- if (!existsSync(promptTemplatePath)) {
190
- console.error(` Prompt template not found: ${promptTemplatePath}`);
191
- process.exit(1);
186
+ let contextContent = opts.contextText ?? '';
187
+ if (!contextContent && opts.contextPath) {
188
+ if (!existsSync(opts.contextPath))
189
+ throw new Error(`Context file not found: ${opts.contextPath}`);
190
+ contextContent = await readFile(opts.contextPath, 'utf8');
192
191
  }
193
- const rawTemplate = await readFile(promptTemplatePath, 'utf8');
194
- const template = stripFrontmatter(rawTemplate);
195
192
  const assembledPrompt = template
196
- .replace('{{goal}}', taskDescription.trim())
197
- .replace('{{context}}', contextContent.trim());
198
- // ── Dry-run: print prompt and exit ────────────────────────────
193
+ .replace(/\{\{goal\}\}/g, goalContent.trim())
194
+ .replace(/\{\{context\}\}/g, contextContent.trim());
199
195
  if (opts.dryRun) {
200
- console.log(c.bold(c.cyan(' Assembled prompt (dry-run):\n')));
196
+ console.log(c.bold(c.cyan(` [${templateName}] Assembled prompt (dry-run):\n`)));
201
197
  console.log(assembledPrompt);
202
- return;
203
- }
204
- // ── Resolve adapter ───────────────────────────────────────────
205
- let adapterName;
206
- if (opts.adapter) {
207
- adapterName = opts.adapter;
198
+ return { outputPath: null, rawOutput: assembledPrompt, outputType };
208
199
  }
209
- else {
200
+ let adapterName = opts.adapterName ?? '';
201
+ if (!adapterName) {
210
202
  const detected = await detectAdapter();
211
203
  if (!detected) {
212
204
  printAdapterError(true, '');
213
- process.exit(1);
205
+ throw new Error('No adapter available');
214
206
  }
215
207
  adapterName = detected;
216
208
  }
@@ -220,69 +212,237 @@ export default async function plan({ args, pkgRoot }) {
220
212
  }
221
213
  catch {
222
214
  printAdapterError(false, adapterName);
223
- process.exit(1);
215
+ throw new Error(`Adapter "${adapterName}" failed to load`);
224
216
  }
225
- const available = await adapter.isAvailable();
226
- if (!available) {
217
+ if (!(await adapter.isAvailable())) {
227
218
  printAdapterError(false, adapterName);
228
- process.exit(1);
219
+ throw new Error(`Adapter "${adapterName}" is not available`);
229
220
  }
230
- console.log(c.dim(` Using adapter: ${adapterName}`));
231
- console.log(c.dim(` Generating convoy spec from: ${opts.file}\n`));
232
- // ── Execute the prompt through the adapter ────────────────────
221
+ const agentField = (frontmatter['agent'] ?? 'team-lead').toLowerCase().replace(/\s+/g, '-');
233
222
  const task = {
234
- id: 'generate-convoy',
223
+ id: templateName,
235
224
  prompt: assembledPrompt,
236
- agent: 'team-lead',
225
+ agent: agentField,
237
226
  timeout: '10m',
238
227
  depends_on: [],
239
228
  files: [],
240
- description: 'Generate convoy spec from task description',
229
+ description: frontmatter['description'] ?? templateName,
241
230
  max_retries: 1,
242
231
  };
243
- const result = await adapter.execute(task, { verbose: opts.verbose });
244
- // ── Extract YAML from the response ────────────────────────────
245
- const yamlContent = extractYamlBlock(result.output);
232
+ const execResult = await adapter.execute(task, { verbose: opts.verbose ?? false });
233
+ const rawOutput = execResult.output;
234
+ if (outputType === 'validation') {
235
+ const { isValid, errors } = parseValidationResult(rawOutput);
236
+ return { outputPath: null, rawOutput, outputType, isValid, errors };
237
+ }
238
+ if (outputType === 'prd') {
239
+ const content = extractMarkdownBody(rawOutput);
240
+ let outputPath = opts.outputPath ?? null;
241
+ if (!outputPath) {
242
+ const prdDir = resolve(process.cwd(), '.opencastle', 'prds');
243
+ await mkdir(prdDir, { recursive: true });
244
+ outputPath = join(prdDir, derivePrdFilename(content));
245
+ }
246
+ await mkdir(resolve(outputPath, '..'), { recursive: true });
247
+ await writeFile(outputPath, content + '\n', 'utf8');
248
+ return { outputPath, rawOutput, outputType };
249
+ }
250
+ // convoy-spec (default)
251
+ const yamlContent = extractYamlBlock(rawOutput);
246
252
  if (!yamlContent) {
247
- const preview = result.output.slice(0, 500);
248
- console.error(`No YAML code block found in the agent response.\n`);
249
- console.error(c.dim(` Raw output (truncated):\n${preview}`));
250
- process.exit(1);
253
+ const preview = rawOutput.slice(0, 500);
254
+ throw new Error(`No YAML code block found in the agent response.\n\nRaw output (truncated):\n${preview}`);
251
255
  }
252
- // ── Validate YAML ─────────────────────────────────────────────
253
- let validationWarning = false;
256
+ let schemaValid = true;
254
257
  try {
255
258
  parseTaskSpecText(yamlContent);
256
259
  }
257
260
  catch (err) {
258
- validationWarning = true;
261
+ schemaValid = false;
259
262
  const msg = err instanceof Error ? err.message : String(err);
260
263
  console.warn(c.yellow(` ⚠ YAML validation warning: ${msg}`));
261
264
  console.warn(c.dim(` The file will still be written — you may need to edit it before running.\n`));
262
265
  }
263
- // ── Determine output path ─────────────────────────────────────
264
- let outputPath;
265
- if (opts.output) {
266
- outputPath = resolve(process.cwd(), opts.output);
267
- }
268
- else {
266
+ let outputPath = opts.outputPath ?? null;
267
+ if (!outputPath) {
269
268
  const convoyDir = resolve(process.cwd(), '.opencastle', 'convoys');
270
269
  await mkdir(convoyDir, { recursive: true });
271
- const filename = deriveOutputFilename(yamlContent);
272
- outputPath = join(convoyDir, filename);
270
+ outputPath = join(convoyDir, deriveOutputFilename(yamlContent));
273
271
  }
274
272
  await mkdir(resolve(outputPath, '..'), { recursive: true });
275
273
  await writeFile(outputPath, yamlContent + '\n', 'utf8');
276
- const relPath = outputPath.startsWith(process.cwd())
277
- ? outputPath.slice(process.cwd().length + 1)
278
- : outputPath;
279
- console.log(c.green(` ✓ Convoy spec written to ${relPath}`));
280
- if (validationWarning) {
281
- console.log(c.yellow(` (contains validation warnings — review before running)`));
274
+ return { outputPath, rawOutput, outputType, isValid: schemaValid };
275
+ }
276
+ // ── CLI argument parsing ────────────────────────────────────────────────────
277
+ function parseArgs(args) {
278
+ const opts = {
279
+ file: null,
280
+ text: null,
281
+ template: 'generate-convoy',
282
+ context: null,
283
+ contextText: null,
284
+ output: null,
285
+ adapter: null,
286
+ verbose: false,
287
+ dryRun: false,
288
+ help: false,
289
+ };
290
+ for (let i = 0; i < args.length; i++) {
291
+ const arg = args[i];
292
+ switch (arg) {
293
+ case '--help':
294
+ case '-h':
295
+ opts.help = true;
296
+ break;
297
+ case '--file':
298
+ case '-f':
299
+ if (i + 1 >= args.length) {
300
+ console.error(' ✗ --file requires a path');
301
+ process.exit(1);
302
+ }
303
+ opts.file = args[++i];
304
+ break;
305
+ case '--text':
306
+ case '-t':
307
+ if (i + 1 >= args.length) {
308
+ console.error(' ✗ --text requires a value');
309
+ process.exit(1);
310
+ }
311
+ opts.text = args[++i];
312
+ break;
313
+ case '--template':
314
+ if (i + 1 >= args.length) {
315
+ console.error(' ✗ --template requires a name');
316
+ process.exit(1);
317
+ }
318
+ opts.template = args[++i];
319
+ break;
320
+ case '--context':
321
+ if (i + 1 >= args.length) {
322
+ console.error(' ✗ --context requires a path');
323
+ process.exit(1);
324
+ }
325
+ opts.context = args[++i];
326
+ break;
327
+ case '--context-text':
328
+ if (i + 1 >= args.length) {
329
+ console.error(' ✗ --context-text requires a value');
330
+ process.exit(1);
331
+ }
332
+ opts.contextText = args[++i];
333
+ break;
334
+ case '--output':
335
+ case '-o':
336
+ if (i + 1 >= args.length) {
337
+ console.error(' ✗ --output requires a path');
338
+ process.exit(1);
339
+ }
340
+ opts.output = args[++i];
341
+ break;
342
+ case '--adapter':
343
+ case '-a':
344
+ if (i + 1 >= args.length) {
345
+ console.error(' ✗ --adapter requires a name');
346
+ process.exit(1);
347
+ }
348
+ opts.adapter = args[++i];
349
+ break;
350
+ case '--verbose':
351
+ opts.verbose = true;
352
+ break;
353
+ case '--dry-run':
354
+ case '--dryRun':
355
+ opts.dryRun = true;
356
+ break;
357
+ default:
358
+ console.error(` ✗ Unknown option: ${arg}`);
359
+ console.log(HELP);
360
+ process.exit(1);
361
+ }
362
+ }
363
+ return opts;
364
+ }
365
+ // ── CLI entrypoint ──────────────────────────────────────────────────────────
366
+ export default async function plan({ args, pkgRoot }) {
367
+ const opts = parseArgs(args);
368
+ if (opts.help) {
369
+ console.log(HELP);
370
+ return;
371
+ }
372
+ if (!opts.file && !opts.text) {
373
+ console.error(` ✗ Either --file or --text is required.`);
374
+ console.log(HELP);
375
+ process.exit(1);
376
+ }
377
+ if (opts.file && opts.text) {
378
+ console.error(` ✗ --file and --text are mutually exclusive.`);
379
+ process.exit(1);
380
+ }
381
+ const filePath = opts.file ? resolve(process.cwd(), opts.file) : undefined;
382
+ if (filePath && !existsSync(filePath)) {
383
+ console.error(` ✗ File not found: ${opts.file}`);
384
+ process.exit(1);
385
+ }
386
+ const outputPath = opts.output ? resolve(process.cwd(), opts.output) : undefined;
387
+ const source = opts.file
388
+ ? opts.file
389
+ : `"${(opts.text ?? '').slice(0, 60)}${(opts.text ?? '').length > 60 ? '…' : ''}"`;
390
+ console.log(c.dim(` Template: ${opts.template}`));
391
+ console.log(c.dim(` Input: ${source}\n`));
392
+ let result;
393
+ try {
394
+ result = await runPromptStep({
395
+ template: opts.template,
396
+ filePath,
397
+ goalText: opts.text ?? undefined,
398
+ contextPath: opts.context ?? undefined,
399
+ contextText: opts.contextText ?? undefined,
400
+ outputPath,
401
+ adapterName: opts.adapter ?? undefined,
402
+ verbose: opts.verbose,
403
+ dryRun: opts.dryRun,
404
+ pkgRoot,
405
+ });
406
+ }
407
+ catch (err) {
408
+ console.error(` ✗ ${err instanceof Error ? err.message : String(err)}`);
409
+ process.exit(1);
282
410
  }
283
- console.log(`
411
+ if (opts.dryRun)
412
+ return;
413
+ switch (result.outputType) {
414
+ case 'validation': {
415
+ if (result.isValid) {
416
+ console.log(c.green(` ✓ VALID`));
417
+ }
418
+ else {
419
+ console.log(c.red(` ✗ INVALID\n`));
420
+ console.log(result.errors ?? result.rawOutput);
421
+ process.exit(1);
422
+ }
423
+ break;
424
+ }
425
+ case 'prd': {
426
+ const relPath = result.outputPath.startsWith(process.cwd())
427
+ ? result.outputPath.slice(process.cwd().length + 1)
428
+ : result.outputPath;
429
+ console.log(c.green(` ✓ PRD written to ${relPath}`));
430
+ console.log(`\n ${c.dim('Next step:')} opencastle plan --file ${relPath} --template validate-prd`);
431
+ break;
432
+ }
433
+ default: {
434
+ const relPath = result.outputPath.startsWith(process.cwd())
435
+ ? result.outputPath.slice(process.cwd().length + 1)
436
+ : result.outputPath;
437
+ console.log(c.green(` ✓ Convoy spec written to ${relPath}`));
438
+ if (result.isValid === false) {
439
+ console.log(c.yellow(` (contains validation warnings — review before running)`));
440
+ }
441
+ console.log(`
284
442
  ${c.dim('Preview:')} npx opencastle run -f ${relPath} --dry-run
285
443
  ${c.dim('Execute:')} npx opencastle run -f ${relPath}
286
444
  `);
445
+ }
446
+ }
287
447
  }
288
448
  //# sourceMappingURL=plan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/cli/plan.ts"],"names":[],"mappings":"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"}
package/dist/cli/run.js CHANGED
@@ -806,7 +806,7 @@ export default async function run({ args, pkgRoot }) {
806
806
  }
807
807
  printPipelineResult(pipelineResult);
808
808
  if (pipelineDashboardResult) {
809
- console.log(`\n ${c.dim('Results saved to .opencastle/logs/convoys.ndjson')}`);
809
+ console.log(`\n ${c.dim('Results saved to .opencastle/convoy.db')}`);
810
810
  console.log(` ${c.dim('View again:')} opencastle dashboard`);
811
811
  pipelineDashboardResult.server.close();
812
812
  }
@@ -895,7 +895,7 @@ export default async function run({ args, pkgRoot }) {
895
895
  }
896
896
  printConvoyResult(result);
897
897
  if (dashboardResult) {
898
- console.log(`\n ${c.dim('Results saved to .opencastle/logs/convoys.ndjson')}`);
898
+ console.log(`\n ${c.dim('Results saved to .opencastle/convoy.db')}`);
899
899
  console.log(` ${c.dim('View again:')} opencastle dashboard`);
900
900
  dashboardResult.server.close();
901
901
  }