oudecheng
|
fef5ae7626
|
fix: 修复 P0 级技术债(useEffect 依赖项缺失 + prompt 注入吞错)
P0-1: web/src/App.tsx 话题刷新 useEffect 依赖项不完整
- 原依赖数组仅 [topicRefreshTrigger],但 effect 体内使用了
status/handleCommand/sendMessage/requestTopicList
- 导致断线重连后 status 从 disconnected→connected 时
effect 不会重新运行,话题刷新被静默丢失(stale closure bug)
- 补全依赖数组为 [topicRefreshTrigger, status, handleCommand,
sendMessage, requestTopicList],与同文件 200-208 行 effect 风格一致
P0-2: src/gateway/agent_prompt_provider.rs 静默吞错
- record_injection 中 let _ = repository.mark_agent_prompt_reinjected(...)
丢弃了 Result 错误
- 失败时 Agent prompt 注入计数错乱且无任何日志
- 改为 if let Err(e) = ... { tracing::warn!(...) } 记录 session_id 和 error
|
2026-07-08 14:33:22 +08:00 |
|
oudecheng
|
6c393dca05
|
build: 将 rmcp 依赖从 git branch 迁移到 crates.io 版本
- Cargo.toml: rmcp 从 git="...rust-sdk", branch="main" 改为 version="1.7"
(semver 解析为 1.8.0,最新兼容 1.x 版本)
- src/mcp/client.rs: 适配 rmcp 1.8+ API 变更
peer_info() 返回类型从 Option<ServerInfo> 变为 Option<Arc<ServerInfo>>,
使用 .map(|arc| arc.as_ref().clone()) 替代 .cloned()
解决 git branch 依赖带来的问题:构建不可复现、供应链安全风险、
版本语义模糊、升级路径不清晰、CI 构建性能损耗。
|
2026-07-08 10:56:25 +08:00 |
|
oudecheng
|
a8267631b8
|
refactor: 移除未使用的 cli_sessions 变量,优化 ws.rs 中的代码
|
2026-07-08 09:45:20 +08:00 |
|
oudecheng
|
393052ae48
|
refactor: 重构 AgentLoop 中的消息处理逻辑,简化工具结果处理和 LLM 请求构建
|
2026-07-08 09:33:11 +08:00 |
|
oudecheng
|
c8660df14b
|
refactor: 拆分 storage/mod.rs 与 ConfigPage.tsx (P2)
storage/mod.rs (2957 -> 1834 行):
- 抽出 tests.rs: 17 个测试函数
- 抽出 row_mapping.rs: 8 个 row<->record 映射与单记录查询函数
- 抽出 migrations.rs: 7 个 schema 迁移函数 (ensure_*_schema, has_column, add_column_if_missing)
ConfigPage.tsx (1568 -> 1235 行):
- 抽出 types.ts: 所有接口/类型定义
- 抽出 constants.ts: TABS, inputCls, selectCls, TIMEZONE_OPTIONS
- 抽出 ui.tsx: Field, Toggle, TagEditor, SectionCard, SourceEditor, MapEntryHeader
- 抽出 api/expert.ts: getSelectedExpert, selectExpert (经 ConfigPage 再导出保持兼容)
验证: cargo build, cargo test --lib storage:: 17/17, npm run build
对抗性检查: 8/8 通过 (无丢失/重复函数, 无循环依赖, 无未使用导入)
|
2026-07-07 18:36:23 +08:00 |
|
oudecheng
|
7eb2933ca5
|
chore: 清理 P0 技术债
- 删除 web/src/components/Sidebar/.deprecated 目录(死代码)
- 清理 useChat.ts/useWebSocket.ts 中 13 条调试 console.log
- 修复 load_task_messages.rs 硬编码 task 状态: 新增 TaskSessionState::Unknown,
DB 重建时返回 Unknown 而非误报 Completed, 前端显示"未知"
|
2026-07-07 17:45:07 +08:00 |
|
oudecheng
|
f264a7b307
|
fix: 兼容 base_url 末尾斜杠,避免拼接产生双斜杠导致 404
anthropic.rs 和 openai.rs 在构造时 trim_end_matches('/'),兼容如 https://opencode.ai/zen/go/v1/ 带末尾斜杠的 base_url。
|
2026-07-07 14:14:20 +08:00 |
|
oudecheng
|
4da7b5f505
|
fix: TodoWriteTool merge 模式内存为空时从 DB 回填,防止丢失旧项
todo_write.rs: 内存状态为空时从 repository.list_todos 回填,保证 merge 模式不丢失旧项(进程重启后内存清空场景)。新增 MockTodoRepository 和回填测试。
tool_registry_factory.rs: TodoWriteTool::new 传入 todo_repository。
|
2026-07-07 14:13:56 +08:00 |
|
oudecheng
|
7652bb16e2
|
refactor: get_current/save_topic 直读 DB 加载消息,移除 SessionManager 依赖
get_current.rs 和 save_topic.rs 改为直读 DB(load_messages_for_topic),不依赖 SessionManager 内存,重启后也能正确获取历史。
mod.rs: 删除 get_messages_from_session 辅助函数。
processor.rs/ws.rs: 移除 with_session_manager 调用。
|
2026-07-07 14:13:31 +08:00 |
|
oudecheng
|
7eecd0b6bb
|
feat: 专家配置保存后即时生效,无需重启网关
experts/mod.rs: config 改为 RwLock 支持 update_config 运行时更新; ExpertWithStatus 增加 body 字段供前端编辑模态框直接显示; 空 sources 时不再兜底返回 [User,Project],尊重用户关闭所有源的意图。
gateway/http.rs: save_config 同步调用 experts.update_config,返回消息从'需要重启'改为'已保存'。
ConfigPage.tsx: 编辑模态框宽度扩大到 max-w-3xl,textarea 高度增加到 360px,提示文案明确正文与名称/描述的注入关系。
|
2026-07-07 14:13:09 +08:00 |
|
oudecheng
|
bde55cbf14
|
feat: 重构工具提示提供者,整合工具使用说明;删除冗余的 TodoPromptProvider
|
2026-07-07 10:03:16 +08:00 |
|
oudecheng
|
4329cfbbe9
|
feat: 统一路径显示格式,确保跨平台兼容性;重构系统提示词提供者构建逻辑
|
2026-07-07 09:19:58 +08:00 |
|
oudecheng
|
43f6ea7b08
|
feat: 新增用户附件处理规则,支持判断文件后缀并选择读取方式
|
2026-07-06 18:13:14 +08:00 |
|
oudecheng
|
b4b7c5a208
|
fix: 子智能体执行路径发布带 subagent_task_id 的完成/错误事件
在 runtime.rs 新增 build_subagent_event_metadata/publish_subagent_completion/publish_subagent_error 函数,在 spawn/resume 的 Ok/Err 分支发布带 subagent_task_id=session.id 的 ExecutionCompleted/ErrorNotification 事件。
load_task_messages.rs 的 reconstruct_task_from_db 硬编码 Completed 加 TODO 注释,记录 DB 重建无法可靠推断 task 状态的已知缺陷。
Spec: fix-subagent-message-refresh-on-exit (Task 1.4, 9)
|
2026-07-06 18:11:12 +08:00 |
|
oudecheng
|
9d7c1f2e52
|
feat: 集成专家提示词到网关配置、依赖注入与HTTP API
- config: 新增 ExpertsConfig,默认 sources=[user,project], enabled=true
- AgentFactory: 新增 experts 字段,providers 顺序为 Agent→Skill→Expert→Subagent→Todo
- GatewayState: 持有 Arc<ExpertRuntime>,from_config 中初始化
- runtime: build_session_manager_with_sender 接收 experts 参数
- 路由: 注册 7 个专家 API (list/toggle/create/update/delete/selected/select)
- http: 实现 7 个处理器,支持专家 CRUD 与 session 级选择
- session/cli: 测试便利构造器与 empty_config/build_config 补齐 experts 字段
|
2026-07-06 18:07:33 +08:00 |
|
oudecheng
|
c2d9bf8b5e
|
feat: 新增专家提示词核心模块,支持文件发现、CRUD与运行时选择
- 新增 src/experts/mod.rs 模块,镜像 skills/subagents 模式
- 支持 user/project 双 scope 从 EXPERT.md 文件发现专家
- ExpertRuntime 维护 session→expert 映射与禁用列表,持久化到 expert-state.json
- ExpertPromptProvider 实现系统提示词注入,未选中时返回 None
- 包含 16 个单元测试覆盖 frontmatter 解析、discover 优先级、CRUD、select/clear、disable 场景
|
2026-07-06 18:07:10 +08:00 |
|
oudecheng
|
8d30ccd020
|
feat: 新增子代理管理API,支持获取子代理列表和切换子代理状态
|
2026-07-06 14:41:30 +08:00 |
|
oudecheng
|
38b9f661ee
|
feat: 新增技能管理API,支持获取技能列表和切换技能状态
|
2026-07-06 11:59:11 +08:00 |
|
oudecheng
|
d7ff969560
|
feat: 增强消息处理,清理不完整的 tool_call 序列以防止数据污染
|
2026-07-06 09:04:32 +08:00 |
|
oudecheng
|
4766f838a2
|
fix: 过滤 subagent session 避免污染会话列表
subagent session(id 形如 sub:...)存入 DB 时 channel_name=websocket,会被 list_sessions 查出并显示在前端右上角。SQL 添加 AND id NOT LIKE 'sub:%' 过滤。
|
2026-07-03 19:32:28 +08:00 |
|
oudecheng
|
994db87f11
|
feat: 新增 ExecutionCompleted 信号修复发送按钮状态
- 后端 OutboundEventKind/WsOutbound 新增 ExecutionCompleted 变体
- processor 在 handle_message 完成后发送该信号
- 飞书/微信通道过滤该信号(不发送)
- 前端 useChat 移除 stream_delta/assistant_response 的 isLoading=false
- 改由 execution_completed 事件统一设置 isLoading=false,确保智能体迭代期间按钮保持停止态
|
2026-07-03 19:32:14 +08:00 |
|
oudecheng
|
76abdbd1de
|
feat: MCP stdio 命令解析与错误诊断增强
- 新增 resolve_command_path:Windows 上搜索 .exe/.cmd/.bat 后缀
- 启动失败时给出友好错误信息(含 PATH 和建议)
- 捕获子进程 stderr 并在连接失败时回显
- ConfigPage 新增 cwd 工作目录字段
- 添加单元测试覆盖路径解析逻辑
|
2026-07-03 19:31:52 +08:00 |
|
oudecheng
|
1309fa28da
|
feat: McpClientManager 传递 cwd 参数至 connect_stdio
|
2026-07-03 16:34:01 +08:00 |
|
oudecheng
|
5ceafb1fd7
|
feat: 添加配置应用诊断日志,便于排查 AgentFactory 实例与工具列表
|
2026-07-03 16:33:01 +08:00 |
|
oudecheng
|
7640a6e5b7
|
fix: 修复 WebSocket 连接泄漏,使用 CancellationToken 实现优雅重启
|
2026-07-03 16:32:43 +08:00 |
|
oudecheng
|
7e24e57af4
|
fix: 修复 persistent_session_id 前缀重复累积问题
|
2026-07-03 16:32:24 +08:00 |
|
oudecheng
|
a78f5c5512
|
feat: MCP stdio 传输支持工作目录配置
|
2026-07-03 16:32:09 +08:00 |
|
oudecheng
|
2a02adc7c3
|
feat: 将 StreamingAccumulator 中的 tool_calls 类型从 HashMap 更改为 BTreeMap;在 SkillSource 中添加自定义源支持
|
2026-07-03 11:34:30 +08:00 |
|
oudecheng
|
d2af01eb30
|
feat: 更新通道名称为 websocket,调整相关引用和逻辑
|
2026-07-03 10:58:24 +08:00 |
|
oudecheng
|
f3365f8d3a
|
feat: 添加 HistoryUnit 解析单元测试,验证系统守卫和工具调用的处理逻辑
|
2026-07-03 10:19:33 +08:00 |
|
oudecheng
|
51e06c8f73
|
feat: 实现两段历史压缩的同步处理,替换会话的活动历史记录
|
2026-07-03 09:52:45 +08:00 |
|
oudecheng
|
1af0fab3ad
|
feat: 更新配置管理,支持异步读取和写入;添加 MCP 服务器状态接口
|
2026-07-03 08:37:02 +08:00 |
|
oudecheng
|
4071dcc6ee
|
feat: 更新取消结果构建逻辑,确保已生成消息包含在取消响应中
|
2026-07-02 18:27:22 +08:00 |
|
oudecheng
|
32d49601a2
|
feat: 更新取消信号处理,支持 interior mutability;优化 LLM 调用与工具执行的取消逻辑
|
2026-07-02 17:17:03 +08:00 |
|
oudecheng
|
81c88257c8
|
feat: 更新模型配置,调整温度和上下文窗口令牌数量;添加启动和停止网关的批处理脚本
|
2026-07-01 15:11:28 +08:00 |
|
oudecheng
|
f8e7bfcd54
|
feat: 更新默认提供者配置,修改基础URL和模型ID
|
2026-07-01 09:29:34 +08:00 |
|
oudecheng
|
4fabbe47e9
|
feat: 增强MCP集成,支持配置路径和连接重试机制
|
2026-06-30 10:46:33 +08:00 |
|
oudecheng
|
7d11ab8067
|
feat: 添加默认配置文件创建功能,确保首次启动时可用
|
2026-06-29 15:27:22 +08:00 |
|
oudecheng
|
26cbe7aa2d
|
feat: 更新 created_by_message_id 逻辑,仅在内容或状态变化时进行更新
|
2026-06-29 15:01:32 +08:00 |
|
oudecheng
|
bf1549b88b
|
feat: 优化 todo_write 工具的 merge 参数描述,调整默认值逻辑并添加测试
|
2026-06-29 09:24:05 +08:00 |
|
oudecheng
|
4742a6aed9
|
feat: 增加附件文件大小限制至 200MB
|
2026-06-26 12:03:33 +08:00 |
|
oudecheng
|
a40f57fb22
|
feat: 注册 save_topic 处理器并优化助手消息渲染逻辑
|
2026-06-25 14:10:04 +08:00 |
|
oudecheng
|
ef18500100
|
feat: 更新 created_by_message_id 字段的赋值逻辑,确保使用 tool_call_id 进行消息关联
|
2026-06-25 10:50:16 +08:00 |
|
oudecheng
|
c72853c79d
|
feat: 添加 user_message_id 字段以支持用户消息的关联和同步
|
2026-06-24 15:13:36 +08:00 |
|
oudecheng
|
7f262c9af2
|
feat(todos): 在 todos 表中添加 created_by_message_id 字段以支持消息关联
|
2026-06-23 17:37:54 +08:00 |
|
oudecheng
|
95cf152ab9
|
fix(agent): 修复工具调用消息序列的完整性问题
- 在历史压缩时,移除保留消息中不完整的工具调用序列,防止API 400错误
- 压缩后对当前历史消息再次进行工具调用序列清理,确保消息序列有效性
- OpenAI请求构建中,增加位置感知的工具调用和结果配对验证
- 跳过含有不完整工具调用序列的助手消息,避免发送非法请求
- 剥离不完整助手消息的工具调用字段,作为普通助手消息序列化
- 跟踪并警告不完整工具调用序列和被跳过的消息索引
|
2026-06-23 08:44:48 +08:00 |
|
oudecheng
|
3be9c1e646
|
feat(storage): 添加 todos 表的 created_by_message_id 字段迁移
- 检查 todos 表中是否存在 created_by_message_id 列
- 若不存在则添加该列,类型为 TEXT
- 记录添加列的迁移过程日志
- 确保数据库表结构更新完成后返回成功状态
|
2026-06-22 14:55:13 +08:00 |
|
oudecheng
|
4efc8b51e7
|
feat(todo): 添加待办项关联的创建消息ID并支持消息高亮
- 在待办相关数据结构和存储中新增 created_by_message_id 字段
- 记录待办项创建时对应的消息ID,支持追溯来源
- 在前端待办列表项增加点击事件,点击后滚动并高亮对应消息
- 在消息列表组件中实现高亮动画及自动滚动功能
- 更新相关工具、协议和数据库查询,确保新字段正确传递和存储
- 增加 CSS 动画实现待办对应消息的高亮闪烁效果
- 优化前端状态管理,支持设置与获取高亮消息ID
|
2026-06-22 14:50:37 +08:00 |
|
oudecheng
|
6a496ce212
|
feat(task): 优化孙智能体任务消息的发送与工具注册
- 在发送任务消息时增加可选的任务仓库参数支持子任务重发
- 新增 extract_parent_task_id 函数用于提取孙智能体的父任务 ID
- 补发子任务(孙智能体)的 TaskStarted 事件,解决视图重进导致的 navigateToTaskId 丢失
- 判断并附加子任务的父任务 ID,完善日志记录与事件发送
- 在子智能体运行时根据深度排除 task 工具,防止无限嵌套调用
- ToolRegistry 新增 without 方法,可创建排除指定工具的新实例用于子智能体配置
|
2026-06-22 11:31:41 +08:00 |
|
oudecheng
|
606fcbcd29
|
feat(agent): 注入并传递 tool_call_id 实现任务与工具调用精准关联
- 在 agent_loop 执行上下文中注入 tool_call_id,确保执行时传递该字段
- 在 agent_factory、ws、todo_read、todo_write 等多处构造对象时添加 tool_call_id 字段初始化
- 扩展协议定义及序列化,支持 tool_call_id 字段传递
- 在工具调用任务运行时传递 tool_call_id,便于事件追踪和层级关联
- 在前端 useChat hook 增加 tool_call_id 关联逻辑,实现 task_started 事件精准匹配和跳转
- 增加 pendingTaskNavs 缓存处理,解决 task_started 事件先于 tool_call 到达的顺序问题
- 调整消息渲染逻辑,根据 tool_call_id 进行优先匹配,提升用户交互体验
|
2026-06-22 10:22:36 +08:00 |
|