chore: 升级版本号至 0.3.5 并更新 CHANGELOG
This commit is contained in:
parent
29060315a3
commit
3910bc324b
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "picobot"
|
||||
version = "0.3.3"
|
||||
version = "0.3.5"
|
||||
edition = "2024"
|
||||
|
||||
[lints.rust]
|
||||
|
||||
@ -2,6 +2,124 @@
|
||||
|
||||
本文件记录 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 为 Arc,DB 层自带事务保护)
|
||||
4. 短暂持锁:reload 内存历史
|
||||
- 并发安全:同 topic 由调用方的 per-topic serial lock 保证串行;不同 topic 完全并行不受影响。
|
||||
|
||||
#### MCP 前端空输入重置为不超时
|
||||
- 清空输入框时回退到默认值 300 而非 0(0 表示不超时,与用户预期不符)。
|
||||
- 新增两个 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.2] 的 12 个 commit 迭代,聚焦 **前端渲染性能飞跃**、**流式通信健壮性** 与 **代码质量治理** 三大方向。
|
||||
@ -380,6 +498,8 @@
|
||||
- 前端静态文件嵌入二进制。
|
||||
- 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.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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user