@google/gemini-cli-core 0.1.14 → 0.1.15-nightly.250801.6f7beb41

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 (216) hide show
  1. package/README.md +28 -0
  2. package/dist/google-gemini-cli-core-0.1.15.tgz +0 -0
  3. package/dist/src/code_assist/oauth2.test.js +14 -14
  4. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  5. package/dist/src/config/config.d.ts +22 -7
  6. package/dist/src/config/config.js +43 -13
  7. package/dist/src/config/config.js.map +1 -1
  8. package/dist/src/config/config.test.js +33 -0
  9. package/dist/src/config/config.test.js.map +1 -1
  10. package/dist/src/config/flashFallback.test.js +23 -47
  11. package/dist/src/config/flashFallback.test.js.map +1 -1
  12. package/dist/src/config/models.d.ts +1 -0
  13. package/dist/src/config/models.js +1 -0
  14. package/dist/src/config/models.js.map +1 -1
  15. package/dist/src/core/client.d.ts +2 -0
  16. package/dist/src/core/client.js +61 -20
  17. package/dist/src/core/client.js.map +1 -1
  18. package/dist/src/core/client.test.js +162 -16
  19. package/dist/src/core/client.test.js.map +1 -1
  20. package/dist/src/core/coreToolScheduler.d.ts +1 -3
  21. package/dist/src/core/coreToolScheduler.js +1 -3
  22. package/dist/src/core/coreToolScheduler.js.map +1 -1
  23. package/dist/src/core/coreToolScheduler.test.js +76 -1
  24. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  25. package/dist/src/core/geminiChat.js +1 -0
  26. package/dist/src/core/geminiChat.js.map +1 -1
  27. package/dist/src/core/logger.d.ts +1 -0
  28. package/dist/src/core/logger.js +22 -8
  29. package/dist/src/core/logger.js.map +1 -1
  30. package/dist/src/core/logger.test.js +60 -9
  31. package/dist/src/core/logger.test.js.map +1 -1
  32. package/dist/src/core/prompts.js +1 -1
  33. package/dist/src/core/tokenLimits.js +1 -0
  34. package/dist/src/core/tokenLimits.js.map +1 -1
  35. package/dist/src/core/turn.d.ts +1 -0
  36. package/dist/src/core/turn.js +3 -0
  37. package/dist/src/core/turn.js.map +1 -1
  38. package/dist/src/ide/detect-ide.d.ts +10 -0
  39. package/dist/src/ide/detect-ide.js +24 -0
  40. package/dist/src/ide/detect-ide.js.map +1 -0
  41. package/dist/src/ide/ide-client.d.ts +19 -7
  42. package/dist/src/ide/ide-client.js +110 -37
  43. package/dist/src/ide/ide-client.js.map +1 -1
  44. package/dist/src/ide/ide-installer.d.ts +15 -0
  45. package/dist/src/ide/ide-installer.js +111 -0
  46. package/dist/src/ide/ide-installer.js.map +1 -0
  47. package/dist/src/ide/ide-installer.test.d.ts +6 -0
  48. package/dist/src/ide/ide-installer.test.js +78 -0
  49. package/dist/src/ide/ide-installer.test.js.map +1 -0
  50. package/dist/src/ide/ideContext.d.ts +212 -107
  51. package/dist/src/ide/ideContext.js +45 -44
  52. package/dist/src/ide/ideContext.js.map +1 -1
  53. package/dist/src/ide/ideContext.test.js +254 -100
  54. package/dist/src/ide/ideContext.test.js.map +1 -1
  55. package/dist/src/index.d.ts +8 -0
  56. package/dist/src/index.js +10 -0
  57. package/dist/src/index.js.map +1 -1
  58. package/dist/src/mcp/oauth-provider.d.ts +5 -1
  59. package/dist/src/mcp/oauth-provider.js +36 -11
  60. package/dist/src/mcp/oauth-provider.js.map +1 -1
  61. package/dist/src/mcp/oauth-provider.test.js +2 -2
  62. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  63. package/dist/src/mcp/oauth-token-storage.d.ts +3 -1
  64. package/dist/src/mcp/oauth-token-storage.js +3 -1
  65. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  66. package/dist/src/mcp/oauth-utils.js +2 -2
  67. package/dist/src/mcp/oauth-utils.js.map +1 -1
  68. package/dist/src/mcp/oauth-utils.test.js +1 -1
  69. package/dist/src/mcp/oauth-utils.test.js.map +1 -1
  70. package/dist/src/prompts/mcp-prompts.d.ts +8 -0
  71. package/dist/src/prompts/mcp-prompts.js +13 -0
  72. package/dist/src/prompts/mcp-prompts.js.map +1 -0
  73. package/dist/src/prompts/prompt-registry.d.ts +26 -0
  74. package/dist/src/prompts/prompt-registry.js +47 -0
  75. package/dist/src/prompts/prompt-registry.js.map +1 -0
  76. package/dist/src/services/fileDiscoveryService.test.js +101 -60
  77. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  78. package/dist/src/services/gitService.test.js +67 -86
  79. package/dist/src/services/gitService.test.js.map +1 -1
  80. package/dist/src/services/loopDetectionService.d.ts +3 -0
  81. package/dist/src/services/loopDetectionService.js +18 -0
  82. package/dist/src/services/loopDetectionService.js.map +1 -1
  83. package/dist/src/services/loopDetectionService.test.js +90 -11
  84. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  85. package/dist/src/services/shellExecutionService.d.ts +70 -0
  86. package/dist/src/services/shellExecutionService.js +152 -0
  87. package/dist/src/services/shellExecutionService.js.map +1 -0
  88. package/dist/src/services/shellExecutionService.test.d.ts +6 -0
  89. package/dist/src/services/shellExecutionService.test.js +258 -0
  90. package/dist/src/services/shellExecutionService.test.js.map +1 -0
  91. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -2
  92. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +69 -34
  93. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  94. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -1
  95. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +14 -0
  96. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  97. package/dist/src/telemetry/constants.d.ts +2 -1
  98. package/dist/src/telemetry/constants.js +2 -1
  99. package/dist/src/telemetry/constants.js.map +1 -1
  100. package/dist/src/telemetry/index.d.ts +2 -2
  101. package/dist/src/telemetry/index.js +2 -2
  102. package/dist/src/telemetry/index.js.map +1 -1
  103. package/dist/src/telemetry/loggers.d.ts +3 -2
  104. package/dist/src/telemetry/loggers.js +21 -5
  105. package/dist/src/telemetry/loggers.js.map +1 -1
  106. package/dist/src/telemetry/telemetry.test.js +2 -0
  107. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  108. package/dist/src/telemetry/types.d.ts +13 -4
  109. package/dist/src/telemetry/types.js +19 -3
  110. package/dist/src/telemetry/types.js.map +1 -1
  111. package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
  112. package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
  113. package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
  114. package/dist/src/tools/edit.js +4 -3
  115. package/dist/src/tools/edit.js.map +1 -1
  116. package/dist/src/tools/edit.test.js +25 -1
  117. package/dist/src/tools/edit.test.js.map +1 -1
  118. package/dist/src/tools/glob.js +53 -17
  119. package/dist/src/tools/glob.js.map +1 -1
  120. package/dist/src/tools/glob.test.js +32 -6
  121. package/dist/src/tools/glob.test.js.map +1 -1
  122. package/dist/src/tools/grep.d.ts +1 -1
  123. package/dist/src/tools/grep.js +81 -29
  124. package/dist/src/tools/grep.js.map +1 -1
  125. package/dist/src/tools/grep.test.js +76 -9
  126. package/dist/src/tools/grep.test.js.map +1 -1
  127. package/dist/src/tools/ls.js +4 -3
  128. package/dist/src/tools/ls.js.map +1 -1
  129. package/dist/src/tools/ls.test.d.ts +6 -0
  130. package/dist/src/tools/ls.test.js +356 -0
  131. package/dist/src/tools/ls.test.js.map +1 -0
  132. package/dist/src/tools/mcp-client.d.ts +26 -2
  133. package/dist/src/tools/mcp-client.js +72 -24
  134. package/dist/src/tools/mcp-client.js.map +1 -1
  135. package/dist/src/tools/mcp-client.test.js +87 -1
  136. package/dist/src/tools/mcp-client.test.js.map +1 -1
  137. package/dist/src/tools/memoryTool.d.ts +17 -2
  138. package/dist/src/tools/memoryTool.js +130 -13
  139. package/dist/src/tools/memoryTool.js.map +1 -1
  140. package/dist/src/tools/memoryTool.test.js +88 -3
  141. package/dist/src/tools/memoryTool.test.js.map +1 -1
  142. package/dist/src/tools/modifiable-tool.test.js +51 -62
  143. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  144. package/dist/src/tools/read-file.js +8 -6
  145. package/dist/src/tools/read-file.js.map +1 -1
  146. package/dist/src/tools/read-file.test.js +30 -2
  147. package/dist/src/tools/read-file.test.js.map +1 -1
  148. package/dist/src/tools/read-many-files.js +22 -12
  149. package/dist/src/tools/read-many-files.js.map +1 -1
  150. package/dist/src/tools/read-many-files.test.js +35 -2
  151. package/dist/src/tools/read-many-files.test.js.map +1 -1
  152. package/dist/src/tools/shell.d.ts +1 -0
  153. package/dist/src/tools/shell.js +145 -185
  154. package/dist/src/tools/shell.js.map +1 -1
  155. package/dist/src/tools/shell.test.js +275 -95
  156. package/dist/src/tools/shell.test.js.map +1 -1
  157. package/dist/src/tools/tool-registry.js +3 -3
  158. package/dist/src/tools/tool-registry.js.map +1 -1
  159. package/dist/src/tools/tool-registry.test.js +10 -2
  160. package/dist/src/tools/tool-registry.test.js.map +1 -1
  161. package/dist/src/tools/write-file.js +5 -3
  162. package/dist/src/tools/write-file.js.map +1 -1
  163. package/dist/src/tools/write-file.test.js +36 -2
  164. package/dist/src/tools/write-file.test.js.map +1 -1
  165. package/dist/src/utils/bfsFileSearch.js +51 -27
  166. package/dist/src/utils/bfsFileSearch.js.map +1 -1
  167. package/dist/src/utils/bfsFileSearch.test.js +57 -0
  168. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  169. package/dist/src/utils/editor.d.ts +1 -1
  170. package/dist/src/utils/editor.js +9 -0
  171. package/dist/src/utils/editor.js.map +1 -1
  172. package/dist/src/utils/editor.test.js +21 -1
  173. package/dist/src/utils/editor.test.js.map +1 -1
  174. package/dist/src/utils/fileUtils.js +12 -1
  175. package/dist/src/utils/fileUtils.js.map +1 -1
  176. package/dist/src/utils/fileUtils.test.js +29 -1
  177. package/dist/src/utils/fileUtils.test.js.map +1 -1
  178. package/dist/src/utils/flashFallback.integration.test.js +8 -0
  179. package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
  180. package/dist/src/utils/formatters.d.ts +6 -0
  181. package/dist/src/utils/formatters.js +16 -0
  182. package/dist/src/utils/formatters.js.map +1 -0
  183. package/dist/src/utils/memoryDiscovery.d.ts +1 -1
  184. package/dist/src/utils/memoryDiscovery.js +8 -8
  185. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  186. package/dist/src/utils/memoryDiscovery.test.js +4 -3
  187. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  188. package/dist/src/utils/memoryImportProcessor.d.ts +19 -12
  189. package/dist/src/utils/memoryImportProcessor.js +241 -82
  190. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  191. package/dist/src/utils/memoryImportProcessor.test.js +595 -50
  192. package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
  193. package/dist/src/utils/nextSpeakerChecker.js +2 -2
  194. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  195. package/dist/src/utils/nextSpeakerChecker.test.js +2 -2
  196. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  197. package/dist/src/utils/retry.d.ts +3 -0
  198. package/dist/src/utils/retry.js.map +1 -1
  199. package/dist/src/utils/retry.test.js.map +1 -1
  200. package/dist/src/utils/shell-utils.d.ts +37 -3
  201. package/dist/src/utils/shell-utils.js +110 -47
  202. package/dist/src/utils/shell-utils.js.map +1 -1
  203. package/dist/src/utils/shell-utils.test.js +146 -396
  204. package/dist/src/utils/shell-utils.test.js.map +1 -1
  205. package/dist/src/utils/textUtils.d.ts +13 -0
  206. package/dist/src/utils/textUtils.js +28 -0
  207. package/dist/src/utils/textUtils.js.map +1 -0
  208. package/dist/src/utils/workspaceContext.d.ts +47 -0
  209. package/dist/src/utils/workspaceContext.js +106 -0
  210. package/dist/src/utils/workspaceContext.js.map +1 -0
  211. package/dist/src/utils/workspaceContext.test.d.ts +6 -0
  212. package/dist/src/utils/workspaceContext.test.js +209 -0
  213. package/dist/src/utils/workspaceContext.test.js.map +1 -0
  214. package/dist/tsconfig.tsbuildinfo +1 -1
  215. package/package.json +2 -1
  216. package/dist/google-gemini-cli-core-0.1.13.tgz +0 -0
@@ -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';
@@ -88,11 +88,15 @@ export class ShellTool extends BaseTool {
88
88
  }
89
89
  if (params.directory) {
90
90
  if (path.isAbsolute(params.directory)) {
91
- return 'Directory cannot be absolute. Must be relative to the project root directory.';
91
+ return 'Directory cannot be absolute. Please refer to workspace directories by their name.';
92
92
  }
93
- const directory = path.resolve(this.config.getTargetDir(), params.directory);
94
- if (!fs.existsSync(directory)) {
95
- return 'Directory must exist.';
93
+ const workspaceDirs = this.config.getWorkspaceContext().getDirectories();
94
+ const matchingDirs = workspaceDirs.filter((dir) => path.basename(dir) === params.directory);
95
+ if (matchingDirs.length === 0) {
96
+ return `Directory '${params.directory}' is not a registered workspace directory.`;
97
+ }
98
+ if (matchingDirs.length > 1) {
99
+ return `Directory name '${params.directory}' is ambiguous as it matches multiple workspace directories.`;
96
100
  }
97
101
  }
98
102
  return null;
@@ -143,206 +147,162 @@ export class ShellTool extends BaseTool {
143
147
  .randomBytes(6)
144
148
  .toString('hex')}.tmp`;
145
149
  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']);
150
+ try {
151
+ // pgrep is not available on Windows, so we can't get background PIDs
152
+ const commandToExecute = isWindows
153
+ ? strippedCommand
154
+ : (() => {
155
+ // wrap command to append subprocess pids (via pgrep) to temporary file
156
+ let command = strippedCommand.trim();
157
+ if (!command.endsWith('&'))
158
+ command += ';';
159
+ return `{ ${command} }; __code=$?; pgrep -g 0 >${tempFilePath} 2>&1; exit $__code;`;
160
+ })();
161
+ const cwd = path.resolve(this.config.getTargetDir(), params.directory || '');
162
+ let cumulativeStdout = '';
163
+ let cumulativeStderr = '';
164
+ let lastUpdateTime = Date.now();
165
+ let isBinaryStream = false;
166
+ const { result: resultPromise } = ShellExecutionService.execute(commandToExecute, cwd, (event) => {
167
+ if (!updateOutput) {
168
+ return;
225
169
  }
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');
170
+ let currentDisplayOutput = '';
171
+ let shouldUpdate = false;
172
+ switch (event.type) {
173
+ case 'data':
174
+ if (isBinaryStream)
175
+ break; // Don't process text if we are in binary mode
176
+ if (event.stream === 'stdout') {
177
+ cumulativeStdout += event.chunk;
234
178
  }
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
- }
179
+ else {
180
+ cumulativeStderr += event.chunk;
242
181
  }
243
- catch (_e) {
244
- console.error(`failed to kill shell process ${shell.pid}: ${_e}`);
182
+ currentDisplayOutput =
183
+ cumulativeStdout +
184
+ (cumulativeStderr ? `\n${cumulativeStderr}` : '');
185
+ if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
186
+ shouldUpdate = true;
245
187
  }
188
+ break;
189
+ case 'binary_detected':
190
+ isBinaryStream = true;
191
+ currentDisplayOutput =
192
+ '[Binary output detected. Halting stream...]';
193
+ shouldUpdate = true;
194
+ break;
195
+ case 'binary_progress':
196
+ isBinaryStream = true;
197
+ currentDisplayOutput = `[Receiving binary output... ${formatMemoryUsage(event.bytesReceived)} received]`;
198
+ if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
199
+ shouldUpdate = true;
200
+ }
201
+ break;
202
+ default: {
203
+ throw new Error('An unhandled ShellOutputEvent was found.');
246
204
  }
247
205
  }
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}`);
206
+ if (shouldUpdate) {
207
+ updateOutput(currentDisplayOutput);
208
+ lastUpdateTime = Date.now();
209
+ }
210
+ }, signal);
211
+ const result = await resultPromise;
212
+ const backgroundPIDs = [];
213
+ if (os.platform() !== 'win32') {
214
+ if (fs.existsSync(tempFilePath)) {
215
+ const pgrepLines = fs
216
+ .readFileSync(tempFilePath, 'utf8')
217
+ .split('\n')
218
+ .filter(Boolean);
219
+ for (const line of pgrepLines) {
220
+ if (!/^\d+$/.test(line)) {
221
+ console.error(`pgrep: ${line}`);
222
+ }
223
+ const pid = Number(line);
224
+ if (pid !== result.pid) {
225
+ backgroundPIDs.push(pid);
226
+ }
269
227
  }
270
- const pid = Number(line);
271
- // exclude the shell subprocess pid
272
- if (pid !== shell.pid) {
273
- backgroundPIDs.push(pid);
228
+ }
229
+ else {
230
+ if (!signal.aborted) {
231
+ console.error('missing pgrep output');
274
232
  }
275
233
  }
276
- fs.unlinkSync(tempFilePath);
277
234
  }
278
- else {
279
- if (!signal.aborted) {
280
- console.error('missing pgrep output');
235
+ let llmContent = '';
236
+ if (result.aborted) {
237
+ llmContent = 'Command was cancelled by user before it could complete.';
238
+ if (result.output.trim()) {
239
+ llmContent += ` Below is the output (on stdout and stderr) before it was cancelled:\n${result.output}`;
240
+ }
241
+ else {
242
+ llmContent += ' There was no output before it was cancelled.';
281
243
  }
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
244
  }
290
245
  else {
291
- llmContent += ' There was no output before it was cancelled.';
246
+ // Create a formatted error string for display, replacing the wrapper command
247
+ // with the user-facing command.
248
+ const finalError = result.error
249
+ ? result.error.message.replace(commandToExecute, params.command)
250
+ : '(none)';
251
+ llmContent = [
252
+ `Command: ${params.command}`,
253
+ `Directory: ${params.directory || '(root)'}`,
254
+ `Stdout: ${result.stdout || '(empty)'}`,
255
+ `Stderr: ${result.stderr || '(empty)'}`,
256
+ `Error: ${finalError}`, // Use the cleaned error string.
257
+ `Exit Code: ${result.exitCode ?? '(none)'}`,
258
+ `Signal: ${result.signal ?? '(none)'}`,
259
+ `Background PIDs: ${backgroundPIDs.length ? backgroundPIDs.join(', ') : '(none)'}`,
260
+ `Process Group PGID: ${result.pid ?? '(none)'}`,
261
+ ].join('\n');
292
262
  }
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;
263
+ let returnDisplayMessage = '';
264
+ if (this.config.getDebugMode()) {
265
+ returnDisplayMessage = llmContent;
314
266
  }
315
267
  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)}`;
268
+ if (result.output.trim()) {
269
+ returnDisplayMessage = result.output;
326
270
  }
327
- else if (code !== null && code !== 0) {
328
- returnDisplayMessage = `Command exited with code: ${code}`;
271
+ else {
272
+ if (result.aborted) {
273
+ returnDisplayMessage = 'Command cancelled by user.';
274
+ }
275
+ else if (result.signal) {
276
+ returnDisplayMessage = `Command terminated by signal: ${result.signal}`;
277
+ }
278
+ else if (result.error) {
279
+ returnDisplayMessage = `Command failed: ${getErrorMessage(result.error)}`;
280
+ }
281
+ else if (result.exitCode !== null && result.exitCode !== 0) {
282
+ returnDisplayMessage = `Command exited with code: ${result.exitCode}`;
283
+ }
284
+ // If output is empty and command succeeded (code 0, no error/signal/abort),
285
+ // returnDisplayMessage will remain empty, which is fine.
329
286
  }
330
- // If output is empty and command succeeded (code 0, no error/signal/abort),
331
- // returnDisplayMessage will remain empty, which is fine.
332
287
  }
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);
288
+ const summarizeConfig = this.config.getSummarizeToolOutputConfig();
289
+ if (summarizeConfig && summarizeConfig[this.name]) {
290
+ const summary = await summarizeToolOutput(llmContent, this.config.getGeminiClient(), signal, summarizeConfig[this.name].tokenBudget);
291
+ return {
292
+ llmContent: summary,
293
+ returnDisplay: returnDisplayMessage,
294
+ };
295
+ }
337
296
  return {
338
- llmContent: summary,
297
+ llmContent,
339
298
  returnDisplay: returnDisplayMessage,
340
299
  };
341
300
  }
342
- return {
343
- llmContent,
344
- returnDisplay: returnDisplayMessage,
345
- };
301
+ finally {
302
+ if (fs.existsSync(tempFilePath)) {
303
+ fs.unlinkSync(tempFilePath);
304
+ }
305
+ }
346
306
  }
347
307
  }
348
308
  //# 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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"}