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

This commit is contained in:
oudecheng 2026-08-12 08:39:40 +08:00
parent 29060315a3
commit 3910bc324b
2 changed files with 121 additions and 1 deletions

View File

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

View File

@ -2,6 +2,124 @@
本文件记录 Picobot 各版本的显著变更,遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 风格。 本文件记录 Picobot 各版本的显著变更,遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 风格。
## [0.3.5] - 2026-08-12
较 [0.3.4] 的 4 个 commit 迭代,聚焦 **可观测性**、**并发性能** 与 **外部集成健壮性** 三大方向。
### 新增功能
#### MCP 工具调用超时保护
- 在 `McpToolWrapper` 适配层用 `tokio::time::timeout` 包裹 `call_tool`,防止外部 MCP server 挂起导致 agent loop 无限阻塞。
- 超时时间通过 `config.mcp_tool_timeout_secs` 配置(默认 300 秒0=不超时)。
- 前端 McpTab 设置页提供输入框。
#### 端到端可观测性整改
- **trace_id 全链路传播**`BusToolCallEmitter` / `SubAgentEmitter` / `processor` 全链路设置 trace_id。
- **AgentEnd 指标配对**:补发 5 个 cancel/defensive 路径的 AgentEnd 事件,闭合 AgentStart 指标。
- **LLM 计时修正**`attempt_start` 移入 retry 循环,排除退避等待时间。
- **`/metrics` auth**:非 loopback 部署时纳入 Bearer token 校验。
- **recorder 复用**`OnceLock` 缓存 `PrometheusHandle`,热重启后不再返回 503。
- **结构化日志**:新增 `tracing_ctx` + JSON 日志格式支持。
### 修复
#### 压缩期间 session 锁阻塞新建话题
- 压缩任务在 LLM 调用2-5s期间持有 session 锁,阻塞 `create_session` 命令获取锁执行 `switch_topic`,导致新建话题后列表刷新延迟。
- 将压缩重构为 4 阶段:
1. 短暂持锁:读取 history/compressor/store/session_id/provider_config
2. 释放锁LLM 压缩调用2-5s
3. 释放锁DB 写入store 为 ArcDB 层自带事务保护)
4. 短暂持锁reload 内存历史
- 并发安全:同 topic 由调用方的 per-topic serial lock 保证串行;不同 topic 完全并行不受影响。
#### MCP 前端空输入重置为不超时
- 清空输入框时回退到默认值 300 而非 00 表示不超时,与用户预期不符)。
- 新增两个 tokio 测试覆盖有超时和无超时error pass-through路径。
### 测试
- MCP 超时路径新增 2 个 tokio 单元测试。
---
## [0.3.4] - 2026-08-10
较 [0.3.3] 的 9 个 commit 迭代,聚焦 **安全加固**、**健壮性防御** 与 **代码质量优化** 三大方向。
### 新增功能
#### 顶栏显示后端版本号
- 复用现有 `/health` 端点返回的 `CARGO_PKG_VERSION`,避免在 `package.json` 重复维护版本号。
- 前端挂载时拉取一次,失败则不显示徽标。
#### 文件工具路径限制(最小权限原则)
- 默认行为:文件读写编辑限制在当前工作目录内。
- 新增配置项:`tools.allowed_dirs`(白名单目录列表)+ `tools.file_access_unrestricted`opt-in 全局放开)。
- 共享 `resolve_file_path()` 函数,使用 `canonicalize()` 防御符号链接与 `..` 路径遍历。
- 前端:设置页 > 工具标签新增"文件访问"卡片,含开关与目录标签编辑器。
- 向后兼容:旧配置默认 cwd 限制(`serde(default)`)。
### 安全修复
#### Shell 会话生命周期管理
- `GatewayState` 持有 `Arc<ShellSessionManager>` 引用,网关关闭时(`ctrl_c` 和重启两条路径)调用 `shutdown()`
- 新增防御性 `Drop` impl泄露会话时打 warn 日志。
- 子进程 kill 添加 5s 超时,防止无限阻塞。
#### HTTP 工具 OOM 防护
- `WebFetchTool` / `HttpRequestTool` 实现流式读取响应体(`futures_util::StreamExt`),防止大响应撑爆内存。
- 检查 `Content-Length` 头,分块读取并累计校验大小。
- 默认限制:`WebFetch` 200KB`HttpRequest` 4MB。
#### TimeTool 重复类型转换修复
- 移除 `time.rs` 中重复的 `u32::try_from` 调用(复制粘贴错误)。
#### 消除 16 处 unreachable! panic 风险
- 15 个 command handler 文件中 `_ => unreachable!()` 替换为 `_ => Err(CommandError::new(...))`,防止 `Command` 枚举新增变体时运行时 panic。
#### 配置占位符校验
- 新增 `validate_no_unresolved_placeholders()`,拒绝包含未解析 `<ENV_VAR>``\` 占位符的配置。
- 防止字面占位符字符串被当作真实 API key 发送到 LLM provider难以诊断的 401 根因)。
- 首次运行跳过校验(`create_default_config` 模板场景)。
### 修复
#### 切换话题后滚动到最新消息
- 修复切换话题后不滚动到最新消息的问题。
- 跟随意图仅由用户输入wheel/touch/key推翻程序触发的滚动不会打断用户浏览。
- 将虚拟化 `totalSize` 纳入滚动依赖,使测量收敛到真实底部。
#### WebSocket 重连竞态修复
- 修复 URL 切换时的 WebSocket 重连竞态问题。
- 事件处理引入代际同一性守卫,孤儿 socket 事件整体忽略。
- disconnect 恰好触发一次 `onDisconnect`,避免重复清理。
#### 删除话题竞态修复
- 修复删除选中话题时的竞态问题。
- 乐观移除本地话题并以 `null` 作为唯一无选择哨兵。
- 杜绝基于过期列表重选已删除话题。
### 重构
#### 8 处 quick wins
- `shared.rs` 提取 channel/cli 适配器公共逻辑,消除 124 行重复代码。
- `http_utils.rs` 提取 HTTP 响应读取公共逻辑,`http_request.rs``web_fetch.rs` 共享实现。
- `bash.rs` / `shell_session.rs` 简化冗余逻辑。
- `gateway/mod.rs` 优化路由分支。
- `storage/mod.rs` 精简查询逻辑。
- `mcp/client.rs` 增强错误处理。
### 内部改进
- 修复 release 构建编译器警告:补全 `regex::Captures` 显式生命周期标注,`cfg(debug_assertions)` 条件化仅 debug 使用的变量,`AnthropicProvider::llm_timeout_secs` 添加 `cfg_attr allow(dead_code)`
- 飞书 channel 时间戳去重改用 `crate::utils::current_timestamp()`,消除 `unwrap()` panic 点并统一日志格式。
- 批量更新依赖 patch 版本chrono, clap, anyhow, bytes 等),无 breaking change。
### 测试
- `cancel_manager.rs` 新增 8 个单元测试,覆盖 register/cancel/remove/overwrite/list/cancel_all/drop-safety 核心路径。
- `session_pool.rs` 新增 3 个单元测试,覆盖 `is_scheduler_chat_id` 路由逻辑。
- 配置占位符校验新增 11 个单元测试,覆盖空值、小写、数字、去重、多占位符、首次运行、加载集成等边缘场景。
---
## [0.3.3] - 2026-08-07 ## [0.3.3] - 2026-08-07
较 [0.3.2] 的 12 个 commit 迭代,聚焦 **前端渲染性能飞跃**、**流式通信健壮性** 与 **代码质量治理** 三大方向。 较 [0.3.2] 的 12 个 commit 迭代,聚焦 **前端渲染性能飞跃**、**流式通信健壮性** 与 **代码质量治理** 三大方向。
@ -380,6 +498,8 @@
- 前端静态文件嵌入二进制。 - 前端静态文件嵌入二进制。
- React Web UI 前端界面。 - React Web UI 前端界面。
[0.3.5]: https://github.com/picobot/picobot/compare/v0.3.4...v0.3.5
[0.3.4]: https://github.com/picobot/picobot/compare/v0.3.3...v0.3.4
[0.3.3]: https://github.com/picobot/picobot/compare/v0.3.2...v0.3.3 [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.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.1]: https://github.com/picobot/picobot/compare/v0.3.0...v0.3.1