diff options
Diffstat (limited to 'makima/src/server/handlers/mesh_daemon.rs')
| -rw-r--r-- | makima/src/server/handlers/mesh_daemon.rs | 50 |
1 files changed, 18 insertions, 32 deletions
diff --git a/makima/src/server/handlers/mesh_daemon.rs b/makima/src/server/handlers/mesh_daemon.rs index f5a3c10..270118f 100644 --- a/makima/src/server/handlers/mesh_daemon.rs +++ b/makima/src/server/handlers/mesh_daemon.rs @@ -23,7 +23,7 @@ use uuid::Uuid; use crate::db::models::Task; use crate::db::repository; -use crate::llm::{check_deliverables_met, FileInfo, TaskInfo}; +use crate::llm::{check_deliverables_met, TaskInfo}; use crate::server::auth::{hash_api_key, API_KEY_HEADER}; use crate::server::messages::ApiError; use crate::server::state::{ @@ -494,12 +494,6 @@ async fn compute_action_directive( _ => return None, }; - // Get files - let files = match repository::list_files_in_contract(pool, contract_id, owner_id).await { - Ok(f) => f, - _ => return None, - }; - // Get tasks (non-supervisor only) let tasks = match repository::list_tasks_by_contract(pool, contract_id, owner_id).await { Ok(t) => t.into_iter().filter(|t| !t.is_supervisor).collect::<Vec<_>>(), @@ -512,20 +506,12 @@ async fn compute_action_directive( _ => return None, }; - // Convert to FileInfo and TaskInfo for check_deliverables_met - let file_infos: Vec<FileInfo> = files - .iter() - .map(|f| FileInfo { - id: f.id, - name: f.name.clone(), - contract_phase: f.contract_phase.clone(), - }) - .collect(); + // Get completed deliverables for the current phase + let completed_deliverables = contract.get_completed_deliverables(&contract.phase); let task_infos: Vec<TaskInfo> = tasks .iter() .map(|t| TaskInfo { - id: t.id, name: t.name.clone(), status: t.status.clone(), }) @@ -533,29 +519,29 @@ async fn compute_action_directive( let has_repository = !repos.is_empty(); - // Check if any task has a PR URL set - let pr_url = tasks.iter().find_map(|t| t.pr_url.as_deref()); - - // Check deliverables - let check = check_deliverables_met( + // Check deliverables (unused, but kept for future reference) + let _check = check_deliverables_met( &contract.phase, &contract.contract_type, - &file_infos, + &completed_deliverables, &task_infos, has_repository, - pr_url, ); - // Only generate directive if deliverables are met and we're in execute phase - if check.deliverables_met && contract.phase == "execute" { - // All tasks done, need to create PR - if pr_url.is_none() || pr_url.unwrap_or("").is_empty() { - let done_count = task_infos.iter().filter(|t| t.status == "done").count(); + // Generate directive based on deliverable status + if contract.phase == "execute" { + // Check if all tasks are done but PR deliverable is not marked complete + let all_tasks_done = !task_infos.is_empty() + && task_infos.iter().all(|t| t.status == "done"); + let pr_deliverable_complete = completed_deliverables.contains(&"pull-request".to_string()); + + if all_tasks_done && !pr_deliverable_complete { + let done_count = task_infos.len(); return Some(format!( "[ACTION REQUIRED] All {} task(s) completed successfully.\n\ - You MUST now create a PR:\n\ - 1. Ensure all changes are merged to your makima branch\n\ - 2. Create PR: `makima supervisor pr \"makima/...\" --title \"...\" --base main`", + You MUST now create a PR and mark the 'pull-request' deliverable as complete:\n\ + 1. Ensure all changes are merged to your branch\n\ + 2. Create PR and then call mark_deliverable_complete with deliverable_id='pull-request'", done_count )); } |
