diff options
Diffstat (limited to 'makima/src/server')
| -rw-r--r-- | makima/src/server/handlers/contract_chat.rs | 12 | ||||
| -rw-r--r-- | makima/src/server/handlers/contracts.rs | 4 | ||||
| -rw-r--r-- | makima/src/server/handlers/mesh.rs | 46 | ||||
| -rw-r--r-- | makima/src/server/handlers/mesh_chat.rs | 11 | ||||
| -rw-r--r-- | makima/src/server/handlers/mesh_supervisor.rs | 4 | ||||
| -rw-r--r-- | makima/src/server/handlers/transcript_analysis.rs | 1 | ||||
| -rw-r--r-- | makima/src/server/state.rs | 3 |
7 files changed, 51 insertions, 30 deletions
diff --git a/makima/src/server/handlers/contract_chat.rs b/makima/src/server/handlers/contract_chat.rs index a066595..b5255f5 100644 --- a/makima/src/server/handlers/contract_chat.rs +++ b/makima/src/server/handlers/contract_chat.rs @@ -1571,14 +1571,14 @@ async fn handle_contract_request( } }; - // Get local_only from contract if task has one - let local_only = if let Some(contract_id) = task.contract_id { + // Get local_only and auto_merge_local from contract if task has one + let (local_only, auto_merge_local) = if let Some(contract_id) = task.contract_id { match repository::get_contract_for_owner(pool, contract_id, owner_id).await { - Ok(Some(contract)) => contract.local_only, - _ => false, + Ok(Some(contract)) => (contract.local_only, contract.auto_merge_local), + _ => (false, false), } } else { - false + (false, false) }; // Send SpawnTask command to daemon @@ -1604,6 +1604,7 @@ async fn handle_contract_request( patch_data: None, patch_base_sha: None, local_only, + auto_merge_local, supervisor_worktree_task_id: None, // Not spawned by supervisor }; @@ -2593,6 +2594,7 @@ async fn handle_contract_request( autonomous_loop: None, phase_guard: None, local_only: None, + auto_merge_local: None, red_team_enabled: None, red_team_prompt: None, template_id: None, diff --git a/makima/src/server/handlers/contracts.rs b/makima/src/server/handlers/contracts.rs index 9979c1f..6c237dc 100644 --- a/makima/src/server/handlers/contracts.rs +++ b/makima/src/server/handlers/contracts.rs @@ -369,6 +369,7 @@ pub async fn create_contract( status: contract.status, supervisor_task_id: contract.supervisor_task_id, local_only: contract.local_only, + auto_merge_local: contract.auto_merge_local, red_team_enabled: contract.red_team_enabled, file_count: 0, task_count: 0, @@ -392,6 +393,7 @@ pub async fn create_contract( status: contract.status, supervisor_task_id: contract.supervisor_task_id, local_only: contract.local_only, + auto_merge_local: contract.auto_merge_local, red_team_enabled: contract.red_team_enabled, file_count: 0, task_count: 0, @@ -522,6 +524,7 @@ pub async fn update_contract( status: contract.status, supervisor_task_id: contract.supervisor_task_id, local_only: contract.local_only, + auto_merge_local: contract.auto_merge_local, red_team_enabled: contract.red_team_enabled, file_count: 0, task_count: 0, @@ -1408,6 +1411,7 @@ pub async fn change_phase( status: updated_contract.status, supervisor_task_id: updated_contract.supervisor_task_id, local_only: updated_contract.local_only, + auto_merge_local: updated_contract.auto_merge_local, red_team_enabled: updated_contract.red_team_enabled, file_count: 0, task_count: 0, diff --git a/makima/src/server/handlers/mesh.rs b/makima/src/server/handlers/mesh.rs index 9ef6248..af77b56 100644 --- a/makima/src/server/handlers/mesh.rs +++ b/makima/src/server/handlers/mesh.rs @@ -601,14 +601,14 @@ pub async fn start_task( .into_response(); } - // Get local_only flag from contract if task has one - let local_only = if let Some(contract_id) = task.contract_id { + // Get local_only and auto_merge_local flags from contract if task has one + let (local_only, auto_merge_local) = if let Some(contract_id) = task.contract_id { match repository::get_contract_for_owner(pool, contract_id, auth.owner_id).await { - Ok(Some(contract)) => contract.local_only, - _ => false, + Ok(Some(contract)) => (contract.local_only, contract.auto_merge_local), + _ => (false, false), } } else { - false + (false, false) }; // Get list of daemons that have previously failed this task @@ -707,6 +707,7 @@ pub async fn start_task( patch_data: None, patch_base_sha: None, local_only, + auto_merge_local, supervisor_worktree_task_id: None, // Not spawned by supervisor }; @@ -761,6 +762,7 @@ pub async fn start_task( patch_data: None, patch_base_sha: None, local_only, + auto_merge_local, supervisor_worktree_task_id: None, // Not spawned by supervisor }; @@ -1144,14 +1146,14 @@ pub async fn send_message( }; if let Ok(Some(updated_task)) = repository::update_task_for_owner(pool, id, auth.owner_id, update_req).await { - // Get local_only from contract if task has one - let local_only = if let Some(contract_id) = updated_task.contract_id { + // Get local_only and auto_merge_local from contract if task has one + let (local_only, auto_merge_local) = if let Some(contract_id) = updated_task.contract_id { match repository::get_contract_for_owner(pool, contract_id, auth.owner_id).await { - Ok(Some(contract)) => contract.local_only, - _ => false, + Ok(Some(contract)) => (contract.local_only, contract.auto_merge_local), + _ => (false, false), } } else { - false + (false, false) }; // Send spawn command to new daemon @@ -1177,6 +1179,7 @@ pub async fn send_message( patch_data: None, patch_base_sha: None, local_only, + auto_merge_local, supervisor_worktree_task_id: None, // Not spawned by supervisor }; @@ -2689,14 +2692,14 @@ pub async fn reassign_task( } }; - // Get local_only from contract if task has one - let local_only = if let Some(contract_id) = task.contract_id { + // Get local_only and auto_merge_local from contract if task has one + let (local_only, auto_merge_local) = if let Some(contract_id) = task.contract_id { match repository::get_contract_for_owner(pool, contract_id, auth.owner_id).await { - Ok(Some(contract)) => contract.local_only, - _ => false, + Ok(Some(contract)) => (contract.local_only, contract.auto_merge_local), + _ => (false, false), } } else { - false + (false, false) }; // Send SpawnTask command to daemon for the new task @@ -2722,6 +2725,7 @@ pub async fn reassign_task( patch_data, patch_base_sha, local_only, + auto_merge_local, supervisor_worktree_task_id: None, // Not spawned by supervisor }; @@ -3028,14 +3032,14 @@ pub async fn continue_task( }; let is_orchestrator = task.depth == 0 && subtask_count > 0; - // Get local_only from contract if task has one - let local_only = if let Some(contract_id) = task.contract_id { + // Get local_only and auto_merge_local from contract if task has one + let (local_only, auto_merge_local) = if let Some(contract_id) = task.contract_id { match repository::get_contract_for_owner(pool, contract_id, auth.owner_id).await { - Ok(Some(contract)) => contract.local_only, - _ => false, + Ok(Some(contract)) => (contract.local_only, contract.auto_merge_local), + _ => (false, false), } } else { - false + (false, false) }; // Send SpawnTask command to daemon @@ -3061,6 +3065,7 @@ pub async fn continue_task( patch_data: None, patch_base_sha: None, local_only, + auto_merge_local, supervisor_worktree_task_id: None, // Not spawned by supervisor }; @@ -3989,6 +3994,7 @@ pub async fn branch_task( patch_data, patch_base_sha, local_only: false, // No contract, so not local_only + auto_merge_local: false, // No contract, so no auto_merge_local supervisor_worktree_task_id: None, // Not spawned by supervisor }; diff --git a/makima/src/server/handlers/mesh_chat.rs b/makima/src/server/handlers/mesh_chat.rs index 623e66d..eee899f 100644 --- a/makima/src/server/handlers/mesh_chat.rs +++ b/makima/src/server/handlers/mesh_chat.rs @@ -1133,14 +1133,14 @@ async fn handle_mesh_request( } }; - // Get local_only from contract if task has one - let local_only = if let Some(contract_id) = task.contract_id { + // Get local_only and auto_merge_local from contract if task has one + let (local_only, auto_merge_local) = if let Some(contract_id) = task.contract_id { match repository::get_contract_for_owner(pool, contract_id, owner_id).await { - Ok(Some(contract)) => contract.local_only, - _ => false, + Ok(Some(contract)) => (contract.local_only, contract.auto_merge_local), + _ => (false, false), } } else { - false + (false, false) }; // Send SpawnTask command to daemon @@ -1166,6 +1166,7 @@ async fn handle_mesh_request( patch_data: None, patch_base_sha: None, local_only, + auto_merge_local, supervisor_worktree_task_id: None, // Not spawned by supervisor }; diff --git a/makima/src/server/handlers/mesh_supervisor.rs b/makima/src/server/handlers/mesh_supervisor.rs index 5e74251..3411ec0 100644 --- a/makima/src/server/handlers/mesh_supervisor.rs +++ b/makima/src/server/handlers/mesh_supervisor.rs @@ -410,6 +410,7 @@ pub async fn try_start_pending_task( patch_data, patch_base_sha, local_only: contract.local_only, + auto_merge_local: contract.auto_merge_local, // For retried tasks, use their own worktree (they already have state from previous attempt) supervisor_worktree_task_id: None, }; @@ -730,6 +731,7 @@ pub async fn spawn_task( patch_data: None, patch_base_sha: None, local_only: contract.local_only, + auto_merge_local: contract.auto_merge_local, // Share supervisor's worktree by default; separate worktree only when explicitly requested supervisor_worktree_task_id: if request.use_own_worktree { None } else { Some(supervisor_id) }, }; @@ -2257,6 +2259,7 @@ pub async fn resume_supervisor( patch_data, patch_base_sha, local_only: contract.local_only, + auto_merge_local: contract.auto_merge_local, supervisor_worktree_task_id: None, // Supervisor uses its own worktree }; @@ -2703,6 +2706,7 @@ pub async fn spawn_red_team_task( patch_data: None, patch_base_sha: None, local_only: true, // Red team is always local-only + auto_merge_local: false, // Red team doesn't auto-merge supervisor_worktree_task_id: None, }; diff --git a/makima/src/server/handlers/transcript_analysis.rs b/makima/src/server/handlers/transcript_analysis.rs index 920851c..d987d08 100644 --- a/makima/src/server/handlers/transcript_analysis.rs +++ b/makima/src/server/handlers/transcript_analysis.rs @@ -279,6 +279,7 @@ pub async fn create_contract_from_analysis( autonomous_loop: None, phase_guard: None, local_only: None, + auto_merge_local: None, red_team_enabled: None, red_team_prompt: None, template_id: None, diff --git a/makima/src/server/state.rs b/makima/src/server/state.rs index 8a9bb7f..f662e30 100644 --- a/makima/src/server/state.rs +++ b/makima/src/server/state.rs @@ -274,6 +274,9 @@ pub enum DaemonCommand { /// Whether the contract is in local-only mode (skips automatic completion actions) #[serde(rename = "localOnly", default)] local_only: bool, + /// Whether to auto-merge to target branch locally when local_only mode is enabled + #[serde(rename = "autoMergeLocal", default)] + auto_merge_local: bool, /// Task ID to share worktree with (supervisor's task ID). If Some, use that task's worktree instead of creating a new one. #[serde(rename = "supervisorWorktreeTaskId", default, skip_serializing_if = "Option::is_none")] supervisor_worktree_task_id: Option<Uuid>, |
