@serjm/deepseek-code 0.4.3 → 0.4.5

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 (68) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +72 -109
  3. package/README.ru.md +73 -109
  4. package/dist/api/index.d.ts +9 -0
  5. package/dist/api/index.d.ts.map +1 -1
  6. package/dist/api/index.js +65 -2
  7. package/dist/api/index.js.map +1 -1
  8. package/dist/cli/index.d.ts +1 -0
  9. package/dist/cli/index.d.ts.map +1 -1
  10. package/dist/cli/index.js +15 -8
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/interactive.d.ts.map +1 -1
  13. package/dist/cli/interactive.js +65 -3
  14. package/dist/cli/interactive.js.map +1 -1
  15. package/dist/commands/index.d.ts.map +1 -1
  16. package/dist/commands/index.js +26 -21
  17. package/dist/commands/index.js.map +1 -1
  18. package/dist/config/defaults.js +7 -7
  19. package/dist/config/defaults.js.map +1 -1
  20. package/dist/core/agent-loop.d.ts +44 -2
  21. package/dist/core/agent-loop.d.ts.map +1 -1
  22. package/dist/core/agent-loop.js +317 -102
  23. package/dist/core/agent-loop.js.map +1 -1
  24. package/dist/core/i18n.d.ts +3 -0
  25. package/dist/core/i18n.d.ts.map +1 -1
  26. package/dist/core/i18n.js +9 -0
  27. package/dist/core/i18n.js.map +1 -1
  28. package/dist/core/metrics.d.ts +3 -1
  29. package/dist/core/metrics.d.ts.map +1 -1
  30. package/dist/core/metrics.js +34 -5
  31. package/dist/core/metrics.js.map +1 -1
  32. package/dist/tools/bash.d.ts.map +1 -1
  33. package/dist/tools/bash.js +299 -20
  34. package/dist/tools/bash.js.map +1 -1
  35. package/dist/tools/glob.d.ts.map +1 -1
  36. package/dist/tools/glob.js +40 -3
  37. package/dist/tools/glob.js.map +1 -1
  38. package/dist/tools/grep.d.ts.map +1 -1
  39. package/dist/tools/grep.js +69 -13
  40. package/dist/tools/grep.js.map +1 -1
  41. package/dist/tools/read.d.ts.map +1 -1
  42. package/dist/tools/read.js +91 -0
  43. package/dist/tools/read.js.map +1 -1
  44. package/dist/tools/types.d.ts +21 -1
  45. package/dist/tools/types.d.ts.map +1 -1
  46. package/dist/tools/types.js +34 -0
  47. package/dist/tools/types.js.map +1 -1
  48. package/dist/ui/app.d.ts.map +1 -1
  49. package/dist/ui/app.js +229 -162
  50. package/dist/ui/app.js.map +1 -1
  51. package/dist/ui/chat-view.d.ts +24 -3
  52. package/dist/ui/chat-view.d.ts.map +1 -1
  53. package/dist/ui/chat-view.js +116 -58
  54. package/dist/ui/chat-view.js.map +1 -1
  55. package/dist/ui/input-bar.d.ts.map +1 -1
  56. package/dist/ui/input-bar.js +38 -4
  57. package/dist/ui/input-bar.js.map +1 -1
  58. package/dist/ui/setup-wizard.js +1 -1
  59. package/dist/ui/setup-wizard.js.map +1 -1
  60. package/dist/ui/status-bar.d.ts +5 -1
  61. package/dist/ui/status-bar.d.ts.map +1 -1
  62. package/dist/ui/status-bar.js +10 -4
  63. package/dist/ui/status-bar.js.map +1 -1
  64. package/dist/utils/logger.d.ts +15 -0
  65. package/dist/utils/logger.d.ts.map +1 -1
  66. package/dist/utils/logger.js +47 -0
  67. package/dist/utils/logger.js.map +1 -1
  68. package/package.json +3 -2
@@ -1,4 +1,6 @@
1
- import { execSync } from 'node:child_process';
1
+ import { spawn } from 'node:child_process';
2
+ import { platform } from 'node:os';
3
+ import { isAbsolute, relative } from 'node:path';
2
4
  /**
3
5
  * Dangerous commands that should never be auto-approved.
4
6
  * These can destroy the system or data.
@@ -10,18 +12,83 @@ const DANGEROUS_PATTERNS = [
10
12
  /^\s*format\s/m,
11
13
  /^\s*del\s+\/f\s+\/s\s/m,
12
14
  /^\s*rd\s+\/s\s+\/q\s/m,
13
- /^\s*remove-item\b.*\s-(?:recurse|r)\b/im,
14
- /^\s*rm\b.*\s-(?:recurse|r)\b/im,
15
+ /^\s*remove-item\b\s+["']?(?:[A-Z]:\\|\/)["']?\s+-(?:recurse|r)\b/im,
16
+ /^\s*rm\b\s+["']?(?:[A-Z]:\\|\/)["']?\s+-(?:recurse|r)\b/im,
15
17
  /^\s*clear-disk\b/im,
16
18
  /^\s*format-volume\b/im,
17
19
  /^\s*stop-computer\b/im,
18
20
  /^\s*restart-computer\b/im,
21
+ /^\s*taskkill\b(?=.*(?:\/f|-f)\b)(?=.*(?:\/im|-im)\s+(?:node(?:\.exe)?|npm(?:\.cmd)?|pnpm(?:\.cmd)?|yarn(?:\.cmd)?|tsx(?:\.cmd)?|vite(?:\.cmd)?|nuxt(?:\.cmd)?|next(?:\.cmd)?|react-scripts(?:\.cmd)?|powershell(?:\.exe)?|cmd(?:\.exe)?))\b/im,
22
+ /^\s*taskkill\b(?=.*(?:\/im|-im)\s+\*)/im,
23
+ /^\s*stop-process\b(?=.*-(?:name|processname)\s+(?:node|npm|pnpm|yarn|tsx|vite|nuxt|next|react-scripts|powershell|cmd)\b)/im,
24
+ /^\s*(?:kill|pkill|killall)\b.*\b(?:node|npm|pnpm|yarn|tsx|vite|nuxt|next|react-scripts)\b/im,
19
25
  /^\s*shutdown\s/m,
20
26
  /^\s*reboot\s/m,
21
27
  /^\s*init\s+0/m,
22
28
  /^\s*:\(\)\s*\{/m, // fork bomb
23
29
  /^\s*>+\s+\/dev\//m, // destructive redirects
24
30
  ];
31
+ const WINDOWS_UNIX_COMMAND_REPLACEMENTS = {
32
+ sed: 'Use PowerShell string replacement, Select-String, or read_file/edit instead.',
33
+ head: 'Use Get-Content <path> -TotalCount <n>.',
34
+ tail: 'Use Get-Content <path> -Tail <n>.',
35
+ cat: 'Use Get-Content <path>.',
36
+ grep: 'Use grep_search, Select-String, or rg if available.',
37
+ xargs: 'Use PowerShell pipelines with ForEach-Object.',
38
+ touch: 'Use New-Item -ItemType File or Set-Content.',
39
+ rm: 'Use Remove-Item with an explicit safe path.',
40
+ };
41
+ const POWERSHELL_COMMANDS = new Set([
42
+ 'add-content',
43
+ 'copy-item',
44
+ 'get-childitem',
45
+ 'get-content',
46
+ 'move-item',
47
+ 'new-item',
48
+ 'remove-item',
49
+ 'select-object',
50
+ 'select-string',
51
+ 'set-content',
52
+ 'test-path',
53
+ 'foreach-object',
54
+ 'where-object',
55
+ 'write-output',
56
+ ]);
57
+ function findBareCommandAtSegmentStart(command, names) {
58
+ let atSegmentStart = true;
59
+ let quote = null;
60
+ for (let i = 0; i < command.length; i++) {
61
+ const char = command[i];
62
+ if (quote) {
63
+ if (char === quote)
64
+ quote = null;
65
+ continue;
66
+ }
67
+ if (char === '"' || char === "'") {
68
+ quote = char;
69
+ continue;
70
+ }
71
+ if (/[|&;()]/.test(char)) {
72
+ atSegmentStart = true;
73
+ continue;
74
+ }
75
+ if (/\s/.test(char))
76
+ continue;
77
+ if (!atSegmentStart)
78
+ continue;
79
+ const rest = command.slice(i);
80
+ const match = rest.match(/^([A-Za-z][\w.-]*)\b/);
81
+ if (!match) {
82
+ atSegmentStart = false;
83
+ continue;
84
+ }
85
+ const name = match[1].toLowerCase();
86
+ if (names.has(name))
87
+ return name;
88
+ atSegmentStart = false;
89
+ }
90
+ return null;
91
+ }
25
92
  function isDangerousCommand(command) {
26
93
  for (const pattern of DANGEROUS_PATTERNS) {
27
94
  if (pattern.test(command)) {
@@ -30,9 +97,180 @@ function isDangerousCommand(command) {
30
97
  }
31
98
  return null;
32
99
  }
100
+ function isInsideWorkspace(targetPath) {
101
+ if (!isAbsolute(targetPath))
102
+ return true;
103
+ const rel = relative(process.cwd(), targetPath);
104
+ return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));
105
+ }
106
+ function extractFirstPathArgument(rest) {
107
+ const trimmed = rest.trim();
108
+ const quoted = trimmed.match(/^["']([^"']+)["']/u);
109
+ if (quoted)
110
+ return quoted[1];
111
+ const bare = trimmed.match(/^([^\s;|&]+)/u);
112
+ return bare?.[1] ?? null;
113
+ }
114
+ function getWorkspacePolicyError(command) {
115
+ const cdPattern = /(?:^|[;&|()])\s*(?:cd|chdir|set-location)\s+((?:"[^"]+")|(?:'[^']+')|[^\s;&|)]+)/gim;
116
+ let match;
117
+ while ((match = cdPattern.exec(command)) !== null) {
118
+ const target = match[1].replace(/^["']|["']$/g, '');
119
+ if (isAbsolute(target) && !isInsideWorkspace(target)) {
120
+ return `Workspace policy: refusing to change directory outside the current workspace (${process.cwd()}): ${target}. Start the CLI in the intended project directory instead of switching projects inside a shell command.`;
121
+ }
122
+ }
123
+ if (platform() !== 'win32')
124
+ return null;
125
+ const mutatingCmdletPattern = /(?:^|[;&|()])\s*(remove-item|new-item|set-content|add-content|copy-item|move-item)\b([^;&|)]*)/gim;
126
+ while ((match = mutatingCmdletPattern.exec(command)) !== null) {
127
+ const target = extractFirstPathArgument(match[2]);
128
+ if (target && isAbsolute(target) && !isInsideWorkspace(target)) {
129
+ return `Workspace policy: refusing to run ${match[1]} on a path outside the current workspace (${process.cwd()}): ${target}. Use the CLI from that project directory or ask for confirmation with the correct workspace.`;
130
+ }
131
+ }
132
+ return null;
133
+ }
134
+ function getWindowsShellPolicyError(command) {
135
+ if (platform() !== 'win32')
136
+ return null;
137
+ const commandName = findBareCommandAtSegmentStart(command, new Set(Object.keys(WINDOWS_UNIX_COMMAND_REPLACEMENTS)));
138
+ if (!commandName)
139
+ return null;
140
+ return `Windows shell policy: '${commandName}' is usually a Unix command and may fail in cmd/PowerShell. ${WINDOWS_UNIX_COMMAND_REPLACEMENTS[commandName]}`;
141
+ }
142
+ function getWindowsUnixFlagPolicyError(command) {
143
+ if (platform() !== 'win32')
144
+ return null;
145
+ const mkdirP = /(?:^|[;&|()])\s*mkdir\s+-p(?:\s|$)/im;
146
+ if (mkdirP.test(command)) {
147
+ return 'Windows shell policy: mkdir -p is Unix syntax and can create a literal "-p" directory in Windows shells. Use New-Item -ItemType Directory -Force <path> or mkdir <path> without -p.';
148
+ }
149
+ return null;
150
+ }
151
+ function shouldRunWithPowerShell(command) {
152
+ if (platform() !== 'win32')
153
+ return false;
154
+ return findBareCommandAtSegmentStart(command, POWERSHELL_COMMANDS) !== null;
155
+ }
156
+ function hasUnquotedWindowsShellChaining(command) {
157
+ let quote = null;
158
+ for (let i = 0; i < command.length - 1; i++) {
159
+ const char = command[i];
160
+ if (quote) {
161
+ if (char === quote)
162
+ quote = null;
163
+ continue;
164
+ }
165
+ if (char === '"' || char === "'") {
166
+ quote = char;
167
+ continue;
168
+ }
169
+ const pair = command.slice(i, i + 2);
170
+ if (pair === '&&' || pair === '||')
171
+ return true;
172
+ }
173
+ return false;
174
+ }
175
+ function getPowerShellSyntaxPolicyError(command) {
176
+ if (!shouldRunWithPowerShell(command))
177
+ return null;
178
+ if (!hasUnquotedWindowsShellChaining(command))
179
+ return null;
180
+ return 'Windows shell policy: this command uses PowerShell cmdlets together with cmd/bash chaining operators && or ||. Use separate tool calls, or PowerShell-compatible separators such as ; with explicit error checks.';
181
+ }
182
+ const MAX_OUTPUT_BYTES = 10 * 1024 * 1024;
183
+ /**
184
+ * Kill a child and its whole process tree. A bare `child.kill()` only signals
185
+ * the direct child (the shell wrapper); on Windows the actual command keeps the
186
+ * stdout pipe open so the `close` event never fires, and on Unix the command is
187
+ * orphaned. We therefore kill the entire tree/process group.
188
+ */
189
+ function killProcessTree(child) {
190
+ const pid = child.pid;
191
+ if (pid == null)
192
+ return;
193
+ if (platform() === 'win32') {
194
+ try {
195
+ spawn('taskkill', ['/pid', String(pid), '/t', '/f'], { windowsHide: true });
196
+ }
197
+ catch {
198
+ try {
199
+ child.kill('SIGKILL');
200
+ }
201
+ catch { /* already gone */ }
202
+ }
203
+ }
204
+ else {
205
+ try {
206
+ // Negative pid targets the process group (requires detached spawn).
207
+ process.kill(-pid, 'SIGTERM');
208
+ }
209
+ catch {
210
+ try {
211
+ child.kill('SIGKILL');
212
+ }
213
+ catch { /* already gone */ }
214
+ }
215
+ }
216
+ }
217
+ /**
218
+ * Run a shell command asynchronously so the event loop (and therefore the TUI
219
+ * and Ctrl+C handling) stays responsive while the command runs. The command is
220
+ * killed if `signal` aborts (user cancellation) or the timeout elapses.
221
+ */
222
+ function executeCommand(command, timeout, signal) {
223
+ return new Promise((resolve, reject) => {
224
+ if (signal?.aborted) {
225
+ resolve({ stdout: '', stderr: '', code: null, aborted: true, timedOut: false });
226
+ return;
227
+ }
228
+ // detached on POSIX makes the child a process-group leader so the whole
229
+ // group can be killed; on Windows the tree is killed via taskkill /t.
230
+ const detached = platform() !== 'win32';
231
+ const child = shouldRunWithPowerShell(command)
232
+ ? spawn('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', command], { windowsHide: true, detached })
233
+ : spawn(command, { shell: true, windowsHide: true, detached });
234
+ let stdout = '';
235
+ let stderr = '';
236
+ let stdoutBytes = 0;
237
+ let truncated = false;
238
+ let aborted = false;
239
+ let timedOut = false;
240
+ const onAbort = () => { aborted = true; killProcessTree(child); };
241
+ if (signal)
242
+ signal.addEventListener('abort', onAbort, { once: true });
243
+ const timer = setTimeout(() => { timedOut = true; killProcessTree(child); }, timeout);
244
+ child.stdout?.setEncoding('utf8');
245
+ child.stderr?.setEncoding('utf8');
246
+ child.stdout?.on('data', (chunk) => {
247
+ stdoutBytes += Buffer.byteLength(chunk);
248
+ if (stdoutBytes <= MAX_OUTPUT_BYTES)
249
+ stdout += chunk;
250
+ else
251
+ truncated = true;
252
+ });
253
+ child.stderr?.on('data', (chunk) => { stderr += chunk; });
254
+ const cleanup = () => {
255
+ clearTimeout(timer);
256
+ if (signal)
257
+ signal.removeEventListener('abort', onAbort);
258
+ };
259
+ child.on('error', (err) => {
260
+ cleanup();
261
+ reject(err);
262
+ });
263
+ child.on('close', (code) => {
264
+ cleanup();
265
+ if (truncated)
266
+ stdout += `\n\n... [output truncated at ${MAX_OUTPUT_BYTES} bytes]`;
267
+ resolve({ stdout, stderr, code, aborted, timedOut });
268
+ });
269
+ });
270
+ }
33
271
  export const bashTool = {
34
272
  name: 'run_shell_command',
35
- description: 'Execute a shell command. Use for running build tools, tests, git operations, etc.',
273
+ description: 'Execute an OS-compatible shell command. Use for build/test/git commands; prefer read_file, grep_search, and glob for repository inspection. On Windows, use PowerShell/cmd-compatible commands unless Unix tools were verified.',
36
274
  parameters: [
37
275
  {
38
276
  name: 'command',
@@ -53,40 +291,81 @@ export const bashTool = {
53
291
  required: false,
54
292
  },
55
293
  ],
56
- async execute(args) {
294
+ async execute(args, signal) {
57
295
  const command = args.command;
58
296
  const timeout = args.timeout ?? 120_000;
59
297
  // Security check — reject dangerous commands
60
298
  const danger = isDangerousCommand(command);
61
299
  if (danger) {
300
+ const isBroadProcessKill = /\b(?:taskkill|stop-process|pkill|killall)\b/iu.test(command);
62
301
  return {
63
302
  success: false,
64
303
  output: '',
65
- error: `Blocked for security: ${danger}`,
304
+ error: isBroadProcessKill
305
+ ? `Blocked for security: ${danger}. Avoid broad process-kill commands. If you started a dev server, stop only that specific process by its known PID or use the child process handle managed by the tool.`
306
+ : `Blocked for security: ${danger}. This command is potentially destructive. Use explicit safe paths inside the current workspace and avoid broad recursive deletion.`,
66
307
  };
67
308
  }
68
- try {
69
- const output = execSync(command, {
70
- timeout,
71
- encoding: 'utf-8',
72
- maxBuffer: 10 * 1024 * 1024, // 10MB
73
- windowsHide: true,
74
- });
309
+ const windowsPolicyError = getWindowsShellPolicyError(command);
310
+ if (windowsPolicyError) {
75
311
  return {
76
- success: true,
77
- output: output || '(command completed with no output)',
312
+ success: false,
313
+ output: '',
314
+ error: windowsPolicyError,
78
315
  };
79
316
  }
80
- catch (err) {
81
- const error = err;
82
- const stdout = error.stdout ?? '';
83
- const stderr = error.stderr ?? '';
317
+ const windowsUnixFlagPolicyError = getWindowsUnixFlagPolicyError(command);
318
+ if (windowsUnixFlagPolicyError) {
319
+ return {
320
+ success: false,
321
+ output: '',
322
+ error: windowsUnixFlagPolicyError,
323
+ };
324
+ }
325
+ const workspacePolicyError = getWorkspacePolicyError(command);
326
+ if (workspacePolicyError) {
327
+ return {
328
+ success: false,
329
+ output: '',
330
+ error: workspacePolicyError,
331
+ };
332
+ }
333
+ const powershellSyntaxPolicyError = getPowerShellSyntaxPolicyError(command);
334
+ if (powershellSyntaxPolicyError) {
335
+ return {
336
+ success: false,
337
+ output: '',
338
+ error: powershellSyntaxPolicyError,
339
+ };
340
+ }
341
+ try {
342
+ const { stdout, stderr, code, aborted, timedOut } = await executeCommand(command, timeout, signal);
343
+ if (aborted) {
344
+ return { success: false, output: stdout, error: 'Command aborted by user (Ctrl+C).' };
345
+ }
346
+ if (timedOut) {
347
+ return {
348
+ success: false,
349
+ output: stdout,
350
+ error: `Command timed out after ${timeout}ms.${stderr ? `\n${stderr}` : ''}`,
351
+ };
352
+ }
353
+ if (code === 0) {
354
+ return { success: true, output: stdout || '(command completed with no output)' };
355
+ }
84
356
  return {
85
357
  success: false,
86
358
  output: stdout,
87
- error: stderr || error.message,
359
+ error: stderr || `Command exited with code ${code}`,
88
360
  };
89
361
  }
362
+ catch (err) {
363
+ const error = err;
364
+ if (signal?.aborted || error.code === 'ABORT_ERR' || error.name === 'AbortError') {
365
+ return { success: false, output: '', error: 'Command aborted by user (Ctrl+C).' };
366
+ }
367
+ return { success: false, output: '', error: error.message };
368
+ }
90
369
  },
91
370
  };
92
371
  //# sourceMappingURL=bash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAG7C;;;GAGG;AACH,MAAM,kBAAkB,GAAG;IACzB,wBAAwB;IACxB,aAAa;IACb,0BAA0B;IAC1B,eAAe;IACf,wBAAwB;IACxB,uBAAuB;IACvB,yCAAyC;IACzC,gCAAgC;IAChC,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,0BAA0B;IAC1B,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,iBAAiB,EAAE,YAAY;IAC/B,mBAAmB,EAAE,wBAAwB;CAC9C,CAAA;AAED,SAAS,kBAAkB,CAAE,OAAe;IAC1C,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,sCAAsC,OAAO,EAAE,CAAA;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mFAAmF;IAChG,UAAU,EAAE;QACV;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,oDAAoD;YACjE,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAA;QACtC,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,OAAO,CAAA;QAEnD,6CAA6C;QAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,yBAAyB,MAAM,EAAE;aACzC,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE;gBAC/B,OAAO;gBACP,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO;gBACpC,WAAW,EAAE,IAAI;aAClB,CAAC,CAAA;YAEF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,IAAI,oCAAoC;aACvD,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAmD,CAAA;YACjE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA;YACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,CAAA;YACjC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO;aAC/B,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,QAAQ,EAAE,IAwCtB,CAAA"}
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AA0CvD,eAAO,MAAM,QAAQ,EAAE,IAyCtB,CAAA"}
@@ -1,4 +1,40 @@
1
1
  import { globby } from 'globby';
2
+ import { isAbsolute, join, parse, relative, sep } from 'node:path';
3
+ function normalizeGlobInput(pattern) {
4
+ if (!isAbsolute(pattern)) {
5
+ return { cwd: process.cwd(), pattern };
6
+ }
7
+ const normalized = pattern.replaceAll('\\', '/');
8
+ const root = parse(pattern).root;
9
+ const rootNormalized = root.replaceAll('\\', '/');
10
+ const withoutRoot = normalized.slice(rootNormalized.length);
11
+ const segments = withoutRoot.split('/').filter(Boolean);
12
+ const firstGlobIndex = segments.findIndex(segment => /[*?[\]{}()!+@]/u.test(segment));
13
+ if (firstGlobIndex === -1) {
14
+ const fileName = segments.at(-1) ?? '';
15
+ const baseSegments = segments.slice(0, -1);
16
+ return {
17
+ cwd: join(root, ...baseSegments),
18
+ pattern: fileName || '*',
19
+ };
20
+ }
21
+ const baseSegments = segments.slice(0, firstGlobIndex);
22
+ const globSegments = segments.slice(firstGlobIndex);
23
+ const cwd = baseSegments.length > 0 ? join(root, ...baseSegments) : root;
24
+ return {
25
+ cwd,
26
+ pattern: globSegments.join('/'),
27
+ };
28
+ }
29
+ function toDisplayPath(path, cwd) {
30
+ if (isAbsolute(path))
31
+ return path;
32
+ const abs = join(cwd, path);
33
+ const rel = relative(process.cwd(), abs);
34
+ return rel && !rel.startsWith('..' + sep) && rel !== '..'
35
+ ? rel
36
+ : abs;
37
+ }
2
38
  export const globTool = {
3
39
  name: 'glob',
4
40
  description: 'Find files matching a glob pattern. Supports **/*.ts, src/**/*.tsx, etc.',
@@ -13,8 +49,9 @@ export const globTool = {
13
49
  async execute(args) {
14
50
  const pattern = args.pattern;
15
51
  try {
16
- const paths = await globby(pattern, {
17
- cwd: process.cwd(),
52
+ const normalized = normalizeGlobInput(pattern);
53
+ const paths = await globby(normalized.pattern, {
54
+ cwd: normalized.cwd,
18
55
  onlyFiles: true,
19
56
  gitignore: true,
20
57
  });
@@ -26,7 +63,7 @@ export const globTool = {
26
63
  }
27
64
  return {
28
65
  success: true,
29
- output: paths.join('\n'),
66
+ output: paths.map(path => toDisplayPath(path, normalized.cwd)).join('\n'),
30
67
  };
31
68
  }
32
69
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,0EAA0E;IACvF,UAAU,EAAE;QACV;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,IAAI;SACf;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAA;QAEtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE;gBAClC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;YAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,iCAAiC;iBAC1C,CAAA;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aACzB,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,2BAA4B,GAAa,CAAC,OAAO,EAAE;aAC3D,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/tools/glob.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,QAAQ,EAAE,IA2EtB,CAAA"}
1
+ {"version":3,"file":"grep.d.ts","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAOvD,eAAO,MAAM,QAAQ,EAAE,IAgEtB,CAAA"}
@@ -1,4 +1,11 @@
1
1
  import { execSync } from 'node:child_process';
2
+ import { readFile, readdir } from 'node:fs/promises';
3
+ import { join, relative } from 'node:path';
4
+ import { minimatch } from 'minimatch';
5
+ import { assertPathInWorkspace } from './path-safety.js';
6
+ const MAX_MATCHES = 200;
7
+ const MAX_FILE_BYTES = 1024 * 1024;
8
+ const SKIP_DIRS = new Set(['.git', 'node_modules', 'dist', '.next', '.nuxt', '.output', 'coverage']);
2
9
  export const grepTool = {
3
10
  name: 'grep_search',
4
11
  description: 'Search file contents using regular expressions. Uses ripgrep for fast searching.',
@@ -42,16 +49,9 @@ export const grepTool = {
42
49
  output: 'No matches found',
43
50
  };
44
51
  }
45
- // Limit output to avoid huge responses
46
- const lines = output.split('\n');
47
- const limited = lines.slice(0, 200);
48
- let result = limited.join('\n');
49
- if (lines.length > 200) {
50
- result += `\n... and ${lines.length - 200} more matches`;
51
- }
52
52
  return {
53
53
  success: true,
54
- output: result,
54
+ output: limitMatches(output.split('\n').filter(Boolean)),
55
55
  };
56
56
  }
57
57
  catch (err) {
@@ -63,12 +63,68 @@ export const grepTool = {
63
63
  output: 'No matches found',
64
64
  };
65
65
  }
66
- return {
67
- success: false,
68
- output: '',
69
- error: `Failed to search: ${error.message}`,
70
- };
66
+ return nodeGrep(pattern, searchPath, glob);
71
67
  }
72
68
  },
73
69
  };
70
+ async function nodeGrep(pattern, searchPath, glob) {
71
+ try {
72
+ assertPathInWorkspace(searchPath);
73
+ const regex = new RegExp(pattern);
74
+ const matches = [];
75
+ for await (const filePath of walkFiles(searchPath)) {
76
+ if (glob) {
77
+ const rel = relative(searchPath, filePath).replace(/\\/g, '/');
78
+ if (!minimatch(rel, glob, { matchBase: true }))
79
+ continue;
80
+ }
81
+ const content = await readFile(filePath);
82
+ if (content.length > MAX_FILE_BYTES || content.includes(0))
83
+ continue;
84
+ const text = content.toString('utf8');
85
+ const lines = text.split(/\r?\n/);
86
+ for (let index = 0; index < lines.length; index++) {
87
+ if (regex.test(lines[index])) {
88
+ matches.push(`${filePath}:${index + 1}:${lines[index]}`);
89
+ if (matches.length >= MAX_MATCHES) {
90
+ return { success: true, output: limitMatches(matches, true) };
91
+ }
92
+ }
93
+ }
94
+ }
95
+ return {
96
+ success: true,
97
+ output: matches.length > 0 ? matches.join('\n') : 'No matches found',
98
+ };
99
+ }
100
+ catch (err) {
101
+ return {
102
+ success: false,
103
+ output: '',
104
+ error: `Failed to search: ${err.message}`,
105
+ };
106
+ }
107
+ }
108
+ async function* walkFiles(dir) {
109
+ const entries = await readdir(dir, { withFileTypes: true });
110
+ for (const entry of entries) {
111
+ if (entry.isDirectory()) {
112
+ if (SKIP_DIRS.has(entry.name))
113
+ continue;
114
+ yield* walkFiles(join(dir, entry.name));
115
+ }
116
+ else if (entry.isFile()) {
117
+ yield join(dir, entry.name);
118
+ }
119
+ }
120
+ }
121
+ function limitMatches(lines, alreadyLimited = false) {
122
+ const limited = lines.slice(0, MAX_MATCHES);
123
+ let result = limited.join('\n');
124
+ if (alreadyLimited || lines.length > MAX_MATCHES) {
125
+ const remaining = alreadyLimited ? 'more' : String(lines.length - MAX_MATCHES);
126
+ result += `\n... and ${remaining} more matches`;
127
+ }
128
+ return result || 'No matches found';
129
+ }
74
130
  //# sourceMappingURL=grep.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAG7C,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,kFAAkF;IAC/F,UAAU,EAAE;QACV;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mEAAmE;YAChF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sEAAsE;YACnF,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAA;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAA;QAC5C,MAAM,UAAU,GAAI,IAAI,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAEzD,IAAI,CAAC;YACH,IAAI,GAAG,GAAG,gDAAgD,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,UAAU,GAAG,CAAA;YACzG,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,IAAI,YAAY,IAAI,GAAG,CAAA;YAC5B,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;gBAC3B,WAAW,EAAE,IAAI;aAClB,CAAC,CAAA;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,kBAAkB;iBAC3B,CAAA;YACH,CAAC;YAED,uCAAuC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YACnC,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACvB,MAAM,IAAI,aAAa,KAAK,CAAC,MAAM,GAAG,GAAG,eAAe,CAAA;YAC1D,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM;aACf,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAkC,CAAA;YAChD,+CAA+C;YAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,kBAAkB;iBAC3B,CAAA;YACH,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,qBAAqB,KAAK,CAAC,OAAO,EAAE;aAC5C,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"grep.js","sourceRoot":"","sources":["../../src/tools/grep.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAGvD,eAAO,MAAM,QAAQ,EAAE,IAqDtB,CAAA"}
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAqFvD,eAAO,MAAM,QAAQ,EAAE,IAwEtB,CAAA"}