summaryrefslogtreecommitdiff
path: root/makima/src/server/handlers/contract_chat.rs
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-31 22:17:09 +0000
committerGitHub <noreply@github.com>2026-01-31 22:17:09 +0000
commit3ea2c72e2c50c0d73614d9ac82f41508b6ab1ce4 (patch)
treefbbd53c9e39d9af9dc0e92af5866dd9e3589bf2d /makima/src/server/handlers/contract_chat.rs
parentc526f93aa4255cb581eeb3f7a495c1689683b0a2 (diff)
downloadsoryu-3ea2c72e2c50c0d73614d9ac82f41508b6ab1ce4.tar.gz
soryu-3ea2c72e2c50c0d73614d9ac82f41508b6ab1ce4.zip
Add auto_merge_local option for local-only contracts (#50)
When local_only=true on a contract, all completion actions are skipped. This adds a new option auto_merge_local that, when enabled along with local_only, will automatically merge completed task changes to the master/main branch locally (without pushing or creating PRs). Changes: - Add auto_merge_local column to contracts table (migration) - Add auto_merge_local field to Contract model and summary - Update CreateContractRequest and UpdateContractRequest structs - Update contract repository create/update functions - Add auto_merge_local to WebSocket protocol StartTask command - Pass auto_merge_local through spawn_task and run_task functions - Modify task manager completion logic: if local_only=true AND auto_merge_local=true, execute 'merge' completion action locally - Update all server handlers to retrieve and pass auto_merge_local - Add TypeScript types to frontend components Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'makima/src/server/handlers/contract_chat.rs')
-rw-r--r--makima/src/server/handlers/contract_chat.rs12
1 files changed, 7 insertions, 5 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,