From 6e554b95f7a62ac60aef67ceb41486df506029b1 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Thu, 1 Aug 2024 22:24:51 -0700 Subject: [PATCH] chore: capture stderr by default and return to LLM, even on success --- pkg/engine/cmd.go | 19 +++++++++++-------- pkg/tests/testdata/TestCwd/subtool/test.gpt | 2 +- pkg/tests/testdata/TestCwd/test.gpt | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/pkg/engine/cmd.go b/pkg/engine/cmd.go index 7089f664..ec4949ce 100644 --- a/pkg/engine/cmd.go +++ b/pkg/engine/cmd.go @@ -134,24 +134,27 @@ func (e *Engine) runCommand(ctx Context, tool types.Tool, input string, toolCate }, } - output := &bytes.Buffer{} - all := &bytes.Buffer{} - cmd.Stderr = io.MultiWriter(all, os.Stderr) - cmd.Stdout = io.MultiWriter(all, output, &outputWriter{ + result := &bytes.Buffer{} + all := io.MultiWriter(result, &outputWriter{ id: id, progress: e.Progress, }) + cmd.Stdout = all + cmd.Stderr = all + if log.IsDebug() { + cmd.Stderr = io.MultiWriter(all, os.Stderr) + } + if err := cmd.Run(); err != nil { if toolCategory == NoCategory { - return fmt.Sprintf("ERROR: got (%v) while running tool, OUTPUT: %s", err, all), nil + return fmt.Sprintf("ERROR: got (%v) while running tool, OUTPUT: %s", err, result), nil } - _, _ = os.Stderr.Write(output.Bytes()) log.Errorf("failed to run tool [%s] cmd %v: %v", tool.Parameters.Name, cmd.Args, err) - return "", fmt.Errorf("ERROR: %s: %w", all, err) + return "", fmt.Errorf("ERROR: %s: %w", result, err) } - return output.String(), IsChatFinishMessage(output.String()) + return result.String(), IsChatFinishMessage(result.String()) } func (e *Engine) getRuntimeEnv(ctx context.Context, tool types.Tool, cmd, env []string) ([]string, error) { diff --git a/pkg/tests/testdata/TestCwd/subtool/test.gpt b/pkg/tests/testdata/TestCwd/subtool/test.gpt index 41314bbe..29cf1ed0 100644 --- a/pkg/tests/testdata/TestCwd/subtool/test.gpt +++ b/pkg/tests/testdata/TestCwd/subtool/test.gpt @@ -1,6 +1,6 @@ # #!/usr/bin/env X=${GPTSCRIPT_TOOL_DIR} /bin/bash -set -e -x +set -e [ ${X} = ${GPTSCRIPT_TOOL_DIR} ] cd $X diff --git a/pkg/tests/testdata/TestCwd/test.gpt b/pkg/tests/testdata/TestCwd/test.gpt index 5185635a..e053571c 100644 --- a/pkg/tests/testdata/TestCwd/test.gpt +++ b/pkg/tests/testdata/TestCwd/test.gpt @@ -6,7 +6,7 @@ noop name: local #!/bin/bash -set -e -x +set -e [ "" = "${TOOL_DIR}" ] P=$(pwd)