Skip to content

Commit 3661044

Browse files
committed
feat: make the SDK server workspace tool a global option
Signed-off-by: Donnie Adams <[email protected]>
1 parent 376315d commit 3661044

File tree

4 files changed

+25
-14
lines changed

4 files changed

+25
-14
lines changed

pkg/cli/sdk_server.go

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
type SDKServer struct {
1313
*GPTScript
14+
WorkspaceTool string `usage:"Tool to use for workspace"`
1415
}
1516

1617
func (c *SDKServer) Customize(cmd *cobra.Command) {
@@ -37,5 +38,6 @@ func (c *SDKServer) Run(cmd *cobra.Command, _ []string) error {
3738
Options: opts,
3839
ListenAddress: c.ListenAddress,
3940
Debug: c.Debug,
41+
WorkspaceTool: c.WorkspaceTool,
4042
})
4143
}

pkg/sdkserver/routes.go

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
type server struct {
2929
gptscriptOpts gptscript.Options
3030
address, token string
31+
workspaceTool string
3132
client *gptscript.GPTScript
3233
events *broadcaster.Broadcaster[event]
3334

pkg/sdkserver/server.go

+7
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type Options struct {
2727
gptscript.Options
2828

2929
ListenAddress string
30+
WorkspaceTool string
3031
Debug bool
3132
DisableServerErrorLogging bool
3233
}
@@ -107,6 +108,7 @@ func run(ctx context.Context, listener net.Listener, opts Options) error {
107108
gptscriptOpts: opts.Options,
108109
address: listener.Addr().String(),
109110
token: token,
111+
workspaceTool: opts.WorkspaceTool,
110112
client: g,
111113
events: events,
112114
runtimeManager: runtimes.Default(opts.Options.Cache.CacheDir), // TODO - do we always want to use runtimes.Default here?
@@ -157,6 +159,7 @@ func complete(opts ...Options) Options {
157159
for _, opt := range opts {
158160
result.Options = gptscript.Complete(result.Options, opt.Options)
159161
result.ListenAddress = types.FirstSet(opt.ListenAddress, result.ListenAddress)
162+
result.WorkspaceTool = types.FirstSet(opt.WorkspaceTool, result.WorkspaceTool)
160163
result.Debug = types.FirstSet(opt.Debug, result.Debug)
161164
result.DisableServerErrorLogging = types.FirstSet(opt.DisableServerErrorLogging, result.DisableServerErrorLogging)
162165
}
@@ -165,5 +168,9 @@ func complete(opts ...Options) Options {
165168
result.ListenAddress = "127.0.0.1:0"
166169
}
167170

171+
if result.WorkspaceTool == "" {
172+
result.WorkspaceTool = "github.com/gptscript-ai/workspace-provider"
173+
}
174+
168175
return result
169176
}

pkg/sdkserver/workspaces.go

+15-14
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,20 @@ import (
1111
"github.com/gptscript-ai/gptscript/pkg/loader"
1212
)
1313

14+
func (s *server) getWorkspaceTool(req workspaceCommonRequest) string {
15+
if req.WorkspaceTool != "" {
16+
return req.WorkspaceTool
17+
}
18+
19+
return s.workspaceTool
20+
}
21+
1422
type workspaceCommonRequest struct {
1523
ID string `json:"id"`
1624
WorkspaceTool string `json:"workspaceTool"`
1725
Env []string `json:"env"`
1826
}
1927

20-
func (w workspaceCommonRequest) getToolRepo() string {
21-
if w.WorkspaceTool != "" {
22-
return w.WorkspaceTool
23-
}
24-
return "github.com/gptscript-ai/workspace-provider"
25-
}
26-
2728
type createWorkspaceRequest struct {
2829
workspaceCommonRequest `json:",inline"`
2930
ProviderType string `json:"providerType"`
@@ -38,7 +39,7 @@ func (s *server) createWorkspace(w http.ResponseWriter, r *http.Request) {
3839
return
3940
}
4041

41-
prg, err := loader.Program(r.Context(), reqObject.getToolRepo(), "Create Workspace", loader.Options{Cache: s.client.Cache})
42+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "Create Workspace", loader.Options{Cache: s.client.Cache})
4243
if err != nil {
4344
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
4445
return
@@ -77,7 +78,7 @@ func (s *server) deleteWorkspace(w http.ResponseWriter, r *http.Request) {
7778
return
7879
}
7980

80-
prg, err := loader.Program(r.Context(), reqObject.getToolRepo(), "Delete Workspace", loader.Options{Cache: s.client.Cache})
81+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "Delete Workspace", loader.Options{Cache: s.client.Cache})
8182
if err != nil {
8283
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
8384
return
@@ -114,7 +115,7 @@ func (s *server) listWorkspaceContents(w http.ResponseWriter, r *http.Request) {
114115
return
115116
}
116117

117-
prg, err := loader.Program(r.Context(), reqObject.getToolRepo(), "List Workspace Contents", loader.Options{Cache: s.client.Cache})
118+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "List Workspace Contents", loader.Options{Cache: s.client.Cache})
118119
if err != nil {
119120
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
120121
return
@@ -150,7 +151,7 @@ func (s *server) removeAllWithPrefixInWorkspace(w http.ResponseWriter, r *http.R
150151
return
151152
}
152153

153-
prg, err := loader.Program(r.Context(), reqObject.getToolRepo(), "Remove All With Prefix In Workspace", loader.Options{Cache: s.client.Cache})
154+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "Remove All With Prefix In Workspace", loader.Options{Cache: s.client.Cache})
154155
if err != nil {
155156
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
156157
return
@@ -187,7 +188,7 @@ func (s *server) writeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
187188
return
188189
}
189190

190-
prg, err := loader.Program(r.Context(), reqObject.getToolRepo(), "Write File In Workspace", loader.Options{Cache: s.client.Cache})
191+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "Write File In Workspace", loader.Options{Cache: s.client.Cache})
191192
if err != nil {
192193
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
193194
return
@@ -223,7 +224,7 @@ func (s *server) removeFileInWorkspace(w http.ResponseWriter, r *http.Request) {
223224
return
224225
}
225226

226-
prg, err := loader.Program(r.Context(), reqObject.getToolRepo(), "Remove File In Workspace", loader.Options{Cache: s.client.Cache})
227+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "Remove File In Workspace", loader.Options{Cache: s.client.Cache})
227228
if err != nil {
228229
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
229230
return
@@ -259,7 +260,7 @@ func (s *server) readFileInWorkspace(w http.ResponseWriter, r *http.Request) {
259260
return
260261
}
261262

262-
prg, err := loader.Program(r.Context(), reqObject.getToolRepo(), "Read File In Workspace", loader.Options{Cache: s.client.Cache})
263+
prg, err := loader.Program(r.Context(), s.getWorkspaceTool(reqObject.workspaceCommonRequest), "Read File In Workspace", loader.Options{Cache: s.client.Cache})
263264
if err != nil {
264265
writeError(logger, w, http.StatusInternalServerError, fmt.Errorf("failed to load program: %w", err))
265266
return

0 commit comments

Comments
 (0)