mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 22:21:22 -07:00
improve performance of shell commands with lots of output (#7680)
This commit is contained in:
@@ -133,7 +133,7 @@ describe('ShellExecutionService', () => {
|
||||
|
||||
expect(onOutputEventMock).toHaveBeenCalledWith({
|
||||
type: 'data',
|
||||
chunk: 'file1.txt',
|
||||
chunk: 'file1.txt\n',
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -348,7 +348,6 @@ export class ShellExecutionService {
|
||||
});
|
||||
let processingChain = Promise.resolve();
|
||||
let decoder: TextDecoder | null = null;
|
||||
let output = '';
|
||||
const outputChunks: Buffer[] = [];
|
||||
const error: Error | null = null;
|
||||
let exited = false;
|
||||
@@ -385,9 +384,10 @@ export class ShellExecutionService {
|
||||
if (isStreamingRawContent) {
|
||||
const decodedChunk = decoder.decode(data, { stream: true });
|
||||
headlessTerminal.write(decodedChunk, () => {
|
||||
const newStrippedOutput = getFullText(headlessTerminal);
|
||||
output = newStrippedOutput;
|
||||
onOutputEvent({ type: 'data', chunk: newStrippedOutput });
|
||||
onOutputEvent({
|
||||
type: 'data',
|
||||
chunk: stripAnsi(decodedChunk),
|
||||
});
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
@@ -420,7 +420,7 @@ export class ShellExecutionService {
|
||||
|
||||
resolve({
|
||||
rawOutput: finalBuffer,
|
||||
output,
|
||||
output: getFullText(headlessTerminal),
|
||||
exitCode,
|
||||
signal: signal ?? null,
|
||||
error,
|
||||
|
||||
@@ -313,7 +313,7 @@ describe('ShellTool', () => {
|
||||
// Send a second chunk. THIS event triggers the update with the CUMULATIVE content.
|
||||
mockShellOutputCallback({
|
||||
type: 'data',
|
||||
chunk: 'hello world',
|
||||
chunk: 'world',
|
||||
});
|
||||
|
||||
// It should have been called once now with the combined output.
|
||||
|
||||
@@ -132,6 +132,7 @@ class ShellToolInvocation extends BaseToolInvocation<
|
||||
);
|
||||
|
||||
let cumulativeOutput = '';
|
||||
let outputChunks: string[] = [cumulativeOutput];
|
||||
let lastUpdateTime = Date.now();
|
||||
let isBinaryStream = false;
|
||||
|
||||
@@ -149,9 +150,11 @@ class ShellToolInvocation extends BaseToolInvocation<
|
||||
switch (event.type) {
|
||||
case 'data':
|
||||
if (isBinaryStream) break;
|
||||
cumulativeOutput = event.chunk;
|
||||
currentDisplayOutput = cumulativeOutput;
|
||||
outputChunks.push(event.chunk);
|
||||
if (Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS) {
|
||||
cumulativeOutput = outputChunks.join('');
|
||||
outputChunks = [cumulativeOutput];
|
||||
currentDisplayOutput = cumulativeOutput;
|
||||
shouldUpdate = true;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user