Skip to content

Commit a84dd36

Browse files
foo
1 parent ed3408d commit a84dd36

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

Diff for: pkg/engine/cmd.go

+27-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"strings"
1717
"sync"
1818

19+
"github.com/google/shlex"
1920
"github.com/gptscript-ai/gptscript/pkg/counter"
2021
"github.com/gptscript-ai/gptscript/pkg/env"
2122
"github.com/gptscript-ai/gptscript/pkg/types"
@@ -119,7 +120,7 @@ func (e *Engine) runCommand(ctx Context, tool types.Tool, input string, toolCate
119120
var extraEnv = []string{
120121
strings.TrimSpace("GPTSCRIPT_CONTEXT=" + strings.Join(instructions, "\n")),
121122
}
122-
cmd, stop, err := e.newCommand(ctx.Ctx, extraEnv, tool, input)
123+
cmd, stop, err := e.newCommand(ctx.Ctx, extraEnv, tool, input, true)
123124
if err != nil {
124125
if toolCategory == NoCategory {
125126
return fmt.Sprintf("ERROR: got (%v) while parsing command", err), nil
@@ -242,7 +243,7 @@ func appendInputAsEnv(env []string, input string) []string {
242243
return env
243244
}
244245

245-
func (e *Engine) newCommand(ctx context.Context, extraEnv []string, tool types.Tool, input string) (*exec.Cmd, func(), error) {
246+
func (e *Engine) newCommand(ctx context.Context, extraEnv []string, tool types.Tool, input string, useShell bool) (*exec.Cmd, func(), error) {
246247
envvars := append(e.Env[:], extraEnv...)
247248
envvars = appendInputAsEnv(envvars, input)
248249
if log.IsDebug() {
@@ -252,9 +253,20 @@ func (e *Engine) newCommand(ctx context.Context, extraEnv []string, tool types.T
252253
interpreter, rest, _ := strings.Cut(tool.Instructions, "\n")
253254
interpreter = strings.TrimSpace(interpreter)[2:]
254255

255-
args := strings.Fields(interpreter)
256+
var (
257+
args []string
258+
err error
259+
)
260+
if useShell {
261+
args = strings.Fields(interpreter)
262+
} else {
263+
args, err = shlex.Split(interpreter)
264+
if err != nil {
265+
return nil, nil, err
266+
}
267+
}
256268

257-
envvars, err := e.getRuntimeEnv(ctx, tool, args, envvars)
269+
envvars, err = e.getRuntimeEnv(ctx, tool, args, envvars)
258270
if err != nil {
259271
return nil, nil, err
260272
}
@@ -297,6 +309,9 @@ func (e *Engine) newCommand(ctx context.Context, extraEnv []string, tool types.T
297309
if strings.HasPrefix(s, "!") {
298310
return envMap[s[1:]]
299311
}
312+
if !useShell {
313+
return envMap[s]
314+
}
300315
if runtime.GOOS == "windows" {
301316
return "%" + s + "%"
302317
}
@@ -306,9 +321,14 @@ func (e *Engine) newCommand(ctx context.Context, extraEnv []string, tool types.T
306321

307322
if runtime.GOOS == "windows" {
308323
args[0] = strings.ReplaceAll(args[0], "/", "\\")
309-
args = append([]string{"cmd.exe", "/c"}, strings.Join(args, " "))
310-
} else {
311-
args = append([]string{"/bin/sh", "-c"}, strings.Join(args, " "))
324+
}
325+
326+
if useShell {
327+
if runtime.GOOS == "windows" {
328+
args = append([]string{"cmd.exe", "/c"}, strings.Join(args, " "))
329+
} else {
330+
args = append([]string{"/bin/sh", "-c"}, strings.Join(args, " "))
331+
}
312332
}
313333

314334
cmd := exec.CommandContext(ctx, args[0], args[1:]...)

Diff for: pkg/engine/daemon.go

+1
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ func (e *Engine) startDaemon(tool types.Tool) (string, error) {
133133
},
134134
tool,
135135
"{}",
136+
false,
136137
)
137138
if err != nil {
138139
return url, err

0 commit comments

Comments
 (0)