diff --git a/pkg/engine/cmd.go b/pkg/engine/cmd.go index 4cc956eb..a00d8856 100644 --- a/pkg/engine/cmd.go +++ b/pkg/engine/cmd.go @@ -40,7 +40,12 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string) return tool.BuiltinFunc(ctx, e.Env, input) } - cmd, stop, err := e.newCommand(ctx, nil, tool.Instructions, input) + var extraEnv []string + if tool.WorkingDir != "" { + extraEnv = append(extraEnv, "GPTSCRIPT_TOOL_DIR="+tool.WorkingDir) + } + + cmd, stop, err := e.newCommand(ctx, extraEnv, tool.Instructions, input) if err != nil { return "", err } @@ -59,9 +64,6 @@ func (e *Engine) runCommand(ctx context.Context, tool types.Tool, input string) cmd.Stdin = strings.NewReader(input) cmd.Stderr = io.MultiWriter(all, os.Stderr) cmd.Stdout = io.MultiWriter(all, output) - if tool.WorkingDir != "" { - cmd.Dir = tool.WorkingDir - } if err := cmd.Run(); err != nil { _, _ = os.Stderr.Write(output.Bytes()) @@ -82,10 +84,6 @@ func (e *Engine) newCommand(ctx context.Context, extraEnv []string, instructions envMap := map[string]string{} for _, env := range env { key, value, _ := strings.Cut(env, "=") - key, ok := strings.CutPrefix(key, "GPTSCRIPT_VAR_") - if !ok { - continue - } envMap[key] = value } diff --git a/pkg/engine/http.go b/pkg/engine/http.go index c48838c5..0ff30cb7 100644 --- a/pkg/engine/http.go +++ b/pkg/engine/http.go @@ -17,12 +17,10 @@ const DaemonURLSuffix = ".daemon.gpt.local" func (e *Engine) runHTTP(ctx context.Context, prg *types.Program, tool types.Tool, input string) (cmdRet *Return, cmdErr error) { envMap := map[string]string{} + for _, env := range e.Env { - v, ok := strings.CutPrefix(env, "GPTSCRIPT_VAR_") - if ok { - k, v, _ := strings.Cut(v, "=") - envMap[k] = v - } + k, v, _ := strings.Cut(env, "=") + envMap[k] = v } toolURL := strings.Split(tool.Instructions, "\n")[0][2:] @@ -64,10 +62,6 @@ func (e *Engine) runHTTP(ctx context.Context, prg *types.Program, tool types.Too req.Header.Set("X-GPTScript-Tool-Name", tool.Parameters.Name) - for k, v := range envMap { - req.Header.Set("X-GPTScript-Var-"+k, v) - } - if err := json.Unmarshal([]byte(input), &map[string]any{}); err == nil { req.Header.Set("Content-Type", "application/json") } else { diff --git a/pkg/runner/log.go b/pkg/runner/log.go deleted file mode 100644 index 72772a6c..00000000 --- a/pkg/runner/log.go +++ /dev/null @@ -1,5 +0,0 @@ -package runner - -import "github.com/gptscript-ai/gptscript/pkg/mvl" - -var log = mvl.Package() diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index fa2f9571..7c55ccba 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -2,7 +2,6 @@ package runner import ( "context" - "os" "sync" "time" @@ -21,41 +20,30 @@ type Monitor interface { } type Options struct { - WorkingDir string MonitorFactory MonitorFactory `usage:"-"` } func complete(opts ...Options) (result Options) { for _, opt := range opts { - result.WorkingDir = types.FirstSet(opt.WorkingDir, result.WorkingDir) result.MonitorFactory = types.FirstSet(opt.MonitorFactory, result.MonitorFactory) } if result.MonitorFactory == nil { result.MonitorFactory = noopFactory{} } - if result.WorkingDir == "" { - var err error - result.WorkingDir, err = os.Getwd() - if err != nil { - log.Fatalf("failed to determine current working directory: %v", err) - } - } return } type Runner struct { - c engine.Model - factory MonitorFactory - workingDir string + c engine.Model + factory MonitorFactory } func New(client engine.Model, opts ...Options) (*Runner, error) { opt := complete(opts...) return &Runner{ - c: client, - factory: opt.MonitorFactory, - workingDir: opt.WorkingDir, + c: client, + factory: opt.MonitorFactory, }, nil } @@ -106,10 +94,6 @@ func (r *Runner) call(callCtx engine.Context, monitor Monitor, env []string, inp Env: env, } - if r.workingDir != "" { - e.Env = append(e.Env, "GPTSCRIPT_VAR_WORKDIR="+r.workingDir) - } - monitor.Event(Event{ Time: time.Now(), CallContext: &callCtx, diff --git a/pkg/tests/testdata/TestCwd/call3.golden b/pkg/tests/testdata/TestCwd/call3.golden index f564ec3f..8116fbc0 100644 --- a/pkg/tests/testdata/TestCwd/call3.golden +++ b/pkg/tests/testdata/TestCwd/call3.golden @@ -71,7 +71,7 @@ "role": "tool", "content": [ { - "text": "/testdata/TestCwd\nthe data" + "text": "testdata/TestCwd\nthe data" } ], "toolCall": { diff --git a/pkg/tests/testdata/TestCwd/subtool/test.gpt b/pkg/tests/testdata/TestCwd/subtool/test.gpt index 43bd9f40..41314bbe 100644 --- a/pkg/tests/testdata/TestCwd/subtool/test.gpt +++ b/pkg/tests/testdata/TestCwd/subtool/test.gpt @@ -1,6 +1,8 @@ # -#!/bin/bash +#!/usr/bin/env X=${GPTSCRIPT_TOOL_DIR} /bin/bash set -e -x +[ ${X} = ${GPTSCRIPT_TOOL_DIR} ] +cd $X echo sub cat sub.txt \ No newline at end of file diff --git a/pkg/tests/testdata/TestCwd/test.gpt b/pkg/tests/testdata/TestCwd/test.gpt index 2d3460bc..5185635a 100644 --- a/pkg/tests/testdata/TestCwd/test.gpt +++ b/pkg/tests/testdata/TestCwd/test.gpt @@ -8,6 +8,8 @@ name: local #!/bin/bash set -e -x +[ "" = "${TOOL_DIR}" ] P=$(pwd) -echo ${P##${GPTSCRIPT_VAR_WORKDIR}} +echo ${GPTSCRIPT_TOOL_DIR##${P}} +cd $GPTSCRIPT_TOOL_DIR cat data.txt \ No newline at end of file