summaryrefslogtreecommitdiff
path: root/internal/api/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/api/server.go')
-rw-r--r--internal/api/server.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/api/server.go b/internal/api/server.go
index 1d87b3f..0868295 100644
--- a/internal/api/server.go
+++ b/internal/api/server.go
@@ -42,6 +42,7 @@ type Server struct {
validateCmdPath string // overrides claudeBinPath for validate; used in tests
scripts ScriptRegistry // optional; maps endpoint name → script path
workDir string // working directory injected into elaborate system prompt
+ workspaceRoot string // root directory for listing workspaces; defaults to "/workspace"
notifier notify.Notifier
apiToken string // if non-empty, required for WebSocket (and REST) connections
elaborateLimiter *ipRateLimiter // per-IP rate limiter for elaborate/validate endpoints
@@ -57,6 +58,11 @@ func (s *Server) SetNotifier(n notify.Notifier) {
s.notifier = n
}
+// SetWorkspaceRoot configures the root directory used by handleListWorkspaces.
+func (s *Server) SetWorkspaceRoot(path string) {
+ s.workspaceRoot = path
+}
+
func NewServer(store *storage.DB, pool *executor.Pool, logger *slog.Logger, claudeBinPath, geminiBinPath string) *Server {
wd, _ := os.Getwd()
s := &Server{
@@ -71,6 +77,7 @@ func NewServer(store *storage.DB, pool *executor.Pool, logger *slog.Logger, clau
claudeBinPath: claudeBinPath,
geminiBinPath: geminiBinPath,
workDir: wd,
+ workspaceRoot: "/workspace",
}
s.routes()
return s
@@ -321,7 +328,7 @@ func (s *Server) handleListWorkspaces(w http.ResponseWriter, r *http.Request) {
}
}
- entries, err := os.ReadDir("/workspace")
+ entries, err := os.ReadDir(s.workspaceRoot)
if err != nil {
writeJSON(w, http.StatusInternalServerError, map[string]string{"error": "failed to list workspaces"})
return
@@ -329,7 +336,7 @@ func (s *Server) handleListWorkspaces(w http.ResponseWriter, r *http.Request) {
var dirs []string
for _, e := range entries {
if e.IsDir() {
- dirs = append(dirs, "/workspace/"+e.Name())
+ dirs = append(dirs, s.workspaceRoot+"/"+e.Name())
}
}
writeJSON(w, http.StatusOK, dirs)