feat: sub-agent streaming progress — TaskTool emits real-time status events
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
- Rust: LoopEvent::SubtaskStatus variant added to loop_runner.rs - Rust: ToolContext.event_sender field for streaming tool progress - Rust: TaskTool emits started/running/completed/failed via event_sender - Rust: StreamChatEvent::SubtaskStatus mapped in Tauri chat command - TS: StreamEventSubtaskStatus type + onSubtaskStatus callback added - TS: kernel-chat.ts handles subtaskStatus event from Tauri - TS: streamStore.ts wires callback, maps backend→frontend status, updates assistant message subtasks array in real-time
This commit is contained in:
@@ -206,6 +206,7 @@ impl AgentLoop {
|
||||
session_id: Some(session_id.to_string()),
|
||||
skill_executor: self.skill_executor.clone(),
|
||||
path_validator: Some(path_validator),
|
||||
event_sender: None,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -880,6 +881,7 @@ impl AgentLoop {
|
||||
session_id: Some(session_id_clone.to_string()),
|
||||
skill_executor: skill_executor.clone(),
|
||||
path_validator: Some(pv),
|
||||
event_sender: Some(tx.clone()),
|
||||
};
|
||||
let (result, is_error) = if let Some(tool) = tools.get(&name) {
|
||||
match tool.execute(new_input, &tool_context).await {
|
||||
@@ -945,6 +947,7 @@ impl AgentLoop {
|
||||
session_id: Some(session_id_clone.to_string()),
|
||||
skill_executor: skill_executor.clone(),
|
||||
path_validator: Some(pv),
|
||||
event_sender: Some(tx.clone()),
|
||||
};
|
||||
|
||||
let (result, is_error) = if let Some(tool) = tools.get(&name) {
|
||||
@@ -1008,6 +1011,12 @@ pub enum LoopEvent {
|
||||
ToolStart { name: String, input: serde_json::Value },
|
||||
/// Tool execution completed
|
||||
ToolEnd { name: String, output: serde_json::Value },
|
||||
/// Sub-agent task status update (started/running/completed/failed)
|
||||
SubtaskStatus {
|
||||
description: String,
|
||||
status: String,
|
||||
detail: Option<String>,
|
||||
},
|
||||
/// New iteration started (multi-turn tool calling)
|
||||
IterationStart { iteration: usize, max_iterations: usize },
|
||||
/// Loop completed with final result
|
||||
|
||||
Reference in New Issue
Block a user