diff options
| author | soryu <soryu@soryu.co> | 2026-01-26 20:27:40 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-26 20:27:40 +0000 |
| commit | bffce4eede3d487071632808b6e990846e2e6973 (patch) | |
| tree | 237ec9aff47057f93508e1e8759d2aa1ec00d1b8 /makima/src/daemon/task | |
| parent | 3dd8f32bad2b3ba886f0b0ab4c4796fd67ec0bca (diff) | |
| parent | 950fd7e57538ccb20fab6100ad86951d8f6108b4 (diff) | |
| download | soryu-bffce4eede3d487071632808b6e990846e2e6973.tar.gz soryu-bffce4eede3d487071632808b6e990846e2e6973.zip | |
Phase 1.2 & 2.1: Skip auto-completion for local_only tasks
Diffstat (limited to 'makima/src/daemon/task')
| -rw-r--r-- | makima/src/daemon/task/manager.rs | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/makima/src/daemon/task/manager.rs b/makima/src/daemon/task/manager.rs index 8abff3f..27018e3 100644 --- a/makima/src/daemon/task/manager.rs +++ b/makima/src/daemon/task/manager.rs @@ -995,6 +995,8 @@ pub struct ManagedTask { pub concurrency_key: Uuid, /// Whether to run in autonomous loop mode. pub autonomous_loop: bool, + /// Whether the contract is in local-only mode (skips automatic completion actions). + pub local_only: bool, /// Time task was created. pub created_at: Instant, /// Time task started running. @@ -1692,6 +1694,7 @@ impl TaskManager { conversation_history, patch_data, patch_base_sha, + local_only, } => { tracing::info!( task_id = %task_id, @@ -1718,7 +1721,7 @@ impl TaskManager { parent_task_id, depth, is_orchestrator, is_supervisor, target_repo_path, completion_action, continue_from_task_id, copy_files, contract_id, autonomous_loop, resume_session, - conversation_history, patch_data, patch_base_sha, + conversation_history, patch_data, patch_base_sha, local_only, ).await?; } DaemonCommand::PauseTask { task_id } => { @@ -1796,6 +1799,7 @@ impl TaskManager { let target_repo_path = task.target_repo_path.clone(); let completion_action = task.completion_action.clone(); let contract_id = task.contract_id; + let local_only = task.local_only; // Spawn in background to not block the command handler tokio::spawn(async move { @@ -1818,6 +1822,7 @@ impl TaskManager { None, // conversation_history - not needed for fresh respawn None, // patch_data - not available for respawn None, // patch_base_sha - not available for respawn + local_only, ).await { tracing::error!( task_id = %task_id, @@ -2046,6 +2051,7 @@ impl TaskManager { conversation_history: Option<serde_json::Value>, patch_data: Option<String>, patch_base_sha: Option<String>, + local_only: bool, ) -> TaskResult<()> { tracing::info!(task_id = %task_id, is_orchestrator = is_orchestrator, is_supervisor = is_supervisor, depth = depth, patch_available = patch_data.is_some(), "=== SPAWN_TASK START ==="); @@ -2096,6 +2102,7 @@ impl TaskManager { contract_id, concurrency_key, autonomous_loop, + local_only, created_at: Instant::now(), started_at: None, completed_at: None, @@ -2122,7 +2129,7 @@ impl TaskManager { task_id, task_name, plan, repo_url, base_branch, target_branch, is_orchestrator, is_supervisor, target_repo_path, completion_action, continue_from_task_id, copy_files, contract_id, autonomous_loop, resume_session, - conversation_history, patch_data, patch_base_sha, + conversation_history, patch_data, patch_base_sha, local_only, ).await { tracing::error!(task_id = %task_id, error = %e, "Task execution failed"); inner.mark_failed(task_id, &e.to_string()).await; @@ -3570,6 +3577,7 @@ impl TaskManagerInner { conversation_history: Option<serde_json::Value>, patch_data: Option<String>, patch_base_sha: Option<String>, + local_only: bool, ) -> Result<(), DaemonError> { tracing::info!(task_id = %task_id, is_orchestrator = is_orchestrator, is_supervisor = is_supervisor, resume_session = resume_session, has_patch = patch_data.is_some(), "=== RUN_TASK START ==="); @@ -4704,9 +4712,15 @@ impl TaskManagerInner { } } - // Execute completion action if task succeeded + // Execute completion action if task succeeded (skip in local_only mode) let completion_result = if success { - if let Some(ref action) = completion_action { + if local_only { + tracing::info!( + task_id = %task_id, + "Skipping completion action - contract is in local_only mode" + ); + Ok(None) + } else if let Some(ref action) = completion_action { if action != "none" { self.execute_completion_action( task_id, |
