@@ -217,38 +217,42 @@ func appendInputAsEnv(env []string, input string) []string {
217217 dec := json .NewDecoder (bytes .NewReader ([]byte (input )))
218218 dec .UseNumber ()
219219
220- env = appendEnv (env , "GPTSCRIPT_INPUT" , input )
220+ // If we don't create a new slice here, then parallel tool calls can end up getting messed up.
221+ newEnv := make ([]string , len (env ), cap (env )+ 1 + len (data ))
222+ copy (newEnv , env )
223+
224+ newEnv = appendEnv (newEnv , "GPTSCRIPT_INPUT" , input )
221225
222226 if err := json .Unmarshal ([]byte (input ), & data ); err != nil {
223227 // ignore invalid JSON
224- return env
228+ return newEnv
225229 }
226230
227231 for k , v := range data {
228232 switch val := v .(type ) {
229233 case string :
230- env = appendEnv (env , k , val )
234+ newEnv = appendEnv (newEnv , k , val )
231235 case json.Number :
232- env = appendEnv (env , k , string (val ))
236+ newEnv = appendEnv (newEnv , k , string (val ))
233237 case bool :
234- env = appendEnv (env , k , fmt .Sprint (val ))
238+ newEnv = appendEnv (newEnv , k , fmt .Sprint (val ))
235239 default :
236240 data , err := json .Marshal (val )
237241 if err == nil {
238- env = appendEnv (env , k , string (data ))
242+ newEnv = appendEnv (newEnv , k , string (data ))
239243 }
240244 }
241245 }
242246
243- return env
247+ return newEnv
244248}
245249
246250func (e * Engine ) newCommand (ctx context.Context , extraEnv []string , tool types.Tool , input string , useShell bool ) (* exec.Cmd , func (), error ) {
247251 if runtime .GOOS == "windows" {
248252 useShell = false
249253 }
250254
251- envvars := append (e .Env [:] , extraEnv ... )
255+ envvars := append (e .Env , extraEnv ... )
252256 envvars = appendInputAsEnv (envvars , input )
253257 if log .IsDebug () {
254258 envvars = append (envvars , "GPTSCRIPT_DEBUG=true" )
0 commit comments