oudecheng
|
0159227828
|
perf: 第二批性能修复——blocking 线程池隔离、HTTP 客户端复用、前端 memo 与流式节流
- 同步阻塞操作(附件处理、历史加载、scheduler/memory_search 的 SQLite 调用)
移入 spawn_blocking,避免占用 async worker
- LLM Provider reqwest::Client 按超时配置缓存复用,减少 TLS/连接开销
- agent loop:图片过滤加廉价预判避免全量深拷贝;请求克隆改借用;工具定义 Arc 化
- 定向 COUNT/LIMIT 1 查询替代全量加载计数(wait_coordinator、task session 重建)
- 前端:面板/侧栏/聊天组件 memo 化;merged_tool 对象按值复用缓存;
流式 delta rAF 节流批量 flush;useMemo 缓存分组排序结果
|
2026-08-18 06:55:21 +08:00 |
|
oudecheng
|
1019dbe8cc
|
refactor(code-quality): 清理 clippy 存量告警(unwrap/clone/redundant 等)
- 移除无用克隆与冗余引用,减少不必要内存分配
- 规范 unwrap/expect 使用,修复可提前失败路径
- 修复 anthropic provider llm_timeout_secs 死代码并补全超时日志
- cargo fmt 统一格式
|
2026-08-16 23:22:22 +08:00 |
|
oudecheng
|
0f60b02ede
|
chore(log): 缩减 INFO 日志量,高频诊断日志降级/删除
1. 删除缓存诊断日志 4 处(openai.rs):排查已完结,字段已补齐,每次 LLM 调用都刷屏。
2. 删除 AgentPromptProvider 模型配置日志(agent_prompt_provider.rs):排查遗留,每次请求刷。
3. AgentFactory 创建日志 info→debug(agent_factory.rs):每轮对话刷,降级保留供偶发排查。
4. Calling tool / Tool calls detected info→debug(agent_loop.rs):每次工具调用都刷,全量参数打印开销大,tracing 在未启用级别时不评估字段。
5. LoadTaskMessages 3 条日志 info→debug(load_task_messages.rs):每次前端 trigger 都刷,一次 3 条。
6. 旧结果诊断日志 info→debug(execution.rs):每条消息首次 agent 迭代都触发。
7. pending subagents 日志 info→debug(processor.rs):子代理运行期高频率重复触发。
8. Updating current_session_id 仅变化时打(ws.rs):old==new 时每条消息都刷,无信息量。
编译通过,测试全绿。
|
2026-08-15 23:10:39 +08:00 |
|
oudecheng
|
b26a2c2512
|
feat(token): 新增缓存占比统计,聚合查询收敛到共享列清单
- 解析: OpenAIUsage 支持 DeepSeek prompt_cache_hit_tokens + OpenAI prompt_tokens_details.cached_tokens fallback;Anthropic 接入 cache_read_input_tokens
- 存储: messages 表新增 cached_tokens 列(幂等迁移),贯穿 INSERT/SELECT/聚合
- 解耦加固: 抽取 MESSAGE_LOAD_COLUMNS 收敛 6 处消息加载 SELECT;抽取 USAGE_SUM_COLUMNS + read_usage_sum_row 收敛 topic/session 两份重复 SUM 聚合
- 协议: SessionTokenStats/TopicTokenStats 新增 cached_tokens 字段
- 前端: 面板新增缓存命中行 + 缓存命中率进度条(命中率越高越绿,与 ctx 占用方向相反)
|
2026-08-15 19:21:51 +08:00 |
|
oudecheng
|
c790ee1609
|
fix(gateway): 修复已完成子智能体任务卡在"子智能体正在执行..."
TaskStarted 补发逻辑改为基于 tool_result 存在性判断(替代 state==Running),
并在补发事件中携带 tool_call_id 以实现前端精确匹配。
- TaskSession 新增 tool_call_id 字段,runtime.spawn 时从 parent_context 注入
- send_topic_history/send_task_messages 收集历史中已有 tool_result 的 tool_call_id
集合,仅对没有 tool_result 的任务补发 TaskStarted(不论 Running/Completed)
- 补发时传入 task.tool_call_id,前端可精确匹配 task tool_call 卡片,
避免多并行子智能体场景下 fallback 串扰
- 移除未使用的 TaskSessionState 导入
修复场景:父智能体启动多个并行子智能体,其中一个完成但另一个仍在运行时
重载 topic,已完成的子智能体因 state!=Running 被跳过,导致其 tool_call
卡片永远收不到 TaskStarted,卡在"子智能体正在执行..."无法变为"查看实时进度"。
|
2026-08-05 17:34:03 +08:00 |
|
oudecheng
|
bb2774c6b5
|
feat(web): token 统计从侧边栏迁移到右侧面板,支持子代理每轮刷新
- 新增 TopicTokenStatsPanel 面板,显示五字段 + 上下文占用进度条
- 移除 TopicList 侧边栏的 token 统计显示
- 后端新增 get_session_token_stats,按 session_id 精确查询子代理 token
- TaskMessagesLoaded 协议扩展 token_stats 字段,ws.rs 转发至前端
- useMessages/useSubAgentView 每轮 assistant_response/execution_completed 触发刷新
- App.tsx 根据当前视图分派 list_topics(主代理)或 load_task_messages(子代理)
- 抽取 utils/tokenStats.ts 共享格式化与占用率计算函数
|
2026-08-05 12:09:40 +08:00 |
|
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
|
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
|
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
|
175e7fc01b
|
refactor(subagent): 支持带类型的子智能体标题格式
- 将子智能体标题解析升级为支持 "Subagent [type]: description" 格式
- 兼容旧格式 "Subagent: description",默认类型为 "general"
- 修改子智能体会话标题生成,包含类型信息
- 优化记录解析和会话创建逻辑,提高子智能体信息表达准确性
|
2026-06-18 14:27:38 +08:00 |
|
oudecheng
|
4cb26b5b67
|
feat: 子智能体任务消息查看,实时广播工具调用事件
- 新增 LoadTaskMessages 命令,加载子智能体任务的历史消息
- SubAgentEmitter 通过 MessageBus 实时广播子智能体工具调用
- 前端新增子智能体视图,支持导航进入/退出子智能体会话
- 外部渠道过滤子智能体事件,避免推送到飞书/微信
- ToolCall/ToolResult 新增 subagent_task_id 字段
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-29 11:15:38 +08:00 |
|