vralphy 0.5.5 → 0.6.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 (47) hide show
  1. package/dist/commands/build.d.ts +0 -3
  2. package/dist/commands/build.d.ts.map +1 -1
  3. package/dist/commands/build.js +16 -50
  4. package/dist/commands/build.js.map +1 -1
  5. package/dist/commands/init.d.ts +0 -7
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +12 -77
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/plan.d.ts +0 -3
  10. package/dist/commands/plan.d.ts.map +1 -1
  11. package/dist/commands/plan.js +16 -50
  12. package/dist/commands/plan.js.map +1 -1
  13. package/dist/commands/spec.d.ts +0 -3
  14. package/dist/commands/spec.d.ts.map +1 -1
  15. package/dist/commands/spec.js +15 -77
  16. package/dist/commands/spec.js.map +1 -1
  17. package/dist/index.js +20 -72
  18. package/dist/index.js.map +1 -1
  19. package/dist/lib/config.d.ts +0 -23
  20. package/dist/lib/config.d.ts.map +1 -1
  21. package/dist/lib/config.js +4 -63
  22. package/dist/lib/config.js.map +1 -1
  23. package/dist/lib/engines/base.d.ts +8 -59
  24. package/dist/lib/engines/base.d.ts.map +1 -1
  25. package/dist/lib/engines/base.js +5 -58
  26. package/dist/lib/engines/base.js.map +1 -1
  27. package/dist/lib/engines/claude.d.ts +2 -6
  28. package/dist/lib/engines/claude.d.ts.map +1 -1
  29. package/dist/lib/engines/claude.js +15 -121
  30. package/dist/lib/engines/claude.js.map +1 -1
  31. package/dist/lib/engines/codex.d.ts +2 -5
  32. package/dist/lib/engines/codex.d.ts.map +1 -1
  33. package/dist/lib/engines/codex.js +15 -61
  34. package/dist/lib/engines/codex.js.map +1 -1
  35. package/dist/lib/engines/index.d.ts +1 -11
  36. package/dist/lib/engines/index.d.ts.map +1 -1
  37. package/dist/lib/engines/index.js +0 -16
  38. package/dist/lib/engines/index.js.map +1 -1
  39. package/dist/lib/engines/opencode.d.ts +2 -6
  40. package/dist/lib/engines/opencode.d.ts.map +1 -1
  41. package/dist/lib/engines/opencode.js +14 -114
  42. package/dist/lib/engines/opencode.js.map +1 -1
  43. package/dist/lib/init.d.ts +1 -17
  44. package/dist/lib/init.d.ts.map +1 -1
  45. package/dist/lib/init.js +55 -245
  46. package/dist/lib/init.js.map +1 -1
  47. package/package.json +1 -1
@@ -2,8 +2,5 @@ import { VralphyConfig } from '../lib/config.js';
2
2
  export interface BuildOptions {
3
3
  iterations?: number;
4
4
  }
5
- /**
6
- * Execute build mode
7
- */
8
5
  export declare function buildCommand(config: VralphyConfig, options: BuildOptions): Promise<void>;
9
6
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8E9F"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD9F"}
@@ -1,9 +1,5 @@
1
- import { existsSync } from 'fs';
1
+ import { existsSync, readFileSync } from 'fs';
2
2
  import { getEngine } from '../lib/engines/index.js';
3
- import { loadPrompt, interpolatePrompt, DEFAULT_BUILD_PROMPT } from '../lib/prompts.js';
4
- /**
5
- * Execute build mode
6
- */
7
3
  export async function buildCommand(config, options) {
8
4
  const engine = getEngine(config.engine);
9
5
  if (!(await engine.isAvailable())) {
@@ -12,58 +8,28 @@ export async function buildCommand(config, options) {
12
8
  }
13
9
  const maxIterations = options.iterations ?? 0;
14
10
  let iteration = 0;
15
- console.log(`Starting build mode with ${config.engine} engine`);
16
- console.log(`Model: ${config.model}, Executor: ${config.executor}`);
17
- console.log(`Max iterations: ${maxIterations || 'unlimited'}`);
18
- // Prompt locations in order of preference
19
- const promptPaths = [
20
- '.vralphy/prompts/build.md', // New location
21
- 'PROMPT_build.md', // Legacy location (backwards compat)
22
- ];
11
+ console.log(`\n=== vralphy build | ${config.engine} | ${config.model} ===`);
12
+ console.log(`Max iterations: ${maxIterations || 'unlimited'}\n`);
13
+ // Find prompt file
14
+ const promptPaths = ['.vralphy/prompts/build.md', 'PROMPT_build.md'];
15
+ const promptPath = promptPaths.find(p => existsSync(p));
16
+ if (!promptPath) {
17
+ console.error('No build prompt found. Create .vralphy/prompts/build.md or PROMPT_build.md');
18
+ process.exit(1);
19
+ }
23
20
  while (true) {
24
21
  if (maxIterations > 0 && iteration >= maxIterations) {
25
- console.log(`Reached max iterations (${maxIterations})`);
22
+ console.log(`\nReached max iterations (${maxIterations})`);
26
23
  break;
27
24
  }
28
- console.log(`\n=== Iteration ${iteration + 1} ===\n`);
29
- let prompt;
30
- const promptContext = {
31
- model: config.model,
32
- executor: config.executor,
33
- engine: config.engine,
34
- };
35
- // Find first existing prompt file
36
- const existingPromptPath = promptPaths.find(p => existsSync(p));
37
- if (existingPromptPath) {
38
- prompt = await loadPrompt(existingPromptPath, promptContext);
39
- }
40
- else {
41
- // Use default prompt with lazy loading section already included
42
- prompt = interpolatePrompt(DEFAULT_BUILD_PROMPT, promptContext);
43
- }
25
+ console.log(`\n--- Iteration ${iteration + 1} ---\n`);
26
+ const prompt = readFileSync(promptPath, 'utf-8');
44
27
  if (config.dryRun) {
45
- console.log('--- DRY RUN: Would execute prompt ---');
46
- console.log(prompt.slice(0, 500) + '...');
47
- console.log('--- END DRY RUN ---');
28
+ console.log('DRY RUN:', prompt.slice(0, 200) + '...');
48
29
  break;
49
30
  }
50
31
  try {
51
- for await (const chunk of engine.execute(prompt, {
52
- model: config.model,
53
- executor: config.executor,
54
- headless: true,
55
- skipPermissions: true,
56
- outputFormat: 'stream-json',
57
- verbose: config.verbose,
58
- reasoningEffort: config.reasoningEffort,
59
- })) {
60
- if (chunk.type === 'text' && chunk.content) {
61
- process.stdout.write(chunk.content);
62
- }
63
- else if (chunk.type === 'error') {
64
- console.error('Error:', chunk.error);
65
- }
66
- }
32
+ await engine.run(prompt, { model: config.model });
67
33
  }
68
34
  catch (e) {
69
35
  console.error('Execution failed:', e);
@@ -71,6 +37,6 @@ export async function buildCommand(config, options) {
71
37
  }
72
38
  iteration++;
73
39
  }
74
- console.log(`\nBuild complete after ${iteration} iteration(s)`);
40
+ console.log(`\nDone after ${iteration} iteration(s)`);
75
41
  }
76
42
  //# sourceMappingURL=build.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMpD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAqB,EAAE,OAAqB;IAC7E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,MAAM,8CAA8C,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC9C,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,IAAI,WAAW,IAAI,CAAC,CAAC;IAEjE,mBAAmB;IACnB,MAAM,WAAW,GAAG,CAAC,2BAA2B,EAAE,iBAAiB,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,aAAa,GAAG,CAAC,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,6BAA6B,aAAa,GAAG,CAAC,CAAC;YAC3D,MAAM;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACtD,MAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,SAAS,EAAE,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,eAAe,CAAC,CAAC;AACxD,CAAC"}
@@ -1,12 +1,5 @@
1
1
  export interface InitCommandOptions {
2
2
  from?: string;
3
- noAi?: boolean;
4
- approve?: boolean;
5
- engine?: string;
6
- verbose?: boolean;
7
3
  }
8
- /**
9
- * Execute init command
10
- */
11
4
  export declare function initCommand(options: InitCommandOptions): Promise<void>;
12
5
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0D5E"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5E"}
@@ -1,91 +1,26 @@
1
- import { createInterface } from 'readline';
2
1
  import { initProject } from '../lib/init.js';
3
- /**
4
- * Prompt user for confirmation
5
- */
6
- async function confirm(message) {
7
- const rl = createInterface({
8
- input: process.stdin,
9
- output: process.stdout,
10
- });
11
- return new Promise((resolve) => {
12
- rl.question(`${message} [y/N] `, (answer) => {
13
- rl.close();
14
- resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
15
- });
16
- });
17
- }
18
- /**
19
- * Execute init command
20
- */
21
2
  export async function initCommand(options) {
22
3
  const dir = options.from ?? process.cwd();
23
- console.log(`Initializing vralphy in: ${dir}`);
24
- // Build init options
25
- const initOptions = {
26
- noAi: options.noAi,
27
- approve: options.approve,
28
- verbose: options.verbose,
29
- };
30
- // Validate engine if specified
31
- if (options.engine) {
32
- const validEngines = ['claude', 'opencode', 'codex'];
33
- if (!validEngines.includes(options.engine)) {
34
- console.error(`Invalid engine: ${options.engine}. Valid options: ${validEngines.join(', ')}`);
35
- process.exit(1);
36
- }
37
- initOptions.engine = options.engine;
38
- }
4
+ console.log(`Initializing vralphy in: ${dir}\n`);
39
5
  try {
40
- // If --approve flag is set, we need to handle the approval flow
41
- if (options.approve && !options.noAi) {
42
- // First run with approve mode - AI generates but we need to confirm
43
- const result = await initProject(dir, { ...initOptions, approve: true });
44
- if (result.agentsMdContent) {
45
- console.log('\n--- Generated AGENTS.md Preview ---\n');
46
- console.log(result.agentsMdContent);
47
- console.log('\n--- End Preview ---\n');
48
- const approved = await confirm('Save this AGENTS.md?');
49
- if (!approved) {
50
- console.log('Initialization cancelled.');
51
- process.exit(0);
52
- }
6
+ const { created, skipped } = await initProject(dir);
7
+ if (created.length > 0) {
8
+ console.log('Created:');
9
+ for (const file of created) {
10
+ console.log(` + ${file}`);
53
11
  }
54
- // Report results
55
- reportResults(result.created, result.skipped);
56
12
  }
57
- else {
58
- // Normal flow (no approval needed)
59
- const { created, skipped } = await initProject(dir, initOptions);
60
- reportResults(created, skipped);
13
+ if (skipped.length > 0) {
14
+ console.log('\nSkipped (already exist):');
15
+ for (const file of skipped) {
16
+ console.log(` - ${file}`);
17
+ }
61
18
  }
62
- console.log('\nInitialization complete!');
63
- console.log('\nNext steps:');
64
- console.log(' 1. Review and customize .vralphy/AGENTS.md');
65
- console.log(' 2. Create specs in specs/ directory');
66
- console.log(' 3. Run: vralphy plan');
67
- console.log(' 4. Run: vralphy build');
19
+ console.log('\nDone! Edit .vralphy/prompts/ and run: vralphy plan');
68
20
  }
69
21
  catch (e) {
70
22
  console.error('Initialization failed:', e);
71
23
  process.exit(1);
72
24
  }
73
25
  }
74
- /**
75
- * Report created and skipped files
76
- */
77
- function reportResults(created, skipped) {
78
- if (created.length > 0) {
79
- console.log('\nCreated:');
80
- for (const file of created) {
81
- console.log(` + ${file}`);
82
- }
83
- }
84
- if (skipped.length > 0) {
85
- console.log('\nSkipped (already exist):');
86
- for (const file of skipped) {
87
- console.log(` - ${file}`);
88
- }
89
- }
90
- }
91
26
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM7C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QAEpD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -2,8 +2,5 @@ import { VralphyConfig } from '../lib/config.js';
2
2
  export interface PlanOptions {
3
3
  iterations?: number;
4
4
  }
5
- /**
6
- * Execute plan mode
7
- */
8
5
  export declare function planCommand(config: VralphyConfig, options: PlanOptions): Promise<void>;
9
6
  //# sourceMappingURL=plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA8E5F"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD5F"}
@@ -1,9 +1,5 @@
1
- import { existsSync } from 'fs';
1
+ import { existsSync, readFileSync } from 'fs';
2
2
  import { getEngine } from '../lib/engines/index.js';
3
- import { loadPrompt, interpolatePrompt, DEFAULT_PLAN_PROMPT } from '../lib/prompts.js';
4
- /**
5
- * Execute plan mode
6
- */
7
3
  export async function planCommand(config, options) {
8
4
  const engine = getEngine(config.engine);
9
5
  if (!(await engine.isAvailable())) {
@@ -12,58 +8,28 @@ export async function planCommand(config, options) {
12
8
  }
13
9
  const maxIterations = options.iterations ?? 0;
14
10
  let iteration = 0;
15
- console.log(`Starting plan mode with ${config.engine} engine`);
16
- console.log(`Model: ${config.model}, Executor: ${config.executor}`);
17
- console.log(`Max iterations: ${maxIterations || 'unlimited'}`);
18
- // Prompt locations in order of preference
19
- const promptPaths = [
20
- '.vralphy/prompts/plan.md', // New location
21
- 'PROMPT_plan.md', // Legacy location (backwards compat)
22
- ];
11
+ console.log(`\n=== vralphy plan | ${config.engine} | ${config.model} ===`);
12
+ console.log(`Max iterations: ${maxIterations || 'unlimited'}\n`);
13
+ // Find prompt file
14
+ const promptPaths = ['.vralphy/prompts/plan.md', 'PROMPT_plan.md'];
15
+ const promptPath = promptPaths.find(p => existsSync(p));
16
+ if (!promptPath) {
17
+ console.error('No plan prompt found. Create .vralphy/prompts/plan.md or PROMPT_plan.md');
18
+ process.exit(1);
19
+ }
23
20
  while (true) {
24
21
  if (maxIterations > 0 && iteration >= maxIterations) {
25
- console.log(`Reached max iterations (${maxIterations})`);
22
+ console.log(`\nReached max iterations (${maxIterations})`);
26
23
  break;
27
24
  }
28
- console.log(`\n=== Plan Iteration ${iteration + 1} ===\n`);
29
- let prompt;
30
- const promptContext = {
31
- model: config.model,
32
- executor: config.executor,
33
- engine: config.engine,
34
- };
35
- // Find first existing prompt file
36
- const existingPromptPath = promptPaths.find(p => existsSync(p));
37
- if (existingPromptPath) {
38
- prompt = await loadPrompt(existingPromptPath, promptContext);
39
- }
40
- else {
41
- // Use default prompt with lazy loading section already included
42
- prompt = interpolatePrompt(DEFAULT_PLAN_PROMPT, promptContext);
43
- }
25
+ console.log(`\n--- Iteration ${iteration + 1} ---\n`);
26
+ const prompt = readFileSync(promptPath, 'utf-8');
44
27
  if (config.dryRun) {
45
- console.log('--- DRY RUN: Would execute prompt ---');
46
- console.log(prompt.slice(0, 500) + '...');
47
- console.log('--- END DRY RUN ---');
28
+ console.log('DRY RUN:', prompt.slice(0, 200) + '...');
48
29
  break;
49
30
  }
50
31
  try {
51
- for await (const chunk of engine.execute(prompt, {
52
- model: config.model,
53
- executor: config.executor,
54
- headless: true,
55
- skipPermissions: true,
56
- outputFormat: 'stream-json',
57
- verbose: config.verbose,
58
- reasoningEffort: config.reasoningEffort,
59
- })) {
60
- if (chunk.type === 'text' && chunk.content) {
61
- process.stdout.write(chunk.content);
62
- }
63
- else if (chunk.type === 'error') {
64
- console.error('Error:', chunk.error);
65
- }
66
- }
32
+ await engine.run(prompt, { model: config.model });
67
33
  }
68
34
  catch (e) {
69
35
  console.error('Execution failed:', e);
@@ -71,6 +37,6 @@ export async function planCommand(config, options) {
71
37
  }
72
38
  iteration++;
73
39
  }
74
- console.log(`\nPlanning complete after ${iteration} iteration(s)`);
40
+ console.log(`\nDone after ${iteration} iteration(s)`);
75
41
  }
76
42
  //# sourceMappingURL=plan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAMpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAqB,EAAE,OAAoB;IAC3E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,MAAM,8CAA8C,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC9C,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,mBAAmB,aAAa,IAAI,WAAW,IAAI,CAAC,CAAC;IAEjE,mBAAmB;IACnB,MAAM,WAAW,GAAG,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,aAAa,GAAG,CAAC,IAAI,SAAS,IAAI,aAAa,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,6BAA6B,aAAa,GAAG,CAAC,CAAC;YAC3D,MAAM;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YACtD,MAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,SAAS,EAAE,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,eAAe,CAAC,CAAC;AACxD,CAAC"}
@@ -2,8 +2,5 @@ import { VralphyConfig } from '../lib/config.js';
2
2
  export interface SpecOptions {
3
3
  topic?: string;
4
4
  }
5
- /**
6
- * Execute spec mode
7
- */
8
5
  export declare function specCommand(config: VralphyConfig, options: SpecOptions): Promise<void>;
9
6
  //# sourceMappingURL=spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAaD;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG5F"}
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD,wBAAsB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C5F"}
@@ -1,12 +1,6 @@
1
- import { existsSync } from 'fs';
2
- import { readdir, writeFile } from 'fs/promises';
3
- import { join } from 'path';
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { readdir } from 'fs/promises';
4
3
  import { getEngine } from '../lib/engines/index.js';
5
- import { loadPrompt, interpolatePrompt, DEFAULT_SPEC_PROMPT } from '../lib/prompts.js';
6
- import { findProjectRoot } from '../lib/config.js';
7
- /**
8
- * List existing specs
9
- */
10
4
  async function listSpecs() {
11
5
  const specsDir = 'specs';
12
6
  if (!existsSync(specsDir))
@@ -14,9 +8,6 @@ async function listSpecs() {
14
8
  const files = await readdir(specsDir);
15
9
  return files.filter((f) => f.endsWith('.md')).map((f) => f.replace('.md', ''));
16
10
  }
17
- /**
18
- * Execute spec mode
19
- */
20
11
  export async function specCommand(config, options) {
21
12
  const engine = getEngine(config.engine);
22
13
  if (!(await engine.isAvailable())) {
@@ -30,84 +21,31 @@ export async function specCommand(config, options) {
30
21
  for (const spec of existingSpecs) {
31
22
  console.log(` - ${spec}`);
32
23
  }
33
- console.log('\nUsage: vralphy spec <topic>');
34
- }
35
- else {
36
- console.log('No specs found. Create one with: vralphy spec <topic>');
37
24
  }
25
+ console.log('\nUsage: vralphy spec <topic>');
38
26
  return;
39
27
  }
40
- const topic = options.topic;
41
- const existingSpecs = await listSpecs();
42
- console.log(`Starting spec phase for: ${topic}`);
43
- console.log(`Engine: ${config.engine}`);
44
- if (!engine.supportsInteractive()) {
45
- console.log('\nNote: Non-interactive mode (OpenCode engine)');
46
- console.log('A template will be generated for manual editing.\n');
47
- }
48
- const projectRoot = findProjectRoot();
49
- const projectName = projectRoot.split('/').pop() ?? 'project';
50
- // Prompt locations in order of preference
51
- const promptPaths = [
52
- '.vralphy/prompts/spec.md', // New location
53
- 'PROMPT_spec.md', // Legacy location (backwards compat)
54
- ];
55
- const promptContext = {
56
- model: config.model,
57
- executor: config.executor,
58
- engine: config.engine,
59
- topic,
60
- projectName,
61
- existingSpecs,
62
- };
63
- // Find first existing prompt file
64
- const existingPromptPath = promptPaths.find(p => existsSync(p));
65
- let prompt;
66
- if (existingPromptPath) {
67
- prompt = await loadPrompt(existingPromptPath, promptContext);
68
- }
69
- else {
70
- prompt = interpolatePrompt(DEFAULT_SPEC_PROMPT, promptContext);
28
+ console.log(`\n=== vralphy spec | ${config.engine} | ${options.topic} ===\n`);
29
+ // Find prompt file
30
+ const promptPaths = ['.vralphy/prompts/spec.md', 'PROMPT_spec.md'];
31
+ const promptPath = promptPaths.find(p => existsSync(p));
32
+ if (!promptPath) {
33
+ console.error('No spec prompt found. Create .vralphy/prompts/spec.md or PROMPT_spec.md');
34
+ process.exit(1);
71
35
  }
36
+ const prompt = readFileSync(promptPath, 'utf-8')
37
+ .replace('${topic}', options.topic);
72
38
  if (config.dryRun) {
73
- console.log('--- DRY RUN: Would execute prompt ---');
74
- console.log(prompt);
75
- console.log('--- END DRY RUN ---');
39
+ console.log('DRY RUN:', prompt.slice(0, 200) + '...');
76
40
  return;
77
41
  }
78
- let specContent = '';
79
42
  try {
80
- for await (const chunk of engine.execute(prompt, {
81
- model: config.model,
82
- executor: config.executor,
83
- headless: false,
84
- skipPermissions: false,
85
- outputFormat: 'text',
86
- verbose: config.verbose,
87
- reasoningEffort: config.reasoningEffort,
88
- })) {
89
- if (chunk.type === 'text' && chunk.content) {
90
- process.stdout.write(chunk.content);
91
- specContent += chunk.content;
92
- }
93
- else if (chunk.type === 'error') {
94
- console.error('Error:', chunk.error);
95
- }
96
- }
43
+ await engine.run(prompt, { model: config.model });
97
44
  }
98
45
  catch (e) {
99
46
  console.error('Execution failed:', e);
100
47
  process.exit(1);
101
48
  }
102
- if (specContent.trim()) {
103
- const specsDir = 'specs';
104
- if (!existsSync(specsDir)) {
105
- const { mkdir } = await import('fs/promises');
106
- await mkdir(specsDir, { recursive: true });
107
- }
108
- const specPath = join(specsDir, `${topic}.md`);
109
- await writeFile(specPath, specContent);
110
- console.log(`\nSpec saved to: ${specPath}`);
111
- }
49
+ console.log('\nSpec session complete. Save output to specs/ directory manually if needed.');
112
50
  }
113
51
  //# sourceMappingURL=spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"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"}