oudecheng
cda14360af
chore: 建立工程化基线(rustfmt + clippy + CI + eslint + prettier)
...
配置:
- rustfmt.toml: 固化 max_width=100 / 4 空格缩进,cargo fmt 全量格式化
- Cargo.toml: 配置 [lints.rust] 与 [lints.clippy] 渐进式规则
- .github/workflows/ci.yml: Rust(fmt+clippy+test) + 前端(eslint+tsc+test) 双平台 CI
- Makefile: 新增 check/fmt/fix 目标,clippy 对齐 --all-targets --all-features
- web: eslint flat config + prettier 配置 + package.json 脚本与依赖
- src/main.rs: loop→while 修复 clippy::never_loop
对抗性审查发现并修复:
- eslint 缺 caughtErrorsIgnorePattern 导致 catch(_) 误报为 error
- 前端 lint 未接入 CI,现已补上 Lint 步骤
- Makefile 与 CI 的 clippy flags 不一致,已对齐
2026-08-03 23:24:02 +08:00
oudecheng
3b0de7d071
refactor: 清理未使用的 dead code 函数与方法
2026-08-03 14:21:01 +08:00
oudecheng
4baa8e7a6b
fix: 内存历史按 topic_id 键化,新增 replace_topic_history 修复 DB 压缩覆盖
...
- SessionHistory.chat_histories 改为 topic_histories 按 topic_id 键化,消除多话题并发时内存历史互相覆盖的根因
- is_current_turn 改用 current_topic == original_topic_id 直接比较,替代失效的内存最新消息匹配判断
- 新增 ConversationRepository::replace_topic_history 按 topic 删除/插入消息,解决 replace_active_history 删除整个 session 消息的 pre-existing 问题
- compaction 路径改用 replace_topic_history,避免压缩时覆盖其他 topic 的 DB 消息
- switch_topic 不再 remove_history,不同 topic 历史独立存储互斥
- append_persisted_message 仅当 topic_id == current_topic 时更新内存,防止延迟消息污染新话题历史
2026-07-28 15:32:42 +08:00
oudecheng
3a8da51936
refactor: 串行锁按 topic_id 键化,支持多话题并发执行
...
将 chat_serial_locks 重命名为 topic_serial_locks,串行锁粒度从
chat_id 改为 topic_id。同一 topic 的消息处理仍串行执行,不同
topic 之间互不阻塞,为后续多话题并发修复铺路。
本提交仅重命名锁结构和访问方法,调用点仍用 chat_id 作为锁键
(回退兼容),不影响现有行为。
2026-07-28 14:17:12 +08:00
oudecheng
141ffda1ee
feat: 实现聊天消息的串行锁,确保同一聊天的消息处理串行执行
2026-07-15 17:47:52 +08:00
oudecheng
46a1ca6853
refactor: 修复 3 项 P1 技术债(硬编码 URL / any 类型 / dead_code)
...
P1-1: 硬编码 wechat URL 抽常量统一两处
- config/mod.rs: 定义 pub const WECHAT_DEFAULT_BASE_URL
- cli/init.rs: import 并引用常量,消除字面量重复
- 消除两处不一致风险(default_wechat_base_url 与 init 向导)
P1-2: ConfigPage any 类型定义具体类型(8 处)
- types.ts: 新增 FeishuChannelConfig/WechatChannelConfig/ChannelConfig/
SchedulerJobConfig 类型;jobs?: any[] → SchedulerJobConfig[];
channels: Record<string, any> → Record<string, ChannelConfig>
- api/config.ts: 新增 RestartResponse 类型,data: any → RestartResponse
- ConfigPage.tsx: catch (e: any) ×2 → catch (e: unknown) + 类型守卫;
as any → as SchedulerConfig['misfire_policy'];
Record<string, any> → Partial<ChannelConfig>;(ch: any) → (ch: ChannelConfig)
P1-3: dead_code 18 处逐一审查清理
- 删除 10 处未使用函数/struct(YAGNI 原则):
context_compressor.rs (into_messages, is_tool_round)
agent_loop.rs (EmptySkillProvider struct + impl)
memory_maintenance.rs (run_for_scope)
session.rs (try_start/finish_background_compaction)
session_history.rs (try_start/finish_background_compaction)
tool_registry_factory.rs (shell_session_manager)
task/runtime.rs (effective_allowed_tools)
- 保留 8 处 serde 反序列化字段(删除会破坏 JSON 反序列化):
feishu.rs/openai.rs/anthropic.rs/skills/mod.rs/task/runtime.rs
2026-07-08 14:51:42 +08:00
oudecheng
d7ff969560
feat: 增强消息处理,清理不完整的 tool_call 序列以防止数据污染
2026-07-06 09:04:32 +08:00
oudecheng
51e06c8f73
feat: 实现两段历史压缩的同步处理,替换会话的活动历史记录
2026-07-03 09:52:45 +08:00
oudecheng
6f8c4a7ce8
feat: 更新 load_messages_for_topic 方法,支持按 session_id 过滤消息
2026-06-12 19:05:06 +08:00
oudecheng
d0051baa07
refactor: 消息持久化从批量改为实时逐条,通过装饰器模式实现
...
- 新增 PersistingEmittedMessageHandler 装饰器,在 emitter 广播前逐条落库
- processor 和 task/runtime 使用装饰器包裹 emitter,替代 post-loop 批量写入
- 移除 session_history 中的批量 DB 写入,仅保留内存历史更新
- execution 中跳过已由 live emitter 实时广播的工具消息,避免重复
- 前端支持运行中 task 工具卡片"查看实时进度"跳转子智能体视图
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 16:47:57 +08:00
oudecheng
3b0b4c1f2e
refactor: 消息持久化改为批量单事务插入
...
- 新增 append_messages_batch 方法,所有消息在一个事务内插入
- session_history 移除逐条 append_persisted_message,统一走批量路径
- 子智能体消息保存从 for 循环改为批量调用
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 13:02:15 +08:00
b6f2de053d
refactor: 移除会话重置逻辑中的 reset_cutoff_seq 字段,优化会话管理和历史压缩逻辑
2026-05-23 18:38:34 +08:00
oudecheng
70b35d2cc1
feat: 更新聊天历史加载逻辑,支持按话题加载历史记录并避免借用冲突
2026-05-22 10:47:25 +08:00
oudecheng
8830027cbc
feat: 添加原始话题 ID 支持,优化消息保存逻辑以处理用户话题切换
2026-05-20 12:05:58 +08:00
6a902b9ff9
feat: 添加带话题的消息追加功能,支持在会话中关联当前话题 ID
2026-05-16 20:32:00 +08:00
oudecheng
a2d4ed9193
feat: 添加历史话题管理功能,支持获取和记录每个 chat 的历史话题
2026-05-15 17:43:12 +08:00
oudecheng
2cc3b1ce9c
feat: 添加话题管理功能,支持按 chat_id 隔离话题
2026-05-15 16:41:00 +08:00
oudecheng
e709773464
feat: 添加话题管理功能,支持切换和持久化话题历史
2026-05-15 15:28:07 +08:00
oudecheng
1c1efcabf4
feat: 移除冗余的 provider_config 字段,优化 AgentFactory 和 Session 的构造逻辑
2026-05-13 15:41:52 +08:00
oudecheng
a06fceaf0c
feat: 添加系统提示词提供者,支持动态注入和组合多个提示词源
2026-05-13 14:55:50 +08:00
daec690f59
feat: 更新会话配置,重命名 session_ttl_hours 为 chat_history_ttl_hours,并调整相关逻辑以支持聊天历史过期管理
2026-05-10 19:29:55 +08:00
0ea98c6e8e
feat: 添加生成系统环境信息提示词功能,并在会话历史中注入该提示词
2026-05-10 14:47:22 +08:00
891830779f
feat: 重构存储逻辑,使用 ConversationRepository 和 PromptInjectionRepository 替代 SessionStore,优化会话和提示注入管理
...
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 15:55:27 +08:00
396504dffb
Refactor agent and storage components to introduce SkillProvider and repository patterns
...
- Introduced `SkillProvider` trait to abstract skill-related functionalities.
- Replaced `SkillRuntime` with `EmptySkillProvider` in `AgentLoop` for default behavior.
- Updated `AgentFactory` to accept `SkillProvider` instead of `SkillRuntime`.
- Created `SessionHistory` struct to manage chat histories and interactions.
- Added `MemoryRepository`, `SchedulerJobRepository`, and `SkillEventRepository` traits for better storage abstraction.
- Refactored tools to use new repository traits for memory and scheduler management.
- Cleaned up session management logic by consolidating chat history handling into `SessionHistory`.
Co-authored-by: Copilot <copilot@github.com>
2026-04-28 15:12:45 +08:00