精简事件管理里的事件

This commit is contained in:
xintaofei
2026-03-31 12:05:51 +08:00
parent edc12a0e39
commit 007b52c183
13 changed files with 11 additions and 215 deletions

View File

@@ -103,34 +103,14 @@ pub fn spawn_event_subscriber(
fn parse_event(channel: &str, payload: &serde_json::Value) -> Option<(String, RichMessage)> {
match channel {
"acp://event" => parse_acp_event(payload),
"folder://git-push-succeeded" => parse_git_push(payload),
"folder://git-commit-succeeded" => parse_git_commit(payload),
_ => None,
}
}
fn parse_acp_event(payload: &serde_json::Value) -> Option<(String, RichMessage)> {
let event_type = payload.get("type")?.as_str()?;
let connection_id = payload
.get("connection_id")
.and_then(|v| v.as_str())
.unwrap_or("unknown");
match event_type {
"session_started" => {
let agent_type = payload
.pointer("/data/agent_type")
.and_then(|v| v.as_str())
.unwrap_or("Unknown Agent");
let folder = payload
.pointer("/data/folder_name")
.and_then(|v| v.as_str())
.unwrap_or(connection_id);
Some((
"session_started".to_string(),
message_formatter::format_session_started(agent_type, folder),
))
}
"turn_complete" => {
let stop_reason = payload
.pointer("/data/stop_reason")
@@ -163,57 +143,7 @@ fn parse_acp_event(payload: &serde_json::Value) -> Option<(String, RichMessage)>
message_formatter::format_agent_error(agent_type, message),
))
}
"status_changed" => {
let status = payload
.pointer("/data/status")
.and_then(|v| v.as_str())?;
if status != "disconnected" {
return None;
}
let agent_type = payload
.pointer("/data/agent_type")
.and_then(|v| v.as_str())
.unwrap_or("Unknown Agent");
Some((
"status_disconnected".to_string(),
message_formatter::format_agent_disconnected(agent_type),
))
}
// Phase 2: "permission_request" will be handled here
_ => None,
}
}
fn parse_git_push(payload: &serde_json::Value) -> Option<(String, RichMessage)> {
let folder_name = payload
.get("folder_name")
.and_then(|v| v.as_str())
.unwrap_or("unknown");
let branch = payload
.get("branch")
.and_then(|v| v.as_str())
.unwrap_or("unknown");
let commits = payload
.get("pushed_commits")
.and_then(|v| v.as_u64())
.unwrap_or(0) as u32;
Some((
"git_push".to_string(),
message_formatter::format_git_push(folder_name, branch, commits),
))
}
fn parse_git_commit(payload: &serde_json::Value) -> Option<(String, RichMessage)> {
let folder_name = payload
.get("folder_name")
.and_then(|v| v.as_str())
.unwrap_or("unknown");
let files = payload
.get("committed_files")
.and_then(|v| v.as_u64())
.unwrap_or(0) as u32;
Some((
"git_commit".to_string(),
message_formatter::format_git_commit(folder_name, files),
))
}

View File

@@ -1,10 +1,5 @@
use super::types::{MessageLevel, RichMessage};
pub fn format_session_started(agent_type: &str, folder_name: &str) -> RichMessage {
RichMessage::info(format!("{agent_type}{folder_name} 开始了新会话"))
.with_title("新会话")
}
pub fn format_turn_complete(agent_type: &str, stop_reason: &str) -> RichMessage {
let reason = match stop_reason {
"end_turn" => "正常结束",
@@ -25,29 +20,6 @@ pub fn format_agent_error(agent_type: &str, message: &str) -> RichMessage {
}
}
pub fn format_agent_disconnected(agent_type: &str) -> RichMessage {
RichMessage {
title: Some("代理断开".to_string()),
body: format!("{agent_type} 已断开连接"),
fields: Vec::new(),
level: MessageLevel::Warning,
}
}
pub fn format_git_push(folder_name: &str, branch: &str, commits: u32) -> RichMessage {
RichMessage::info(format!(
"Git Push 成功: {commits} 个提交推送到 {branch}"
))
.with_title("Git Push")
.with_field("项目", folder_name)
}
pub fn format_git_commit(folder_name: &str, files: u32) -> RichMessage {
RichMessage::info(format!("Git Commit: {files} 个文件已提交"))
.with_title("Git Commit")
.with_field("项目", folder_name)
}
pub struct DailyReportData {
pub date: String,
pub conversations_by_agent: Vec<(String, u32)>,