diff --git a/apps/backend/internal/agent/runtime/lifecycle/container.go b/apps/backend/internal/agent/runtime/lifecycle/container.go index a0a983b859..551da4beb8 100644 --- a/apps/backend/internal/agent/runtime/lifecycle/container.go +++ b/apps/backend/internal/agent/runtime/lifecycle/container.go @@ -97,6 +97,8 @@ func namespacesMCPToolsByServerFromAgent(agent agents.Agent) bool { return rt != nil && rt.NamespacesMCPToolsByServer } +// buildContainerCreateInstanceRequest builds the agentctl request for a fresh +// Docker instance, including the task and session identity used by MCP tools. func buildContainerCreateInstanceRequest( config ContainerConfig, agentType string, @@ -116,6 +118,7 @@ func buildContainerCreateInstanceRequest( AutoStart: false, McpServers: config.McpServers, SessionID: config.SessionID, + TaskID: config.TaskID, DisableAskQuestion: disableAskQuestion, AssumeMcpSse: assumeMcpSse, AssumeMcpHttp: assumeMcpHttp, diff --git a/apps/backend/internal/agent/runtime/lifecycle/container_create_instance_test.go b/apps/backend/internal/agent/runtime/lifecycle/container_create_instance_test.go new file mode 100644 index 0000000000..43df9e1246 --- /dev/null +++ b/apps/backend/internal/agent/runtime/lifecycle/container_create_instance_test.go @@ -0,0 +1,18 @@ +package lifecycle + +import "testing" + +// TestBuildContainerCreateInstanceRequestForwardsTaskAndSession verifies that a +// fresh Docker request preserves the identity required by task-bound MCP tools. +func TestBuildContainerCreateInstanceRequestForwardsTaskAndSession(t *testing.T) { + config := ContainerConfig{TaskID: "task-123", SessionID: "session-456"} + + req := buildContainerCreateInstanceRequest(config, "claude-acp", false, false, false, false, nil) + + if req.TaskID != "task-123" { + t.Fatalf("TaskID = %q, want %q", req.TaskID, "task-123") + } + if req.SessionID != "session-456" { + t.Fatalf("SessionID = %q, want %q", req.SessionID, "session-456") + } +}