@@ -134,21 +134,28 @@ func (e *Engine) runCommand(ctx Context, tool types.Tool, input string, toolCate
134134 },
135135 }
136136
137- result := & bytes.Buffer {}
138- all := io .MultiWriter (result , & outputWriter {
139- id : id ,
140- progress : e .Progress ,
141- })
142-
143- cmd .Stdout = all
144- cmd .Stderr = all
145- if log .IsDebug () {
146- cmd .Stderr = io .MultiWriter (all , os .Stderr )
137+ var (
138+ stdout = & bytes.Buffer {}
139+ stdoutAndErr = & bytes.Buffer {}
140+ progressOut = & outputWriter {
141+ id : id ,
142+ progress : e .Progress ,
143+ }
144+ result * bytes.Buffer
145+ )
146+
147+ cmd .Stdout = io .MultiWriter (stdout , stdoutAndErr , progressOut )
148+ if toolCategory == NoCategory || toolCategory == ContextToolCategory {
149+ cmd .Stderr = io .MultiWriter (stdoutAndErr , progressOut )
150+ result = stdoutAndErr
151+ } else {
152+ cmd .Stderr = io .MultiWriter (stdoutAndErr , progressOut , os .Stderr )
153+ result = stdout
147154 }
148155
149156 if err := cmd .Run (); err != nil {
150157 if toolCategory == NoCategory {
151- return fmt .Sprintf ("ERROR: got (%v) while running tool, OUTPUT: %s" , err , result ), nil
158+ return fmt .Sprintf ("ERROR: got (%v) while running tool, OUTPUT: %s" , err , stdoutAndErr ), nil
152159 }
153160 log .Errorf ("failed to run tool [%s] cmd %v: %v" , tool .Parameters .Name , cmd .Args , err )
154161 return "" , fmt .Errorf ("ERROR: %s: %w" , result , err )
0 commit comments