@vybestack/llxprt-code 0.1.14-nightly.250729.2076f7c6 → 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 (116) hide show
  1. package/README.md +53 -0
  2. package/dist/package.json +4 -5
  3. package/dist/src/config/extension.d.ts +1 -0
  4. package/dist/src/config/extension.js +4 -0
  5. package/dist/src/config/extension.js.map +1 -1
  6. package/dist/src/config/settings.d.ts +2 -1
  7. package/dist/src/config/settings.js.map +1 -1
  8. package/dist/src/gemini.d.ts +1 -0
  9. package/dist/src/gemini.js +35 -15
  10. package/dist/src/gemini.js.map +1 -1
  11. package/dist/src/generated/git-commit.d.ts +1 -1
  12. package/dist/src/generated/git-commit.js +1 -1
  13. package/dist/src/services/BuiltinCommandLoader.js +2 -0
  14. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  15. package/dist/src/services/CommandService.d.ts +8 -4
  16. package/dist/src/services/CommandService.js +24 -8
  17. package/dist/src/services/CommandService.js.map +1 -1
  18. package/dist/src/services/FileCommandLoader.d.ts +15 -3
  19. package/dist/src/services/FileCommandLoader.js +94 -42
  20. package/dist/src/services/FileCommandLoader.js.map +1 -1
  21. package/dist/src/services/McpPromptLoader.d.ts +25 -0
  22. package/dist/src/services/McpPromptLoader.js +192 -0
  23. package/dist/src/services/McpPromptLoader.js.map +1 -0
  24. package/dist/src/services/prompt-processors/shellProcessor.d.ts +32 -0
  25. package/dist/src/services/prompt-processors/shellProcessor.js +77 -0
  26. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
  27. package/dist/src/services/prompt-processors/types.d.ts +4 -0
  28. package/dist/src/services/prompt-processors/types.js +4 -0
  29. package/dist/src/services/prompt-processors/types.js.map +1 -1
  30. package/dist/src/ui/App.js +312 -195
  31. package/dist/src/ui/App.js.map +1 -1
  32. package/dist/src/ui/commands/chatCommand.js +39 -1
  33. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  34. package/dist/src/ui/commands/initCommand.d.ts +7 -0
  35. package/dist/src/ui/commands/initCommand.js +76 -0
  36. package/dist/src/ui/commands/initCommand.js.map +1 -0
  37. package/dist/src/ui/commands/mcpCommand.js +53 -8
  38. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  39. package/dist/src/ui/commands/types.d.ts +22 -3
  40. package/dist/src/ui/commands/types.js +1 -0
  41. package/dist/src/ui/commands/types.js.map +1 -1
  42. package/dist/src/ui/commands/vimCommand.js +0 -7
  43. package/dist/src/ui/commands/vimCommand.js.map +1 -1
  44. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +3 -3
  45. package/dist/src/ui/components/ContextSummaryDisplay.js +8 -8
  46. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  47. package/dist/src/ui/components/Footer.d.ts +1 -0
  48. package/dist/src/ui/components/Footer.js +2 -2
  49. package/dist/src/ui/components/Footer.js.map +1 -1
  50. package/dist/src/ui/components/Header.js +1 -1
  51. package/dist/src/ui/components/Header.js.map +1 -1
  52. package/dist/src/ui/components/Help.js +2 -2
  53. package/dist/src/ui/components/Help.js.map +1 -1
  54. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +4 -4
  55. package/dist/src/ui/components/IDEContextDetailDisplay.js +5 -7
  56. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -1
  57. package/dist/src/ui/components/InputPrompt.d.ts +2 -0
  58. package/dist/src/ui/components/InputPrompt.js +5 -1
  59. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  60. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +15 -0
  61. package/dist/src/ui/components/ShellConfirmationDialog.js +45 -0
  62. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
  63. package/dist/src/ui/components/Tips.js +1 -1
  64. package/dist/src/ui/components/Tips.js.map +1 -1
  65. package/dist/src/ui/components/shared/text-buffer.d.ts +270 -2
  66. package/dist/src/ui/components/shared/text-buffer.js +415 -70
  67. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  68. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +72 -0
  69. package/dist/src/ui/components/shared/vim-buffer-actions.js +565 -0
  70. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  71. package/dist/src/ui/contexts/VimModeContext.js +2 -2
  72. package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
  73. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +1 -0
  74. package/dist/src/ui/hooks/shellCommandProcessor.js +139 -200
  75. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  76. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +7 -3
  77. package/dist/src/ui/hooks/slashCommandProcessor.js +208 -129
  78. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  79. package/dist/src/ui/hooks/useCompletion.js +7 -2
  80. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  81. package/dist/src/ui/hooks/useConsoleMessages.js +53 -37
  82. package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
  83. package/dist/src/ui/hooks/useGeminiStream.js +14 -2
  84. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  85. package/dist/src/ui/hooks/useKeypress.js +5 -2
  86. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  87. package/dist/src/ui/hooks/useReactToolScheduler.js +0 -1
  88. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  89. package/dist/src/ui/hooks/vim.d.ts +28 -0
  90. package/dist/src/ui/hooks/vim.js +630 -0
  91. package/dist/src/ui/hooks/vim.js.map +1 -0
  92. package/dist/src/ui/themes/theme-manager.js +10 -1
  93. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  94. package/dist/src/ui/themes/theme.d.ts +1 -0
  95. package/dist/src/ui/themes/theme.js +19 -4
  96. package/dist/src/ui/themes/theme.js.map +1 -1
  97. package/dist/src/ui/utils/textUtils.d.ts +0 -8
  98. package/dist/src/ui/utils/textUtils.js +0 -22
  99. package/dist/src/ui/utils/textUtils.js.map +1 -1
  100. package/dist/src/ui/utils/updateCheck.d.ts +7 -1
  101. package/dist/src/ui/utils/updateCheck.js +17 -28
  102. package/dist/src/ui/utils/updateCheck.js.map +1 -1
  103. package/dist/src/utils/events.d.ts +11 -0
  104. package/dist/src/utils/events.js +13 -0
  105. package/dist/src/utils/events.js.map +1 -0
  106. package/dist/src/utils/handleAutoUpdate.d.ts +10 -0
  107. package/dist/src/utils/handleAutoUpdate.js +97 -0
  108. package/dist/src/utils/handleAutoUpdate.js.map +1 -0
  109. package/dist/src/utils/installationInfo.d.ts +23 -0
  110. package/dist/src/utils/installationInfo.js +154 -0
  111. package/dist/src/utils/installationInfo.js.map +1 -0
  112. package/dist/src/utils/updateEventEmitter.d.ts +11 -0
  113. package/dist/src/utils/updateEventEmitter.js +12 -0
  114. package/dist/src/utils/updateEventEmitter.js.map +1 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. package/package.json +4 -5
@@ -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 '@vybestack/llxprt-code-core';
11
- import { formatMemoryUsage } from '../utils/formatters.js';
12
- import { isBinary } from '../utils/textUtils.js';
8
+ import { isBinary, ShellExecutionService, } from '@vybestack/llxprt-code-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)'
@@ -196,7 +65,11 @@ export const useShellCommandProcessor = (addItemToHistory, setPendingHistoryItem
196
65
  commandToExecute = `{ ${command} }; __code=$?; pwd > "${pwdFilePath}"; exit $__code`;
197
66
  }
198
67
  const execPromise = new Promise((resolve) => {
199
- let lastUpdateTime = 0;
68
+ let lastUpdateTime = Date.now();
69
+ let cumulativeStdout = '';
70
+ let cumulativeStderr = '';
71
+ let isBinaryStream = false;
72
+ let binaryBytesReceived = 0;
200
73
  const initialToolDisplay = {
201
74
  callId,
202
75
  name: SHELL_COMMAND_NAME,
@@ -209,85 +82,151 @@ export const useShellCommandProcessor = (addItemToHistory, setPendingHistoryItem
209
82
  type: 'tool_group',
210
83
  tools: [initialToolDisplay],
211
84
  });
85
+ let executionPid;
86
+ const abortHandler = () => {
87
+ onDebugMessage(`Aborting shell command (PID: ${executionPid ?? 'unknown'})`);
88
+ };
89
+ abortSignal.addEventListener('abort', abortHandler, { once: true });
212
90
  onDebugMessage(`Executing in ${targetDir}: ${commandToExecute}`);
213
- executeShellCommand(commandToExecute, targetDir, abortSignal, (streamedOutput) => {
214
- // Throttle pending UI updates to avoid excessive re-renders.
215
- if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
216
- setPendingHistoryItem({
91
+ try {
92
+ const { pid, result } = ShellExecutionService.execute(commandToExecute, targetDir, (event) => {
93
+ switch (event.type) {
94
+ case 'data':
95
+ // Do not process text data if we've already switched to binary mode.
96
+ if (isBinaryStream)
97
+ break;
98
+ if (event.stream === 'stdout') {
99
+ cumulativeStdout += event.chunk;
100
+ }
101
+ else {
102
+ cumulativeStderr += event.chunk;
103
+ }
104
+ break;
105
+ case 'binary_detected':
106
+ isBinaryStream = true;
107
+ break;
108
+ case 'binary_progress':
109
+ isBinaryStream = true;
110
+ binaryBytesReceived = event.bytesReceived;
111
+ break;
112
+ default: {
113
+ throw new Error('An unhandled ShellOutputEvent was found.');
114
+ }
115
+ }
116
+ // Compute the display string based on the *current* state.
117
+ let currentDisplayOutput;
118
+ if (isBinaryStream) {
119
+ if (binaryBytesReceived > 0) {
120
+ currentDisplayOutput = `[Receiving binary output... ${formatMemoryUsage(binaryBytesReceived)} received]`;
121
+ }
122
+ else {
123
+ currentDisplayOutput =
124
+ '[Binary output detected. Halting stream...]';
125
+ }
126
+ }
127
+ else {
128
+ currentDisplayOutput =
129
+ cumulativeStdout +
130
+ (cumulativeStderr ? `\n${cumulativeStderr}` : '');
131
+ }
132
+ // Throttle pending UI updates to avoid excessive re-renders.
133
+ if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
134
+ setPendingHistoryItem({
135
+ type: 'tool_group',
136
+ tools: [
137
+ {
138
+ ...initialToolDisplay,
139
+ resultDisplay: currentDisplayOutput,
140
+ },
141
+ ],
142
+ });
143
+ lastUpdateTime = Date.now();
144
+ }
145
+ }, abortSignal);
146
+ executionPid = pid;
147
+ result
148
+ .then((result) => {
149
+ setPendingHistoryItem(null);
150
+ let mainContent;
151
+ if (isBinary(result.rawOutput)) {
152
+ mainContent =
153
+ '[Command produced binary output, which is not shown.]';
154
+ }
155
+ else {
156
+ mainContent =
157
+ result.output.trim() || '(Command produced no output)';
158
+ }
159
+ let finalOutput = mainContent;
160
+ let finalStatus = ToolCallStatus.Success;
161
+ if (result.error) {
162
+ finalStatus = ToolCallStatus.Error;
163
+ finalOutput = `${result.error.message}\n${finalOutput}`;
164
+ }
165
+ else if (result.aborted) {
166
+ finalStatus = ToolCallStatus.Canceled;
167
+ finalOutput = `Command was cancelled.\n${finalOutput}`;
168
+ }
169
+ else if (result.signal) {
170
+ finalStatus = ToolCallStatus.Error;
171
+ finalOutput = `Command terminated by signal: ${result.signal}.\n${finalOutput}`;
172
+ }
173
+ else if (result.exitCode !== 0) {
174
+ finalStatus = ToolCallStatus.Error;
175
+ finalOutput = `Command exited with code ${result.exitCode}.\n${finalOutput}`;
176
+ }
177
+ if (pwdFilePath && fs.existsSync(pwdFilePath)) {
178
+ const finalPwd = fs.readFileSync(pwdFilePath, 'utf8').trim();
179
+ if (finalPwd && finalPwd !== targetDir) {
180
+ const warning = `WARNING: shell mode is stateless; the directory change to '${finalPwd}' will not persist.`;
181
+ finalOutput = `${warning}\n\n${finalOutput}`;
182
+ }
183
+ }
184
+ const finalToolDisplay = {
185
+ ...initialToolDisplay,
186
+ status: finalStatus,
187
+ resultDisplay: finalOutput,
188
+ };
189
+ // Add the complete, contextual result to the local UI history.
190
+ addItemToHistory({
217
191
  type: 'tool_group',
218
- tools: [
219
- { ...initialToolDisplay, resultDisplay: streamedOutput },
220
- ],
221
- });
222
- lastUpdateTime = Date.now();
223
- }
224
- }, onDebugMessage)
225
- .then((result) => {
226
- setPendingHistoryItem(null);
227
- let mainContent;
228
- if (isBinary(result.rawOutput)) {
229
- mainContent =
230
- '[Command produced binary output, which is not shown.]';
231
- }
232
- else {
233
- mainContent =
234
- result.output.trim() || '(Command produced no output)';
235
- }
236
- let finalOutput = mainContent;
237
- let finalStatus = ToolCallStatus.Success;
238
- if (result.error) {
239
- finalStatus = ToolCallStatus.Error;
240
- finalOutput = `${result.error.message}\n${finalOutput}`;
241
- }
242
- else if (result.aborted) {
243
- finalStatus = ToolCallStatus.Canceled;
244
- finalOutput = `Command was cancelled.\n${finalOutput}`;
245
- }
246
- else if (result.signal) {
247
- finalStatus = ToolCallStatus.Error;
248
- finalOutput = `Command terminated by signal: ${result.signal}.\n${finalOutput}`;
249
- }
250
- else if (result.exitCode !== 0) {
251
- finalStatus = ToolCallStatus.Error;
252
- finalOutput = `Command exited with code ${result.exitCode}.\n${finalOutput}`;
253
- }
254
- if (pwdFilePath && fs.existsSync(pwdFilePath)) {
255
- const finalPwd = fs.readFileSync(pwdFilePath, 'utf8').trim();
256
- if (finalPwd && finalPwd !== targetDir) {
257
- const warning = `WARNING: shell mode is stateless; the directory change to '${finalPwd}' will not persist.`;
258
- finalOutput = `${warning}\n\n${finalOutput}`;
192
+ tools: [finalToolDisplay],
193
+ }, userMessageTimestamp);
194
+ // Add the same complete, contextual result to the LLM's history.
195
+ addShellCommandToGeminiHistory(geminiClient, rawQuery, finalOutput);
196
+ })
197
+ .catch((err) => {
198
+ setPendingHistoryItem(null);
199
+ const errorMessage = err instanceof Error ? err.message : String(err);
200
+ addItemToHistory({
201
+ type: 'error',
202
+ text: `An unexpected error occurred: ${errorMessage}`,
203
+ }, userMessageTimestamp);
204
+ })
205
+ .finally(() => {
206
+ abortSignal.removeEventListener('abort', abortHandler);
207
+ if (pwdFilePath && fs.existsSync(pwdFilePath)) {
208
+ fs.unlinkSync(pwdFilePath);
259
209
  }
260
- }
261
- const finalToolDisplay = {
262
- ...initialToolDisplay,
263
- status: finalStatus,
264
- resultDisplay: finalOutput,
265
- };
266
- // Add the complete, contextual result to the local UI history.
267
- addItemToHistory({
268
- type: 'tool_group',
269
- tools: [finalToolDisplay],
270
- }, userMessageTimestamp);
271
- // Add the same complete, contextual result to the LLM's history.
272
- addShellCommandToGeminiHistory(geminiClient, rawQuery, finalOutput);
273
- })
274
- .catch((err) => {
210
+ resolve();
211
+ });
212
+ }
213
+ catch (err) {
214
+ // This block handles synchronous errors from `execute`
275
215
  setPendingHistoryItem(null);
276
216
  const errorMessage = err instanceof Error ? err.message : String(err);
277
217
  addItemToHistory({
278
218
  type: 'error',
279
219
  text: `An unexpected error occurred: ${errorMessage}`,
280
220
  }, userMessageTimestamp);
281
- })
282
- .finally(() => {
221
+ // Perform cleanup here as well
283
222
  if (pwdFilePath && fs.existsSync(pwdFilePath)) {
284
223
  fs.unlinkSync(pwdFilePath);
285
224
  }
286
- resolve();
287
- });
225
+ resolve(); // Resolve the promise to unblock `onExec`
226
+ }
288
227
  });
289
228
  onExec(execPromise);
290
- return true; // Command was initiated
229
+ return true;
291
230
  }, [
292
231
  config,
293
232
  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 '@vybestack/llxprt-code-core';
8
+ import { Config, ToolConfirmationOutcome } from '@vybestack/llxprt-code-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, openProviderDialog: () => void, openProviderModelDialog: () => void, performMemoryRefresh: () => Promise<void>, setQuittingMessages: (message: HistoryItem[]) => void, openPrivacyNotice: () => void, checkPaymentModeChange?: (forcePreviousProvider?: string) => void, showToolDescriptions?: boolean, toggleVimEnabled?: () => Promise<boolean>) => {
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, openProviderDialog: () => void, openProviderModelDialog: () => 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
  };