summaryrefslogtreecommitdiff
path: root/makima/src/daemon/task
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-02-09 15:55:01 +0000
committersoryu <soryu@soryu.co>2026-02-09 15:55:01 +0000
commit339c1769379a851c4126021132573bd4b7994cf2 (patch)
tree8a9a3cdc9d86b3dc2e6883853fb7b22c21dd9e99 /makima/src/daemon/task
parentbfa7bd8d7609397f570f1cd9b83d2269abc0ed63 (diff)
downloadsoryu-339c1769379a851c4126021132573bd4b7994cf2.tar.gz
soryu-339c1769379a851c4126021132573bd4b7994cf2.zip
Set directive env vars correctly for daemon
Diffstat (limited to 'makima/src/daemon/task')
-rw-r--r--makima/src/daemon/task/manager.rs43
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();