fix: 用户隔离完整性 + 聊天去重

1. 启动时不加载历史消息(等第一条消息确定身份后按需恢复)
2. MemoryStore 改为 HashMap<user_id, Vec<mem>>,按用户隔离缓存
3. session.current_user_id 与外部 mutex 同步
4. chat_records.message_id 加 UNIQUE 索引 + ON CONFLICT DO NOTHING
This commit is contained in:
2026-06-02 14:27:35 +08:00
parent b710518a1f
commit 3f447668b8
5 changed files with 40 additions and 43 deletions
+7 -6
View File
@@ -306,14 +306,11 @@ async fn cmd_listen(
// 创建 Conversation
let mut conv = match Conversation::new(cfg) {
Ok(c) => {
// 设置 db_pool 并加载历史消息
// 设置 db_pool(启动时不加载消息,等第一条消息到达后再按需恢复)
if let Some(db) = database {
let session = c.session();
{
let mut s = session.lock().await;
s.db_pool = Some(Arc::new(db.pool().clone()));
s.load_recent_messages(20).await;
}
let mut s = session.lock().await;
s.db_pool = Some(Arc::new(db.pool().clone()));
}
info!("LLM 已初始化: {} / {}", c.provider_name(), c.model());
c
@@ -541,6 +538,10 @@ async fn listen_loop(
// 更新当前用户(审批流程需要)
*current_user_id.lock().await = from.to_string();
// 同步到 sessionexecutor 从 session 读取 user_id
if let Some(conv) = &conversation {
conv.session().lock().await.current_user_id = from.to_string();
}
// LLM 回复(异步执行,避免审批阻塞主循环)
if enable_llm {