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
@@ -1,137 +1,31 @@
1
1
  import { spawn } from 'child_process';
2
- import { resolveModel } from './base.js';
2
+ import { commandExists } from './base.js';
3
3
  export class ClaudeEngine {
4
4
  name = 'claude';
5
- async *execute(prompt, options) {
6
- const flags = this.getFlags({
7
- model: options.model,
8
- skipPermissions: options.skipPermissions,
9
- outputFormat: options.outputFormat,
10
- verbose: options.verbose,
11
- reasoningEffort: options.reasoningEffort,
12
- });
13
- const args = ['-p', ...flags];
14
- const child = spawn('claude', args, {
15
- stdio: ['pipe', 'pipe', 'pipe'],
16
- });
17
- child.stdin.write(prompt);
18
- child.stdin.end();
19
- let buffer = '';
20
- for await (const data of child.stdout) {
21
- buffer += data.toString();
22
- if (options.outputFormat === 'stream-json') {
23
- const lines = buffer.split('\n');
24
- buffer = lines.pop() ?? '';
25
- for (const line of lines) {
26
- if (!line.trim())
27
- continue;
28
- try {
29
- const parsed = JSON.parse(line);
30
- yield this.parseStreamJson(parsed);
31
- }
32
- catch {
33
- yield { type: 'text', content: line };
34
- }
35
- }
36
- }
37
- else {
38
- yield { type: 'text', content: data.toString() };
39
- buffer = '';
40
- }
41
- }
42
- if (buffer.trim()) {
43
- if (options.outputFormat === 'stream-json') {
44
- try {
45
- const parsed = JSON.parse(buffer);
46
- yield this.parseStreamJson(parsed);
47
- }
48
- catch {
49
- yield { type: 'text', content: buffer };
50
- }
51
- }
52
- else {
53
- yield { type: 'text', content: buffer };
54
- }
55
- }
56
- let stderrOutput = '';
57
- for await (const data of child.stderr) {
58
- stderrOutput += data.toString();
5
+ async run(prompt, options) {
6
+ const args = ['-p', '--dangerously-skip-permissions'];
7
+ if (options.model) {
8
+ args.push('--model', options.model);
59
9
  }
60
- await new Promise((resolve, reject) => {
10
+ return new Promise((resolve, reject) => {
11
+ const child = spawn('claude', args, {
12
+ stdio: ['pipe', 'inherit', 'inherit'],
13
+ });
14
+ child.stdin.write(prompt);
15
+ child.stdin.end();
61
16
  child.on('close', (code) => {
62
- if (code !== 0 && stderrOutput) {
63
- reject(new Error(`Claude exited with code ${code}: ${stderrOutput}`));
17
+ if (code === 0) {
18
+ resolve();
64
19
  }
65
20
  else {
66
- resolve();
21
+ reject(new Error(`Claude exited with code ${code}`));
67
22
  }
68
23
  });
69
24
  child.on('error', reject);
70
25
  });
71
- yield { type: 'done' };
72
- }
73
- parseStreamJson(data) {
74
- if (typeof data !== 'object' || data === null) {
75
- return { type: 'text', content: String(data) };
76
- }
77
- const obj = data;
78
- if (obj.type === 'assistant' && typeof obj.message === 'string') {
79
- return { type: 'text', content: obj.message };
80
- }
81
- if (obj.type === 'tool_use') {
82
- return { type: 'tool_use', tool: String(obj.name ?? 'unknown') };
83
- }
84
- if (obj.type === 'error') {
85
- return { type: 'error', error: String(obj.error ?? 'Unknown error') };
86
- }
87
- return { type: 'text', content: JSON.stringify(data) };
88
26
  }
89
27
  async isAvailable() {
90
- return new Promise((resolve) => {
91
- const child = spawn('claude', ['--version'], {
92
- stdio: ['ignore', 'pipe', 'ignore'],
93
- });
94
- child.on('close', (code) => {
95
- resolve(code === 0);
96
- });
97
- child.on('error', () => {
98
- resolve(false);
99
- });
100
- });
101
- }
102
- getFlags(options) {
103
- const flags = [];
104
- if (options.model) {
105
- flags.push('--model', resolveModel(options.model, 'claude'));
106
- }
107
- if (options.skipPermissions) {
108
- flags.push('--dangerously-skip-permissions');
109
- }
110
- if (options.outputFormat) {
111
- flags.push('--output-format', options.outputFormat);
112
- // Auto-add verbose for stream-json (Claude CLI requirement)
113
- if (options.outputFormat === 'stream-json') {
114
- flags.push('--verbose');
115
- }
116
- }
117
- else if (options.verbose) {
118
- // Only add explicit verbose if not already added above
119
- flags.push('--verbose');
120
- }
121
- if (options.reasoningEffort) {
122
- // Claude CLI does not support effort/reasoning parameters
123
- // The Claude API supports "effort" (low/medium/high) in Opus 4.5 only,
124
- // but the CLI tool does not expose this parameter yet
125
- // GitHub issue: https://github.com/anthropics/claude-code/issues/12376
126
- console.warn('Warning: Claude CLI does not support reasoning-effort parameter (not yet implemented). Ignoring.');
127
- }
128
- return flags;
129
- }
130
- supportsInteractive() {
131
- return true;
132
- }
133
- getCommand() {
134
- return 'claude';
28
+ return commandExists('claude');
135
29
  }
136
30
  }
137
31
  //# sourceMappingURL=claude.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/lib/engines/claude.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/lib/engines/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAsB,aAAa,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,QAAQ,CAAC;IAEzB,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,OAAmB;QAC3C,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;QAEtD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE;gBAClC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;aACtC,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAElB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -1,10 +1,7 @@
1
- import { Engine, ExecuteOptions, Chunk, EngineFlags } from './base.js';
1
+ import { Engine, RunOptions } from './base.js';
2
2
  export declare class CodexEngine implements Engine {
3
3
  readonly name = "codex";
4
- execute(prompt: string, options: ExecuteOptions): AsyncIterable<Chunk>;
4
+ run(prompt: string, options: RunOptions): Promise<void>;
5
5
  isAvailable(): Promise<boolean>;
6
- getFlags(options: EngineFlags): string[];
7
- supportsInteractive(): boolean;
8
- getCommand(): string;
9
6
  }
10
7
  //# sourceMappingURL=codex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/lib/engines/codex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAgB,MAAM,WAAW,CAAC;AAErF,qBAAa,WAAY,YAAW,MAAM;IACxC,QAAQ,CAAC,IAAI,WAAW;IAEjB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC;IAwCvE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE;IAwBxC,mBAAmB,IAAI,OAAO;IAI9B,UAAU,IAAI,MAAM;CAGrB"}
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/lib/engines/codex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAE9D,qBAAa,WAAY,YAAW,MAAM;IACxC,QAAQ,CAAC,IAAI,WAAW;IAElB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BvD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
@@ -1,77 +1,31 @@
1
1
  import { spawn } from 'child_process';
2
- import { resolveModel } from './base.js';
2
+ import { commandExists } from './base.js';
3
3
  export class CodexEngine {
4
4
  name = 'codex';
5
- async *execute(prompt, options) {
6
- const flags = this.getFlags({
7
- model: options.model,
8
- skipPermissions: options.skipPermissions,
9
- outputFormat: options.outputFormat,
10
- verbose: options.verbose,
11
- reasoningEffort: options.reasoningEffort,
12
- });
13
- const args = [...flags];
14
- const child = spawn('codex', args, {
15
- stdio: ['pipe', 'pipe', 'pipe'],
16
- });
17
- child.stdin.write(prompt);
18
- child.stdin.end();
19
- for await (const data of child.stdout) {
20
- yield { type: 'text', content: data.toString() };
21
- }
22
- let stderrOutput = '';
23
- for await (const data of child.stderr) {
24
- stderrOutput += data.toString();
5
+ async run(prompt, options) {
6
+ const args = ['--full-auto'];
7
+ if (options.model) {
8
+ args.push('--model', options.model);
25
9
  }
26
- await new Promise((resolve, reject) => {
10
+ return new Promise((resolve, reject) => {
11
+ const child = spawn('codex', args, {
12
+ stdio: ['pipe', 'inherit', 'inherit'],
13
+ });
14
+ child.stdin.write(prompt);
15
+ child.stdin.end();
27
16
  child.on('close', (code) => {
28
- if (code !== 0 && stderrOutput) {
29
- reject(new Error(`Codex exited with code ${code}: ${stderrOutput}`));
17
+ if (code === 0) {
18
+ resolve();
30
19
  }
31
20
  else {
32
- resolve();
21
+ reject(new Error(`Codex exited with code ${code}`));
33
22
  }
34
23
  });
35
24
  child.on('error', reject);
36
25
  });
37
- yield { type: 'done' };
38
26
  }
39
27
  async isAvailable() {
40
- return new Promise((resolve) => {
41
- const child = spawn('codex', ['--version'], {
42
- stdio: ['ignore', 'pipe', 'ignore'],
43
- });
44
- child.on('close', (code) => {
45
- resolve(code === 0);
46
- });
47
- child.on('error', () => {
48
- resolve(false);
49
- });
50
- });
51
- }
52
- getFlags(options) {
53
- const flags = [];
54
- if (options.model) {
55
- flags.push('--model', resolveModel(options.model, 'codex'));
56
- }
57
- if (options.skipPermissions) {
58
- flags.push('--full-auto');
59
- }
60
- if (options.verbose) {
61
- flags.push('--verbose');
62
- }
63
- if (options.reasoningEffort) {
64
- // Codex supports reasoning effort via config override
65
- // Values: minimal, low, medium, high, xhigh
66
- flags.push('-c', `model_reasoning_effort="${options.reasoningEffort}"`);
67
- }
68
- return flags;
69
- }
70
- supportsInteractive() {
71
- return true; // Codex supports interactive mode
72
- }
73
- getCommand() {
74
- return 'codex';
28
+ return commandExists('codex');
75
29
  }
76
30
  }
77
31
  //# sourceMappingURL=codex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/engines/codex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/engines/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAsB,aAAa,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,OAAO,WAAW;IACb,IAAI,GAAG,OAAO,CAAC;IAExB,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,OAAmB;QAC3C,MAAM,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAE7B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;gBACjC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;aACtC,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAElB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;CACF"}
@@ -1,19 +1,9 @@
1
- export { Engine, ExecuteOptions, Chunk, EngineFlags, MODEL_ALIASES, resolveModel } from './base.js';
1
+ export { Engine, RunOptions } from './base.js';
2
2
  export { ClaudeEngine } from './claude.js';
3
3
  export { OpenCodeEngine } from './opencode.js';
4
4
  export { CodexEngine } from './codex.js';
5
5
  import { Engine } from './base.js';
6
6
  export type EngineName = 'claude' | 'opencode' | 'codex';
7
- /**
8
- * Get engine by name
9
- */
10
7
  export declare function getEngine(name: EngineName): Engine;
11
- /**
12
- * Detect available engines
13
- */
14
8
  export declare function detectEngines(): Promise<EngineName[]>;
15
- /**
16
- * Get default engine (first available)
17
- */
18
- export declare function getDefaultEngine(): Promise<Engine | null>;
19
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKnC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAQzD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAU3D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI/D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKnC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAQzD,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAElD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAQ3D"}
@@ -1,4 +1,3 @@
1
- export { MODEL_ALIASES, resolveModel } from './base.js';
2
1
  export { ClaudeEngine } from './claude.js';
3
2
  export { OpenCodeEngine } from './opencode.js';
4
3
  export { CodexEngine } from './codex.js';
@@ -10,15 +9,9 @@ const engines = {
10
9
  opencode: new OpenCodeEngine(),
11
10
  codex: new CodexEngine(),
12
11
  };
13
- /**
14
- * Get engine by name
15
- */
16
12
  export function getEngine(name) {
17
13
  return engines[name];
18
14
  }
19
- /**
20
- * Detect available engines
21
- */
22
15
  export async function detectEngines() {
23
16
  const available = [];
24
17
  for (const [name, engine] of Object.entries(engines)) {
@@ -28,13 +21,4 @@ export async function detectEngines() {
28
21
  }
29
22
  return available;
30
23
  }
31
- /**
32
- * Get default engine (first available)
33
- */
34
- export async function getDefaultEngine() {
35
- const available = await detectEngines();
36
- if (available.length === 0)
37
- return null;
38
- return engines[available[0]];
39
- }
40
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC,MAAM,OAAO,GAA+B;IAC1C,MAAM,EAAE,IAAI,YAAY,EAAE;IAC1B,QAAQ,EAAE,IAAI,cAAc,EAAE;IAC9B,KAAK,EAAE,IAAI,WAAW,EAAE;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,SAAS,GAAiB,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,IAAI,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,IAAkB,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IACxC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/engines/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC,MAAM,OAAO,GAA+B;IAC1C,MAAM,EAAE,IAAI,YAAY,EAAE;IAC1B,QAAQ,EAAE,IAAI,cAAc,EAAE;IAC9B,KAAK,EAAE,IAAI,WAAW,EAAE;CACzB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,SAAS,GAAiB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,IAAI,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,IAAkB,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,11 +1,7 @@
1
- import { Engine, ExecuteOptions, Chunk, EngineFlags } from './base.js';
1
+ import { Engine, RunOptions } from './base.js';
2
2
  export declare class OpenCodeEngine implements Engine {
3
3
  readonly name = "opencode";
4
- execute(prompt: string, options: ExecuteOptions): AsyncIterable<Chunk>;
4
+ run(prompt: string, options: RunOptions): Promise<void>;
5
5
  isAvailable(): Promise<boolean>;
6
- getFlags(options: EngineFlags): string[];
7
- private parseStreamJson;
8
- supportsInteractive(): boolean;
9
- getCommand(): string;
10
6
  }
11
7
  //# sourceMappingURL=opencode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/lib/engines/opencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAgB,MAAM,WAAW,CAAC;AAErF,qBAAa,cAAe,YAAW,MAAM;IAC3C,QAAQ,CAAC,IAAI,cAAc;IAEpB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC;IAsEvE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE;IAuBxC,OAAO,CAAC,eAAe;IA6BvB,mBAAmB,IAAI,OAAO;IAI9B,UAAU,IAAI,MAAM;CAGrB"}
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/lib/engines/opencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAE9D,qBAAa,cAAe,YAAW,MAAM;IAC3C,QAAQ,CAAC,IAAI,cAAc;IAErB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BvD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
@@ -1,130 +1,30 @@
1
1
  import { spawn } from 'child_process';
2
- import { resolveModel } from './base.js';
2
+ import { commandExists } from './base.js';
3
3
  export class OpenCodeEngine {
4
4
  name = 'opencode';
5
- async *execute(prompt, options) {
6
- const flags = this.getFlags({
7
- model: options.model,
8
- skipPermissions: options.skipPermissions,
9
- outputFormat: options.outputFormat,
10
- verbose: options.verbose,
11
- reasoningEffort: options.reasoningEffort,
12
- });
13
- const args = ['run', ...flags, prompt];
14
- const child = spawn('opencode', args, {
15
- stdio: ['ignore', 'pipe', 'pipe'],
16
- });
17
- let buffer = '';
18
- for await (const data of child.stdout) {
19
- buffer += data.toString();
20
- if (options.outputFormat === 'stream-json') {
21
- const lines = buffer.split('\n');
22
- buffer = lines.pop() ?? '';
23
- for (const line of lines) {
24
- if (!line.trim())
25
- continue;
26
- try {
27
- const parsed = JSON.parse(line);
28
- yield this.parseStreamJson(parsed);
29
- }
30
- catch {
31
- yield { type: 'text', content: line };
32
- }
33
- }
34
- }
35
- else {
36
- yield { type: 'text', content: data.toString() };
37
- buffer = '';
38
- }
39
- }
40
- if (buffer.trim()) {
41
- if (options.outputFormat === 'stream-json') {
42
- try {
43
- const parsed = JSON.parse(buffer);
44
- yield this.parseStreamJson(parsed);
45
- }
46
- catch {
47
- yield { type: 'text', content: buffer };
48
- }
49
- }
50
- else {
51
- yield { type: 'text', content: buffer };
52
- }
53
- }
54
- let stderrOutput = '';
55
- for await (const data of child.stderr) {
56
- stderrOutput += data.toString();
5
+ async run(prompt, options) {
6
+ const args = ['run'];
7
+ if (options.model) {
8
+ args.push('--model', options.model);
57
9
  }
58
- await new Promise((resolve, reject) => {
10
+ args.push(prompt);
11
+ return new Promise((resolve, reject) => {
12
+ const child = spawn('opencode', args, {
13
+ stdio: 'inherit',
14
+ });
59
15
  child.on('close', (code) => {
60
- if (code !== 0 && stderrOutput) {
61
- reject(new Error(`OpenCode exited with code ${code}: ${stderrOutput}`));
16
+ if (code === 0) {
17
+ resolve();
62
18
  }
63
19
  else {
64
- resolve();
20
+ reject(new Error(`OpenCode exited with code ${code}`));
65
21
  }
66
22
  });
67
23
  child.on('error', reject);
68
24
  });
69
- yield { type: 'done' };
70
25
  }
71
26
  async isAvailable() {
72
- return new Promise((resolve) => {
73
- const child = spawn('opencode', ['--version'], {
74
- stdio: ['ignore', 'pipe', 'ignore'],
75
- });
76
- child.on('close', (code) => {
77
- resolve(code === 0);
78
- });
79
- child.on('error', () => {
80
- resolve(false);
81
- });
82
- });
83
- }
84
- getFlags(options) {
85
- const flags = [];
86
- if (options.model) {
87
- flags.push('--model', resolveModel(options.model, 'opencode'));
88
- }
89
- // OpenCode doesn't have --yes or --verbose flags
90
- // skipPermissions and verbose options are ignored for this engine
91
- // Map stream-json to OpenCode's --format json
92
- if (options.outputFormat === 'stream-json') {
93
- flags.push('--format', 'json');
94
- }
95
- if (options.reasoningEffort) {
96
- // OpenCode uses --variant for reasoning effort (not --reasoning-effort)
97
- flags.push('--variant', options.reasoningEffort);
98
- }
99
- return flags;
100
- }
101
- parseStreamJson(data) {
102
- if (typeof data !== 'object' || data === null) {
103
- return { type: 'text', content: '' };
104
- }
105
- const obj = data;
106
- // OpenCode emits: {"type":"text","part":{"type":"text","text":"..."}}
107
- if (obj.type === 'text') {
108
- const part = obj.part;
109
- const text = (typeof obj.content === 'string' && obj.content) ||
110
- (typeof part?.text === 'string' && part.text) ||
111
- (typeof part?.content === 'string' && part.content);
112
- return { type: 'text', content: text || '' };
113
- }
114
- if (obj.type === 'tool_use') {
115
- return { type: 'tool_use', tool: String(obj.name ?? 'unknown') };
116
- }
117
- if (obj.type === 'error') {
118
- return { type: 'error', error: String(obj.error ?? 'Unknown error') };
119
- }
120
- // Ignore step_start, step_finish, and other event types
121
- return { type: 'text', content: '' };
122
- }
123
- supportsInteractive() {
124
- return false;
125
- }
126
- getCommand() {
127
- return 'opencode';
27
+ return commandExists('opencode');
128
28
  }
129
29
  }
130
30
  //# sourceMappingURL=opencode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/engines/opencode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/engines/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAsB,aAAa,EAAE,MAAM,WAAW,CAAC;AAE9D,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,UAAU,CAAC;IAE3B,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,OAAmB;QAC3C,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAErB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;gBACpC,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -1,25 +1,9 @@
1
- import { EngineName } from './engines/index.js';
2
1
  export interface InitOptions {
3
- noAi?: boolean;
4
- approve?: boolean;
5
- engine?: EngineName;
6
2
  verbose?: boolean;
7
3
  }
8
4
  export interface InitResult {
9
5
  created: string[];
10
6
  skipped: string[];
11
- agentsMdContent?: string;
12
7
  }
13
- /**
14
- * Template-based init (fallback when no AI available)
15
- */
16
- export declare function templateBasedInit(dir: string): Promise<InitResult>;
17
- /**
18
- * AI-powered init using the specified engine
19
- */
20
- export declare function aiPoweredInit(dir: string, engineName: EngineName, options: InitOptions): Promise<InitResult>;
21
- /**
22
- * Initialize a project for vralphy
23
- */
24
- export declare function initProject(dir?: string, options?: InitOptions): Promise<InitResult>;
8
+ export declare function initProject(dir?: string): Promise<InitResult>;
25
9
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"AAKA,OAAO,EAA4B,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAE1F,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAsJD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA2BxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA+ErB;AAmFD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAiBrB"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAgED,wBAAsB,WAAW,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAkFlF"}