@yu_robotics/remote-cli 1.0.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -0
  3. package/bin/remote-cli.js +2 -0
  4. package/dist/client/MessageHandler.d.ts +92 -0
  5. package/dist/client/MessageHandler.d.ts.map +1 -0
  6. package/dist/client/MessageHandler.js +496 -0
  7. package/dist/client/MessageHandler.js.map +1 -0
  8. package/dist/client/WebSocketClient.d.ts +109 -0
  9. package/dist/client/WebSocketClient.d.ts.map +1 -0
  10. package/dist/client/WebSocketClient.js +234 -0
  11. package/dist/client/WebSocketClient.js.map +1 -0
  12. package/dist/commands/config.d.ts +35 -0
  13. package/dist/commands/config.d.ts.map +1 -0
  14. package/dist/commands/config.js +195 -0
  15. package/dist/commands/config.js.map +1 -0
  16. package/dist/commands/init.d.ts +25 -0
  17. package/dist/commands/init.d.ts.map +1 -0
  18. package/dist/commands/init.js +112 -0
  19. package/dist/commands/init.js.map +1 -0
  20. package/dist/commands/start.d.ts +20 -0
  21. package/dist/commands/start.d.ts.map +1 -0
  22. package/dist/commands/start.js +108 -0
  23. package/dist/commands/start.js.map +1 -0
  24. package/dist/commands/status.d.ts +37 -0
  25. package/dist/commands/status.d.ts.map +1 -0
  26. package/dist/commands/status.js +71 -0
  27. package/dist/commands/status.js.map +1 -0
  28. package/dist/commands/stop.d.ts +23 -0
  29. package/dist/commands/stop.d.ts.map +1 -0
  30. package/dist/commands/stop.js +52 -0
  31. package/dist/commands/stop.js.map +1 -0
  32. package/dist/config/ConfigManager.d.ts +109 -0
  33. package/dist/config/ConfigManager.d.ts.map +1 -0
  34. package/dist/config/ConfigManager.js +262 -0
  35. package/dist/config/ConfigManager.js.map +1 -0
  36. package/dist/executor/ClaudeExecutor.d.ts +89 -0
  37. package/dist/executor/ClaudeExecutor.d.ts.map +1 -0
  38. package/dist/executor/ClaudeExecutor.js +365 -0
  39. package/dist/executor/ClaudeExecutor.js.map +1 -0
  40. package/dist/executor/ClaudePersistentExecutor.d.ts +175 -0
  41. package/dist/executor/ClaudePersistentExecutor.d.ts.map +1 -0
  42. package/dist/executor/ClaudePersistentExecutor.js +958 -0
  43. package/dist/executor/ClaudePersistentExecutor.js.map +1 -0
  44. package/dist/executor/index.d.ts +20 -0
  45. package/dist/executor/index.d.ts.map +1 -0
  46. package/dist/executor/index.js +48 -0
  47. package/dist/executor/index.js.map +1 -0
  48. package/dist/hooks/ClaudeCodeHooks.d.ts +281 -0
  49. package/dist/hooks/ClaudeCodeHooks.d.ts.map +1 -0
  50. package/dist/hooks/ClaudeCodeHooks.js +350 -0
  51. package/dist/hooks/ClaudeCodeHooks.js.map +1 -0
  52. package/dist/hooks/FeishuNotificationAdapter.d.ts +87 -0
  53. package/dist/hooks/FeishuNotificationAdapter.d.ts.map +1 -0
  54. package/dist/hooks/FeishuNotificationAdapter.js +280 -0
  55. package/dist/hooks/FeishuNotificationAdapter.js.map +1 -0
  56. package/dist/hooks/index.d.ts +4 -0
  57. package/dist/hooks/index.d.ts.map +1 -0
  58. package/dist/hooks/index.js +10 -0
  59. package/dist/hooks/index.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +333 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/security/DirectoryGuard.d.ts +54 -0
  65. package/dist/security/DirectoryGuard.d.ts.map +1 -0
  66. package/dist/security/DirectoryGuard.js +143 -0
  67. package/dist/security/DirectoryGuard.js.map +1 -0
  68. package/dist/types/config.d.ts +46 -0
  69. package/dist/types/config.d.ts.map +1 -0
  70. package/dist/types/config.js +22 -0
  71. package/dist/types/config.js.map +1 -0
  72. package/dist/types/index.d.ts +110 -0
  73. package/dist/types/index.d.ts.map +1 -0
  74. package/dist/types/index.js +3 -0
  75. package/dist/types/index.js.map +1 -0
  76. package/dist/utils/FeishuMessageFormatter.d.ts +84 -0
  77. package/dist/utils/FeishuMessageFormatter.d.ts.map +1 -0
  78. package/dist/utils/FeishuMessageFormatter.js +395 -0
  79. package/dist/utils/FeishuMessageFormatter.js.map +1 -0
  80. package/dist/utils/stripAnsi.d.ts +21 -0
  81. package/dist/utils/stripAnsi.d.ts.map +1 -0
  82. package/dist/utils/stripAnsi.js +30 -0
  83. package/dist/utils/stripAnsi.js.map +1 -0
  84. package/package.json +63 -0
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ClaudeExecutor = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const os_1 = __importDefault(require("os"));
11
+ /**
12
+ * Get Claude's global sessions directory
13
+ */
14
+ function getClaudeSessionsDir() {
15
+ const homeDir = os_1.default.homedir();
16
+ const possiblePaths = [
17
+ path_1.default.join(homeDir, '.claude', 'sessions'),
18
+ path_1.default.join(homeDir, '.config', 'claude', 'sessions'),
19
+ path_1.default.join(homeDir, 'Library', 'Application Support', 'Claude', 'sessions'),
20
+ ];
21
+ for (const dir of possiblePaths) {
22
+ if (fs_1.default.existsSync(dir)) {
23
+ return dir;
24
+ }
25
+ }
26
+ return null;
27
+ }
28
+ /**
29
+ * Claude Executor
30
+ * Manages session ID for continuity using --resume
31
+ */
32
+ class ClaudeExecutor {
33
+ directoryGuard;
34
+ currentWorkingDirectory;
35
+ isExecuting = false;
36
+ isDestroyed = false;
37
+ defaultTimeout = 300000; // 5 minutes
38
+ sessionId = null;
39
+ sessionFilePath;
40
+ constructor(directoryGuard) {
41
+ this.directoryGuard = directoryGuard;
42
+ this.currentWorkingDirectory = process.cwd();
43
+ // Store session ID in a file in the working directory
44
+ this.sessionFilePath = path_1.default.join(this.currentWorkingDirectory, '.claude-session');
45
+ this.loadSessionId();
46
+ }
47
+ /**
48
+ * Load session ID from file if exists
49
+ */
50
+ loadSessionId() {
51
+ try {
52
+ if (fs_1.default.existsSync(this.sessionFilePath)) {
53
+ const data = fs_1.default.readFileSync(this.sessionFilePath, 'utf-8');
54
+ const session = JSON.parse(data);
55
+ if (session.id) {
56
+ this.sessionId = session.id;
57
+ console.log(`[Claude] Loaded session ID: ${this.sessionId}`);
58
+ }
59
+ }
60
+ }
61
+ catch (error) {
62
+ console.error('[Claude] Failed to load session ID:', error);
63
+ this.sessionId = null;
64
+ }
65
+ }
66
+ /**
67
+ * Save session ID to file
68
+ */
69
+ saveSessionId(sessionId) {
70
+ try {
71
+ const data = JSON.stringify({
72
+ id: sessionId,
73
+ savedAt: new Date().toISOString(),
74
+ });
75
+ fs_1.default.writeFileSync(this.sessionFilePath, data, 'utf-8');
76
+ console.log(`[Claude] Saved session ID: ${sessionId}`);
77
+ }
78
+ catch (error) {
79
+ console.error('[Claude] Failed to save session ID:', error);
80
+ }
81
+ }
82
+ /**
83
+ * Get recent session ID from Claude's sessions directory
84
+ * Finds the most recently modified session file
85
+ */
86
+ async getRecentSessionId() {
87
+ try {
88
+ const sessionsDir = getClaudeSessionsDir();
89
+ if (!sessionsDir) {
90
+ console.log('[Claude] No sessions directory found');
91
+ return null;
92
+ }
93
+ // List all session directories
94
+ const entries = fs_1.default.readdirSync(sessionsDir, { withFileTypes: true });
95
+ const sessionDirs = entries
96
+ .filter(entry => entry.isDirectory())
97
+ .map(entry => {
98
+ const sessionPath = path_1.default.join(sessionsDir, entry.name);
99
+ const stats = fs_1.default.statSync(sessionPath);
100
+ return {
101
+ id: entry.name,
102
+ mtime: stats.mtime,
103
+ };
104
+ })
105
+ .filter(session => {
106
+ // Validate UUID format
107
+ const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
108
+ return uuidPattern.test(session.id);
109
+ })
110
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
111
+ if (sessionDirs.length === 0) {
112
+ console.log('[Claude] No sessions found in directory');
113
+ return null;
114
+ }
115
+ // Return the most recent session ID
116
+ const recentSession = sessionDirs[0];
117
+ console.log(`[Claude] Found recent session: ${recentSession.id} (last modified: ${recentSession.mtime.toISOString()})`);
118
+ return recentSession.id;
119
+ }
120
+ catch (error) {
121
+ console.error('[Claude] Failed to get recent session ID:', error);
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * Get current working directory
127
+ */
128
+ getCurrentWorkingDirectory() {
129
+ return this.currentWorkingDirectory;
130
+ }
131
+ /**
132
+ * Set working directory
133
+ * @param targetPath Target path
134
+ * @throws If path is not safe
135
+ */
136
+ setWorkingDirectory(targetPath) {
137
+ const resolvedPath = this.directoryGuard.resolveWorkingDirectory(targetPath, this.currentWorkingDirectory);
138
+ this.currentWorkingDirectory = resolvedPath;
139
+ // Update session file path
140
+ this.sessionFilePath = path_1.default.join(this.currentWorkingDirectory, '.claude-session');
141
+ this.loadSessionId();
142
+ }
143
+ /**
144
+ * Execute Claude command
145
+ * @param prompt Command prompt
146
+ * @param options Execution options
147
+ * @returns Execution result
148
+ */
149
+ async execute(prompt, options = {}) {
150
+ if (this.isDestroyed) {
151
+ return {
152
+ success: false,
153
+ error: 'Executor has been destroyed',
154
+ };
155
+ }
156
+ if (this.isExecuting) {
157
+ return {
158
+ success: false,
159
+ error: 'Executor is busy, please wait for current task to complete',
160
+ };
161
+ }
162
+ this.isExecuting = true;
163
+ try {
164
+ // Only use timeout if explicitly provided in options
165
+ // Default timeout is disabled to prevent premature termination of long-running tasks
166
+ // Users can cancel with /abort if needed
167
+ const timeout = options.timeout; // undefined means no timeout
168
+ // If we don't have a session ID, try to get recent one from Claude's sessions directory
169
+ if (!this.sessionId) {
170
+ console.log('[Claude] No session ID, checking for recent sessions...');
171
+ this.sessionId = await this.getRecentSessionId();
172
+ if (this.sessionId) {
173
+ this.saveSessionId(this.sessionId);
174
+ }
175
+ }
176
+ const result = await this.executeWithClaudeCLI(prompt, options, timeout);
177
+ return result;
178
+ }
179
+ catch (error) {
180
+ return {
181
+ success: false,
182
+ error: this.formatError(error),
183
+ };
184
+ }
185
+ finally {
186
+ this.isExecuting = false;
187
+ }
188
+ }
189
+ /**
190
+ * Execute using local Claude Code CLI
191
+ */
192
+ async executeWithClaudeCLI(prompt, options, timeout) {
193
+ return new Promise((resolve, reject) => {
194
+ const outputChunks = [];
195
+ let timeoutTimer;
196
+ // Build claude command arguments
197
+ const args = ['--print'];
198
+ if (this.sessionId) {
199
+ args.push('--resume', this.sessionId);
200
+ console.log(`[Claude] Resuming session: ${this.sessionId}`);
201
+ }
202
+ else {
203
+ console.log('[Claude] Starting new session');
204
+ }
205
+ args.push(prompt);
206
+ console.log(`[Claude] Starting: claude ${args.map(a => a.includes(' ') ? `"${a}"` : a).join(' ')}`);
207
+ console.log(`[Claude] Working directory: ${this.currentWorkingDirectory}`);
208
+ const child = (0, child_process_1.spawn)('claude', args, {
209
+ cwd: this.currentWorkingDirectory,
210
+ stdio: ['ignore', 'pipe', 'pipe'],
211
+ env: {
212
+ ...process.env,
213
+ CI: 'true',
214
+ FORCE_COLOR: '0',
215
+ },
216
+ });
217
+ console.log(`[Claude] Process started with PID: ${child.pid}`);
218
+ // Handle stdout
219
+ child.stdout.on('data', (data) => {
220
+ const chunk = data.toString();
221
+ console.log('[Claude stdout]', chunk);
222
+ outputChunks.push(chunk);
223
+ if (options.onStream) {
224
+ try {
225
+ options.onStream(chunk);
226
+ }
227
+ catch (error) {
228
+ console.error('[Claude] onStream callback error:', error);
229
+ }
230
+ }
231
+ });
232
+ // Handle stderr
233
+ child.stderr.on('data', (data) => {
234
+ const chunk = data.toString();
235
+ console.error('[Claude stderr]', chunk);
236
+ outputChunks.push(chunk);
237
+ if (options.onStream) {
238
+ try {
239
+ options.onStream(chunk);
240
+ }
241
+ catch (error) {
242
+ console.error('[Claude] onStream callback error:', error);
243
+ }
244
+ }
245
+ });
246
+ // Handle timeout (only if explicitly provided)
247
+ // Default timeout is disabled to prevent premature termination
248
+ if (timeout !== undefined) {
249
+ timeoutTimer = setTimeout(() => {
250
+ console.error('[Claude] Command timeout');
251
+ child.kill('SIGTERM');
252
+ reject(new Error('Execution timeout exceeded'));
253
+ }, timeout);
254
+ }
255
+ // Handle process completion
256
+ child.on('close', (code) => {
257
+ if (timeoutTimer) {
258
+ clearTimeout(timeoutTimer);
259
+ }
260
+ console.log(`[Claude] Process exited with code: ${code}`);
261
+ const output = outputChunks.join('');
262
+ // Check if session ID is in output (for new sessions)
263
+ if (!this.sessionId) {
264
+ const uuidPattern = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi;
265
+ const matches = output.match(uuidPattern);
266
+ if (matches && matches.length > 0) {
267
+ this.sessionId = matches[0];
268
+ this.saveSessionId(this.sessionId);
269
+ console.log(`[Claude] New session ID: ${this.sessionId}`);
270
+ }
271
+ }
272
+ if (code === 0) {
273
+ console.log('[Claude] Execution completed successfully');
274
+ resolve({
275
+ success: true,
276
+ output: output.trim(),
277
+ });
278
+ }
279
+ else {
280
+ console.error(`[Claude] Execution failed with code ${code}`);
281
+ resolve({
282
+ success: false,
283
+ error: `Claude Code process exited with code ${code}${output ? '\n' + output : ''}`,
284
+ });
285
+ }
286
+ });
287
+ // Handle process errors
288
+ child.on('error', (error) => {
289
+ if (timeoutTimer) {
290
+ clearTimeout(timeoutTimer);
291
+ }
292
+ console.error('[Claude] Process error:', error);
293
+ if (error.message.includes('ENOENT')) {
294
+ reject(new Error('Claude Code CLI not found. Please ensure Claude Code is installed and available in PATH.\n' +
295
+ 'Installation: https://docs.anthropic.com/en/docs/claude-code/installation'));
296
+ }
297
+ else {
298
+ reject(error);
299
+ }
300
+ });
301
+ });
302
+ }
303
+ /**
304
+ * Format error message
305
+ */
306
+ formatError(error) {
307
+ if (error instanceof Error) {
308
+ if (error.message.includes('timeout')) {
309
+ return `Execution timeout exceeded. The task took too long to complete.`;
310
+ }
311
+ if (error.message.includes('ENOENT')) {
312
+ return `Claude Code CLI not found. Please ensure it's installed and available in PATH.`;
313
+ }
314
+ if (error.message.includes('EACCES') || error.message.includes('Permission denied')) {
315
+ return `Permission denied. You may not have access to this resource.`;
316
+ }
317
+ return `Execution error: ${error.message}`;
318
+ }
319
+ return 'Unknown execution error';
320
+ }
321
+ /**
322
+ * Reset execution context
323
+ * Clears the session ID so next command starts a new session
324
+ */
325
+ resetContext() {
326
+ console.log('[Claude] Resetting session context');
327
+ this.sessionId = null;
328
+ // Remove session file
329
+ try {
330
+ if (fs_1.default.existsSync(this.sessionFilePath)) {
331
+ fs_1.default.unlinkSync(this.sessionFilePath);
332
+ console.log('[Claude] Session file removed');
333
+ }
334
+ }
335
+ catch (error) {
336
+ console.error('[Claude] Failed to remove session file:', error);
337
+ }
338
+ }
339
+ /**
340
+ * Abort current command execution
341
+ * For ClaudeExecutor, this just resets the executing flag since
342
+ * each command spawns a new process and cannot be easily aborted mid-execution
343
+ */
344
+ async abort() {
345
+ if (!this.isExecuting) {
346
+ console.log('[Claude] No command is currently executing');
347
+ return false;
348
+ }
349
+ console.log('[Claude] Abort requested, but spawn-mode executor cannot abort running command');
350
+ // Note: Since this executor spawns a new process for each command,
351
+ // we cannot easily abort it. We just reset the flag so the next
352
+ // command can be processed (the current one will complete in background).
353
+ this.isExecuting = false;
354
+ return true;
355
+ }
356
+ /**
357
+ * Destroy executor
358
+ */
359
+ destroy() {
360
+ this.isDestroyed = true;
361
+ this.isExecuting = false;
362
+ }
363
+ }
364
+ exports.ClaudeExecutor = ClaudeExecutor;
365
+ //# sourceMappingURL=ClaudeExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeExecutor.js","sourceRoot":"","sources":["../../src/executor/ClaudeExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ import { DirectoryGuard } from '../security/DirectoryGuard';
2
+ import { StructuredContent, ToolUseInfo, ToolResultInfo } from '../types';
3
+ import { EventEmitter } from 'events';
4
+ /**
5
+ * Persistent Claude Executor options
6
+ */
7
+ export interface PersistentClaudeOptions {
8
+ /** Stream output callback (for backward compatibility) */
9
+ onStream?: (chunk: string) => void;
10
+ /** Structured content callback (for rich formatting) */
11
+ onStructuredContent?: (content: StructuredContent) => void;
12
+ /** Tool use callback (for rich formatting) */
13
+ onToolUse?: (toolUse: ToolUseInfo) => void;
14
+ /** Tool result callback (for rich formatting) */
15
+ onToolResult?: (toolResult: ToolResultInfo) => void;
16
+ /** Execution timeout (milliseconds), default 300000 (5 minutes) */
17
+ timeout?: number;
18
+ }
19
+ /**
20
+ * Persistent Claude execution result
21
+ */
22
+ export interface PersistentClaudeResult {
23
+ /** Whether execution was successful */
24
+ success: boolean;
25
+ /** Complete output content */
26
+ output?: string;
27
+ /** Error message */
28
+ error?: string;
29
+ /** Session ID abbreviation (last 8 chars) */
30
+ sessionAbbr?: string;
31
+ }
32
+ /**
33
+ * Claude Persistent Executor
34
+ *
35
+ * Maintains a long-running Claude process and communicates via stdin/stdout
36
+ * using stream-json format for real-time bidirectional communication.
37
+ */
38
+ export declare class ClaudePersistentExecutor extends EventEmitter {
39
+ private directoryGuard;
40
+ private currentWorkingDirectory;
41
+ private isDestroyed;
42
+ private defaultTimeout;
43
+ private sessionId;
44
+ private sessionFilePath;
45
+ private claudeProcess;
46
+ private isStarting;
47
+ private isStopping;
48
+ private commandQueue;
49
+ private isProcessing;
50
+ private currentOutputBuffer;
51
+ private currentStreamCallback?;
52
+ private currentToolUseCallback?;
53
+ private currentToolResultCallback?;
54
+ private currentCommandResolve?;
55
+ private currentCommandReject?;
56
+ private currentTimeoutTimer?;
57
+ private structuredContentBlocks;
58
+ private currentStructuredCallback?;
59
+ private currentTaskId;
60
+ private currentTaskStartTime;
61
+ private isWaitingForInput;
62
+ private inputRequestCallbacks;
63
+ private inputDetectionTimer?;
64
+ private lastOutputTime;
65
+ private activityTrackingEnabled;
66
+ constructor(directoryGuard: DirectoryGuard);
67
+ /**
68
+ * Load session ID from file if exists
69
+ */
70
+ private loadSessionId;
71
+ /**
72
+ * Save session ID to file
73
+ */
74
+ private saveSessionId;
75
+ /**
76
+ * Get recent session ID from Claude's sessions directory
77
+ */
78
+ private getRecentSessionId;
79
+ /**
80
+ * Get current working directory
81
+ */
82
+ getCurrentWorkingDirectory(): string;
83
+ /**
84
+ * Set working directory
85
+ */
86
+ setWorkingDirectory(targetPath: string): void;
87
+ /**
88
+ * Start the persistent Claude process
89
+ */
90
+ private startProcess;
91
+ /**
92
+ * Stop the persistent Claude process
93
+ */
94
+ private stopProcess;
95
+ /**
96
+ * Reset the command timeout timer when activity is detected
97
+ * This prevents timeout during long-running tasks with continuous output
98
+ *
99
+ * NOTE: This method is currently disabled because inactivity timeout can cause
100
+ * state inconsistency - the executor may timeout while Claude process is still
101
+ * running, leading to confusing behavior where user sees timeout error but
102
+ * Claude is still working. Users can use /abort to cancel long-running tasks.
103
+ */
104
+ private resetActivityTimeout;
105
+ /**
106
+ * Handle a line of JSON output from Claude
107
+ */
108
+ private handleOutputLine;
109
+ /**
110
+ * Start a timer to detect if user input is requested
111
+ * If no new output arrives within the timeout, check if the last output contains input request patterns
112
+ */
113
+ private startInputDetectionTimer;
114
+ /**
115
+ * Handle input request by notifying user and waiting for response
116
+ */
117
+ private handleInputRequest;
118
+ /**
119
+ * Check if the output indicates a request for user input
120
+ * This detects patterns like "Press Enter to continue", "(y/n)", etc.
121
+ */
122
+ private isInputRequest;
123
+ /**
124
+ * Request user input through hooks
125
+ * Returns a promise that resolves when user provides input via sendInput()
126
+ */
127
+ private requestInteractiveInput;
128
+ /**
129
+ * Send user input to the Claude process
130
+ * This is called by MessageHandler when user sends a message while waiting for input
131
+ */
132
+ sendInput(input: string): boolean;
133
+ /**
134
+ * Check if currently waiting for user input
135
+ */
136
+ isWaitingInput(): boolean;
137
+ /**
138
+ * Complete the current command
139
+ */
140
+ private completeCurrentCommand;
141
+ /**
142
+ * Reset current command state
143
+ */
144
+ private resetCurrentCommand;
145
+ /**
146
+ * Process the command queue
147
+ */
148
+ private processQueue;
149
+ /**
150
+ * Execute a command through the persistent Claude process
151
+ */
152
+ execute(prompt: string, options?: PersistentClaudeOptions): Promise<PersistentClaudeResult>;
153
+ /**
154
+ * Abort current command execution
155
+ * Stops the current process and rejects the pending command
156
+ */
157
+ abort(): Promise<boolean>;
158
+ /**
159
+ * Reset execution context
160
+ */
161
+ resetContext(): void;
162
+ /**
163
+ * Destroy executor and cleanup
164
+ */
165
+ destroy(): Promise<void>;
166
+ /**
167
+ * Check if process is running
168
+ */
169
+ isProcessRunning(): boolean;
170
+ /**
171
+ * Get current session ID
172
+ */
173
+ getSessionId(): string | null;
174
+ }
175
+ //# sourceMappingURL=ClaudePersistentExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudePersistentExecutor.d.ts","sourceRoot":"","sources":["../../src/executor/ClaudePersistentExecutor.ts"],"names":[],"mappings":"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"}