ceb8234a30
飞书渠道剥离思维链内容,不显示<think>标签
2026-05-08 16:19:19 +08:00
5d62141658
1、修复和提升记忆系统 2、简化消息标记
2026-05-08 15:09:27 +08:00
2617558a27
记忆工具合并文件,改成记忆系统总是开启。
2026-05-08 10:28:34 +08:00
c602a0695d
feat: add memory system with FTS5 search and context compression integration
2026-05-07 23:32:59 +08:00
618016ac43
chore: add .worktrees/ to .gitignore
2026-05-07 23:05:01 +08:00
06811160f0
docs: add memory system implementation plan
2026-05-07 23:02:47 +08:00
28ef813c37
docs: add memory system design document
2026-05-07 22:56:19 +08:00
2fe953cdad
改为短id
2026-05-07 16:28:54 +08:00
61d2fe9ef0
修复及完善cron任务
2026-05-07 16:24:13 +08:00
db609342f7
fix: char-boundary-safe name truncation in cron_add tool
...
The name fallback used byte-index slice on the prompt,
which panics on multi-byte UTF-8 characters like Chinese.
Use is_char_boundary() to find a safe truncation point.
2026-05-05 00:56:42 +08:00
62f4326131
refactor: move scheduler store to storage module, cron tools to tools module
...
- storage/scheduler.rs: ScheduledJob/JobRun types + CRUD on Storage
- tools/cron.rs: 6 cron agent tools (add/list/remove/enable/disable/update)
- scheduler/types.rs: keep only Schedule enum
- scheduler/mod.rs: use Arc<Storage> instead of raw SqlitePool
- gateway/mod.rs: inject Storage directly, replace pool field
- storage/mod.rs: scheduler tables in init_schema
2026-05-05 00:49:54 +08:00
0056bfbd23
chore: fix clippy warnings in scheduler module
2026-05-05 00:31:22 +08:00
5746668e36
test: add scheduler integration tests
2026-05-05 00:29:00 +08:00
f7b0a33e66
feat: add 6 cron agent tools (add/list/remove/enable/disable/update)
2026-05-05 00:27:27 +08:00
205b814933
feat: wire scheduler into GatewayState startup and message processing
2026-05-05 00:17:19 +08:00
3a94b9718f
feat: add Scheduler run loop and next_run_for_schedule
2026-05-05 00:16:07 +08:00
0757638c6f
feat: add SessionManager::handle_cron_message for scheduled task execution
2026-05-05 00:13:07 +08:00
8415e85026
feat: add SchedulerStore with SQLite schema and CRUD
2026-05-05 00:12:10 +08:00
eccae20a0a
feat: add ChatMessage::user_with_source and Session::create_user_message_with_source
2026-05-05 00:09:00 +08:00
4e5f412c2d
feat: add scheduler data types (Schedule, ScheduledJob, JobRun)
2026-05-05 00:08:00 +08:00
75b8f7b8a5
feat: add SchedulerConfig to GatewayConfig
2026-05-05 00:06:57 +08:00
46527edb7b
deps: add cron and chrono-tz for scheduled tasks
2026-05-05 00:06:00 +08:00
0e146a8f2a
可观测性改善,llm api兼容性改善
2026-05-04 23:04:28 +08:00
98eb7bea3d
新增跨session消息发送能力
2026-05-04 00:32:24 +08:00
24d3407b05
fix(session): 所有时间显示改用本地时区而非 UTC
...
- /info 和 /sessions 中的时间戳通过 DateTime::from_timestamp_millis 后
调用 with_timezone(&Local) 转换为本地时间
- dump_to_file 和 dump_as_markdown 导出的时间也改用本地时区
2026-04-29 23:04:01 +08:00
fe4088cd1f
feat(session): 扩展 /info 命令显示更多 session 信息
...
新增:对话标题、模型名称、用户消息数/总消息数、创建时间、最后活跃时间
2026-04-29 22:59:49 +08:00
5c558027fa
feat(session): 添加 /? 帮助命令,错误命令显示友好提示
...
- 新增 /? 和 /help 命令显示所有可用斜杠命令
- 未知命令不再报错,而是提示"未知命令:/xxx。输入 /? 获取帮助。"
- execute_slash_command 错误现在返回友好提示而非传播为服务器错误
2026-04-29 22:57:59 +08:00
e1681e0424
debug(session): 添加 handle_message 和 session 恢复的 tracing 日志
...
用于排查 restart 后 session 恢复和 TTL 刷新问题。
2026-04-29 22:51:50 +08:00
dcb2d552d9
chore(session): 将标题生成阈值从 10 条减至 5 条用户消息
2026-04-29 22:46:33 +08:00
228204517d
fix(session): 每次 add_message 时同步更新 Storage 的 message_count
...
之前只持久化了消息内容,没有更新 SessionMeta.message_count,
导致重启后从 Storage 恢复时 message_count 低于实际值,
should_generate_title() 判断失败。
2026-04-29 22:45:04 +08:00
97e3be6d3a
fix(session): 调用 generate_title 生成对话标题
...
之前 generate_title 函数已实现但从未被调用,导致对话标题
自动生成(10 条用户消息后)一直没有触发。
2026-04-29 22:34:02 +08:00
2f2631e36a
fix(session): /new 后新对话被旧对话数据覆盖的问题
...
问题原因:execute_slash_command 执行 /new 后,错误地将旧 session 的数据
存储到新 session 的 key 下,导致 current_sessions 虽然指向新 session,
但 sessions 里面存的是旧数据。
解决方案:移除错误的 session 映射更新逻辑。create_session 已经正确地将
新 session 存入 sessions 并更新 current_sessions,不需要额外覆盖。
2026-04-29 22:32:58 +08:00
e2fd836794
fix(session): 消息持久化和恢复
...
问题:消息只写内存,重启后丢失。from_storage 恢复了 meta 但没加载消息。
修复:
- add_message 改为 async,同时写内存和 Storage
- compact 场景用 persist=false 避免重复持久化
- clear_session_history 同时清内存和 Storage 消息
- 所有调用点添加 .await 和错误转换
2026-04-28 23:10:53 +08:00
c48ed83a23
refactor(session): 移除 InboundMessage.dialog_id,dialog_id 完全由 SessionManager 管理
...
Channel 消息不再携带 dialog_id,完全由 SessionManager 通过
current_sessions 内部管理。/new 后下一条消息会自动路由到新 session。
改动:
- InboundMessage 移除 dialog_id 字段
- handle_message 移除 dialog_id 参数
- Feishu/CLI channel 创建 InboundMessage 时不再设置 dialog_id
- 路由逻辑简化为:current_sessions → find_active_session → 创建新 session
2026-04-28 23:05:06 +08:00
e235268133
fix(session): /new 后仍停留在旧对话的问题
...
问题原因:/new 创建新 session 后,客户端下次发消息仍带着旧的
dialog_id,导致服务端找到旧 session。
解决方案:在 SessionManager 中新增 current_sessions 跟踪
每个 channel:chat_id 的当前活跃 session:
- create_session / get_or_create_session 时更新 current_sessions
- switch_dialog / delete_dialog 时同步更新 current_sessions
- handle_message 无 dialog_id 时优先使用 current_sessions
2026-04-28 22:53:37 +08:00
7fac68b51c
feat(session): Phase 4 - 斜杠命令完善
...
新增命令:
- /sessions — 列出 channel:chat_id 下最近 10 条对话
- /switch <dialog_id> — 切换到指定对话
- /rename <新标题> — 重命名当前对话
更新命令:
- /delete — 软删除后创建新对话
- /info — 显示 session_id + message_count
所有命令描述改为中文。
2026-04-28 22:30:22 +08:00
ac7576bb4b
feat(session): Phase 3 - SessionManager 完善
...
- SessionManager::new 接收 Arc<Storage> 参数
- create_session / get_or_create_session 写入/恢复 Storage
- handle_message 支持无 dialog_id 时自动查找最近活跃 session 或创建新 session
- 实现 list_dialogs() — 从 Storage 读取最近 10 条
- 实现 switch_dialog() — 从 Storage 恢复 session
- 实现 delete_dialog() — 软删除 Storage + 内存移除
- 实现 rename_dialog() — 更新 Storage 和内存 title
- 实现 archive_dialog()(空实现,archive 概念已删除)
- 新增 start_cleanup_task() 后台 TTL 清理任务
- GatewayConfig 新增 session_db_path 和 cleanup_interval_minutes 配置
- Gateway::new 改为 async,创建 Storage 并启动清理任务
- rename_dialog / delete_dialog 改为 async(需 .await)
- WsOutbound::SystemNotification 已在 Phase 2 添加
2026-04-28 22:29:24 +08:00
5f7ffd28ef
feat(session): Phase 2 - 扩展 Session 结构
...
- Session 新增字段: title, created_at, last_active_at,
message_count, total_message_count, seq_counter,
storage, routing_info
- Session::new 新增 storage/routing_info/title 参数
- 新增 Session::from_storage() 从 Storage 恢复 Session
- 新增 Session::add_message_and_persist() 持久化版本
- 新增 Session::send_system_notification() 不记历史的通知
- 新增 Session::persist_session_meta() 写回 Storage
- 新增 Session::should_generate_title() / generate_title()
- 新增 LLM title 自动生成(10 条消息后触发)
- SessionManager::create_session 新增 routing_info 参数
- WsOutbound 新增 SystemNotification variant
- Client mod.rs 处理 SystemNotification
2026-04-28 22:25:10 +08:00
c17e286db1
test(storage): 编写 Storage 单元测试
2026-04-28 22:17:02 +08:00
3ffa8c41f7
feat(storage): 添加写入重试逻辑
2026-04-28 22:13:49 +08:00
69a8ec2775
feat(storage): 实现 Message CRUD 操作
2026-04-28 22:13:29 +08:00
eeb8a77ac8
feat(storage): 实现 Session CRUD 操作
2026-04-28 22:13:10 +08:00
c51ba900fa
feat(storage): 定义 SessionMeta 和 MessageMeta 数据结构
2026-04-28 22:12:44 +08:00
88f8a86b99
feat(storage): 实现 Storage 主结构和初始化
2026-04-28 22:12:30 +08:00
c4c87aac95
feat(storage): 创建 storage 模块骨架
2026-04-28 22:09:10 +08:00
22546d3ad0
feat(storage): 添加 StorageError 类型
2026-04-28 22:08:47 +08:00
3ed7ac7cbd
deps: 添加 sqlx + sqlite 依赖
2026-04-28 22:07:55 +08:00
575f264773
docs: 添加 Phase 1 Storage 基础实现计划
...
9 个 Task:
1. 添加 sqlx + sqlite 依赖
2. 创建 StorageError 类型
3. 创建 storage 模块骨架
4. 实现 Storage 主结构 + init_schema
5. 定义 SessionMeta / MessageMeta
6. 实现 Session CRUD
7. 实现 Message CRUD
8. 添加写入重试逻辑
9. 编写 7 个单元测试
2026-04-28 21:46:32 +08:00
2cbd959ac4
docs: 添加 Session 持久化设计方案
...
设计目标:
- SQLite 持久化,消息实时落盘
- Session = Dialog 概念等价,不再分层
- handle_message 自动恢复或创建 session
- Dialog 完整生命周期管理(/new /sessions /switch /rename /delete)
- Title 自动生成(10 条用户消息后)
- TTL 自动内存清理,Storage 保留所有数据
2026-04-28 21:45:05 +08:00
1ac6de118a
修复 /dump 命令:保存到文件并注入系统提示词
...
- /dump 现在保存到 {workspace}/dumps/ 目录而非仅返回文本
- dump 文件包含注入模型的完整系统提示词(AgentLoop + Skills)
- 修复 cli_chat 中 current_session_guard 变量声明问题
- gateway 正确处理 HandleResult::AgentResponse 和 CommandOutput
- 移除 cli_chat 中未使用的 parse_slash_command 导入
2026-04-28 21:27:36 +08:00