@wonderwhy-er/desktop-commander 0.2.1 → 0.2.3

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 (52) hide show
  1. package/README.md +69 -9
  2. package/dist/command-manager.js.map +1 -0
  3. package/dist/config-manager.js.map +1 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/custom-stdio.js.map +1 -0
  6. package/dist/error-handlers.js.map +1 -0
  7. package/dist/handlers/edit-search-handlers.js.map +1 -0
  8. package/dist/handlers/filesystem-handlers.js +2 -4
  9. package/dist/handlers/filesystem-handlers.js.map +1 -0
  10. package/dist/handlers/index.js.map +1 -0
  11. package/dist/handlers/process-handlers.js.map +1 -0
  12. package/dist/handlers/terminal-handlers.js.map +1 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/server.js +41 -25
  15. package/dist/server.js.map +1 -0
  16. package/dist/setup-claude-server.js +44 -36
  17. package/dist/terminal-manager.d.ts +7 -1
  18. package/dist/terminal-manager.js +9 -1
  19. package/dist/terminal-manager.js.map +1 -0
  20. package/dist/tools/config.js.map +1 -0
  21. package/dist/tools/edit.js +17 -12
  22. package/dist/tools/edit.js.map +1 -0
  23. package/dist/tools/execute.js +65 -4
  24. package/dist/tools/execute.js.map +1 -0
  25. package/dist/tools/filesystem.d.ts +10 -0
  26. package/dist/tools/filesystem.js +290 -41
  27. package/dist/tools/filesystem.js.map +1 -0
  28. package/dist/tools/fuzzySearch.js.map +1 -0
  29. package/dist/tools/improved-process-tools.d.ts +24 -0
  30. package/dist/tools/improved-process-tools.js +312 -0
  31. package/dist/tools/mime-types.js.map +1 -0
  32. package/dist/tools/process.js.map +1 -0
  33. package/dist/tools/schemas.d.ts +6 -3
  34. package/dist/tools/schemas.js +2 -2
  35. package/dist/tools/schemas.js.map +1 -0
  36. package/dist/tools/search.js.map +1 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/utils/capture.d.ts +2 -0
  39. package/dist/utils/capture.js +17 -8
  40. package/dist/utils/capture.js.map +1 -0
  41. package/dist/utils/fuzzySearchLogger.js.map +1 -0
  42. package/dist/utils/lineEndingHandler.js.map +1 -0
  43. package/dist/utils/process-detection.d.ts +23 -0
  44. package/dist/utils/process-detection.js +150 -0
  45. package/dist/utils/system-info.d.ts +30 -0
  46. package/dist/utils/system-info.js +146 -0
  47. package/dist/utils/trackTools.js.map +1 -0
  48. package/dist/utils/withTimeout.js.map +1 -0
  49. package/dist/version.d.ts +1 -1
  50. package/dist/version.js +1 -1
  51. package/dist/version.js.map +1 -0
  52. package/package.json +2 -1
@@ -0,0 +1,312 @@
1
+ import { terminalManager } from '../terminal-manager.js';
2
+ import { commandManager } from '../command-manager.js';
3
+ import { StartProcessArgsSchema, ReadProcessOutputArgsSchema, InteractWithProcessArgsSchema, ForceTerminateArgsSchema } from './schemas.js';
4
+ import { capture } from "../utils/capture.js";
5
+ import { analyzeProcessState, cleanProcessOutput, formatProcessStateMessage } from '../utils/process-detection.js';
6
+ import { getSystemInfo } from '../utils/system-info.js';
7
+ /**
8
+ * Start a new process (renamed from execute_command)
9
+ * Includes early detection of process waiting for input
10
+ */
11
+ export async function startProcess(args) {
12
+ const parsed = StartProcessArgsSchema.safeParse(args);
13
+ if (!parsed.success) {
14
+ capture('server_start_process_failed');
15
+ return {
16
+ content: [{ type: "text", text: `Error: Invalid arguments for start_process: ${parsed.error}` }],
17
+ isError: true,
18
+ };
19
+ }
20
+ try {
21
+ const commands = commandManager.extractCommands(parsed.data.command).join(', ');
22
+ capture('server_start_process', {
23
+ command: commandManager.getBaseCommand(parsed.data.command),
24
+ commands: commands
25
+ });
26
+ }
27
+ catch (error) {
28
+ capture('server_start_process', {
29
+ command: commandManager.getBaseCommand(parsed.data.command)
30
+ });
31
+ }
32
+ const isAllowed = await commandManager.validateCommand(parsed.data.command);
33
+ if (!isAllowed) {
34
+ return {
35
+ content: [{ type: "text", text: `Error: Command not allowed: ${parsed.data.command}` }],
36
+ isError: true,
37
+ };
38
+ }
39
+ const result = await terminalManager.executeCommand(parsed.data.command, parsed.data.timeout_ms, parsed.data.shell);
40
+ if (result.pid === -1) {
41
+ return {
42
+ content: [{ type: "text", text: result.output }],
43
+ isError: true,
44
+ };
45
+ }
46
+ // Analyze the process state to detect if it's waiting for input
47
+ const processState = analyzeProcessState(result.output, result.pid);
48
+ // Get system info for shell information
49
+ const systemInfo = getSystemInfo();
50
+ const shellUsed = parsed.data.shell || systemInfo.defaultShell;
51
+ let statusMessage = '';
52
+ if (processState.isWaitingForInput) {
53
+ statusMessage = `\nšŸ”„ ${formatProcessStateMessage(processState, result.pid)}`;
54
+ }
55
+ else if (processState.isFinished) {
56
+ statusMessage = `\nāœ… ${formatProcessStateMessage(processState, result.pid)}`;
57
+ }
58
+ else if (result.isBlocked) {
59
+ statusMessage = '\nā³ Process is running. Use read_process_output to get more output.';
60
+ }
61
+ return {
62
+ content: [{
63
+ type: "text",
64
+ text: `Process started with PID ${result.pid} (shell: ${shellUsed})\nInitial output:\n${result.output}${statusMessage}`
65
+ }],
66
+ };
67
+ }
68
+ /**
69
+ * Read output from a running process (renamed from read_output)
70
+ * Includes early detection of process waiting for input
71
+ */
72
+ export async function readProcessOutput(args) {
73
+ const parsed = ReadProcessOutputArgsSchema.safeParse(args);
74
+ if (!parsed.success) {
75
+ return {
76
+ content: [{ type: "text", text: `Error: Invalid arguments for read_process_output: ${parsed.error}` }],
77
+ isError: true,
78
+ };
79
+ }
80
+ const { pid, timeout_ms = 5000 } = parsed.data;
81
+ const session = terminalManager.getSession(pid);
82
+ if (!session) {
83
+ return {
84
+ content: [{ type: "text", text: `No active session found for PID ${pid}` }],
85
+ isError: true,
86
+ };
87
+ }
88
+ let output = "";
89
+ let timeoutReached = false;
90
+ let earlyExit = false;
91
+ let processState;
92
+ try {
93
+ const outputPromise = new Promise((resolve) => {
94
+ const initialOutput = terminalManager.getNewOutput(pid);
95
+ if (initialOutput && initialOutput.length > 0) {
96
+ resolve(initialOutput);
97
+ return;
98
+ }
99
+ let resolved = false;
100
+ let interval = null;
101
+ let timeout = null;
102
+ const cleanup = () => {
103
+ if (interval)
104
+ clearInterval(interval);
105
+ if (timeout)
106
+ clearTimeout(timeout);
107
+ };
108
+ const resolveOnce = (value, isTimeout = false) => {
109
+ if (resolved)
110
+ return;
111
+ resolved = true;
112
+ cleanup();
113
+ timeoutReached = isTimeout;
114
+ resolve(value);
115
+ };
116
+ interval = setInterval(() => {
117
+ const newOutput = terminalManager.getNewOutput(pid);
118
+ if (newOutput && newOutput.length > 0) {
119
+ const currentOutput = output + newOutput;
120
+ const state = analyzeProcessState(currentOutput, pid);
121
+ // Early exit if process is clearly waiting for input
122
+ if (state.isWaitingForInput) {
123
+ earlyExit = true;
124
+ processState = state;
125
+ resolveOnce(newOutput);
126
+ return;
127
+ }
128
+ output = currentOutput;
129
+ // Continue collecting if still running
130
+ if (!state.isFinished) {
131
+ return;
132
+ }
133
+ // Process finished
134
+ processState = state;
135
+ resolveOnce(newOutput);
136
+ }
137
+ }, 200); // Check every 200ms
138
+ timeout = setTimeout(() => {
139
+ const finalOutput = terminalManager.getNewOutput(pid) || "";
140
+ resolveOnce(finalOutput, true);
141
+ }, timeout_ms);
142
+ });
143
+ const newOutput = await outputPromise;
144
+ output += newOutput;
145
+ // Analyze final state if not already done
146
+ if (!processState) {
147
+ processState = analyzeProcessState(output, pid);
148
+ }
149
+ }
150
+ catch (error) {
151
+ return {
152
+ content: [{ type: "text", text: `Error reading output: ${error}` }],
153
+ isError: true,
154
+ };
155
+ }
156
+ // Format response based on what we detected
157
+ let statusMessage = '';
158
+ if (earlyExit && processState?.isWaitingForInput) {
159
+ statusMessage = `\nšŸ”„ ${formatProcessStateMessage(processState, pid)}`;
160
+ }
161
+ else if (processState?.isFinished) {
162
+ statusMessage = `\nāœ… ${formatProcessStateMessage(processState, pid)}`;
163
+ }
164
+ else if (timeoutReached) {
165
+ statusMessage = '\nā±ļø Timeout reached - process may still be running';
166
+ }
167
+ const responseText = output || 'No new output available';
168
+ return {
169
+ content: [{
170
+ type: "text",
171
+ text: `${responseText}${statusMessage}`
172
+ }],
173
+ };
174
+ }
175
+ /**
176
+ * Interact with a running process (renamed from send_input)
177
+ * Automatically detects when process is ready and returns output
178
+ */
179
+ export async function interactWithProcess(args) {
180
+ const parsed = InteractWithProcessArgsSchema.safeParse(args);
181
+ if (!parsed.success) {
182
+ capture('server_interact_with_process_failed', {
183
+ error: 'Invalid arguments'
184
+ });
185
+ return {
186
+ content: [{ type: "text", text: `Error: Invalid arguments for interact_with_process: ${parsed.error}` }],
187
+ isError: true,
188
+ };
189
+ }
190
+ const { pid, input, timeout_ms = 8000, wait_for_prompt = true } = parsed.data;
191
+ try {
192
+ capture('server_interact_with_process', {
193
+ pid: pid,
194
+ inputLength: input.length
195
+ });
196
+ const success = terminalManager.sendInputToProcess(pid, input);
197
+ if (!success) {
198
+ return {
199
+ content: [{ type: "text", text: `Error: Failed to send input to process ${pid}. The process may have exited or doesn't accept input.` }],
200
+ isError: true,
201
+ };
202
+ }
203
+ // If not waiting for response, return immediately
204
+ if (!wait_for_prompt) {
205
+ return {
206
+ content: [{
207
+ type: "text",
208
+ text: `āœ… Input sent to process ${pid}. Use read_process_output to get the response.`
209
+ }],
210
+ };
211
+ }
212
+ // Smart waiting with process state detection
213
+ let output = "";
214
+ let attempts = 0;
215
+ const maxAttempts = Math.ceil(timeout_ms / 200);
216
+ let processState;
217
+ while (attempts < maxAttempts) {
218
+ await new Promise(resolve => setTimeout(resolve, 200));
219
+ const newOutput = terminalManager.getNewOutput(pid);
220
+ if (newOutput && newOutput.length > 0) {
221
+ output += newOutput;
222
+ // Analyze current state
223
+ processState = analyzeProcessState(output, pid);
224
+ // Exit early if we detect the process is waiting for input
225
+ if (processState.isWaitingForInput) {
226
+ break;
227
+ }
228
+ // Also exit if process finished
229
+ if (processState.isFinished) {
230
+ break;
231
+ }
232
+ }
233
+ attempts++;
234
+ }
235
+ // Clean and format output
236
+ const cleanOutput = cleanProcessOutput(output, input);
237
+ const timeoutReached = attempts >= maxAttempts;
238
+ // Determine final state
239
+ if (!processState) {
240
+ processState = analyzeProcessState(output, pid);
241
+ }
242
+ let statusMessage = '';
243
+ if (processState.isWaitingForInput) {
244
+ statusMessage = `\nšŸ”„ ${formatProcessStateMessage(processState, pid)}`;
245
+ }
246
+ else if (processState.isFinished) {
247
+ statusMessage = `\nāœ… ${formatProcessStateMessage(processState, pid)}`;
248
+ }
249
+ else if (timeoutReached) {
250
+ statusMessage = '\nā±ļø Response may be incomplete (timeout reached)';
251
+ }
252
+ if (cleanOutput.trim().length === 0 && !timeoutReached) {
253
+ return {
254
+ content: [{
255
+ type: "text",
256
+ text: `āœ… Input executed in process ${pid}.\n(No output produced)${statusMessage}`
257
+ }],
258
+ };
259
+ }
260
+ return {
261
+ content: [{
262
+ type: "text",
263
+ text: `āœ… Input executed in process ${pid}:\n\n${cleanOutput}${statusMessage}`
264
+ }],
265
+ };
266
+ }
267
+ catch (error) {
268
+ const errorMessage = error instanceof Error ? error.message : String(error);
269
+ capture('server_interact_with_process_error', {
270
+ error: errorMessage
271
+ });
272
+ return {
273
+ content: [{ type: "text", text: `Error interacting with process: ${errorMessage}` }],
274
+ isError: true,
275
+ };
276
+ }
277
+ }
278
+ /**
279
+ * Force terminate a process
280
+ */
281
+ export async function forceTerminate(args) {
282
+ const parsed = ForceTerminateArgsSchema.safeParse(args);
283
+ if (!parsed.success) {
284
+ return {
285
+ content: [{ type: "text", text: `Error: Invalid arguments for force_terminate: ${parsed.error}` }],
286
+ isError: true,
287
+ };
288
+ }
289
+ const success = terminalManager.forceTerminate(parsed.data.pid);
290
+ return {
291
+ content: [{
292
+ type: "text",
293
+ text: success
294
+ ? `Successfully initiated termination of session ${parsed.data.pid}`
295
+ : `No active session found for PID ${parsed.data.pid}`
296
+ }],
297
+ };
298
+ }
299
+ /**
300
+ * List active sessions
301
+ */
302
+ export async function listSessions() {
303
+ const sessions = terminalManager.listActiveSessions();
304
+ return {
305
+ content: [{
306
+ type: "text",
307
+ text: sessions.length === 0
308
+ ? 'No active sessions'
309
+ : sessions.map(s => `PID: ${s.pid}, Blocked: ${s.isBlocked}, Runtime: ${Math.round(s.runtime / 1000)}s`).join('\n')
310
+ }],
311
+ };
312
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mime-types.js","sourceRoot":"","sources":["../../src/tools/mime-types.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAEhE,gDAAgD;IAChD,MAAM,UAAU,GAA2B;QACzC,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,gCAAgC;IAChC,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,4CAA4C;IAC5C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/tools/process.ts"],"names":[],"mappings":"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"}
@@ -13,23 +13,26 @@ export declare const SetConfigValueArgsSchema: z.ZodObject<{
13
13
  export declare const ListProcessesArgsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
14
14
  export declare const ExecuteCommandArgsSchema: z.ZodObject<{
15
15
  command: z.ZodString;
16
- timeout_ms: z.ZodOptional<z.ZodNumber>;
16
+ timeout_ms: z.ZodNumber;
17
17
  shell: z.ZodOptional<z.ZodString>;
18
18
  }, "strip", z.ZodTypeAny, {
19
19
  command: string;
20
- timeout_ms?: number | undefined;
20
+ timeout_ms: number;
21
21
  shell?: string | undefined;
22
22
  }, {
23
23
  command: string;
24
- timeout_ms?: number | undefined;
24
+ timeout_ms: number;
25
25
  shell?: string | undefined;
26
26
  }>;
27
27
  export declare const ReadOutputArgsSchema: z.ZodObject<{
28
28
  pid: z.ZodNumber;
29
+ timeout_ms: z.ZodOptional<z.ZodNumber>;
29
30
  }, "strip", z.ZodTypeAny, {
30
31
  pid: number;
32
+ timeout_ms?: number | undefined;
31
33
  }, {
32
34
  pid: number;
35
+ timeout_ms?: number | undefined;
33
36
  }>;
34
37
  export declare const ForceTerminateArgsSchema: z.ZodObject<{
35
38
  pid: z.ZodNumber;
@@ -1,5 +1,4 @@
1
1
  import { z } from "zod";
2
- console.error("Loading schemas.ts");
3
2
  // Config tools schemas
4
3
  export const GetConfigArgsSchema = z.object({});
5
4
  export const SetConfigValueArgsSchema = z.object({
@@ -11,11 +10,12 @@ export const ListProcessesArgsSchema = z.object({});
11
10
  // Terminal tools schemas
12
11
  export const ExecuteCommandArgsSchema = z.object({
13
12
  command: z.string(),
14
- timeout_ms: z.number().optional(),
13
+ timeout_ms: z.number(),
15
14
  shell: z.string().optional(),
16
15
  });
17
16
  export const ReadOutputArgsSchema = z.object({
18
17
  pid: z.number(),
18
+ timeout_ms: z.number().optional(),
19
19
  });
20
20
  export const ForceTerminateArgsSchema = z.object({
21
21
  pid: z.number(),
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -12,4 +12,6 @@ export declare function sanitizeError(error: any): {
12
12
  * @param event Event name
13
13
  * @param properties Optional event properties
14
14
  */
15
+ export declare const captureBase: (captureURL: string, event: string, properties?: any) => Promise<void>;
16
+ export declare const capture_call_tool: (event: string, properties?: any) => Promise<void>;
15
17
  export declare const capture: (event: string, properties?: any) => Promise<void>;
@@ -10,11 +10,6 @@ try {
10
10
  catch {
11
11
  // Continue without version info if not available
12
12
  }
13
- // Configuration
14
- const GA_MEASUREMENT_ID = 'G-NGGDNL0K4L'; // Replace with your GA4 Measurement ID
15
- const GA_API_SECRET = '5M0mC--2S_6t94m8WrI60A'; // Replace with your GA4 API Secret
16
- const GA_BASE_URL = `https://www.google-analytics.com/mp/collect?measurement_id=${GA_MEASUREMENT_ID}&api_secret=${GA_API_SECRET}`;
17
- const GA_DEBUG_BASE_URL = `https://www.google-analytics.com/debug/mp/collect?measurement_id=${GA_MEASUREMENT_ID}&api_secret=${GA_API_SECRET}`;
18
13
  // Will be initialized when needed
19
14
  let uniqueUserId = 'unknown';
20
15
  // Function to get or create a persistent UUID
@@ -70,12 +65,12 @@ export function sanitizeError(error) {
70
65
  * @param event Event name
71
66
  * @param properties Optional event properties
72
67
  */
73
- export const capture = async (event, properties) => {
68
+ export const captureBase = async (captureURL, event, properties) => {
74
69
  try {
75
70
  // Check if telemetry is enabled in config (defaults to true if not set)
76
71
  const telemetryEnabled = await configManager.getValue('telemetryEnabled');
77
72
  // If telemetry is explicitly disabled or GA credentials are missing, don't send
78
- if (telemetryEnabled === false || !GA_MEASUREMENT_ID || !GA_API_SECRET) {
73
+ if (telemetryEnabled === false || !captureURL) {
79
74
  return;
80
75
  }
81
76
  // Get or create the client ID if not already initialized
@@ -145,7 +140,7 @@ export const capture = async (event, properties) => {
145
140
  'Content-Length': Buffer.byteLength(postData)
146
141
  }
147
142
  };
148
- const req = https.request(GA_BASE_URL, options, (res) => {
143
+ const req = https.request(captureURL, options, (res) => {
149
144
  // Response handling (optional)
150
145
  let data = '';
151
146
  res.on('data', (chunk) => {
@@ -173,3 +168,17 @@ export const capture = async (event, properties) => {
173
168
  // Silently fail - we don't want analytics issues to break functionality
174
169
  }
175
170
  };
171
+ export const capture_call_tool = async (event, properties) => {
172
+ const GA_MEASUREMENT_ID = 'G-35YKFM782B'; // Replace with your GA4 Measurement ID
173
+ const GA_API_SECRET = 'qM5VNk6aQy6NN5s-tCppZw'; // Replace with your GA4 API Secret
174
+ const GA_BASE_URL = `https://www.google-analytics.com/mp/collect?measurement_id=${GA_MEASUREMENT_ID}&api_secret=${GA_API_SECRET}`;
175
+ const GA_DEBUG_BASE_URL = `https://www.google-analytics.com/debug/mp/collect?measurement_id=${GA_MEASUREMENT_ID}&api_secret=${GA_API_SECRET}`;
176
+ return await captureBase(GA_BASE_URL, event, properties);
177
+ };
178
+ export const capture = async (event, properties) => {
179
+ const GA_MEASUREMENT_ID = 'G-NGGDNL0K4L'; // Replace with your GA4 Measurement ID
180
+ const GA_API_SECRET = '5M0mC--2S_6t94m8WrI60A'; // Replace with your GA4 API Secret
181
+ const GA_BASE_URL = `https://www.google-analytics.com/mp/collect?measurement_id=${GA_MEASUREMENT_ID}&api_secret=${GA_API_SECRET}`;
182
+ const GA_DEBUG_BASE_URL = `https://www.google-analytics.com/debug/mp/collect?measurement_id=${GA_MEASUREMENT_ID}&api_secret=${GA_API_SECRET}`;
183
+ return await captureBase(GA_BASE_URL, event, properties);
184
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/utils/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzySearchLogger.js","sourceRoot":"","sources":["../../src/utils/fuzzySearchLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineEndingHandler.js","sourceRoot":"","sources":["../../src/utils/lineEndingHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * REPL and Process State Detection Utilities
3
+ * Detects when processes are waiting for input vs finished vs running
4
+ */
5
+ export interface ProcessState {
6
+ isWaitingForInput: boolean;
7
+ isFinished: boolean;
8
+ isRunning: boolean;
9
+ detectedPrompt?: string;
10
+ lastOutput: string;
11
+ }
12
+ /**
13
+ * Analyze process output to determine current state
14
+ */
15
+ export declare function analyzeProcessState(output: string, pid?: number): ProcessState;
16
+ /**
17
+ * Clean output by removing prompts and input echoes
18
+ */
19
+ export declare function cleanProcessOutput(output: string, inputSent?: string): string;
20
+ /**
21
+ * Format process state for user display
22
+ */
23
+ export declare function formatProcessStateMessage(state: ProcessState, pid: number): string;
@@ -0,0 +1,150 @@
1
+ /**
2
+ * REPL and Process State Detection Utilities
3
+ * Detects when processes are waiting for input vs finished vs running
4
+ */
5
+ // Common REPL prompt patterns
6
+ const REPL_PROMPTS = {
7
+ python: ['>>> ', '... '],
8
+ node: ['> ', '... '],
9
+ r: ['> ', '+ '],
10
+ julia: ['julia> ', ' '], // julia continuation is spaces
11
+ shell: ['$ ', '# ', '% ', 'bash-', 'zsh-'],
12
+ mysql: ['mysql> ', ' -> '],
13
+ postgres: ['=# ', '-# '],
14
+ redis: ['redis> '],
15
+ mongo: ['> ', '... ']
16
+ };
17
+ // Error patterns that indicate completion (even with errors)
18
+ const ERROR_COMPLETION_PATTERNS = [
19
+ /Error:/i,
20
+ /Exception:/i,
21
+ /Traceback/i,
22
+ /SyntaxError/i,
23
+ /NameError/i,
24
+ /TypeError/i,
25
+ /ValueError/i,
26
+ /ReferenceError/i,
27
+ /Uncaught/i,
28
+ /at Object\./i, // Node.js stack traces
29
+ /^\s*\^/m // Syntax error indicators
30
+ ];
31
+ // Process completion indicators
32
+ const COMPLETION_INDICATORS = [
33
+ /Process finished/i,
34
+ /Command completed/i,
35
+ /\[Process completed\]/i,
36
+ /Program terminated/i,
37
+ /Exit code:/i
38
+ ];
39
+ /**
40
+ * Analyze process output to determine current state
41
+ */
42
+ export function analyzeProcessState(output, pid) {
43
+ if (!output || output.trim().length === 0) {
44
+ return {
45
+ isWaitingForInput: false,
46
+ isFinished: false,
47
+ isRunning: true,
48
+ lastOutput: output
49
+ };
50
+ }
51
+ const lines = output.split('\n');
52
+ const lastLine = lines[lines.length - 1] || '';
53
+ const lastFewLines = lines.slice(-3).join('\n');
54
+ // Check for REPL prompts (waiting for input)
55
+ const allPrompts = Object.values(REPL_PROMPTS).flat();
56
+ const detectedPrompt = allPrompts.find(prompt => lastLine.endsWith(prompt) || lastLine.includes(prompt));
57
+ if (detectedPrompt) {
58
+ return {
59
+ isWaitingForInput: true,
60
+ isFinished: false,
61
+ isRunning: true,
62
+ detectedPrompt,
63
+ lastOutput: output
64
+ };
65
+ }
66
+ // Check for completion indicators
67
+ const hasCompletionIndicator = COMPLETION_INDICATORS.some(pattern => pattern.test(output));
68
+ if (hasCompletionIndicator) {
69
+ return {
70
+ isWaitingForInput: false,
71
+ isFinished: true,
72
+ isRunning: false,
73
+ lastOutput: output
74
+ };
75
+ }
76
+ // Check for error completion (errors usually end with prompts, but let's be thorough)
77
+ const hasErrorCompletion = ERROR_COMPLETION_PATTERNS.some(pattern => pattern.test(lastFewLines));
78
+ if (hasErrorCompletion) {
79
+ // Errors can indicate completion, but check if followed by prompt
80
+ if (detectedPrompt) {
81
+ return {
82
+ isWaitingForInput: true,
83
+ isFinished: false,
84
+ isRunning: true,
85
+ detectedPrompt,
86
+ lastOutput: output
87
+ };
88
+ }
89
+ else {
90
+ return {
91
+ isWaitingForInput: false,
92
+ isFinished: true,
93
+ isRunning: false,
94
+ lastOutput: output
95
+ };
96
+ }
97
+ }
98
+ // Default: process is running, not clearly waiting or finished
99
+ return {
100
+ isWaitingForInput: false,
101
+ isFinished: false,
102
+ isRunning: true,
103
+ lastOutput: output
104
+ };
105
+ }
106
+ /**
107
+ * Clean output by removing prompts and input echoes
108
+ */
109
+ export function cleanProcessOutput(output, inputSent) {
110
+ let cleaned = output;
111
+ // Remove input echo if provided
112
+ if (inputSent) {
113
+ const inputLines = inputSent.split('\n');
114
+ inputLines.forEach(line => {
115
+ if (line.trim()) {
116
+ cleaned = cleaned.replace(new RegExp(`^${escapeRegExp(line.trim())}\\s*\n?`, 'm'), '');
117
+ }
118
+ });
119
+ }
120
+ // Remove common prompt patterns from output
121
+ cleaned = cleaned.replace(/^>>>\s*/gm, ''); // Python >>>
122
+ cleaned = cleaned.replace(/^>\s*/gm, ''); // Node.js/Shell >
123
+ cleaned = cleaned.replace(/^\.{3}\s*/gm, ''); // Python ...
124
+ cleaned = cleaned.replace(/^\+\s*/gm, ''); // R +
125
+ // Remove trailing prompts
126
+ cleaned = cleaned.replace(/\n>>>\s*$/, '');
127
+ cleaned = cleaned.replace(/\n>\s*$/, '');
128
+ cleaned = cleaned.replace(/\n\+\s*$/, '');
129
+ return cleaned.trim();
130
+ }
131
+ /**
132
+ * Escape special regex characters
133
+ */
134
+ function escapeRegExp(string) {
135
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
136
+ }
137
+ /**
138
+ * Format process state for user display
139
+ */
140
+ export function formatProcessStateMessage(state, pid) {
141
+ if (state.isWaitingForInput) {
142
+ return `Process ${pid} is waiting for input${state.detectedPrompt ? ` (detected: "${state.detectedPrompt.trim()}")` : ''}`;
143
+ }
144
+ else if (state.isFinished) {
145
+ return `Process ${pid} has finished execution`;
146
+ }
147
+ else {
148
+ return `Process ${pid} is running`;
149
+ }
150
+ }