@yu_robotics/remote-cli 1.6.25 → 1.6.30

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 (48) hide show
  1. package/README.md +9 -8
  2. package/dist/client/MessageHandler.d.ts +4 -1
  3. package/dist/client/MessageHandler.d.ts.map +1 -1
  4. package/dist/client/MessageHandler.js +70 -22
  5. package/dist/client/MessageHandler.js.map +1 -1
  6. package/dist/client/WebSocketClient.js +1 -1
  7. package/dist/client/WebSocketClient.js.map +1 -1
  8. package/dist/commands/start.d.ts +1 -4
  9. package/dist/commands/start.d.ts.map +1 -1
  10. package/dist/commands/start.js +29 -19
  11. package/dist/commands/start.js.map +1 -1
  12. package/dist/executor/KimiExecutor.d.ts +18 -0
  13. package/dist/executor/KimiExecutor.d.ts.map +1 -0
  14. package/dist/executor/KimiExecutor.js +28 -0
  15. package/dist/executor/KimiExecutor.js.map +1 -0
  16. package/dist/executor/OpenCodeExecutor.d.ts +80 -0
  17. package/dist/executor/OpenCodeExecutor.d.ts.map +1 -0
  18. package/dist/executor/OpenCodeExecutor.js +513 -0
  19. package/dist/executor/OpenCodeExecutor.js.map +1 -0
  20. package/dist/executor/acp/AcpClient.d.ts +47 -40
  21. package/dist/executor/acp/AcpClient.d.ts.map +1 -1
  22. package/dist/executor/acp/AcpClient.js +113 -189
  23. package/dist/executor/acp/AcpClient.js.map +1 -1
  24. package/dist/executor/acp/AcpTypes.d.ts +27 -68
  25. package/dist/executor/acp/AcpTypes.d.ts.map +1 -1
  26. package/dist/executor/acp/AcpTypes.js +0 -9
  27. package/dist/executor/acp/AcpTypes.js.map +1 -1
  28. package/dist/executor/index.d.ts +4 -6
  29. package/dist/executor/index.d.ts.map +1 -1
  30. package/dist/executor/index.js +32 -27
  31. package/dist/executor/index.js.map +1 -1
  32. package/dist/thread/ThreadExecutorPool.js +1 -1
  33. package/dist/thread/ThreadExecutorPool.js.map +1 -1
  34. package/dist/thread/types.d.ts +1 -1
  35. package/dist/thread/types.d.ts.map +1 -1
  36. package/dist/types/config.d.ts +19 -13
  37. package/dist/types/config.d.ts.map +1 -1
  38. package/dist/types/config.js +6 -2
  39. package/dist/types/config.js.map +1 -1
  40. package/dist/update/AutomaticUpdater.d.ts +26 -0
  41. package/dist/update/AutomaticUpdater.d.ts.map +1 -0
  42. package/dist/update/AutomaticUpdater.js +109 -0
  43. package/dist/update/AutomaticUpdater.js.map +1 -0
  44. package/dist/utils/version.d.ts +3 -0
  45. package/dist/utils/version.d.ts.map +1 -0
  46. package/dist/utils/version.js +20 -0
  47. package/dist/utils/version.js.map +1 -0
  48. package/package.json +1 -1
@@ -0,0 +1,80 @@
1
+ import { DirectoryGuard } from '../security/DirectoryGuard';
2
+ import type { ExecuteOptions, ExecuteResult, ExecutorModelInfo, IExecutor } from './IExecutor';
3
+ import { type AcpEventCallbacks, type AcpTransport } from './acp/AcpClient';
4
+ export interface OpenCodeExecutorOptions {
5
+ model?: string;
6
+ effort?: string;
7
+ autoApprove?: boolean;
8
+ initialWorkingDirectory?: string;
9
+ openCodeCommand?: string;
10
+ /** Generic ACP command override used by ACP-backed subclasses. */
11
+ acpCommand?: string;
12
+ acpArgs?: string[];
13
+ backendLabel?: string;
14
+ sessionNamespace?: string;
15
+ effortConfigId?: string;
16
+ effortAutoValue?: string;
17
+ installCommand?: string;
18
+ authCommand?: string;
19
+ threadId?: string;
20
+ /** Override session pointer storage for isolated tests. */
21
+ sessionBaseDir?: string;
22
+ clientFactory?: (callbacks: AcpEventCallbacks, cwd: string) => AcpTransport;
23
+ }
24
+ export declare class OpenCodeExecutor implements IExecutor {
25
+ private readonly directoryGuard;
26
+ private readonly autoApprove;
27
+ private readonly threadId?;
28
+ private readonly backendLabel;
29
+ private readonly effortConfigId;
30
+ private readonly effortAutoValue;
31
+ private readonly installCommand;
32
+ private readonly authCommand;
33
+ private readonly sessionFilePath;
34
+ private readonly clientFactory;
35
+ private currentWorkingDirectory;
36
+ private model?;
37
+ private effort?;
38
+ private client;
39
+ private sessionId;
40
+ private configOptions;
41
+ private activeCallbacks;
42
+ private commandQueue;
43
+ private isProcessing;
44
+ private isDestroyed;
45
+ private abortTimer;
46
+ private pendingPermission;
47
+ private activeToolCalls;
48
+ constructor(directoryGuard: DirectoryGuard, options?: OpenCodeExecutorOptions);
49
+ execute(prompt: string, options?: ExecuteOptions): Promise<ExecuteResult>;
50
+ getCurrentWorkingDirectory(): string;
51
+ setWorkingDirectory(targetPath: string): Promise<void>;
52
+ resetContext(): void;
53
+ abort(): Promise<boolean>;
54
+ destroy(): Promise<void>;
55
+ isWaitingInput(): boolean;
56
+ sendInput(input: string): boolean;
57
+ isProcessRunning(): boolean;
58
+ getSessionId(): string | null;
59
+ listModels(): Promise<ExecutorModelInfo[]>;
60
+ setModel(model: string): Promise<ExecuteResult>;
61
+ setEffort(effort: string): Promise<ExecuteResult>;
62
+ compactWhenFull(onStream?: (chunk: string) => void): Promise<ExecuteResult>;
63
+ deleteThreadData(_threadId: string): Promise<void>;
64
+ private processQueue;
65
+ private executeQueued;
66
+ private ensureSession;
67
+ private createClient;
68
+ private handleContent;
69
+ private applyConfiguredOptions;
70
+ private updateConfigOptions;
71
+ private findConfigOption;
72
+ private loadSessionPointer;
73
+ private saveSessionPointer;
74
+ private clearSessionPointer;
75
+ private destroyClient;
76
+ private clearAbortTimer;
77
+ private cancelPendingPermission;
78
+ private friendlyError;
79
+ }
80
+ //# sourceMappingURL=OpenCodeExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeExecutor.d.ts","sourceRoot":"","sources":["../../src/executor/OpenCodeExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,513 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.OpenCodeExecutor = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const os = __importStar(require("os"));
39
+ const path = __importStar(require("path"));
40
+ const AcpClient_1 = require("./acp/AcpClient");
41
+ const CANCEL_GRACE_MS = 3_000;
42
+ function mapAcpToolCall(tool) {
43
+ if (tool.rawInput && typeof tool.rawInput === 'object' && !Array.isArray(tool.rawInput)) {
44
+ return { name: mapAcpToolName(tool.kind, tool.title), input: tool.rawInput };
45
+ }
46
+ const title = tool.title ?? tool.toolCallId;
47
+ const key = tool.kind === 'read' || tool.kind === 'write' ? 'file_path'
48
+ : tool.kind === 'list' ? 'pattern'
49
+ : 'command';
50
+ return { name: mapAcpToolName(tool.kind, tool.title), input: { [key]: title } };
51
+ }
52
+ function mapAcpToolName(kind, title) {
53
+ if (kind === 'execute' || kind === 'exec')
54
+ return 'Bash';
55
+ if (kind === 'read')
56
+ return 'Read';
57
+ if (kind === 'write' || kind === 'edit')
58
+ return 'Edit';
59
+ if (kind === 'list' || kind === 'search')
60
+ return 'Glob';
61
+ return kind || title || 'Tool';
62
+ }
63
+ function acpToolResult(tool) {
64
+ const text = [];
65
+ const diffs = [];
66
+ for (const block of tool.content ?? []) {
67
+ if (block.type === 'text')
68
+ text.push(String(block.text ?? ''));
69
+ else if (block.type === 'content' && block.content && typeof block.content === 'object') {
70
+ const nested = block.content;
71
+ if (nested.type === 'text')
72
+ text.push(String(nested.text ?? ''));
73
+ else
74
+ text.push(JSON.stringify(nested));
75
+ }
76
+ else if (block.type === 'diff') {
77
+ const filePath = String(block.path ?? 'file');
78
+ const oldText = String(block.oldText ?? '');
79
+ const newText = String(block.newText ?? '');
80
+ diffs.push([
81
+ `--- a/${filePath}`,
82
+ `+++ b/${filePath}`,
83
+ ...oldText.split('\n').map((line) => `-${line}`),
84
+ ...newText.split('\n').map((line) => `+${line}`),
85
+ ].join('\n'));
86
+ }
87
+ else if ('resource' in block)
88
+ text.push(JSON.stringify(block.resource));
89
+ }
90
+ if (text.length === 0 && tool.rawOutput !== undefined) {
91
+ text.push(typeof tool.rawOutput === 'string' ? tool.rawOutput : JSON.stringify(tool.rawOutput));
92
+ }
93
+ return { content: text.filter(Boolean).join('\n'), ...(diffs.length ? { diff: diffs.join('\n') } : {}) };
94
+ }
95
+ class OpenCodeExecutor {
96
+ directoryGuard;
97
+ autoApprove;
98
+ threadId;
99
+ backendLabel;
100
+ effortConfigId;
101
+ effortAutoValue;
102
+ installCommand;
103
+ authCommand;
104
+ sessionFilePath;
105
+ clientFactory;
106
+ currentWorkingDirectory;
107
+ model;
108
+ effort;
109
+ client = null;
110
+ sessionId = null;
111
+ configOptions = [];
112
+ activeCallbacks = {};
113
+ commandQueue = [];
114
+ isProcessing = false;
115
+ isDestroyed = false;
116
+ abortTimer = null;
117
+ pendingPermission = null;
118
+ activeToolCalls = new Map();
119
+ constructor(directoryGuard, options = {}) {
120
+ this.directoryGuard = directoryGuard;
121
+ this.model = options.model;
122
+ this.effort = options.effort;
123
+ this.autoApprove = options.autoApprove ?? true;
124
+ this.threadId = options.threadId;
125
+ this.backendLabel = options.backendLabel ?? 'OpenCode';
126
+ this.effortConfigId = options.effortConfigId ?? 'effort';
127
+ this.effortAutoValue = options.effortAutoValue ?? 'default';
128
+ this.installCommand = options.installCommand ?? 'npm install --global @opencode/cli';
129
+ this.authCommand = options.authCommand ?? 'opencode auth login';
130
+ const command = options.acpCommand ?? options.openCodeCommand ?? 'opencode';
131
+ const args = options.acpArgs ?? ['acp'];
132
+ this.clientFactory = options.clientFactory
133
+ ?? ((callbacks, cwd) => new AcpClient_1.AcpClient(command, args, cwd, callbacks));
134
+ try {
135
+ this.currentWorkingDirectory = options.initialWorkingDirectory
136
+ ? this.directoryGuard.resolveWorkingDirectory(options.initialWorkingDirectory)
137
+ : process.cwd();
138
+ }
139
+ catch (error) {
140
+ console.warn(`[${this.backendLabel}Executor] Failed to use initial working directory`, error);
141
+ this.currentWorkingDirectory = process.cwd();
142
+ }
143
+ const sessionsDir = options.sessionBaseDir
144
+ ?? path.join(os.homedir(), '.remote-cli', options.sessionNamespace ?? 'opencode-sessions');
145
+ fs.mkdirSync(sessionsDir, { recursive: true });
146
+ this.sessionFilePath = path.join(sessionsDir, `${this.threadId ?? 'default'}.json`);
147
+ this.loadSessionPointer();
148
+ }
149
+ execute(prompt, options = {}) {
150
+ if (this.isDestroyed)
151
+ return Promise.reject(new Error('Executor has been destroyed'));
152
+ return new Promise((resolve, reject) => {
153
+ this.commandQueue.push({ prompt, options, resolve, reject });
154
+ void this.processQueue();
155
+ });
156
+ }
157
+ getCurrentWorkingDirectory() {
158
+ return this.currentWorkingDirectory;
159
+ }
160
+ async setWorkingDirectory(targetPath) {
161
+ const resolved = this.directoryGuard.resolveWorkingDirectory(targetPath);
162
+ if (resolved === this.currentWorkingDirectory)
163
+ return;
164
+ this.currentWorkingDirectory = resolved;
165
+ this.destroyClient();
166
+ this.clearSessionPointer();
167
+ }
168
+ resetContext() {
169
+ this.cancelPendingPermission();
170
+ this.destroyClient();
171
+ this.clearSessionPointer();
172
+ }
173
+ async abort() {
174
+ if (!this.client || !this.sessionId || !this.isProcessing)
175
+ return false;
176
+ this.cancelPendingPermission();
177
+ this.client.sendCancel(this.sessionId);
178
+ this.clearAbortTimer();
179
+ const client = this.client;
180
+ this.abortTimer = setTimeout(() => {
181
+ if (this.client === client && this.isProcessing)
182
+ this.destroyClient();
183
+ }, CANCEL_GRACE_MS);
184
+ this.abortTimer.unref?.();
185
+ return true;
186
+ }
187
+ async destroy() {
188
+ if (this.isDestroyed)
189
+ return;
190
+ this.isDestroyed = true;
191
+ const queued = this.commandQueue.splice(0);
192
+ for (const command of queued)
193
+ command.reject(new Error('Executor has been destroyed'));
194
+ this.cancelPendingPermission();
195
+ this.destroyClient();
196
+ }
197
+ isWaitingInput() {
198
+ return this.pendingPermission !== null;
199
+ }
200
+ sendInput(input) {
201
+ const pending = this.pendingPermission;
202
+ if (!pending)
203
+ return false;
204
+ const normalized = input.trim().toLowerCase();
205
+ if (pending.isQuestion) {
206
+ const cancelIndex = pending.options.findIndex((option) => option.kind.startsWith('reject'));
207
+ if (normalized === 'cancel' || normalized === 'skip') {
208
+ this.pendingPermission = null;
209
+ pending.resolve(cancelIndex);
210
+ return true;
211
+ }
212
+ const numeric = Number.parseInt(normalized, 10);
213
+ const index = Number.isInteger(numeric) && numeric > 0
214
+ ? pending.options.findIndex((option, optionIndex) => optionIndex === numeric - 1 && option.kind.startsWith('allow'))
215
+ : pending.options.findIndex((option) => option.kind.startsWith('allow')
216
+ && (option.name?.trim().toLowerCase() === normalized || option.optionId.toLowerCase() === normalized));
217
+ if (index < 0)
218
+ return false;
219
+ this.pendingPermission = null;
220
+ pending.resolve(index);
221
+ return true;
222
+ }
223
+ const kind = normalized === 'always' ? 'allow_always'
224
+ : normalized === 'yes' || normalized === 'y' || normalized === 'accept' ? 'allow_once'
225
+ : normalized === 'no' || normalized === 'n' || normalized === 'decline' ? 'reject_once'
226
+ : normalized === 'cancel' ? null
227
+ : undefined;
228
+ if (kind === undefined)
229
+ return false;
230
+ this.pendingPermission = null;
231
+ if (kind === null) {
232
+ pending.resolve(-1);
233
+ return true;
234
+ }
235
+ let index = pending.options.findIndex((option) => option.kind === kind);
236
+ if (index < 0 && kind === 'allow_once')
237
+ index = pending.options.findIndex((option) => option.kind.startsWith('allow'));
238
+ if (index < 0 && kind === 'reject_once')
239
+ index = pending.options.findIndex((option) => option.kind.startsWith('reject'));
240
+ pending.resolve(index);
241
+ return true;
242
+ }
243
+ isProcessRunning() {
244
+ return this.client !== null;
245
+ }
246
+ getSessionId() {
247
+ return this.sessionId;
248
+ }
249
+ async listModels() {
250
+ await this.ensureSession();
251
+ const modelOption = this.findConfigOption('model');
252
+ const effortOption = this.findConfigOption(this.effortConfigId);
253
+ return (modelOption?.options ?? []).map((entry) => ({
254
+ id: entry.value,
255
+ displayName: entry.name,
256
+ description: entry.description,
257
+ isDefault: entry.value === modelOption?.currentValue,
258
+ supportedReasoningEfforts: entry.value === modelOption?.currentValue
259
+ ? effortOption?.options?.map((option) => option.value)
260
+ : undefined,
261
+ defaultReasoningEffort: entry.value === modelOption?.currentValue ? 'default' : undefined,
262
+ inputModalities: ['text', 'image'],
263
+ }));
264
+ }
265
+ async setModel(model) {
266
+ const { client, sessionId } = await this.ensureSession();
267
+ const option = this.findConfigOption('model');
268
+ if (option?.options?.length && !option.options.some((entry) => entry.value === model)) {
269
+ return { success: false, error: `Unknown ${this.backendLabel} model: ${model}. Use /model to list available models.` };
270
+ }
271
+ try {
272
+ this.updateConfigOptions(await client.setConfigOption(sessionId, 'model', model));
273
+ this.model = model;
274
+ return { success: true, output: `Model set to ${model}.` };
275
+ }
276
+ catch (error) {
277
+ return { success: false, error: this.friendlyError(error) };
278
+ }
279
+ }
280
+ async setEffort(effort) {
281
+ const { client, sessionId } = await this.ensureSession();
282
+ const value = effort === 'auto' ? this.effortAutoValue : effort;
283
+ const option = this.findConfigOption(this.effortConfigId);
284
+ if (!option)
285
+ return { success: false, error: `The selected ${this.backendLabel} model does not expose reasoning effort controls.` };
286
+ if (effort !== 'auto' && option.options?.length && !option.options.some((entry) => entry.value === value)) {
287
+ return { success: false, error: `Unsupported ${this.backendLabel} reasoning effort: ${effort}.` };
288
+ }
289
+ try {
290
+ this.updateConfigOptions(await client.setConfigOption(sessionId, this.effortConfigId, value));
291
+ this.effort = effort === 'auto' ? undefined : effort;
292
+ return { success: true, output: `Reasoning effort set to ${effort}.` };
293
+ }
294
+ catch (error) {
295
+ return { success: false, error: this.friendlyError(error) };
296
+ }
297
+ }
298
+ async compactWhenFull(onStream) {
299
+ return this.execute('/compact', { onStream });
300
+ }
301
+ async deleteThreadData(_threadId) {
302
+ const stored = this.sessionId;
303
+ try {
304
+ if (stored) {
305
+ const { client } = await this.ensureSession();
306
+ await client.deleteSession(stored);
307
+ }
308
+ }
309
+ catch (error) {
310
+ console.warn(`[${this.backendLabel}Executor] Failed to delete session`, error);
311
+ }
312
+ finally {
313
+ this.destroyClient();
314
+ this.clearSessionPointer();
315
+ }
316
+ }
317
+ async processQueue() {
318
+ if (this.isProcessing || this.commandQueue.length === 0)
319
+ return;
320
+ const command = this.commandQueue.shift();
321
+ this.isProcessing = true;
322
+ try {
323
+ command.resolve(await this.executeQueued(command.prompt, command.options));
324
+ }
325
+ catch (error) {
326
+ // A rejected ACP request usually means the child process or transport is
327
+ // no longer usable. Recreate it on the next command and resume the
328
+ // persisted session instead of leaving subsequent requests pending.
329
+ this.destroyClient();
330
+ command.resolve({ success: false, error: this.friendlyError(error) });
331
+ }
332
+ finally {
333
+ this.activeCallbacks = {};
334
+ this.activeToolCalls.clear();
335
+ this.clearAbortTimer();
336
+ this.isProcessing = false;
337
+ void this.processQueue();
338
+ }
339
+ }
340
+ async executeQueued(prompt, options) {
341
+ const blocks = [];
342
+ if (prompt)
343
+ blocks.push({ type: 'text', text: prompt });
344
+ for (const attachment of options.attachments ?? []) {
345
+ if (attachment.type === 'image') {
346
+ blocks.push({ type: 'image', data: attachment.data, mimeType: attachment.mimeType });
347
+ }
348
+ }
349
+ if (blocks.length === 0)
350
+ return { success: false, error: 'Empty prompt' };
351
+ let output = '';
352
+ this.activeCallbacks = {
353
+ onStream: (chunk) => {
354
+ output += chunk;
355
+ options.onStream?.(chunk);
356
+ },
357
+ onToolUse: options.onToolUse,
358
+ onToolResult: options.onToolResult,
359
+ onPlanMode: options.onPlanMode,
360
+ onImage: options.onImage,
361
+ };
362
+ const { client, sessionId } = await this.ensureSession();
363
+ const result = await client.prompt(sessionId, blocks);
364
+ const success = !['refusal', 'cancelled', 'error'].includes(result.stopReason);
365
+ return {
366
+ success,
367
+ output,
368
+ error: success ? undefined : `${this.backendLabel} stopped with reason: ${result.stopReason}`,
369
+ sessionAbbr: sessionId.slice(0, 8),
370
+ };
371
+ }
372
+ async ensureSession() {
373
+ if (this.client && this.sessionId)
374
+ return { client: this.client, sessionId: this.sessionId };
375
+ const client = this.createClient();
376
+ try {
377
+ await client.initialize();
378
+ let result;
379
+ if (this.sessionId) {
380
+ try {
381
+ result = await client.loadSession(this.sessionId, this.currentWorkingDirectory);
382
+ }
383
+ catch (error) {
384
+ console.warn(`[${this.backendLabel}Executor] Stored session could not be loaded; starting fresh`, error);
385
+ this.clearSessionPointer();
386
+ }
387
+ }
388
+ if (!this.sessionId) {
389
+ result = await client.newSession(this.currentWorkingDirectory);
390
+ if (!result.sessionId)
391
+ throw new Error(`${this.backendLabel} did not return a session ID`);
392
+ this.sessionId = result.sessionId;
393
+ this.saveSessionPointer();
394
+ }
395
+ this.updateConfigOptions(result);
396
+ this.client = client;
397
+ await this.applyConfiguredOptions(client, this.sessionId);
398
+ return { client, sessionId: this.sessionId };
399
+ }
400
+ catch (error) {
401
+ client.destroy();
402
+ throw error;
403
+ }
404
+ }
405
+ createClient() {
406
+ const callbacks = {
407
+ onTextChunk: (content) => this.handleContent(content, false),
408
+ onThoughtChunk: (content) => this.handleContent(content, true),
409
+ onToolCall: (tool) => {
410
+ const previous = this.activeToolCalls.get(tool.toolCallId);
411
+ const merged = { ...previous, ...tool };
412
+ this.activeToolCalls.set(tool.toolCallId, merged);
413
+ const mapped = mapAcpToolCall(merged);
414
+ this.activeCallbacks.onToolUse?.({ id: tool.toolCallId, ...mapped });
415
+ },
416
+ onToolResult: (tool) => {
417
+ const merged = { ...this.activeToolCalls.get(tool.toolCallId), ...tool };
418
+ this.activeToolCalls.delete(tool.toolCallId);
419
+ this.activeCallbacks.onToolResult?.({
420
+ tool_use_id: tool.toolCallId,
421
+ ...acpToolResult(merged),
422
+ is_error: tool.status === 'failed',
423
+ });
424
+ },
425
+ onPlan: (entries) => this.activeCallbacks.onPlanMode?.(entries.map((entry) => `[${entry.status ?? 'pending'}] ${entry.content}`).join('\n')),
426
+ onConfigOptions: (options) => { this.configOptions = options; },
427
+ onPermissionRequest: async (title, options) => {
428
+ const isQuestion = options.some((option) => /^q\d+_opt_\d+$/.test(option.optionId));
429
+ if (this.autoApprove && !isQuestion) {
430
+ const allowed = options.findIndex((option) => option.kind === 'allow_once');
431
+ return allowed >= 0 ? allowed : 0;
432
+ }
433
+ this.cancelPendingPermission();
434
+ const prompt = isQuestion
435
+ ? [`\n${title}`, ...options.filter((option) => option.kind.startsWith('allow')).map((option, index) => `${index + 1}. ${option.name ?? option.optionId}`), 'Reply with an option number, option name, skip, or cancel.\n'].join('\n')
436
+ : `\nApproval required for ${title}. Reply yes, always, no, or cancel.\n`;
437
+ this.activeCallbacks.onStream?.(prompt);
438
+ return new Promise((resolve) => {
439
+ this.pendingPermission = { title, options, isQuestion, resolve };
440
+ });
441
+ },
442
+ };
443
+ return this.clientFactory(callbacks, this.currentWorkingDirectory);
444
+ }
445
+ handleContent(content, thinking) {
446
+ if (content.type === 'text' && typeof content.text === 'string') {
447
+ this.activeCallbacks.onStream?.(content.text);
448
+ }
449
+ else if (!thinking && content.type === 'image' && typeof content.data === 'string' && typeof content.mimeType === 'string') {
450
+ this.activeCallbacks.onImage?.({ type: 'image', data: content.data, mimeType: content.mimeType });
451
+ }
452
+ }
453
+ async applyConfiguredOptions(client, sessionId) {
454
+ if (this.model)
455
+ this.updateConfigOptions(await client.setConfigOption(sessionId, 'model', this.model));
456
+ if (this.effort)
457
+ this.updateConfigOptions(await client.setConfigOption(sessionId, this.effortConfigId, this.effort));
458
+ }
459
+ updateConfigOptions(result) {
460
+ if (result?.configOptions)
461
+ this.configOptions = result.configOptions;
462
+ }
463
+ findConfigOption(id) {
464
+ return this.configOptions.find((option) => option.id === id);
465
+ }
466
+ loadSessionPointer() {
467
+ try {
468
+ const value = JSON.parse(fs.readFileSync(this.sessionFilePath, 'utf8'));
469
+ if (value.id && (!value.cwd || value.cwd === this.currentWorkingDirectory))
470
+ this.sessionId = value.id;
471
+ }
472
+ catch { }
473
+ }
474
+ saveSessionPointer() {
475
+ fs.writeFileSync(this.sessionFilePath, JSON.stringify({ id: this.sessionId, cwd: this.currentWorkingDirectory }), 'utf8');
476
+ }
477
+ clearSessionPointer() {
478
+ this.sessionId = null;
479
+ this.configOptions = [];
480
+ try {
481
+ fs.unlinkSync(this.sessionFilePath);
482
+ }
483
+ catch { }
484
+ }
485
+ destroyClient() {
486
+ this.clearAbortTimer();
487
+ this.cancelPendingPermission();
488
+ this.client?.destroy();
489
+ this.client = null;
490
+ }
491
+ clearAbortTimer() {
492
+ if (this.abortTimer)
493
+ clearTimeout(this.abortTimer);
494
+ this.abortTimer = null;
495
+ }
496
+ cancelPendingPermission() {
497
+ const pending = this.pendingPermission;
498
+ this.pendingPermission = null;
499
+ pending?.resolve(-1);
500
+ }
501
+ friendlyError(error) {
502
+ const message = error instanceof Error ? error.message : String(error);
503
+ if (/ENOENT|not found/i.test(message)) {
504
+ return `${this.backendLabel} CLI is not installed or not found on PATH. Install it with \`${this.installCommand}\`, or use /backend to switch backends.`;
505
+ }
506
+ if (/provider\.auth|authentication required|no provider configured|not available in your country/i.test(message)) {
507
+ return `${this.backendLabel} authentication failed: ${message}. Use /model to choose an available model or run \`${this.authCommand}\`.`;
508
+ }
509
+ return message;
510
+ }
511
+ }
512
+ exports.OpenCodeExecutor = OpenCodeExecutor;
513
+ //# sourceMappingURL=OpenCodeExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenCodeExecutor.js","sourceRoot":"","sources":["../../src/executor/OpenCodeExecutor.ts"],"names":[],"mappings":"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"}