fix(socket): intake-task now returns full task with id #206

Merged
clawdie merged 1 commit from fix/intake-task-return-id into main 2026-06-26 07:33:46 +02:00
2 changed files with 9 additions and 2 deletions

View file

@ -1082,13 +1082,19 @@ async fn cmd_intake_task(
capabilities: Option<Vec<String>>,
) -> ColibriResponse {
let caps = capabilities.unwrap_or_default();
// Create the task immediately so the caller gets the ID back.
let task = match state.store.lock().unwrap().create_task(&title, description.as_deref()) {
Ok(t) => t,
Err(e) => return ColibriResponse::err(format!("create task failed: {e}")),
};
// Also queue for the scheduler tick to route to a capable agent.
let mut scheduler = state.scheduler.lock().await;
scheduler.submit(crate::scheduler::TaskRequest {
title,
description,
required_capabilities: caps,
});
ColibriResponse::ok(serde_json::json!({"status": "queued"}))
ColibriResponse::ok(serde_json::to_value(&task).unwrap_or_default())
}
async fn cmd_set_cost_mode(state: &SharedState, mode: String) -> ColibriResponse {

View file

@ -198,7 +198,8 @@ async fn scheduler_routes_intake_tasks_by_capability() {
r#"{"cmd":"intake-task","title":"scrub zroot","capabilities":["freebsd"]}"#,
)
.await;
assert_eq!(fs_intake["data"]["status"].as_str(), Some("queued"));
// Intake now returns the full task (id + status), not just {"status":"queued"}.
assert!(fs_intake["data"]["id"].is_string(), "intake must return task id");
send_command(
&socket_path,