chore(release): 0.4.3——max_run_secs 默认改为不限制

max_run_secs 默认值由 3600(60 分钟)改为 0(不限制),避免长任务被单次执行时间上限中断;需要时可在 config.json 的 agents 段显式配置。同步版本号提升至 0.4.3 并更新 CHANGELOG。
This commit is contained in:
oudecheng 2026-08-18 15:35:22 +08:00
parent 028f60557e
commit 3cef9da443
4 changed files with 70 additions and 4 deletions

2
Cargo.lock generated
View File

@ -1728,7 +1728,7 @@ dependencies = [
[[package]]
name = "picobot"
version = "0.4.2"
version = "0.4.3"
dependencies = [
"anyhow",
"async-trait",

View File

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

View File

@ -2,6 +2,72 @@
本文件记录 Picobot 各版本的显著变更,遵循 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/) 风格。
## [0.4.3] - 2026-08-18
较 [0.4.2] 的 13 个 commit 迭代,聚焦 **长话题历史分页**、**全链路性能优化(两批)**、**长会话稳定性兜底** 与 **对抗性审查修复** 四大方向。
### 新增功能
#### 长话题历史 keyset 分页加载
- 后端新增 `load_messages_for_topic_page`,按 `seq < cursor + limit``(session_id, seq)` 复合索引替代 OFFSET 深翻页,`ChatMessage` 增加 `seq` 游标字段,支持超大量历史消息。
- 前端触顶增量加载:批次缓存在 `pendingHistoryRef`,收到 `topic_history_end` 一次性去重 prepend`scrollTop` 按新增高度补偿锚定原头部消息不足一屏自动补页loading 超时 10s 自愈;流式输出中加载历史不清空流式累加器。
#### 设置页字段 UX 改进
- 设置页字段提示改为问号图标悬停气泡,避免长说明文本挤占布局宽度。
#### 子代理运行时长配置化
- `max_run_secs` 接入 `AgentConfig``config.json``agents` 段),不再硬编码;`From` 透传与所有字面构造点已补齐。
- `cli init` 写入 agent 路径时保留既有 `max_run_secs` 而非重置默认。
- `max_run_secs` 默认值由 360060 分钟)改为 0不限制避免长任务被单次执行时间上限中断需要时可在 `config.json``agents` 段显式配置。
### 性能优化
#### 第一批性能修复
- 飞书通道 HTTP client新增 connect/全局超时token 刷新与 reaction 叠加紧超时,消除无限挂起风险。
- SQLiteWAL 模式下 `synchronous=NORMAL`per-connection `with_init`6 处批量写入循环改用 `prepare_cached` 复用预编译语句,写入吞吐显著提升。
- `web_fetch`:复用长生命周期 HTTP client响应体改为流式限长读取上限=字符限额×4封顶 32MB替代全量读完再截断。
- 前端:`App.tsx` effect/callback 依赖由 `subAgentView` 对象改为 `subAgentTaskId` 原始值,修复子代理流式期间 token 统计 500ms 定时器被每帧重置永不触发;`MessageBubble` / `ToolDetailModal``ReactMarkdown` components 与 remarkPlugins 提升为模块级常量,避免流式渲染期间每帧重建。
#### 第二批性能修复
- 同步阻塞操作附件处理、历史加载、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` 缓存分组排序结果。
#### MCP 可观测
- MCP tool 调用全链路往返耗时入口→MCP server→返回新增 debug 日志,便于定位慢调用。
### 修复
#### 长会话后新消息无响应(核心稳定性)
- 发送 `ExecutionCompleted` 前惰性清理僵尸 running 子代理DB 标记 running 但执行任务已消失),解除 pending 消息长期阻塞。
- Processor panic 路径补发 error 通知 + `ExecutionCompleted`,防止前端永久 loading。
- Agent 单轮增加墙钟预算 `max_run_secs`,超时优雅退出并释放 topic 串行锁。
- Topic 串行锁等待增加 info/warn 日志,长等待可观测。
- Sanitize 清理结果回写 DB`delete_messages_by_ids`),消除每次历史加载的重复修复开销。
- Storage 新增 keyset 分页与按 ID 批量删除的单元测试,回归有保障。
#### 对抗性审查修复
- 子代理 spawn 顺序调整为「先注册 `cancel_registry` → 再写 DB running 记录」,消除 reap 误杀刚启动子代理的微秒级竞态窗口。
- `delete_messages_by_ids` 删除后按活 COUNT 重算 `sessions/topics``message_count`,修复计数列漂移。
#### 存储数据正确性
- 归一化历史前缀累积污染的会话 ID一次性迁移修复会话 ID 被多次加前缀导致查询找不到对应行。
- 清理旧版本遗留的空 CLI 会话,`list_sessions` 日志级别从 info 降级 debug减少运行噪音。
#### 前端交互
- 回到顶部改用 rAF 自驱动动画,修复消息多时平滑滚动被 virtualizer 纠正写入打断停在半路。
#### Provider 请求兼容
- Anthropic 型 provider `max_tokens` 留空兜底从默认值提高至 8192。
- 模型未配置 Temperature 时,请求体 JSON 不再携带该字段,避免部分供应商对显式 null/空值报错。
#### Windows 终端卡死
- 启动时禁用 Windows 控制台 QuickEdit 模式并改为非阻塞日志写入,修复 stdout 输出被 QuickEdit 选中阻塞、需按回车才继续的历史顽疾。
---
## [0.4.2] - 2026-08-17
较 [0.4.1] 的 8 个 commit 迭代,聚焦 **安全漏洞修复**、**全链路性能优化** 与 **前端健壮性** 三大方向。

View File

@ -22,8 +22,8 @@ pub struct AgentRuntimeConfig {
pub max_run_secs: u64,
}
/// 单次 agent run 默认墙钟预算。
pub const DEFAULT_MAX_RUN_SECS: u64 = 3600;
/// 单次 agent run 默认墙钟预算。默认 0 表示不限制,需要时可在 config.json 的 agents 段按 agent 设置。
pub const DEFAULT_MAX_RUN_SECS: u64 = 0;
impl From<LLMProviderConfig> for AgentRuntimeConfig {
fn from(config: LLMProviderConfig) -> Self {