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

This commit is contained in:
oudecheng 2026-08-07 11:55:59 +08:00
parent 79d099a3bc
commit da62905505
2 changed files with 71 additions and 1 deletions

View File

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

View File

@ -2,6 +2,74 @@
本文件记录 Picobot 各版本的显著变更,遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 风格。
## [0.3.3] - 2026-08-07
较 [0.3.2] 的 12 个 commit 迭代,聚焦 **前端渲染性能飞跃**、**流式通信健壮性** 与 **代码质量治理** 三大方向。
### 新增功能
#### 执行状态对账端点
- 新增 `GET /api/executions` HTTP 端点,返回后端权威的执行中话题集合。前端 WebSocket 重连时调用此端点对账,修正断连期间丢失的 `execution_completed` 信号导致的状态漂移。
### 性能优化
#### 消息列表虚拟化(长对话不再卡顿)
- 引入 `@tanstack/react-virtual` 替换原 `messages.map` 全量渲染,只渲染视口内 + overscan=6 条消息DOM 节点数恒定。
- `measureElement` 动态测量变高度消息(一行文本 vs 50 行代码块),`estimateSize=120` 提供初始估计,测量后自动校正。
- Firefox 特殊处理 `measureElement``getBoundingClientRect`)。
- 适配现有功能:自动滚到底部改用 `virtualizer.scrollToIndex``viewKey` 滚动位置记忆保留;`highlightedMessageId` 先渲染目标项再 rAF 加 class流式 delta 不计数(消息条数不变)。
- 性能对比500 条消息DOM 节点 10000+ → ~200首次渲染数百 ms → <16ms流式 diff 从全量列表降至仅可见项
#### 流式 delta 批处理(避免每 token 全数组拷贝)
- 用 `streamingRef` 累加 delta chunks + `requestAnimationFrame` 批量 flush将每秒数十次 O(n) 数组拷贝合并为一帧一次状态更新。
- `useMessages.ts` 新增 `streamingRef` 累加器 + rAF 调度,所有 delta 只 push 到 ref`flushStreaming` 批量落盘。
- `useChat.ts` 5 处 `setMessages([])` 改为 `clearMessages()`,切话题/会话/通道时重置流式 ref避免脏状态残留。
- 复杂度O(n²·L) → O(n) 每帧。
### 改进
#### 压缩阈值默认值下调
- 工程化压缩阈值 `threshold_ratio` 从 0.7 下调至 0.550%LLM 压缩阈值 `llm_compaction_threshold_ratio` 从 0.5 下调至 0.330%)。
- 降低触发门槛使压缩更积极介入,减少上下文溢出风险。同步更新相关注释、日志信息和前端 hint 文案。
### 修复
#### 输入框/发送按钮状态按话题隔离
- 将单一全局 `isLoading` 布尔值重构为按 `topic_id` 跟踪的 `processingTopicIds` 集合,`isLoading` 派生自当前选中话题是否在集合中。
- 导航响应不再清空处理状态,切换话题后切回原话题仍能正确禁用输入。
- 重连时通过 `/api/executions` 端点对账后端权威执行状态,修正断连期间丢失的 `execution_completed` 信号。
#### WebSocket 断连时清理流式状态
- 修复 WebSocket 在流式输出中途断连时 `streamingRef`contentChunks/index不重置导致重连后新消息 delta 追加到旧消息错误位置。
- 修复链路:`useWebSocket``onDisconnect` 回调 → `useChat``finishStreaming``useMessages``finishStreaming`(重置 ref + flush pending chunks
#### 会话消息泄露到定时任务视图
- `handleSchedulerMessage`Tier 1 路由)原先无条件吞掉所有可转换的 chat 消息,导致正在执行的实时消息被错误追加到调度器视图。
- 修复:调度器视图只接收不带 `topic_id` 的历史加载消息;实时流式消息和带 `topic_id` 的实时消息 fall through 到主视图。
### 重构
#### 公共工具函数提取与 DRY
- 提取 `src/utils.rs` 公共工具函数模块,消除跨模块重复逻辑。
- 修复飞书 channel 正则表达式重复编译问题,改为 `Lazy<Regex>` 一次编译。
- 网关路由逻辑 DRY 化,减少 `gateway/mod.rs` 重复代码。
- `agent_loop` / `providers` / `config` / `storage` 等多模块统一引用公共函数20 个文件受影响。
- CI 新增安全审计步骤(`cargo audit`)。
### 内部改进
- 存储模块应用 `rustfmt` 格式化(`migrations.rs` / `row_mapping.rs` / `tests.rs`)。
- 降低 `list_todos` handler 与 gateway 转发日志级别为 debug减少子代理多次更新待办时的 INFO 日志噪音。
- 删除临时优化计划文件 `OPTIMIZATION_PLAN.md`
### 测试
- 新增 MessageList 虚拟化对抗性 smoke test5 个用例空消息渲染、100 条消息不崩溃、highlight 视口外不崩溃、viewKey 切换不崩溃、流式 rerender 不崩溃。
- 新增流式断连对抗性测试2 个用例):`stream_end` 幂等性验证、多周期断连-重连循环下 `finishStreaming` 幂等验证。
- 新增断连后新 delta 不污染旧消息测试(用例 17
- 新增定时任务视图消息隔离测试(用例 16
- 新增批量 delta 累加与 `stream_end``assistant_response` 替换对抗性测试。
---
## [0.3.2] - 2026-08-06
较 [0.3.1] 的 7 个 commit 迭代,聚焦 **上下文压缩可配置化**、**网关安全加固**、**并发模型优化** 与 **错误防御性提升** 四大方向。
@ -312,6 +380,8 @@
- 前端静态文件嵌入二进制。
- React Web UI 前端界面。
[0.3.3]: https://github.com/picobot/picobot/compare/v0.3.2...v0.3.3
[0.3.2]: https://github.com/picobot/picobot/compare/v0.3.1...v0.3.2
[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