重构:架构重组 + 6轮缺陷修复

Phase 1: 工具模块统一
- 新建 tools/executor.rs — 统一工具执行器,消除 main/worker/daemon 三处重复
- tools/builtin.rs → tools/registry.rs
- tools/mod.rs 新增 build_tools_list() / build_env_map(),daemon/main 共用

Phase 2: 主模块重组 context/ → core/
- core/pipeline.rs — 消息处理流水线 (从 main.rs 抽取 listen_loop)
- core/session.rs — ChatSession 会话管理
- core/context.rs — 上下文构建 + token 估算
- core/summary.rs — 摘要管理 (溢出/空闲触发)
- core/memory.rs — MemoryStore 长期记忆
- main.rs 精简至 ~200 行

Phase 3: listen 模式全局会话锁 + Pipeline 收尾
- PipelineContext 持有全局 conversation_lock,所有消息串行处理防串话

Phase 4: wechat/ → channel/ 重命名

缺陷修复:
- daemon send_frame 失败后消息重回 waiting 队列
- daemon 审批通过后按 code_hash 精确执行,不重跑 LLM
- listen 模式执行器从 session.current_user_id 动态获取用户
- listen 模式 LLM 用量统计传入实际 user_id
- send_text 响应校验改用 serde_json::Value 宽松解析
- pi_subagent 工具 (JSON 事件流模式, RiskLevel::High, timeout clamp 1-300)
- listen 审批超时 300s→60s,cancel_by_code 精确保护
- approval.rs 新增 cancel_by_code 方法同步 DB
This commit is contained in:
2026-06-04 16:18:06 +08:00
parent 8dc232ebab
commit af0620aa2d
25 changed files with 1405 additions and 890 deletions
+27 -22
View File
@@ -64,15 +64,15 @@ ias service
│ main.rs → clap 子命令路由 │
├─────────────────────────────────────────────────┤
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
│ │ WeChat │ │ LLM │ │ Tools │ │
│ │ 长轮询 │ │ DeepSeek │ │ 内置工具 │ │
│ │ HTTP API │ │ 流式对话 │ │ 审批管理 │ │
│ │ Channel │ │ LLM │ │ Tools │ │
│ │ 微信通道 │ │ DeepSeek │ │ 统一执行器 │ │
│ │ 长轮询 │ │ 流式对话 │ │ 审批管理 │ │
│ └────┬─────┘ └────┬─────┘ └──────┬────────┘ │
│ │ │ │ │
│ ┌────┴──────────────┴───────────────┴────────┐ │
│ │ Context / Memory │ │
│ │ ChatSession · Token Budget · 摘要压缩 │ │
│ │ MemoryStore · 长期记忆 │ │
│ │ Core / 主模块 │ │
│ │ Pipeline · Session · Context · Summary │ │
│ │ Memory · 长期记忆 │ │
│ └──────────────────────┬──────────────────────┘ │
│ │ │
│ ┌──────────────────────┴──────────────────────┐ │
@@ -109,26 +109,31 @@ ias service
```
src/
├── main.rs CLI 入口 + 命令实现 + 监听循环 + 工具执行器
├── main.rs CLI 入口 + 命令实现 (~200行)
├── cli.rs clap 子命令定义(login/listen/send/tool 等)
├── logger.rs 日志初始化(终端 + 文件滚动)
├── state.rs 本地文件状态(auth.json / runtime.json,无DB时降级)
├── scheduler.rs 定时任务调度器
├── context/ 上下文管理
│ ├── types.rs ChatSessioncheckpoint/messages/summaries
│ ├── builder.rs Token budget 估算 + 上下文构建 + 摘要触发
── tools.rs MemoryStoreHashMap<user_id, Vec<mem>>
├── db/ 数据库
│ ├── mod.rs Database 连接池 + 迁移
│ └── models.rs CRUDauth/chat/usage/summary
├── llm/ 对话系统
│ ├── types.rs Message / Role / ToolCall / StreamChunk / Usage
├── core/ 主模块 — 消息处理流水线
│ ├── mod.rs 模块声明
│ ├── pipeline.rs 消息处理流水线(接收→上下文→LLM→持久化)
── session.rs 会话管理(ChatSession, checkpoint, token budget
│ ├── context.rs 上下文构建(build_context, token 估算)
│ ├── summary.rs 摘要管理(溢出触发, 空闲触发, LLM摘要生成)
│ └── memory.rs 长期记忆(MemoryStore, read_summaries
├── channel/ 微信通道
│ ├── mod.rs
│ ├── types.rs iLink API 协议类型
│ └── client.rs HTTP 客户端(login/poll/send/notify
├── llm/ LLM 对话系统
│ ├── types.rs Message / Role / ToolCall / StreamChunk
│ ├── provider.rs LlmProvider trait + SSE 解析
│ ├── deepseek.rs DeepSeek 流式客户端
│ └── conversation.rs Conversationchat + chat_with_tools 工具循环)
├── tools/ 工具系统
│ ├── types.rs RiskLevel / SkillSpec / SkillResult / ExecutionContext
│ ├── builtin.rs BuiltinRegistry 路由
├── tools/ 工具模块
│ ├── types.rs SkillSpec / SkillResult / RiskLevel
│ ├── registry.rs BuiltinRegistry 路由
│ ├── executor.rs 统一工具执行器(Listen/Worker 双模式)
│ ├── approval.rs ApprovalManager(确认码 + oneshot 通道)
│ └── builtins/ 内置工具实现
│ ├── datetime.rs 日期时间
@@ -137,9 +142,9 @@ src/
│ ├── fetch_page.rs 网页抓取
│ ├── memos.rs 备忘录
│ └── amap.rs 高德地图(POI/地理编码/路径/旅游规划)
├── wechat/ 微信通道
│ ├── types.rs iLink API 协议类型
│ └── client.rs HTTP 客户端(login/poll/send/notify
├── db/ 数据库
│ ├── mod.rs Database 连接池 + 迁移
│ └── models.rs CRUDauth/chat/usage/summary
├── daemon.rs 守护进程(持有 WeChat + DBspawn worker
├── worker.rs Worker 进程(无状态 LLM 执行)
└── ipc.rs Unix Domain Socket 帧协议