chore: 升级版本号至 0.3.1 并更新 CHANGELOG

收录自 0.3.0 以来 19 个 commit 的变更,涵盖五大方向:
- 历史压缩保留原消息(双视图分离)
- Topic 维度 token 统计
- 前端渲染稳定性修复
- 工具执行可靠性修复
- 网关吞吐与存储查询优化
This commit is contained in:
oudecheng 2026-08-05 12:56:58 +08:00
parent 81fbee4878
commit bc26c66169
3 changed files with 78 additions and 2 deletions

2
Cargo.lock generated
View File

@ -1635,7 +1635,7 @@ dependencies = [
[[package]]
name = "picobot"
version = "0.3.0"
version = "0.3.1"
dependencies = [
"anyhow",
"async-trait",

View File

@ -1,6 +1,6 @@
[package]
name = "picobot"
version = "0.3.0"
version = "0.3.1"
edition = "2024"
[lints.rust]

View File

@ -2,6 +2,80 @@
本文件记录 Picobot 各版本的显著变更,遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 风格。
## [0.3.1] - 2026-08-05
较 [0.3.0] 的 19 个 commit 迭代,聚焦 **历史压缩可追溯性**、**token 统计准确性**、**前端渲染稳定性**、**工具执行可靠性** 与 **网关吞吐优化** 五大方向。
### 新增功能
#### 历史压缩保留原消息(双视图分离)
- 压缩流程从物理删除原消息改为标记位 `is_compacted` 分离两个视图:
- **LLM 视角**`load_messages_for_topic`):只看 `is_compacted=0` 的压缩摘要 + 新消息context 仍精简。
- **UI 视角**`load_messages_for_topic_full`):看原消息(含 `is_compacted=1`+ 新消息,排除压缩摘要,前端切回老话题仍能展示完整原始对话。
- 新增 `compact_topic_history`:不删除原消息,仅打标记 + 插入摘要,同事务内删除旧摘要避免累积。修复 token 统计因压缩丢失 `usage` 的问题。
- `messages` 表新增 `is_compacted INTEGER NOT NULL DEFAULT 0`migration 幂等。
#### Topic 维度 token 统计
- 新增 `batch_topic_token_stats`,按 `topic_id` 聚合 token 消耗,替代原按 `session_id` 聚合导致的同 session 多 topic 共享总和问题。
- 前端侧边栏每个 topic 显示独立 token 消耗与 context 占用百分比Coins 图标 + 数值,绿/黄/红三色指示)。
- 主代理执行结束时触发 `list_topics` 刷新500ms 防抖),实时更新侧边栏 token 统计;子代理每轮执行也支持刷新。
#### 设置页重启按钮
- 设置页 Footer 区新增重启按钮,样式为 `bg-tertiary` + 边框,与主保存按钮区分。
- 确认对话框区分触发来源:保存后触发显示"配置已保存 / 稍后",手动触发显示"重启服务 / 取消"并警告未保存改动。
- 状态管理改用 `restartDialogMode: 'saved' | 'manual' | null`,按钮在重启期间显示 loading 并禁用。
#### 设置页懒加载标签页与子代理管理
- 拆分设置页为懒加载标签页,减少首屏渲染负担。
- 前端支持子代理创建与删除,配合 `PUT /api/subagents/update` 端点。
#### LLM 主调用可配置重试机制0.3.0 收尾补充)
- `ProviderConfig` 增加 `max_retries` 字段serde default=3向后兼容
- `agent_loop` 流式 + summary 两个调用点实现重试循环:指数退避 1s/2s/4s仅对 429/502/503/504/timeout/connection reset 重试;流式仅在未 emit delta 时重试,避免重复输出。
### 修复
#### 前端渲染稳定性
- `MessageBubble` 使用 `React.memo` 避免流式期间不必要重渲染。
- `useWebSocket` 回调 ref-化,避免父组件重渲染触发 WebSocket 无谓重连。
- 修复触发滚动到底部按钮时新消息计数错误。
- 修复话题重命名预填字段与写入字段不一致。
- 修复流式期间消息重渲染、WebSocket 无谓重连与新消息计数错误。
#### 子智能体结果展示
- 失败/超时子智能体返回结构化结果,前端可点击查看详情,而非静默丢失。
#### Token 统计准确性
- 修复 token 统计按 `session_id` 聚合导致同 session 多 topic 共享总和:改为按 `topic_id` 聚合,子代理消息通过 `session_id NOT LIKE 'sub:%'` 排除。
- 修复主代理执行结束后 token 统计不刷新:`useMessages``execution_completed` 事件时触发 `bumpTopicRefreshTrigger()`
#### 工具执行可靠性
- 修复 shell 工具超时未生效:`adb start-server` 守护进程继承 stdout 管道导致 EOF 阻塞,`adb devices` 误判 socket 等待为 stdin 等待绕过 deadline。新增 `STREAM_DRAIN_MS` 常量、改进 `kill_and_reap`、移除 `should_return_pending` 中的错误检查,确保 timeout 参数完全覆盖默认值。
#### 安全加固
- `web_fetch` 加固 SSRF 防护,禁用 HTTP 重定向,与 `http_request` 实现对齐。
#### MCP 兼容性
- 限制 MCP server 名称字符并兜底 `tool_name` 清洗,避免非法字符导致 OpenAI API 400。
### 性能优化
#### 网关吞吐
- `send_with_retry``ChannelFull` 错误短路(不重试、不退避),加速队列消费,避免 dispatcher 在满队列时 7s 退避阻塞。
- 新增 `ChannelError::ChannelFull` 变体,`CliChannel``try_send` 返回 `Full` 时映射为 `ChannelFull`
#### 存储查询
- `get_topic_message_count` 改用 `SELECT COUNT(*)` 在数据库侧计数,避免将所有消息(含 `content``tool_calls_json` 等大字段)加载到内存。
#### 热路径优化
- 减少热路径无谓拷贝与重复正则编译,跳过已完成 migration。
### 内部改进
- 删除临时计划文件 `PLAN.md`
- CHANGELOG 补充 LLM 重试机制条目并修正 commit 计数。
---
## [0.3.0] - 2026-08-04
较 [0.2.0] 的 18 个 commit 迭代,聚焦 **Agent 执行与显示层解耦**、**LLM 调用稳定性**、**工程化基线**、**并发持久化稳定性**、**安全加固** 与 **MCP 兼容性** 六大方向。锁屏冻结架构修复经五轮对抗性审查验证。
@ -188,5 +262,7 @@
- 前端静态文件嵌入二进制。
- React Web UI 前端界面。
[0.3.1]: https://github.com/picobot/picobot/compare/v0.3.0...v0.3.1
[0.3.0]: https://github.com/picobot/picobot/compare/v0.2.0...v0.3.0
[0.2.0]: https://github.com/picobot/picobot/compare/v0.1.2...v0.2.0
[0.1.2]: https://github.com/picobot/picobot/releases/tag/v0.1.2