diff options
| author | soryu <soryu@soryu.co> | 2026-02-09 15:55:01 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-02-09 15:55:01 +0000 |
| commit | 339c1769379a851c4126021132573bd4b7994cf2 (patch) | |
| tree | 8a9a3cdc9d86b3dc2e6883853fb7b22c21dd9e99 /makima/src/daemon/task/manager.rs | |
| parent | bfa7bd8d7609397f570f1cd9b83d2269abc0ed63 (diff) | |
| download | soryu-339c1769379a851c4126021132573bd4b7994cf2.tar.gz soryu-339c1769379a851c4126021132573bd4b7994cf2.zip | |
Set directive env vars correctly for daemon
Diffstat (limited to 'makima/src/daemon/task/manager.rs')
| -rw-r--r-- | makima/src/daemon/task/manager.rs | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/makima/src/daemon/task/manager.rs b/makima/src/daemon/task/manager.rs index ae84294..68c5c42 100644 --- a/makima/src/daemon/task/manager.rs +++ b/makima/src/daemon/task/manager.rs @@ -1538,6 +1538,7 @@ impl TaskManager { local_only, auto_merge_local, supervisor_worktree_task_id, + directive_id, } => { tracing::info!( task_id = %task_id, @@ -1556,6 +1557,7 @@ impl TaskManager { continue_from_task_id = ?continue_from_task_id, copy_files = ?copy_files, contract_id = ?contract_id, + directive_id = ?directive_id, supervisor_worktree_task_id = ?supervisor_worktree_task_id, plan_len = plan.len(), "Spawning new task" @@ -1566,7 +1568,7 @@ impl TaskManager { target_repo_path, completion_action, continue_from_task_id, copy_files, contract_id, autonomous_loop, resume_session, conversation_history, patch_data, patch_base_sha, local_only, auto_merge_local, - supervisor_worktree_task_id, + supervisor_worktree_task_id, directive_id, ).await?; } DaemonCommand::PauseTask { task_id } => { @@ -1671,6 +1673,7 @@ impl TaskManager { local_only, auto_merge_local, None, // supervisor_worktree_task_id - supervisors use their own worktree + None, // directive_id ).await { tracing::error!( task_id = %task_id, @@ -1928,6 +1931,7 @@ impl TaskManager { local_only: bool, auto_merge_local: bool, supervisor_worktree_task_id: Option<Uuid>, + directive_id: Option<Uuid>, ) -> 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 ==="); @@ -2009,7 +2013,7 @@ impl TaskManager { 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, local_only, auto_merge_local, - supervisor_worktree_task_id, + supervisor_worktree_task_id, directive_id, ).await { tracing::error!(task_id = %task_id, error = %e, "Task execution failed"); inner.mark_failed(task_id, &e.to_string()).await; @@ -4115,6 +4119,7 @@ impl TaskManagerInner { local_only: bool, auto_merge_local: bool, supervisor_worktree_task_id: Option<Uuid>, + directive_id: Option<Uuid>, ) -> 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 ==="); @@ -4825,6 +4830,40 @@ impl TaskManagerInner { (extra_env, full_plan, system_prompt) }; + // Add directive environment if task has directive_id + let (extra_env, full_plan, system_prompt) = if let Some(did) = directive_id { + tracing::info!(task_id = %task_id, directive_id = %did, "Setting up directive integration"); + + let mut env = extra_env.unwrap_or_default(); + env.insert("MAKIMA_DIRECTIVE_ID".to_string(), did.to_string()); + + // If not already an orchestrator/supervisor, we need API access for makima CLI + if !is_orchestrator && !is_supervisor && !env.contains_key("MAKIMA_API_KEY") { + let tool_key = generate_tool_key(); + tracing::info!(task_id = %task_id, "Generated tool key for directive access"); + + let register_msg = DaemonMessage::register_tool_key(task_id, tool_key.clone()); + if self.ws_tx.send(register_msg).await.is_err() { + tracing::warn!(task_id = %task_id, "Failed to register directive tool key"); + } + + env.insert("MAKIMA_API_URL".to_string(), self.api_url.clone()); + env.insert("MAKIMA_API_KEY".to_string(), tool_key); + env.insert("MAKIMA_TASK_ID".to_string(), task_id.to_string()); + } + + let msg = DaemonMessage::task_output( + task_id, + "Directive integration ready (makima CLI available)\n".to_string(), + false, + ); + let _ = self.ws_tx.send(msg).await; + + (Some(env), full_plan, system_prompt) + } else { + (extra_env, full_plan, system_prompt) + }; + // Spawn Claude process let plan_bytes = full_plan.len(); let plan_chars = full_plan.chars().count(); |
