summaryrefslogtreecommitdiff
path: root/makima/src/server/handlers/mesh_supervisor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'makima/src/server/handlers/mesh_supervisor.rs')
-rw-r--r--makima/src/server/handlers/mesh_supervisor.rs39
1 files changed, 38 insertions, 1 deletions
diff --git a/makima/src/server/handlers/mesh_supervisor.rs b/makima/src/server/handlers/mesh_supervisor.rs
index d0fa4d1..3add89f 100644
--- a/makima/src/server/handlers/mesh_supervisor.rs
+++ b/makima/src/server/handlers/mesh_supervisor.rs
@@ -18,7 +18,7 @@ use crate::db::repository;
use crate::server::auth::Authenticated;
use crate::server::handlers::mesh::{extract_auth, AuthSource};
use crate::server::messages::ApiError;
-use crate::server::state::{DaemonCommand, SharedState};
+use crate::server::state::{DaemonCommand, SharedState, TaskOutputNotification};
// =============================================================================
// Request/Response Types
@@ -1311,6 +1311,43 @@ pub async fn ask_question(
request.context.clone(),
);
+ // Broadcast question as task output entry for the task's chat
+ let question_data = serde_json::json!({
+ "question_id": question_id.to_string(),
+ "choices": request.choices,
+ "context": request.context,
+ });
+ state.broadcast_task_output(TaskOutputNotification {
+ task_id: supervisor_id,
+ owner_id: Some(owner_id),
+ message_type: "supervisor_question".to_string(),
+ content: request.question.clone(),
+ tool_name: None,
+ tool_input: Some(question_data.clone()),
+ is_error: None,
+ cost_usd: None,
+ duration_ms: None,
+ is_partial: false,
+ });
+
+ // Persist to database so it appears when reloading the page
+ // Use event_type "output" with messageType "supervisor_question" to match TaskOutputEntry format
+ if let Some(pool) = state.db_pool.as_ref() {
+ let event_data = serde_json::json!({
+ "messageType": "supervisor_question",
+ "content": request.question,
+ "toolInput": question_data,
+ });
+ let _ = repository::create_task_event(
+ pool,
+ supervisor_id,
+ "output",
+ None,
+ None,
+ Some(event_data),
+ ).await;
+ }
+
// Poll for response with timeout
let timeout_duration = std::time::Duration::from_secs(request.timeout_seconds.max(1) as u64);
let start = std::time::Instant::now();