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.
Files changed (49) hide show
  1. package/dist/commands/build.d.ts +3 -0
  2. package/dist/commands/build.d.ts.map +1 -1
  3. package/dist/commands/build.js +47 -16
  4. package/dist/commands/build.js.map +1 -1
  5. package/dist/commands/init.d.ts +7 -0
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +77 -12
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/plan.d.ts +3 -0
  10. package/dist/commands/plan.d.ts.map +1 -1
  11. package/dist/commands/plan.js +47 -16
  12. package/dist/commands/plan.js.map +1 -1
  13. package/dist/commands/spec.d.ts +3 -0
  14. package/dist/commands/spec.d.ts.map +1 -1
  15. package/dist/commands/spec.js +76 -15
  16. package/dist/commands/spec.js.map +1 -1
  17. package/dist/index.js +72 -20
  18. package/dist/index.js.map +1 -1
  19. package/dist/lib/config.d.ts +23 -0
  20. package/dist/lib/config.d.ts.map +1 -1
  21. package/dist/lib/config.js +63 -4
  22. package/dist/lib/config.js.map +1 -1
  23. package/dist/lib/config.test.js +2 -2
  24. package/dist/lib/config.test.js.map +1 -1
  25. package/dist/lib/engines/base.d.ts +57 -8
  26. package/dist/lib/engines/base.d.ts.map +1 -1
  27. package/dist/lib/engines/base.js +58 -5
  28. package/dist/lib/engines/base.js.map +1 -1
  29. package/dist/lib/engines/claude.d.ts +5 -2
  30. package/dist/lib/engines/claude.d.ts.map +1 -1
  31. package/dist/lib/engines/claude.js +58 -12
  32. package/dist/lib/engines/claude.js.map +1 -1
  33. package/dist/lib/engines/codex.d.ts +5 -2
  34. package/dist/lib/engines/codex.d.ts.map +1 -1
  35. package/dist/lib/engines/codex.js +58 -12
  36. package/dist/lib/engines/codex.js.map +1 -1
  37. package/dist/lib/engines/index.d.ts +11 -1
  38. package/dist/lib/engines/index.d.ts.map +1 -1
  39. package/dist/lib/engines/index.js +16 -0
  40. package/dist/lib/engines/index.js.map +1 -1
  41. package/dist/lib/engines/opencode.d.ts +5 -2
  42. package/dist/lib/engines/opencode.d.ts.map +1 -1
  43. package/dist/lib/engines/opencode.js +49 -11
  44. package/dist/lib/engines/opencode.js.map +1 -1
  45. package/dist/lib/init.d.ts +17 -1
  46. package/dist/lib/init.d.ts.map +1 -1
  47. package/dist/lib/init.js +242 -55
  48. package/dist/lib/init.js.map +1 -1
  49. package/package.json +1 -1
@@ -1,7 +1,10 @@
1
- import { Engine, RunOptions } from './base.js';
1
+ import { Engine, ExecuteOptions, Chunk, EngineFlags } from './base.js';
2
2
  export declare class CodexEngine implements Engine {
3
3
  readonly name = "codex";
4
- run(prompt: string, options: RunOptions): Promise<void>;
4
+ execute(prompt: string, options: ExecuteOptions): AsyncIterable<Chunk>;
5
5
  isAvailable(): Promise<boolean>;
6
+ getFlags(options: EngineFlags): string[];
7
+ supportsInteractive(): boolean;
8
+ getCommand(): string;
6
9
  }
7
10
  //# 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,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
+ {"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;IA0CvE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE;IAsBxC,mBAAmB,IAAI,OAAO;IAI9B,UAAU,IAAI,MAAM;CAGrB"}
@@ -1,18 +1,31 @@
1
1
  import { spawn } from 'child_process';
2
- import { commandExists } from './base.js';
2
+ import { resolveModel } from './base.js';
3
3
  export class CodexEngine {
4
4
  name = 'codex';
5
- async run(prompt, options) {
6
- const args = ['--full-auto'];
7
- if (options.model) {
8
- args.push('--model', options.model);
5
+ async *execute(prompt, options) {
6
+ const flags = this.getFlags({
7
+ model: options.model,
8
+ skipPermissions: options.skipPermissions,
9
+ verbose: options.verbose,
10
+ reasoningEffort: options.reasoningEffort,
11
+ });
12
+ const args = [...flags];
13
+ const child = spawn('codex', args, {
14
+ stdio: ['pipe', 'pipe', 'pipe'],
15
+ });
16
+ child.stdin.write(prompt);
17
+ child.stdin.end();
18
+ // Stream stderr to terminal
19
+ child.stderr.on('data', (data) => {
20
+ process.stderr.write(data);
21
+ });
22
+ // Stream stdout to terminal and yield chunks
23
+ for await (const data of child.stdout) {
24
+ const text = data.toString();
25
+ process.stdout.write(text);
26
+ yield { type: 'text', content: text };
9
27
  }
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();
28
+ await new Promise((resolve, reject) => {
16
29
  child.on('close', (code) => {
17
30
  if (code === 0) {
18
31
  resolve();
@@ -23,9 +36,42 @@ export class CodexEngine {
23
36
  });
24
37
  child.on('error', reject);
25
38
  });
39
+ yield { type: 'done' };
26
40
  }
27
41
  async isAvailable() {
28
- return commandExists('codex');
42
+ return new Promise((resolve) => {
43
+ const child = spawn('codex', ['--version'], {
44
+ stdio: ['ignore', 'pipe', 'ignore'],
45
+ });
46
+ child.on('close', (code) => {
47
+ resolve(code === 0);
48
+ });
49
+ child.on('error', () => {
50
+ resolve(false);
51
+ });
52
+ });
53
+ }
54
+ getFlags(options) {
55
+ const flags = [];
56
+ if (options.model) {
57
+ flags.push('--model', resolveModel(options.model, 'codex'));
58
+ }
59
+ if (options.skipPermissions) {
60
+ flags.push('--full-auto');
61
+ }
62
+ if (options.verbose) {
63
+ flags.push('--verbose');
64
+ }
65
+ if (options.reasoningEffort) {
66
+ flags.push('-c', `model_reasoning_effort="${options.reasoningEffort}"`);
67
+ }
68
+ return flags;
69
+ }
70
+ supportsInteractive() {
71
+ return true;
72
+ }
73
+ getCommand() {
74
+ return 'codex';
29
75
  }
30
76
  }
31
77
  //# sourceMappingURL=codex.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/lib/engines/codex.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,19 @@
1
- export { Engine, RunOptions } from './base.js';
1
+ export { Engine, ExecuteOptions, Chunk, EngineFlags, MODEL_ALIASES, resolveModel } 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
+ */
7
10
  export declare function getEngine(name: EngineName): Engine;
11
+ /**
12
+ * Detect available engines
13
+ */
8
14
  export declare function detectEngines(): Promise<EngineName[]>;
15
+ /**
16
+ * Get default engine (first available)
17
+ */
18
+ export declare function getDefaultEngine(): Promise<Engine | null>;
9
19
  //# 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,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
+ {"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,3 +1,4 @@
1
+ export { MODEL_ALIASES, resolveModel } from './base.js';
1
2
  export { ClaudeEngine } from './claude.js';
2
3
  export { OpenCodeEngine } from './opencode.js';
3
4
  export { CodexEngine } from './codex.js';
@@ -9,9 +10,15 @@ const engines = {
9
10
  opencode: new OpenCodeEngine(),
10
11
  codex: new CodexEngine(),
11
12
  };
13
+ /**
14
+ * Get engine by name
15
+ */
12
16
  export function getEngine(name) {
13
17
  return engines[name];
14
18
  }
19
+ /**
20
+ * Detect available engines
21
+ */
15
22
  export async function detectEngines() {
16
23
  const available = [];
17
24
  for (const [name, engine] of Object.entries(engines)) {
@@ -21,4 +28,13 @@ export async function detectEngines() {
21
28
  }
22
29
  return available;
23
30
  }
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
+ }
24
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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
+ {"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,7 +1,10 @@
1
- import { Engine, RunOptions } from './base.js';
1
+ import { Engine, ExecuteOptions, Chunk, EngineFlags } from './base.js';
2
2
  export declare class OpenCodeEngine implements Engine {
3
3
  readonly name = "opencode";
4
- run(prompt: string, options: RunOptions): Promise<void>;
4
+ execute(prompt: string, options: ExecuteOptions): AsyncIterable<Chunk>;
5
5
  isAvailable(): Promise<boolean>;
6
+ getFlags(options: EngineFlags): string[];
7
+ supportsInteractive(): boolean;
8
+ getCommand(): string;
6
9
  }
7
10
  //# 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,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
+ {"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;IAqCvE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE;IAgBxC,mBAAmB,IAAI,OAAO;IAI9B,UAAU,IAAI,MAAM;CAGrB"}
@@ -1,17 +1,27 @@
1
1
  import { spawn } from 'child_process';
2
- import { commandExists } from './base.js';
2
+ import { resolveModel } from './base.js';
3
3
  export class OpenCodeEngine {
4
4
  name = 'opencode';
5
- async run(prompt, options) {
6
- const args = ['run'];
7
- if (options.model) {
8
- args.push('--model', options.model);
5
+ async *execute(prompt, options) {
6
+ const flags = this.getFlags({
7
+ model: options.model,
8
+ reasoningEffort: options.reasoningEffort,
9
+ });
10
+ const args = ['run', ...flags, prompt];
11
+ const child = spawn('opencode', args, {
12
+ stdio: ['inherit', 'pipe', 'pipe'],
13
+ });
14
+ // Stream stderr to terminal
15
+ child.stderr.on('data', (data) => {
16
+ process.stderr.write(data);
17
+ });
18
+ // Stream stdout to terminal and yield chunks
19
+ for await (const data of child.stdout) {
20
+ const text = data.toString();
21
+ process.stdout.write(text);
22
+ yield { type: 'text', content: text };
9
23
  }
10
- args.push(prompt);
11
- return new Promise((resolve, reject) => {
12
- const child = spawn('opencode', args, {
13
- stdio: 'inherit',
14
- });
24
+ await new Promise((resolve, reject) => {
15
25
  child.on('close', (code) => {
16
26
  if (code === 0) {
17
27
  resolve();
@@ -22,9 +32,37 @@ export class OpenCodeEngine {
22
32
  });
23
33
  child.on('error', reject);
24
34
  });
35
+ yield { type: 'done' };
25
36
  }
26
37
  async isAvailable() {
27
- return commandExists('opencode');
38
+ return new Promise((resolve) => {
39
+ const child = spawn('opencode', ['--version'], {
40
+ stdio: ['ignore', 'pipe', 'ignore'],
41
+ });
42
+ child.on('close', (code) => {
43
+ resolve(code === 0);
44
+ });
45
+ child.on('error', () => {
46
+ resolve(false);
47
+ });
48
+ });
49
+ }
50
+ getFlags(options) {
51
+ const flags = [];
52
+ if (options.model) {
53
+ flags.push('--model', resolveModel(options.model, 'opencode'));
54
+ }
55
+ // OpenCode doesn't have --yes or --verbose flags
56
+ if (options.reasoningEffort) {
57
+ flags.push('--variant', options.reasoningEffort);
58
+ }
59
+ return flags;
60
+ }
61
+ supportsInteractive() {
62
+ return false;
63
+ }
64
+ getCommand() {
65
+ return 'opencode';
28
66
  }
29
67
  }
30
68
  //# sourceMappingURL=opencode.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/lib/engines/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAA8C,YAAY,EAAE,MAAM,WAAW,CAAC;AAErF,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,UAAU,CAAC;IAE3B,KAAK,CAAC,CAAC,OAAO,CAAC,MAAc,EAAE,OAAuB;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;SACnC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,6CAA6C;QAC7C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,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;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE;gBAC7C,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,OAAoB;QAC3B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,iDAAiD;QAEjD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mBAAmB;QACjB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,UAAU;QACR,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
@@ -1,9 +1,25 @@
1
+ import { EngineName } from './engines/index.js';
1
2
  export interface InitOptions {
3
+ noAi?: boolean;
4
+ approve?: boolean;
5
+ engine?: EngineName;
2
6
  verbose?: boolean;
3
7
  }
4
8
  export interface InitResult {
5
9
  created: string[];
6
10
  skipped: string[];
11
+ agentsMdContent?: string;
7
12
  }
8
- export declare function initProject(dir?: string): Promise<InitResult>;
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>;
9
25
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
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"}
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,CA4ErB;AAmFD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,GAAE,MAAsB,EAC3B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAiBrB"}