修复消息渠道的事件未触发

This commit is contained in:
xintaofei
2026-03-31 14:05:03 +08:00
parent f06360a59d
commit 0bc470181d
4 changed files with 18 additions and 11 deletions

View File

@@ -288,6 +288,7 @@ pub async fn spawn_agent_connection(
AcpEvent::Error { AcpEvent::Error {
connection_id: conn_id.clone(), connection_id: conn_id.clone(),
message: e.to_string(), message: e.to_string(),
agent_type: agent_type.to_string(),
}, },
); );
} }
@@ -829,6 +830,7 @@ async fn run_connection(
message: format!( message: format!(
"Failed to load session, starting new: {e}" "Failed to load session, starting new: {e}"
), ),
agent_type: agent_type.to_string(),
}, },
); );
} }
@@ -1578,6 +1580,7 @@ async fn run_conversation_loop<'a>(
AcpEvent::Error { AcpEvent::Error {
connection_id: conn_id.into(), connection_id: conn_id.into(),
message: "Prompt must contain at least one content block".into(), message: "Prompt must contain at least one content block".into(),
agent_type: agent_type.to_string(),
}, },
); );
continue; continue;
@@ -1684,6 +1687,7 @@ async fn run_conversation_loop<'a>(
connection_id: conn_id.into(), connection_id: conn_id.into(),
session_id: sid.0.to_string(), session_id: sid.0.to_string(),
stop_reason: reason_str.into(), stop_reason: reason_str.into(),
agent_type: agent_type.to_string(),
}, },
); );
break; break;
@@ -1715,6 +1719,7 @@ async fn run_conversation_loop<'a>(
connection_id: conn_id.into(), connection_id: conn_id.into(),
session_id: sid.0.to_string(), session_id: sid.0.to_string(),
stop_reason: reason_str.into(), stop_reason: reason_str.into(),
agent_type: agent_type.to_string(),
}, },
); );
break; break;
@@ -1762,6 +1767,7 @@ async fn run_conversation_loop<'a>(
AcpEvent::Error { AcpEvent::Error {
connection_id: conn_id.into(), connection_id: conn_id.into(),
message: format!("Failed to set mode: {e}"), message: format!("Failed to set mode: {e}"),
agent_type: agent_type.to_string(),
}, },
); );
} }
@@ -1788,6 +1794,7 @@ async fn run_conversation_loop<'a>(
AcpEvent::Error { AcpEvent::Error {
connection_id: conn_id.into(), connection_id: conn_id.into(),
message: format!("Failed to set config option: {e}"), message: format!("Failed to set config option: {e}"),
agent_type: agent_type.to_string(),
}, },
); );
} }
@@ -1823,6 +1830,7 @@ async fn run_conversation_loop<'a>(
connection_id: conn_id.into(), connection_id: conn_id.into(),
session_id: sid.0.to_string(), session_id: sid.0.to_string(),
stop_reason: "cancelled".into(), stop_reason: "cancelled".into(),
agent_type: agent_type.to_string(),
}, },
); );
// Drain the prompt response in the background so // Drain the prompt response in the background so
@@ -1895,6 +1903,7 @@ async fn run_conversation_loop<'a>(
AcpEvent::Error { AcpEvent::Error {
connection_id: conn_id.into(), connection_id: conn_id.into(),
message: format!("Failed to set mode: {e}"), message: format!("Failed to set mode: {e}"),
agent_type: agent_type.to_string(),
}, },
); );
} }
@@ -1914,6 +1923,7 @@ async fn run_conversation_loop<'a>(
AcpEvent::Error { AcpEvent::Error {
connection_id: conn_id.into(), connection_id: conn_id.into(),
message: format!("Failed to set config option: {e}"), message: format!("Failed to set config option: {e}"),
agent_type: agent_type.to_string(),
}, },
); );
} }

View File

@@ -82,6 +82,7 @@ pub enum AcpEvent {
connection_id: String, connection_id: String,
session_id: String, session_id: String,
stop_reason: String, stop_reason: String,
agent_type: String,
}, },
/// Session established with agent-assigned session ID /// Session established with agent-assigned session ID
SessionStarted { SessionStarted {
@@ -129,6 +130,7 @@ pub enum AcpEvent {
Error { Error {
connection_id: String, connection_id: String,
message: String, message: String,
agent_type: String,
}, },
/// Available slash commands updated /// Available slash commands updated
AvailableCommands { AvailableCommands {

View File

@@ -126,7 +126,7 @@ fn parse_acp_event(payload: &serde_json::Value, lang: Lang) -> Option<(String, R
match event_type { match event_type {
"turn_complete" => { "turn_complete" => {
let stop_reason = payload let stop_reason = payload
.pointer("/data/stop_reason") .get("stop_reason")
.and_then(|v| v.as_str()) .and_then(|v| v.as_str())
.unwrap_or("unknown"); .unwrap_or("unknown");
// Only push for end_turn, not for intermediate completions // Only push for end_turn, not for intermediate completions
@@ -134,7 +134,7 @@ fn parse_acp_event(payload: &serde_json::Value, lang: Lang) -> Option<(String, R
return None; return None;
} }
let agent_type = payload let agent_type = payload
.pointer("/data/agent_type") .get("agent_type")
.and_then(|v| v.as_str()) .and_then(|v| v.as_str())
.unwrap_or("Unknown Agent"); .unwrap_or("Unknown Agent");
Some(( Some((
@@ -144,11 +144,11 @@ fn parse_acp_event(payload: &serde_json::Value, lang: Lang) -> Option<(String, R
} }
"error" => { "error" => {
let agent_type = payload let agent_type = payload
.pointer("/data/agent_type") .get("agent_type")
.and_then(|v| v.as_str()) .and_then(|v| v.as_str())
.unwrap_or("Unknown Agent"); .unwrap_or("Unknown Agent");
let message = payload let message = payload
.pointer("/data/message") .get("message")
.and_then(|v| v.as_str()) .and_then(|v| v.as_str())
.unwrap_or("Unknown error"); .unwrap_or("Unknown error");
Some(( Some((

View File

@@ -1,8 +1,9 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")] #[serde(rename_all = "kebab-case")]
pub enum Lang { pub enum Lang {
#[default]
En, En,
ZhCn, ZhCn,
ZhTw, ZhTw,
@@ -15,12 +16,6 @@ pub enum Lang {
Ar, Ar,
} }
impl Default for Lang {
fn default() -> Self {
Lang::En
}
}
impl Lang { impl Lang {
pub fn from_str_lossy(s: &str) -> Self { pub fn from_str_lossy(s: &str) -> Self {
match s { match s {