From 7c4a5464f68db32bb0069927f65deb2a61bd094f Mon Sep 17 00:00:00 2001 From: Olcan Date: Fri, 30 May 2025 01:58:09 -0700 Subject: truncate (hide) tool output at the top, add some spacing, also fix shell output interval change accidentally undone in a previous commit (#619) --- packages/server/src/tools/shell.ts | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'packages/server/src') diff --git a/packages/server/src/tools/shell.ts b/packages/server/src/tools/shell.ts index b43b2d0a..388c1543 100644 --- a/packages/server/src/tools/shell.ts +++ b/packages/server/src/tools/shell.ts @@ -25,6 +25,8 @@ export interface ShellToolParams { } import { spawn } from 'child_process'; +const OUTPUT_UPDATE_INTERVAL_MS = 1000; + export class ShellTool extends BaseTool { static Name: string = 'execute_bash_command'; private whitelist: Set = new Set(); @@ -124,7 +126,7 @@ export class ShellTool extends BaseTool { async execute( params: ShellToolParams, abortSignal: AbortSignal, - onOutputChunk?: (chunk: string) => void, + updateOutput?: (chunk: string) => void, ): Promise { const validationError = this.validateToolParams(params); if (validationError) { @@ -155,6 +157,19 @@ export class ShellTool extends BaseTool { let exited = false; let stdout = ''; let output = ''; + let lastUpdateTime = Date.now(); + + const appendOutput = (str: string) => { + output += str; + if ( + updateOutput && + Date.now() - lastUpdateTime > OUTPUT_UPDATE_INTERVAL_MS + ) { + updateOutput(output); + lastUpdateTime = Date.now(); + } + }; + shell.stdout.on('data', (data: Buffer) => { // continue to consume post-exit for background processes // removing listeners can overflow OS buffer and block subprocesses @@ -162,10 +177,7 @@ export class ShellTool extends BaseTool { if (!exited) { const str = data.toString(); stdout += str; - output += str; - if (onOutputChunk) { - onOutputChunk(str); - } + appendOutput(str); } }); @@ -174,10 +186,7 @@ export class ShellTool extends BaseTool { if (!exited) { const str = data.toString(); stderr += str; - output += str; - if (onOutputChunk) { - onOutputChunk(str); - } + appendOutput(str); } }); -- cgit v1.2.3