@google/gemini-cli-core 0.1.14 → 0.1.15

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/dist/google-gemini-cli-core-0.1.13.tgz +0 -0
  2. package/dist/src/code_assist/oauth2.test.js +14 -14
  3. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  4. package/dist/src/config/config.d.ts +3 -0
  5. package/dist/src/config/config.js +6 -0
  6. package/dist/src/config/config.js.map +1 -1
  7. package/dist/src/ide/ide-client.js +11 -2
  8. package/dist/src/ide/ide-client.js.map +1 -1
  9. package/dist/src/index.d.ts +5 -0
  10. package/dist/src/index.js +7 -0
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/mcp/oauth-provider.d.ts +5 -1
  13. package/dist/src/mcp/oauth-provider.js +36 -11
  14. package/dist/src/mcp/oauth-provider.js.map +1 -1
  15. package/dist/src/mcp/oauth-provider.test.js +2 -2
  16. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  17. package/dist/src/mcp/oauth-token-storage.d.ts +3 -1
  18. package/dist/src/mcp/oauth-token-storage.js +3 -1
  19. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  20. package/dist/src/prompts/mcp-prompts.d.ts +8 -0
  21. package/dist/src/prompts/mcp-prompts.js +13 -0
  22. package/dist/src/prompts/mcp-prompts.js.map +1 -0
  23. package/dist/src/prompts/prompt-registry.d.ts +26 -0
  24. package/dist/src/prompts/prompt-registry.js +47 -0
  25. package/dist/src/prompts/prompt-registry.js.map +1 -0
  26. package/dist/src/services/fileDiscoveryService.test.js +101 -60
  27. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  28. package/dist/src/services/gitService.test.js +67 -86
  29. package/dist/src/services/gitService.test.js.map +1 -1
  30. package/dist/src/services/shellExecutionService.d.ts +70 -0
  31. package/dist/src/services/shellExecutionService.js +152 -0
  32. package/dist/src/services/shellExecutionService.js.map +1 -0
  33. package/dist/src/services/shellExecutionService.test.d.ts +6 -0
  34. package/dist/src/services/shellExecutionService.test.js +258 -0
  35. package/dist/src/services/shellExecutionService.test.js.map +1 -0
  36. package/dist/src/tools/glob.test.js +7 -4
  37. package/dist/src/tools/glob.test.js.map +1 -1
  38. package/dist/src/tools/grep.test.js +4 -4
  39. package/dist/src/tools/grep.test.js.map +1 -1
  40. package/dist/src/tools/mcp-client.d.ts +26 -2
  41. package/dist/src/tools/mcp-client.js +64 -10
  42. package/dist/src/tools/mcp-client.js.map +1 -1
  43. package/dist/src/tools/mcp-client.test.js +53 -1
  44. package/dist/src/tools/mcp-client.test.js.map +1 -1
  45. package/dist/src/tools/modifiable-tool.test.js +51 -62
  46. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  47. package/dist/src/tools/shell.d.ts +1 -0
  48. package/dist/src/tools/shell.js +137 -181
  49. package/dist/src/tools/shell.js.map +1 -1
  50. package/dist/src/tools/shell.test.js +249 -101
  51. package/dist/src/tools/shell.test.js.map +1 -1
  52. package/dist/src/tools/tool-registry.js +3 -3
  53. package/dist/src/tools/tool-registry.js.map +1 -1
  54. package/dist/src/tools/tool-registry.test.js +2 -2
  55. package/dist/src/tools/tool-registry.test.js.map +1 -1
  56. package/dist/src/utils/formatters.d.ts +6 -0
  57. package/dist/src/utils/formatters.js +16 -0
  58. package/dist/src/utils/formatters.js.map +1 -0
  59. package/dist/src/utils/shell-utils.d.ts +37 -3
  60. package/dist/src/utils/shell-utils.js +110 -47
  61. package/dist/src/utils/shell-utils.js.map +1 -1
  62. package/dist/src/utils/shell-utils.test.js +146 -396
  63. package/dist/src/utils/shell-utils.test.js.map +1 -1
  64. package/dist/src/utils/textUtils.d.ts +13 -0
  65. package/dist/src/utils/textUtils.js +28 -0
  66. package/dist/src/utils/textUtils.js.map +1 -0
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +1 -1
@@ -11,11 +11,11 @@ import { BaseTool, ToolConfirmationOutcome, Icon, } from './tools.js';
11
11
  import { Type } from '@google/genai';
12
12
  import { SchemaValidator } from '../utils/schemaValidator.js';
13
13
  import { getErrorMessage } from '../utils/errors.js';
14
- import stripAnsi from 'strip-ansi';
15
- import { getCommandRoots, isCommandAllowed, stripShellWrapper, } from '../utils/shell-utils.js';
16
- import { spawn } from 'child_process';
17
14
  import { summarizeToolOutput } from '../utils/summarizer.js';
18
- const OUTPUT_UPDATE_INTERVAL_MS = 1000;
15
+ import { ShellExecutionService, } from '../services/shellExecutionService.js';
16
+ import { formatMemoryUsage } from '../utils/formatters.js';
17
+ import { getCommandRoots, isCommandAllowed, stripShellWrapper, } from '../utils/shell-utils.js';
18
+ export const OUTPUT_UPDATE_INTERVAL_MS = 1000;
19
19
  export class ShellTool extends BaseTool {
20
20
  config;
21
21
  static Name = 'run_shell_command';
@@ -143,206 +143,162 @@ export class ShellTool extends BaseTool {
143
143
  .randomBytes(6)
144
144
  .toString('hex')}.tmp`;
145
145
  const tempFilePath = path.join(os.tmpdir(), tempFileName);
146
- // pgrep is not available on Windows, so we can't get background PIDs
147
- const commandToExecute = isWindows
148
- ? strippedCommand
149
- : (() => {
150
- // wrap command to append subprocess pids (via pgrep) to temporary file
151
- let command = strippedCommand.trim();
152
- if (!command.endsWith('&'))
153
- command += ';';
154
- return `{ ${command} }; __code=$?; pgrep -g 0 >${tempFilePath} 2>&1; exit $__code;`;
155
- })();
156
- // spawn command in specified directory (or project root if not specified)
157
- const shell = isWindows
158
- ? spawn('cmd.exe', ['/c', commandToExecute], {
159
- stdio: ['ignore', 'pipe', 'pipe'],
160
- // detached: true, // ensure subprocess starts its own process group (esp. in Linux)
161
- cwd: path.resolve(this.config.getTargetDir(), params.directory || ''),
162
- env: {
163
- ...process.env,
164
- GEMINI_CLI: '1',
165
- },
166
- })
167
- : spawn('bash', ['-c', commandToExecute], {
168
- stdio: ['ignore', 'pipe', 'pipe'],
169
- detached: true, // ensure subprocess starts its own process group (esp. in Linux)
170
- cwd: path.resolve(this.config.getTargetDir(), params.directory || ''),
171
- env: {
172
- ...process.env,
173
- GEMINI_CLI: '1',
174
- },
175
- });
176
- let exited = false;
177
- let stdout = '';
178
- let output = '';
179
- let lastUpdateTime = Date.now();
180
- const appendOutput = (str) => {
181
- output += str;
182
- if (updateOutput &&
183
- Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
184
- updateOutput(output);
185
- lastUpdateTime = Date.now();
186
- }
187
- };
188
- shell.stdout.on('data', (data) => {
189
- // continue to consume post-exit for background processes
190
- // removing listeners can overflow OS buffer and block subprocesses
191
- // destroying (e.g. shell.stdout.destroy()) can terminate subprocesses via SIGPIPE
192
- if (!exited) {
193
- const str = stripAnsi(data.toString());
194
- stdout += str;
195
- appendOutput(str);
196
- }
197
- });
198
- let stderr = '';
199
- shell.stderr.on('data', (data) => {
200
- if (!exited) {
201
- const str = stripAnsi(data.toString());
202
- stderr += str;
203
- appendOutput(str);
204
- }
205
- });
206
- let error = null;
207
- shell.on('error', (err) => {
208
- error = err;
209
- // remove wrapper from user's command in error message
210
- error.message = error.message.replace(commandToExecute, params.command);
211
- });
212
- let code = null;
213
- let processSignal = null;
214
- const exitHandler = (_code, _signal) => {
215
- exited = true;
216
- code = _code;
217
- processSignal = _signal;
218
- };
219
- shell.on('exit', exitHandler);
220
- const abortHandler = async () => {
221
- if (shell.pid && !exited) {
222
- if (os.platform() === 'win32') {
223
- // For Windows, use taskkill to kill the process tree
224
- spawn('taskkill', ['/pid', shell.pid.toString(), '/f', '/t']);
146
+ try {
147
+ // pgrep is not available on Windows, so we can't get background PIDs
148
+ const commandToExecute = isWindows
149
+ ? strippedCommand
150
+ : (() => {
151
+ // wrap command to append subprocess pids (via pgrep) to temporary file
152
+ let command = strippedCommand.trim();
153
+ if (!command.endsWith('&'))
154
+ command += ';';
155
+ return `{ ${command} }; __code=$?; pgrep -g 0 >${tempFilePath} 2>&1; exit $__code;`;
156
+ })();
157
+ const cwd = path.resolve(this.config.getTargetDir(), params.directory || '');
158
+ let cumulativeStdout = '';
159
+ let cumulativeStderr = '';
160
+ let lastUpdateTime = Date.now();
161
+ let isBinaryStream = false;
162
+ const { result: resultPromise } = ShellExecutionService.execute(commandToExecute, cwd, (event) => {
163
+ if (!updateOutput) {
164
+ return;
225
165
  }
226
- else {
227
- try {
228
- // attempt to SIGTERM process group (negative PID)
229
- // fall back to SIGKILL (to group) after 200ms
230
- process.kill(-shell.pid, 'SIGTERM');
231
- await new Promise((resolve) => setTimeout(resolve, 200));
232
- if (shell.pid && !exited) {
233
- process.kill(-shell.pid, 'SIGKILL');
166
+ let currentDisplayOutput = '';
167
+ let shouldUpdate = false;
168
+ switch (event.type) {
169
+ case 'data':
170
+ if (isBinaryStream)
171
+ break; // Don't process text if we are in binary mode
172
+ if (event.stream === 'stdout') {
173
+ cumulativeStdout += event.chunk;
234
174
  }
235
- }
236
- catch (_e) {
237
- // if group kill fails, fall back to killing just the main process
238
- try {
239
- if (shell.pid) {
240
- shell.kill('SIGKILL');
241
- }
175
+ else {
176
+ cumulativeStderr += event.chunk;
177
+ }
178
+ currentDisplayOutput =
179
+ cumulativeStdout +
180
+ (cumulativeStderr ? `\n${cumulativeStderr}` : '');
181
+ if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
182
+ shouldUpdate = true;
242
183
  }
243
- catch (_e) {
244
- console.error(`failed to kill shell process ${shell.pid}: ${_e}`);
184
+ break;
185
+ case 'binary_detected':
186
+ isBinaryStream = true;
187
+ currentDisplayOutput =
188
+ '[Binary output detected. Halting stream...]';
189
+ shouldUpdate = true;
190
+ break;
191
+ case 'binary_progress':
192
+ isBinaryStream = true;
193
+ currentDisplayOutput = `[Receiving binary output... ${formatMemoryUsage(event.bytesReceived)} received]`;
194
+ if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
195
+ shouldUpdate = true;
245
196
  }
197
+ break;
198
+ default: {
199
+ throw new Error('An unhandled ShellOutputEvent was found.');
246
200
  }
247
201
  }
248
- }
249
- };
250
- signal.addEventListener('abort', abortHandler);
251
- // wait for the shell to exit
252
- try {
253
- await new Promise((resolve) => shell.on('exit', resolve));
254
- }
255
- finally {
256
- signal.removeEventListener('abort', abortHandler);
257
- }
258
- // parse pids (pgrep output) from temporary file and remove it
259
- const backgroundPIDs = [];
260
- if (os.platform() !== 'win32') {
261
- if (fs.existsSync(tempFilePath)) {
262
- const pgrepLines = fs
263
- .readFileSync(tempFilePath, 'utf8')
264
- .split('\n')
265
- .filter(Boolean);
266
- for (const line of pgrepLines) {
267
- if (!/^\d+$/.test(line)) {
268
- console.error(`pgrep: ${line}`);
202
+ if (shouldUpdate) {
203
+ updateOutput(currentDisplayOutput);
204
+ lastUpdateTime = Date.now();
205
+ }
206
+ }, signal);
207
+ const result = await resultPromise;
208
+ const backgroundPIDs = [];
209
+ if (os.platform() !== 'win32') {
210
+ if (fs.existsSync(tempFilePath)) {
211
+ const pgrepLines = fs
212
+ .readFileSync(tempFilePath, 'utf8')
213
+ .split('\n')
214
+ .filter(Boolean);
215
+ for (const line of pgrepLines) {
216
+ if (!/^\d+$/.test(line)) {
217
+ console.error(`pgrep: ${line}`);
218
+ }
219
+ const pid = Number(line);
220
+ if (pid !== result.pid) {
221
+ backgroundPIDs.push(pid);
222
+ }
269
223
  }
270
- const pid = Number(line);
271
- // exclude the shell subprocess pid
272
- if (pid !== shell.pid) {
273
- backgroundPIDs.push(pid);
224
+ }
225
+ else {
226
+ if (!signal.aborted) {
227
+ console.error('missing pgrep output');
274
228
  }
275
229
  }
276
- fs.unlinkSync(tempFilePath);
277
230
  }
278
- else {
279
- if (!signal.aborted) {
280
- console.error('missing pgrep output');
231
+ let llmContent = '';
232
+ if (result.aborted) {
233
+ llmContent = 'Command was cancelled by user before it could complete.';
234
+ if (result.output.trim()) {
235
+ llmContent += ` Below is the output (on stdout and stderr) before it was cancelled:\n${result.output}`;
236
+ }
237
+ else {
238
+ llmContent += ' There was no output before it was cancelled.';
281
239
  }
282
- }
283
- }
284
- let llmContent = '';
285
- if (signal.aborted) {
286
- llmContent = 'Command was cancelled by user before it could complete.';
287
- if (output.trim()) {
288
- llmContent += ` Below is the output (on stdout and stderr) before it was cancelled:\n${output}`;
289
240
  }
290
241
  else {
291
- llmContent += ' There was no output before it was cancelled.';
242
+ // Create a formatted error string for display, replacing the wrapper command
243
+ // with the user-facing command.
244
+ const finalError = result.error
245
+ ? result.error.message.replace(commandToExecute, params.command)
246
+ : '(none)';
247
+ llmContent = [
248
+ `Command: ${params.command}`,
249
+ `Directory: ${params.directory || '(root)'}`,
250
+ `Stdout: ${result.stdout || '(empty)'}`,
251
+ `Stderr: ${result.stderr || '(empty)'}`,
252
+ `Error: ${finalError}`, // Use the cleaned error string.
253
+ `Exit Code: ${result.exitCode ?? '(none)'}`,
254
+ `Signal: ${result.signal ?? '(none)'}`,
255
+ `Background PIDs: ${backgroundPIDs.length ? backgroundPIDs.join(', ') : '(none)'}`,
256
+ `Process Group PGID: ${result.pid ?? '(none)'}`,
257
+ ].join('\n');
292
258
  }
293
- }
294
- else {
295
- llmContent = [
296
- `Command: ${params.command}`,
297
- `Directory: ${params.directory || '(root)'}`,
298
- `Stdout: ${stdout || '(empty)'}`,
299
- `Stderr: ${stderr || '(empty)'}`,
300
- `Error: ${error ?? '(none)'}`,
301
- `Exit Code: ${code ?? '(none)'}`,
302
- `Signal: ${processSignal ?? '(none)'}`,
303
- `Background PIDs: ${backgroundPIDs.length ? backgroundPIDs.join(', ') : '(none)'}`,
304
- `Process Group PGID: ${shell.pid ?? '(none)'}`,
305
- ].join('\n');
306
- }
307
- let returnDisplayMessage = '';
308
- if (this.config.getDebugMode()) {
309
- returnDisplayMessage = llmContent;
310
- }
311
- else {
312
- if (output.trim()) {
313
- returnDisplayMessage = output;
259
+ let returnDisplayMessage = '';
260
+ if (this.config.getDebugMode()) {
261
+ returnDisplayMessage = llmContent;
314
262
  }
315
263
  else {
316
- // Output is empty, let's provide a reason if the command failed or was cancelled
317
- if (signal.aborted) {
318
- returnDisplayMessage = 'Command cancelled by user.';
319
- }
320
- else if (processSignal) {
321
- returnDisplayMessage = `Command terminated by signal: ${processSignal}`;
322
- }
323
- else if (error) {
324
- // If error is not null, it's an Error object (or other truthy value)
325
- returnDisplayMessage = `Command failed: ${getErrorMessage(error)}`;
264
+ if (result.output.trim()) {
265
+ returnDisplayMessage = result.output;
326
266
  }
327
- else if (code !== null && code !== 0) {
328
- returnDisplayMessage = `Command exited with code: ${code}`;
267
+ else {
268
+ if (result.aborted) {
269
+ returnDisplayMessage = 'Command cancelled by user.';
270
+ }
271
+ else if (result.signal) {
272
+ returnDisplayMessage = `Command terminated by signal: ${result.signal}`;
273
+ }
274
+ else if (result.error) {
275
+ returnDisplayMessage = `Command failed: ${getErrorMessage(result.error)}`;
276
+ }
277
+ else if (result.exitCode !== null && result.exitCode !== 0) {
278
+ returnDisplayMessage = `Command exited with code: ${result.exitCode}`;
279
+ }
280
+ // If output is empty and command succeeded (code 0, no error/signal/abort),
281
+ // returnDisplayMessage will remain empty, which is fine.
329
282
  }
330
- // If output is empty and command succeeded (code 0, no error/signal/abort),
331
- // returnDisplayMessage will remain empty, which is fine.
332
283
  }
333
- }
334
- const summarizeConfig = this.config.getSummarizeToolOutputConfig();
335
- if (summarizeConfig && summarizeConfig[this.name]) {
336
- const summary = await summarizeToolOutput(llmContent, this.config.getGeminiClient(), signal, summarizeConfig[this.name].tokenBudget);
284
+ const summarizeConfig = this.config.getSummarizeToolOutputConfig();
285
+ if (summarizeConfig && summarizeConfig[this.name]) {
286
+ const summary = await summarizeToolOutput(llmContent, this.config.getGeminiClient(), signal, summarizeConfig[this.name].tokenBudget);
287
+ return {
288
+ llmContent: summary,
289
+ returnDisplay: returnDisplayMessage,
290
+ };
291
+ }
337
292
  return {
338
- llmContent: summary,
293
+ llmContent,
339
294
  returnDisplay: returnDisplayMessage,
340
295
  };
341
296
  }
342
- return {
343
- llmContent,
344
- returnDisplay: returnDisplayMessage,
345
- };
297
+ finally {
298
+ if (fs.existsSync(tempFilePath)) {
299
+ fs.unlinkSync(tempFilePath);
300
+ }
301
+ }
346
302
  }
347
303
  }
348
304
  //# sourceMappingURL=shell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/tools/shell.ts"],"names":[],"mappings":"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"}