Skip to content

Commit b8f6209

Browse files
authored
fix: allocate new storage for env vars on each tool call (#841)
Signed-off-by: Grant Linville <[email protected]>
1 parent 8128bbc commit b8f6209

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

pkg/engine/cmd.go

+12-8
Original file line numberDiff line numberDiff line change
@@ -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

246250
func (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

Comments
 (0)