feat(session): Phase 4 - 斜杠命令完善
新增命令: - /sessions — 列出 channel:chat_id 下最近 10 条对话 - /switch <dialog_id> — 切换到指定对话 - /rename <新标题> — 重命名当前对话 更新命令: - /delete — 软删除后创建新对话 - /info — 显示 session_id + message_count 所有命令描述改为中文。
This commit is contained in:
parent
ac7576bb4b
commit
7fac68b51c
@ -605,27 +605,42 @@ impl SlashCommand {
|
||||
pub static SLASH_COMMANDS: &[SlashCommand] = &[
|
||||
SlashCommand {
|
||||
name: "new",
|
||||
description: "Create a new conversation",
|
||||
description: "创建新对话",
|
||||
aliases: &["/new"],
|
||||
},
|
||||
SlashCommand {
|
||||
name: "sessions",
|
||||
description: "列出最近对话",
|
||||
aliases: &["/sessions"],
|
||||
},
|
||||
SlashCommand {
|
||||
name: "switch",
|
||||
description: "切换到指定对话",
|
||||
aliases: &["/switch"],
|
||||
},
|
||||
SlashCommand {
|
||||
name: "rename",
|
||||
description: "重命名当前对话",
|
||||
aliases: &["/rename"],
|
||||
},
|
||||
SlashCommand {
|
||||
name: "delete",
|
||||
description: "Delete current conversation and start a new one",
|
||||
description: "删除当前对话",
|
||||
aliases: &["/delete"],
|
||||
},
|
||||
SlashCommand {
|
||||
name: "compact",
|
||||
description: "Manually trigger context compression",
|
||||
description: "手动触发上下文压缩",
|
||||
aliases: &["/compact"],
|
||||
},
|
||||
SlashCommand {
|
||||
name: "info",
|
||||
description: "Print current session information",
|
||||
description: "显示当前对话信息",
|
||||
aliases: &["/info"],
|
||||
},
|
||||
SlashCommand {
|
||||
name: "dump",
|
||||
description: "Save current session as markdown document",
|
||||
description: "保存当前对话为 markdown 文档",
|
||||
aliases: &["/dump"],
|
||||
},
|
||||
];
|
||||
@ -779,6 +794,36 @@ impl SessionManager {
|
||||
Ok((None, "No active session.".to_string()))
|
||||
}
|
||||
}
|
||||
"sessions" => {
|
||||
let (dialogs, _current) = self.list_dialogs(channel, chat_id, false).await?;
|
||||
if dialogs.is_empty() {
|
||||
Ok((None, "暂无对话记录。".to_string()))
|
||||
} else {
|
||||
let lines: Vec<String> = dialogs.iter().map(|d| {
|
||||
let current = if current_session_id.map(|s| s.dialog_id == d.session_id.dialog_id).unwrap_or(false) {
|
||||
" [当前]"
|
||||
} else {
|
||||
""
|
||||
};
|
||||
format!("- {} ({}){} — {}", d.session_id.dialog_id, d.title, current, chrono::DateTime::from_timestamp_millis(d.last_active_at).map(|dt| dt.format("%m-%d %H:%M").to_string()).unwrap_or_default())
|
||||
}).collect();
|
||||
Ok((None, format!("最近对话:\n{}", lines.join("\n"))))
|
||||
}
|
||||
}
|
||||
"switch" => {
|
||||
let dialog_id = args.ok_or_else(|| AgentError::Other("Usage: /switch <dialog_id>".to_string()))?;
|
||||
let new_id = self.switch_dialog(channel, chat_id, dialog_id).await?;
|
||||
Ok((None, format!("已切换到对话:{}", new_id.dialog_id)))
|
||||
}
|
||||
"rename" => {
|
||||
let title = args.ok_or_else(|| AgentError::Other("Usage: /rename <新标题>".to_string()))?;
|
||||
if let Some(sid) = current_session_id {
|
||||
self.rename_dialog(sid, title).await?;
|
||||
Ok((None, format!("对话已重命名为:{}", title)))
|
||||
} else {
|
||||
Ok((None, "No active session.".to_string()))
|
||||
}
|
||||
}
|
||||
_ => Err(AgentError::Other(format!("Command not implemented: {}", cmd.name))),
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user