From 8eac594b3b8820fc6a7b59162f0ad0c78e83604d Mon Sep 17 00:00:00 2001 From: Harry Date: Thu, 23 Apr 2026 15:47:38 -0400 Subject: [PATCH 1/3] add conversation flag to worker --- internal/common/task_utils.go | 8 ++++++++ internal/common/task_utils_test.go | 26 ++++++++++++++++++++++++++ internal/types/messages.go | 4 ++++ 3 files changed, 38 insertions(+) diff --git a/internal/common/task_utils.go b/internal/common/task_utils.go index d3f7bab..04a611c 100644 --- a/internal/common/task_utils.go +++ b/internal/common/task_utils.go @@ -114,6 +114,14 @@ func AugmentArgsForTask(task *types.Task, args []string, opts TaskAugmentOptions args = append(args, "--idle-on-complete", idleOnComplete) } + // If the server linked this task to an existing AI conversation, forward the id so the + // embedded warp CLI can resume that conversation's state (Oz or Claude Code). + if task.AgentConversationID != nil { + if id := strings.TrimSpace(*task.AgentConversationID); id != "" { + args = append(args, "--conversation", id) + } + } + return args } diff --git a/internal/common/task_utils_test.go b/internal/common/task_utils_test.go index 0e9f6e1..68a5198 100644 --- a/internal/common/task_utils_test.go +++ b/internal/common/task_utils_test.go @@ -149,6 +149,23 @@ func TestAugmentArgsForTask_IdleOnCompletePrecedence(t *testing.T) { opts: TaskAugmentOptions{}, expected: []string{"agent", "run", "--idle-on-complete"}, }, + { + name: "appends --conversation when AgentConversationID is set", + task: &types.Task{ + AgentConfigSnapshot: &types.AmbientAgentConfig{}, + AgentConversationID: strPtr("abc-123"), + }, + opts: TaskAugmentOptions{}, + expected: []string{"agent", "run", "--idle-on-complete", "--conversation", "abc-123"}, + }, + { + name: "omits --conversation when AgentConversationID is nil", + task: &types.Task{ + AgentConfigSnapshot: &types.AmbientAgentConfig{}, + }, + opts: TaskAugmentOptions{}, + expected: []string{"agent", "run", "--idle-on-complete"}, + }, { name: "skips --share public when public_access is nil", task: &types.Task{ @@ -159,6 +176,15 @@ func TestAugmentArgsForTask_IdleOnCompletePrecedence(t *testing.T) { opts: TaskAugmentOptions{}, expected: []string{"agent", "run", "--idle-on-complete"}, }, + { + name: "omits --conversation when AgentConversationID is whitespace-only", + task: &types.Task{ + AgentConfigSnapshot: &types.AmbientAgentConfig{}, + AgentConversationID: strPtr(" "), + }, + opts: TaskAugmentOptions{}, + expected: []string{"agent", "run", "--idle-on-complete"}, + }, { name: "silently omits --share public for unsupported access levels (defensive: FULL rejected earlier)", task: &types.Task{ diff --git a/internal/types/messages.go b/internal/types/messages.go index 7a3d818..a900110 100644 --- a/internal/types/messages.go +++ b/internal/types/messages.go @@ -132,4 +132,8 @@ type Task struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` AgentConfigSnapshot *AmbientAgentConfig `json:"agent_config_snapshot,omitempty"` + // AgentConversationID is the UUID of an existing AI conversation the server wants the + // embedded warp CLI to resume. When set, the worker appends `--conversation ` to the + // `oz agent run` invocation (see common.AugmentArgsForTask). Nil for fresh runs. + AgentConversationID *string `json:"agent_conversation_id,omitempty"` } From 657434106ee9958c2639e32eb7e9ac24554289c7 Mon Sep 17 00:00:00 2001 From: Harry Date: Thu, 23 Apr 2026 17:31:47 -0400 Subject: [PATCH 2/3] remvoe conversation id from task assignment message --- internal/types/messages.go | 2 -- internal/worker/worker.go | 3 --- 2 files changed, 5 deletions(-) diff --git a/internal/types/messages.go b/internal/types/messages.go index a900110..997a07f 100644 --- a/internal/types/messages.go +++ b/internal/types/messages.go @@ -41,8 +41,6 @@ type TaskAssignmentMessage struct { EnvVars map[string]string `json:"env_vars,omitempty"` // AdditionalSidecars is a list of extra sidecar images to mount into the task container. AdditionalSidecars []SidecarMount `json:"additional_sidecars,omitempty"` - // ConversationID is the UUID of an existing AI conversation to continue. - ConversationID string `json:"conversation_id,omitempty"` } // TaskClaimedMessage is sent from worker to server after successfully claiming a task diff --git a/internal/worker/worker.go b/internal/worker/worker.go index 8214fdc..038c7ce 100644 --- a/internal/worker/worker.go +++ b/internal/worker/worker.go @@ -375,9 +375,6 @@ func (w *Worker) prepareTaskParams(assignment *types.TaskAssignmentMessage) *Tas "--server-root-url", w.config.ServerRootURL, } - if assignment.ConversationID != "" { - baseArgs = append(baseArgs, "--conversation", assignment.ConversationID) - } baseArgs = common.AugmentArgsForTask(task, baseArgs, common.TaskAugmentOptions{ IdleOnComplete: w.config.IdleOnComplete, }) From ec08532022ae460a8b49b0da7b46c2d93095f2ee Mon Sep 17 00:00:00 2001 From: Harry Date: Mon, 27 Apr 2026 13:28:28 -0400 Subject: [PATCH 3/3] remove conversation id forwarding (for now) --- internal/common/task_utils.go | 8 -------- internal/common/task_utils_test.go | 19 +------------------ internal/types/messages.go | 5 +---- 3 files changed, 2 insertions(+), 30 deletions(-) diff --git a/internal/common/task_utils.go b/internal/common/task_utils.go index 04a611c..d3f7bab 100644 --- a/internal/common/task_utils.go +++ b/internal/common/task_utils.go @@ -114,14 +114,6 @@ func AugmentArgsForTask(task *types.Task, args []string, opts TaskAugmentOptions args = append(args, "--idle-on-complete", idleOnComplete) } - // If the server linked this task to an existing AI conversation, forward the id so the - // embedded warp CLI can resume that conversation's state (Oz or Claude Code). - if task.AgentConversationID != nil { - if id := strings.TrimSpace(*task.AgentConversationID); id != "" { - args = append(args, "--conversation", id) - } - } - return args } diff --git a/internal/common/task_utils_test.go b/internal/common/task_utils_test.go index 68a5198..2c3c064 100644 --- a/internal/common/task_utils_test.go +++ b/internal/common/task_utils_test.go @@ -150,20 +150,12 @@ func TestAugmentArgsForTask_IdleOnCompletePrecedence(t *testing.T) { expected: []string{"agent", "run", "--idle-on-complete"}, }, { - name: "appends --conversation when AgentConversationID is set", + name: "does not forward --conversation even when AgentConversationID is set; the embedded warp CLI reads it off task metadata", task: &types.Task{ AgentConfigSnapshot: &types.AmbientAgentConfig{}, AgentConversationID: strPtr("abc-123"), }, opts: TaskAugmentOptions{}, - expected: []string{"agent", "run", "--idle-on-complete", "--conversation", "abc-123"}, - }, - { - name: "omits --conversation when AgentConversationID is nil", - task: &types.Task{ - AgentConfigSnapshot: &types.AmbientAgentConfig{}, - }, - opts: TaskAugmentOptions{}, expected: []string{"agent", "run", "--idle-on-complete"}, }, { @@ -176,15 +168,6 @@ func TestAugmentArgsForTask_IdleOnCompletePrecedence(t *testing.T) { opts: TaskAugmentOptions{}, expected: []string{"agent", "run", "--idle-on-complete"}, }, - { - name: "omits --conversation when AgentConversationID is whitespace-only", - task: &types.Task{ - AgentConfigSnapshot: &types.AmbientAgentConfig{}, - AgentConversationID: strPtr(" "), - }, - opts: TaskAugmentOptions{}, - expected: []string{"agent", "run", "--idle-on-complete"}, - }, { name: "silently omits --share public for unsupported access levels (defensive: FULL rejected earlier)", task: &types.Task{ diff --git a/internal/types/messages.go b/internal/types/messages.go index 997a07f..532f27e 100644 --- a/internal/types/messages.go +++ b/internal/types/messages.go @@ -130,8 +130,5 @@ type Task struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` AgentConfigSnapshot *AmbientAgentConfig `json:"agent_config_snapshot,omitempty"` - // AgentConversationID is the UUID of an existing AI conversation the server wants the - // embedded warp CLI to resume. When set, the worker appends `--conversation ` to the - // `oz agent run` invocation (see common.AugmentArgsForTask). Nil for fresh runs. - AgentConversationID *string `json:"agent_conversation_id,omitempty"` + AgentConversationID *string `json:"agent_conversation_id,omitempty"` }