vralphy 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +47 -16
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +77 -12
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +47 -16
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/spec.d.ts +3 -0
- package/dist/commands/spec.d.ts.map +1 -1
- package/dist/commands/spec.js +76 -15
- package/dist/commands/spec.js.map +1 -1
- package/dist/index.js +72 -20
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +23 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +63 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/config.test.js +2 -2
- package/dist/lib/config.test.js.map +1 -1
- package/dist/lib/engines/base.d.ts +57 -8
- package/dist/lib/engines/base.d.ts.map +1 -1
- package/dist/lib/engines/base.js +58 -5
- package/dist/lib/engines/base.js.map +1 -1
- package/dist/lib/engines/claude.d.ts +5 -2
- package/dist/lib/engines/claude.d.ts.map +1 -1
- package/dist/lib/engines/claude.js +58 -12
- package/dist/lib/engines/claude.js.map +1 -1
- package/dist/lib/engines/codex.d.ts +5 -2
- package/dist/lib/engines/codex.d.ts.map +1 -1
- package/dist/lib/engines/codex.js +58 -12
- package/dist/lib/engines/codex.js.map +1 -1
- package/dist/lib/engines/index.d.ts +11 -1
- package/dist/lib/engines/index.d.ts.map +1 -1
- package/dist/lib/engines/index.js +16 -0
- package/dist/lib/engines/index.js.map +1 -1
- package/dist/lib/engines/opencode.d.ts +5 -2
- package/dist/lib/engines/opencode.d.ts.map +1 -1
- package/dist/lib/engines/opencode.js +49 -11
- package/dist/lib/engines/opencode.js.map +1 -1
- package/dist/lib/init.d.ts +17 -1
- package/dist/lib/init.d.ts.map +1 -1
- package/dist/lib/init.js +242 -55
- package/dist/lib/init.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/build.d.ts
CHANGED
|
@@ -2,5 +2,8 @@ import { VralphyConfig } from '../lib/config.js';
|
|
|
2
2
|
export interface BuildOptions {
|
|
3
3
|
iterations?: number;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* Execute build mode
|
|
7
|
+
*/
|
|
5
8
|
export declare function buildCommand(config: VralphyConfig, options: BuildOptions): Promise<void>;
|
|
6
9
|
//# 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;
|
|
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,CA4E9F"}
|
package/dist/commands/build.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } 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
|
+
*/
|
|
3
7
|
export async function buildCommand(config, options) {
|
|
4
8
|
const engine = getEngine(config.engine);
|
|
5
9
|
if (!(await engine.isAvailable())) {
|
|
@@ -8,28 +12,55 @@ export async function buildCommand(config, options) {
|
|
|
8
12
|
}
|
|
9
13
|
const maxIterations = options.iterations ?? 0;
|
|
10
14
|
let iteration = 0;
|
|
11
|
-
console.log(
|
|
12
|
-
console.log(`
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
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
|
+
];
|
|
20
23
|
while (true) {
|
|
21
24
|
if (maxIterations > 0 && iteration >= maxIterations) {
|
|
22
|
-
console.log(
|
|
25
|
+
console.log(`Reached max iterations (${maxIterations})`);
|
|
23
26
|
break;
|
|
24
27
|
}
|
|
25
|
-
console.log(`\n
|
|
26
|
-
|
|
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
|
+
}
|
|
27
44
|
if (config.dryRun) {
|
|
28
|
-
console.log('DRY RUN:
|
|
45
|
+
console.log('--- DRY RUN: Would execute prompt ---');
|
|
46
|
+
console.log(prompt.slice(0, 500) + '...');
|
|
47
|
+
console.log('--- END DRY RUN ---');
|
|
29
48
|
break;
|
|
30
49
|
}
|
|
31
50
|
try {
|
|
32
|
-
|
|
51
|
+
// Engine handles output to terminal
|
|
52
|
+
for await (const chunk of engine.execute(prompt, {
|
|
53
|
+
model: config.model,
|
|
54
|
+
executor: config.executor,
|
|
55
|
+
headless: true,
|
|
56
|
+
skipPermissions: true,
|
|
57
|
+
verbose: config.verbose,
|
|
58
|
+
reasoningEffort: config.reasoningEffort,
|
|
59
|
+
})) {
|
|
60
|
+
if (chunk.type === 'error') {
|
|
61
|
+
console.error('Error:', chunk.error);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
33
64
|
}
|
|
34
65
|
catch (e) {
|
|
35
66
|
console.error('Execution failed:', e);
|
|
@@ -37,6 +68,6 @@ export async function buildCommand(config, options) {
|
|
|
37
68
|
}
|
|
38
69
|
iteration++;
|
|
39
70
|
}
|
|
40
|
-
console.log(`\
|
|
71
|
+
console.log(`\nBuild complete after ${iteration} iteration(s)`);
|
|
41
72
|
}
|
|
42
73
|
//# sourceMappingURL=build.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
export interface InitCommandOptions {
|
|
2
2
|
from?: string;
|
|
3
|
+
noAi?: boolean;
|
|
4
|
+
approve?: boolean;
|
|
5
|
+
engine?: string;
|
|
6
|
+
verbose?: boolean;
|
|
3
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Execute init command
|
|
10
|
+
*/
|
|
4
11
|
export declare function initCommand(options: InitCommandOptions): Promise<void>;
|
|
5
12
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,26 +1,91 @@
|
|
|
1
|
+
import { createInterface } from 'readline';
|
|
1
2
|
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
|
+
*/
|
|
2
21
|
export async function initCommand(options) {
|
|
3
22
|
const dir = options.from ?? process.cwd();
|
|
4
|
-
console.log(`Initializing vralphy in: ${dir}
|
|
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
|
+
}
|
|
5
39
|
try {
|
|
6
|
-
|
|
7
|
-
if (
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
}
|
|
11
53
|
}
|
|
54
|
+
// Report results
|
|
55
|
+
reportResults(result.created, result.skipped);
|
|
12
56
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
57
|
+
else {
|
|
58
|
+
// Normal flow (no approval needed)
|
|
59
|
+
const { created, skipped } = await initProject(dir, initOptions);
|
|
60
|
+
reportResults(created, skipped);
|
|
18
61
|
}
|
|
19
|
-
console.log('\
|
|
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');
|
|
20
68
|
}
|
|
21
69
|
catch (e) {
|
|
22
70
|
console.error('Initialization failed:', e);
|
|
23
71
|
process.exit(1);
|
|
24
72
|
}
|
|
25
73
|
}
|
|
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
|
+
}
|
|
26
91
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/plan.d.ts
CHANGED
|
@@ -2,5 +2,8 @@ import { VralphyConfig } from '../lib/config.js';
|
|
|
2
2
|
export interface PlanOptions {
|
|
3
3
|
iterations?: number;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* Execute plan mode
|
|
7
|
+
*/
|
|
5
8
|
export declare function planCommand(config: VralphyConfig, options: PlanOptions): Promise<void>;
|
|
6
9
|
//# 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;
|
|
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,CA4E5F"}
|
package/dist/commands/plan.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { existsSync
|
|
1
|
+
import { existsSync } 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
|
+
*/
|
|
3
7
|
export async function planCommand(config, options) {
|
|
4
8
|
const engine = getEngine(config.engine);
|
|
5
9
|
if (!(await engine.isAvailable())) {
|
|
@@ -8,28 +12,55 @@ export async function planCommand(config, options) {
|
|
|
8
12
|
}
|
|
9
13
|
const maxIterations = options.iterations ?? 0;
|
|
10
14
|
let iteration = 0;
|
|
11
|
-
console.log(
|
|
12
|
-
console.log(`
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
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
|
+
];
|
|
20
23
|
while (true) {
|
|
21
24
|
if (maxIterations > 0 && iteration >= maxIterations) {
|
|
22
|
-
console.log(
|
|
25
|
+
console.log(`Reached max iterations (${maxIterations})`);
|
|
23
26
|
break;
|
|
24
27
|
}
|
|
25
|
-
console.log(`\n
|
|
26
|
-
|
|
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
|
+
}
|
|
27
44
|
if (config.dryRun) {
|
|
28
|
-
console.log('DRY RUN:
|
|
45
|
+
console.log('--- DRY RUN: Would execute prompt ---');
|
|
46
|
+
console.log(prompt.slice(0, 500) + '...');
|
|
47
|
+
console.log('--- END DRY RUN ---');
|
|
29
48
|
break;
|
|
30
49
|
}
|
|
31
50
|
try {
|
|
32
|
-
|
|
51
|
+
// Engine handles output to terminal
|
|
52
|
+
for await (const chunk of engine.execute(prompt, {
|
|
53
|
+
model: config.model,
|
|
54
|
+
executor: config.executor,
|
|
55
|
+
headless: true,
|
|
56
|
+
skipPermissions: true,
|
|
57
|
+
verbose: config.verbose,
|
|
58
|
+
reasoningEffort: config.reasoningEffort,
|
|
59
|
+
})) {
|
|
60
|
+
if (chunk.type === 'error') {
|
|
61
|
+
console.error('Error:', chunk.error);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
33
64
|
}
|
|
34
65
|
catch (e) {
|
|
35
66
|
console.error('Execution failed:', e);
|
|
@@ -37,6 +68,6 @@ export async function planCommand(config, options) {
|
|
|
37
68
|
}
|
|
38
69
|
iteration++;
|
|
39
70
|
}
|
|
40
|
-
console.log(`\
|
|
71
|
+
console.log(`\nPlanning complete after ${iteration} iteration(s)`);
|
|
41
72
|
}
|
|
42
73
|
//# sourceMappingURL=plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/spec.d.ts
CHANGED
|
@@ -2,5 +2,8 @@ import { VralphyConfig } from '../lib/config.js';
|
|
|
2
2
|
export interface SpecOptions {
|
|
3
3
|
topic?: string;
|
|
4
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* Execute spec mode
|
|
7
|
+
*/
|
|
5
8
|
export declare function specCommand(config: VralphyConfig, options: SpecOptions): Promise<void>;
|
|
6
9
|
//# sourceMappingURL=spec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"
|
|
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,CAsG5F"}
|
package/dist/commands/spec.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import { existsSync
|
|
2
|
-
import { readdir } from 'fs/promises';
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { readdir, writeFile } from 'fs/promises';
|
|
3
|
+
import { join } from 'path';
|
|
3
4
|
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
|
+
*/
|
|
4
10
|
async function listSpecs() {
|
|
5
11
|
const specsDir = 'specs';
|
|
6
12
|
if (!existsSync(specsDir))
|
|
@@ -8,6 +14,9 @@ async function listSpecs() {
|
|
|
8
14
|
const files = await readdir(specsDir);
|
|
9
15
|
return files.filter((f) => f.endsWith('.md')).map((f) => f.replace('.md', ''));
|
|
10
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Execute spec mode
|
|
19
|
+
*/
|
|
11
20
|
export async function specCommand(config, options) {
|
|
12
21
|
const engine = getEngine(config.engine);
|
|
13
22
|
if (!(await engine.isAvailable())) {
|
|
@@ -21,31 +30,83 @@ export async function specCommand(config, options) {
|
|
|
21
30
|
for (const spec of existingSpecs) {
|
|
22
31
|
console.log(` - ${spec}`);
|
|
23
32
|
}
|
|
33
|
+
console.log('\nUsage: vralphy spec <topic>');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log('No specs found. Create one with: vralphy spec <topic>');
|
|
24
37
|
}
|
|
25
|
-
console.log('\nUsage: vralphy spec <topic>');
|
|
26
38
|
return;
|
|
27
39
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (!
|
|
33
|
-
console.
|
|
34
|
-
|
|
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);
|
|
35
71
|
}
|
|
36
|
-
const prompt = readFileSync(promptPath, 'utf-8')
|
|
37
|
-
.replace('${topic}', options.topic);
|
|
38
72
|
if (config.dryRun) {
|
|
39
|
-
console.log('DRY RUN:
|
|
73
|
+
console.log('--- DRY RUN: Would execute prompt ---');
|
|
74
|
+
console.log(prompt);
|
|
75
|
+
console.log('--- END DRY RUN ---');
|
|
40
76
|
return;
|
|
41
77
|
}
|
|
78
|
+
let specContent = '';
|
|
42
79
|
try {
|
|
43
|
-
|
|
80
|
+
// Engine handles output to terminal, we just capture for saving
|
|
81
|
+
for await (const chunk of engine.execute(prompt, {
|
|
82
|
+
model: config.model,
|
|
83
|
+
executor: config.executor,
|
|
84
|
+
headless: false,
|
|
85
|
+
skipPermissions: false,
|
|
86
|
+
verbose: config.verbose,
|
|
87
|
+
reasoningEffort: config.reasoningEffort,
|
|
88
|
+
})) {
|
|
89
|
+
if (chunk.type === 'text' && chunk.content) {
|
|
90
|
+
specContent += chunk.content;
|
|
91
|
+
}
|
|
92
|
+
else if (chunk.type === 'error') {
|
|
93
|
+
console.error('Error:', chunk.error);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
44
96
|
}
|
|
45
97
|
catch (e) {
|
|
46
98
|
console.error('Execution failed:', e);
|
|
47
99
|
process.exit(1);
|
|
48
100
|
}
|
|
49
|
-
|
|
101
|
+
if (specContent.trim()) {
|
|
102
|
+
const specsDir = 'specs';
|
|
103
|
+
if (!existsSync(specsDir)) {
|
|
104
|
+
const { mkdir } = await import('fs/promises');
|
|
105
|
+
await mkdir(specsDir, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
const specPath = join(specsDir, `${topic}.md`);
|
|
108
|
+
await writeFile(specPath, specContent);
|
|
109
|
+
console.log(`\nSpec saved to: ${specPath}`);
|
|
110
|
+
}
|
|
50
111
|
}
|
|
51
112
|
//# sourceMappingURL=spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/commands/spec.ts"],"names":[],"mappings":"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"}
|