From 88f4baed7776fe39bd50b98075f4cca9419e8ff7 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 04:28:37 +0000 Subject: [PATCH] feat(agentic): honour dispatch workspace root config Co-Authored-By: Virgil --- pkg/agentic/paths.go | 9 +++++++++ pkg/agentic/queue.go | 2 ++ pkg/agentic/queue_test.go | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/pkg/agentic/paths.go b/pkg/agentic/paths.go index bd5d600..fc5eef1 100644 --- a/pkg/agentic/paths.go +++ b/pkg/agentic/paths.go @@ -15,12 +15,21 @@ import ( // if r.OK { core.Print(nil, "%s", r.Value.(string)) } var fs = (&core.Fs{}).NewUnrestricted() +var workspaceRootOverride string + +func setWorkspaceRootOverride(root string) { + workspaceRootOverride = core.Trim(root) +} + // f := agentic.LocalFs() // r := f.Read("/tmp/agent-status.json") func LocalFs() *core.Fs { return fs } // workspaceDir := core.JoinPath(agentic.WorkspaceRoot(), "core", "go-io", "task-42") func WorkspaceRoot() string { + if root := core.Trim(workspaceRootOverride); root != "" { + return root + } return core.JoinPath(CoreRoot(), "workspace") } diff --git a/pkg/agentic/queue.go b/pkg/agentic/queue.go index 61ae731..e586328 100644 --- a/pkg/agentic/queue.go +++ b/pkg/agentic/queue.go @@ -84,9 +84,11 @@ func (s *PrepSubsystem) loadAgentsConfig() *AgentsConfig { if err := yaml.Unmarshal([]byte(readResult.Value.(string)), &config); err != nil { continue } + setWorkspaceRootOverride(config.Dispatch.WorkspaceRoot) return &config } + setWorkspaceRootOverride("") return &AgentsConfig{ Dispatch: DispatchConfig{ DefaultAgent: "claude", diff --git a/pkg/agentic/queue_test.go b/pkg/agentic/queue_test.go index 26c1769..3124495 100644 --- a/pkg/agentic/queue_test.go +++ b/pkg/agentic/queue_test.go @@ -30,6 +30,27 @@ func TestQueue_DispatchConfig_Good_Defaults(t *testing.T) { assert.Equal(t, 3, cfg.Concurrency["gemini"].Total) } +func TestQueue_DispatchConfig_Good_WorkspaceRootOverride(t *testing.T) { + root := t.TempDir() + t.Setenv("CORE_WORKSPACE", root) + customRoot := core.JoinPath(root, "agent-workspaces") + require.True(t, fs.Write(core.JoinPath(root, "agents.yaml"), core.Concat( + "version: 1\n", + "dispatch:\n", + " workspace_root: ", customRoot, "\n", + )).OK) + + t.Cleanup(func() { + setWorkspaceRootOverride("") + }) + + s := &PrepSubsystem{ServiceRuntime: core.NewServiceRuntime(testCore, AgentOptions{}), codePath: t.TempDir()} + cfg := s.loadAgentsConfig() + + assert.Equal(t, customRoot, cfg.Dispatch.WorkspaceRoot) + assert.Equal(t, customRoot, WorkspaceRoot()) +} + func TestQueue_CanDispatchAgent_Good_NoConfig(t *testing.T) { // With no running workspaces and default config, should be able to dispatch root := t.TempDir()