Skip to content

Commit

Permalink
chore: move the workspace-provider tool to a daemon
Browse files Browse the repository at this point in the history
This also adds support in the daemon implementation for dynamic paths,
something that is needed for the workspace-provider daemon to work.

Signed-off-by: Donnie Adams <[email protected]>
  • Loading branch information
thedadams committed Oct 18, 2024
1 parent 36f9708 commit 376315d
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
11 changes: 10 additions & 1 deletion pkg/engine/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,19 @@ const DaemonURLSuffix = ".daemon.gptscript.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 appendInputAsEnv(nil, input) {
k, v, _ := strings.Cut(env, "=")
envMap[k] = v
}

for _, env := range e.Env {
k, v, _ := strings.Cut(env, "=")
envMap[k] = v
}

toolURL := strings.Split(tool.Instructions, "\n")[0][2:]
toolURL = os.Expand(toolURL, func(s string) string {
return envMap[s]
return url.PathEscape(envMap[s])
})

parsed, err := url.Parse(toolURL)
Expand Down Expand Up @@ -61,6 +66,10 @@ func (e *Engine) runHTTP(ctx context.Context, prg *types.Program, tool types.Too
}, nil
}

if body, ok := envMap["BODY"]; ok {
input = body
}

req, err := http.NewRequestWithContext(ctx, http.MethodPost, toolURL, strings.NewReader(input))
if err != nil {
return nil, err
Expand Down
13 changes: 6 additions & 7 deletions pkg/sdkserver/workspaces.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package sdkserver

import (
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
Expand Down Expand Up @@ -175,8 +176,7 @@ func (s *server) removeAllWithPrefixInWorkspace(w http.ResponseWriter, r *http.R
type writeFileInWorkspaceRequest struct {
workspaceCommonRequest `json:",inline"`
FilePath string `json:"filePath"`
Contents string `json:"contents"`
Base64EncodedInput bool `json:"base64EncodedInput"`
Contents []byte `json:"contents"`
}

func (s *server) writeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
Expand All @@ -198,8 +198,8 @@ func (s *server) writeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
prg,
reqObject.Env,
fmt.Sprintf(
`{"workspace_id": "%s", "file_path": "%s", "file_contents": "%s", "write_file_base64_encoded_input": %t}`,
reqObject.ID, reqObject.FilePath, reqObject.Contents, reqObject.Base64EncodedInput,
`{"workspace_id": "%s", "file_path": "%s", "body": "%s"}`,
reqObject.ID, reqObject.FilePath, base64.StdEncoding.EncodeToString(reqObject.Contents),
),
)
if err != nil {
Expand Down Expand Up @@ -249,7 +249,6 @@ func (s *server) removeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
type readFileInWorkspaceRequest struct {
workspaceCommonRequest `json:",inline"`
FilePath string `json:"filePath"`
Base64EncodeOutput bool `json:"base64EncodeOutput"`
}

func (s *server) readFileInWorkspace(w http.ResponseWriter, r *http.Request) {
Expand All @@ -271,8 +270,8 @@ func (s *server) readFileInWorkspace(w http.ResponseWriter, r *http.Request) {
prg,
reqObject.Env,
fmt.Sprintf(
`{"workspace_id": "%s", "file_path": "%s", "read_file_base64_encode_output": %t}`,
reqObject.ID, reqObject.FilePath, reqObject.Base64EncodeOutput,
`{"workspace_id": "%s", "file_path": "%s"}`,
reqObject.ID, reqObject.FilePath,
),
)
if err != nil {
Expand Down

0 comments on commit 376315d

Please sign in to comment.