opencastle 0.23.2 → 0.24.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.
@@ -0,0 +1,6 @@
1
+ import type { Task, ExecuteOptions, ExecuteResult } from '../../types.js';
2
+ export declare const name = "claude";
3
+ export declare function isAvailable(): Promise<boolean>;
4
+ export declare function execute(task: Task, options?: ExecuteOptions): Promise<ExecuteResult>;
5
+ export declare function kill(task: Task): void;
6
+ //# sourceMappingURL=claude.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../../src/cli/run/adapters/claude.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAA;AAGrF,eAAO,MAAM,IAAI,WAAW,CAAA;AAwB5B,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAUpD;AA6LD,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAI9F;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAGrC"}
@@ -0,0 +1,211 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { parseTimeout } from '../schema.js';
3
+ // Adapter name
4
+ export const name = 'claude';
5
+ // Module-level state for mode selection
6
+ let mode = null;
7
+ // SDK dynamic import check
8
+ async function sdkAvailable() {
9
+ try {
10
+ await import('@anthropic-ai/agent-sdk');
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ // CLI check
18
+ async function cliAvailable() {
19
+ return new Promise((resolve) => {
20
+ const proc = spawn('which', ['claude'], { stdio: 'pipe' });
21
+ proc.on('close', (code) => resolve(code === 0));
22
+ proc.on('error', () => resolve(false));
23
+ });
24
+ }
25
+ export async function isAvailable() {
26
+ if (await sdkAvailable()) {
27
+ mode = 'sdk';
28
+ return true;
29
+ }
30
+ if (await cliAvailable()) {
31
+ mode = 'cli';
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ let clientPromise = null;
37
+ let cachedApproveAll = null;
38
+ const activeSessions = new Map();
39
+ async function getClient() {
40
+ if (!clientPromise) {
41
+ clientPromise = (async () => {
42
+ const sdk = await import('@anthropic-ai/agent-sdk');
43
+ const { AgentClient, approveAll } = sdk;
44
+ cachedApproveAll = approveAll;
45
+ const client = new AgentClient({
46
+ autoStart: false,
47
+ logLevel: 'error',
48
+ });
49
+ await client.start();
50
+ return client;
51
+ })();
52
+ }
53
+ return clientPromise;
54
+ }
55
+ async function executeViaSdk(task, options = {}) {
56
+ let prompt = `You are a ${task.agent}. ${task.prompt}`;
57
+ if (task.files && task.files.length > 0) {
58
+ prompt += `\n\nOnly modify files under: ${task.files.join(', ')}`;
59
+ }
60
+ const client = await getClient();
61
+ const session = await client.createSession({
62
+ onPermissionRequest: cachedApproveAll,
63
+ cwd: options.cwd ?? process.cwd(),
64
+ systemMessage: {
65
+ content: [
66
+ `You are a ${task.agent}.`,
67
+ 'Work autonomously without asking questions.',
68
+ 'Follow all instructions precisely.',
69
+ ].join(' '),
70
+ },
71
+ infiniteSessions: { enabled: false },
72
+ ...(options.verbose ? { streaming: true } : {}),
73
+ });
74
+ activeSessions.set(task.id, session);
75
+ if (options.verbose) {
76
+ session.on('assistant.message_delta', (...args) => {
77
+ const event = args[0];
78
+ process.stdout.write(event.data.deltaContent);
79
+ });
80
+ }
81
+ try {
82
+ const timeoutMs = parseTimeout(task.timeout);
83
+ const response = await session.sendAndWait({ prompt }, timeoutMs);
84
+ const data = response?.data;
85
+ const output = data?.content ?? '';
86
+ const rawUsage = data?.usage ?? response?.usage;
87
+ const u = rawUsage;
88
+ const usageResult = u
89
+ ? {
90
+ prompt_tokens: u.prompt_tokens ?? u.promptTokens,
91
+ completion_tokens: u.completion_tokens ?? u.completionTokens,
92
+ total_tokens: u.total_tokens ?? u.totalTokens,
93
+ }
94
+ : undefined;
95
+ return {
96
+ success: true,
97
+ output: output.slice(0, 10_000),
98
+ exitCode: 0,
99
+ usage: usageResult,
100
+ };
101
+ }
102
+ catch (err) {
103
+ return {
104
+ success: false,
105
+ output: `Claude Agent SDK error: ${err.message}`,
106
+ exitCode: 1,
107
+ };
108
+ }
109
+ finally {
110
+ activeSessions.delete(task.id);
111
+ await session.destroy().catch(() => { });
112
+ }
113
+ }
114
+ function killSdk(task) {
115
+ const session = activeSessions.get(task.id);
116
+ if (session) {
117
+ session.abort().catch(() => { });
118
+ session.destroy().catch(() => { });
119
+ activeSessions.delete(task.id);
120
+ }
121
+ }
122
+ // --- CLI implementation (from claude-code.ts) ---
123
+ async function executeViaCli(task, options = {}) {
124
+ let prompt = `You are a ${task.agent}. ${task.prompt}`;
125
+ if (task.files && task.files.length > 0) {
126
+ prompt += `\n\nOnly modify files under: ${task.files.join(', ')}`;
127
+ }
128
+ const args = [
129
+ '-p',
130
+ prompt,
131
+ '--output-format',
132
+ 'json',
133
+ '--max-turns',
134
+ '50',
135
+ ];
136
+ return new Promise((resolve) => {
137
+ const proc = spawn('claude', args, {
138
+ stdio: ['ignore', 'pipe', 'pipe'],
139
+ env: { ...process.env },
140
+ cwd: options?.cwd ?? process.cwd(),
141
+ });
142
+ let stdout = '';
143
+ let stderr = '';
144
+ proc.stdout.on('data', (chunk) => {
145
+ stdout += chunk.toString();
146
+ if (options.verbose) {
147
+ process.stdout.write(chunk);
148
+ }
149
+ });
150
+ proc.stderr.on('data', (chunk) => {
151
+ stderr += chunk.toString();
152
+ if (options.verbose) {
153
+ process.stderr.write(chunk);
154
+ }
155
+ });
156
+ proc.on('close', (code) => {
157
+ const output = [stdout, stderr].filter(Boolean).join('\n');
158
+ let usage;
159
+ try {
160
+ const parsedJson = JSON.parse(stdout);
161
+ const u = parsedJson?.usage;
162
+ if (u) {
163
+ const promptTokens = (u.input_tokens ?? u.prompt_tokens);
164
+ const completionTokens = (u.output_tokens ?? u.completion_tokens);
165
+ const total = ((promptTokens ?? 0) + (completionTokens ?? 0)) || undefined;
166
+ usage = { prompt_tokens: promptTokens, completion_tokens: completionTokens, total_tokens: total };
167
+ }
168
+ }
169
+ catch { /* not JSON or no usage — graceful degradation */ }
170
+ resolve({
171
+ success: code === 0,
172
+ output: output.slice(0, 10000),
173
+ exitCode: code ?? -1,
174
+ usage,
175
+ });
176
+ });
177
+ proc.on('error', (err) => {
178
+ resolve({
179
+ success: false,
180
+ output: `Failed to spawn claude: ${err.message}`,
181
+ exitCode: -1,
182
+ });
183
+ });
184
+ task._process = proc;
185
+ });
186
+ }
187
+ function killCli(task) {
188
+ if (task._process && !task._process.killed) {
189
+ task._process.kill('SIGTERM');
190
+ setTimeout(() => {
191
+ if (task._process && !task._process.killed) {
192
+ task._process.kill('SIGKILL');
193
+ }
194
+ }, 5000);
195
+ }
196
+ }
197
+ // --- Unified interface ---
198
+ export async function execute(task, options = {}) {
199
+ if (!mode)
200
+ await isAvailable();
201
+ if (mode === 'sdk')
202
+ return executeViaSdk(task, options);
203
+ return executeViaCli(task, options);
204
+ }
205
+ export function kill(task) {
206
+ if (mode === 'sdk')
207
+ killSdk(task);
208
+ else
209
+ killCli(task);
210
+ }
211
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/cli/run/adapters/claude.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,6 @@
1
1
  import type { Task, ExecuteOptions, ExecuteResult } from '../../types.js';
2
- /** Adapter name */
3
2
  export declare const name = "copilot";
4
- /**
5
- * Check if the `copilot` CLI is available on the system PATH.
6
- * The SDK communicates with the CLI in server mode, so it must be installed.
7
- */
8
3
  export declare function isAvailable(): Promise<boolean>;
9
- /**
10
- * Execute a task using the Copilot SDK.
11
- *
12
- * Each task gets its own session with:
13
- * - All tool permissions auto-approved (equivalent to `--allow-all-tools`)
14
- * - No `ask_user` tool (autonomous — equivalent to `--no-ask-user`)
15
- * - System message injected with the agent role
16
- * - Streaming enabled in verbose mode for live output
17
- */
18
4
  export declare function execute(task: Task, options?: ExecuteOptions): Promise<ExecuteResult>;
19
- /**
20
- * Abort and destroy the session associated with a task.
21
- * Called by the executor when a task exceeds its timeout.
22
- */
23
5
  export declare function kill(task: Task): void;
24
6
  //# sourceMappingURL=copilot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../../../src/cli/run/adapters/copilot.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEzE,mBAAmB;AACnB,eAAO,MAAM,IAAI,YAAY,CAAA;AAe7B;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAMpD;AAsBD;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgE9F;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAOrC"}
1
+ {"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../../../src/cli/run/adapters/copilot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAA;AAGrF,eAAO,MAAM,IAAI,YAAY,CAAA;AAwB7B,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAUpD;AAuKD,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CAI9F;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAGrC"}
@@ -1,32 +1,42 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  import { parseTimeout } from '../schema.js';
3
- /** Adapter name */
3
+ // Adapter name
4
4
  export const name = 'copilot';
5
- /**
6
- * Lazy-initialized shared client instance.
7
- * The client manages a single Copilot CLI server process; all task sessions
8
- * multiplex over it via JSON-RPC.
9
- */
10
- let clientPromise = null;
11
- /** Cached permission handler from the SDK module. */
12
- let cachedApproveAll = null;
13
- /** Active sessions keyed by task id — used by `kill()` for timeout enforcement. */
14
- const activeSessions = new Map();
15
- /**
16
- * Check if the `copilot` CLI is available on the system PATH.
17
- * The SDK communicates with the CLI in server mode, so it must be installed.
18
- */
19
- export async function isAvailable() {
5
+ // --- Unified adapter: SDK first, fallback to CLI ---
6
+ let mode = null;
7
+ // SDK check
8
+ async function sdkAvailable() {
9
+ try {
10
+ await import('@github/copilot-sdk');
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ // CLI check
18
+ async function cliAvailable() {
20
19
  return new Promise((resolve) => {
21
20
  const proc = spawn('which', ['copilot'], { stdio: 'pipe' });
22
21
  proc.on('close', (code) => resolve(code === 0));
23
22
  proc.on('error', () => resolve(false));
24
23
  });
25
24
  }
26
- /**
27
- * Get or create the shared CopilotClient.
28
- * The client is started once and reused across all task executions.
29
- */
25
+ export async function isAvailable() {
26
+ if (await sdkAvailable()) {
27
+ mode = 'sdk';
28
+ return true;
29
+ }
30
+ if (await cliAvailable()) {
31
+ mode = 'cli';
32
+ return true;
33
+ }
34
+ return false;
35
+ }
36
+ // --- SDK implementation (existing logic) ---
37
+ let clientPromise = null;
38
+ let cachedApproveAll = null;
39
+ const activeSessions = new Map();
30
40
  async function getClient() {
31
41
  if (!clientPromise) {
32
42
  clientPromise = (async () => {
@@ -42,21 +52,11 @@ async function getClient() {
42
52
  }
43
53
  return clientPromise;
44
54
  }
45
- /**
46
- * Execute a task using the Copilot SDK.
47
- *
48
- * Each task gets its own session with:
49
- * - All tool permissions auto-approved (equivalent to `--allow-all-tools`)
50
- * - No `ask_user` tool (autonomous — equivalent to `--no-ask-user`)
51
- * - System message injected with the agent role
52
- * - Streaming enabled in verbose mode for live output
53
- */
54
- export async function execute(task, options = {}) {
55
+ async function executeViaSdk(task, options = {}) {
55
56
  // NOTE: The Copilot SDK CopilotClient is a shared singleton. Per-task cwd
56
57
  // isolation requires SDK support for per-session workingDirectory, which is
57
58
  // not yet available. When running in convoy mode with worktrees, prefer
58
- // subprocess-based adapters (claude-code, cursor) that support options.cwd
59
- // natively. Copilot SDK per-session cwd support is tracked for Phase 3.
59
+ // subprocess-based adapters (cli mode) that support options.cwd natively.
60
60
  let prompt = `You are a ${task.agent}. ${task.prompt}`;
61
61
  if (task.files && task.files.length > 0) {
62
62
  prompt += `\n\nOnly modify files under: ${task.files.join(', ')}`;
@@ -75,7 +75,6 @@ export async function execute(task, options = {}) {
75
75
  ...(options.verbose ? { streaming: true } : {}),
76
76
  });
77
77
  activeSessions.set(task.id, session);
78
- // Stream deltas to stdout in verbose mode
79
78
  if (options.verbose) {
80
79
  session.on('assistant.message_delta', (event) => {
81
80
  process.stdout.write(event.data.deltaContent);
@@ -111,11 +110,7 @@ export async function execute(task, options = {}) {
111
110
  await session.destroy().catch(() => { });
112
111
  }
113
112
  }
114
- /**
115
- * Abort and destroy the session associated with a task.
116
- * Called by the executor when a task exceeds its timeout.
117
- */
118
- export function kill(task) {
113
+ function killSdk(task) {
119
114
  const session = activeSessions.get(task.id);
120
115
  if (session) {
121
116
  session.abort().catch(() => { });
@@ -123,4 +118,94 @@ export function kill(task) {
123
118
  activeSessions.delete(task.id);
124
119
  }
125
120
  }
121
+ // --- CLI implementation ---
122
+ async function executeViaCli(task, options = {}) {
123
+ // CLI supports --output-format json, --max-turns, and respects cwd
124
+ let prompt = `You are a ${task.agent}. ${task.prompt}`;
125
+ if (task.files && task.files.length > 0) {
126
+ prompt += `\n\nOnly modify files under: ${task.files.join(', ')}`;
127
+ }
128
+ const args = [
129
+ '-p',
130
+ prompt,
131
+ '--output-format',
132
+ 'json',
133
+ '--max-turns',
134
+ '50',
135
+ ];
136
+ return new Promise((resolve) => {
137
+ const proc = spawn('copilot', args, {
138
+ stdio: ['ignore', 'pipe', 'pipe'],
139
+ env: { ...process.env },
140
+ cwd: options?.cwd ?? process.cwd(),
141
+ });
142
+ let stdout = '';
143
+ let stderr = '';
144
+ proc.stdout.on('data', (chunk) => {
145
+ stdout += chunk.toString();
146
+ if (options.verbose) {
147
+ process.stdout.write(chunk);
148
+ }
149
+ });
150
+ proc.stderr.on('data', (chunk) => {
151
+ stderr += chunk.toString();
152
+ if (options.verbose) {
153
+ process.stderr.write(chunk);
154
+ }
155
+ });
156
+ proc.on('close', (code) => {
157
+ const output = [stdout, stderr].filter(Boolean).join('\n');
158
+ let usage;
159
+ try {
160
+ const parsedJson = JSON.parse(stdout);
161
+ const u = parsedJson?.usage;
162
+ if (u) {
163
+ const promptTokens = (u.input_tokens ?? u.prompt_tokens);
164
+ const completionTokens = (u.output_tokens ?? u.completion_tokens);
165
+ const total = ((promptTokens ?? 0) + (completionTokens ?? 0)) || undefined;
166
+ usage = { prompt_tokens: promptTokens, completion_tokens: completionTokens, total_tokens: total };
167
+ }
168
+ }
169
+ catch { /* not JSON or no usage — graceful degradation */ }
170
+ resolve({
171
+ success: code === 0,
172
+ output: output.slice(0, 10000),
173
+ exitCode: code ?? -1,
174
+ usage,
175
+ });
176
+ });
177
+ proc.on('error', (err) => {
178
+ resolve({
179
+ success: false,
180
+ output: `Failed to spawn copilot: ${err.message}`,
181
+ exitCode: -1,
182
+ });
183
+ });
184
+ task._process = proc;
185
+ });
186
+ }
187
+ function killCli(task) {
188
+ if (task._process && !task._process.killed) {
189
+ task._process.kill('SIGTERM');
190
+ setTimeout(() => {
191
+ if (task._process && !task._process.killed) {
192
+ task._process.kill('SIGKILL');
193
+ }
194
+ }, 5000);
195
+ }
196
+ }
197
+ // --- Unified interface ---
198
+ export async function execute(task, options = {}) {
199
+ if (!mode)
200
+ await isAvailable();
201
+ if (mode === 'sdk')
202
+ return executeViaSdk(task, options);
203
+ return executeViaCli(task, options);
204
+ }
205
+ export function kill(task) {
206
+ if (mode === 'sdk')
207
+ killSdk(task);
208
+ else
209
+ killCli(task);
210
+ }
126
211
  //# sourceMappingURL=copilot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../../src/cli/run/adapters/copilot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../../src/cli/run/adapters/copilot.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Adapter registry for agent runtimes.
3
3
  */
4
4
  const ADAPTERS = {
5
- 'claude-code': () => import('./claude-code.js'),
5
+ claude: () => import('./claude.js'),
6
6
  copilot: () => import('./copilot.js'),
7
7
  cursor: () => import('./cursor.js'),
8
8
  opencode: () => import('./opencode.js'),
@@ -23,7 +23,7 @@ export async function getAdapter(name) {
23
23
  * Detection priority order — checked first-to-last.
24
24
  * The first available adapter wins.
25
25
  */
26
- const DETECTION_ORDER = ['copilot', 'claude-code', 'cursor', 'opencode'];
26
+ const DETECTION_ORDER = ['copilot', 'claude', 'cursor', 'opencode'];
27
27
  /**
28
28
  * Auto-detect which adapter CLI is available on the system.
29
29
  * Returns the adapter name or null if none found.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/run/adapters/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,QAAQ,GAAgD;IAC5D,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAA0B;IACxE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAA0B;IAC9D,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAA0B;IAC5D,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAA0B;CACjE,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,0BAA0B,SAAS,EAAE,CAC9D,CAAA;IACH,CAAC;IACD,OAAO,MAAM,EAAE,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AAEjF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAgD,EAAE,CAAA;IAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,SAAS,EAAE,MAAM,GAAG,CAAC,WAAW,EAAE;SACnC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/run/adapters/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,QAAQ,GAAgD;IAC5D,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAA0B;IAC5D,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAA0B;IAC9D,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAA0B;IAC5D,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAA0B;CACjE,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,0BAA0B,SAAS,EAAE,CAC9D,CAAA;IACH,CAAC;IACD,OAAO,MAAM,EAAE,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AAE5E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAChC,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAgD,EAAE,CAAA;IAC9D,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,SAAS,EAAE,MAAM,GAAG,CAAC,WAAW,EAAE;SACnC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
package/dist/cli/run.js CHANGED
@@ -126,7 +126,7 @@ function printAdapterError(detectionFailed, adapterName) {
126
126
  }
127
127
  else {
128
128
  const hints = {
129
- 'claude-code': ' Install: npm install -g @anthropic-ai/claude-code\n' +
129
+ 'claude': ' Install: npm install -g @anthropic-ai/claude-code\n' +
130
130
  ' Docs: https://docs.anthropic.com/en/docs/claude-code',
131
131
  copilot: ' Requires the Copilot CLI installed and authenticated:\n' +
132
132
  ' https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli\n' +
@@ -137,7 +137,7 @@ function printAdapterError(detectionFailed, adapterName) {
137
137
  opencode: ' Install OpenCode from https://opencode.ai\n' +
138
138
  ' Ensure the "opencode" command is on your PATH.',
139
139
  };
140
- const cliName = adapterName === 'claude-code' ? 'claude' : adapterName === 'cursor' ? 'agent' : adapterName;
140
+ const cliName = adapterName === 'cursor' ? 'agent' : adapterName;
141
141
  const hint = hints[adapterName] ?? '';
142
142
  console.error(` ✗ Adapter "${adapterName}" is not available.\n` +
143
143
  ` Make sure the "${cliName}" CLI is installed and on your PATH.\n` +
@@ -310,7 +310,7 @@ export default async function run({ args, pkgRoot }) {
310
310
  }
311
311
  else {
312
312
  resumePipelineDetectionFailed = true;
313
- resumePipelineSpec.adapter = 'claude-code';
313
+ resumePipelineSpec.adapter = 'claude';
314
314
  }
315
315
  }
316
316
  const resumePipelineAdapter = await getAdapter(resumePipelineSpec.adapter);
@@ -359,7 +359,7 @@ export default async function run({ args, pkgRoot }) {
359
359
  }
360
360
  else {
361
361
  resumeDetectionFailed = true;
362
- resumeSpec.adapter = 'claude-code';
362
+ resumeSpec.adapter = 'claude';
363
363
  }
364
364
  }
365
365
  const resumeAdapter = await getAdapter(resumeSpec.adapter);
@@ -422,7 +422,7 @@ export default async function run({ args, pkgRoot }) {
422
422
  }
423
423
  else {
424
424
  detectionFailed = true;
425
- spec.adapter = 'claude-code'; // fallback for availability check below
425
+ spec.adapter = 'claude'; // fallback for availability check below
426
426
  }
427
427
  }
428
428
  // ── Dry run ──────────────────────────────────────────────────