@google/gemini-cli 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 (82) hide show
  1. package/dist/google-gemini-cli-0.1.13.tgz +0 -0
  2. package/dist/package.json +2 -2
  3. package/dist/src/config/settings.d.ts +1 -0
  4. package/dist/src/config/settings.js.map +1 -1
  5. package/dist/src/gemini.d.ts +1 -0
  6. package/dist/src/gemini.js +21 -14
  7. package/dist/src/gemini.js.map +1 -1
  8. package/dist/src/generated/git-commit.d.ts +1 -1
  9. package/dist/src/generated/git-commit.js +1 -1
  10. package/dist/src/services/BuiltinCommandLoader.js +3 -1
  11. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  12. package/dist/src/services/FileCommandLoader.js +31 -8
  13. package/dist/src/services/FileCommandLoader.js.map +1 -1
  14. package/dist/src/services/McpPromptLoader.d.ts +25 -0
  15. package/dist/src/services/McpPromptLoader.js +192 -0
  16. package/dist/src/services/McpPromptLoader.js.map +1 -0
  17. package/dist/src/services/prompt-processors/shellProcessor.d.ts +32 -0
  18. package/dist/src/services/prompt-processors/shellProcessor.js +77 -0
  19. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
  20. package/dist/src/services/prompt-processors/types.d.ts +4 -0
  21. package/dist/src/services/prompt-processors/types.js +4 -0
  22. package/dist/src/services/prompt-processors/types.js.map +1 -1
  23. package/dist/src/ui/App.js +70 -35
  24. package/dist/src/ui/App.js.map +1 -1
  25. package/dist/src/ui/commands/mcpCommand.js +53 -8
  26. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  27. package/dist/src/ui/commands/types.d.ts +19 -2
  28. package/dist/src/ui/commands/types.js +1 -0
  29. package/dist/src/ui/commands/types.js.map +1 -1
  30. package/dist/src/ui/commands/vimCommand.d.ts +7 -0
  31. package/dist/src/ui/commands/vimCommand.js +23 -0
  32. package/dist/src/ui/commands/vimCommand.js.map +1 -0
  33. package/dist/src/ui/components/Footer.d.ts +1 -0
  34. package/dist/src/ui/components/Footer.js +2 -2
  35. package/dist/src/ui/components/Footer.js.map +1 -1
  36. package/dist/src/ui/components/Header.js +1 -1
  37. package/dist/src/ui/components/Header.js.map +1 -1
  38. package/dist/src/ui/components/InputPrompt.d.ts +2 -0
  39. package/dist/src/ui/components/InputPrompt.js +5 -1
  40. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  41. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
  42. package/dist/src/ui/components/ShellConfirmationDialog.js +44 -0
  43. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
  44. package/dist/src/ui/components/Tips.js +1 -1
  45. package/dist/src/ui/components/Tips.js.map +1 -1
  46. package/dist/src/ui/components/shared/text-buffer.d.ts +270 -2
  47. package/dist/src/ui/components/shared/text-buffer.js +415 -70
  48. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  49. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
  50. package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
  51. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  52. package/dist/src/ui/contexts/VimModeContext.d.ts +19 -0
  53. package/dist/src/ui/contexts/VimModeContext.js +48 -0
  54. package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
  55. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
  56. package/dist/src/ui/hooks/shellCommandProcessor.js +139 -200
  57. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  58. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +7 -3
  59. package/dist/src/ui/hooks/slashCommandProcessor.js +187 -126
  60. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  61. package/dist/src/ui/hooks/useCompletion.js +7 -2
  62. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  63. package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
  64. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  65. package/dist/src/ui/hooks/useKeypress.js +5 -2
  66. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  67. package/dist/src/ui/hooks/vim.d.ts +28 -0
  68. package/dist/src/ui/hooks/vim.js +630 -0
  69. package/dist/src/ui/hooks/vim.js.map +1 -0
  70. package/dist/src/ui/themes/theme-manager.js +10 -1
  71. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  72. package/dist/src/ui/themes/theme.d.ts +1 -0
  73. package/dist/src/ui/themes/theme.js +19 -4
  74. package/dist/src/ui/themes/theme.js.map +1 -1
  75. package/dist/src/ui/utils/textUtils.d.ts +0 -8
  76. package/dist/src/ui/utils/textUtils.js +0 -22
  77. package/dist/src/ui/utils/textUtils.js.map +1 -1
  78. package/dist/src/utils/events.d.ts +11 -0
  79. package/dist/src/utils/events.js +13 -0
  80. package/dist/src/utils/events.js.map +1 -0
  81. package/dist/tsconfig.tsbuildinfo +1 -1
  82. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VimModeContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/VimModeContext.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAkB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAWxE,MAAM,cAAc,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,QAAQ,EACR,QAAQ,GAIT,EAAE,EAAE;IACH,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;IAC3D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CACpC,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CACxC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,+CAA+C;QAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;QACjD,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,wDAAwD;QACxD,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9B,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC;QAC7B,aAAa,CAAC,QAAQ,CAAC,CAAC;QACxB,+CAA+C;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChE,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3B,MAAM,KAAK,GAAG;QACZ,UAAU;QACV,OAAO;QACP,gBAAgB;QAChB,UAAU;KACX,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA2B,CAC5E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -7,6 +7,7 @@ import { HistoryItemWithoutId } from '../types.js';
7
7
  import { Config, GeminiClient } from '@google/gemini-cli-core';
8
8
  import { type PartListUnion } from '@google/genai';
9
9
  import { UseHistoryManagerReturn } from './useHistoryManager.js';
10
+ export declare const OUTPUT_UPDATE_INTERVAL_MS = 1000;
10
11
  /**
11
12
  * Hook to process shell commands.
12
13
  * Orchestrates command execution and updates history and agent context.
@@ -3,148 +3,17 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { spawn } from 'child_process';
7
- import { TextDecoder } from 'util';
8
6
  import { ToolCallStatus, } from '../types.js';
9
7
  import { useCallback } from 'react';
10
- import { getCachedEncodingForBuffer, } from '@google/gemini-cli-core';
11
- import { formatMemoryUsage } from '../utils/formatters.js';
12
- import { isBinary } from '../utils/textUtils.js';
8
+ import { isBinary, ShellExecutionService, } from '@google/gemini-cli-core';
13
9
  import { SHELL_COMMAND_NAME } from '../constants.js';
10
+ import { formatMemoryUsage } from '../utils/formatters.js';
14
11
  import crypto from 'crypto';
15
12
  import path from 'path';
16
13
  import os from 'os';
17
14
  import fs from 'fs';
18
- import stripAnsi from 'strip-ansi';
19
- const OUTPUT_UPDATE_INTERVAL_MS = 1000;
15
+ export const OUTPUT_UPDATE_INTERVAL_MS = 1000;
20
16
  const MAX_OUTPUT_LENGTH = 10000;
21
- /**
22
- * Executes a shell command using `spawn`, capturing all output and lifecycle events.
23
- * This is the single, unified implementation for shell execution.
24
- *
25
- * @param commandToExecute The exact command string to run.
26
- * @param cwd The working directory to execute the command in.
27
- * @param abortSignal An AbortSignal to terminate the process.
28
- * @param onOutputChunk A callback for streaming real-time output.
29
- * @param onDebugMessage A callback for logging debug information.
30
- * @returns A promise that resolves with the complete execution result.
31
- */
32
- function executeShellCommand(commandToExecute, cwd, abortSignal, onOutputChunk, onDebugMessage) {
33
- return new Promise((resolve) => {
34
- const isWindows = os.platform() === 'win32';
35
- const shell = isWindows ? 'cmd.exe' : 'bash';
36
- const shellArgs = isWindows
37
- ? ['/c', commandToExecute]
38
- : ['-c', commandToExecute];
39
- const child = spawn(shell, shellArgs, {
40
- cwd,
41
- stdio: ['ignore', 'pipe', 'pipe'],
42
- detached: !isWindows, // Use process groups on non-Windows for robust killing
43
- env: {
44
- ...process.env,
45
- GEMINI_CLI: '1',
46
- },
47
- });
48
- // Use decoders to handle multi-byte characters safely (for streaming output).
49
- let stdoutDecoder = null;
50
- let stderrDecoder = null;
51
- let stdout = '';
52
- let stderr = '';
53
- const outputChunks = [];
54
- let error = null;
55
- let exited = false;
56
- let streamToUi = true;
57
- const MAX_SNIFF_SIZE = 4096;
58
- let sniffedBytes = 0;
59
- const handleOutput = (data, stream) => {
60
- if (!stdoutDecoder || !stderrDecoder) {
61
- const encoding = getCachedEncodingForBuffer(data);
62
- stdoutDecoder = new TextDecoder(encoding);
63
- stderrDecoder = new TextDecoder(encoding);
64
- }
65
- outputChunks.push(data);
66
- if (streamToUi && sniffedBytes < MAX_SNIFF_SIZE) {
67
- // Use a limited-size buffer for the check to avoid performance issues.
68
- const sniffBuffer = Buffer.concat(outputChunks.slice(0, 20));
69
- sniffedBytes = sniffBuffer.length;
70
- if (isBinary(sniffBuffer)) {
71
- streamToUi = false;
72
- // Overwrite any garbled text that may have streamed with a clear message.
73
- onOutputChunk('[Binary output detected. Halting stream...]');
74
- }
75
- }
76
- const decodedChunk = stream === 'stdout'
77
- ? stdoutDecoder.decode(data, { stream: true })
78
- : stderrDecoder.decode(data, { stream: true });
79
- if (stream === 'stdout') {
80
- stdout += stripAnsi(decodedChunk);
81
- }
82
- else {
83
- stderr += stripAnsi(decodedChunk);
84
- }
85
- if (!exited && streamToUi) {
86
- // Send only the new chunk to avoid re-rendering the whole output.
87
- const combinedOutput = stdout + (stderr ? `\n${stderr}` : '');
88
- onOutputChunk(combinedOutput);
89
- }
90
- else if (!exited && !streamToUi) {
91
- // Send progress updates for the binary stream
92
- const totalBytes = outputChunks.reduce((sum, chunk) => sum + chunk.length, 0);
93
- onOutputChunk(`[Receiving binary output... ${formatMemoryUsage(totalBytes)} received]`);
94
- }
95
- };
96
- child.stdout.on('data', (data) => handleOutput(data, 'stdout'));
97
- child.stderr.on('data', (data) => handleOutput(data, 'stderr'));
98
- child.on('error', (err) => {
99
- error = err;
100
- });
101
- const abortHandler = async () => {
102
- if (child.pid && !exited) {
103
- onDebugMessage(`Aborting shell command (PID: ${child.pid})`);
104
- if (isWindows) {
105
- spawn('taskkill', ['/pid', child.pid.toString(), '/f', '/t']);
106
- }
107
- else {
108
- try {
109
- // Kill the entire process group (negative PID).
110
- // SIGTERM first, then SIGKILL if it doesn't die.
111
- process.kill(-child.pid, 'SIGTERM');
112
- await new Promise((res) => setTimeout(res, 200));
113
- if (!exited) {
114
- process.kill(-child.pid, 'SIGKILL');
115
- }
116
- }
117
- catch (_e) {
118
- // Fall back to killing just the main process if group kill fails.
119
- if (!exited)
120
- child.kill('SIGKILL');
121
- }
122
- }
123
- }
124
- };
125
- abortSignal.addEventListener('abort', abortHandler, { once: true });
126
- child.on('exit', (code, signal) => {
127
- exited = true;
128
- abortSignal.removeEventListener('abort', abortHandler);
129
- // Handle any final bytes lingering in the decoders
130
- if (stdoutDecoder) {
131
- stdout += stdoutDecoder.decode();
132
- }
133
- if (stderrDecoder) {
134
- stderr += stderrDecoder.decode();
135
- }
136
- const finalBuffer = Buffer.concat(outputChunks);
137
- resolve({
138
- rawOutput: finalBuffer,
139
- output: stdout + (stderr ? `\n${stderr}` : ''),
140
- exitCode: code,
141
- signal,
142
- error,
143
- aborted: abortSignal.aborted,
144
- });
145
- });
146
- });
147
- }
148
17
  function addShellCommandToGeminiHistory(geminiClient, rawQuery, resultText) {
149
18
  const modelContent = resultText.length > MAX_OUTPUT_LENGTH
150
19
  ? resultText.substring(0, MAX_OUTPUT_LENGTH) + '\n... (truncated)'
@@ -194,7 +63,11 @@ export const useShellCommandProcessor = (addItemToHistory, setPendingHistoryItem
194
63
  commandToExecute = `{ ${command} }; __code=$?; pwd > "${pwdFilePath}"; exit $__code`;
195
64
  }
196
65
  const execPromise = new Promise((resolve) => {
197
- let lastUpdateTime = 0;
66
+ let lastUpdateTime = Date.now();
67
+ let cumulativeStdout = '';
68
+ let cumulativeStderr = '';
69
+ let isBinaryStream = false;
70
+ let binaryBytesReceived = 0;
198
71
  const initialToolDisplay = {
199
72
  callId,
200
73
  name: SHELL_COMMAND_NAME,
@@ -207,85 +80,151 @@ export const useShellCommandProcessor = (addItemToHistory, setPendingHistoryItem
207
80
  type: 'tool_group',
208
81
  tools: [initialToolDisplay],
209
82
  });
83
+ let executionPid;
84
+ const abortHandler = () => {
85
+ onDebugMessage(`Aborting shell command (PID: ${executionPid ?? 'unknown'})`);
86
+ };
87
+ abortSignal.addEventListener('abort', abortHandler, { once: true });
210
88
  onDebugMessage(`Executing in ${targetDir}: ${commandToExecute}`);
211
- executeShellCommand(commandToExecute, targetDir, abortSignal, (streamedOutput) => {
212
- // Throttle pending UI updates to avoid excessive re-renders.
213
- if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
214
- setPendingHistoryItem({
89
+ try {
90
+ const { pid, result } = ShellExecutionService.execute(commandToExecute, targetDir, (event) => {
91
+ switch (event.type) {
92
+ case 'data':
93
+ // Do not process text data if we've already switched to binary mode.
94
+ if (isBinaryStream)
95
+ break;
96
+ if (event.stream === 'stdout') {
97
+ cumulativeStdout += event.chunk;
98
+ }
99
+ else {
100
+ cumulativeStderr += event.chunk;
101
+ }
102
+ break;
103
+ case 'binary_detected':
104
+ isBinaryStream = true;
105
+ break;
106
+ case 'binary_progress':
107
+ isBinaryStream = true;
108
+ binaryBytesReceived = event.bytesReceived;
109
+ break;
110
+ default: {
111
+ throw new Error('An unhandled ShellOutputEvent was found.');
112
+ }
113
+ }
114
+ // Compute the display string based on the *current* state.
115
+ let currentDisplayOutput;
116
+ if (isBinaryStream) {
117
+ if (binaryBytesReceived > 0) {
118
+ currentDisplayOutput = `[Receiving binary output... ${formatMemoryUsage(binaryBytesReceived)} received]`;
119
+ }
120
+ else {
121
+ currentDisplayOutput =
122
+ '[Binary output detected. Halting stream...]';
123
+ }
124
+ }
125
+ else {
126
+ currentDisplayOutput =
127
+ cumulativeStdout +
128
+ (cumulativeStderr ? `\n${cumulativeStderr}` : '');
129
+ }
130
+ // Throttle pending UI updates to avoid excessive re-renders.
131
+ if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
132
+ setPendingHistoryItem({
133
+ type: 'tool_group',
134
+ tools: [
135
+ {
136
+ ...initialToolDisplay,
137
+ resultDisplay: currentDisplayOutput,
138
+ },
139
+ ],
140
+ });
141
+ lastUpdateTime = Date.now();
142
+ }
143
+ }, abortSignal);
144
+ executionPid = pid;
145
+ result
146
+ .then((result) => {
147
+ setPendingHistoryItem(null);
148
+ let mainContent;
149
+ if (isBinary(result.rawOutput)) {
150
+ mainContent =
151
+ '[Command produced binary output, which is not shown.]';
152
+ }
153
+ else {
154
+ mainContent =
155
+ result.output.trim() || '(Command produced no output)';
156
+ }
157
+ let finalOutput = mainContent;
158
+ let finalStatus = ToolCallStatus.Success;
159
+ if (result.error) {
160
+ finalStatus = ToolCallStatus.Error;
161
+ finalOutput = `${result.error.message}\n${finalOutput}`;
162
+ }
163
+ else if (result.aborted) {
164
+ finalStatus = ToolCallStatus.Canceled;
165
+ finalOutput = `Command was cancelled.\n${finalOutput}`;
166
+ }
167
+ else if (result.signal) {
168
+ finalStatus = ToolCallStatus.Error;
169
+ finalOutput = `Command terminated by signal: ${result.signal}.\n${finalOutput}`;
170
+ }
171
+ else if (result.exitCode !== 0) {
172
+ finalStatus = ToolCallStatus.Error;
173
+ finalOutput = `Command exited with code ${result.exitCode}.\n${finalOutput}`;
174
+ }
175
+ if (pwdFilePath && fs.existsSync(pwdFilePath)) {
176
+ const finalPwd = fs.readFileSync(pwdFilePath, 'utf8').trim();
177
+ if (finalPwd && finalPwd !== targetDir) {
178
+ const warning = `WARNING: shell mode is stateless; the directory change to '${finalPwd}' will not persist.`;
179
+ finalOutput = `${warning}\n\n${finalOutput}`;
180
+ }
181
+ }
182
+ const finalToolDisplay = {
183
+ ...initialToolDisplay,
184
+ status: finalStatus,
185
+ resultDisplay: finalOutput,
186
+ };
187
+ // Add the complete, contextual result to the local UI history.
188
+ addItemToHistory({
215
189
  type: 'tool_group',
216
- tools: [
217
- { ...initialToolDisplay, resultDisplay: streamedOutput },
218
- ],
219
- });
220
- lastUpdateTime = Date.now();
221
- }
222
- }, onDebugMessage)
223
- .then((result) => {
224
- setPendingHistoryItem(null);
225
- let mainContent;
226
- if (isBinary(result.rawOutput)) {
227
- mainContent =
228
- '[Command produced binary output, which is not shown.]';
229
- }
230
- else {
231
- mainContent =
232
- result.output.trim() || '(Command produced no output)';
233
- }
234
- let finalOutput = mainContent;
235
- let finalStatus = ToolCallStatus.Success;
236
- if (result.error) {
237
- finalStatus = ToolCallStatus.Error;
238
- finalOutput = `${result.error.message}\n${finalOutput}`;
239
- }
240
- else if (result.aborted) {
241
- finalStatus = ToolCallStatus.Canceled;
242
- finalOutput = `Command was cancelled.\n${finalOutput}`;
243
- }
244
- else if (result.signal) {
245
- finalStatus = ToolCallStatus.Error;
246
- finalOutput = `Command terminated by signal: ${result.signal}.\n${finalOutput}`;
247
- }
248
- else if (result.exitCode !== 0) {
249
- finalStatus = ToolCallStatus.Error;
250
- finalOutput = `Command exited with code ${result.exitCode}.\n${finalOutput}`;
251
- }
252
- if (pwdFilePath && fs.existsSync(pwdFilePath)) {
253
- const finalPwd = fs.readFileSync(pwdFilePath, 'utf8').trim();
254
- if (finalPwd && finalPwd !== targetDir) {
255
- const warning = `WARNING: shell mode is stateless; the directory change to '${finalPwd}' will not persist.`;
256
- finalOutput = `${warning}\n\n${finalOutput}`;
190
+ tools: [finalToolDisplay],
191
+ }, userMessageTimestamp);
192
+ // Add the same complete, contextual result to the LLM's history.
193
+ addShellCommandToGeminiHistory(geminiClient, rawQuery, finalOutput);
194
+ })
195
+ .catch((err) => {
196
+ setPendingHistoryItem(null);
197
+ const errorMessage = err instanceof Error ? err.message : String(err);
198
+ addItemToHistory({
199
+ type: 'error',
200
+ text: `An unexpected error occurred: ${errorMessage}`,
201
+ }, userMessageTimestamp);
202
+ })
203
+ .finally(() => {
204
+ abortSignal.removeEventListener('abort', abortHandler);
205
+ if (pwdFilePath && fs.existsSync(pwdFilePath)) {
206
+ fs.unlinkSync(pwdFilePath);
257
207
  }
258
- }
259
- const finalToolDisplay = {
260
- ...initialToolDisplay,
261
- status: finalStatus,
262
- resultDisplay: finalOutput,
263
- };
264
- // Add the complete, contextual result to the local UI history.
265
- addItemToHistory({
266
- type: 'tool_group',
267
- tools: [finalToolDisplay],
268
- }, userMessageTimestamp);
269
- // Add the same complete, contextual result to the LLM's history.
270
- addShellCommandToGeminiHistory(geminiClient, rawQuery, finalOutput);
271
- })
272
- .catch((err) => {
208
+ resolve();
209
+ });
210
+ }
211
+ catch (err) {
212
+ // This block handles synchronous errors from `execute`
273
213
  setPendingHistoryItem(null);
274
214
  const errorMessage = err instanceof Error ? err.message : String(err);
275
215
  addItemToHistory({
276
216
  type: 'error',
277
217
  text: `An unexpected error occurred: ${errorMessage}`,
278
218
  }, userMessageTimestamp);
279
- })
280
- .finally(() => {
219
+ // Perform cleanup here as well
281
220
  if (pwdFilePath && fs.existsSync(pwdFilePath)) {
282
221
  fs.unlinkSync(pwdFilePath);
283
222
  }
284
- resolve();
285
- });
223
+ resolve(); // Resolve the promise to unblock `onExec`
224
+ }
286
225
  });
287
226
  onExec(execPromise);
288
- return true; // Command was initiated
227
+ return true;
289
228
  }, [
290
229
  config,
291
230
  onDebugMessage,
@@ -1 +1 @@
1
- {"version":3,"file":"shellCommandProcessor.js","sourceRoot":"","sources":["../../../../src/ui/hooks/shellCommandProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shellCommandProcessor.js","sourceRoot":"","sources":["../../../../src/ui/hooks/shellCommandProcessor.ts"],"names":[],"mappings":"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"}
@@ -5,16 +5,20 @@
5
5
  */
6
6
  import { type PartListUnion } from '@google/genai';
7
7
  import { UseHistoryManagerReturn } from './useHistoryManager.js';
8
- import { Config } from '@google/gemini-cli-core';
8
+ import { Config, ToolConfirmationOutcome } from '@google/gemini-cli-core';
9
9
  import { HistoryItemWithoutId, HistoryItem, SlashCommandProcessorResult } from '../types.js';
10
10
  import { LoadedSettings } from '../../config/settings.js';
11
11
  import { type CommandContext, type SlashCommand } from '../commands/types.js';
12
12
  /**
13
13
  * Hook to define and process slash commands (e.g., /help, /clear).
14
14
  */
15
- export declare const useSlashCommandProcessor: (config: Config | null, settings: LoadedSettings, addItem: UseHistoryManagerReturn["addItem"], clearItems: UseHistoryManagerReturn["clearItems"], loadHistory: UseHistoryManagerReturn["loadHistory"], refreshStatic: () => void, setShowHelp: React.Dispatch<React.SetStateAction<boolean>>, onDebugMessage: (message: string) => void, openThemeDialog: () => void, openAuthDialog: () => void, openEditorDialog: () => void, toggleCorgiMode: () => void, setQuittingMessages: (message: HistoryItem[]) => void, openPrivacyNotice: () => void) => {
16
- handleSlashCommand: (rawQuery: PartListUnion) => Promise<SlashCommandProcessorResult | false>;
15
+ export declare const useSlashCommandProcessor: (config: Config | null, settings: LoadedSettings, addItem: UseHistoryManagerReturn["addItem"], clearItems: UseHistoryManagerReturn["clearItems"], loadHistory: UseHistoryManagerReturn["loadHistory"], refreshStatic: () => void, setShowHelp: React.Dispatch<React.SetStateAction<boolean>>, onDebugMessage: (message: string) => void, openThemeDialog: () => void, openAuthDialog: () => void, openEditorDialog: () => void, toggleCorgiMode: () => void, setQuittingMessages: (message: HistoryItem[]) => void, openPrivacyNotice: () => void, toggleVimEnabled: () => Promise<boolean>, setIsProcessing: (isProcessing: boolean) => void) => {
16
+ handleSlashCommand: (rawQuery: PartListUnion, oneTimeShellAllowlist?: Set<string>) => Promise<SlashCommandProcessorResult | false>;
17
17
  slashCommands: readonly SlashCommand[];
18
18
  pendingHistoryItems: HistoryItemWithoutId[];
19
19
  commandContext: CommandContext;
20
+ shellConfirmationRequest: {
21
+ commands: string[];
22
+ onConfirm: (outcome: ToolConfirmationOutcome, approvedCommands?: string[]) => void;
23
+ } | null;
20
24
  };