diff options
| author | soryu <soryu@soryu.co> | 2026-01-26 18:29:19 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-26 18:29:19 +0000 |
| commit | f57650457b4d38701cb69a0409c9091311a9a026 (patch) | |
| tree | c579ea48f6023c41000960c1e09b7219055cde79 /makima/src | |
| parent | cb4f2fc40dbabb40de948512eee74c7e46264665 (diff) | |
| download | soryu-f57650457b4d38701cb69a0409c9091311a9a026.tar.gz soryu-f57650457b4d38701cb69a0409c9091311a9a026.zip | |
[WIP] Heartbeat checkpoint - 2026-01-26 18:29:19 UTC
Diffstat (limited to 'makima/src')
| -rw-r--r-- | makima/src/daemon/task/manager.rs | 19 | ||||
| -rw-r--r-- | makima/src/daemon/ws/protocol.rs | 3 | ||||
| -rw-r--r-- | makima/src/db/models.rs | 15 | ||||
| -rw-r--r-- | makima/src/server/state.rs | 3 |
4 files changed, 37 insertions, 3 deletions
diff --git a/makima/src/daemon/task/manager.rs b/makima/src/daemon/task/manager.rs index 74a37bf..35675a3 100644 --- a/makima/src/daemon/task/manager.rs +++ b/makima/src/daemon/task/manager.rs @@ -973,6 +973,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. @@ -1774,6 +1776,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 { @@ -1796,6 +1799,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, @@ -2024,6 +2028,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 ==="); @@ -2074,6 +2079,7 @@ impl TaskManager { contract_id, concurrency_key, autonomous_loop, + local_only, created_at: Instant::now(), started_at: None, completed_at: None, @@ -2100,7 +2106,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; @@ -3548,6 +3554,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 ==="); @@ -4627,9 +4634,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, diff --git a/makima/src/daemon/ws/protocol.rs b/makima/src/daemon/ws/protocol.rs index 2e7caef..ed651ec 100644 --- a/makima/src/daemon/ws/protocol.rs +++ b/makima/src/daemon/ws/protocol.rs @@ -422,6 +422,9 @@ pub enum DaemonCommand { /// Commit SHA to apply the patch on top of. #[serde(rename = "patchBaseSha", default, skip_serializing_if = "Option::is_none")] patch_base_sha: Option<String>, + /// Whether the contract is in local-only mode (skips automatic completion actions). + #[serde(rename = "localOnly", default)] + local_only: bool, }, /// Pause a running task. diff --git a/makima/src/db/models.rs b/makima/src/db/models.rs index 0c1d9f2..a3a97be 100644 --- a/makima/src/db/models.rs +++ b/makima/src/db/models.rs @@ -1321,6 +1321,11 @@ pub struct Contract { /// phase outputs (like plans, requirements, etc.) before continuing. #[serde(default)] pub phase_guard: bool, + /// Whether this contract operates in local-only mode. + /// When enabled, automatic completion actions (branch, merge, pr) are skipped, + /// allowing users to manually handle code changes via patch files or other means. + #[serde(default)] + pub local_only: bool, pub version: i32, pub created_at: DateTime<Utc>, pub updated_at: DateTime<Utc>, @@ -1471,6 +1476,11 @@ pub struct CreateContractRequest { /// phase outputs before progressing to the next phase. #[serde(default)] pub phase_guard: Option<bool>, + /// Enable local-only mode for this contract. + /// When enabled, automatic completion actions (branch, merge, pr) are skipped, + /// allowing users to manually handle code changes via patch files or other means. + #[serde(default)] + pub local_only: Option<bool>, } /// Request payload for updating a contract @@ -1492,6 +1502,11 @@ pub struct UpdateContractRequest { /// phase outputs before progressing to the next phase. #[serde(default)] pub phase_guard: Option<bool>, + /// Enable or disable local-only mode for this contract. + /// When enabled, automatic completion actions (branch, merge, pr) are skipped, + /// allowing users to manually handle code changes via patch files or other means. + #[serde(default)] + pub local_only: Option<bool>, /// Version for optimistic locking pub version: Option<i32>, } diff --git a/makima/src/server/state.rs b/makima/src/server/state.rs index b954efe..854c881 100644 --- a/makima/src/server/state.rs +++ b/makima/src/server/state.rs @@ -223,6 +223,9 @@ pub enum DaemonCommand { /// Commit SHA to apply the patch on top of #[serde(rename = "patchBaseSha", default, skip_serializing_if = "Option::is_none")] patch_base_sha: Option<String>, + /// Whether the contract is in local-only mode (skips automatic completion actions) + #[serde(rename = "localOnly", default)] + local_only: bool, }, /// Pause a running task PauseTask { |
