From 0bc470181d3fd19188cea6a1de29ebeeffb4e6aa Mon Sep 17 00:00:00 2001 From: xintaofei Date: Tue, 31 Mar 2026 14:05:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B6=88=E6=81=AF=E6=B8=A0?= =?UTF-8?q?=E9=81=93=E7=9A=84=E4=BA=8B=E4=BB=B6=E6=9C=AA=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src-tauri/src/acp/connection.rs | 10 ++++++++++ src-tauri/src/acp/types.rs | 2 ++ src-tauri/src/chat_channel/event_subscriber.rs | 8 ++++---- src-tauri/src/chat_channel/i18n.rs | 9 ++------- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src-tauri/src/acp/connection.rs b/src-tauri/src/acp/connection.rs index 26dda0b..b217a0e 100644 --- a/src-tauri/src/acp/connection.rs +++ b/src-tauri/src/acp/connection.rs @@ -288,6 +288,7 @@ pub async fn spawn_agent_connection( AcpEvent::Error { connection_id: conn_id.clone(), message: e.to_string(), + agent_type: agent_type.to_string(), }, ); } @@ -829,6 +830,7 @@ async fn run_connection( message: format!( "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 { connection_id: conn_id.into(), message: "Prompt must contain at least one content block".into(), + agent_type: agent_type.to_string(), }, ); continue; @@ -1684,6 +1687,7 @@ async fn run_conversation_loop<'a>( connection_id: conn_id.into(), session_id: sid.0.to_string(), stop_reason: reason_str.into(), + agent_type: agent_type.to_string(), }, ); break; @@ -1715,6 +1719,7 @@ async fn run_conversation_loop<'a>( connection_id: conn_id.into(), session_id: sid.0.to_string(), stop_reason: reason_str.into(), + agent_type: agent_type.to_string(), }, ); break; @@ -1762,6 +1767,7 @@ async fn run_conversation_loop<'a>( AcpEvent::Error { connection_id: conn_id.into(), 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 { connection_id: conn_id.into(), 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(), session_id: sid.0.to_string(), stop_reason: "cancelled".into(), + agent_type: agent_type.to_string(), }, ); // Drain the prompt response in the background so @@ -1895,6 +1903,7 @@ async fn run_conversation_loop<'a>( AcpEvent::Error { connection_id: conn_id.into(), 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 { connection_id: conn_id.into(), message: format!("Failed to set config option: {e}"), + agent_type: agent_type.to_string(), }, ); } diff --git a/src-tauri/src/acp/types.rs b/src-tauri/src/acp/types.rs index c7b674d..37609fd 100644 --- a/src-tauri/src/acp/types.rs +++ b/src-tauri/src/acp/types.rs @@ -82,6 +82,7 @@ pub enum AcpEvent { connection_id: String, session_id: String, stop_reason: String, + agent_type: String, }, /// Session established with agent-assigned session ID SessionStarted { @@ -129,6 +130,7 @@ pub enum AcpEvent { Error { connection_id: String, message: String, + agent_type: String, }, /// Available slash commands updated AvailableCommands { diff --git a/src-tauri/src/chat_channel/event_subscriber.rs b/src-tauri/src/chat_channel/event_subscriber.rs index 3d6b4d3..12e697e 100644 --- a/src-tauri/src/chat_channel/event_subscriber.rs +++ b/src-tauri/src/chat_channel/event_subscriber.rs @@ -126,7 +126,7 @@ fn parse_acp_event(payload: &serde_json::Value, lang: Lang) -> Option<(String, R match event_type { "turn_complete" => { let stop_reason = payload - .pointer("/data/stop_reason") + .get("stop_reason") .and_then(|v| v.as_str()) .unwrap_or("unknown"); // 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; } let agent_type = payload - .pointer("/data/agent_type") + .get("agent_type") .and_then(|v| v.as_str()) .unwrap_or("Unknown Agent"); Some(( @@ -144,11 +144,11 @@ fn parse_acp_event(payload: &serde_json::Value, lang: Lang) -> Option<(String, R } "error" => { let agent_type = payload - .pointer("/data/agent_type") + .get("agent_type") .and_then(|v| v.as_str()) .unwrap_or("Unknown Agent"); let message = payload - .pointer("/data/message") + .get("message") .and_then(|v| v.as_str()) .unwrap_or("Unknown error"); Some(( diff --git a/src-tauri/src/chat_channel/i18n.rs b/src-tauri/src/chat_channel/i18n.rs index 6d45b61..b87b806 100644 --- a/src-tauri/src/chat_channel/i18n.rs +++ b/src-tauri/src/chat_channel/i18n.rs @@ -1,8 +1,9 @@ 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")] pub enum Lang { + #[default] En, ZhCn, ZhTw, @@ -15,12 +16,6 @@ pub enum Lang { Ar, } -impl Default for Lang { - fn default() -> Self { - Lang::En - } -} - impl Lang { pub fn from_str_lossy(s: &str) -> Self { match s {