# 更新日志

CodeBuddy Code 的所有重要更新都会记录在这里。

我们遵循 [语义化版本](https://semver.org/spec/v2.0.0.html) 规范。


## [未发布]

## [2.137.0] - 2026-08-15

### 🎉 新功能

- **`--brief` 开关与 `SendUserMessage` 工具**：启用 `--brief`（或 `CODEBUDDY_BRIEF` 环境变量）后，为当前会话开启 `SendUserMessage` 工具，作为 Agent 面向用户的主要可见输出通道。工具入参 `message`（支持 markdown）/ `attachments?`（文件路径，解析回传 `{path, size, isImage}` 元信息）/ `status`（`normal` 回应 vs `proactive` 主动上报），返回值带工具执行时刻的 `sentAt` ISO 时间戳。开启后系统提示注入 brief 引导（所有回复走 `SendUserMessage`，遵循 ack → work → checkpoint → result）。未开启时工具不可见/不可调用。
- **`CODEBUDDY_CUSTOM_HEADERS` 覆盖内置工具的平台请求**：WebSearch / WebFetch / ImageGen / VideoGen 打向平台 endpoint 的请求会带上该环境变量（或 settings `env`）里配置的自定义头。第三方 URL（WebFetch 直连兜底、COS 下载等）不注入；`Authorization` / `X-Request-ID` 等头不允许被该变量覆盖。

### 🔧 功能改进

- **内置插件市场改为 ZIP 分发**：CLI 内置插件市场由 Git 仓库克隆改为 ZIP 归档下载安装，提升安装稳定性与更新效率。
- **Prompt 变量缓存日志**：增加缓存加载、命中、失效及并发复用的 Info 日志，便于定位运行时是否持续从内存快照注入变量。

### 🐛 问题修复

- **上下文超限自动恢复**：修复长任务工具循环中途因上下文超出模型窗口被网关拒绝（返回专用超限码）时，对话直接报错、无法自愈的问题。现在这类超限会自动触发上下文压缩并重试，用户无感继续对话。
- **超限前置预防**：在发起可能超窗的请求前，若本地预估输入叠加输出预留会超出上下文窗口，会先同步完成一次上下文压缩再发送，从源头减少超限报错。
- **会话假完成**：修复长会话自动压缩后，界面短暂显示「已完成/已停止」随即又继续运行的问题。现在压缩续跑期间界面保持运行中，不再误显示会话已结束；正常结束的显示不受影响。
- **Prompt 变量内存缓存**：首次成功读取 `--prompt-vars-file` 后缓存变量快照，Agent Loop 后续渲染不再依赖临时文件，避免文件中途丢失导致 Prompt 失败。
- **子 Agent / Bash 不再因沙箱未就绪而永久卡住**：`waitReady()` 在沙箱从未启动或上次启动失败时立即失败，而不是挂起。子 Agent、命令执行和写规则会降级继续，不再卡在 preparing。

## [2.136.0] - 2026-08-13

### 🎉 新功能

- **自动压缩窗口配置**：settings.json 新增 `autoCompactWindow`，可自定义自动压缩计算的上下文窗口基准值。压缩触发点按 `min(该值, 模型有效预算) × 阈值` 计算，仅在模型有效预算内进一步收窄触发时机，不影响上下文用量展示。默认（未设置）跟随模型窗口；环境变量 `CODEBUDDY_AUTO_COMPACT_WINDOW` 优先级更高。支持通过 `/config` 和设置面板配置。
- **`--autocompact` 命令行参数**：启动时设置自动压缩窗口大小，接受 `auto`（跟随模型窗口）或 token 数（如 `400000`、`400k`、`1m`，自动 clamp 到 100k–1M）。
- **`/autocompact` 斜杠命令**：会话中随时调整自动压缩窗口并持久化到用户设置，即时生效。`/autocompact auto` 恢复为跟随模型窗口，`/autocompact 400k` 设为指定大小，无参数时显示当前值。

### 🔧 功能改进

- **启动内存优化**：命令解析器改用纯 TypeScript 实现，不再加载 WASM 运行时。不涉及 Bash 命令的一次性对话不再承担额外的启动内存开销，命令解析在短命令上更快，且解析结果保持一致。
- **上下文用量数据支撑**：stdio 常驻 stream-json 协议（`--input-format stream-json --output-format stream-json`）的每轮 `result` 消息新增模型 token 用量：顶层 `modelUsage`（按模型分类，含 `contextWindow`，不含 costUSD），以及 `_meta` 里的上下文占用与分类细拆数据，支撑「上下文用量」面板展示已用/窗口占比与分类环。

### 🐛 问题修复

- 修复 LSP / ripgrep 子进程在 agent-cli 通过 `process.exit()` 退出时残留为孤儿进程的问题，覆盖 bun 编译二进制下同步退出、Electron-as-Node 宿主下的退出路径等场景。
- 修复工具调用场景下最终回复可能被误判为重复消息而不显示的问题。
- 修复 Windows 下 `Ctrl+Break`（`SIGBREAK`）不触发子进程清理的问题，现在可立即清理子进程而不必等待孤儿 TTY 探测兜底。
- 修复 MCP Server 在工具枚举期间动态连接时，同一 Server 可能被重复枚举并导致工具调用失败的问题。
- 修复 `-p --output-format stream-json` 下流式工具调用首片 arguments 被吞导致兼容层输出不合法 JSON 的问题。
- 修复 Windows 上 git 仓库内文件补全输入关键字后无候选的问题，并修正相关 git 命令执行的稳定性问题。

## [2.135.0] - 2026-08-12

### 🎉 新功能

- **会话上下文窗口选择**：对物理支持更大上下文的模型，支持为当前会话选择上下文预算档位（如 200K / 1M）。所选档位会作为自动压缩阈值与上下文用量展示（上下文环）的统一分母；同进程内切换会话保持该选择，重启进程后回落模型默认档。
- **Web UI 移动端体验完善**：最近会话页、智能体列表页、主对话页和历史抽屉新增移动端抽屉交互与响应式布局；智能体较多时支持折叠展示，保留当前会话和常用入口；Web 历史和上下文继承列表按 20 条分页加载，滚动到底部继续追加。

### 🔧 功能改进

- **编辑器体验优化**：完善文件加载、保存、自动保存和关闭保护状态，避免失败时静默丢失编辑内容；增加标签页、快速打开、文件树和可调分隔条的键盘与无障碍支持；优化移动端编辑器导航、主题同步和状态反馈。
- **冷启动首屏提速**：`cbc -y` 裸启动首次 agent 构建改为缓存优先，仅当本地无可用产品缓存时才回退等待完整同步，有缓存用户不再每次冷启动都多等约 1.9s；无缓存首启防崩溃兜底保持不变。
- **Windows 子进程体验优化**：减少状态栏命令和本地网关管道进程启动时出现可见控制台窗口的情况。

### 🐛 问题修复

- 修复 iOA / Docker 企业网络下首次登录偶发不走代理直连导致 `ENETUNREACH` 的问题。
- 修复 ACP 客户端在会话准备阶段发送 cancel 后，会话状态卡在 "cancelling" 导致后续消息被静默拒绝的问题。
- 修复 `/config -d` 把 `Env-Route` 切到 `staging` 后登录仍打到生产 endpoint，导致登录成功后秒级跳回登录页的问题。
- 修复自定义 Agent 的模型声明和 Agent 工具模型参数未按预期生效的问题；修复并发运行同类型子代理时模型配置互相覆盖的问题，并保证 fork 子代理继承父会话模型。
- 修复 Web UI 在持续交互期间恢复智能体、终止对话等控制操作被长期排队的问题；修复 Windows 工作区路径差异和长会话历史链截断导致 Web 历史会话不可见的问题；优化智能体列表页状态通知，避免完成通知常驻或重复提示。
- 识别沙箱返回的程序黑名单命中原因，转换为模型可理解的明确错误，并阻止其误入文件权限申请或通过其他 Shell、脚本重复尝试。
- 修复 CBC Web UI 终端在系统休眠、锁屏或临时断网后无法自动恢复原会话的问题。
- 统一固化并上报会话、请求、消息、主 Turn 与 ToolCall 关联 ID，避免异步结算读取到其他 Session。
- 修复 Web UI 趣味统计文案在无关页面更新时随机跳变的问题。
- Web UI ACP 控制通道多项稳定性修复：保持提示单流以防阻塞停止/恢复/会话切换/审批等控制操作；避免 SSE 背压相互拖累；会话重置改为先 cancel + 新建会话再删除旧会话；折叠超过五个的项目分组并新增主智能体标识。

## [2.134.0] - 2026-08-11

### 🎉 新功能

- **恶意域名防护**：为 Sandbox 网络请求和 WebFetch 接入只读 SQLite 域名哈希匹配，复用安全中心网络白名单，并在命中时阻断访问和记录安全审计。
- **沙箱安全策略托管强制**：命令沙箱在会话运行时读取企业下发的托管安全策略并强制生效，确保托管的文件保护与命令控制规则在本地执行链路中不可被绕过。
- **模型 429/限流自适应重试**：对"生成开始前"的失败（429 / 5xx / 408 / 409）新增指数退避 + jitter + 尊重服务器 `retry-after` 的自动重试，网关重启、瞬时过载等场景不再直接中断整个任务；额度耗尽类错误不再无谓重试，直接交由模型 fallback 处理；新增环境变量 `CODEBUDDY_MAX_RETRIES` 控制最大重试次数，`CODEBUDDY_RETRY_WATCHDOG=1` 开启无人值守场景的无限重试。
- **会话回退（Rewind）**：新增把工作区文件 / 对话历史恢复到某条历史用户消息之前状态的能力，供 SDK 与上游平台实现"撤销到某条消息"；提供 `--rewind-files` / `--resume-session-at` / `--dry-run` CLI flag 与 stream-json 长驻控制协议。
- **`Artifact` 工具重命名与增强**：`ShareLink` 更名为 `Artifact`，`ShareLinkUnpublish` 更名为 `ArtifactControl`；接入统一 AbTestService 灰度网关；支持 Markdown 输入并由服务端渲染，支持通过 `existingShareLink` 原地更新同一链接；权限规则与旧开关继续兼容。
- **ACP 协议透出首轮 MCP 连接状态**：ACP 客户端（IDE / Web UI）在新建会话首个 prompt 时可实时同步首轮 MCP 连接进度；TUI 顶部同步展示 `Starting MCP servers (N/M)` 状态行；stdio stream-json 输出模式广播 `system/mcp_status` 事件。
- **`Monitor` 工具新增 WebSocket 事件源**：支持直接监听 `ws://` / `wss://` 地址，服务端推送的每条消息作为事件唤醒模型，并做内网/环回/云元数据地址拦截与域名黑白名单校验。
- **Web UI 后台会话管理**：新增后台会话页面与侧边栏，支持派发、停止、重启、删除会话，内嵌完整对话能力；侧边栏结构重构，会话历史卡片化。
- **Agent View 输入框支持全量斜杠命令**，ESC 语义修正为始终回到最近交互会话；修复 `codebuddy attach` detach 后进入 Agent View 崩溃的问题，列表打开/切换提速。
- **后台命令运行状态可视化**：Web UI 对话页新增后台任务面板，展示后台执行命令的运行时长与结束状态，刷新或重连后状态不丢失。
- **`session/steer` 原语**：为上层提供无状态的"把消息插入正在执行的任务"标准 ACP 接口。
- **后台会话上下文继承升级**：从"最近 8 条/3000 字摘要预览"改为"全量历史 + 工具结果占位符"，长任务交接不再丢信息。
- **stream-json 错误事件补充结构化维度**：`result` 事件新增 `errors_info` 字段，携带 HTTP 状态码、业务码、错误分类等结构化信息。
- 新增 `CODEBUDDY_CODE_PERSIST_STDIO` 环境变量，支持将 stream-json 模式 stdio 输入输出按 JSONL 持久化，便于事后排查与回放。
- 新增 `stdio` 常驻模式请求耗时观测日志，区分首次与后续 prompt 便于定位启动开销占比。

### 🔧 功能改进

- **`--serve` 默认开启密码认证（安全加固/破坏性变更）**：此前本机绑定默认无认证，现启动时生成随机密码并打印可点链接；同时补齐此前完全无鉴权的模型配置类接口，收紧 CORS 不再无条件放行本机回环来源。需要免认证访问的场景可用 `--auth none` 显式关闭。脚本化调用需补带凭据 `Authorization: Bearer $PASSWORD`。
- **stdio 常驻模式首个 prompt 启动耗时优化**：修复多处冗余的产品配置同步与就绪等待逻辑，首个 prompt 的 `stdinWait` 从约 3 秒降至毫秒量级。
- 修复选择 `max` 思考强度被降级为 `xhigh` 导致最高档推理不生效的问题；自定义模型场景下不支持档位自动降级到 `high`。
- 优化沙箱命令黑名单可同步安全中心配置的程序黑名单到沙箱执行环境。
- 优化企业 endpoint 解析新增诊断日志，跳过云端产品配置拉取时会记录明确原因。
- `/model` 场景变体（lite/reasoning）交互拆分为独立命令 `/model:lite`、`/model:reasoning`。
- Workflow 进度事件对齐 stream-json 协议标准字段格式。

### 🐛 问题修复

- **修复多个冷启动偶发崩溃问题**：`default agent undefined/cli is not registered`，根因是 Agent 模板构建与产品配置同步为两条互不等待的异步链，现改为首次构建等待配置同步完成。
- **修复 Web UI 多项会话切换与连接问题**：ACP 会话重复申请 writer admission 导致 `ADMISSION_FAILED`；多标签页并发访问后台会话停滞；会话切换竞态导致内容重复或丢失；页面刷新后遗留连接与授权。
- **修复消息队列相关问题**：「立即发送」需等当前任务跑完才生效；点击后队列项永久转圈不移除；斜杠命令点「立即发送」后消息丢失。
- **修复后台任务通知丢失**：任务完成但界面停留在"运行中"，根因涉及消息队列消费、轮次收尾检查、队列操作误清理等三处独立成因。
- **修复上下文与压缩相关问题**：切换模型后自动压缩阈值判断错误；`/btw` 长会话触发 400 超限；压缩计数器跨请求残留导致会话永久失去压缩能力；`/context` 显示与状态栏用量不一致。
- **修复 iOA / 账户登录问题**：iOA 登录健壮性缺陷；daemon 远程访问下账户登录卡死转圈。
- **修复终端字符集污染导致 TUI 花屏问题**：外部命令输出中的 DEC 画线字符集切换不再泄漏进渲染文本，支持自动复位。
- **修复 Windows/Linux 平台问题**：Windows 删除会话偶发 `EPERM` 失败；Windows Web UI 打开后终端窗口闪烁；Linux 大仓库 Web UI 因 inotify 耗尽卡死；Linux 恶意网站拦截此前对 Bash 完全不生效。
- **修复模型请求相关问题**：模型吐出畸形工具参数后反复空转；子代理响应截断恢复可能提前误报成功；命中安全审查后会话上下文残缺且不可恢复。
- 修复 SDK 传入自定义企业 endpoint 静默失效导致拉取不到企业模型的问题。
- 修复 `--json-schema` 结构化输出续跑丢失 `--max-turns` 导致额度异常消耗的问题。
- 修复 MCP 图片兼容性、私有 CA 支持、连接失败日志诊断信息不足等问题。
- 修复计划模式多项交互问题：审阅计划看不到内容、"调整计划"误退出计划模式、团队协作计划批准后成员无法执行等。
- 其余修复：Agent View worker 回收与 attach 超时保护、`--permission-mode-before-plan` 在 Desktop sidecar 场景失效、会话历史消息 ID 不稳定、GIF 输入历史循环报错、生成工具积分消耗未合并展示等。

### 📝 文档更新

- HTTP API 文档新增后台会话章节；Web UI 文档新增「后台会话」小节。
- 重写 Workflow stdio 接入协议文档，明确协议兼容视角与事件语义。

## [2.132.0] - 2026-08-02

### 🎉 新功能

- **补齐 gen_ai 语义映射所需的源头字段（AgentLens 接入）**：为 telemetry 层的 OTEL gen_ai 语义映射补充源头数据，配合 `OTEL_SEMCONV=agentlens` 开关对接 AgentLens（Issue #79867）。`model-provider` 在模型调用 span 上补齐 gen_ai 语义所需的模型/用量属性；`trace/hooks/trace-stop-hook` 与 `trace/resources-provider` 完善 trace 资源与收尾信息，保证映射后语义完整。纯属性补充，不改动既有对话/工具执行链路行为。
- **`ShareLink` 支持 Markdown 输入、精准失败提示与原地更新同一链接**：`ShareLink` 现在接受 `.md` / `.markdown`，页面由服务端渲染为样式化结果（客户端不做预渲染，也未引入新依赖），并补上此前遗漏的 `.htm`；`.html` / `.htm` 以 `text/html` 上传，`.md` / `.markdown` 以 `text/markdown` 上传。文件过大与内容审核未通过两类失败现在分别给出「文件过大，请压缩后重试」与「内容未通过安全审核」的明确提示，不再被压成通用错误。新增可选 `existingShareLink` 参数，传入此前返回的链接（或其 nodeId）时覆盖同一页面并返回同一个链接，不传则新建；解析不出标识时明确报错，不会静默新建。Markdown 分享的文档节点默认私有，新建时会补设公开可读权限；原地更新只刷新内容、不改动权限，避免把已设为私密的文档静默转公开。`ShareLinkUnpublish` 现在支持将 Markdown 分享完全设为私密——按链接形态自动路由，HTML 页面链接走取消发布，Markdown 文档链接改走权限接口关闭公开档位并移除所有协作人。

### 🐛 问题修复

- **企业 API Key / 自定义 endpoint 登录后企业模型列表恢复**：使用 `CODEBUDDY_API_KEY`（apiKeyHelper 慢路径）或自定义企业 endpoint 登录时，`AuthSession` 常拿不到 `enterpriseId`，导致企业模型接口被跳过、`/model` 列表退化。现在 `enterpriseId` 新增两条兜底来源：SaaS 云控从 `/v3/config` 下发的 `enterpriseId` 随产品配置合并；endpoint 域名从企业 endpoint 域名前缀解析 `enterpriseId`。取值优先级为登录原生 → 产品配置兜底，并将 `ModelsProductProvider` 改为按优先级串行执行，确保当轮即拉到企业模型列表。
- **专家插件安装**：兼容包含资源依赖配置的专家插件，避免安装中断导致专家团成员不可用。
- **修复本地助理偶发一直思考的问题**：模型同步期间不再因展示信息更新而阻塞消息发送，并增强连接中断时的恢复能力。
- **Windows Bash 路径检测**：当 vendor 解压的 bash.exe 路径无效时，不再直接报错中断，改为自动降级到系统 Git Bash 查找。
- **Windows sandbox 长命令执行**：修复 Windows sandbox Bash 命令超过 8K 时因命令行截断而执行失败的问题。

## [2.131.0] - 2026-07-31

### 🎉 新功能

- **`skillOverrides` 配置**：新增 `skillOverrides` 设置，按 Skill 名控制可见性四态 `on` / `name-only` / `user-invocable-only` / `off`（未列出视为 `on`）。`off` 会对模型、`/` 菜单、Agent SDK / Remote Control 命令列表全部隐藏，且 `/skill-name` 与模型按名调用返回禁用提示；`user-invocable-only` 仅从模型清单移除、不拦截按名调用。plugin Skill 不受影响（改由 `/plugin` 管理）。跨 scope 优先级 `PROJECT_LOCAL > PROJECT > USER`，合并前过滤非法值并回退。
- **`/skills` 菜单可视化编辑**：`/skills` 支持 ↑/↓ 选择、`enter` / `space` / `←/→` 循环切换 Skill 状态，按 `Esc` 时统一写入 `.codebuddy/settings.local.json` 并提示改动数量；plugin Skill 显示为锁定不可编辑。
- **`/loop` 支持每轮自主调整下一轮间隔**：`/loop` 调度的任务在每次触发执行完毕后，模型可以根据实际情况决定下一轮提前、延后、维持原定间隔，或主动结束循环，不再只能固定重复同一个 cron 表达式。循环仍在 3 天后自动结束，且随时可用 `CronDelete` 手动取消。
- **`EnterWorktree` 支持附加到已存在的 worktree**：`EnterWorktree` 工具新增可选 `path` 参数，传入一个**已存在**的 git worktree 路径时直接切换进入该 worktree，而不是新建一个。目标必须是当前仓库 `git worktree list` 中的 linked worktree（非主工作树），否则返回明确错误；条目仍在但目录已被删除时提示 `git worktree prune`。附加会话退出时**永远只保留、绝不删除**该 worktree，`LeaveWorktree action="remove"` 如实返回"已保留"而非误报已删除，交互退出菜单对附加会话不再提供删除选项。不传 `path` 时创建新 worktree 的现有行为完全不变。

### 🐛 问题修复

- **同一流式事件中的工具调用被丢弃**：当一个流式事件同时携带思考内容与工具调用时，之前只会转换思考内容，同帧的工具调用整段丢失，前端把工具调用渲染成连续的"深度思考"且看不到工具执行过程。现在同一事件中的思考、正文和工具调用都会完整转换。同时修复多连接场景下的事件丢失——同一事件产生多个更新时，广播路径此前只把第一个更新发给其他连接，导致 Web UI 等旁路连接内容缺失，现在会按原顺序完整投递；思考事件另补充描述其来源流式事件组成的元数据，客户端可据此在渲染前决定展示策略。
- **切换模型后自动压缩失效**：修复切换到小上下文模型后，自动上下文压缩按错误的模型上下文上限判断阈值，导致模型陷入长时间工具调用死循环、无法触发压缩的问题。修复后压缩阈值按运行时实际使用的模型上下文上限计算，同源覆盖 pre-message 与 emergency 两条压缩路径。
- **子 Agent 模型继承**：未声明专属模型的子 Agent 在企业自定义模型被自动加入可选列表时，继续继承主对话模型，避免误用列表首项导致模型选择偏移。
- **无参工具审批**：修复 stream-json 模式下无参工具（如 `ExitPlanMode`）被误判为"用户拒绝"的问题。此前无参工具的参数会序列化为空字符串，导致权限解析失败，现已正确规范化处理并正常发出权限请求。
- **`/loop` 在默认权限模式下首次调度疑似"卡死"**：此前调度需要模型调用 `Bash(date)` 生成精确时间戳，在默认权限模式下会阻塞在权限确认弹窗上，表现为卡死。现改用模型自生成的不透明标记 + 环境注入的日期，无需再执行 `Bash`。
- **完全访问模式下的批量删除审批**：完全访问模式下不再触发批量删除阈值审批，删除仍由 safe-delete 回收流程处理。
- **预热认证会话生命周期**：补齐 authentication 持久化队列、logout tombstone 与原生文件 watcher 生命周期，避免激活、退登与重新登录并发下恢复旧会话；对齐预热与冷启动的认证及产品环境，修复 Linux 大配置和 Windows 混合大小写环境变量下的重复登录；修复预热激活失败时可能重复创建备用进程的问题。
- **银河麒麟内置插件可信执行**：在插件注册表事务锁内迁移随包缓存到 KYSEC 可信投影，同时保留同版本的用户或策略更新，避免启动时静默覆盖用户插件内容。 #73955
- **插件 Hook 兼容开关**：新增宿主级环境变量，可在插件迁移期间临时恢复为仅加载 `command` 类型。
- **可观测性：新增 root request id 请求头**：模型请求新增 `X-Root-Request-Id` 请求头，支持在 Langfuse 中按一次用户 turn 的聚合键搜索关联的全部请求。
- **失败退费检测上报范围**：过滤未进入 Tool Calls 的模型请求，并排除 SubAgent 因 6004 在 Tool Calls 阶段结束的预期场景。

## [2.130.0] - 2026-07-30

### 🎉 新功能

- **全新 Agent View（`codebuddy agents`）**：新增后台会话列表 + 派发输入框的主界面，支持会话行（状态 / 耗时 / 来源 cwd / PR 关联）、peek 详情面板、快捷键 overlay 与派发建议。每个后台会话由独立的常驻 PTY 托管一个完整交互 CLI，确保后台 job 有稳定主体；派发输入框支持 `@`（会话目录 / 子代理）、`/`（视图内命令 / 内置命令）建议与 Tab 补全。
- **空输入框按 `←` 就地打开 Agent View**：不 abort、不 fork、不重放 prompt、不 spawn 子进程，同一进程内把路由推到 Agent View——当前会话的运行状态、模型流、工具执行、权限与历史全部原地保留；返回 Chat 时正确重绘历史。受 `settings.agentView.leftArrowOpensAgents`（默认开启）控制，可用 `settings.agentView.disableAgentView` 整体禁用。
- **面板内 attach 后台会话**：接到 worker 自己持有的 PTY 上续接同一段对话与正在跑的 turn，detach 只断连接、会话继续运行，避免父子进程争抢终端导致的焦点问题。
- **前台会话 → 后台 job 交接**：新增 `/background`（别名 `/bg`）把当前会话搬到后台、前台退出；新增 `/fork-bg` 把当前会话复制成后台会话且当前会话继续存活；完整处理持久化关闭、空消息、受限启动等边界，spawn 失败自动回滚、前台保持存活。
- **后台会话写隔离（worktree）**：后台会话在第一次文件落盘前自动移入 `.codebuddy/worktrees/` 下的隔离 git worktree，并行派发各写各的检出；已在 linked worktree、非 git 目录、或显式配置 `settings.worktree.bgIsolation: 'none'` 时按规则跳过。
- **会话内 PR 关联采集**：从会话内 `gh` / `glab` 命令的自身输出中反查 PR / MR 链接并关联会话、刷新其状态，支持 GitHub `pull` 与 GitLab `merge_requests`（含 `/-/` 前缀）链接。
- **交互与退出对齐**：交互态下双击 Ctrl+C 退出；非交互（`-p`）模式下需审批工具落入统一 deny 通道，run 正常继续不 hang；修复回车选中会话处残留硬件光标的问题。

### 🐛 问题修复

- **Write / MultiEdit 并发覆盖保护**：Write（整文件覆盖）现在与 Edit 一致——覆盖已存在文件前要求先 Read，且若文件自上次读取后被改动（用户、linter 或其它并发会话），会拒绝覆盖并提示重新读取，大幅收窄整文件覆盖导致并发 / 外部改动被静默丢弃的窗口；MultiEdit 同步接入这道校验，堵住绕行口。新建文件、目标为目录的路径不受影响。
- **待命进程冷启动 DAU 归户错误**：修复待命进程冷启动时插件状态上报（含每日活跃心跳）在真实用户身份就绪前发出、导致数据归户到占位账号的问题；改为等待用户身份就绪或超时兜底后再上报，保证归户准确。

## [2.129.0] - 2026-07-29

### 🎉 新功能

- **新增 Monitor 工具**：模型可在后台运行一个命令，命令产生新输出时无需轮询 `TaskOutput`/`BashOutput`，会在闲时被主动唤醒、忙时在自然轮次结束后看到增量内容。支持 `timeout_ms` 自动停止和 `persistent` 长期监控，可通过 `TaskStop` 提前停止。默认开启，可通过 `CODEBUDDY_MONITOR_ENABLED=false` 关闭；延迟加载，需先经 `ToolSearch` 发现再调用。
- **ShareLink 新增取消发布能力**：新增 `ShareLinkUnpublish` 工具，可撤销此前用 `ShareLink` 生成的公开分享链接，让敏感文档的分享形成 CLI 内闭环。支持直接传入分享链接 URL 或其 nodeId（链接 `/p/` 后的标识），无需登录网页端或联系后端。同时 `ShareLink` 现在会在返回结果中带上 nodeId 并提示可随时用 `ShareLinkUnpublish` 撤销。与 `ShareLink` 一致，仅面向国内 / iOA / 内部 endpoint 开启。

### 🐛 问题修复

- **Web UI 切换会话卡死**：`/resume` 在 agent 运行中改为带外立即执行（不再排队到当前 turn 结束），sessionReset 通知从单播 `session.meta.acpConnectionId`（重连/多客户端后失效并静默丢弃）改为广播到所有 ACP 连接，切换会话不再需要关闭浏览器重进才恢复。
- **Web UI 流式内容重复**：断网重连触发的 `session/load` 全量回放此前直接叠加在已渲染内容之上（工具卡片按 id 去重、文本 chunk 纯追加），导致 thinking/正文出现"二审二审摘要摘要"式逐 chunk 重复；现在 `historyReplay=start` 时先清空时间线再由回放重建。
- **Web UI 跨会话内容串扰**：acp-client 此前仅给 `usage_update` 附带信封 sessionId，主时间线处理器无按会话过滤，其他客户端/工作流后台会话/切走后仍在运行的旧会话的输出会全部渲染进当前页面；现在所有 `session/update` 事件均携带信封 sessionId，`user_message_chunk` / `agent_message_chunk` / `agent_thought_chunk` / `tool_call` / `tool_call_update` / `session_end` 按会话过滤外来事件。
- **`/resume` 污染会话历史**：`/resume <id>` 命令文本不再写入会话 history（对齐 `/clear`、`/fork`），刷新后时间线不再出现多余的 `/resume` 用户气泡。

## [2.128.1] - 2026-07-29

### 🐛 问题修复

- **预热进程首轮对话人设错误**：修复命中预热进程池时，第一轮对话使用默认人设而非透传人设、第二轮才恢复的问题。预热待命期间不再提前构建 agent，改为激活后携带完整参数一次性构建，消除与首轮请求的竞态。
- **预热（prewarm）激活前修改 `settings.json` 不生效**：`AgentManager` 在 `@PostConstruct` 阶段就预热 settings 缓存并 memoize initialize 元数据快照（`currentModelId` 由 `settings.get('model')` 派生），预热待机进程冷启动时用户 session 的 `settings.json` 往往还不存在，导致快照冻结为默认模型；激活后 `getInitializeMetadata()` 复用旧快照，用户在激活前才写入/修改的 `settings.json`（`model` 等字段）永远不生效（`currentModelId` 恒为默认模型）。现将「预热 settings 缓存 + 计算快照」在待机期延后到激活落定后执行，激活前的 `settings.json` 变更可正常同步生效；`models.json`（用户级 / 项目级）原本已能正确同步。
- **同类修复 `ThemeService`**：`theme` 主题设置存在相同的待机期一次性读取 latch，激活前修改的主题不生效，已用相同方式修复。 #77561
- **国际版取消分享链接能力**：国际版 CLI 用户不再提供 ShareLink 功能，iOA 及内部/国内产品线保持不变。

## [2.128.0] - 2026-07-28

### 🎉 新功能

- **新增 PushNotification 工具**：模型可在长任务/后台任务/定时任务完成时主动触发一次终端/桌面通知，复用现有终端通知基础设施（OSC/BEL）。默认开启，可通过 `CODEBUDDY_PUSH_NOTIFICATION_ENABLED=false` 关闭。
- **新增 ReportFindings 工具**：代码审查类 Agent（如 code-reviewer、silent-failure-hunter、type-design-analyzer）可调用该工具，把审查发现的问题以结构化字段（file / summary / failureScenario / 可选 category）提交，终端 UI 渲染为专门的列表组件，不再堆成纯文本。默认开启，可通过 `CODEBUDDY_REPORT_FINDINGS_ENABLED=false` 关闭；延迟加载，需先经 `ToolSearch` 发现再调用。`/code-review` 命令已接入：审查发现的问题会通过该工具结构化呈现，工具不可用时回退为原有纯文本格式。

### 🐛 问题修复

- **MCP HTTP/SSE 工具调用 5 分钟隐性超时**：`StreamableHTTPClientTransport` / `SSEClientTransport` 构造时未传自定义 `fetch`，回退到 `globalThis.fetch` 底层 undici client 的 `headersTimeout`/`bodyTimeout` 默认值（均为 300000ms），导致耗时较长但存活的 MCP 工具调用（如下游排队的 `subagent_spawn`）在约 5 分钟被传输层掐断，报 `UND_ERR_HEADERS_TIMEOUT`，与 `MCP_TOOL_TIMEOUT`（JSON-RPC 层超时）完全脱节。现为 HTTP/SSE 类型 MCP server 绑定自定义 `fetch`，其底层 undici dispatcher 的 `headersTimeout`/`bodyTimeout` 与 `MCP_TOOL_TIMEOUT` 保持一致；Bun 独立二进制下改用 `AbortSignal.timeout()` 与传输层 abort signal 组合对齐 Node 行为；系统/PAC 代理启用时 `FetchProxy` 也会把超时应用到构建的 `ProxyAgent` 上；`type: 'sse'` 的 server 补齐 `fetch` 透传。 #76466
- **MCP 工具列表顺序不稳定导致 prompt cache 全程 miss**：`listTools` proxy 现在按工具名排序后再返回，兜底上游 MCP server `tools/list` 返回顺序不确定的问题；顺序抖动会导致整段 prompt cache 前缀失效，排序后同一 server 的工具顺序在多次请求间保持恒定，不影响模型语义。 #76627
- **自定义模型 Temperature 可留空**：自定义模型未配置 Temperature 时不再向上游发送 `temperature` 字段，避免 GPT-5 等不支持该参数或仅支持默认值的 OpenAI 兼容模型返回 400；Web UI 中 Temperature 改为可留空的数字输入框，留空表示不发送。
- **Kimi K3 temperature 报错**：切换到 Kimi K3 时不再因 `temperature` 报 `400 invalid temperature`。CLI 默认注入的 `temperature=1` 会被 K3 拒绝（K3 服务端固定 temperature），现在对 kimi-k3 请求删除 `temperature` 字段，交由模型使用自身固定值；仅匹配 kimi-k3，不影响其他自定义模型。
- **预热进程误扫工作目录**：修复预热进程待机期入库率提交监听器会误扫错误工作目录的问题；未启用入库率能力时不再进行任何仓库发现扫描，待机进程收到正确工作目录后才绑定监听器、目录变化时自动重绑，避免海量目录扫描、无关提交上报与额外资源开销。

## [2.127.3] - 2026-07-27

### 🔧 功能改进

- **stdio initialize 加速**：`AgentManager.getInitializeMetadata` 改走 prewarm → activate 快照路径。`@PostConstruct` 时 fire-and-forget 起一份「元数据快照」promise，直接从 `productManager.waitConfiguration()` 的 raw agents/models 派生 `defaultAgentName` / `models` / `currentModelId`，绕开 `buildAgentsFromProductConfiguration` 内部的 fingerprint 计算、`applyPluginAgentSetting` / `applySettingsAgent` / `settingsManager.get('permissions')` 等前置。initialize 握手只 await 快照 promise。真实 agent 执行（`getDefault` / `get`）仍走 `readyDeferred`，语义不变。沙箱侧 `[InitializePhase] getInitializeMetadata` 从 409ms 降到 <10ms。 #75774
- **stdio initialize 加速**：延后 `OutputStyleManager` 加载至处理消息时，initialize 握手只返回 product 内置样式列表，不再做工作目录树遍历与插件迭代。沙箱侧 `[InitializePhase] getOutputStyles` 从 23ms 降到 <1ms，`total handle()` 从 27ms 降到 8ms；多个慢 MCP 场景下 initialize 关键路径依然不受影响。 #75774

### 🐛 问题修复

- **流式输出中文乱码**：修复 OpenAI 兼容模型流式响应按 chunk 直接 UTF-8 解码，chunk 边界劈开多字节字符时产生 U+FFFD(�) 乱码并在多轮对话中污染会话历史的问题（改用跨 chunk 流式解码）。
- **修复流超时后对话卡死**：模型响应连续第二次发生流超时（重试额度已用尽）时，会话内部对"是否还会自动重试"的判断出现分歧，导致本轮 `session/prompt` 永远收不到结束信号、前端一直 loading 且点取消也无效。现已让两处判断共用同一重试额度口径，额度用尽时正常收尾该轮对话。
- **CephFS 工作区下自定义 agent/命令生效**：修复当项目根目录整机挂载在 CephFS 上时，`.codebuddy/agents/*.md`、`.codebuddy/commands/*.md` 等配置目录被静默跳过、导致自定义 agent 与自定义命令全部不加载的问题。CLI 目录扫描去掉了 CephFS 特判，扫描行为恢复为读取目录全部条目、不设条目上限、不静默截断。
- **本地记忆保留**：修复聊天记录清理策略会误删长期记忆 topic 文件的问题，避免 `MEMORY.md` 索引指向已删除文件。
- **预热模式环境变量生效**：修复预热（`--prewarm`）模式下 activate 阶段透传的网络环境相关环境变量在部分场景未被产品配置消费的问题，激活后拿到的模型列表与端点现在会正确反映当前会话的网络环境。
- **预热驱逐防误杀**：预热驱逐按 `prewarmId` 匹配待清理条目时新增对占位条目（`manual === true` / `pid <= 0`）的过滤，避免把占位 `pid = -1` 交给 `process.kill`；Unix 下 `kill(-1, SIGTERM)` 会向当前用户所有可发信号进程广播，可能误终止非目标进程。
- **进程信号发送防御性守卫**：`DaemonProcessManagerImpl.sendSignal` 在调用 `process.kill()` 前校验 `pid > 0`、为整数且不等于自身 PID，兜底避免误伤 WorkBuddy 之外的用户进程；`isProcessRunning` 同样在探测前拒绝非整数 / `pid <= 0`，避免 `kill(-1, 0)` 语义导致 `waitForExit` 永远等不到退出而跑满超时。 #73790

## [2.127.2] - 2026-07-26

### 🐛 问题修复

- **无参工具调用被误过滤导致卡死**：修复部分无参数工具（如无参 schema 的 MCP 工具）以空参数发起合法调用时，被判定为无效调用并连同已配对的执行结果一起从模型输入中移除的问题。此前会导致模型丢失工具上下文、反复重试同一调用最终卡死；现在空参数会规范化为合法的空对象，正常保留调用与结果。
- **工具调用循环检测**：修复推理模型下循环检测完全失效的问题。此前每次工具调用前的 `reasoning` item 会中断尾部扫描，使连续计数永远为 1，实测有会话连续重复调用同一工具 96 次仍未被拦截。现在 `reasoning` 与 `function_call_result` 一样视为透明项，助手可见文本仍作为序列边界。
- **套件市场手动更新后信息未刷新**：修复手动更新套件市场后，展示的名称/描述仍停留在更新前旧内容的问题；同时修复多进程共享同一套件目录时，某个进程更新后其它进程插件列表缓存未及时感知的问题。
- **子 agent 轮次**：修复 max_turns 交由模型控制时，子 agent 实际轮次未达 200 就报错中断的问题。现在 max_turns 会设置最小下限（200），并将命中上限的场景从报错降级为 warning。 #75034
- **Windows Hook**：修复中文系统下直连 PowerShell 执行插件 Hook 时的两个问题：一是 PowerShell 的 GBK/CP936 中文报错被按 UTF-8 强解产生方块乱码（U+FFFD），现改用与 Bash/PowerShell 工具一致的智能解码（严格 UTF-8 → cp936 兜底）并按 chunk 边界拼接多字节序列；二是 `-File` 传入的 MSYS Unix 路径（`/c/Users/...`）无法被原生 PowerShell 定位，现自动还原为 Windows 路径（`C:\Users\...`）。 #63535

## [2.127.0] - 2026-07-24

### 🎉 新功能

- **stdio stream-json 支持后台任务**：在 `--input-format stream-json --output-format stream-json`（stdin 常开的长连接）模式下放行后台命令（`run_in_background: true`），任务可跨对话轮次运行；纯 `-p` 单发模式仍拒绝（进程随首个 result 退出会杀任务）。
- **后台任务执行信息同步到输出流**：后台任务的生命周期作为独立的 `system` 事件推到 stdout —— 启动时 `task_started`、完成/失败/停止时 `task_notification`，均携带唯一 `task_id`（并发任务据此区分）与 `tool_use_id`（关联发起该任务的 tool_use）；任务在轮次间隙完成时通过旁路长轮询通道主动回推，无需再次输入。
- **stream-json 后台任务生命周期事件对齐参考实现**：新增 `task_progress`（事件驱动，每完成一次 tool_use 推一条，内嵌 `usage`：`total_tokens` / `tool_uses` / `duration_ms` + `last_tool_name`）与 `task_updated`（状态变迁，`patch` 携带 `status` / `end_time`）两类 system 事件；`task_notification` 补内嵌 `usage`。后台 Bash/PowerShell 不发 progress（无 token 统计），sub-agent / workflow 类任务才发。 #63683
- **后台 Agent 子任务接入 task 事件流**：`run_in_background` 的 Agent 子任务现在也发 `task_started` / `task_progress` / `task_updated` / `task_notification`（`task_type='Agent'`，progress 带累计 usage），与 Bash/PowerShell/Workflow 共用同一 stream-json 通道；原有 team mailbox 通知链路不变（叠加不替换）。 #63683
- **SDK `query()` 单发用法自动禁用后台任务**：js-sdk（`query()`）与 py-sdk（`query()`）在首个 `result` 处停止且关闭子进程，无法接收跨轮回推的后台完成事件——SDK 在这两条路径自动注入 `CODEBUDDY_CODE_DISABLE_BACKGROUND_TASKS=1`（尊重调用方显式设置，不影响持续读取的 V2 Session / `CodeBuddySDKClient`）。 #63683
- **子代理能力对齐**：`codebuddy agents [--json]`、frontmatter `maxTurns`/`background`/`initialPrompt`/`effort`/`disallowedTools`/`memory`（agent 级持久记忆）、嵌套深度与会话预算限制、子代理输出防注入扫描（自研规则，详见 sub-agents.md）、配置子目录热加载；`/agents` 面板保留内置 generator 模型编辑入口。
- **子代理工具声明收紧**：显式 `tools` 白名单全部无法解析时，该 agent 在 spawn 时拒绝启动并列出未解析项（单 agent 隔离，不影响其他 agent 加载）；`tools`/`disallowedTools` 支持 `mcp__server`、`mcp__server__*` 服务器级模式（`mcp__*` 全通配仅 deny 侧生效）；plugin agent 的 `hooks`/`permissionMode`/`mcpServers` 一律忽略并告警。
- **上下文用量环**：Web 界面输入框实时展示当前会话的上下文占用，并支持一键压缩会话。
- **每模型思考配置**：模型下拉内可按模型单独设置思考档位（含思考开关与档位列表），自定义模型的默认档位可持久化保存。

### 🔧 功能改进

- **子代理输出扫描扩充**：新增 settings 文件路径、`permissions.allow/deny` 提及、`channel source=` 标签、伪造 `[harness:` 前缀、模型层标签的识别与去毒（自研规则集）。
- **maxTurns 语义对齐**：子代理达到轮次上限时把已有产出作为正常结果返回（不再报错；无任何 assistant 文本时返回兜底文案）。
- **AI 创建 agent 最小权限**：`/agents` 用 AI 创建 agent 时，按其职责生成最小必要工具集（例如代码审查类仅授予只读工具），不再默认继承全部工具。
- **agents 列表信息补全**：`codebuddy agents` 列表与 `--json` 输出补上每个 agent 的 `memory` 作用域与 `tools` 工具集（继承全部工具时显示为 `*`）。
- **memory 工具注入对齐参考实现**：启用 `memory` 且声明显式 `tools` 白名单的 agent 自动补充 Read/Write/Edit，保证记忆可持久化；未声明 `tools`（继承全部工具）时不受影响。
- **MCP 白名单匹配归一化**：`tools`/`disallowedTools` 的 server 级模式按 LLM 可见名匹配（含连字符的 server 名归一化后书写，如 `mcp__web_search__*`）；ToolSearch / 延迟执行路径同样强制 agent 级 MCP 白名单。
- **模型下拉视觉重做**：更紧凑的窄卡片、倍率与上下文窗口数字列右对齐、选中态以勾选呈现、编辑入口悬停浮现。
- **TUI 横向菜单**：在保留 Tab 切换的基础上，支持使用左右方向键循环切换页签和模型配置范围，并避免在非输入面板误进入 Team 成员选择。
- **终端输出**：移除文件编码探测过程中的冗余诊断日志，避免干扰正常终端输出。

### 🐛 问题修复

- **停止任务**：修复子 agent 批量生成图片（经 Workflow 后台编排）时，桌面端 / 小程序端点"停止"后任务仍继续运行、无法终止的问题。中断信号现在会直接终止本会话的后台 Workflow 运行与所有在跑子 agent 任务，不再依赖会话已 idle 时已断裂的 abort 级联。 #73262
- **Stop/SubagentStop hook 的 `continue:false` 失效回归**：Issue #71907 修复 `UserPromptSubmit` hook 阻断透传时，在 `parseHookOutput` 中给 `continue:false` 统一打上了 `preventContinuation` 标记，导致 `Stop`/`SubagentStop` 事件的 `continue:false` 被误判为"应当停止"、直接放行会话结束——与文档明确的"`continue:false` 阻止停止，让 Agent 继续工作"语义相反。现仅当事件不是 `Stop`/`SubagentStop` 时才为 `continue:false` 设置 `preventContinuation`，`Stop`/`SubagentStop` 的 `continue:false` 继续走原有续跑通道，并补充回归测试。
- **远程控制默认可用**：未配置远程控制总开关时不再误判为禁用；仅在产品配置显式关闭时才隐藏入口并拦截相关操作，同时保留微信/企微机器人添加入口的独立开关语义。 #75509
- **SDK 自动压缩**：工具审批成功后正确清理待审批状态，避免自动压缩长期跳过并导致上下文超限。 #73605
- **MCP Connector 工具并发**：修复 `withMcpModelIdHeader` 用 per-server async-mutex 保护整个下游工具调用，导致同一 connector 的多个工具调用被串行化的问题。改用自定义 fetch 拦截 + `AsyncLocalStorage` 注入 `X-Model-ID`，恢复 MCP transport 自身的并发能力，长耗时工具不再拖慢同 connector 的其他调用。
- **MCP 传输类型别名兼容**：CLI 现在能识别 `mcp.json` 中 `type` 写作 `streamable-http` / `streamableHttp` / `streamable_http`（及大小写变体）的配置，自动归一为 `http`。此前同一份配置在 IDE 正常、CLI 却报 `no valid transport type`。`mcp add --transport` 写入时也会归一，保证落盘配置干净。 #69950
- **MCP 配置扫描时序**：MCP 配置扫描改为串行 revision reconcile，避免插件刷新期间的配置变化被旧扫描吞掉并导致首轮对话等待超时；插件 MCP 按配置差异增删替换，未变化的连接保持运行；首轮对话按会话只做一次 2 秒总预算预等待，完全延迟加载可零等待后台连接；`connected` 状态与完整工具索引/可见快照按同一代提交，索引失败先清理部分写入再降级发布，避免首轮工具缺失或只出现半套工具。
- **`/reload-plugins` 对齐参考实现**：先执行 MCP 名称 cache-impact guard 再正式扫描并发布；不更新 marketplace 或做宽泛 repair，只补装首扫明确报 `not-found` 的 manifest 依赖，且仅在确有安装时追加一次扫描；支持 `--force` 显式绕过；reload 只重放进程内 Product 投影，Cloud/Models 网络同步不再成为命令完成屏障。
- **记忆文件编辑**：`/memory` 命令优先使用 `$VISUAL` 或 `$EDITOR` 配置的编辑器，打开失败时回退到系统默认应用。

## [2.126.0] - 2026-07-23

### 🎉 新功能

- **插件市场自动更新窗口可通过环境变量配置**：新增 `CODEBUDDY_MARKETPLACE_AUTO_UPDATE_INTERVAL_MS`，用于覆盖默认 24 小时的市场自动更新检测窗口（单位毫秒），便于测试/调试场景下缩短检测间隔（如设为 1 小时）。

### 🐛 问题修复

- **不支持 OSC 8 的终端下超链接降级为纯文本**：修复登录 URL 复制成双 URL 导致 `400 state is invalid` 的问题。此前 CLI 打印的登录 URL 等超链接一律走 OSC 8 转义序列，在不支持 OSC 8 的终端（大量 SSH client、tmux 未开 passthrough、堡垒机、老版终端）下转义被忽略、可见字符退化为同一条 URL 首尾拼接，用户手工复制后触发后端 `state is invalid`。现在 `createHyperlink` 会检测终端能力，不支持时降级为纯文本单条 URL，保证任何终端下复制到的都是正确的单条链接。 #71748
- **高风险命令确认框键盘无响应**：修复部分模型网关下工具审批弹框出现后所有按键（数字键、回车、方向键、Esc 等）完全失效、既无法批准也无法取消导致会话卡死的问题。
- **套件自动更新未真正拉取新内容**：开启「套件自动更新」后，后台周期性刷新只更新了「上次更新时间」，但市场实际内容（新插件）未被下载，导致端上看到"已更新"却引用不到最新套件。手动点击「更新市场」不受影响。
- **流式工具调用**：保留模型服务返回的 tool call index，避免并行工具调用参数被拼到错误调用上；等待 usage 尾帧到达后再按 finish_reason 宽限期关流，避免用量统计被提前截断。
- **模型请求超时**：将模型请求等待时间与首 Token 超时配置保持一致，避免请求在默认 10 分钟时被提前取消。
- **预热运行时就绪判断**：预热激活支持由系统分配本地端口，并在 ACP 服务真正可用后返回连接地址；旧版激活响应保持兼容，避免服务尚未准备完成时提前连接。 #70518 #70954
- **插件市场搜索**：修复 Discover plugins 搜索框输入数字（1-9）时被快捷选择抢占、直接跳转插件详情页的问题，数字现在可正常用于搜索过滤。 #68926

## [2.125.5] - 2026-07-23

### 🐛 问题修复

- **上下文压缩**：修复 token 超限的紧急压缩（MaxToken）在 summary 失败（含 summary 请求自身超限）后不裁剪、原样保留超长上下文的问题。此前主动 auto-compact 触发的这类失败不经过 PTL 恢复路径，导致本轮对话卡死或下一轮直接超限。现在 summary 两次失败后会自动降级为无模型的工程压缩裁剪（保留最近若干轮 + 结构化压缩）并写回，继续对话。

## [2.125.4] - 2026-07-23

### 🐛 问题修复

- **主页面切换卡顿**：修复主页面切换 tab 时出现卡顿的问题，提升页面交互流畅度。 #68744
- **MCP OAuth token exchange**：修复 HTTP/SSE 类型 MCP server 走网关代理（如蓝鲸 `bk-apigateway` + `bkauth`）场景下，OAuth 授权成功后 token exchange 报 `HTTP 404` 且提示 `Invalid OAuth error response` 的问题。回调阶段复用初始授权流程已缓存的发现结果，保证 token 请求发往正确的授权服务器。 #73980
- **MCP 用户/本地级配置路径隔离**：修复 `CODEBUDDY_CONFIG_DIR` 环境变量无法隔离 USER/LOCAL 级 MCP 配置文件路径的问题，使 MCP 配置与 settings/memory 等一致遵循该环境变量覆盖，避免自动化测试、多实例等隔离场景下静默读写宿主机真实的 `~/.codebuddy.json`。

## [2.125.3] - 2026-07-23

### 🔧 功能改进

- **补发上架**：2.125.1 与 2.125.2 因发布流程异常未能上架 npm，线上仍停留在 2.125.0；本次 2.125.3 重新构建并发布，完整包含 2.125.1 与 2.125.2 的全部变更（详见下方对应版本条目）。

## [2.125.2] - 2026-07-22

### 🐛 问题修复

- **自定义模型对话上报**：修复 WorkBuddy Desktop 使用自定义模型对话时未被计入活跃统计（活跃地图、连登等）的问题，现自定义模型对话可正常上报。

## [2.125.1] - 2026-07-22

### 🔧 功能改进

- **无持久化会话**：新增 `--no-session-persistence`，会话上下文仅保留在内存中，不创建或追加本地 transcript，同时保留已有历史的只读加载能力。

### 🐛 问题修复

- **WorkBuddy 托管会话启动**：改由系统分配可用端口，并在服务真正就绪后建立连接，避免端口竞争导致会话启动失败。
- **子 Agent 注册**：修复插件通过 `settings.agent` 指定的主会话 Agent 被重复暴露为可调用子 Agent 的问题，同时保留同插件内成员 Agent 的调用能力。
- **智能体团队工具**：禁用智能体团队时，同步隐藏延迟加载的 TeamCreate、TeamDelete 及 Agent 工具中的团队协作提示。
- **修复中文/编码乱码**：回退此前的确定性编码识别策略，恢复对文件读取与 Shell 输出的编码检测能力，解决部分非 UTF-8（GBK/CP936 等）场景下中文内容显示为乱码的问题。
- **ACP 透传 UserPromptSubmit hook 阻断（对齐主流客户端语义，Issue #71907）**：工作区 `.codebuddy/settings*.json` 配置了 hook 但脚本缺失或以 exit 2 阻断时，此前 ACP 将其按通用内部错误处理，前端只显示「服务出现异常，请重试」，用户无法感知是本地 hook 拦截。现改为 in-band 处理：阻断原因以 assistant-role hook 消息写入历史（同时覆盖内存 history、TUI 渲染、ACP live chunk 与 JSONL 落盘），并以 `end_turn` 干净收尾；ACP `_meta['codebuddy.ai/hook']` 透传结构化字段（event/status/exitCode/blocking），客户端可精确识别 hook 阻断消息；headless stream-json 输出同型阻断帧、不再冒泡 HTTP 500。
- **WebUI CORS**：修复 `--host 0.0.0.0` 启动 WebUI 时自动放开 CORS 的逻辑未生效的问题，`--serve` / daemon 等启动方式现在与 `/gateway` 命令一致，无需手动设置 `CODEBUDDY_CODE_CORS_ORIGINS=*` 即可在 anydev 等云虚拟机环境正常访问。 #72662

## [2.125.0] - 2026-07-21

### 🎉 新功能

- **插件列表无限滚动**：已安装与浏览市场列表改为触底加载更多，并支持一键回到顶部。
- **Subagent-scoped MCP 支持**：subagent 可在 definition 中声明 `mcpServers` 配置，inline MCP 仅在当前 subagent 启动时创建、只对该 subagent 可见，结束后自动清理；string reference 复用已有全局 MCP，不污染主 agent 或其他 subagent。ToolSearch / DeferExecuteTool 可在当前 subagent 内发现并调用 scoped MCP 提供的工具；开启 `--strict-mcp-config` 时按白名单放行受信任的产品内置 subagent 的 scoped MCP。

### 🔧 功能改进

- **OOM 取证兜底**：长跑 session（如 `/goal`）濒临堆上限时可自动写 heap snapshot 供事后定位，默认关闭，排查 OOM 时用 `CODEBUDDY_CODE_HEAP_SNAPSHOT_NEAR_LIMIT_PCT=on` 开启，快照落到 `~/.codebuddy/diagnostics/<date>/`。
- **Skill 字段语义**：`disable: true` 的 skill 不再从 product.skills 硬删除，改为可见性隔离——不进模型默认上下文，但仍保留 `/` 菜单可见性，用户可主动触发，模型也可按名调用；菜单可见性由独立的 `user-invocable` 字段控制。

### 🐛 问题修复

- **自定义模型工具图片结果**：修复自定义模型网关对 Read 等工具返回图片的严格校验报错问题，图片改为 hoist 为紧随工具批次的合成 user 消息发送，与主流做法对齐；不支持图片的模型则丢弃图片并留占位说明。
- **Daemon restart host 仍会丢失**：修复 `daemon start --host 0.0.0.0` 后执行 `daemon restart`（不带参数）时 host 悄悄退回默认值的问题，现在只有用户显式传参才覆盖 restart 时恢复的配置。
- **会话文件恢复**：加载和回退旧会话时忽略内部产物索引文件，避免递归快照导致内存异常。
- **stream-json resume 回放消息时间戳错误**：修复以 stream-json 模式恢复会话回放历史时，每条历史消息时间戳被打成回放当刻时间、而非消息创建时间的问题。
- **移除第三方编码检测组件**：出于开源合规考虑移除相关依赖，将字符编码识别收敛为确定性策略，主流中文场景无感知。
- **文件监听打满 inotify（ENOSPC）**：修复 Linux 上 hook 声明 `watchPaths` 指到项目根时因递归监视 `node_modules`/`.git` 等子树打满 `fs.inotify.max_user_watches` 崩溃的问题；macOS/Windows 不受影响。
- **WebSearch**：修复"今天""今年""最新"等时间相关搜索未使用当前时间构造查询的问题。
- **插件 session 隔离**：普通插件管理操作对齐 pending/active 语义，在新 session 或显式 `/reload-plugins` 时生效，避免复用上一个 session 的插件组合。
- **AskUserQuestion**：ACP 客户端跳过问题时只完成当前问答工具并继续任务，避免审批等待卡住或误取消整轮对话。

### 📝 文档更新

- 完善内置子代理与场景模型的配置方式、解析优先级和使用入口说明。

## [2.124.1] - 2026-07-19

### 🔧 功能改进

- **Agent 指标聚合**：将窗口 flush 间隔固定为 30 秒，去除对外部产品配置的依赖，简化聚合器启动路径。

### 🐛 Bug 修复

- **plan 模式 headless 退出卡死**：修复 `-p` 非交互模式下，进入并退出计划模式后进程永久 hang 的问题。硬编码 `needsApproval=true` 的工具（ExitPlanMode / Delegate / EnterWorktree / LeaveWorktree）绕过权限服务直接进入中断队列，而普通 print 模式没有任何审批 UI 入口，旧逻辑落入 UI-await 分支等待永不出现的确认框。新增非交互分支，采用非交互场景下的 "ask→deny" 语义，把审批收敛为带引导消息的 deny，交由统一 PreToolUse deny 通道处理，run 正常继续、不 abort、不走"继续规划"模板。
- **预热进程首次激活重载本地插件**：修复 `--prewarm` 预热进程在 activate 之前才由 agent-init provision 的本地插件（`local_plugins` 目录市场型插件，含 skills/agents/hooks/mcp）在首个会话加载不出来的问题（`installation path not found`）。根因是把本地插件从源目录 materialize 进版本化缓存的迁移只在初始化时跑一次，activate 后的惰性重载不重跑迁移导致 `installedPath` 解析为空；现在 activate 会重跑一次插件初始化（含缓存迁移 + 重新加载）。
- **Reasoning Effort 面板**：`/config` 设置面板的 Reasoning Effort 选项补齐 `max` 档位，与 `/effort` 命令及底层 `ReasoningEffortLevel` 类型保持一致。
- **源代码管理**：修复"全部撤回"无法同时处理已跟踪变更和新建文件的问题（需点两次才能完全清理）。
- **源代码管理**：修复文件变更后面板不及时更新的问题，增加定时轮询兜底机制。
- **终端**：修复手动重连时创建新终端会话导致历史状态丢失的问题，优先复用后端保活的已有会话。

## [2.124.0] - 2026-07-17

### 🎉 新功能

- **ShareLink 工具**：新增内置 `ShareLink` 工具，可将本地单个 HTML 文件部署为可渲染、可分享的公网链接。按 endpoint 主机名分流基建，覆盖国内 / 国际 / iOA：国内 / iOA（`copilot.tencent.com`）走知识空间上传（与 WorkBuddy `uploadToKnowledge` 对齐，返回 `publishUrl`）；国际（`www.codebuddy.ai`）走 CloudStudio static 产物发布（返回可渲染 releaseUrl）。默认开启，支持两级开关（与图片/视频生成一致）：环境变量 `CODEBUDDY_SHARE_LINK_ENABLED=false` 可关闭（优先级最高），其次云端 `productFeatures.ShareLink` 下发开关（缺省 `true`）；工具采用 `deferLoading` 延迟加载，按需经 ToolSearch 唤起；两条路径均复用当前登录会话的鉴权。

### 🔧 功能改进

- **CLI 入口**：新增 `codebuddy-code` 作为 CLI 命令别名，同时在 monorepo 根目录新增 `cli:release` 快捷脚本。

### 🐛 Bug 修复

- **修复 WorkBuddy 桌面端编辑大文件时内核卡死数十分钟**：详细 checkpoint 广播和撤回预览在计算大文件（如大型硬件网表）的差异时，diff 算法在高差异密度下退化为 O(N²)，长时间阻塞事件循环，并在超大文件上因栈溢出抛错。现升级差异库并为差异计算增加 5 秒超时预算：超时文件降级为仅保留在变更列表（可点开、可撤回），不再阻塞后续处理；不影响普通 CLI / Web 场景。
- **Stop/SubagentStop Hook 载荷修复**：修复 Stop 和 SubagentStop 钩子中 `last_assistant_message` 字段可能返回过期历史消息的问题。现在优先从当前运行结果中提取最终输出，避免钩子在会话历史尚未更新时读取到过时的助手消息。
- **Stop Hook 续跑**：修复 `-p` / ACP 场景下 Stop Hook 触发续跑时响应可能提前结束，导致后续输出丢失的问题。
- **Linux 沙箱托管运行时**：沙箱内放行托管 Node/Python 运行时目录（含软链 realpath 指向的包内 `/opt` 受信目录），并修正打包后 shim/native 资源的 `app.asar.unpacked` 路径解析，使 agent 在银河麒麟等 Linux 上能于沙箱内正常调用随包分发的 Node/Python。
- **WorkBuddy Linux 文件备份**：保留 ModifyBackup 及 Write/Edit 等宿主文件工具的备份接入；完成全量发行版回归前暂不启用 Linux 文件备份，并强制关闭文件投影。

## [2.123.1] - 2026-07-16

### 🐛 Bug 修复

- **文本处理**：修复在特定运行环境下清理终端控制字符时可能因模块导出形态差异导致的调用异常，并清理无用依赖，减小安装体积。

## [2.123.0] - 2026-07-16

### 🎉 新功能

- **文件版本回退**：新增按会话请求预览和执行整轮文件回退的 ACP 接口，预览结果包含实际采用的版本 request ID。

### 🔧 功能改进

- **情绪指标开关**：仅在 `productFeatures.ChatPromptFrictionAnalysis` 显式启用时调用 Recall API 并上报情绪摩擦分析事件。

### 🐛 Bug 修复

- **Daemon 自动更新状态展示**：修复 `cbc daemon status` 显示 "AutoUpdateService not available" 的问题，改为从运行中的 daemon 进程获取真实状态；同时 daemon 模式下新增外部升级检测，当用户手动 `npm install -g` 升级后，daemon 能自动感知并触发优雅重启。
- **/rewind 回滚**：修复 Windows 下盘符大小写不一致（如 `c:\` 与 `C:\`）导致 checkpoint 文件匹配失败、`/rewind` 回滚代码静默失效的问题。现在会在 Windows 上统一盘符大小写后再计算文件标识与备份哈希，保证保存与回退两侧对齐。
- **Restore code 选项**：修复用户先改动再改回原样后，"仅回退代码"选项被错误隐藏、无法回退到该节点的问题。选项是否展示改为依据该轮是否发生过文件编辑，而非当前磁盘与快照是否仍有净差异。
- **Agent 子任务**：修复 subagent 已成功创建后在执行阶段失败仍被误报为"创建失败"，并补齐失败路径的收尾 hook 触发，保证失败态与后续清理逻辑一致。
- **WorkBuddy 自定义专家**：修复沙箱命令未继承配置目录，导致创建专家时可能写入错误目录的问题。
- **Prompt 情绪分析上报**：移除 Recall API 查询中的 `<user_query>` 包装标签，并兼容网关响应包装，避免召回或解析异常导致结果未上报。

## [2.122.0] - 2026-07-15

### 🎉 新功能

- **Web UI 账户登录**：Gateway 认证通过后，新增 CBC 账户登录流程（OAuth），支持国内站、国际站、企业域名、iOA 四种登录方式。同时 Gateway Cookie 有效期延长至 30 天，并支持 sliding window 自动续期；认证 token 从 sessionStorage 迁移到 localStorage，关闭标签页后仍保持登录。
- **远程控制机器人入口**：支持通过产品配置分别控制微信机器人和企微机器人添加入口显隐，同时保留已有渠道的管理能力。
- **添加市场支持默认开启自动更新**：`POST /api/v1/plugins/marketplaces` 新增可选 `autoUpdate` 参数，`autoUpdate=true` 时在添加市场的同时开启该市场的自动更新，客户端一次往返即可完成「添加市场并默认开启套件自动更新」。市场已存在时若传 `autoUpdate=true` 会补开其自动更新开关（幂等）；响应体回读最终 `autoUpdate` 状态。同步更新 OpenAPI 规范与 HTTP API 文档，并补充单测与 E2E 覆盖。
- **Web UI 自定义模型管理**：设置页「模型」分区新增自定义模型管理入口，支持在弹窗内查看、新增、编辑与删除自定义模型（OpenAI 兼容端点），配置持久化到用户级 `models.json`。新增/编辑自定义模型时仅将其追加到模型列表（依赖自定义标记展示），不再写入 `models.json` 的 `availableModels` 白名单，避免在无官方白名单基线的登录场景下白名单被收窄而遮蔽账号下发的官方模型列表。
- **Web Chat `/skills`**：直接输入 `/skills` 时不再跳转页面或发送给模型，而是在对话内按来源（用户 / 项目 / 插件）分组内联展示可用技能列表，与 CLI Skills 面板信息架构对齐。
- **Web UI 插件页筛选与分页**：已安装与浏览列表新增按类型（技能 / MCP / Hook / 工具）和启用状态筛选，并支持前端分页，切换筛选时自动回到首页。
- **Web UI 设置页目录导航**：新增分区目录（TOC）导航，随页面滚动高亮当前分区，点击可平滑跳转到对应设置区块；内容区保持原居中布局。

### 🔧 功能改进

- **端口解析修复**：修复 URL 使用默认端口（HTTP=80, HTTPS=443）时端口解析为 NaN 的问题。
- **Daemon 启动行为**：`start()` 改为先清理残留进程再启动，避免端口占用或状态不干净。

### 🐛 Bug 修复

- **/btw 侧问题**：修复主任务执行工具调用过程中使用 `/btw` 提问时报 `400 invalid parameter value` 导致侧问题无法使用的问题。现在侧问题请求会与"禁用工具"的模式保持一致，不再携带残留的工具调用记录。
- **WebUI 终端**：修复 Bun standalone 二进制下 WebUI 终端（终端 Tab）连接约 120s 后被断开、反复重连最终报 WebSocket 错误的问题。根因是 daemon 将 `ws` 库 inline 进 bundle，绕开了 Bun 内置的 `ws` shim，导致协议级 `pong` 事件不触发，心跳误判"漏 ping"从而 terminate 连接。改为在 `local-pty-service.ts` 中运行时动态加载 `ws`，使 Bun 命中其可用的 `ws` shim；Node 运行时行为不变。
- **插件缓存**：无显式版本的 Git marketplace 插件使用 commit SHA 作为缓存版本，并自动迁移历史 `unknown` 缓存；仍被活动会话使用的旧目录会保留到安全清理。
- **Plan 模式**：为计划文件名增加短后缀，降低并发会话下计划文件路径冲突风险。
- **文件工具沙箱审批**：Edit、Write、MultiEdit 和 NotebookEdit 在沙箱启用时统一跳过旧权限规则链，交由沙箱文件规则完成审批，修复主 Agent 与子 Agent 因权限上下文初始化时序不同而表现不一致的问题。

## [2.121.3] - 2026-07-15

### 🔧 功能改进

- **stdio initialize 提速**：SDK `initialize` 握手在带 systemPrompt/agents 覆盖时不再被慢 MCP 阻塞。覆盖注入（product sync + agent rebuild，会等 MCP settle）改为后台执行，握手立即返回；首个 prompt 仍会等覆盖生效后再跑。实测一次真实会话 initialize 从 536ms（其中 529ms 花在覆盖注入）降到 ~ms 级返回。
- **输出风格懒渲染**：内置输出风格的模板内容改为按需渲染——加载列表（`initialize` 握手、风格选择面板只需 name/description）时不再无条件渲染全部模板，真正应用某个风格时才渲染并缓存。

### 🐛 Bug 修复

- **首个 prompt 缺 MCP 工具（#67906 偶现续修）**：prewarm 模式下新会话第一个 prompt 的 ToolSearch 可用工具列表偶现缺少晚连的 USER-scope MCP 工具（如 netdrive / wb-issues），第二个 prompt 才有。根因是 ToolSearch 描述在 `buildTools` 时被冻结进 agent 实例的工具数组，此前的缓存失效边只失效描述缓存、不会重烤已冻结的 agent。修复在 run 路径（`resolveAgentForSession`）加 index-epoch 校验：若晚连 MCP 在 agent 冻结后才索引了新工具，则等 MCP settle 后重烤该 agent 再跑。`initialize` / `get_available_models` 不经此路径，前置请求性能零劣化。
- **Agent 委派崩溃**：修复 sub-agent 委派 100% 失败的回归问题（`Cannot read properties of undefined (reading 'history')`）。Telemetry interceptor 在 input 为空时缺少判空导致崩溃，现在在源头和拦截器两层都加了防御性 guard。
- **TUI 键盘输入崩溃**：修复粘贴文本 / 输入特定转义序列（如 `\x1b[1;5P` 等 Ctrl+功能键序列，可被夹带在大段粘贴中）时，`getKeyName` 读取 `undefined.length` 触发 `uncaughtException` 导致 CLI 进程崩溃退出的问题。现在 Ink 输入在 TUI 边界（`useKeybinding`）统一做空值归一化，下游键盘解析链保持 `string` 类型不变；`getKeyName` 额外保留空值守卫作纵深防御。(#66183)
- **回滚延迟工具重试参数提示方案**：此前尝试通过注入激活工具的参数结构提示来引导模型自我纠正，经真实实验验证对部分模型的参数退化场景无效。现回滚该方案，改由上游工具直连方式解决，避免无效的提示注入带来额外开销。

## [2.121.2] - 2026-07-14

### 🔧 功能改进

- **Daemon 自动更新启用**：修复 daemon 模式下因 `--serve` 隐含 `print=true` 导致自动更新被跳过的问题，daemon 作为长驻进程现在始终启用自动更新。
- **Daemon status 诊断增强**：`daemon status` 输出新增 `autoUpdate` 字段，展示自动更新启用状态及原因。
- **端口解析修正**：修复 URL 使用默认端口（80/443）时 `url.port` 为空导致端口解析为 undefined 的问题。

### 🐛 Bug 修复

- **Daemon restart host 丢失**：修复 daemon 重启后 host 绑定丢失的问题，现在 `configuredHost` 会与 `configuredPort` 一起持久化到 PID 文件并在 restart 时复用。
- **剪贴板复制**：修复非 HTTPS 环境下（如 HTTP 隧道访问）剪贴板复制功能失效的问题，增加 execCommand fallback 兜底，复制失败时通过 toast 提示用户。
- **CORS**：修复 `--host 0.0.0.0` 启动时通过 IP 或自定义域名访问 Web UI 出现跨域问题。当绑定 0.0.0.0 且用户未显式指定 `CODEBUDDY_CODE_CORS_ORIGINS` 环境变量时，自动允许所有来源。
- **MCP 配置健壮性**：当某个作用域的 MCP 配置中存在非对象条目（如误写成字符串 / null / 数字）时，跳过该条目并告警，不再让整个作用域加载失败或连累其他正常的 MCP server。
- **Web UI 窗口标题**：修复将 Web UI 安装为 PWA 后，对话窗口标题栏重复显示应用名的问题（如 "CodeBuddy Code - 你好 - CodeBuddy Code"）。页面标题不再拼接应用名后缀，应用名由 PWA 应用信息统一提供。
- **安全中心路径匹配**：修复 Windows 上沙箱路径匹配引擎对用户根目录识别过于宽泛的问题，避免其他账户目录被误判为当前用户目录，导致白名单/黑名单规则跨账户误匹配。
- **文件安全规则**：修复命令白名单命中时，Windows 受保护目录自身因尾斜杠差异未命中文件黑名单的问题。

## [2.121.1] - 2026-07-14

### 🐛 Bug 修复

- **子 agent 卡在 preparing / ESC 崩溃**：修复本地 CLI 下主 agent 调用 Agent 工具起子 agent 后，子 agent 长时间卡在 preparing 阶段不执行、且按 ESC 中断时进程抛未捕获异常崩溃的问题。修复三处：1) 子 agent 在 sandbox 未启用时不再等待一个永不就绪的 sandbox 会话（此前会永久挂起）；2) 中断发生在子 agent 准备阶段时不再产生未处理的 Promise rejection；3) 为 MCP 工具列表查询补充请求超时，避免慢/无响应的 MCP 服务阻塞子 agent 启动。
- **工具调用流式解析**：修复部分模型将 tool_call 的 id 和 name 拆分到不同 streaming chunk 时，客户端不识别 toolCallIndex 导致工具调用失败、会话报错的问题。放宽首 chunk 识别条件，允许后续 chunk 补发工具名，补齐 OpenAI Chat Completions streaming 协议允许的字段拆分场景。
- **Web UI**：修复 chat 页面因循环依赖使用 require() 导致浏览器崩溃的问题。
- **会话恢复列表**：过滤掉没有真实用户输入的空壳会话（如新建后立刻切走、仅留下命令记账消息的会话），避免标题回退显示成命令名。

### 📝 文档更新

- **HTTP API / Daemon 文档**：补充 `/api/v1/runs` 的请求头与请求体说明，示例统一为 Gateway Protocol 格式，并新增请求体字段表。

## [2.121.0] - 2026-07-14

### 🎉 新功能

- **插件更新公开接口**：新增 `POST /api/v1/plugins/update`，在公开 HTTP API 上提供「将已安装插件更新到最新版本」能力。请求体支持 `plugin`（`name@marketplace`）、可选 `scope`（`user`/`project`/`local`）与 `waitForApply`；`waitForApply=true` 时等待变更生效后再返回，否则写入后即返回。为客户端「套件自动更新」提供前置接口支持。
- **市场自动更新开关**：新增 `POST /api/v1/plugins/marketplaces/auto-update`（请求体 `{ marketplace, autoUpdate }`），开启/关闭市场自动更新，等价于 `/plugin` 面板的「Enable/Disable auto-update」；并在 `GET /api/v1/plugins/marketplaces` 响应中返回 `autoUpdate` 当前状态。开启后由后台周期性（每 ≤24h）同步市场并把已安装插件升级到最新，与一次性的 `POST /api/v1/plugins/update` 互补。
- **工作目录管理 API**：新增 `/api/v1/workspace-dirs` REST API，支持列出、添加、移除和全量同步附加工作目录。
- **Web UI 工作目录管理**：输入框工具栏新增工作目录堆叠图标，支持可视化添加/移除附加工作目录。
- **Agent 上下文注入**：附加工作目录信息自动注入到 Agent 系统提示词中。
- **权限模式扩展**：ACP 新增 Full Access 和 Delegate 权限模式。

### 🔧 功能改进

- **PTY 稳定性**：将 `@lydell/node-pty` 及各平台预编译包同步升级至 `1.2.0-beta.14`，纳入 macOS PTY 退出后的 kqueue 文件描述符回收修复。
- **Hooks**：PostToolUse 支持通过 `updatedToolOutput` 替换所有工具的输出，便于压缩冗长结果并降低上下文占用。
- **后台任务开关**：新增环境变量 `CODEBUDDY_CODE_DISABLE_BACKGROUND_TASKS`，宿主显式设置为真值后，Agent、Bash、PowerShell 工具的 `run_in_background` 参数会从工具 schema 中隐藏，模型无法调用后台执行；即使历史/缓存 tool call 仍带该参数，运行时也会兜底回退到同步（Agent）/前台（Bash、PowerShell）执行路径，保证结果一定会回流到主答复中，避免请求-响应式 SDK 场景下 skill / 命令结果丢失。 #63114
- **输入框工具栏**：Mode/Model 选择器尺寸优化，更紧凑。
- **文件树加载态**：目录展开增加延迟显示 loading，避免快速加载时的闪烁。
- **BottomSheet 精简**：移除与输入框工具栏重复的 Mode/Model 选择区域。

### 🐛 Bug 修复

- **空模型响应处理**：修复当模型请求正常结束但未返回任何有效内容时，对话被静默取消、界面只显示占位符且无任何错误提示的问题。现在这种上游异常会作为可重试错误处理（最多重试 1 次），仍为空时向用户明确提示模型返回空响应，不再将其误判为用户主动取消，避免会话被钉死后无法继续发送。
- **--print stream-json 结果误报**：修复 `--print --output-format stream-json` 模式下，模型调用不可用工具触发工具未找到错误后、虽已自动恢复并成功完成任务，但最终 result 事件仍误报 `is_error=true`（`result` 为空）的问题。现已恢复的轮级错误不再被提升为会话级致命错误，行为与交互式会话模式保持一致。
- **提升延迟加载工具参数稳定性**：修复部分模型在通过延迟加载工具重试复杂参数时，容易丢失真实参数结构约束并持续发出错误参数的问题。现在会在重试轮补充目标工具的参数结构提示，降低数组等复杂字段被误生成的概率，同时保持工具列表前缀稳定。
- **AskUserQuestion**：参数不合规时不再静默返回空结果。新增前置参数校验，缺少必填字段或类型错误时返回精确到路径的可读报错，模型可据此自我纠错；同时为问题卡片加渲染兜底，避免坏数据导致卡片一闪即消。
- **ACP 消息时间语义**：恢复 JSONL 每条消息独立记录 `timestamp` 的语义，并统一 live、广播与 replay 链路使用 ACP `_meta.timestamp`，避免完成耗时被首个流式分片时间截断。
- **日志刷屏**：MCP 延迟工具索引的诊断日志此前打在 info 级别，且随工具列表刷新对每个工具逐条打印，长会话下日志文件被撑到 GB 级。现将这类诊断日志统一降为 debug 级（默认不落盘，可用 `-d` 排查），并删除逐工具热路径行，仅保留服务级汇总。
- **Linux Sandbox**：在 WorkBuddy Linux 中启用 sandbox-cli 后端，并使用 pipe 模式执行命令。

## [2.120.0] - 2026-07-13

### 🎉 新功能

- **子 Agent 模型灵活配置 (#66763)**：支持按内置子 Agent（Explore / general-purpose / Plan 等）粒度独立指定模型。新增 `subagents` 配置项（`subagents.agents.<子Agent名>.model`，全局 + 项目双 scope，结构对齐 Copilot CLI 便于后续扩展），可在 `/agents` 面板查看每个子 Agent 的「实际生效模型 + 来源」并编辑；环境变量 `CODEBUDDY_CODE_SUBAGENT_MODEL` 仍为最高优先级、对所有子 Agent 一刀切。
- **场景变体模型配置 (#66763)**：新增 `variantModels` 配置项，可在 `/model` 面板查看并修改 `lite` / `reasoning` 两个通用场景槽位当前映射的模型（全局 + 项目双 scope）；对应环境变量 `CODEBUDDY_SMALL_FAST_MODEL` / `CODEBUDDY_BIG_SLOW_MODEL` 仍按变体独立最高优先级。未配置时行为与现状完全一致（向后兼容）。

### 🔧 功能改进

- **Web UI 代码优化**：提取共享工具函数，消除重复代码，改善可维护性。
- **Web UI 组件拆分**：将 InputBox 和 TerminalPaneView 的子逻辑提取为独立 hook（命令菜单、图片附件、文件附件、文件建议、PTY 连接），提升可维护性。
- **chat-store 去重**：提取 `appendToSubagentTimeline` 公共函数，消除 addChunk 和 addThinkingChunk 中的重复代码。
- **use-acp 依赖优化**：移除 useEffect 对 Zustand action 的冗余依赖，避免闭包过期导致的 sessionId 取值问题。

### 🐛 Bug 修复

- **沙箱 Bash 环境变量**：修复 Bash 沙箱执行时腾讯文档等 MCP 配置无法透传，导致相关工具不可用的问题。
- **沙箱降级**：修复 `sandbox-cli` 启动失败并降级到本地执行时，内部 deferred Promise 额外触发 `unhandledRejection` 诊断的问题。
- **Skill 加载优先级**：修复项目内 Skill 与全局 Skill 同名时，项目 Skill 未按就近优先级生效的问题。

## [2.119.4] - 2026-07-12

### 🔧 功能改进

- **Prewarm socket 目录支持 env 自定义**：新增 env `CODEBUDDY_CODE_PREWARM_SOCKET_PATH` 控制预热进程 unix socket 的落盘目录（默认 `/tmp`）。设置后 socket 改落 `<dir>/codebuddy-prewarm-<id>.sock`，进程侧创建与 `cbc-prewarm` 客户端连接读取同一 env 保持同构；仅影响 unix socket，Windows named pipe 不受影响。

## [2.119.3] - 2026-07-12

### 🐛 Bug 修复

- **stdio 模式 initialize 不再被慢 MCP 阻塞**：stdio / stream-json 模式下 `initialize` 握手原会被慢 MCP server 拖住（实测 ~10s）。initialize 只需 models/commands/account 元信息，本不该等 MCP readiness。新增 `configReadyDeferred` + `AgentManager.getInitializeMetadata()`，让 initialize 只等配置解析、不等 agent 注册期的 MCP settle。agent 的 MCP 装配与发消息路径保持不变，仍正确等待 MCP。#67435
- **预热进程 MCP 加载**：修复预热进程激活后，用户级 MCP 配置（`~/.codebuddy/.mcp.json`）在激活前才落盘时无法加载、其工具进不了 ToolSearch 可用工具列表的问题。激活路径现会重读用户级 MCP 配置，确保待命后新增的 MCP server 正常生效。
- **网络错误重试**：回滚 #59818 的 `isNetworkError` 包装后网络错误识别改动（相关 PR 存在需要重新评估的副作用），恢复到该 PR 合入前的行为。原 issue #53806 需另行修复。

## [2.119.2] - 2026-07-12

### 🔧 功能改进

- **终端自动重连**：WebSocket 断连后按退避序列自动重连，超过最大次数回退到手动重连。
- **PTY 流控**：基于 ACK 的流量控制机制，防止高输出场景下 WebSocket 缓冲区溢出。
- **文件树隐藏文件切换**：支持显示/隐藏 .git、node_modules 等常见隐藏文件。
- **文件树 Git 状态着色**：文件树节点根据 Git 状态（modified/added/deleted 等）显示对应颜色。
- **文件树实时监听**：通过 SSE watcher 监听文件系统变化自动刷新文件树。
- **终端链接增强**：点击目录路径自动在文件树中展开，点击文件路径同时打开编辑器并定位文件树。
- **Folder 隔离存储**：按工作目录隔离 store 持久化（类似 VSCode workspaceStorage）。
- **心跳容忍优化**：PTY 心跳改为双层容忍，避免系统休眠唤醒后误杀连接。
- **zsh 提示符修复**：通过 PROMPT_EOL_MARK 环境变量消除首行 % 标记，替代之前的 exec-replace 方案。

## [2.119.1] - 2026-07-11

### 🐛 Bug 修复

- **自定义模型输出额度**：自定义模型未显式配置最大输出 tokens 时，不再把 catalog 的模型能力上限自动作为每次请求额度。#66582
- **积分消耗提示失真**：修复多轮对话后积分消耗显示不准确的问题，保留 conversationRequestId 直到响应/持久化路径完成消费。
- **埋点上报**：统一规范整数字段的上报值，避免 Token 等字段包含小数时导致事件上报失败。

## [2.119.0] - 2026-07-10

### 🎉 新功能

- **插件依赖**：支持 `dependencies` 声明、传递安装与启用、semver tag 解析、跨 marketplace allowlist、依赖冲突诊断和孤立依赖清理。
- **插件缓存**：新安装的 marketplace 统一落到 `plugins/marketplaces/<marketplace>`，启用/安装插件时物化到 `plugins/cache/<marketplace>/<plugin>/<version>` 并写入 `installed_plugins.json`。
- **插件能力**：支持插件 `bin/` PATH 注入、兼容的 root/data/project 与 `user_config` 环境、持久化 data 生命周期、`settings.json` allowlist、`defaultEnabled` 和完整目录说明；`themes/` 与 `monitors/` 当前仅记录为 experimental 字段，不加载到运行时。

### 🔧 功能改进

- **Windows 插件性能**：插件 data、MCPB、完整性检查与 Git 探测改用异步文件 I/O，Git/npm 安装不再同步阻塞主线程；MCPB 复用流式 ZIP 解压并将临时归档放入系统临时目录。
- **Brokered Sandbox Runtime**：为 macOS 沙箱内 Python 和 Node 文件 API 接入 brokered file-token 与 host-op 链路，并新增 Node native addon 支持同步 fs API 消费 sandbox extension token；构建后复用 macOS `codesign-darwin.sh` 签名流程，避免正式发布包遗漏嵌套原生模块签名。
- **Broker Shell 文件备份**：在 macOS broker shell 的重定向、toybox 写入和 host-op 修改前复用 ModifyBackup 备份链路；并将 `truncate` 纳入 macOS brokered toybox 入口，确保文件截断操作可触发修改前备份链路。
- **Sandbox Telemetry**：`skipPreExecChecks=true` 下 `ExecPolicy forbidden` 仍会作为安全硬拦在 pre-exec 阶段拒绝命令，并产生 `permissionPath='new'` 与 `reason='forbidden'` 的预期埋点组合。
- **Deep Research 输出格式化**：Workflow 返回结果从 JSON 结构改为可读的 Markdown 报告，包含摘要、发现、反驳声明和统计信息。
- **文件撤回防复活**：Web UI 文件变更面板增加 recentlyReverted 机制，防止异步广播将已撤回的文件重新加入列表。
- **Deferred Tool 解析兼容**：修复 SDK 传入 raw JSON string 时 Zod 校验失败的问题，通过 preprocess 自动解析。
- **子 Agent 消息隔离**：Detached sub-agent 转发的 usage 消息不再在主对话 UI 中渲染，仅用于 token 消耗追踪。
- **子 Agent 工具标题前缀**：Web UI 中为子 agent 内部执行的工具调用添加类型前缀显示。
- **Skill 工具描述优化**：Skill 描述模板增加 deferred tool 优先使用 ToolSearch + DeferExecuteTool 的提示。
- **Sub-agent 标识修正**：在 sub-agent session 中正确标记 isSubAgent 状态。

### 🐛 Bug 修复

- **提升多轮对话的 prompt 缓存命中率**：修复并行工具调用场景下，同一条工具结果在相邻轮次被组装进模型请求时序列化形态不一致的问题。此前仅对最后一个工具结果做归一化，并行批次中的其余结果要到下一轮才被归一化，导致缓存前缀在该处分叉、后续内容全部 miss。现统一在模型请求前对本轮所有工具结果归一化，缓存前缀不再抖动，多工具/子代理场景的缓存命中率与费用显著改善。
- **stream-json + `--resume`**：修复 `--input-format stream-json --output-format stream-json -r <sessionId>` 场景下，`initialize` control_response 在 stdout 上被 resume 历史事件抢先写入的排序竞争。原代码在 initialize handler 尚未把响应写完前就 `initializeDeferred.resolve()`，让 resume replay 分支立刻开始把大历史流写到同一条 `process.stdout` 管道；下游（sandbox-proxy）读得慢时 initialize 响应会被卡在几十 KB 的历史事件后面，触发 sandbox-proxy 的 60s `sendControlRequest("initialize")` 超时并放大成 120s+ 的会话唤醒卡顿。改为在 `await initializeHandledPromise` 完成之后再 resolve deferred，保证 initialize 响应一定先落盘 stdout。#63837
- **工具审批送达**：修复对话之外自动续跑（后台任务完成、错误恢复、定时/渠道触发）的执行撞到高危命令审批时，审批框无法送达客户端、用户确认不了、会话卡在等待授权状态的问题。
- **认证初始化**：优化 apiKeyHelper 认证慢路径，避免网络配置同步抖动阻塞无头模式认证初始化。
- **AskUserQuestion 多选回答**：修复多选题同时选择预设项和填写自定义项时，自定义内容覆盖已选项的问题。
- **PostToolUse 图片结果**：修复 hook 返回附加上下文时破坏 `image_url` 结构化工具结果的问题，避免图片结果降级为文本或丢失。

## [2.118.2] - 2026-07-09

### 🐛 Bug 修复

- **reasoning-only 响应**：修复 thinking 模型只返回 reasoning 时 SDK patch 生成空 assistant message，导致 `Cannot read properties of undefined (reading 'type')` 的问题。

## [2.118.1] - 2026-07-09

### 🔧 功能改进

- **依赖升级**：升级伽利略 Node SDK 至 0.3.17-beta.1，移除不再需要的旧版本 patch 文件

### 🐛 Bug 修复

- **本地 ACP 认证**：修复本机回环连接在部分平台（Windows x64）下 ACP `initialize` 握手被误判为非本机、返回 401 `Authentication required` 导致会话无法建立、全量任务被阻塞的问题。现已能正确识别全部等价回环地址形态（127.0.0.0/8、`::1` 及其展开/IPv4-mapped/带方括号或 zone id 的形态）
- **`/effort` 与 `/config` 一致性（Issue #58743）**：修复 `cbc --effort <level>` 启动后 `/config get reasoningEffort` 与 `/effort` 面板显示不一致的问题。`/config` 现展示合并后的 effective settings（CLI 优先级最高）；`/effort` 面板初始高亮 = 会话 override → CLI/全局 `reasoningEffort` → `high` 兜底；`/effort <level>`（非 ultracode）同步写会话级模型 effort override（走 `setOverrideThinking`，与 ACP `thought_level` 同通道），非法档位直接拒绝

## [2.118.0] - 2026-07-08

### 🎉 新功能

- **子代理 reasoning 控制**：子代理（sub agent）新增两个配置项，可单独控制其思考行为：
  - `effort`：设置子代理的 reasoning 强度（minimal/low/medium/high/xhigh/max），对所有子代理（含自定义/插件）生效；
  - `thinkingEnabled: false`：运行时强制关闭该子代理的思考，仅对内置子代理生效，避免外部来源绕过模型的推理产品语义。
  两者互斥，关闭优先；配置省略时不干预，沿用会话/模型默认。该能力仅作用于子代理会话，不影响主代理。

### 🔧 功能改进

- **usage-update-builder**：抽取 usage 派生逻辑为独立纯函数模块，供 publisher 和 replay 两条路径复用，消除实现分叉

### 🐛 Bug 修复

- **上下文环 popover**：历史对话切换后上下文消耗细拆数据（usageByCategory）未展示，现在 replay 路径补推 usage_update 事件恢复数据
- **积分归因**：主 session 每轮刷新 rootRequestId，确保消耗积分正确关联到当前 turn，修复积分未展示问题
- **WSL1 安装报错**：修复 WSL1 下安装后执行二进制报 `Exec format error` 的问题。根因是构建工具链 Bun 1.3.13 的一个 ELF program-header 回归（WSL1 的严格 ELF loader 会以 `ENOEXEC` 拒绝），已将构建镜像的 Bun 升级到 1.3.14（该版本修复了此回归），新版二进制可在 WSL1 正常运行。同时 install.sh 保留 WSL1 检测但改为非阻断的 warning：若仍无法启动，会引导用户升级到 WSL2 或改用 Windows 原生安装方式，不再直接拦下已能正常运行的 WSL1 用户
- **macOS git 探测**：内置市场安装前检测 git 可用性时，先判断 PATH 上的 `git` 是否为未安装 Command Line Tools 时的 `/usr/bin/git` stub；若是则不再执行 `git --version`，避免触发系统「安装开发者工具」弹窗，并正常降级为 Zip 市场安装
- **预热进程 MCP 加载**：修复 prewarm 进程 activate 时，cwd 变更广播早于 argv/opts 落定，导致 `isHeadless()` 读到含 `--prewarm` 的 stale argv 而误判非 headless，进而跳过 headless MCP 初始化——stream-json 模式下（MCP 来自 `~/.codebuddy/mcp.json`）待命后落盘的 USER-scope MCP server 永久停在 connecting、`dynamicConfig` 卡满 10s、工具进不了首轮模型请求。改为先落定 cwd/env/argv/opts 全量状态再统一广播 cwd 变更
- **微信支付拦截**：避免 WebFetch 工具结果中的网页摘要或文档内容误触发微信支付检测

## [2.117.2] - 2026-07-07

### 🔧 功能改进

- **认证启动优化**：custom-token 认证类型新增同步快速路径，当 token 已在环境变量或配置文件中时直接使用，避免等待网络同步导致启动延迟
- **工具错误码解耦**：将工具错误码映射从 HookManager 抽离到各工具实现，避免在通用层硬编码工具名称

### 🐛 Bug 修复

- **输入框**：修复 TUI 输入框偶现按 Enter 无响应、需先按空格再回车才能发送的问题
- **ESC 中断**：修复 ESC 打断 AI 输出后，输入框偶发变黄且无法继续输入的问题。模型请求/流式态现在能正确响应中断收尾的 agent_end 事件收回空闲，不再依赖竞态的错误恢复路径
- **Web UI 历史会话崩溃修复**：修复加载 schema 不完整的历史会话时 ChatView 因访问 undefined entry 导致白屏崩溃的问题，增加多层防御确保页面可正常渲染
- **模型最大输出 Token 兜底**：修复部分模型在配置未显式携带最大输出 Token 时，请求会丢失该上限、转而由模型侧填入保守兜底值的问题。现在配置缺省时会回退到内置模型能力表，确保请求带上正确的最大输出 Token 上限
- **Git 状态面板**：修复 Web UI 的 Git 面板不显示嵌套目录中未跟踪文件的问题
- **设置写入**：修复写配置时可能基于陈旧缓存快照整体回写，导致插件启用状态等字段偶发丢失的问题
- **Agent 团队成员权限**：修复模型传入默认模式时可能覆盖子任务权限的问题，确保非计划模式下团队成员继承父会话权限
- **终端 WebSocket 保活**：Web UI 终端面板新增应用层心跳（每 25s），防止反向代理/防火墙因 idle timeout 断开连接
- **ELOOP 异常忽略**：进程级 uncaughtException 新增对 ELOOP 错误码的静默处理，避免循环符号链接导致无意义的崩溃日志
- **流式响应中途断流卡死**：将「流间静默超时」从首 token 超时中解耦——首 token 超时保持 20 分钟（长上下文 prefill 慢吐首 token 属合法），流间静默超时收敛到 5 分钟。此前两者同为 20 分钟，导致模型已开始吐 token 后连接中途断掉时，会话要干等满 20 分钟才报错重试。可继续通过 `CODEBUDDY_STREAM_TIMEOUT_MS` 与 `CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS` 自定义
- **Write 工具**：写入 `.csv` / `.tsv` 文件时补写 UTF-8 BOM，修复在 Windows Excel 打开含中文的产物 CSV 出现乱码的问题。同时保留覆盖写入时原文件已有的 UTF-8 BOM，其它文本格式不受影响
- **MCP 资源发现串行超时**：`McpResourceCatalog` 现在并行查询所有已连接的 MCP 服务器，单台服务器超时不再串行累加阻塞 agent 启动；`listResourceTemplates` 补齐 `resources` capability 守卫，并为资源列举请求设置 8s 短超时，卡住的服务器快速降级
- **上游推理内容异常关流崩溃**：修复上游模型/网关在只流出推理内容（无普通文本/工具调用/拒答）后以 `finish_reason="error"` 关流时导致会话崩溃的问题。现在会主动拦截并走已有的空流重试管道，避免会话被打回 idle 且 Agent teams 队员任务被错标为 failed

## [2.117.1] - 2026-07-06

### 🔧 功能改进

- **SCM Diff 查看方式优化**：点击 SCM 文件列表中的文件现在以独立标签页打开 Diff 视图，支持同时查看多个文件的差异，而非替换整个编辑器区域
- **Web UI 工作目录管理**：新增 workspace-store 统一管理工作目录来源，消除各 store 分散获取 cwd 的耦合
- **视图切换优化**：Editor 和 Changes 视图改为始终挂载（display 控制显隐），避免切换时 Monaco Editor 和 Diff 视图重建闪烁
- **终端切换优化**：终端从隐藏恢复为可见时立即执行 fit，减少切换时的空白闪烁
- **主题适配**：按钮前景色从硬编码 `text-white` 改为语义化的 `accent-brand-foreground` token，正确适配明暗主题
- **编辑器空状态**：提取为独立组件，使用 Logo 替代 SVG 图标，在空间不足时自动隐藏快捷键提示

## [2.117.0] - 2026-07-04

### 🎉 新功能

- **Daemon 系统服务注册**：新增 `codebuddy daemon install` / `uninstall` 命令，支持将 daemon 注册为操作系统级服务（macOS LaunchAgent / Linux systemd / Windows Task Scheduler），实现登录自启和崩溃自动恢复

### 🔧 功能改进

- **Web UI 实时文件监听**：git 状态监听从轮询模式升级为 SSE 实时推送，响应更快、资源占用更低
- **Git 状态主动刷新**：文件操作工具（Write/Edit/Bash 等）完成后自动触发 git status 刷新
- **文件监听噪音过滤**：过滤 node_modules、.git/objects 等高频无关路径，减少无效刷新
- **会话标题优化**：正确处理 channel XML 包裹的标题，显示可读内容
- **移除外部字体依赖**：去除 Google Fonts Poppins 加载，改用系统字体栈，加速首屏渲染
- **终端面板双击交互**：双击 tab 列表空白区域新建终端，双击 tab 标签切换面板最大化
- **命令粘贴流展开**：斜杠命令执行前自动展开粘贴流引用

### 🐛 Bug 修复

- **WorkBuddy 专家团回复**：修复部分模型仅返回深度思考、没有正文时，流式响应缺少 assistant message 导致继续对话无回复的问题

### 📝 文档

- **模型选择回归看门狗**：新增 `--model` / `CODEBUDDY_MODEL` / auto 的端到端回归测试（`model-selection.spec.ts`），通过 stream-json `system/init` 的 `model` 字段钉住"用户指定的模型不会被静默替换成收费模型"的红线；同步补齐相关单测与复现脚本，并修正 `AgentRunInterceptor.priority` 的注释（数值越大越先执行）
- **CLI 文档归档同步**：同步 CLI 文档至多语言站点，新增 v2.115.0 / v2.116.0 发布说明英文翻译

## [2.116.0] - 2026-07-03

### 🎉 新功能

- **Web IDE 终端搜索**：终端面板支持 Cmd/Ctrl+F 唤起搜索栏，可实时高亮、区分大小写 / 全词匹配 / 正则匹配，并上下导航结果。
- **Web IDE 终端渲染增强**：终端启用 GPU 加速渲染（失败时静默降级）、内联图片显示、OSC 52 剪贴板协议，并正确处理 CJK 字符宽度。
- **终端标题动态指示**：终端窗口标题在任务运行时显示动态加载指示，空闲时恢复静态标记。

### 🔧 功能改进

- **模型请求重试可见性**：在 `codebuddy_code.model_request` span 上新增 `retry_attempt` 事件和 `retry_count` 属性，使连接级失败（ECONNRESET 等）的自动重试在 trace 中可见。
- **文件树回到工作目录**：当浏览目录偏离工作目录时，文件树提供「回到工作目录」快捷入口；加载失败时自动回退到工作目录。
- **标签栏自动滚动**：编辑器标签页和终端标签栏在激活项变化时自动滚动使其可见。
- **源代码管理实时更新**：SCM 状态监听提升到应用级，始终在后台监听变更，确保状态实时刷新。
- **TUI 计时器性能优化**：后台任务耗时、目标计时、加载秒数等高频计时逻辑改为按需启动并隔离重渲染，减少空闲状态下的无效刷新。

### 🐛 Bug 修复

- **ACP slash 命令补全**：修复 `--acp` 模式下接入 Zed 等严格 ACP 客户端时，新建会话后 slash 命令补全为空的问题。此前 session/new 的可用命令列表通知在会话响应之前发送，客户端因尚未获知会话标识而丢弃通知；现改为在响应返回之后再推送。
- **Windows 中文输入法输入乱序**：修复用中文输入法按空格提交词组后紧跟输入标点时，标点有概率跑到词组前面（如「中文。」变成「。中文」）的问题，保证快速连续输入的字符按序落入输入框。
- **Windows Git Bash 探测**：当 `CODEBUDDY_CODE_GIT_BASH_PATH` 环境变量指向的路径不存在，且上游已托管 shell（`CODEBUDDY_SKIP_GIT_BASH_CHECK=1`）时，不再中断对话，而是记录一条持久化告警并自动降级到自动探测的 Git Bash / PowerShell，避免会话持续报错；用户显式配置的失效路径仍按配置错误提示退出。
- **预热进程项目级 MCP 加载**：修复 `--prewarm` 进程 activate 切到 workspace 后，若 `.mcp.json` 在 activate 之后才落盘（沙盒 provision 与 activate 存在竞态），项目级 MCP server 及其工具永远进不了 ToolSearch 的问题。现将 workspace 根的 `.mcp.json` / `mcp.json` 纳入监听，文件落盘/变更会触发缓存失效 + 重扫。
- **内存/OOM**：修复长跑主会话反复 spawn subagent 时进程内存无界增长、最终因 JavaScript heap out of memory 崩溃的问题。此前每个 subagent 完成后其 session 对象仍被多个按 sessionId 索引的常驻注册表强引用而无法 GC；现在 subagent 完成时会摘除所有内存引用（不删除磁盘 jsonl，保留 resume 能力）。

## [2.115.0] - 2026-07-02

### 🎉 新功能

- **自定义模型使用统计**：新增自定义模型调用数据上报，用于统计用户自带模型的使用情况与占比。仅在使用自定义模型时上报，涵盖模型信息、token 用量、耗时、IDE 与产品形态、企业标识等维度。

### 🔧 功能改进

- **ACP 文件引用优化**：支持客户端声明 `fileReferencesPathOnly` 能力，Agent 侧据此跳过 @path 文件内容的自动展开，模型按需通过 Read 工具读取，降低 token 开销
- **`@file` 引用超长内容处理**：当引用文件或目录过大时，CLI 会限制内联内容大小，并提供继续读取提示，减少超长上下文导致的失败。
- **工具输出截断统一**：统一使用基于视觉行数的截断逻辑，移除冗余的字符数截断，提升终端渲染一致性
- **工具结果截断**：工具结果预览新增字符数截断机制，当单行内容过长时也能正确截断显示，避免输出过长

### 🐛 Bug 修复

- **流式输出取消态收口**：修复压缩期间用户取消后结果事件被误判为重试而被抑制的问题，避免非交互输出和渲染流程一直等待结束信号。
- **ACP 任务取消卡住**：修复 WorkBuddy 助理任务取消后可能长时间停留在等待响应、后续消息无法继续流式返回的问题。
- **WorkBuddy 消息归组**：修复同一轮回复中模型多次生成导致流式正文、深度思考和工具调用被拆成多条消息的问题，确保回复按用户轮次稳定归组。
- **终端标题同步**：修复会话重命名或切换后，终端标签栏标题未及时更新的问题
- **运行中图片消息消费**：修复 agent 运行时发送的图片消息在工具调用之间未被消费的问题（此前含图片的消息会被静默丢弃）；修复 Tab 入队的图片消息在被拉回输入框编辑后重新发送时图片丢失的问题。
- **`codebuddy update` 安装方式识别**：修复在无法识别安装方式时谎称"已是最新"的问题，现在会向发布渠道查询真实最新版本并给出手动升级命令；同时改进安装方式识别，当命令行探测失败时按安装路径兜底推断。
- **代理环境下登录直连超时（#61269）**：修复在设置了 `HTTPS_PROXY`/`HTTP_PROXY` 代理环境变量的机器上，登录 / token 刷新等请求仍然直连目标域名导致 `ETIMEDOUT` 超时的问题。
- **移除 ACP 调试日志**：移除 ACP `initialize` 处理逻辑中残留的排查用 `console.info`，该日志直接写 stdout 会打断交互式终端的 Ink 渲染。
- **积分统计聚合**：按 rootRequestId 聚合展示积分消耗
- **子助理模型继承**：修复子助理、技能和命令在配置不可用模型时未正确继承主对话当前模型的问题，避免请求落到错误模型或后端不识别的模型。
- **终端换行**：修复 Web UI 终端中 Shift+Enter 组合键偶发多余回车的问题
- **面板路由**：工具审批和用户问答面板注册到自管理路由，修复导航异常

## [2.114.3] - 2026-07-02

### 🔧 功能改进

- **PWA 图标**：更新 Web UI logo 并优化 PWA 图标配置，拆分 any/maskable 用途
- **Windows 沙箱写规则**：将 Windows allowWrite 显式规则从 `pinned_allow` 调整为 `inherit_user`，保留 `modify_backup` 切换逻辑。
- **侧边栏状态持久化**：侧边栏展开/收起状态通过后端存储持久化，PWA 重新打开时自动恢复
- **子代理用户消息渲染**：子代理 timeline 中展示用户发送的消息，改善多轮交互的上下文可读性
- **子代理消息缓冲**：处理事件竞争场景，当 tool_call 尚未到达时暂存消息并在到达后自动 flush
- **视图状态恢复**：mainView 持久化到后端，刷新页面后恢复之前的视图（URL hash 优先）
- **聊天消息跳过逻辑优化**：修正 assistant message 跳过判断，正确处理中间夹杂 user message 的场景
- **调试请求日志**：`CODEBUDDY_DEBUG_REQUEST` 现在能正确展示已压缩的请求明文

### 🐛 Bug 修复

- **MCP 工具数字参数校验**：修复 MCP 连接器工具在接收顶层数字类型参数时因参数被模型以字符串形式传入而报 "must be number" 校验失败的问题，现已支持自动类型转换。
- **预热会话项目级 MCP**：修复预热进程唤醒切换工作目录后，新工作目录下 `.mcp.json` 声明的项目级 MCP server 无法加载的问题。
- **后台任务等待**：修复等待后台任务时可能出现的重复轮询问题——请求阻塞等待时会真正挂起直到任务完成，不再立刻返回"仍在运行"导致反复重试。
- **流式推理内容**：修复部分模型在流式回复中重复累积推理片段的问题，并保留工具调用场景下的推理上下文。
- **文件下载安全加固**：文件内容 API 强制 Content-Disposition: attachment 防止浏览器内联渲染 XSS
- **ActivityBar 侧边栏切换**：将设置按钮替换为侧边栏面板切换按钮，操作更直觉

## [2.114.2] - 2026-07-01

### 🔧 功能改进

- **终端通信升级**：PTY 终端从 SSE (XHR) + HTTP 输入方式重构为 WebSocket 双向通信，降低延迟、简化代码。
- **编辑器独立窗口**：新增编辑器在新窗口中独立打开的功能，支持 standalone 模式全屏编辑。
- **终端滚动锁定**：用户向上翻阅终端时，新输出不再强制跳回底部，回到底部后自动恢复跟随。
- **终端链接识别**：终端中的 URL 和文件路径可点击，URL 在新标签页打开，文件路径跳转到编辑器对应行列。
- **Shift+Enter 换行**：终端中 Shift+Enter 发送换行序列，支持多行输入。
- **Git 文件监听**：Source Control 面板通过文件系统 watcher 实时感知 .git 目录变化，自动刷新状态。
- **Git Discard 安全模式**：撤销未跟踪文件时移到系统回收站而非直接删除。
- **文件列表合并**：Changes 与 Untracked 文件合并为统一的 Changes 列表。
- **布局溢出修复**：修复终端和编辑器在 flex 布局中可能的内容溢出问题。
- **sandbox-cli GC 保留时长**：启动 sandbox-cli 进程时固定传入 `--gc_retain_sec 600`，将文件版本 GC 保留窗口设置为 10 分钟。
- **模型路由排查**：增强模型选择链路日志，便于排查自动模型、会话模型意图与实际请求模型不一致的问题。

### 🐛 Bug 修复

- **修复 TUI 任务执行中却显示空闲、ESC 无法中断（只能退出程序）**：agent 实例跨 run 复用，被中断的上一轮 run 或 error-recovery / compact 等手动 emit 的迟到 `agent_end` 会把正在执行的新一轮 run 的状态机误打回 idle，导致 spinner 消失、ESC 失效。现按每-run 唯一的 RunContext 身份校验，丢弃 stale `agent_end`。
- **修复 tab queue 双 drain 竞态导致的 TUI 空闲误判**：一个 turn 结束、队列中有 Tab 入队消息时，`IdleQueueDrainService` 与 `InterruptionService` 会在同一个 `agent_end` 上并发触发两条 drain run，冗余的一条 emit `RUN_SKIPPED` 把 `pending` 打回 `idle`，使正在执行的新一轮 run 卡在 idle、spinner 消失、ESC 失效。现只有拥有运行态生命周期的 run 才发终结性 `RUN_SKIPPED`，保留正在执行的那轮 run 的状态。

## [2.114.1] - 2026-06-30

### 🔧 功能改进

- **Bash 工具环境**：向 Bash 子进程透传当前会话的 MCP 配置快照，支持插件脚本复用现有本地连接器代理能力。（#55165）
- **回滚文件变化统计**：优化 rewind 功能的文件变化统计算法，使用精确的行级 diff 计算替代简单行数差，确保列表页和详情页的 additions / deletions 统计一致。

### 🐛 Bug 修复

- **工具错误码细分**：修复 replace_in_file 各失败场景的错误码被统一兜底的问题，各场景现按语义如实上报，并完善异常路径的错误码兜底分类，减少未知错误占比。
- **SDK 模式工具循环**：修复 SDK / serve 模式下，当模型直接调用需经 DeferExecuteTool 调用的延迟加载工具时，会无限循环重试的问题。现在恢复重试有明确上限，超限后给出终止提示并交还用户。
- **网络抖动自动重试**：修复专家团任务遇到 DNS 解析失败、连接被拒、超时等网络抖动时立即失败不重试的问题，现在会正确识别包装后的网络错误并触发自动重试。
- **子助任务消息块**：修复子助直连页缺失「总助派发任务消息块」的问题。现在只剥离 `<system-reminder>` 块本身，保留任务卡片和用户文本等可见内容。
- **进程异常退出可观测性**：修复 CodeBuddy Code 在崩溃、终端窗口关闭或信号终止时日志里查不到退出原因的问题。现在未捕获异常、未处理 Promise rejection、退出信号以及孤儿 TTY 都会同步落盘诊断日志，便于下次复现时定位原因。
- **文件路径补全**：修复大仓库首次扫描期间快速输入时，候选列表可能闪现后消失的问题。
- **工具调用恢复**：修复模型将工具调用误输出为文本时的恢复链路，降低任务卡住或重复失败的概率。

## [2.114.0] - 2026-06-29

### 🎉 新功能

- **MCP 工具调用透传模型 ID**：调用下游 MCP 服务时，自动将当前模型 ID 注入 HTTP 请求头 `X-Model-ID`，便于下游服务与安全策略识别调用来源模型。仅作用于 HTTP/SSE 传输，按请求维度临时注入、调用后还原，不影响 stdio 类型连接。

### 🔧 功能改进

- **模型选择面板**：支持 Global/Session 作用域切换，用 Tab 键在全局持久化和仅当前会话生效之间切换，替代原来的 't' 键临时切换方案，交互更直观

### 🐛 Bug 修复

- **终端输入**：修复在部分宿主/终端下交互式界面输入被回显到屏幕底部、回车无法发送的问题。改为由界面统一接管键盘输入并转发全局快捷键，避免与底层输入流争用，输入、回车发送、Shift+Tab 及 Ctrl+C/Ctrl+D/Ctrl+B 等快捷键恢复正常。
- **MCP 工具调用**：修复部分模型把工具参数二次编码为 JSON 字符串时，参数校验报 "must be object" 导致所有 MCP 工具不可用的问题；现在会先还原字符串形态的参数再校验。
- **插件技能禁用**：修复用户在 UI 中禁用插件技能（如 agent-browser core）后，仍可在对话中描述并被模型调用的问题（#56942）。插件技能加载器（`SkillExtensionLoader`）此前未读取 SKILL.md frontmatter 中的 `disable: true` 软删除标记，导致禁用的技能仍被加载进 product.skills 暴露给模型。现已对齐 workspace 技能加载路径（`skill-product-provider.ts`），在解析阶段跳过 `disable: true` 的技能。
- **消息队列**：修复运行中同时存在实时引导（Enter steer）消息与排队（Tab queue）消息时，按 Esc 中断会把 steer 与排队首条消息合并进同一轮发出的问题。现在 Esc 后只发出 steer 消息，排队消息保留到下一轮再发出。
- **Glob 工具**：修复 ripgrep 超时后 fallback 到 npm `glob` 时缺少工具级超时、对超大目录（如用户 home）`**` 搜索永久挂死、端上「输出卡住、一直没结果」的问题（#46046 的修复仅覆盖 ripgrep 路径，未覆盖此 fallback 分支）。新增覆盖整个搜索（含 fallback）的工具级超时（Promise.race 兜底，保证即使 `glob` 不响应 abort 也能按时返回），并且 ripgrep 超时/中断时不再无条件 fallback，而是直接返回可解释错误。
- **子 Agent 模型继承**：修复 spawn 子 agent / 团队成员时未指定 `model` 应继承主对话当前模型（inherit）却失效的问题。此前会被提前解析到 agent 模型列表首项，导致子 agent 跑成非主模型；现缺省 / `inherit` / `default` 一律跟随主对话模型，仅显式指定具体模型时才当场解析。

## [2.113.0] - 2026-06-28

### 🎉 新功能

- **Web UI IDE 布局**：新增 IDE 风格布局，支持 Activity Bar、Side Panel、Bottom Panel 和可调整大小的面板
- **Git 集成**：新增 Git 源代码管理面板，支持查看状态、暂存/取消暂存、提交、推送/拉取、分支管理和提交历史图
- **全局搜索**：新增文件内容搜索面板，支持正则表达式、大小写敏感、全词匹配和文件过滤
- **分支管理**：新增分支选择器，支持创建、切换分支和查看远程分支
- **首 Token 回复时间 metrics**：新增 `agent.message.ttfb.user`（用户点击→首 token，含 IPC 全链路）和 `agent.message.ttfb.model`（CLI 进 prompt→首 token，含 prompt build）两个伽利略 metric，`agent.ttfb` 补充 `message_id` / `prompt_request_id` dimensions
- **终端 Windows PTY 支持**：通过 ConPTY 在 Windows 10 1903+ 上启用原生 PTY，自动选择 PowerShell 作为默认 shell

### 🔧 功能改进

- **编辑器状态栏**：显示当前 Git 分支和语言信息
- **终端面板**：支持在底部面板中内嵌展示，改善多面板协作体验
- **标签持久化**：编辑器标签元数据持久化，刷新后恢复打开的文件
- **搜索结果跳转**：点击搜索结果自动打开文件并定位到对应行
- **终端标签右键菜单**：支持关闭、关闭其他、关闭右侧、关闭全部终端标签
- **终端输出缓冲区**：重连回放缓冲区从 1MB 扩大至 5MB，scrollback 从 10000 行扩大至 50000 行，确保长会话内容不丢失
- **终端 SSE 解析**：修复跨 onprogress 调用时事件被截断的问题，改用有状态解析器正确处理增量数据
- **终端渲染刷新**：使用 xterm write callback 确保数据处理完毕后再触发 viewport 刷新，消除高频输出时的闪烁

### 🐛 Bug 修复

- **伽利略 trace**：修复 SDK 未就绪时视图 span 产生全零 spanId 的问题
- **伽利略 trace**：修复伽利略关闭后 trace 数据仍被发往 galileotelemetry.tencent.com 的问题
- **工具错误码上报**：修复 bash、search_content、read_file、write_to_file、replace_in_file、Agent、AskUserQuestion 等工具的结构化错误码在监控上报链路中丢失、被压平或不可达的问题，各失败场景现在按细分错误码如实上报，不再统一兜底为 99999

## [2.112.1] - 2026-06-27

### 🐛 Bug 修复

- **@ 文件联想候选**（#57046）：修复联想候选混入 `.gitignore` 已忽略的构建产物和 `.svn` / `.hg` 等版本控制内部文件的问题，优先按版本控制实际跟踪的文件枚举候选，并在所有枚举路径上主动过滤版本控制内部目录
- **@ 重复字符查询**（#57046）：修复 `@aa` / `@aaa` 这类重复字符查询无法匹配的问题，统一按顺序子序列匹配，与预期行为对齐
- **iOA 个人账号请求头**（#57476）：统一个人账号在 iOA 环境下的默认请求头策略，避免误带默认企业 ID 并引发额度拦截
- **Web UI 文件预览**：修复编辑器视图中图片和 PDF 文件无法打开的问题，避免因缺少 `x-codebuddy-request` 请求头导致预览失败
- **工具调用恢复**：修复长上下文下模型将工具调用输出为纯文本时任务中断的问题，自动提醒模型通过真实工具通道重试

## [2.112.0] - 2026-06-26

### 🎉 新功能

- **企业 PAC 自动代理脚本支持**（#57186）：CLI 在企业终端使用 PAC（Proxy Auto-Config）脚本时，能完整识别脚本中的 per-URL 代理决策规则
  - `ProxyResolver` 新增 L0 PAC 反查层（`resolveForUrl(url)` / `setResolveForUrlHook()`），优先于 settings / env / OS 探测层
  - 当 WorkBuddy Desktop 注入 PAC RPC 通道时，CLI 会按目标 URL 逐请求反查正确的代理判定（DIRECT / PROXY ...）
  - 独立 CLI / 单测 / headless 场景下 hook 自动跳过，行为退化为原有自治链，保持向后兼容

### 🔧 功能改进

- **HTTP 代理拦截器优化**（#57186）：`HttpProxyInterceptor` / `FetchProxy` 改为基于目标 URL 的 per-request 解析，更贴近浏览器行为

### 🐛 Bug 修复

- **消息队列**：修复 queue 模式下连续发送多条排队消息时，偶发被合并成一次回复的问题。后台辅助任务完成时不再误触发主对话的运行状态结束，确保每条排队消息按顺序独立处理、独立回复
- **快捷键匹配**：修复部分终端快捷键缺少 `super` 修饰字段时，`shift+tab` 等组合键无法正确触发的问题

## [2.111.0] - 2026-06-26

### 🎉 新功能

- **消息排队编辑**：当 Agent 正在响应、用户输入的消息进入排队时，现在可以按 ↑ 方向键把排队中的消息拉回输入框继续编辑。输入框为空时会显示「Press ↑ to edit queued messages」提示。系统注入的排队项（异步通知、频道消息、队友消息等）会保留在队列中继续自动处理，不会被拉进输入框
- **消息队列 queue 模式**：运行中按 `Tab` 可将消息加入队列（queue），等当前回合结束后逐条发送；`Enter` 仍保持实时 steer（即时引导）。按 `Esc` 中断当前回合时，若仅有 queue 消息则回填到输入框供继续编辑。新增 `Option+↑` (`Alt+↑`) 编辑队列消息
- **思考模式切换键调整**：从 `Tab` 迁移到 `Option+T` (`Alt+T`)，避免与 tab-in-queue 冲突；队列展示分为「待发送的引导消息」与「排队消息」两段，提示对应编辑快捷键
- **Channel 自动连接**：新增 `CODEBUDDY_CHANNEL_AUTO_CONNECT` / `CODEBUDDY_WECOM_AUTO_CONNECT` / `CODEBUDDY_WECHAT_AUTO_CONNECT` 环境变量，支持启动时自动连接已配置的企微/微信机器人
- **环境变量实例注册**：通过 `CODEBUDDY_WECOM_BOT_ID` + `CODEBUDDY_WECOM_BOT_SECRET` 配置的企微机器人现在会自动出现在 `/remote-control` 列表中

### 🔧 功能改进

- **模式切换快捷键**：Windows 系统支持 `Shift+Tab` 切换模式（与 macOS/Linux 统一），同时保留 `Alt+M` 作为别名，提示统一显示 "shift+tab to cycle"
- **快捷键自定义**：模式切换改为通过 KeybindingService 处理，支持用户在 keybindings.json 中自定义覆盖
- **后台任务自动清理**：长时间会话中，已终止的后台任务会在通知后自动清理，防止内存持续增长
- **任务面板优化**：任务面板仅展示进行中的任务，已完成的任务不再占用面板空间
- **ACP 工具调用失败处理**：增强工具调用失败信息支持 `failReason` 参数，区分三种失败类型（`tool_not_found` / `deferred_tool_direct_call` / `invalid_tool_input`），让前端能根据失败类型提供更精准的用户提示
- **Auto+Plan 复合权限模式**：Auto 模式下进入 Plan 模式时，Auto 分类器继续生效，退出 Plan 后自动还原为 Auto 模式
- **企微多实例互踢**：收到 disconnected_event 时停止自动重连，确保最后连入的实例保持活跃
- **微信多实例互踢**：通过锁文件机制实现跨进程互斥，新实例连入后旧实例主动让出
- **微信 session timeout 保留凭证**：被踢出后不再清除凭证，用户可手动重连无需重新扫码

### 🐛 Bug 修复

- **会话 AI 标题生成**：修复系统提示、命令包装和短噪声输入场景下标题生成取不到真实用户任务名的问题，提升会话列表标题准确性
- **会话 AI 标题重试**：修复首次标题生成失败后会话永久无标题的问题，改为在生成成功前按用户提交重试，并保持已生成或用户自定义标题稳定不被覆盖
- **任务面板快捷键**：统一用 `x` 键终止任务，并恢复 `j/k` 上下导航，与运行中任务面板的键位约定保持一致
- **Rewind 回退修复**：修复 `/rewind` 回退文件时版本号陈旧导致文件未被正确恢复的问题，以及回退确认页面未显示 Code 回退选项的问题
- **预热进程首次握手**：修复预热进程被激活进入 SDK 多轮对话模式后，首个 initialize 握手偶发卡满约 10s 的问题。修复让 MCP 模块在激活后监听参数与工作目录就绪事件，用真实参数主动完成动态配置初始化，使 initialize 稳定在毫秒级
- **MCP 工具注入**：修复 prewarm 预热进程命中 + serve 模式下，connector-proxy 的非延迟内置工具无法注入 LLM 工具列表、且被误加前缀的问题。修复引入 per-name create 并发去重锁、稳定 proxy 外壳及 config 动态读取
- **QR 扫码面板 ESC 退出**：修复 busy 状态下按 ESC 无法退出的问题，现在可以取消正在进行的认证
- **配置向导输入框值残留**：修复企微机器人配置向导中 Bot ID 被带入 Secret 输入框的问题

### 📝 文档更新

- **版本排查指引**：新增"更新后仍是旧版本"排查方案，覆盖 Homebrew/nvm/残留二进制/shell 缓存等常见场景

## [2.110.0] - 2026-06-25

### 🎉 新功能

- **斜杠命令**：新增 `/simplify`、`/code-review`、`/verify`、`/copy`、`/debug` 五个斜杠命令
  - `/simplify` — 从复用、简化、效率、抽象层次四个角度审查并清理已变更代码
  - `/code-review` — 审查当前 diff 中的正确性 bug 和代码质量问题，支持 `--fix` 自动修复和 `--comment` 发布 PR 评论
  - `/verify` — 验证代码变更是否按预期工作，自动运行测试和构建检查
  - `/copy` — 复制最近一条 AI 回复到系统剪贴板，支持指定第 N 条
  - `/debug` — 启用调试日志并帮助诊断会话问题

### 🔧 功能改进

- **工具名称匹配**：工具名称匹配支持大小写不敏感，当模型返回的工具名称大小写与注册名不一致时（如 Powershell vs PowerShell），工程层自动兜底匹配
- **Windows Git Bash 提示**：在 Windows 平台上，Bash 工具参数描述中追加 Git Bash 语法提示，引导模型使用 POSIX shell 语法（`/dev/null` 而非 `NUL`，`$VAR` 而非 `%VAR%`），非 Windows 平台不注入
- **权限模式**：新增「自动」和「免打扰」权限模式的界面文案
- **模板消息构建**：将专用的 deep-research 消息构建重构为通用的模板驱动机制，支持任意模板名和变量渲染

### 🐛 Bug 修复

- **ACP 对话渲染**：修复模型已返回最终文本但流式正文缺失时，客户端对话完成后没有显示后续内容的问题
- **后台任务通知**：修复 ACP 模式（WorkBuddy / Web UI）下后台任务完成后通知未转发给客户端的问题，现在后台命令执行完毕后模型会正确收到通知并自动展示结果
- **日志完整性**：修复 headless 模式被 SDK 信号终止时缓冲日志丢失的问题，确保 `~/.codebuddy/logs` 在所有退出路径（信号 / EOF / 正常退出）下都能完整落盘
- **MCP 工具 hook 拦截**：修复 PreToolUse hook 对 MCP 工具调用不生效的问题，hook 配置的 deny 规则现在能正确阻止 MCP 工具执行
- **插件 Hook 类型支持**：修复插件 hooks.json 中 prompt/agent/http 类型的 hook 被静默丢弃的问题，现在插件可以正确声明所有 4 种 hook 类型
- **会话 AI 标题生成**：修复首次标题生成失败后会话永久无标题的问题，改为在生成成功前按用户提交重试，并保持已生成或用户自定义标题稳定不被覆盖
- **标题生成提示词**：统一标题生成输出格式，要求仅返回单字段 JSON，并增强防注入与多语言标题约束
- **遥测上报**：修复 WorkBuddy 工具调用续跑时请求链路 ID 被旧状态短路，导致 trace 在工具调用节点后缺失后续模型轮次的问题
- **会话运行状态**：修复队列或团队消息快速接续时，上一轮迟到的结束信号可能误清新一轮运行状态的问题，避免加载状态消失或后续响应卡住
- **画布终端稳定性**：修复画布页面终端切换视图后内容空白的问题，终端状态在视图切换间完整保留

## [2.109.3] - 2026-06-23

### 🎉 新功能

- **Prompt Stop Hook 支持 continueOnBlock**：新增 `continueOnBlock` 配置项，设为 `true` 时 prompt 类型的 Stop hook 在条件不满足时可驱动 Agent 继续循环工作，实现类似 `/goal` 的持续工作效果

### 🐛 Bug 修复

- **登录链接显示优化**：修复登录页面 URL 链接显示时序问题，确保用户在浏览器打开前即可看到可复制的登录链接，避免因 xdg-open 超时或失败导致链接延迟显示
- **Checkpoint 恢复**：修复 revert 到早期 checkpoint 时，v1 版本文件被错误跳过未恢复的问题
- **MCP 配置加载**：修复无头/服务模式下本地 `.mcp.json` 会被错误忽略的问题。现在仅在显式传入 `--strict-mcp-config` 时，才只使用 `--mcp-config` 或 `mcpServers` 指定的 MCP 服务器
- **会话标题恢复**：修复恢复图片类会话后标题被重复提取或停留在占位标题的问题，避免旧标题被异常覆盖
- **MCP 连接幂等性**：修复同一连接代理被并发/重复连接时，因底层传输已启动而被误判为断开、导致已连接服务的工具短暂丢失的问题。重复连接遇到"传输已启动"时按"已连接"幂等处理，不再翻转为断开状态
- **预热进程 CLI 参数丢失**：修复预热（prewarm）进程被 activate 唤醒后，`--model` / `--effort` / `--settings` / `--setting-sources` 等 CLI scope 配置被静默丢弃的问题。现改为订阅配置变更流，activate 重写 argv 后自动重解析刷新，并以串行队列 + 原子赋值消除并发刷新竞态
- **权限模式竞态修复**：修复 Desktop sidecar 模式下两次中间件传递导致 prePlanPermissionMode 被错误覆盖为 Default 的问题，避免只读工具（Read/Glob/Grep 等）在 Expert 场景下触发 WAITING_FOR_PERMISSION 死锁

## [2.109.2] - 2026-06-23

### 🔧 功能改进

- **权限模式提示**：auto mode 提示颜色改为 warning 色，与 don't ask 模式保持一致，更好地提醒用户当前处于高权限模式
- **QIMEI36 埋点公参**：在 WorkBuddy Desktop 启动的 CLI 运行时中透传 QIMEI36，补齐对话、插件状态和企业策略等埋点公共参数

### 🐛 Bug 修复

- **专家团计划模式权限**：修复专家团场景下计划模式权限状态保存逻辑，确保 session 直接以 Plan 模式启动时能正确保存 prePlanPermissionMode
- **Stop Hook**：修复 prompt 类型 Stop hook 在条件不满足时误触发 agent 续跑的问题，现在 agent 会正确停止
- **MCP OAuth 鉴权**：修复部分服务器在令牌交换阶段丢失 `resource` 参数的问题，避免授权成功后仍无法完成登录
- **预热会话内置工具补全**：修复开启进程预热时，部分内置工具（文件呈现、内置浏览器自动化等）在会话中缺失的问题。预热待命阶段不再提前用空配置初始化连接代理，避免污染后续工具索引

## [2.109.1] - 2026-06-21

### 🐛 Bug 修复

- **模型选择**：修复 Compact 压缩及子代理在模型列表匹配失败时错误 fallback 到列表首项的问题，改为信任用户选择并 fallback 到当前主模型
- **模型匹配**：模型可用性检查新增按显示名匹配，解决通过 `--model` 传入显示名时匹配失败的问题
- **渠道来源埋点**：修复 agent-cli 标准埋点和模型埋点缺失 `downloadChannel` 公参的问题，确保渠道包下载数据可按来源归因

### 📝 文档更新

- **CLI 文档归档与翻译**：同步并翻译 23 篇 CLI 文档（含 prewarm 预热进程文档、v2.106.0 至 v2.109.0 共 13 篇 release notes、以及 8 篇已更新文档的增量翻译），更新导航配置

## [2.109.0] - 2026-06-19

### 🎉 新功能

- **auto 权限模式**：新增 auto 权限模式，利用模型智能判断每次工具调用是否需要用户审批，在保证安全的同时提升自动化效率。
- **模型分类器**：引入工具调用分类器，根据操作风险、上下文语义和历史拒绝记录动态决策是否放行。
- **批评器反馈**：新增 critique 机制，对分类决策进行二次校验，降低误放概率。
- **拒绝记录追踪**：记录用户手动拒绝的工具调用，避免 auto 模式在同一会话中重复请求相同操作。
- **系统提示注入**：auto 模式下自动向模型注入权限说明，帮助模型理解当前约束。

### ⚠️ 不兼容变更

- **Hook 权限模式输出**：`HookInput.permission_mode` 现在会输出真实运行时权限模式，可能包含 `plan`、`auto`、`bypassPermissions` 等新增值；此前依赖 `default`、`acceptEdits`、`dontAsk` 三值枚举的用户 hooks 需要更新分支逻辑以处理这些新增值。

## [2.108.2] - 2026-06-18

### 🐛 修复

- **对话积分归属**：修复多轮对话间请求标识复用，导致积分消耗可能串到上一轮消息的问题。

## [2.108.1] - 2026-06-18

### 🐛 修复

- **专家团内容输出显示异常**：修复多智能体协作场景下，流式输出途中相邻片段因消息归组标识漂移，导致"深度思考"内容被拆成多条消息显示的问题；同时修复同一会话因竞态被重复触发并发运行、造成模型流式片段交错的问题。
- **上下文摘要采样参数对齐主对话**：修复 `contextSummary` 摘要请求绕过模型配置拦截器，导致缺失 temperature / reasoning / text / providerData 等采样参数的问题，现摘要请求与主对话使用一致的模型配置。
- **safe-delete 在 fish shell 报语法错误**：修复 fish shell 下空 bootstrap 被拼入命令链导致的语法错误，确保普通 shell 命令和沙箱命令都能正常执行。

## [2.108.0] - 2026-06-18

### 🎉 新功能

- **模型切换提示**：当项目配置已手动设置模型时，用户通过 `/model` 持久切换后会明确提示：重启后项目配置仍会覆盖当前选择，并建议移除项目配置中的模型设置以持久化新选择。

### 🐛 修复

- **请求追踪标识唯一性**：修复多轮对话中多个模型请求复用同一组 `X-Request-ID` 和 `X-Trace-ID` 的问题，确保每个 HTTP 请求都有独立标识，便于排障与链路追踪。
- **自定义 Agent frontmatter 生成**：修复 AI 生成自定义 Agent 配置时，在多行描述或继承全部工具场景下可能写出不可解析或不符合加载约定的 frontmatter 的问题，确保生成结果可被稳定加载。

## [2.107.0] - 2026-06-17

### 🎉 新功能

- **预热进程（prewarm）**：新增 `--prewarm` 模式（默认关闭），进程可先完成启动初始化后待命，通过本地 IPC 在需要时快速唤醒并绑定工作目录；配套提供 `cbc-prewarm`（`list` / `ping` / `status` / `activate`）管理命令，用于加速新会话启动。

### 🔧 改进

- **预热参数入口统一**：预热相关配置统一收口为 `--prewarm` / `--prewarm-id` / `--prewarm-force` CLI 参数，不再支持等价环境变量，降低排障时的配置歧义。
- **工作目录切换缓存刷新**：工作目录改为统一可订阅的变更源，切换目录时会自动重建文件监听并失效项目级缓存，避免设置、记忆、技能、插件和产品配置继续指向旧目录。
- **预热进程发现与接管**：预热进程待命时会登记到会话注册表，`cbc-prewarm list` 能正确发现可用实例；重复使用同一 `prewarmId` 时默认拒绝抢占，显式传入 `--prewarm-force` 后才会终止旧进程并接管。
- **ZIP marketplace 临时文件清理**：ZIP marketplace 安装或更新成功后，会自动清理 `~/.codebuddy/plugins/marketplaces/` 下超过 1 小时的同命名孤儿临时 zip 与解压目录，减少失败下载残留堆积。

### 🐛 修复

- **空闲通知误报**：修复 agent 仍在流式输出或执行工具时，仍每 60 秒误发一次“CodeBuddy is waiting for your input”通知的问题；现在仅在会话真正进入 IDLE 状态时才发送。
- **沙箱权限确认超时语义**：将沙箱命令审批超时从 2 分钟延长至 30 分钟，并在超时后按“用户取消”而非“用户拒绝”处理，同时清理残留审批弹框，减少多步任务被误判中断。
- **apiKeyHelper 误报红字**：修复信任工作区后仍残留 `apiKeyHelper blocked` 红色提示的问题；现在交互式且尚未确认信任时会静默跳过本次执行，待用户完成信任后再正常重新同步。
- **任务编号顺序**：修复同一轮并发创建多个任务时，任务编号可能与创建顺序错位的问题，确保任务列表展示顺序稳定。
- **safe-delete 在 fish shell 报语法错误**：修复 safe-delete 路径恢复逻辑在 fish 等非 POSIX shell 下因拼接空 bootstrap 导致命令执行前直接报语法错误的问题。

## [2.106.7] - 2026-06-16

### 🔧 改进

- **遥测模块维护**：整理遥测相关代码格式，保持发布构建结果稳定，减少后续发版中的无关格式差异。

## [2.106.6] - 2026-06-16

### 🐛 修复

- **命令执行兼容性**：修复在 fish 等非 POSIX 登录 shell 下执行命令失败的问题。现在仅当 `$SHELL` 为 POSIX 兼容 shell 时复用该 shell，否则自动回退到 zsh/bash（兜底 `/bin/sh`），不会影响用户当前的登录 shell。
- **自定义模型工具调用**：修复 Kimi 等模型在流式响应中重复发送 tool call ID 时，工具调用失败的问题。
- **后台任务输出目录**：将任务输出文件写入按用户和工作目录隔离的临时目录，避免共享环境中的默认目录权限冲突导致读取失败。

## [2.106.5] - 2026-06-16

### 🐛 修复

- **--help 模式挂起**：修复执行 `--help` 时因异步初始化阻塞导致进程无法退出的问题，增加 10s 超时保护和 Ctrl+C 中断支持
- **MCP 等待阻塞**：修复 `--help` 模式未被识别为 headless，导致 MCP 服务器启动等待阻塞 help 输出的问题
- **错误恢复提示**：修复工具调用失败后系统提示中工具名列表过时的问题，更新为当前实际工具名
- **主对话结束后状态卡死**：修复交互模式下主任务正常结束后，底部加载状态偶发卡在"等待模型"、ESC 按下无反应的问题。现在主对话结束后的后台辅助调用不会再错误占用主会话的运行状态，加载提示会正常消失。
- **Glob 工具挂起**：修复并行搜索场景下 Glob 工具可能永久挂起、无法返回的问题。重构底层搜索流程的完成判定与超时控制，确保即使命中超大目录也能正常超时返回而不会卡死。
- **多专家协作卡死**：修复多成员协作场景下，最后一个成员完成时主导方可能卡在"思考中"、长时间无输出且无消耗的问题。现在最后一个成员完成的通知会确保送达，触发主导方继续完成汇总。

## [2.106.4] - 2026-06-15

### 🎉 新功能

- **微信支付授权卡片**：新增 host-mediated 微信支付拦截和 ACP elicitation 支付卡片，支持在需要支付确认时通过客户端卡片完成授权或取消流程，并向 SDK 透传用户响应。

### 🔧 改进

- **沙箱平台包**：升级内置沙箱平台包版本，完善发布打包阶段的平台产物归集，提升沙箱运行时分发一致性。
- **微信支付卡片体验**：优化支付卡片终态回传和内置插件联动细节，支付成功、未完成或超时结束时展示更准确。

### 🐛 修复

- **MCP 动态 scope 保留**：修复 MCP validate middleware 匹配范围过宽导致 DYNAMIC scope 被误清理的问题，避免部分 MCP 配置或授权状态异常。

## [2.106.3] - 2026-06-13

### 🐛 修复

- **会话标题重复生成**：修复用户消息为数组形式（如包含图片/多段内容）时，会话标题被重复生成的问题。标题判定逻辑现已正确处理数组消息内容，仅在存在可见文本且非系统提醒时才触发生成。
- **压缩续聊重复注入 user-context**：修复历史压缩后继续对话时，user-context 被重复注入历史的问题，避免上下文冗余。

## [2.106.2] - 2026-06-13

### 🎉 新功能

- **Stop hook prompt 类型支持**：新增 E2E 测试验证 prompt 类型的 Stop hook 生命周期和健壮性

### 🔧 改进

- **Prompt Hook 诊断增强**：改进 prompt hook 执行失败时的日志输出，包含事件名称和具体错误信息，便于排查 Stop hook 不生效问题
- **DeferExecuteTool 图片支持**：MCP 工具返回图片内容时，自动转换为结构化格式传递给下游处理管线

## [2.106.1] - 2026-06-12

### 🐛 修复

- **Delete 键失效**：修复 iTerm2 加载「Natural Text Editing」预设时，外接键盘上的 Forward Delete 键（⌦）按下后无任何反应的问题。该预设把物理 Delete 键映射为 `0x4`（Ctrl-D），原输入框对 Ctrl-D 无差别 return 导致按键被静默吞掉；现按 GNU readline `delete-char` 语义处理，输入非空且光标后还有字符时删除光标后字符，否则保持「双击 Ctrl-D 退出空输入」流程。

## [2.106.0] - 2026-06-12

### 🎉 新功能

- **MCP Apps 交互式 UI 渲染**：支持 MCP server 通过开放标准声明交互式 HTML 工具界面，在 Web UI 的异源沙箱 iframe 中渲染；CLI 解析工具 UI 声明、预取资源 HTML 并经 ACP 透传，终端 TUI 保持文本降级。
- **MCP Apps 双向交互能力**：补齐 host 侧反向通道，支持 UI 写回对话、注入下一轮模型上下文、请求显示模式、资源销毁通知、文件下载，以及经用户授权后的反向工具调用和资源读取。
- **工具延迟加载覆盖**：`--tools` 参数和自定义代理 frontmatter 的 `tools` 字段支持 `Defer(...)` / `NoDefer(...)` 修饰符，可临时调整工具延迟加载状态，并自动补齐 ToolSearch 与 DeferExecuteTool。

### 🔧 改进

- **MCP Apps 渲染位置**：MCP App 交互式 UI 改为常驻在工具卡片下方独立成块，不再折叠在工具调用展开区。
- **MCP Apps 反向调用授权缓存**：用户对同一 server / tool 选择"始终允许"后，本会话内不再重复弹窗；`-y` / 全权限模式下自动放行。
- **MCP Apps 加载提示**：Web UI 历史回放时若需回拉资源 HTML，超过 200ms 才显示 spinner，避免快路径闪烁。
- **MCP Apps 反向调用串行化**：同一 session / server 的反向工具调用在 client 侧排队执行，避免并发请求占满浏览器连接导致审批死锁。
- **MCP Apps 日志通道**：iframe 经 `app.sendLog` 推送的日志按级别镜像到 console，warning 及以上级别同时弹出右下角 toast 并去重。
- **下一轮提示建议**：优化 token 成本，使用轻量模型和精简上下文生成提示建议，替代复用完整对话历史的方式，并支持通过环境变量切回老方式。

### 🐛 修复

- **MCP 工具描述**：修复 MCP 服务器在描述渲染与工具调用之间完成连接时，提示词残留指向已被过滤工具的问题；提示语只附加在仍处于 CONNECTING 状态的服务器上，避免幻觉调用。
- **Team credit 统计重复累计**：修复同一消息多次 usage 更新时重复携带 cost，导致 credit 被重复累加的问题。
- **跨版本升级配置异常**：CLI 启动时向运行环境注入产品版本号，使产品配置缓存按版本命名空间隔离，避免旧版本缓存通过合并 base 污染新版本配置；未注入版本号的旧调用方仍走原 key。
- **subagent / team agent 埋点 rootRequestId 漂移**：修复主 agent 多轮对话中 `rootRequestId` 随每轮 `conversationRequestId` 变化的问题，确保一次对话全链路的 `rootRequestId` 始终一致。
- **Team credit 统计准确性**：修复 Team 相关 credit 统计不准确的问题，确保 stream 节流窗口内 sub-agent 不会篡改主对话 requestId，并修复 detached 模式下 usage 数据未正确转发到主 session 的问题。
- **请求取消错误提示**：优化 400 canceled 错误展示，将请求被取消归类为 cancelled，展示友好的提示信息而非裸 JSON-RPC 结构。
- **MCP Apps 历史恢复**：修复 Web UI 刷新后，历史回放丢失 `mcpUi` 元数据导致交互式界面不再显示的问题。
- **MCP Apps 反向调用授权竞态**：修复反向工具调用时 in-memory session 与反序列化 session 不同导致的 `No active interruption to resolve` 错误，按 toolCallId 兜底匹配队头项。

## [2.105.2] - 2026-06-10

### 🐛 修复

- **CLI 非交互模式启动慢**：修复非交互模式下 CLI 初始化等待 MCP 服务器就绪时，因 SDK MCP 服务器晚到注册触发重扫导致旧 Deferred 被孤儿化、`getConnectedServers` 持续等待至超时（约 30s）的问题；改为基于实时状态变化判断服务器是否已就绪，配置完成后立即返回，同时仍能正确等待晚到的 SDK / ACP 服务器。
- **上下文压缩边界修复**：统一 PreMessage/MaxToken 压缩前的历史边界过滤，保留 compact summary 边界并排除 `/clear`、PTL/media recovery marker，避免重复压缩旧历史或把恢复提示带入下一轮压缩。
- **压缩历史体积优化**：工程压缩摘要中省略编辑工具的 `new_string` 大字段，减少压缩历史里的大段代码载荷。
- **Delete 键删除方向**：修复 macOS Fn+Delete、Linux/Windows 独立 Delete 键以及外接键盘 Delete 键被错误地映射为向前删除的问题。现在 Backspace 删除光标前字符、Delete 删除光标后字符，符合通用编辑器约定；iTerm2 ⌫ 仍按预期向前删除。
- **Plan 模式权限**：修复通过 DeferExecuteTool 代理调用 ExitPlanMode 时绕过审批的问题，确保 plan 模式下的计划审批流程不会被 bypassPermissions 跳过。

## [2.105.1] - 2026-06-10

### 🔧 改进

- **沙箱文件白名单**：支持通过配置追加产品级写入白名单，避免把宿主产品专属目录固化在通用默认配置中。
- **动态工作流审批弹框**：审批弹框在确认前会自动读取脚本元信息（description / phases），TUI 与 Web UI 都会展示阶段列表、token 用量提示和可展开的脚本预览，更好地理解即将执行的工作流。
- **审批选项更直观**：弹框选项简化为 `Yes, run it / View raw script / No`，并在会话内支持"Yes, and don't ask again this session"的免询问范围；选择"View raw script"会就地展开完整脚本，无需离开终端。
- **手机端 Markdown 文件预览**：修复打开 Markdown 文件后无法上下滑动的问题，与代码文件预览体验保持一致。
- **对话框新增模式 / 模型快捷切换**：桌面端在工具栏直接展示当前模式与模型，点击下拉即可切换；移动端 + 号面板顶部新增同样的快捷选择条，无需进入设置页。
- **深度思考开关并入模型下拉**：移除独立按钮，作为模型选择菜单顶部的固定开关；开启时模型 chip 上显示标识图标。
- **权限模式国际化**：默认 / 自动通过编辑 / 规划模式 / 跳过权限确认 等模式名称及描述支持中英文，跟随系统语言切换。
- **顶部标题模型名联动**：切换模型后顶部副标题立即更新，并在所有屏幕尺寸下都可见。
- **挂后台后历史回放体验**：长会话恢复期间不再反复抖动，回放结束自动落到最新消息；用户上滑较远时显示"跳到最新"浮动按钮。
- **历史会话斜杠命令气泡修复**：`/team:cp`、自定义 skill 等斜杠命令在历史回放中不再丢失，正常显示为右侧用户气泡。
- **输入框字号统一**：与正文气泡一致，避免视觉割裂。

### 🐛 修复

- **工作目录添加**：修复通过 `/add-dir` 交互面板选择保存位置（本地/项目/用户）添加工作目录时不写入配置、仅当前会话生效的问题。现在三种保存位置都会正确持久化到对应配置文件，权限面板也会完整展示已保存的工作目录。
- **修复复制的 traceID 实为消息 ID**（#49876）：
  - 修复消息收尾帧、纯文本快速回复等时序场景下 traceId 注入丢失的问题，复制按钮原本会回退显示成消息 ID，导致按 traceID 查询链路查不到结果
  - traceId 在收尾阶段被清空前先做快照兜底，保证一旦捕获即可持续注入，且严格避免跨轮污染（不回退上一轮的链路 ID）

## [2.105.0] - 2026-06-09

### 🎉 新功能

- **Dynamic Workflow（动态编排）**：新增 `Workflow` 工具，支持在单条会话里调度数十个子代理协同跑大型多步任务（深度研究、跨文件重构、批量分析）。脚本走确定性沙箱执行，禁用 `Date.now` / `Math.random` / `new Date()` 等不确定性 API。工具默认走延迟加载（`deferLoading`），仅在用户显式触发或语义检索时激活，不占用默认上下文。
- **Deep Research（深度研究）**：内置深度研究 workflow + `/deep-research` 斜杠命令；用户可一句话发起多角度并行研究，进度由后台任务通知统一回流。
- **UltraCode 长程思考**：在用户输入或会话元信息出现 `ultracode` 关键词时自动注入提醒上下文，引导模型进入更深思考；可通过 `/effort` 命令切换 effort 等级。
- **`/workflows` 工作台**：TUI 新增 Workflows 面板，查看活跃 / 历史 run、保存自定义脚本、一键 resume。
- **`/save-workflow` 命令**：把当前内联脚本保存为命名 workflow（用户级或项目级），后续可通过 `name` 引用。
- **后台任务统一通道**：Workflow 与 Bash `run_in_background`、PowerShell 后台任务复用同一 `<task-notification>` 通道，模型用 `TaskOutput` 工具拉取完整结果。
- **Workflow 暂停 / 恢复**：Workflow 运行支持暂停（pause）与重启（restart），可在长任务中安全中断与续跑。
- **Workflow 详情面板增强**：Workflows 面板支持查看运行中工作流的实时状态、Agent 子任务列表与暂停 / 恢复操作。
- **会话标题事件**：stream-json 输出新增 AI 生成标题事件，便于上层客户端同步展示会话标题。
- **禁用内置模型开关**：新增 `CODEBUDDY_DISABLE_BUILTIN_MODELS` 环境变量，置为 `1` / `true` 时剥离打包内置的静态模型列表，`/model` 列表只保留云端接口模型、`models.json` 自定义模型与 `ACC_PRODUCT_CONFIG_V3` 注入的模型。

### 🔧 改进

- **Tool Search 增强**：扩展工具发现能力，配合延迟加载工具（含 Workflow）按需激活。
- **TaskOutput 工具增强**：支持后台任务输出文件管理与流式拉取。
- **WebFetch 工具优化**：调整重定向与缓存语义。
- **Tasks 面板**：新增任务详情面板与列表面板，组织展示更清晰。
- **Workflow 总开关**：环境变量 `CODEBUDDY_DISABLE_WORKFLOWS=1` 或 settings.json `disableWorkflows: true` 任一为真即关闭 Workflow 全套能力（工具、关键词拦截、effort 切换）。
- **内置 workflow 资源外置**：内置 workflow 脚本统一迁移到 `builtin/workflows/` 目录，新增内置 workflow 仅需丢入文件即可被自动发现，无需改代码。
- **Workflow 持久化扩展**：journal / durability 增补字段以支持暂停状态与 Agent 派生信息的恢复。
- **权限保存位置文案**：统一权限规则保存位置的描述文案为 `Saved in <path>`，修正此前 `Saved in at` / `Checked in at` 风格不一致的问题。

### 🐛 修复

- **/add-dir 目录联想**：修复输入 `/add-dir ` 加空格（尚未输入路径）时误触发目录选择器、回车被当作选中首个目录并直接发送的问题；现在参数为空时不再列举目录，行为与预期一致。
- **专享版模型列表为空 / 不对**：修复 custom-token 登录时，若 JWT `iss` 为 Keycloak realm 形式（末段不含 `sso-` 前缀）导致 `enterpriseId` 解析失败、`/model` 列表退化为内置默认模型的问题。现在 `enterpriseId` 优先读取配置显式提供的 `authentication.attributes.enterpriseId`，再回退到 JWT 解析。
- **CLI loading 异常消失**：修复使用子代理调研类对话时主会话 loading 状态被子代理拖到 idle 导致 loading 突然消失、但对话仍在继续输出的问题；主会话的运行状态现在只由自身状态机推进，子代理仅通过 phase 通道驱动 loading 显示。

## [2.103.4] - 2026-06-08

### 🔧 改进

- **帮助优化模型开关**：新增 `enableModelOptimization` 全局设置项，model-provider 根据该配置注入 `X-Private-Data` 请求头；自定义模型不发送该请求头。

## [2.103.3] - 2026-06-08

### 🐛 修复

- **自定义模型认证错误识别**：自定义模型 API key 失效（401/403）不再被误判为平台登录失效，避免出现"重新登录"弹窗中断会话
- **会话历史重放孤儿工具调用**：会话被中断（如强退、崩溃）后再打开，模型未收尾的工具调用此前会被跳过并替换为一段中文提示文本，导致工具卡片消失且无法本地化。现在改为照常重放该工具调用，并标记为「已取消」状态；对于重放时仍存活的待答问题不再被误判为孤儿调用，保留正常 pending 状态
- **回滚 OTel metrics 修复**：回滚此前为修复 metrics 上报丢失而提交的改动，恢复回滚前的 OTel 行为，避免主线回归

## [2.103.2] - 2026-06-07

### 🔧 改进

- **计划模式可见性收敛**：子代理仅在显式锁定 plan 模式时才可见 `ExitPlanMode` 工具，纯继承主会话 plan 模式的子代理不再误调用，避免污染主会话的审批弹窗。
- **新增 `CODEBUDDY_DISABLE_PLAN_MODE` 环境变量**：宿主可一键关闭 plan 模式（隐藏 `EnterPlanMode` / `ExitPlanMode`），适配无审批弹窗渲染位的嵌入式场景。
- **Stats 模型展示名优化**：模型聚合 key 切换为稳定的请求模型 id，并展示用户在配置中设定的模型展示名（兼容旧 session 数据自动 fallback），覆盖 Web UI 与 TUI 的「Favorite model」、模型排行、Token 趋势图例。
- **上下文压缩开关兼容**：优化 pre-message 压缩开关兼容逻辑，新开关显式关闭时不再被旧配置误启用。

### 🐛 修复

- **上下文压缩恢复稳定性**：修复 `/compact` 与自动压缩在超长上下文、待审批和图片结果场景下的恢复稳定性，降低压缩失败后请求直接中断的概率。
- **伽利略 metrics 上报丢失**：修复因 `@opentelemetry/api` 多实例导致 MeterProvider 注册失败的问题，CLI 打包产物中 webpack bundle 内嵌了一份 OTel API，与运行时 galileo-node-sdk 加载的另一份版本不一致，OTel 的 registerGlobal 精确比对 VERSION 失败，metrics 全部丢失为 NoopMeterProvider。

## [2.103.1] - 2026-06-04

### 🔧 改进

- **模型计费系数更新**：按最新计费策略调整 cli-saas 各部署形态下的默认模型、推理模型、图像模型及多个第三方模型的计费系数。
- **WorkBuddy 助理对话标识**：当环境变量 `PERSONAL_AGENT_ROLE` 存在时，ChatCompletion 请求的 `X-Agent-Purpose` 头自动设置为 `person_agent`，便于服务端识别来自 WorkBuddy 助理（orchestrator/specialist）的对话。
- **遥测 flush 配置可调**：新增 `galileo.aggregatorFlushIntervalSec` 配置项（默认 60 秒，范围 [5, 600]），短对话占比高的场景可调低到 10-20 秒。
- **hook session_id 统一**：新增 `resolveHookSessionId` 工具函数，`SessionHookManager` / `ToolHookManager` 全部 hook payload 切换到该工具，统一父子 session 解析路径。
- **故障排查文档补充**：新增"更新不到最新版"小节，说明在 npm 镜像缓存延迟场景下，可通过 `--registry=https://registry.npmjs.org/` 指定官方源重试。

### 🐛 修复

- **进程退出前丢失监控数据**：放量后 WorkBuddy/IDE 集成场景下，短对话（< 60s 退出）的子进程会随 `process.exit()` 丢弃 aggregator 当前窗口 + OTel BatchProcessor buffer 中的监控数据。新增 `flushTelemetryBeforeExit()` helper 在 8 个进程退出关键点统一 flush metrics + trace + log 三类 buffer，并将 telemetry flush 提到 cleanup 队列最前面以抢占 2s 预算。
- **遥测 namespace 修正**：修复 Desktop sidecar 进程上报遥测时 namespace 始终为 Production 的问题。改为读取专用环境变量 `WORKBUDDY_NODE_ENV`，按真实运行环境动态判定 Production/Development，避免开发期数据混入正式监控库。
- **snappy 原生模块打包**：新增 galileo-node-sdk 和 galileo-semantic-conventions 显式依赖，使 rspack 打包时 snappy 原生 `.node` 模块可被正确排除。
- **历史压缩边界误识别**：修复对话中包含 HTML 折叠块（`<details><summary>...</summary>...</details>`）时，消息会被错误判定为历史压缩边界、进而被排除出真实用户输入的问题。仅保留更明确的边界标记，避免对常见 HTML 标签的通配匹配。
- **后台任务通知日志清理**：移除后台命令完成通知中遗留的临时排查日志（参数 dump / 历史快照 dump），降低日志噪音并避免敏感字段被打到日志。
- **IOA endpoint 漂移防御**：`ProductManager` 在并发刷新场景下可能短暂暴露错误的 endpoint，导致 IOA 用户的模型请求落到公共云域名（`codebuddy.ai`）。内部改为事务化更新避免中间态被读取；`ModelProvider` 增加二道防线 —— 当 `CODEBUDDY_INTERNET_ENVIRONMENT=ioa` 但解析后的 `baseURL` 落到公共云域名时打 warn。
- **sub-agent hook `session_id` 行为对齐**：在 sub-agent 内触发的 hook，其 `session_id` 现指向**主 agent** 的 session id，sub-agent 自身 id 通过 `agent_id` 字段单独暴露。修复前 sub-agent 的 hook 会把自己的 session id 当成主 session 上报，导致下游审计/统计无法跨主 session 聚合。
- **MCP 禁用持久化**：修复 IDE 插件提供的 MCP 服务通过 `/mcp` 禁用后，重启再次出现的问题。禁用状态现已持久化到本地配置，重启后保持禁用。

### 📝 文档

- **CLI 文档归档**：补全 v2.100.0 ~ v2.103.0 共 6 个版本发布说明的英文翻译，更新中英文导航栏；同步更新 env-vars / http-api / troubleshooting / release-notes 索引等文档的中英文版本。

## [2.103.0] - 2026-06-04

### 🎉 新功能

- **DeepSeek V4 模型支持**：新增 DeepSeek V4 Pro 和 Flash 两个推理模型，支持 1M 上下文窗口、工具调用和图片理解。
- **Doctor 诊断面板增强**：新增 Session ID、Trace ID、Request ID 展示，方便问题定位。

### 🔧 改进

- **messageErrorCode 对齐**：新版本 CLI 的 chat 遥测事件中 `messageErrorCode` 与旧版数据口径对齐，使用 10 级优先链映射原始错误到 CBC 业务错误码。
- **调试环境变量标准化**：统一使用 `CODEBUDDY_DEBUG` / `CODEBUDDY_DEBUG_SDK` 替代旧的 `DEBUG` / `DEBUG_SDK`。
- **Trace ID 持久化**：新增 `lastConversationTraceId` 字段，确保诊断面板在会话跨回合后仍可展示最近的 Trace ID。
- **模型切换配置**：每个模型独立声明 `relatedModels.lite` / `relatedModels.reasoning`，移除已无法覆盖新模型场景的 `defaultRelatedModels` 全局兜底,确保各模型在 lite / reasoning 切换时的目标模型符合预期。
- **沙箱审批超时可配置**：新增 `CBC_SANDBOX_APPROVAL_TIMEOUT_MS` 环境变量，便于测试和调试时自定义沙箱权限拦截等待超时时长（默认 120000ms）。

### 🐛 修复

- **沙箱超时弹窗未消失**：修复沙箱权限拦截等待超时自动拒绝后，Desktop / Web UI 弹窗未同步消失的问题。现在超时拒绝时会广播 `permissionResolved` 事件，前端收到后正确清除弹窗状态。
- **遥测请求 ID 一致性**：简化对话请求 ID 的处理逻辑，统一其生成来源，移除冗余的兜底分支，避免影响上报数据的一致性。
- **思考强度同步性能问题**：修复客户端开会话后渲染层与 CLI 之间形成 ACP 反馈环，导致 `session/set_config_option` 在 1.4 秒内被反复调用 200+ 次、单会话日志爆量到数百 MB 的性能问题。在事件源头按 `(配置项, 值)` 维度去重相邻同值广播,避免任何客户端（含未做幂等去重的旧版本）触发重复推送。
- **ACP 鉴权恢复**：优化 ACP 掉授权后的异常上报与恢复提示，避免客户端收到不完整错误状态。
- **Compact 边界消息 replay**：修复 compact 后重启 session 时，边界消息 replay 异常导致前端缺失 compact 分割线、history 误改父子链的问题。compact 边界消息现在会下发带 meta 标记的 `agent_message_chunk` 让前端正确渲染 divider；history 重建仅对可恢复的 compact 消息执行修正，避免对纯边界 user message 误改父链。
- **路径超链接识别**：在 markdown 输出中主动给 POSIX 路径包 OSC 8 超链接，避免 VS Code / iTerm2 等终端在中英文混排场景把前缀汉字当成 URL 的一部分（例如「根因: /data/foo」误识别为「因: /data/foo」）。Cmd / Ctrl+Click 现在能精确跳到目标文件，并支持 `:line[:col]` 锚点。
- **Backspace 键兼容**：在 iTerm2 / VS Code 内置终端等会把 ⌫ 发送为 `\x7f` 的环境下，按 Backspace 现在能正常向前删除字符，不再走「向后删除」分支。

## [2.102.0] - 2026-06-03

### 🎉 新功能

- **后台任务完成主动推送**：`run_in_background` 的 bash / powershell 任务完成、失败或被终止时，会自动以 `<task-notification>` 形式注入对话流，模型在下一轮即可感知，无需再循环调用 `TaskOutput` / `BashOutput` 轮询。

### 🔧 改进

- **后台任务工具描述同步刷新**：bash / powershell 工具说明明确告知"完成会自动收到通知，不要 sleep/poll loop"，引导模型避免无意义的轮询占用 turn。
- **网页获取体积限制**：远端 API 请求限制最大返回长度为 100K 字符，超过 15K 字符的内容自动触发 AI 摘要处理，降低上下文占用。
- **网页获取并发竞争策略**：重构 `fetchWithFallback` 方法，由串行改为并发竞争模式 —— 本地 fetch（30s 超时）与远端 API fetch 并发启动，远端在 20s 内成功返回则采用其结果并取消本地请求；远端超时或失败时直接降级到已并发启动的本地 fetch。最坏总耗时从 `20s + 30s` 串行降为 `max(20s, 本地实际耗时)`。
- **网页获取缓存机制**：fetch 结果缓存 15 分钟，命中缓存直接复用跳过网络请求。
- **网页获取可观测性增强**：通过 `GalileoService` 上报 `webfetch.complete` / `webfetch.failed` 结构化事件，attribute 包含 source（cache / api / local）、needsSummary、apiStatus / apiContentLength / apiDurationMs、localStatus / localContentLength / localDurationMs、urlHost / urlPath（去除 querystring/hash）、totalDurationMs 等，失败上报到 logError 便于日志告警。
- **subagent 埋点补全**：chat_message_send、chat_message_response、chat_tool_action 事件新增 `parentConversationId` 字段，与 chat_request_send 保持一致，支持 subagent / team 调用链路追踪。
- **chat_message_status 关联字段补全**：新增 `rootRequestId`、`parentConversationId`、`agentName`、`agentType` 字段，与其他事件对齐。
- **辅助功能埋点过滤**：prompt_suggestion、conversation_topic、context_compact 等辅助功能不再上报 chat_message_send / response，避免噪声。
- **traceId 全链路打通**：ACP agent 生成 traceId 贯穿 Galileo session / tool 上报，便于端到端追踪单次对话请求。
- **Tool 三件套日志**：新增 Tool start / success / error 独立上报 hook，支持工具维度的耗时与异常分析。
- **uid resource attribute**：trace 资源属性中注入用户 ID，提升多用户环境下的日志关联能力。

### 🐛 修复

- **macOS 锁屏 / App Nap 唤醒后消息丢失**：长时间锁屏唤醒后，微信长轮询和企业微信群机器人长连接因系统冻结网络栈出现卡死或僵死连接，导致用户感知"消息丢了"。新增长连接活性看门狗，解冻瞬间自动 abort 卡死请求 / 重建 WebSocket，恢复正常收发；daemon 心跳与唤醒检测定时器同步去除 unref，避免被系统冻结后无法恢复。
- **权限确认框点击后弹框不消失**：在 IDE 集成场景下，TUI 弹出工具权限确认框，按数字键 / 回车批准后弹框停留不关闭、需 ESC 才能关，但任务实际已开始执行。原因是 approve 路径先 await IDE closeTab RPC、再清空 pending$，IDE 慢响应或断连时 await 阻塞导致弹框无法及时关闭；现已调整为先同步关闭弹框再 fire-and-forget 触发 IDE 端清理，恢复点击即关的预期行为。同时移除 `useToolApprovalNavigation` 中针对 `AskUserQuestion` 的 `setImmediate` 包裹（`setAsk` 本身同步），避免 bypassPermissions 模式下 pending$ 二次 next 引发 effect 重入、`AskPanel` 永不挂载的竞态。
- **企业策略导致创建任务超时**：暂时关闭 CLI 端的企业自定义模型策略与企业技能上传策略，修复其导致的创建任务超时问题。
- **模型思考强度切换异常**：修复切换到非思考模型后仍可能携带上一轮思考强度的问题，并过滤非法思考强度配置，避免错误值进入最终请求。
- **team agent respawn 关联字段丢失**：respawn 时恢复 `rootRequestId` 和 `parentConversationId`，修复 `.meta.json` 缺失导致关联字段丢失的问题。
- **EditTool 创建新文件死循环**：`old_string=''` 且目标文件不存在时跳过 `hasBeenRead` 校验，让 Edit 工具能像 Write 一样创建新文件。修复此前"Edit 报先 Read，Read 又报文件不存在"的死循环。
- **EditTool 错误信息附带 file_path**：`Edit error` / "File has not been read yet" / "File has been modified since read" 等错误消息现已带上具体文件绝对路径，并行多文件 Edit 失败时模型 / 用户能直接定位是哪个文件出问题，无需再翻 tool_call args。

### 📝 文档更新

- **故障排查文档新增"权限确认框无响应"章节**：在 troubleshooting 中列出 `[Approve]` / `[Reject]` / `[dequeue]` / `[tool-permission]` 关键日志 TAG 与"现象 → 推断"对照表，便于复现 / 定位同类弹框卡死问题。

## [2.101.0] - 2026-06-02

### 🎉 新功能

- **Trace 错误/取消可观测性**：trace 列表新增 `errorCount` / `firstErrorMessage` / `firstErrorWhere` 预览字段，详情页新增按工具/agent 分组的错误总览面板，可一键跳转到首个错误 span。Web UI 顶部新增状态过滤 tab（全部 / 错误 / 运行中 / 已取消 / 成功），列表行错误高亮、Timeline 视图支持「仅错误」筛选，错误信息支持一键复制。

### 🐛 修复

- **X-Agent-Intent 请求头**：修复 ask 模式下上报为 craft 的问题，现从 session 元数据正确读取实际模式。
- **Trace 拒绝场景 UI 显示空白**：模型在 `finish_reason=tool_calls` 时即结束 trace，远早于用户点击拒绝；导致拒绝路径产生的 cancelled span 无处落盘，trace 页面看不到任何节点。新增 `flushSession` / `recordCancelledToolSpan` 能力，支持三级 fallback（活跃 trace / 已落盘 trace 原子重写）确保 cancelled span 完整持久化。结构化分类按真实拒绝来源（默认拒绝 / 权限拒绝 / 计划拒绝 / 询问取消）写入 `cancel_reason`，trace UI 可据此分组过滤。
- **同步子 agent 执行时 spinner 异常隐藏**：sub-agent 状态镜像失败时主 session 卡在 idle，但 TaskManager 中仍有运行中任务。loading-box 现以仍在运行的同步任务作为 spinner 兜底依据，与主 session run state 解耦。
- **拒绝工具调用后协议提示词原样渲染**：识别后端写入 result 的协议级文本（用户拒绝工具调用 / 拒绝退出计划模式两种变体），UI 上替换为简短中文标识，避免奇怪的英文提示泄露给用户。
- **取消 span 视觉区分**：详情面板将 `status='cancelled'` 的 span 错误信息用中性灰色 banner 展示（而非红色错误样式），避免取消看起来像真实失败。

## [2.100.2] - 2026-06-01

### 🐛 修复

- **Daemon 模式 ACP 稳定性**：修复浏览器刷新或关闭后 stale 连接导致 `session/prompt` 30s 超时的问题。单连接广播新增 2s 兜底超时，超时静默失败保证主流程不被阻塞。
- **连接配额与 evict 策略优化**：默认连接数从 5 提升至 32；引入活跃度 grace period 和智能 evict（优先回收死连接 / 无 in-flight 任务的最久空闲连接，必要时拒绝 evict 让请求方走 503 退避），避免多 tab 与 sidecar 共存时的 evict 风暴。
- **Daemon 启动参数继承**：`daemon restart` 与自动重启会还原首次启动时的 CLI 参数（如自定义模型、`-y` 权限模式），不再回退默认值。
- **Webhook 首条消息无响应**：daemon 启动后主动预热主 session，避免 webhook 首条消息因无主 session 体感"消息没反应"。
- **子代理 / Teammate 调用 ExitPlanMode 卡死父进程**：sub-agent 直接拒绝并返回明确错误信息；teammate 走团队消息盒投递审批请求给 team-lead，调用方立即返回，避免父 spinner 永挂。
- **Headless 终端噪音抑制**：headless 终端构造时关闭 xterm 日志输出，避免 PTY chunk、ANSI 序列时的 `Parsing error` 污染 TUI。

## [2.100.1] - 2026-05-30

### 🐛 修复

- **回退网页获取并发竞争策略**：回退 v2.100.0 引入的 WebFetch 并发竞争、缓存及可观测性改动，恢复为稳定的串行获取方式，修复因并发竞争策略导致的部分场景下网页获取异常问题。

## [2.100.0] - 2026-05-30

### 🎉 新功能

- **WaitForMcpServers 工具**：新增内置工具，允许模型主动等待正在连接中的 MCP 服务器就绪。当 MCP 服务器尚未完成连接时，可调用此工具等待（最多 5 秒），服务器连接成功后其工具将自动注入工具列表。支持等待指定服务器或全部待连接服务器，返回各服务器的连接状态（已连接/失败/需认证/已禁用/未知）。
- **安全审查内容剔除**：当模型因安全审查终止本次回答时，本轮已产生的回答与思考内容将从有效会话中剔除，不再回传给后续请求，避免污染上下文；会话历史中以一条安全审查提示占位，重放与展示保持一致。

### 🔧 功能改进

- **ToolSearch 连接提示**：当 MCP 服务器配置存在但尚未连接时，ToolSearch 描述中会显示"This server is still connecting. Call WaitForMcpServers to wait for it."提示，引导模型调用等待工具。
- **网页获取体积限制**：远端 API 请求限制最大返回长度为 100K 字符，超过 15K 字符的内容自动触发 AI 摘要处理，降低上下文占用。
- **网页获取并发竞争策略**：重构 `fetchWithFallback` 方法，由串行改为并发竞争模式：
  1. **同时发起**：本地 fetch（30s 超时）与远端 API fetch 并发启动
  2. **远端优先**：远端 API 在 20s 内返回成功则采用其结果（已转 markdown，质量更高），同时通过 `AbortSignal` 取消正在进行的本地 fetch
  3. **自动降级**：远端超时（20s）或失败时，直接 `await` 已并发启动的本地 fetch 结果
  4. **超时由内层各自负责**：远端 20s、本地 30s 各有内部 deadline，整体最坏耗时由本地兜底（≈30s），无需外层叠加超时
  消除了原先"远端失败后才启动本地 fetch"的串行延迟，最坏情况总耗时从 `20s + 30s` 降为 `max(20s, 本地实际耗时)`。
- **网页获取缓存**：fetch 结果缓存 15 分钟，命中缓存时直接复用，跳过网络请求。
- **网页获取可观测性**：通过 `GalileoService` 上报 `webfetch.complete` / `webfetch.failed` 结构化事件，attribute 包含 `source`、`needsSummary`、`fromCache`、`apiStatus` / `apiContentLength` / `apiDurationMs` / `apiErrorReason`、`localStatus` / `localContentLength` / `localDurationMs`、`contentLength` / `rawContentLength`、`urlHost` / `urlPath`、`totalDurationMs`，失败时上报到 `logError`，便于后台直接基于日志级别配告警。
- **Bash 沙盒审批模块化**：将沙盒审批弹窗的内部编排逻辑抽离到独立模块，按 SafetyFilter 直通、Bypass 自动放行、UI 上抛三阶段拆分清晰，便于后续扩展与单测覆盖。对外行为完全保持不变（包括敏感命令的人类可读说明、120 秒超时降级、跨子会话回溯主会话等）。
- **Bash 上下文环境变量透传**：Bash 工具子进程现在会自动透传 `$CODEBUDDY_PROJECT_DIR` / `$CODEBUDDY_SESSION_ID`（以及对应的别名），方便 skill 与用户脚本读取项目上下文，与 hook 环境保持一致。
- **IOA 模型更新**：新增两款长上下文基础模型，下线 6 款旧版模型，并升级默认推理模型版本。

### 🐛 修复

- **AskUserQuestion 工具确认框**：修复偶发的工具调用永久挂起问题。新增超时兜底（默认 10 分钟）和单 waiter 路由兜底，避免 UI 消息丢失或路由分裂场景下用户回答后工具不返回。
- **审批弹框队头切换**：修复连续两次审批弹框时第一次的回车按键被新弹框误吃导致"自动通过/拒绝"的问题。新弹框 mount 后引入 80ms 焦点 grace period，期间不消费按键。
- **ExitPlanMode 误批准**：修复 plan 内容尚未加载完成（界面显示 "Loading plan..."）时用户回车会误批准未阅读 plan 的问题。panel 层在 plan 内容就绪前禁止聚焦。
- **缓存命中率统计**：修复使用 GLM、DeepSeek 等 OpenAI 兼容协议时缓存命中率被统计为 0 的问题，缓存读取/写入 token 现可在所有支持的协议下正确上报。
- **内网环境鉴权**：修复在 IOA / 内网环境切换时，API Key 偶发出现鉴权失败（401）的问题；同时优化此类错误的提示，能够区分"内置模型请求路由异常"与"自定义模型密钥配置错误"，给出更准确的排查建议。
- **MCP 工具图片识别**：修复部分 MCP 工具（如截图类工具）返回的图片无法被模型识别、只收到一段文本的问题，模型现在能够正常"看到"工具返回的图片。

### 📝 文档

- **CLI 文档归档**：完成 v2.99.1 release notes 中英文同步，env-vars.md 增量翻译同步至英文版（新增 `CODEBUDDY_WAIT_FOR_MCP_SERVERS_ENABLED` 环境变量条目），导航三版本（cliConfig / cliConfigCN / cliConfigZh）同步更新。

## [2.99.1] - 2026-05-28

### 🔧 功能改进

- **OTel Span Schema**：新增 `otel-span-schema.ts` 作为 span 名称、属性键、事件名的单一真相源，确保实现与文档一致
- **细粒度日志开关**：支持 `OTEL_LOG_USER_PROMPTS`、`OTEL_LOG_TOOL_DETAILS`、`OTEL_LOG_TOOL_CONTENT`、`OTEL_LOG_RAW_API_BODIES` 环境变量控制敏感数据记录
- **Tool Span 增强**：Pre/Post Hook 支持按开关记录工具输入参数和输出内容，带 60KB 截断保护
- **Trace 可视化**：Web UI TracesView 新增 LLM 调用统计、Cache 命中率、多模型展示等指标
- **Galileo 监控 hook 解耦**：将 tool 打点逻辑从 trace hook 中拆分为独立的 GalileoToolPreHook / GalileoToolPostHook，职责单一
- **Agent SLA 全指标补齐 model 维度**：ttfb / streaming / task_total / prompt_build / tool / request / cache 全链路带 model
- **新增 agent_name / agent_purpose / conversation_request_id 维度**：支持按 agent 类型、场景、请求链路聚合分析
- **patchName 全局注入**：所有 Galileo 上报自动携带产品 patch 标识
- **product.json galileo 开关**：三端（主进程 / Renderer / CLI）统一受 galileo.enable 控制
- **稳定 ACP 会话所有权**：完善 ACP 团队桥接、会话回放与消息 ID 工具的边界处理，避免会话/消息归属错位导致的渲染抖动
- **会话状态机健壮性**：会话运行状态机移除冗余状态切换，状态推进更稳定
- **Skill 工具描述格式优化**：将 skill 列表从 XML 标签格式改为 Markdown 列表格式，减少 token 占用
- **Skill 描述截断阈值调整**：单条 skill 描述上限从 250 字符降至 150 字符
- **Skill 执行结果优化**：移除工具返回内容中无意义的 `<command-message>/<command-name>/<command-args>` 标签注入
- **工具搜索**：优化延迟工具列表的提示内容体积，减少大型 MCP 工具集合对上下文的占用
- **帮助面板**：移除红包封面推广链接

### 🐛 修复

- **延迟工具加载**：修复裸名 MCP 工具通过工具搜索加载后无法正确调用的问题，确保云服务连接等工具可按预期执行
- **自定义模型移除 extra_vars 透传**：避免把成长计划等内部上报字段透传给客户网关，仅在非自定义模型时合并 providerData
- **权限错误提示**：修改无权限文件失败时，保留更具体的工具错误详情，减少泛化报错造成的排查成本
- **会话压缩**：修复 `/clear` 后工程压缩仍可能带入旧会话内容的问题，将 session separator 纳入压缩边界识别
- **修复 galileo 字段大小写**：product.json 中统一为小写 `galileo`

### 📝 文档

- 更新 monitoring.md，补充完整的环境变量和 span 属性参考
- 完成 v2.99.0 release notes 中英文同步

## [2.99.0] - 2026-05-27

### 🎉 新功能

- **新增 `/goal` 斜杠命令**：用于让 CodeBuddy Code 持续工作直到达成某个条件。`/goal all tests pass` 会让模型在每次想停下时自检条件是否达成，未达成自动继续工作；`/goal` 不带参数显示当前目标，`/goal clear` 提前结束。三态评估语义：达成（停止并提示 `Goal achieved`）、未达成（继续工作）、不可达成（停止并提示 `Goal could not be achieved`，避免无效循环）。会话恢复时目标自动重新装载。Web UI 支持目标进度条、状态条和终态浮层。 #43052
- **Credit 实际消耗推送**：在标准 ACP `usage_update` 上附加 `usage` 明细（含 `credit` 字段），并通过 `_meta['codebuddy.ai/conversationRequestId']` 透传当前轮次的 requestId，支持上层按轮次累计与展示已消耗 Credit。 #43043
- **Gemini-3.5-Flash 模型**：新增 Gemini-3.5-Flash 模型支持，百万 token 上下文，推理能力均衡，适合日常使用。 #44104

### 🐛 修复

- **安全修复（RCE）**：修复 `apiKeyHelper` 配置在目录信任对话框弹出之前被执行的 0-click 远程代码执行漏洞。当项目作用域中配置了 `apiKeyHelper` 时，必须等待目录信任完成后才会执行。 #43906
- **Hook Input agent_type**：当通过 settings.json 或 --agent 指定非默认 agent 时，hook input 中的 agent_type 现在正确反映配置的 agent 名称。 #44183
- **Hook Input agent_transcript_path**：SubagentStop 事件中的 agent_transcript_path 现在正确指向 subagent 的持久化文件路径。 #44183
- **Plan Mode 权限恢复**：修复 ExitPlanMode 工具在 session 已不在 Plan Mode 时，仍错误降级 permission mode 导致 Read 等工具卡住授权的问题。 #43664
- **团队任务停止可靠性**：修复团队任务在成员刚启动时点击停止偶发无法真正中止的问题；修复某些团队成员被强制结束后仍被同步状态判断为运行中的问题。 #43635
- **插件热监控无限循环**：修复 PluginsProductProvider 中 `onDidChange → sync → onDidChange` 的无限循环问题；移除已废弃的 plugins 目录监控逻辑。 #44212
- **多行输入方向键修复**：修复后台任务运行时，使用 Ctrl+J 进行多行输入后，按方向下键被快捷键拦截的问题。 #44231
- **自定义模型 tool call**：新增 `SkipToolCallSupportCheck` 产品特性开关，cli-saas 专享版启用后不再移除请求体中的 tools/tool_choice 字段。 #44255

### 📝 文档

- 新增 `/goal` 命令文档、导航增加"自动化"分类
- 完成 v2.98.0/v2.98.1 release notes 中英文同步

## [2.98.1] - 2026-05-25

### 🐛 修复

- **重发 v2.98.0 失败的发版流水线**：v2.98.0 因 agent-cli publish 流水线 OOM 未能成功发布到 npm，本次以 v2.98.1 补发，内容与 v2.98.0 完全等价，请直接升级到 v2.98.1。 #43079
- **CI：修复 agent-cli publish 流水线 OOM**：调高 `yarn build` 阶段 Node 堆内存上限（`NODE_OPTIONS=--max-old-space-size=8192`），解决正式发版流水线在打包阶段被 OOM Killer 终止的问题。 #43079

## [2.98.0] - 2026-05-24

### 🎉 新功能

- **OpenTelemetry 自定义上报（traces）**：支持通过 OTel 标准环境变量将内部 traces 上报到自有 Collector。启用开关 `CODEBUDDY_CODE_ENABLE_TELEMETRY=1`，支持 `OTEL_EXPORTER_OTLP_ENDPOINT` / `OTEL_EXPORTER_OTLP_HEADERS` / `OTEL_SERVICE_NAME` 等标准变量。详见 `docs/monitoring.md`。 #41061
- **沙箱生态资产目录白名单**：沙箱安全策略默认允许 WorkBuddy 生态资产目录和跨平台技能目录写入，减少插件、技能与连接器的访问受限问题。 #42876

### 🔧 功能改进

- **自动压缩窗口提升**：未配置 `maxInputTokens` 的模型，默认 auto-compact 窗口从 100k 提升到 200k token，clamp 范围 `[100k, 1M]` 保持不变。
- **Hooks 注入 agent_id / agent_type**：所有 hook 事件 payload 补齐触发源标识，方便用户在全局 hook 里区分主会话与子 agent。 #42872
- **Hook 去重精细化**：解决"同事件触发两次"问题。新增 `sourceId` 维度参与 dedupe key 计算；settings 跨 scope 同一 command 折叠成一份，不同插件 / 子 agent scope 各自保留一份。 #42872
- **多源 hook 命中可观测**：同一事件命中 ≥ 2 条不同 hook 时，日志列出所有命中命令，方便自查冲突。
- **CLI 文档补齐**：新增 `monitoring.md` 与 `codebuddy-dir.md`，完成 v2.96.1 ~ v2.97.5 共 7 个版本 release notes 的中英文同步与导航更新。

### 🐛 修复

- **后台 Bash 僵尸进程**：修复 `nohup` 等后台命令残留僵尸进程的问题。stdout/stderr 改为直接写文件 fd，不再依赖父进程 pipe；新增 50MB 输出看门狗（`CODEBUDDY_BASH_BG_MAX_OUTPUT_BYTES` 可调）和 `CODEBUDDY_BASH_BG_PIPE_MODE=1` 回滚开关；session 切换/退出时清理输出文件。 #42870
- **官方 Copilot 网关保留 thinking 字段**：修复 `auto` 模型开启思考后，请求发往官方网关时 thinking 字段被过早清理的问题。 #41543
- **压缩类型透传**：修复自动压缩与手动 `/compact` 在 ACP `_meta` 中无法区分的问题，新增 `compactType` 透传。 #41540
- **进程终止可靠性**：修复 `dispose()` 后 `kill()` 被 `_disposed` 标志拦截、以及 `disposeAll()` exit 事件路由丢失导致 `wait()` 挂死的问题。

## [2.97.5] - 2026-05-22

### 🐛 修复

- **专家团：修复多类卡死/无产物/异常结束问题**：本次集中修复了 4.22.x ~ 4.24.0 用户在使用专家团（包括"腾讯自选股"、"一人公司"、"专业文档生成"、"深度研究"等）时反馈的多种异常：任务异常结束无任何产物输出；子成员任务已完成但主会话卡在"思考中"无响应；专家团运行中途自行结束、制品丢失。根因覆盖 team-lead inbox 调度、成员身份解析、并发 spawn 时序、shutdown 协调等多条链路。
- **Team：修复成员 task 已完成时 team-lead 发起 shutdown 后无回应**：成员已 `completed` 后，team-lead 调用 `SendMessage(type=shutdown_request)`，旧路径直接经 `mailbox.send` 写出 `shutdown_response`，绕过了 `SendMessage` 工具的 `handleShutdownResponse`，导致 lead 端 `ShutdownCoordinator` 永远收不到 fulfillResponse、Mode B 队列等待 `agent_end` 触发 dispatch 形成竞态。现在在 `startTeamLeadInboxPolling` 回调入口识别 `shutdown_response` 短路：调 `ShutdownCoordinator.fulfillResponse` 解锁 lead 等待，从 `TeamMemberRegistry` 摘除成员（兜底），不注入主 agent 会话、不入队 RichMessageQueue
- **Team：修复并发 spawn 时 SendMessage 找不到对端导致消息丢失**：在主 lead 短时间内并发拉起多个成员的场景下，旧逻辑"先校验 recipient 存在再投递"会直接报错 `Recipient not found`；现对齐 "writeToMailbox first, resolve later" 策略：`resolveRecipient` 命中失败时降级一次 `TeamManager.refreshFromDisk()`，即便仍未注册也直接写入 inbox 文件并附 `notice` 字段提示
- **Team：修复成员会话被错误认定为 team-lead，导致 inbox `from` 字段串号**：respawn 出来的成员 session 在某些边界下 `session.meta` 尚未持久化，`teamContext` 写不回，旧逻辑会把成员发出的全部消息标成 `team-lead`；现强制 materialise `session.meta`，`SendMessage` lead 分支额外校验 `session.id === team.leadSessionId`，成员 sender 解析在 in-process miss 时回落 `TeamMemberRegistry`
- **Team：修复同毫秒并发 shutdown_request 的 ID 冲突**：lead 向多成员并行发起 shutdown 时，旧 `shutdown-${Date.now()}` 在同一 ms 内会撞 ID，第二个 pending 直接覆盖第一个；现改为 `shutdown-${recipient}-${Date.now()}-${rand}`
- **Team：补齐进程退出时的 session-team 清理兜底**：`TeamManager` 维护本会话创建的 team 集合，进程退出时通过 `Promise.allSettled` 并发清理 `~/.codebuddy/teams/<name>/` 与 task 目录，避免长期累积污染；仅清理本进程显式创建的 team，绝不动其他会话遗留目录
- **Agent：新增环境变量隐藏并禁用 Fork subagent**：修复线上观察到 fork subagent 递归派生导致请求量爆炸（单日 3141 条，teammate 编号涨到 fork-56）。当环境变量 `CODEBUDDY_DISABLE_FORK_SUBAGENT` 为 truthy 值时，工具描述层自动隐藏 fork-mode 段落；运行时层通过统一的 `shouldApplyForkSpecialization()` helper 在三处入口（AgentTool / AgentTask.setupPhase / AgentTask.setupSubAgentSession）一致判定，禁用时跳过 fork 特殊化；模型若仍传 `subagent_type='fork'` 会优先匹配用户自定义同名 agent，未定义则改写为 `general-purpose`，避免 "Task agent fork is not available" 报错
- **User-Agent 头部修复**：修复 HTTP `User-Agent` 头部在缺少 `productName` 时回退到固定字符串 `WorkBuddy/unknown` 的问题，避免污染下游统计；现仅在 `productName` 存在时拼入产品名段


## [2.97.4] - 2026-05-21

### 🔧 功能改进

- **模型兼容性**：模型请求的兼容性处理改为目录驱动，新增模型时只需更新模型目录，无需改代码即可完成上游字段差异适配，对自定义模型也会按目录自动补齐 `maxInputTokens`、`maxOutputTokens`、`supportsReasoning`、`thinkingLevelMap` 等能力字段

### 🐛 修复

- **--debug hooks 输出**：修复 `--debug` 参数未输出 hooks 执行详情的问题，在 HookExecutor 和 HookManager 中接入 DebugService，支持通过 `--debug hooks` 查看 hooks 的完整执行流程

## [2.97.3] - 2026-05-19

### 🔧 功能改进

- **MCP 工具调用透传 Model ID**：MCP 工具调用时自动将当前模型 ID 透传到下游 MCP Server 的 HTTP 请求头（`X-Model-ID`），便于下游服务识别调用来源模型

### 🐛 修复

- **专家团子智能体重名**：修复专家团中子智能体重名导致 spawn 失败的问题
- **团队名冲突**：团队名冲突时自动重命名，inbox 轮询增加重试机制，提升团队协作稳定性
- **遥测数据准确性**：修复 `chat_user_action` 上报时 `requestModelName` 字段错误的问题
- **computer-use macOS Retina 坐标修复**：修复 macOS Retina 屏幕下 computer-use 坐标偏移与 scroll 操作异常
- **团队会话取消**：修复团队会话取消后队列残留拉活与列表状态闪回的问题
- **PowerShell 防误执行**：阻止 cmd 语法误入 PowerShell 执行，避免跨 shell 语法错误
- **终端按键兼容性**：修复 SS3 方向键及 Ghostty 下 Shift+Enter 按键无响应的问题
- **MaxToken 压缩卡死**：修复 MaxToken 压缩取消后 ACP `forwardingPromise` 卡死的问题
- **历史回放压缩过滤**：修复消息压缩记录持久化及回放时 `<cb_summary>` 标签未过滤的问题

## [2.97.2] - 2026-05-16

### 🔧 功能改进

- **警告抑制**：抑制 DEP0040（punycode）、NODE_TLS_REJECT_UNAUTHORIZED 和 AbortSignal MaxListenersExceeded 等无用警告
- **TLS 禁用集中化**：将 TLS 验证禁用逻辑统一收敛到 ProxyUtils.disableTlsVerification()
- **自定义 Agent hooks 支持**：自定义 Agent 的 frontmatter 现在支持 hooks 配置
- **rm 命令风险评级调整**：非递归多文件 rm 从 HIGH 降级为 MEDIUM，减少不必要的权限确认
- **YAML 解析容错**：自定义 Agent 文件 YAML 解析错误时输出警告而非静默忽略

### 🐛 修复

- **ACP 模式下 MCP 工具不可见**：修复 v2.96.0 引入的回归 —— 在 ACP（IDE 嵌入式 / Web UI / Workbuddy Desktop 等）模式下，MCP 配置在 ACP `newSession` 协议层下发，但启动早期 headless 路径会先以空配置完成一次 MCP 扫描并固化缓存，导致随后由 ACP 写入的真实 MCP server 配置被忽略，所有 MCP 工具不会被连接、也无法被 ToolSearch 检索到。现在配置变化会主动失效缓存并重新扫描，已连接的 server 会被复用以避免重复建立连接。
- **会话启动钩子**：统一各入口（启动 / 恢复 / 清理 / 分支 / 压缩）触发 SessionStart 钩子的路径，避免重复触发或遗漏导致首条提示缺失上下文。
- **插件加载（headless / ACP 模式）**：修复插件目录环境变量尚未注入时被错误缓存为空，从而 `--plugin-dir` 指定的插件无法被识别、SessionStart hook 无法注册的问题。
- **插件解压**：解压插件 zip 时保留可执行位，修复部分插件附带的 `.sh` 等脚本被错误降权为 644 导致无法执行的问题。
- **IDE 集成**：修复 IDE 集成模式下子代理调用 Read / Write / Edit / MultiEdit / Bash / AskUserQuestion 时，IDE 客户端因会话标识不匹配而拒绝执行的问题。修复后子代理在 IDE 中也能正常使用这些代理给客户端的工具。
- **tmux 环境输入乱码**：在 tmux 下，CBC 向 stdout 写出 Kitty keyboard protocol 控制序列后，tmux 会将自身的状态响应（如 `\x1b[?0u`、`\x1b[?2004l`）注入回 stdin，导致输入框出现乱码。新增 CSI 私有模式序列过滤层，在键映射阶段统一丢弃这类终端控制噪声，不影响正常按键输入。

## [2.97.1] - 2026-05-14

### 🐛 修复

- **修复 `/ide` 自动连接报错 `Unexpected server response: 101`**：在独立二进制版本（`bun build --compile`）下，IDE WebSocket 握手在某些情况下会被错误识别为普通 HTTP 响应导致连接失败，连同正常匹配的 IDE 一起连不上。改为在该运行时使用 Bun 原生 WebSocket，绕开兼容性问题；npm 安装版本仍走原有实现。同时收紧自动连接的工作区匹配：仅在恰好一个 IDE 的工作区覆盖当前目录时才自动连接，否则静默跳过，您可以用 `/ide` 手动选择。检测前会自动清理已退出 IDE 进程残留的锁文件，避免连到无效端口。
- **微信回复**：修复部分模型把回复正文塞进 chat_id 字段导致 WeChatReply 反复报 "Either text or file_path is required" 的问题。补全工具描述与频道指令中的 JSON 调用示例，并在检测到正文被串入 chat_id 时给出明确的纠错提示，引导模型用正确的字段名调用工具。

## [2.97.0] - 2026-05-13

### 🎉 新功能

- **快捷键系统**：参考同类工具架构实现完整的快捷键系统，支持上下文条件、弦序列（如 Ctrl+X Ctrl+K）、用户自定义覆盖。配置文件存储在 `~/.codebuddy/keybindings.json`，支持 16 个上下文与 60+ 动作。新增 `/keybindings` 命令、REST API（`/api/v1/keybindings`）以及 Web UI 可视化配置（按上下文分组、搜索、录制、冲突检测、中英文国际化）。
- **Skill / Subagent Frontmatter Hooks**：对齐同类工具行为，支持在 `.codebuddy/agents/*.md` 与 `.codebuddy/skills/*/SKILL.md` 的 YAML frontmatter 中配置 `hooks:` 字段，在子代理 / fork skill 生命周期内自动注册和清理。支持 `command` / `prompt` / `agent` / `http` 四种 hook 类型、`once: true` 自动移除、event matcher 语义。**默认安全闸门**：非 product 内置来源的 frontmatter hooks 默认禁用（含本地与插件市场），需在 `settings.json` 中开启 `allowUntrustedFrontmatterHooks: true` 才生效。
- **Hook 事件与参数对齐（A/B 批次）**：新增 6 个 hook 事件（PostToolUseFailure、SubagentStart、StopFailure、PostCompact、ConfigChange、InstructionsLoaded），工具事件 payload 增加 `tool_use_id` / `permission_mode` 等字段，Stop / SubagentStop 事件新增 `last_assistant_message`，SubagentStop 增加 `agent_id` / `agent_type` / `agent_transcript_path`，Notification 增加 `title`，SessionEnd 原因扩充。新增 hook 异步协议（`{"async": true, "asyncTimeout": N}` 立即放行）；PostToolUse 支持 MCP 工具的 `updatedMCPToolOutput` 覆盖；SessionStart 支持 `initialUserMessage` 注入首轮上下文。
- **Hook 事件扩展（C1 批次）**：新增 8 个 hook 事件 — PermissionRequest / PermissionDenied（权限审批前后可拦截）、TaskCreated / TaskCompleted（携带 task_id / teammate_name 等）、TeammateIdle（团队成员从忙碌转为空闲触发）、Setup（进程启动 / 维护阶段触发，stdout 可注入首轮上下文）、Elicitation / ElicitationResult（MCP elicitation 前后预留）。
- **Hook 配置扩展（C2 批次）**：新增 `http` / `agent` 两种 hook type；新增 `if` permission rule 语法（如 `Bash(git *)` / `Write(*.ts)`）按工具名和参数匹配；新增 `shell` / `once` / `asyncRewake` / `allowedEnvVars` / `statusMessage` 字段；插件 hook 注入新环境变量 `CODEBUDDY_PLUGIN_DATA` 与展开的 `*_PLUGIN_OPTION_*`。
- **Hook 文件监视（C3 批次）**：新增 `FileChanged`（SessionStart / Setup hook 通过 `hookSpecificOutput.watchPaths` 声明监视路径），`CwdChanged`（Bash / PowerShell 工具执行后若 cwd 变化自动触发）。Windows Git Bash 下 hook 子进程会自动规范化项目路径环境变量。
- **Skills / 斜杠命令 / Subagent 变量占位符**：在 `.md` 文件中支持变量占位符替换。支持 `${CODEBUDDY_PLUGIN_ROOT}` / `${CODEBUDDY_SKILL_DIR}` / `${CODEBUDDY_SESSION_ID}` 以及任意大写环境变量（含 `${MY_ENV_VAR:-默认值}` 默认值语法），未设置的占位符原样保留。
- **第三方插件市场自动更新**：新增 `autoUpdateThirdPartyMarketplaces` 产品配置和 `CODEBUDDY_AUTO_UPDATE_THIRD_PARTY_MARKETPLACES` 环境变量，支持全局启用第三方插件市场自动更新（优先级：settings env > process.env > 产品配置 > 默认关闭）。市场配置项新增 `autoUpdate` 可选字段。
- **Remote Gateway `/api/v1/runs` 任务执行超时可配置**：默认超时从 10 分钟提升到 30 分钟；新增 `gateway.runTimeoutMs` settings 配置；新增 HTTP header `X-Codebuddy-Run-Timeout` 单次覆盖；设为 0 或负数关闭超时保护（覆盖优先级：header > settings > 默认）。
- **Web UI PWA 自动更新**：前端每 15 分钟自动询问后端是否有新 Service Worker 版本，对话空闲时自动 reload，进行中弹 toast 保留"立即刷新"按钮，订阅运行状态在 Agent 空闲后自动刷新，确保不打扰正在进行的对话。
- **UE 项目自动排除大仓噪声目录**：在 cwd 检测到 `*.uproject` 时自动在 Grep / Glob ripgrep 调用里叠加 `!Intermediate/` `!DerivedDataCache/` `!Saved/` `!Binaries/` `!Build/` `!.vs/` 排除，避免 Unreal Engine 项目编译产物污染搜索结果；可通过 `settings.disableUEAutoExclude: true` 关闭。Grep content 搜索默认增加 `--max-columns 500` 避免单行 MB 级内容打爆 stdout。
- **ACP 文件系统方法**：在 ACP StreamManager 中实现 `fs/*` 系列方法（list / read / write / exists / makeDir / remove / rename / getInfo / watchDir / unwatch），支持 Desktop 通过 ACP JSON-RPC 协议访问工作目录文件系统，使"全部文件"标签页在 Desktop 中正常工作。
- **Subagent frontmatter `skills:` 预加载**：子代理启动时把 frontmatter `skills:` 中列出的 skill 完整内容作为 `isMeta:true` user message 预注入子代理 history，支持 3 档 skill 名称 fallback。

### 🔧 功能改进

- **PowerShell 安全多层防御**：CLM 类型白名单（约 90 类型）、Git 安全防护（裸仓库攻击 / NTFS 8.3 短名 / archive 提取器检测）、危险 Cmdlet 分类（7 集合 + 120+ 别名）、破坏性命令 UI 警告（16 种模式）、Unicode 破折号支持（en/em/horizontal-bar）。
- **ACP 连接稳定性**：GET SSE 连接增加 30 秒心跳防止反向代理（cloudflared / nginx）回收；连接关闭时等待未完成的历史写入完成防止 JSONL 日志被截断。`idle_timeout` 场景增强诊断日志，便于会话长时间无更新时定位卡点。
- **Bash 工具 timeout 提示动态化**：工具描述中"最大 timeout"数值原先写死 600000ms，即便用户调大 `BASH_MAX_TIMEOUT_MS` 模型看到的仍是旧值。现在描述动态注入 `bashMaxTimeoutMs` / `bashDefaultTimeoutMs`，与运行时实际 clamp 值保持一致；并引导模型长任务优先省略 `timeout` 参数。
- **TUI 输入框 Ctrl+F / Ctrl+B 光标导航**：之前 Ctrl+F 被当普通字符插入、Ctrl+B 被静默吞掉，现支持 bash readline 风格的左右移动一字符，与已有 Ctrl+A / Ctrl+E / Ctrl+K / Ctrl+U 一致。多字节字符和 emoji 移动正确。
- **Web UI 画布内嵌终端文字选择**：画布视图打开终端 tile 时，原本交互遮罩会把 `pointerdown` 交给画布做拖动平移，导致无法选中文字。现改为 tile 聚焦后遮罩透传给 xterm，支持选中复制；中键 / 右键 / Space + 左键仍走画布平移。
- **Channel 权限 `deny_and_exit_plan`**：微信 / 企微用户可通过回复 `q` 退出计划模式；ExitPlanMode 工具新增专用提示 `(y=执行 | n=继续规划 | q=退出计划模式)`；InterruptionService 处理 `deny_and_exit_plan` 时正确恢复 permissionMode。
- **Request Purpose 标记**：新增 `X-Agent-Purpose` HTTP header，为不同类型 LLM 请求打分类标签（conversation / summary / webfetch / subagent:explore），供下游 Langfuse 进行 trace 标记和分析。
- **Worktree 目录切换**：创建或复用 worktree 后尽量保持进入与当前目录对应的相对子目录，不存在时回退到 worktree 根目录。
- **图片压缩拦截器**：新增图片压缩拦截器，对用户发送的 base64 图片统一进行长边 2000px 压缩，确保 ACP / TUI / plugin-chat 各来源图片都经过尺寸优化。
- **Session API 统一**：合并 `listWorkspaces` 和 `listAcrossProjects` 为统一的 `GET /api/v1/sessions` 端点，支持 `cwd` 查询参数（不传 = 当前空间，`*` = 所有空间，`/path` = 指定目录）；保留旧端点向下兼容。
- **模型权限错误自动恢复**：当后端返回"模型不可用"时自动刷新产品配置并向用户展示最新可用模型列表，引导切换。
- **下架历史模型并刷新积分系数**：下掉 HY 2.0 系列（共 3 个）和 GPT-5.2/5.1 共 4 个旧模型；按最新官方定价表刷新模型积分（iOA 企业版补齐 DeepSeek / MiniMax / Kimi / GLM / Hunyuan-Image-V3 真实系数；国内版与云托管版同步刷新）。
- **插件加载并发与缓存**：为市场插件列表 / 元数据 / 组件加载引入可配置并发上限避免启动抖动；新增市场插件列表缓存与加载去重；`getInstalledPlugins` 共享 Promise；`getPlugin` 优先复用已安装缓存。
- **HTTP 插件市场元数据回退**：HTTP 插件市场下载清单时支持多种元数据目录并自动回退，同时清理陈旧残留文件。
- **ACP 用户消息回显简化**：统一使用纯文本渲染，历史回放与实时流保持一致展示效果。
- **移除产物提取代码**：从 CLI 层移除所有 artifact 提取相关方法和 session replay 中的产物广播逻辑（产物概念归属业务层）。
- **自动化任务 Langfuse 标签**：定时任务触发的请求自动携带 `automation` 标签，便于在 Langfuse 看板中筛选和分析自动化任务的执行数据。

### 🐛 修复

- **`/clear` 会话分割线真正切断历史**：再次发 prompt 时，分割线之前的消息不会再发给模型（对齐老版本 SmartBoundaryHistoryLoadingStrategy 行为），兼容老版本写入的 separator 数据。
- **ACP `/clear` 分隔符在重启后丢失**：修复 CBC / WorkBuddy Desktop Claw 会话里插入的 `/clear` 分隔符在重启或 loadSession 回放后消失的问题，同时修复随之出现的 `unsupported content type at index 0: input_text` 400 错误。新增 `handleClearSession`：分隔符以 `role:'system'` + `providerData.isSessionSeparator:true` 写入 jsonl 持久化，重放时还原为 `session_info_update`。
- **ACP `/compact` 在 IM 场景下生效**：WorkBuddy Desktop Claw IM 的 `/compact`/`/总结`原先无效（裸文本不会被识别为命令），现在通过 `_meta['codebuddy.ai'].isCompactSession === true` 短路调用 `ContextCompactSummarizer.compactAndSummarize(force=true, skipContinue=true)`。
- **ACP Cancel Barrier**：修复会话在 cancel 完成瞬间若有新 `session/prompt` 到达会被当作新对话启动的问题。新增 500ms cancel barrier，窗口内到达的 prompt 直接以 `stopReason: cancelled` 响应。
- **ACP 取消标记泄漏**：修复 prompt 终态与 `session/cancel` 同时发生时 pending cancellation 标记未被消费，导致后续轮次 `AskUserQuestion` 被误判为取消的问题。
- **ACP 流式回复重复输出思考内容**：修复 WorkBuddy 对话流式回复可能重复输出思考内容的问题。
- **AskUserQuestion 显示"未回答"**：修复 ACP 模式下用户回答 AskUserQuestion 后 UI 显示"未回答"的问题，提前初始化 AskService 的 deferred。
- **AskUserQuestion 误判为"拒绝回答"**：修复审批信号抢在工具执行路径建立等待者前到达导致答案被丢弃的问题，以工具调用 ID 为键保持答案与等待方正确配对。
- **ACP 会话查找竞态**：`session/prompt` 和 `session/set_config_option` 改用 `getRuntimeSession` 优先查询内存中活跃会话，避免 `loadSession` 后会话尚未落盘时出现 "Session not found"。
- **ACP 会话继承 CLI 启动参数**：修复 `--serve` 模式下 ACP 创建的会话未继承 `--permission-mode` / `--model` 等参数。
- **ACP `session/load` 超时**：修复部分 Windows 环境下出现 `ACP request timeout: session/load` 的问题，在协议入口层增加 25s 兜底，确保始终能在 Desktop 空闲超时内返回响应。
- **ACP 模型切换不生效**：`unstable_setSessionModel` 与 `setSessionConfigOption(model)` 现立即把新模型写入 runtime session（`requestOptions.model` / `session.options.model` / `SessionManager.overrideModel` / CLI 设置），不再只依赖订阅副作用。
- **ACP 模式不再把内置命令当 skill 暴露给模型**：`/clear`、`/help`、`/model`、`/theme`、`/status`、`/resume`、`/rename` 等内置 UI 指令不再混入 `Skill` 工具的 `<available_skills>` 列表（CLI 独立运行模式下行为不变）。
- **上下文压缩自动取消循环**：修复压缩在某些场景出现"自动取消"假象、随后立刻又被重复触发的循环。压缩成功与否严格以本次调用自身的最终输出为准；压缩调用等待上限从 60 秒放宽到 20 分钟。
- **Compact 残留 `</conversation_history_summary>` 标签**：修复任务异常结束时残留压缩 XML 标签的问题，统一 compact 触发路径。
- **Compact 摘要与用户消息错位**：修复请求级自动预压缩场景下压缩摘要与用户原始消息在历史中错位，导致下一轮请求同时携带摘要与压缩前完整历史的问题。
- **Compact 退化摘要**：修复长会话在自动压缩后缺少有效新增内容时仍可能再次压缩、生成无效摘要的问题；压缩过滤时保留用户真实请求文本（含 `@file` 原始提问）。
- **Compact 失败卡住历史视图**：失败/取消后再次触发压缩仍被卡住，改由读取层统一按"提不到 `<summary>` 即视作失败"忽略失败/取消的压缩段。
- **Compact 超时死锁与取消**：修复子 Agent compact 超时后状态机卡死（补发 `agent_end` 事件）；修复用户主动取消时 `isCompressing=true` 导致取消信号被 `pollCompression` 吞掉。
- **自定义模型自动压缩窗口**：自定义 OpenAI 兼容模型未配 `maxInputTokens` 时退回到 `CODEBUDDY_AUTO_COMPACT_WINDOW` 兜底窗口（默认 100k，clamp 到 [100k, 1M]）。
- **SDK 模式自动压缩断联**：修复 SDK / headless 模式下 `checkAutoCompact` 触发压缩后 compact + continue 输出泄露到 stdout 导致 SDK 断联，session-manager interceptorGate 增加 `isCompressing` 检查。
- **Compact 自动渲染 XML 标签**：修复自动压缩触发时摘要在聊天界面被渲染为裸 `<conversation_history_summary>` / `<summary>` 标签的问题，与用户主动 `/compact` 走同一套 `compact_group` 渲染。聊天界面统一显示 `/compact`，内部命令 `/_compact` 在用户消息气泡中归一化；隐藏 `/_` 前缀的内部命令。
- **Compact 失败保留用户消息**：长会话发送前自动压缩失败后会保存用户消息、结束本次请求并展示明确失败提示，避免静默卡住。
- **Compact 历史 `Unknown content` 错误**：修复从历史会话继续对话时可能报 `Unknown content` 导致中断的问题。
- **PTL 上下文超长恢复**：新增按 API 轮次精确截断历史的兜底机制，覆盖多类主流模型错误文案。组合命令安全检查（`&&` / `;` / `|`）改为子命令独立评估并取最高等级。
- **空流自动重试**：识别上游 OpenAI 兼容网关只发占位 / 心跳帧后断开的"空流"场景，复用流超时重试管道（max=1）自动恢复；重试额度按 turn 重置。
- **请求体超限恢复**：优化大上下文 / 大图片导致请求体超限时的自动恢复能力；`ModelProvider` axios 显式设 `maxBodyLength: Infinity, maxContentLength: Infinity`，避免打包内 `follow-redirects` 默认 10MB 上限本地拦截。
- **模型错误兜底状态码**：`ModelErrorAnalyzer.analyze` 与 `ModelProvider` 外层 catch 未识别归因时兜底响应码由 `500 Internal Client Error` 调整为 `400 Client Error`。
- **`Tool X not found` 错误脱敏**：SDK 抛出的工具未找到错误不再带产品实现细节的 agent 名（如 "cli"）；正则兼容工具名含空格场景；`ModelBehaviorError` 不再弹客户端错误框，走 `end_turn` 结束本轮；ACP 层统一补发 `tool_call_update{status:'failed'}` 让 placeholder 退出 pending。
- **历史会话首条用户消息丢失**：含隐藏上下文的用户首条消息在 UI 中消失，旧过滤规则仅看开头丢弃整块导致提问被一并过滤；现在合并块中的用户提问会被保留。
- **历史回放 model error 渲染为助手回复**：修复因模型报错（6004/429 等）中断的轮次在历史回放时被当普通回答渲染在聊天气泡中，保持用户消息无回答的视觉状态。
- **历史回放 orphaned tool_call**：对中断的工具调用（无结果的 function_call）跳过回放并注入系统通知，避免显示无法交互的 pending 状态；同一轮多个中断的工具调用只显示一条通知。
- **老会话任务列表展示**：修复从旧版本迁移的会话恢复后任务列表渲染为空框，对旧数据中以字符串形式序列化的任务数组增加兼容解析。
- **Plan 模式权限恢复**：修复从 Desktop 端启动 plan 模式时 `prePlanPermissionMode` 未正确传递，确保退出 plan 模式后能恢复到正确权限。
- **Glob/Grep 空结果提示**：返回有意义的文本提示（"No files found" / "No matches found"）替代空数组；ListToolCall 组件兼容 string 类型 content。
- **恢复 Grep/Glob 工具注册**：之前 PR #34323 误将 Grep/Glob 从 5 份 `product.*.json` 中删除（CC 只在 ant-native 内部 build 下架，对外发布版仍保留）。本次恢复 5 份 product 的 4 个 agent（cli / general-purpose / Explore / Plan）的 Grep/Glob 引用（共 20 处）以及主 product.json 顶层 tools[]。
- **`--disallowedTools` 子命令规则**：传入带子命令的规则（如 `Bash(pkill:*)`）时整个工具被从模型可用工具列表移除的问题，现仅当规则是工具名本身时才整体禁用，带子命令范围交由执行时权限检查精确拦截。
- **工具过滤绕过漏洞**：修复 ToolSearch 的 lookup 模式和 DeferExecuteTool 不检查工具可用性的问题，将 `getAllowedToolsForAgent` 提取为公共方法统一过滤。
- **rm 批量删除风险等级**：将 rm 批量删除（通配符或多文件）的风险等级从 MEDIUM 提升至 HIGH，确保 IM 侧批量删除命令正确触发用户确认。
- **沙箱 strip_write 假成功**：TSBX `strip_write` 策略静默丢弃写入 / 删除时让进程以 `exitCode=0` 退出，原本不触发提权 UI；现在只要有未过滤的文件拦截记录就标记 sandbox 拒绝。
- **Bash Sandbox 配置目录路径**：修复 `CODEBUDDY_CONFIG_DIR` 自定义配置目录下 Bash 沙箱白名单失效，`expandPath()` 现在让 `~/.codebuddy` 前缀路由到 `PathUtils.getHomeDir()` 返回的真实目录。
- **Prompt 模板 `~/.codebuddy/...` 占位符**：TeamCreate / TeamDelete / statusline-setup 工具描述模板通过 `{{codebuddyHome}}` 渲染实际 CodeBuddy home 目录，正确跟随 `CODEBUDDY_CONFIG_DIR`。
- **TeamDelete / WeCom Bot 文案路径**：工具/客户端返回给模型和用户的文案中硬编码 `~/.codebuddy/...` 路径，TeamDelete 现告知模型真实被删除目录；WeCom Bot 配置指引显示真实 credentials 文件路径。
- **UI 面板 `~/.codebuddy/...` 路径**：Permissions / Agents / Skills / Memory 面板、内置 Tips、Web UI 登录提示中硬编码路径在设置 `CODEBUDDY_CONFIG_DIR` 后显示真实路径。
- **沙盒开关存储层级**：Desktop 端沙盒开关从持久化写入 `settings.local.json` 改为存储在 CLI 内存层（session 级别），避免污染用户工作区目录。
- **Daemon 端口竞态**：旧进程现在会先关闭 HTTP 监听和长连接再 fork 新进程，避免重启时 `EADDRINUSE` 启动失败或长连接阻塞。
- **MCP 静态 Authorization 被 OAuth 覆盖**：修复在 `mcp.json > headers.Authorization` 显式配置 `Basic` / `Bearer` 时仍被 OAuth 流程覆盖的问题；MCP SDK 升级至 1.24.3 支持协议版本 `2025-11-25`。
- **MessageQueueDeferredDispatch（Mode B）**：修复 Agent 队列消息无法成功发送的问题，新增 `RichMessageQueueManager`、禁用 7 条 CLI 内部排空路径防止与 UI 驱动消费冲突；任务队列"立刻发送"消息丢失修复；队列自动派发消息标记来源跳过忙碌检查。
- **Team 消息实时投递**：Mode B 下队长忙碌期间队员 `SendMessage` 与 4s Framework Auto-Notification 卡在消息队列不被消费的问题；新增 `TeamInboxDispatchService` 在队长 `agent_end` 后自动 `activate` + run；feature flag `CBC_TEAM_IMMEDIATE_DISPATCH=0` 可降级。
- **Playbook Team Spinner**：修复 playbook 任务完成后左侧 agent 持续转圈问题，前端 `'completed'` 加入状态覆盖排除列表；后端 `AcpTeamBridge.stop()` 检测 team 已被删除但事件未发送时补发 `team_deleted` 事件兜底。
- **专家内置 Skill 不可见**：`rebuildAgents` 完成后若 agents/skills/commands 等非模型配置变化，主动失效 Skill / SlashCommand / ToolSearch 工具描述缓存。
- **会话标题与摘要触发**：修复触发机制异常，确保标题更新、内容摘要、压缩前刷新按预期生效。
- **图片消息标题污染**：修复图片消息在历史回放和会话标题生成场景中泄漏本地图片路径；图文消息优先使用用户可见文案生成标题，纯图片消息使用本地化默认标题。WorkBuddy 接收 backend 标题更新时忽略 `(No content)` / `/compact` 和内部图片路径标签。
- **Session replay `image_local_path` 标题污染**：修复 session replay 时 `image_local_path` 文本块被合并到用户文本中导致标题和摘要异常。
- **ImageGen / ImageEdit 取消支持**：将会话 abort signal 传递到所有 HTTP 请求，避免取消后图片生成请求仍继续执行。
- **自定义模型加载 400 错误**：支持顶级数组和对象包裹两种 models.json 格式，优化缓存策略确保自定义模型正确叠加到平台配置之上。
- **自定义模型 Gzip 检测**：原逻辑请求 body 中 `custom-local:` 前缀已被剥离导致无法匹配 product.models 配置；现通过 axiosConfig 携带原始 model id 修复。
- **私有化部署检测**：移除通过企业端点配置推断 Self-Hosted 部署类型的逻辑，避免配置企业端点但实际为云托管时错误标记。
- **Marketplace 同名重复**：用户添加自定义 marketplace 时若 name 与已安装 marketplace（含内置）撞名会出现两条同名套件且无法删除，现在按 source / manifest.name 多重查重，启动时优先保留 builtin 并清理污染记录。
- **Marketplace 重复添加报错**：改为自动触发更新流程。
- **Marketplace 更新缓存未刷新**：`updateMarketplace` 后 UI 显示的 `lastUpdated` 时间不更新，原因是 `clearAllCaches()` 遗漏清理 `marketplaceCache`。
- **GithubMarketplace 目录名对齐**：非标准仓库 URL 在 `GithubMarketplace.install()` 里目录名编码后与 `marketplace.json` 的 `name` 不一致，现 clone 完成后读取 manifest.name 按需 rename。
- **Git 不可用 ZIP 回退**：未安装 Git 的 Windows 环境下添加 GitHub / GitLab / cnb 等插件市场失败，现自动降级为 ZIP 压缩包下载。
- **内置套件市场 ZIP 分发**：默认套件市场无内容、添加市场失败问题，内置市场改为 ZIP 归档分发并支持版本号短路检查。
- **插件子代理描述刷新**：修复加载或切换插件子代理后，Agent 工具中的可用子代理列表与描述未及时刷新。
- **Skill 扫描悬空符号链接**：`~/.codebuddy/skills/` 中悬空 symlink 之前会让 `statSync` 抛 ENOENT 中断整个目录扫描，现改为 per-entry try/catch 只跳过坏链接。
- **PowerShell Office Automation**：修复 Windows 下通过 PowerShell 创建 / 打开 Excel / Word / PowerPoint / Outlook 时被安全策略误拦截，Office Automation COM 对象不再直接拦截，下沉到方法调用层面按需确认。
- **PowerShell 命令行包装**：`LocalShellService` 现正确遵循 `ShellExecuteParams.rawCommand` 契约，`rawCommand=true` 时直接 `spawn(exe, args)` 跳过 bash `-c` / `eval` / `shopt` 包装，避免 Windows 路径反斜杠被吞或反引号被误解。
- **Windows 黑窗弹出**：修复 `--bg` 后台会话以及 daemon 启动期间会弹出可见 conhost / Git Bash 黑窗，确保所有内部子进程都以隐藏窗口方式启动。
- **Windows 插件 commands 不显示**：`CODEBUDDY_PLUGIN_DIRS` 环境变量从 POSIX 的 `:` 改为 `path.delimiter`（POSIX=`:`，Windows=`;`），避免 Windows 上 `C:\...` 盘符被当成分隔符。
- **Windows Bash 工具中文乱码**：跨 chunk 拼回未完成的 UTF-8 多字节序列；解码先严格 UTF-8 校验再回退 jschardet/cp936；Windows 注入 `PYTHONUTF8=1`（CPython PEP 540 UTF-8 Mode）。
- **Worktree 相对 cwd**：修复 worktree 复用时未正确进入相对目录的问题。
- **Web UI 编辑器保存清空文件**：`writeFile` 前端未显式设 Content-Type 被 body-parser.text() 中间件消费导致后端读到空 Buffer 写入磁盘；现前端显式设 `application/octet-stream`，后端对"空请求体 + 已存在非空文件 + 无 `allowEmpty=1`"返回 409 兜底，CodeEditor 改用 `defaultValue` + useEffect 守卫。
- **Gateway CORS 静态资源**：开启 CORS 白名单时同源 IP 访问静态资源（首页 / `/assets/*` / Service Worker）被误拦的问题，浏览器 module script / modulepreload 静态资源不再参与 API CORS 白名单检查。
- **anydev 远程 IDE `/ide` 命令**：新增 `CODEBUDDY_IDE_PORT` / `CODEBUDDY_IDE_HOST` / `CODEBUDDY_IDE_SKIP_VALID_CHECK` 环境变量，适配容器内无法访问宿主侧锁文件、IDE 在远程主机、容器内外路径不一致等场景。
- **Read 工具图片返回格式**：修复 Read 工具读取图片时返回数据结构不正确，现正确返回 image content block 格式。
- **`@openai/agents-openai` patch**：修复 assistant 消息中 tool_calls 合并问题。
- **历史登出闪烁**：账号退出时清除缓存消息，防止重新登录后短暂显示旧的 pending question。

### 📝 文档

- **下线 sandboxing.md 文档**：移除 sandboxing.md 文档及所有引用，相关链接指向 bash-sandboxing.md。

## [2.96.1] - 2026-05-12

### 🎉 新功能

- **自动化任务 Langfuse 标签**：定时任务触发的请求自动携带 `automation` 标签，便于在 Langfuse 看板中筛选和分析自动化任务的执行数据。

### 🔧 功能改进

- **宿主可关闭嵌入式 CLI 历史清理**：允许宿主应用（如 WorkBuddy Desktop）通过配置关闭嵌入式 CLI 的历史会话自动清理行为。
- **统一 compact 触发路径**：合并多处上下文压缩触发逻辑为统一入口，提升压缩流程的可靠性和一致性。

### 🐛 修复

- **SDK 模式自动压缩断联**：修复 SDK 模式下触发自动上下文压缩时导致连接中断的问题。
- **上下文压缩失败卡住**：修复上下文压缩失败后会话卡住无法继续的问题。
- **插件市场 UI 缓存未刷新**：修复插件市场更新后 Web UI 缓存未及时刷新的问题。
- **插件子代理描述刷新**：修复插件子代理描述信息未正确刷新的问题。

## [2.96.0] - 2026-05-11

### 🎉 新功能

- **SDK 自定义子代理**：通过 SDK `initialize` 传入的 `agents` / `systemPrompt` / `appendSystemPrompt` 现在会注入产品配置，与 CLI 的 `--agents` / `--system-prompt` 等价生效。
- **子代理黑名单**：`AgentDefinition` 新增 `disallowedTools` 字段，子代理执行时与 session 级 `--disallowedTools` 取并集生效。

### 🔧 功能改进

- **会话标题国际化**：AI 自动生成的会话标题遵循用户的语言设置（如中文环境生成中文标题），不再固定输出英文。

### 🐛 修复

- **Web UI 刷新丢失会话标题**：恢复已有会话时，顶部标题立即显示原标题，不再短暂退回到"新对话"。
- **MCP 列表缓存**：修复 `list()` 返回空结果后再 `add()` 时新服务器不会出现在缓存里的问题。
- **流式输出模型展示**：`stream-json` 输出现在优先采用 provider 实际上报的 model id，避免转发子代理事件时显示父 agent 的配置 id。

## [2.95.1] - 2026-05-07

### 🎉 新功能

- **通用 Agent 支持图像生成/编辑**：general-purpose 子 agent 的工具清单新增 ImageGen 和 ImageEdit，可在子任务中直接生成图像或基于已有图像进行编辑；是否可用仍由模型能力 tag 决定。

### 🔧 功能改进

- **Skill 工具描述截断**：采用三阶段均衡截断策略,大量 skills 场景下 Skill 工具描述自动按字符预算收敛,不再无限膨胀。
  - 单条描述硬上限 250 字符,超长裁剪加省略号
  - 内置 skills 与官方 bundled skills 永不截断描述
  - 项目级、插件级、connector 级 skills 不限条数,description 按剩余预算均分截断
  - 用户级 skills(位于 `~/.codebuddy/skills/`)受全局总数上限(默认 200 条)约束,超出部分不展开描述
  - 新增 env `CODEBUDDY_SKILL_TOOL_CHAR_BUDGET`(正整数,单位字符)独立控制 Skill 工具描述预算,默认值 8000；未设置时回退读取 `SLASH_COMMAND_TOOL_CHAR_BUDGET`
  - **破坏性变更**：SlashCommand 工具默认字符预算由 15000 调整为 8000。拥有大量自定义 command 且累计描述超 8000 字符的用户会看到命令列表被提前截断；可设置 env `SLASH_COMMAND_TOOL_CHAR_BUDGET=15000` 恢复原值
- **MCP 大响应处理**：MCP 工具响应超出 token 上限时不再直接报错中断会话，改为把完整内容保存到会话目录并返回读取指引，模型可按 offset/limit 分段读取。落盘路径形如 `~/.codebuddy/projects/<project-hash>/<session-id>/tool-results/mcp-<server>-<tool>-<timestamp>-<rand>.txt`（子代理场景为 `<parent-session>/subagents/<agent-id>/tool-results/…`）。含图片的响应、无会话上下文、或落盘失败时自动降级为截断模式并保留图片块；可通过环境变量 `CODEBUDDY_DISABLE_MCP_LARGE_OUTPUT_FILES=1` 始终走截断降级。
- **流式响应超时**：将首 token 等待和流间静默两项默认超时由 10 分钟提升至 20 分钟，避免长上下文请求或慢响应模型在首 token 阶段被误判为连接丢失。可继续通过 `CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS` 与 `CODEBUDDY_STREAM_TIMEOUT_MS` 自定义。
- **Windows 粘贴体验**：提升 Windows 终端中大段文本和剪贴板内容粘贴的稳定性，减少输入闪烁和内容分片问题。
- **统一 cancel 清理编排器**：收到 cancel 信号时按六个维度统一清理 session 运行时状态，彻底消除"CLI abort 了但脏状态残留到下一轮 prompt"和"用户取消后 UI'正在压缩上下文'蒙层不消失"类 bug。
  - 顺序执行：Interaction（reject pending permission/AskUserQuestion deferred）→ Mode（恢复 Plan 模式）→ Todo（保留 3 态 status，通过 metadata 戳 cancel 印记）→ Tool（广播 tool_call_update failed）→ Compact flag（reset isCompressing）→ Progress signal（清 UI 压缩 loading 横幅）
  - 接入两个底层 cancel 入口：ACP cancel RPC（合流 web-ui handleCancel）与 SDK/Ctrl+C interrupt 信号
  - SDK / headless 模式下可选依赖缺失自动跳过对应维度，每一步独立 try/catch 错误隔离
- **内部生成器 agent 不再自动注入 SendMessage 工具**：`compact`、`summaryGenerator`、`terminalTitleGenerator`、`contentAnalyzer`、`promptHookEvaluator`、`insightsAnalyzer`、`memorySelector`、`agentInstructions` 这类用于上下文压缩 / 标题生成 / 摘要生成等内部任务的 agent，永远不参与 team / sub-agent 通讯，不再浪费 prompt token 并污染结构化输出。

### 🐛 问题修复

- **取消压缩后 UI 显示"已完成 ✓" / 仍卡在 shimmer 的状态显示 bug**：用户报告流式压缩中点取消按钮，分隔线 UI 不能正确反映"被取消"语义——要么显示"上下文已压缩 ✓"（误判），要么继续显示"正在压缩..."shimmer（信号未送达 UI）。
  - 自动 compact 与手动 `/compact` 双路径覆盖：自动路径在 `doBlockingCompaction` cancel 分支双通道写入 session.meta marker + ACP 立即广播；手动路径由 cancel cleanup 编排器检测到压缩中状态时主动广播
  - 新增 ACP 协议字段 `_meta['codebuddy.ai/compact-cancelled']` 经 `session_info_update` 通道广播给所有 ACP client
  - Web UI 端 `CompactGroupItem` 加 cancelled 状态视觉（XCircle + 删除线 + 半透明）+ i18n key（zh "历史对话精简已取消" / en "Compaction cancelled"）
- **ACP 自动压缩静默语义收敛**：自动压缩执行期间触发的内部 abort/error 不再向 ACP 客户端暴露 `stopReason='cancelled'` / `errorMessage`，外部消费方（IDE/Web UI/Desktop）不再看到一次无意义的"已取消"闪现；用户主动 Ctrl-C / ACP cancel 仍正常发 `stopReason='cancelled'`，未被过度静默。
- **桌面操作工具列表可见性对齐运行时门控**：桌面操作工具在未启用或非 macOS 场景下仍会出现在工具搜索描述里，模型会据此尝试调用后被拒绝；现在列表可见性与运行时门控完全对称，未启用时不再出现在可发现工具清单。

### 📝 文档更新

- **CLI 文档同步**：同步更新 bash-sandboxing、env-vars、hooks、interactive-mode、mcp、plugins-reference、settings、skills 等多语言版本（cn/en/zh），并发布 v2.94.0~v2.94.4 历史版本的 release notes 文档。

## [2.95.0] - 2026-05-01

### 🎉 新功能

- **Agent Team 能力对齐**：
  - **队员空闲感知**：团队 lead 现在能 per-teammate 查询"当前是否空闲"、等待指定队员空闲（支持超时和 abort signal）、注册"一旦空闲就回调"的钩子；UI/调度/优雅关停等场景无需订阅 stream 即可获知队员状态
  - **Plan 审批用户体验对齐**：队员在 Plan 模式下结束 plan 时，审批弹窗自动显示在 lead 侧终端，带队员颜色徽章，选项为"通过 / 继续规划 / 退出 Plan 模式"三档（和常规工具审批的"通过 / 永久通过 / 拒绝"语义不同）。此能力开箱即已具备，本次变更新增防回归断言锁定契约
  - **优雅关停握手 + 超时兜底**：`TeamDelete` / 手动关停队员时，lead 会发送关停请求等待队员响应；若队员在默认 15 秒内无响应，自动强制终止进程，避免队员卡死导致清理流程永挂
  - **队员进度快照**：实时追踪每个队员跑了多少轮工具调用、累计生成多少文本（粗估），以及最近 10 次工具活动的摘要；未来 TUI/Web UI 可直接展示"队员 X: 12 工具调用, 3.2k tokens, 当前正在用 Bash"。token 数字为粗估，不是精确计费数
- **新增环境变量**：
  - `CODEBUDDY_TEAM_IDLE_DETECTION_DISABLED`：设为 `1` 关闭队员空闲感知（默认启用，关闭后空闲等待立即返回 `true` 不阻塞）
  - `CODEBUDDY_TEAM_SHUTDOWN_GRACEFUL_TIMEOUT_MS`：关停兜底超时毫秒数，默认 `15000`；设为 `0` 禁用强制兜底（纯等待）
  - `CODEBUDDY_BASH_ASSISTANT_BUDGET_MS`：默认 `0`，`>0` 启用主对话响应预算，主 agent 前台命令超过该时长自动转为后台任务保持对话响应（Bash 与 PowerShell 共享）
  - `CODEBUDDY_BASH_AUTO_BACKGROUND_DISABLED`：设为 `1` 关闭超时自动后台化，回到旧 SIGTERM 行为（调试用）

### 🔧 功能改进

- **Bash 工具超时自动后台化**：前台命令到 `timeout` 时不再直接发 `SIGTERM` 杀子进程，而是自动转为后台任务继续跑，返回 `task_id` 供模型用 TaskOutput（兼容旧名 BashOutput）拉取后续进度/结果。`yarn install` / `docker build` / `cargo build` / `make` 等冷跑远超默认 timeout 的长命令不再被工具层冤杀。`sleep` 保留原行为（硬上限是等待语义本身）
- **Bash 工具长命令引导更新**：`tool-bash-description.tpl` 引导更新——长命令（yarn/npm/docker/cargo/make 等）鼓励显式传 `run_in_background: true`，并说明超时不再是"kill"而是"auto-background"的新语义
- **PowerShell 工具超时自动后台化**：对齐 Bash 工具——前台命令到 `timeout` 时不再直接杀进程，而是自动转为后台任务继续跑，返回 `task_id` 供 TaskOutput 查询。`Invoke-WebRequest` 大文件下载、长 `Copy-Item -Recurse`、经由 PowerShell 调用的构建等冷跑超时不再被工具层冤杀。`Start-Sleep` / `sleep` 保留原行为（PowerShell 大小写不敏感）
- **PowerShell 工具后台任务状态查询**：显式传 `run_in_background: true` 的后台命令现在完整支持 TaskOutput 查询——以前是 fire-and-forget，task_id 查不到状态；现在可以和 Bash 一样拉取 stdout/stderr/status
- **PowerShell 工具 Ctrl+B 转后台**：从"未实现"占位符升级为真实功能
- **会话中断语义对齐**：Bash 与 PowerShell 工具均对齐会话中断语义——外部中断信号区分"用户主动取消"和"内部流程切换"两种；内部流程切换时不再杀掉正在跑的命令，改为尝试转为后台继续跑，避免并发调用 / turn 切换冤杀长命令
- **主对话响应预算**：Bash 与 PowerShell 工具共享主对话响应预算（env `CODEBUDDY_BASH_ASSISTANT_BUDGET_MS=<ms>` 启用，默认 `0`=关闭），超过该时长的前台命令自动转为后台任务保持对话响应

### 🐛 问题修复

- **PowerShell 后台任务状态更新**：转后台后任务状态现在会根据真实退出码更新为 `completed`/`failed`（之前永远停留在 `running`，TaskOutput 查询看不到最终状态）
- **PowerShell 后台任务异常回灌**：转后台后若命令晚些时候异常终止，不再冒泡为 Node unhandledRejection 警告，错误详情会回灌到任务的 stderr 输出，供 TaskOutput 查询展示
- **PowerShell 后台文案语义准确**：转后台的原因现在会在返回文案里准确区分超时 / 主对话预算 / Ctrl+B / 显式后台 / 内部中断五种来源，不再复用相近文案造成语义污染

### 📝 开发体验改进

- `/mr` 命令模板强化两条易错点提示：
  - 数据源迁移类改动的代码审查必须显式扫所有 reader（按钮回调、useCallback 闭包一次性快照、DI 一次性 get 等），不能只检查订阅者
  - Changeset 路径强调必须写包级目录 `.changeset/` 而非仓库根目录，避免写错路径导致 CI 识别不到

## [2.94.4] - 2026-05-01

### 🐛 问题修复

- **自定义模型兼容性**：修复自定义模型（如 `custom-local:xxx`）请求中残留不兼容字段（`verbosity`、`reasoning_summary`、`reasoning_effort`）导致第三方 OpenAI 兼容接口返回 400 的问题

## [2.94.3] - 2026-04-29

### 🔧 功能改进

- **模型兼容适配匹配增强**：模型兼容适配器的模型 ID 匹配新增"分段边界子串"兜底规则，覆盖 `org/xxx-model` 这类带命名空间前缀的自定义模型 ID；同时保留精确/前缀匹配优先级并通过边界限制避免短标识误伤

### 🐛 问题修复

- **DeepSeek V4+ 思考模式兼容**：修复自定义 DeepSeek V4 模型（如 `deepseek-v4-flash`）在多轮对话中报 `The reasoning_content in the thinking mode must be passed back to the API` 400 错误的问题。现在即使当前轮未显式启用思考模式，只要历史消息中存在推理字段，也会正确补齐回传
- **错误信息解析**：兼容 OpenAI 格式（`{error: {message, code, type}}`）的上游错误响应，使自定义模型返回的具体报错可在界面中展示，不再被统一替换为 "Server error" 占位文案；解析失败时也会保留原始响应体而非丢弃

## [2.94.2] - 2026-04-28

### 🐛 问题修复

- **私有化部署检测**：移除通过企业端点配置推断 Self-Hosted 部署类型的逻辑，避免在配置了企业端点但实际为云托管场景时错误地将部署类型标记为 Self-Hosted

## [2.94.1] - 2026-04-28

### 🐛 问题修复

- **DeepSeek V4+ 思考模式**：修复使用 DeepSeek V4+ 模型开启思考模式时，历史对话继续发送请求会报 `invalid_request_error` 的问题，现已自动兼容处理
- **自定义模型认证**：修复自定义模型认证问题

## [2.94.0] - 2026-04-28

### 🎉 新功能

- **ComputerUse 工具（实验功能）**：新增 macOS 桌面控制能力，支持截图、鼠标点击/拖拽/滚动、键盘输入与快捷键、窗口等待等 14 种动作。截图直接以图片形式返给模型，无需再单独读取文件。默认关闭，通过环境变量 `CODEBUDDY_COMPUTER_USE_ENABLED=1` 启用，首次使用键鼠动作需在系统设置中为终端授予"辅助功能"与"屏幕录制"权限

### 🔧 功能改进

- **企业微信群机器人语音转文字**：企微群 Bot 的语音消息现可自动读取服务端下发的转写文本（`body.voice.content`）并以 `[语音转文字] ...` 形式喂给模型，无需用户再手动复述；无转写文本时给出明确提示，引导用户改发文字或转发到其他渠道
- **企业微信群机器人图文同发支持**：图文同时发送的 `mixed` 消息不再被静默丢弃；即便 items 结构异常也会以占位符（如 `[mixed 消息但无有效内容]`）兜底，保证消息能进入 agent 处理链路
- **AskUserQuestion 多问题场景修复**:工具调用参数 `title` 丢失时自动兜底补全；前端选项 key 改用稳定索引（`q_0`/`q_1`），避免模型填空字符串或重复文本导致选项互相覆盖、问题静默丢失
- **多渠道（微信/企微/客服）媒体下载统一**:抽取 `channel-media` 公共工具，将微信个人号、企微群 Bot、企微自建应用、微信客服四套独立通道的媒体下载逻辑收敛到一处，路径一致（`os.tmpdir/codebuddy-channel-media/`）、错误处理一致

### 🐛 问题修复

- **Hook 脚本调用服务代理**：修复 Hook 脚本通过 curl 等工具调用本地服务代理接口时，因缺少自定义请求头而被拒绝的问题
- **企业微信自建应用并发消息竞态**：修复图文同发场景下两条独立 POST 并发到达时，`agentState` 重置和共享 `resultSubject` 导致的消息互相覆盖、CLI 端感知不到消息的问题；`waitForAgentCompletion` 改为按 task 隔离的 baselineResult 判断

## [2.93.7] - 2026-04-26

### 🔧 功能改进

- **主 agent 工具精简**：默认 agent 工具链聚焦到 Read / Write / Edit / Bash / PowerShell 等核心工具，删除不再默认挂载的冗余工具；用户在 settings 中自定义工具列表不受影响
- **内建 `/commit` 与 `/commit-push-pr` 命令**：主 agent 内部委派使用，用于统一 Git 提交与 PR 打开流程；用户在 `/` 菜单中不可见
- **Bash / Agent / Skill 工具说明精炼**：模型侧系统提示的工具描述整体瘦身、同时补充子代理提示写法与前后台选择指导
- **长对话恢复**：增强上下文超限后的自动恢复稳定性,减少错误重试时的上下文处理异常
- **自动压缩兜底**：优化长会话下的预处理压缩行为,避免压缩失败时当前输入被意外中断
- **Cost 口径对齐**：`/cost` 展示采用业界一致的语义——`input / cacheRead / cacheWrite` 三者互不相交、相加等于总 input,避免重复计数
- **Token 数值展示统一为 1000 进制**：`/cost`、`/context` 等面板中的 token 数字采用 1000 进制(k / M),与模型厂商文档保持一致
- **跨轮 Memory 去重**：会话内已注入过的 memory 在后续轮次不再重复进入上下文,把"相关记忆"预算留给新的候选
- **自定义 agent 的模型字段仅按 id 精确匹配**：`.codebuddy/agents/*.md` frontmatter 中 `model:` 字段若不是有效模型 id,将回落到主 agent 的当前模型;避免字面量撞名误选到用户自定义模型

### 🐛 问题修复

- **模型请求稳定性**：改善偶发的 `502 socket hang up` 问题。为无代理场景下的 HTTPS 请求启用 TCP keep-alive,对抗中间网关的 idle/NAT 超时;在响应头返回之前发生的连接级失败(ECONNRESET / socket hang up 等)自动透明重试一次,重试严格限制在上游尚未开始推理的阶段,不会导致 token 重复计费

### 📝 文档更新

- **第三方模型对接示例**：`env-vars.md` / `models.md` 新增端点+密钥+主/小/子代理模型的完整配置示例,`settings.json` 的 `env` 字段可用于团队统一配置
- **`relatedModels` 字段文档**：`models.md` 补充 `relatedModels` 字段说明,介绍在 `lite`/`reasoning`/`vision`/`longContext`/`subagent` 等场景下如何关联不同模型 id
- **`trustAll` / `trustedDirectories` 与权限模式的关系**：`iam.md` / `settings.md` 补充说明——这两个字段只影响启动时的目录信任授权提示,不会跳过工具执行权限审批,与 `permissions.defaultMode` 相互独立

## [2.93.6] - 2026-04-25

### 🔧 功能改进

- **Skill/Command/Subagent 模型指定**：skill frontmatter、slash command 的 `model` 字段和 `Agent`/`Teammate` 工具的 `model` 参数，均支持指定 model id / name / variant（`lite`/`reasoning`/`default`），匹配不到或命中 disabled 模型时自动降级到主 agent 当前选中的模型并打 warn 日志，便于定位"配置里写了但没生效"的问题

### 🐛 问题修复

- **后台 Agent 撞名阻塞修复**：会话残留 teammate（如上一团队未清理的 `critic`）会让同名后台 Agent spawn 报 "already active" 并失败；现按 TeamCreate 的幂等策略自动加短 hex 后缀（如 `critic-a3f2`），避免被历史状态挡住
- **PWA 离线加载失败修复**：Service Worker precache 查不到 `/` 报 `non-precached-url`，`navigateFallback` 改为 `/index.html`，后端同步新增 `GET /index.html` 路由与 CSRF 豁免，三处对齐后 PWA 离线启动稳定
- **Canvas 终端刷新丢失连接修复**：刷新后先打开的旧终端 tile 因 canvas-store / terminal-store 两边 `ptySessionId` 不一致走 fallback 创建新 session，表现为"连不上之前的终端"；改为以 canvas-store 为权威源，terminal-store `onLoad` 保留已 hydrate 的 session id，`setTilePty` 同步两边 store

## [2.93.5] - 2026-04-23

### 🔧 功能改进

- **新增模型**：上线 GLM-5-1-MaaS 模型（国内版），扩展可用模型选择

## [2.93.4] - 2026-04-23

### 🔧 功能改进

- **新增模型**：上线 Hy3 preview 模型（国内版），支持 192K 上下文窗口、推理能力和工具调用
- **iOA 模型更新**：Hy3 模型从 dev-0402 版本更新到 preview 版本，优化推理参数配置（temperature: 0.7→0.9，移除 top_k 和 repetition_penalty）

## [2.93.3] - 2026-04-22

### 🔧 功能改进

- **权限系统**：已信任目录的项目级 allow 规则提升到可覆盖高危命令拦截，未信任目录行为不变
- **CORS 通配符**：CORS 白名单支持子域通配（`https://*.example.com`）和全部允许（`*`）两种新模式
- **局域网访问**：`--host 0.0.0.0` 绑定时自动将本机局域网 IP 加入 CORS 和 Host 白名单，无需额外配置即可通过局域网 IP 访问 Web UI

## [2.93.2] - 2026-04-22

### 🐛 问题修复

- **文件树加载失败恢复**：修复 Set 类型字段持久化后恢复为空对象导致文件树永远显示"加载失败"的问题，新增重试按钮支持手动恢复
- **持久化序列化**：backendPersist middleware 保存前自动将 Set/Map 转为数组，避免 JSON.stringify 产出空对象
- **Marketplace 存储**：为市场配置文件 (`known_marketplaces.json`) 写入引入跨进程文件锁与临时文件原子 `rename`，修复多进程并发写入时的 JSON 截断与 UTF-8 非法序列问题
- **损坏文件自愈**：读取到无法解析的配置时自动备份为 `.broken-<timestamp>` 并以空配置重建，避免后续保存把用户已安装列表整体覆盖丢失
- **命令 XML 解析**：修复历史回放时命令 XML（如 `/clear`）经 decode 截断的问题，改为在 decode 前从原始 input_text 预处理
- **协议内容解码**：空内容块不再 fallback 为 JSON.stringify 输出，避免产出无意义的序列化文本
- **iOA 模型配置**：新增混元3模型(hy3-dev-0402)支持

## [2.93.1] - 2026-04-21

### 🔧 功能改进

- **新增模型**：上线 Kimi-K2.6 模型（国内版 + iOA），支持 256K 上下文窗口、图片理解和推理能力

## [2.93.0] - 2026-04-20

### 🎉 新功能

- **画布独立视图**：支持将单个终端面板或整个画布在独立窗口中打开，便于多显示器工作流
- **画布 Tile 窗口管理**：新增最大化、最小化、复刻终端等窗口操作，最大化采用固定定位脱离画布变换
- **画布交互增强**：Figma/Miro 标准滚轮交互（滚轮平移、Cmd+滚轮缩放）、拖动惯性、透明 overlay 抢占指针事件

### 🔧 功能改进

- **终端状态持久化**：画布中终端的 PTY Session ID 和工作目录随画布状态持久化，刷新后自动恢复
- **PTY 闲置释放**：SSE 订阅纳入客户端检测，避免活跃连接被误释放；zsh 首行反白标记消除
- **Gateway 静态文件路由**：PWA 相关文件（logo、SW 脚本等）正确豁免 CSRF 验证
- **持久化防丢失**：beforeunload/pagehide 时同步 flush 防抖队列，防止刷新丢失状态
- **工具参数流式渲染**：修复多个正确性问题，让 Web UI 在模型生成工具参数过程中更稳、更贴近实际输入
  - 并行调用多个工具时，所有工具的参数都能正确渲染（此前只处理第一个）
  - 首帧同时携带工具名和参数起始片段的场景不再丢首段，避免解析失败导致空白
  - 首帧后参数流式缺失索引或映射时不再错误落到 index=0，避免参数串号
  - 参数流结束时使用最终字符串做一次一致性校正，修正流式推断中途的偏差
  - 解析到空对象时不再向前端发送，避免已渲染内容被瞬间清空闪白
- **前端渲染稳定性**：`tool_call` 重复到达同一 id 时不再覆盖已累积的参数
- **流式异常处理**：流式 JSON 解析器将预期的 `SyntaxError` 与意外错误区分，后者通过回调上报便于定位
- **启动性能优化**：Shell snapshot 预热推迟到启动后 2 秒触发，避开初始化阶段竞争；MCP 配置读取增加并发去重
- **Windows Git Bash 检测优化**：未安装 Git Bash 时不再强制退出，改为打印提示并自动降级到 PowerShell

### 🐛 问题修复

- **市场配置存储**：为市场配置文件的写操作添加序列化锁，防止并发读写导致数据丢失
- **市场查重**：修复添加市场时查重逻辑误判问题，改用存储键匹配替代运行时名称匹配

## [2.92.0] - 2026-04-20

### 🎉 新功能

- **画布独立视图**：支持将单个终端面板或整个画布在独立窗口中打开，便于多显示器工作流
- **画布 Tile 窗口管理**：新增最大化、最小化、复刻终端等窗口操作，最大化采用固定定位脱离画布变换
- **画布交互增强**：Figma/Miro 标准滚轮交互（滚轮平移、Cmd+滚轮缩放）、拖动惯性、透明 overlay 抢占指针事件

### 🔧 功能改进

- **终端状态持久化**：画布中终端的 PTY Session ID 和工作目录随画布状态持久化，刷新后自动恢复
- **PTY 闲置释放**：SSE 订阅纳入客户端检测，避免活跃连接被误释放；zsh 首行反白标记消除
- **Gateway 静态文件路由**：PWA 相关文件（logo、SW 脚本等）正确豁免 CSRF 验证
- **持久化防丢失**：beforeunload/pagehide 时同步 flush 防抖队列，防止刷新丢失状态
- **工具参数流式渲染**：修复多个正确性问题，让 Web UI 在模型生成工具参数过程中更稳、更贴近实际输入
  - 并行调用多个工具时，所有工具的参数都能正确渲染（此前只处理第一个）
  - 首帧同时携带工具名和参数起始片段的场景不再丢首段，避免解析失败导致空白
  - 首帧后参数流式缺失索引或映射时不再错误落到 index=0，避免参数串号
  - 参数流结束时使用最终字符串做一次一致性校正，修正流式推断中途的偏差
  - 解析到空对象时不再向前端发送，避免已渲染内容被瞬间清空闪白
- **前端渲染稳定性**：`tool_call` 重复到达同一 id 时不再覆盖已累积的参数
- **流式异常处理**：流式 JSON 解析器将预期的 `SyntaxError` 与意外错误区分，后者通过回调上报便于定位
- **启动性能优化**：Shell snapshot 预热推迟到启动后 2 秒触发，避开初始化阶段竞争；MCP 配置读取增加并发去重
- **Windows Git Bash 检测优化**：未安装 Git Bash 时不再强制退出，改为打印提示并自动降级到 PowerShell

### 🐛 问题修复

- **市场配置存储**：为市场配置文件的写操作添加序列化锁，防止并发读写导致数据丢失
- **市场查重**：修复添加市场时查重逻辑误判问题，改用存储键匹配替代运行时名称匹配

## [2.91.0] - 2026-04-17

### 🎉 新功能

- **Canvas 画布终端**：新增 `#/canvas` 视图，支持无限画布自由布局多终端 Tile，包含拖拽移动、8 向 resize、网格吸附、缩放平移、框选和 per-pane 终端标题显示
- **消息预检压缩**：用户发送消息前自动检查上下文占比，超过阈值（默认 10%）时先压缩再处理消息，避免上下文过大影响对话质量。压缩后直接处理用户原始消息，无需额外的 "Please continue" 恢复步骤。支持通过环境变量 `CODEBUDDY_PRE_MESSAGE_COMPACT_PCT` 自定义阈值

### 🔧 功能改进

- **MCP listTools 静默失败**：MCP Server 的 listTools 调用失败时降级为 debug 日志并返回缓存结果，增加 30 秒冷却期避免频繁重试
- **Agent Tool 模板**：更新 Agent 工具描述模板，省略 subagent_type 时默认使用 general-purpose 而非 fork 模式
- **权限安全加固**：HIGH 级别危险命令（如 sudo、rm -rf）在 bypass 模式下也需要用户确认，用户可通过配置 allow 规则覆盖
- **DeferExecuteTool 双模式权限**：支持 `DeferExecuteTool(*)` 和 `DeferExecuteTool(TeamCreate)` 等规则匹配，同时保留目标工具的权限检查
- **新增模型**：GLM-4.7 及其他大语言模型
- **SDK Usage Cache 字段**：在 ResultMessage 和 AssistantMessage 中填充 cache_read_input_tokens 和 cache_creation_input_tokens，替代之前的 null 值
- **Session 持久化**：normalizeUsageFormat 新增 cache 相关字段的 camelCase/snake_case 转换
- **Team 功能开关**：通过 CODEBUDDY_CODE_EXPERIMENTAL_AGENT_TEAMS 环境变量控制 Agent Teams 功能的启停
- **上下文使用量查询优化**：修复 `getLatestUsage` 在 resume 后链式遍历断裂时返回空的问题，增加 fallback 到 session.history 直接遍历；移除 compact 后过度过滤导致 usage 数据丢失的逻辑
- **安装脚本**：将下载源切换为全球加速域名，提升海外用户安装速度；更新文档中的安装脚本地址
- **system-reminder 属性简化**：将 `data-codebuddy-role` 属性统一重命名为 `data-role`，减少内部标记对品牌名称的耦合

### 🐛 Bug 修复

- **Headless 模式代理**：在 headless 构建中打包 undici，修复代理环境下 MCP 连接失败的问题

## [2.90.0] - 2026-04-16

### 🎉 新功能

- **Canvas 画布终端**：新增 `#/canvas` 视图，支持无限画布自由布局多终端 Tile，包含拖拽移动、8 向 resize、网格吸附、缩放平移、框选和 per-pane 终端标题显示
- **消息预检压缩**：用户发送消息前自动检查上下文占比，超过阈值（默认 10%）时先压缩再处理消息，避免上下文过大影响对话质量。压缩后直接处理用户原始消息，无需额外的 "Please continue" 恢复步骤。支持通过环境变量 `CODEBUDDY_PRE_MESSAGE_COMPACT_PCT` 自定义阈值
- **UI 组件状态持久化**：新增 `/api/v1/storage` REST API，将 UI 组件状态（主题、语言、终端布局、编辑器状态、画布视口等）从浏览器本地存储迁移到后端 JSON 文件持久化，支持 global/workspace 两级作用域。前端通过 Zustand backendPersist middleware 自动订阅、防抖保存和启动恢复

### 🔧 功能改进

- **MCP listTools 静默失败**：MCP Server 的 listTools 调用失败时降级为 debug 日志并返回缓存结果，增加 30 秒冷却期避免频繁重试
- **Agent Tool 模板**：更新 Agent 工具描述模板，省略 subagent_type 时默认使用 general-purpose 而非 fork 模式
- **SDK Usage Cache 字段**：在 ResultMessage 和 AssistantMessage 中填充 cache_read_input_tokens 和 cache_creation_input_tokens，替代之前的 null 值
- **Session 持久化**：normalizeUsageFormat 新增 cache 相关字段的 camelCase/snake_case 转换
- **Team 功能开关**：通过 CODEBUDDY_CODE_EXPERIMENTAL_AGENT_TEAMS 环境变量控制 Agent Teams 功能的启停
- **上下文使用量查询优化**：修复 `getLatestUsage` 在 resume 后链式遍历断裂时返回空的问题，增加 fallback 到 session.history 直接遍历；移除 compact 后过度过滤导致 usage 数据丢失的逻辑
- **安装脚本**：将下载源切换为全球加速域名，提升海外用户安装速度；更新文档中的安装脚本地址
- **system-reminder 属性简化**：将 `data-codebuddy-role` 属性统一重命名为 `data-role`，减少内部标记对品牌名称的耦合

### 🐛 Bug 修复

- **Headless 模式代理**：在 headless 构建中打包 undici，修复代理环境下 MCP 连接失败的问题

## [2.89.0] - 2026-04-16

### 🎉 新功能

- **Canvas 画布终端**：新增 `#/canvas` 视图，支持无限画布自由布局多终端 Tile，包含拖拽移动、8 向 resize、网格吸附、缩放平移、框选和 per-pane 终端标题显示
- **消息预检压缩**：用户发送消息前自动检查上下文占比，超过阈值（默认 10%）时先压缩再处理消息，避免上下文过大影响对话质量。压缩后直接处理用户原始消息，无需额外的 "Please continue" 恢复步骤。支持通过环境变量 `CODEBUDDY_PRE_MESSAGE_COMPACT_PCT` 自定义阈值

### 🔧 功能改进

- **MCP listTools 静默失败**：MCP Server 的 listTools 调用失败时降级为 debug 日志并返回缓存结果，增加 30 秒冷却期避免频繁重试
- **Agent Tool 模板**：更新 Agent 工具描述模板，省略 subagent_type 时默认使用 general-purpose 而非 fork 模式
- **SDK Usage Cache 字段**：在 ResultMessage 和 AssistantMessage 中填充 cache_read_input_tokens 和 cache_creation_input_tokens，替代之前的 null 值
- **Session 持久化**：normalizeUsageFormat 新增 cache 相关字段的 camelCase/snake_case 转换
- **Team 功能开关**：通过 CODEBUDDY_CODE_EXPERIMENTAL_AGENT_TEAMS 环境变量控制 Agent Teams 功能的启停
- **上下文使用量查询优化**：修复 `getLatestUsage` 在 resume 后链式遍历断裂时返回空的问题，增加 fallback 到 session.history 直接遍历；移除 compact 后过度过滤导致 usage 数据丢失的逻辑
- **安装脚本**：将下载源切换为全球加速域名，提升海外用户安装速度；更新文档中的安装脚本地址

### 🐛 Bug 修复

- **Headless 模式代理**：在 headless 构建中打包 undici，修复代理环境下 MCP 连接失败的问题

## [2.88.0] - 2026-04-14

### 🎉 新功能

- **工具结果外部化存储**：支持 blob-store 对大型工具输出进行外部化存储，新增 OutputSpiller 模块实现流式输出溢写到磁盘，避免超大输出撑爆内存
- **自动压缩阈值覆盖**：新增 `CODEBUDDY_AUTOCOMPACT_PCT_OVERRIDE` 环境变量，允许用户自定义上下文自动压缩触发阈值（1-100 百分比）
- **子代理 blob 隔离**：session-store 支持 parentSessionId，实现子代理的 blob 存储隔离

### 🔧 功能改进

- **延迟加载工具权限透传**：修复通过代理执行器调用延迟加载工具时，权限检查针对代理执行器自身而非目标工具的问题，现在每个延迟加载工具独立进行权限校验
- **工具搜索精确化**：移除工具搜索的模糊匹配（错别字容错）功能，搜索结果更精确
- **Shell 输出限制提升**：bash-tool 集成 OutputSpiller，默认输出限制从 20K 提升至 30K，上限从 100K 提升至 150K

### 🐛 Bug 修复

- **安全加固**：将 shell 命令执行从 `exec` 替换为 `execFile` 数组参数模式，防止潜在的命令注入风险
- **MCP defer_loading 配置兼容**：修复用户在 MCP 配置的 `tools` 中使用不同格式的工具名作为 key 时，`defer_loading` 配置不生效的问题，现在支持 rawToolName、serverName__toolName、mcp__serverName__toolName 三种格式匹配
- **MCP OAuth 回调路径豁免**：请求校验中间件豁免 MCP OAuth 回调路径，修复浏览器从外部 OAuth 服务器重定向回来时因无法携带自定义头而被拒绝的问题

### 📝 文档

- 新增独立的环境变量参考文档 `docs/env-vars.md`
- 简化 `docs/settings.md` 环境变量章节并交叉引用 env-vars.md
- 更新子代理文档 `docs/sub-agents.md`

## [2.87.0] - 2026-04-14

### 🎉 新功能

- **委托模式 prompt 重构**：重新设计委托模式系统提示，完整覆盖角色定义、工具规则、通知格式、任务工作流、prompt 编写指南、交互示例
- **团队 leader prompt 模板化**：从硬编码提取为可配置模板，支持动态成员列表和完整协调指南
- **委托模式工具白名单**：收窄为 Agent、TaskStop、SendMessage、AskUserQuestion、StructuredOutput 五个核心协调工具
- **Subagent 权限继承配置**：支持 CLI (`--subagent-permission-mode`)、环境变量 (`CODEBUDDY_SUBAGENT_PERMISSION_MODE`)、Settings (`permissions.subagentPermissionMode`) 三层配置 subagent 默认权限模式
- **委托模式禁用 fork**：委托模式下不走 fork 路径，强制使用标准 subagent
- **Daemon 默认委托模式**：daemon 启动时默认使用委托模式，支持通过 `--permission-mode` 自定义
- **Daemon 参数继承**：daemon 子进程继承父进程的 CLI 参数（model、mcp-config、tools 等）

### 🔧 功能改进

- **委托模式颜色调整**：从红棕色调整为琥珀/金色，更有"调度/指挥"视觉含义
- **权限继承映射表**：使用可扩展映射表替代硬编码 if-else，便于新增权限模式
- **E2E 测试基础设施**：新增 Record/Replay 模式支持 E2E 测试，录制模式通过 `CODEBUDDY_RECORD_DIR` 录制模型响应，回放模式通过 `CODEBUDDY_REPLAY_DIR` 回放，支持流式和非流式响应，新增 13 个 E2E 测试用例覆盖核心工具和多轮对话场景

### 🐛 Bug 修复

- **Compact 同步死锁修复**：修复 subagent 场景下 compact 永不执行的三重根因——重置 abortController、使用 `agentService.run(agent)` 确保 compact agent 正确识别、清除 `providerData.skipRun` 标志避免恢复失败

## [2.86.0] - 2026-04-13

### 🎉 新功能

- **Agent Team 多后端架构**：团队成员支持 in-process（默认）、独立进程（detached-process）、tmux 可视化三种运行后端，通过 `--swarm` 参数或环境变量切换
- **ACP 事件流衔接**：独立进程 teammate 的 SSE 实时事件转发 + 文件历史回放双路径，Web UI 自动展示成员对话
- **Permission Bridge**：独立进程 teammate 的工具审批通过 HTTP API 路由回 leader 统一审批
- **通信层抽象**：预留分布式 teammate 支持，本机用文件 Mailbox，远程用 HTTP API，自动检测选择

### 🔧 功能改进

- **Gateway 安全加固**：新增请求校验中间件，所有 API 请求必须携带 `X-CodeBuddy-Request` 自定义头，防止跨站请求伪造；CORS 中间件加固为非法源的所有请求（含非 OPTIONS）均直接拒绝；`/info` 和 `/health` 端点新增认证保护
- **OpenAPI 文档增强**：完善 ACP 协议文档，新增 12 个 JSON-RPC method 的完整参数/响应示例、13 种 SessionUpdate 类型 schema、AgentPhaseInfo/TeamUpdate 等扩展类型定义，补齐 ~30 个已实现但未文档化的 API 端点
- **WebFetch 工具**：将 HTML 转换库从 html-to-text 替换为 turndown，提升 Markdown 输出质量；User-Agent 改为 Chrome 格式以解决百度等反爬站点抓取失败问题；增加 HTML 预清理步骤去除噪音标签；超时时间从 10s 调整为 30s
- **对话历史按钮**：StatusBar 历史按钮始终显示，移除不必要的 `/sessions` API 轮询

### 🐛 问题修复

- **ACP thinking 格式**：将 thinking 内容从非标准 `agent_message_chunk` 修正为 ACP 标准 `agent_thought_chunk` 类型
- **消息内容提取**：`extractTextContent` 支持清理 `<teammate-message>` 标签，避免干扰用户消息匹配
- **工具权限复合命令**：修复复合命令中安全 allow 规则（如 `Bash(cd:*)`) 意外放行高危子命令（如 `git reset --hard`）的问题，allow 规则现在要求所有子命令都匹配才能生效
- **工具权限 BypassPermissions**：修复 BypassPermissions 模式下 CRITICAL 级别命令被自动批准、不弹授权确认的问题
- **配置目录**：修复 7 处绕过 `CODEBUDDY_CONFIG_DIR` 的硬编码路径，确保自定义配置目录下的模型配置、调试日志、Tunnel 状态、凭证存储等功能正常工作
- **Shell 执行挂起**：修复前台命令执行时进程已退出但状态不更新、永久显示 "running" 的问题
- **进程 FD 泄漏**：修复 Process API 的 PTY 模式下额外文件描述符未关闭的问题，补齐进程退出时的批量清理
- **Web UI 链接**：TUI Header 中显示的 Web UI 链接现在自动携带 sessionId 参数，点击后可直接连接当前会话
- **React Hook 顺序**：修复 Web UI 团队成员工具组全隐藏时的 React #310 错误
- **TUI 高亮崩溃**：代码高亮和 Markdown 表格渲染添加 try-catch 防护和 fallback
- **团队删除僵尸进程**：TeamDelete 主动 kill 残留 detached 成员，不再拒绝删除

## [2.85.0] - 2026-04-12

### 🚀 新功能

- **Daemon 防休眠**：daemon 模式运行时自动阻止系统 idle sleep（macOS caffeinate / Linux systemd-inhibit / Windows powercfg），可通过 `CODEBUDDY_DAEMON_ALLOW_SLEEP=1` 禁用
- **唤醒自动重连**：系统从休眠恢复后自动检测并重连所有微信/企微长连接
- **自动更新重启**：daemon 检测到新版本安装后，等待空闲自动重启（保持端口和 channel 连接不中断）
- **Channel 自动连接**：daemon 启动时自动连接所有已保存凭证的微信/企微实例，无需手动操作

### 🔧 功能改进

- **Daemon 状态提示**：`daemon start` 和 `daemon restart` 输出增强功能状态摘要
- **TUI Markdown 渲染优化**：禁用删除线解析（避免 `~` 近似数被误解析）、链接升级为 OSC 8 终端超链接、引用块加竖线前缀、标题层级区分、escape token 处理、列表编号算法化（移除硬编码数组）
- **TUI 表格渲染重写**：移除 cli-table3 依赖，自研 Unicode Box Drawing 表格渲染，支持终端宽度自适应列宽分配、单元格自动换行、窄终端 key-value 竖排降级
- **TUI Header 布局优化**：窄终端（<60 列）StandardBox 移除 Logo 降低高度，自适应内容大小

## [2.84.0] - 2026-04-12

### 🎉 新功能

- **使用统计 API**：新增 `GET /api/v1/stats` 和 `GET /api/v1/stats/session` 端点，提供历史使用统计和会话实时成本
- **链路追踪 API**：新增 `GET /api/v1/traces`、`GET /api/v1/traces/:traceId`、`DELETE /api/v1/traces` 端点，支持多 Worker 远程代理
- **定时任务 API**：新增 `GET/POST/DELETE /api/v1/scheduled-tasks` 端点，支持 cron 表达式和持久化任务

### 🔧 功能改进

- **Cron 调度优化**：修复并发竞态条件，新增 enqueue-first + drain 合并模式；支持 lastFiredAt 持久化
- **Trace 采集系统**：文件持久化存储、SDK TracingProcessor 桥接、Hook 上下文注入
- **Web UI 统计/追踪/定时任务视图**：新增统计、链路追踪、定时任务可视化视图；补充国际化文案
- **Agent Phase 国际化**：子代理阶段标签（准备中/等待模型/接收中/执行工具等）全面国际化，新增等待权限确认、等待用户回答、重试中三种状态
- **中断自动滚动**：权限确认或用户问题出现时自动滚动到底部，确保操作面板可见
- **ACP 网络重试**：ACP 请求网络错误或超时时自动重连重试（最多 2 次），提升弱网环境稳定性
- **E2E 测试**：新增 Stats/Traces/Scheduled Tasks 三组 E2E 测试（30 个用例）；补充 ACP 协议 6 个 JSON-RPC method 覆盖

### 🐛 问题修复

- **会话中断误报**：修复 CLI 启动握手请求导致 session 被误判为用户中断的问题，避免后续消息无法正常发送
- **推荐建议消失**：修复对话结束后推荐建议被内部消息意外取消的竞态问题
- **记忆提取隔离**：后台记忆提取不再写入主会话历史记录，避免干扰推荐建议和对话状态
- **会话恢复**：修复已中断的会话在 /resume 切换时无法自动恢复的问题
- **实例切换 IP 适配**：切换 Worker 实例时自动使用当前浏览器访问的 host 替换后端注册的局域网 IP，修复通过 Tailscale 等网络路径远程访问时切换实例跳转到不可达地址的问题
- **ACP 消息队列 drain**：修复 ACP 模式下连续发送多条消息时排队消息无事件转发导致 Web UI 卡住的问题
- **Compact 取消回滚**：取消压缩操作时不再错误标记为已压缩状态，同时清理历史中的压缩消息
- **/clear 防重入**：修复 /clear 命令重置状态后导致消息重复发送的竞态问题
- **Print 模式后台任务**：print 模式退出前等待后台 Agent 任务完成，避免进程过早退出导致任务被终止

### 📝 文档更新

- **HTTP API 文档**：补充 Stats/Traces/Scheduled Tasks API 端点文档
- **CLI 参考**：更新命令行参数说明
- **斜杠命令文档**：补充新增斜杠命令说明

## [2.83.1] - 2026-04-10

### 🔧 功能改进

- **延迟工具加载配置**：使用 `waitConfiguration()` 替代同步缓存获取产品配置，确保配置就绪后再读取；ToolSearch 和 DeferExecuteTool 在全局延迟加载关闭时自动隐藏

### 🐛 问题修复

- **MCP 配置加载**：修复 ACP 模式下初始化时序问题，确保在 middleware 执行前正确禁用文件系统 MCP 配置加载
- **Trace 初始化**：修复 headless/SDK 模式下首次请求可能命中空 Span 的竞态问题

## [2.83.0] - 2026-04-10

### 🎉 新功能

- **Fork Subagent**：省略 `subagent_type` 参数时，Agent 工具自动进入 Fork 模式，继承父 Agent 的完整上下文（系统提示、工具、对话历史），适用于需要当前上下文的并行任务
- **对话分支**：新增 `/fork` 和 `/branch` 斜杠命令，支持在当前对话位置创建分支，复制活跃历史到新 session 并自动切换

### 🔧 功能改进

- **Fork 同步/后台按需**：Fork Subagent 不再强制后台执行，默认同步阻塞，指定 `run_in_background=true` 时后台执行
- **SendMessage 始终可用**：SendMessage 工具不再需要 team 条件判断，在任何场景下均可使用
- **Memory 注入优化**：Auto Memory 上下文提示从末尾注入改为首条消息注入，提升 prompt cache 命中率；新增 fallback 检测确保 resume 后记忆不丢失
- **SystemReminder 精简**：移除 TODO-LIST 自动注入逻辑，减少不必要的上下文占用
- **链路追踪日志**：在请求入口和 TraceStartHook 中增加 traceId/spanId 日志，便于排查链路追踪问题
- **插件 Agent 配置增强**：插件 `settings.json` 的 agent 配置不再受启用状态限制，支持独立 `settings.json` 文件加载 agent 定义
- **Settings Agent 覆盖优化**：`settings.agent` 和插件 agent 均改为 patch-in-place 方式覆盖默认 agent 的 instructions/tools，不再改变 defaultAgentName
- **CLI `--agent` 参数**：新增 `--agent <agent>` 命令行参数，支持在启动时指定当前会话使用的 agent，优先级高于 settings 配置

### 🐛 问题修复

- **文件锁 PID 检查**：进程崩溃后文件锁能立即回收，不再需要等待 5 分钟超时
- **Settings 写入降级**：文件锁获取失败时优雅降级而非抛出未处理异常
- **后台会话 attach**：`attach` 命令对 `--bg` 启动的会话优先跟踪日志输出，而非只打印 HTTP 地址
- **短命令退出**：`ps/logs/attach/kill` 等命令执行完后立即退出
- **Headless 路由**：修复 `--output-format=stream-json` 和 `--input-format=stream-json` 等号格式参数无法正确路由到 headless bundle 的问题
- **MCP OAuth 认证**：修复 OAuth 回调路径不匹配导致认证失败的问题，同时支持两种回调路径以保证兼容性
- **Bedrock 模型兼容**：修复消息 content 字段为空时 Bedrock ConverseStream API 返回 400 错误的问题
- **stream-json 错误输出**：修复 stream-json 模式下 uncaught exception 错误信息输出到 stderr 导致 JSON 流被污染的问题，改为以 JSON 格式输出到 stdout

## [2.82.0] - 2026-04-10

### 🎉 新功能

- **Fork Subagent**：省略 `subagent_type` 参数时，Agent 工具自动进入 Fork 模式，继承父 Agent 的完整上下文（系统提示、工具、对话历史）并在后台运行，适用于需要当前上下文的并行任务
- **对话分支**：新增 `/fork` 和 `/branch` 斜杠命令，支持在当前对话位置创建分支，复制活跃历史到新 session 并自动切换

### 🔧 功能改进

- **Memory 注入优化**：Auto Memory 上下文提示从末尾注入改为首条消息注入，提升 prompt cache 命中率；新增 fallback 检测确保 resume 后记忆不丢失
- **SystemReminder 精简**：移除 TODO-LIST 自动注入逻辑，减少不必要的上下文占用
- **链路追踪日志**：在请求入口和 TraceStartHook 中增加 traceId/spanId 日志，便于排查链路追踪问题
- **插件 Agent 配置增强**：插件 `settings.json` 的 agent 配置不再受启用状态限制，支持独立 `settings.json` 文件加载 agent 定义
- **Settings Agent 覆盖优化**：`settings.agent` 和插件 agent 均改为 patch-in-place 方式覆盖默认 agent 的 instructions/tools，不再改变 defaultAgentName
- **CLI `--agent` 参数**：新增 `--agent <agent>` 命令行参数，支持在启动时指定当前会话使用的 agent，优先级高于 settings 配置

### 🐛 问题修复

- **文件锁 PID 检查**：进程崩溃后文件锁能立即回收，不再需要等待 5 分钟超时
- **Settings 写入降级**：文件锁获取失败时优雅降级而非抛出未处理异常
- **后台会话 attach**：`attach` 命令对 `--bg` 启动的会话优先跟踪日志输出，而非只打印 HTTP 地址
- **短命令退出**：`ps/logs/attach/kill` 等命令执行完后立即退出
- **Headless 路由**：修复 `--output-format=stream-json` 和 `--input-format=stream-json` 等号格式参数无法正确路由到 headless bundle 的问题
- **MCP OAuth 认证**：修复 OAuth 回调路径不匹配导致认证失败的问题，同时支持两种回调路径以保证兼容性
- **Bedrock 模型兼容**：修复消息 content 字段为空时 Bedrock ConverseStream API 返回 400 错误的问题
- **stream-json 错误输出**：修复 stream-json 模式下 uncaught exception 错误信息输出到 stderr 导致 JSON 流被污染的问题，改为以 JSON 格式输出到 stdout

## [2.81.2] - 2026-04-09

### 🔧 功能改进

- **插件安装 scope 选择**：安装插件时支持选择安装范围（用户级/项目级/本地级），已安装插件显示 scope 标签
- **Subagent 前置文本隐藏**：对话流中隐藏模型在调用子代理前输出的描述性文字，减少视觉噪音
- **换行按钮仅移动端显示**：桌面端可用 Shift+Enter 换行，移除冗余按钮
- **单工具无竖线**：工具组仅一个条目时不显示左侧 timeline 连接线
- **代码块样式统一**：SyntaxHighlighter 统一添加 codeTagProps 去除多余背景色和文字阴影

### 🐛 Bug 修复

- **Settings 损坏文件保护**：settings.json 存在 JSON 语法错误时，阻止写入操作覆盖原文件，防止配置丢失

## [2.81.1] - 2026-04-08

### 🔧 功能改进

- **system-reminder 分类体系**：为非规则型 system-reminder 标签添加 data-codebuddy-role 属性，支持上下文压缩时精确区分和恢复不同类型的系统提醒
- **正则兼容性**：更新所有 system-reminder 相关正则表达式以兼容带属性的标签格式
- **PromptManager 竞态修复**：采用原子替换避免模板清空后异步加载期间的空模板问题
- **流式工具名显示**：在模型流式输出阶段显示当前正在调用的工具名称

### 📝 文档更新

- **快捷键文档**：新增快捷键配置文档（中文/英文/繁体中文）
- **多语言文档同步**：同步更新环境变量、记忆系统、设置、工具参考等文档的多语言版本
- **发布说明**：补充 v2.79.1、v2.80.0、v2.81.0 版本的多语言发布说明

## [2.81.0] - 2026-04-08

### 🎉 新功能

- **命令面板**：支持 Cmd+Shift+P (Mac) / Ctrl+Shift+P (Windows) 打开全局命令面板，模糊搜索命令、视图导航和操作
- **全局快捷键**：新增 5 个快捷键 — 命令面板、侧边栏切换、终端切换、新建对话、打开设置
- **Toast 通知系统**：新增统一的 Toast 通知组件，替代 console.error 静默吞噬
- **Error Boundary**：新增全局错误边界，防止组件崩溃导致白屏
- **工具过程折叠**：Agent 执行完成后工具调用自动折叠为摘要行，按需展开查看细节

### 🔧 功能改进

- **确认对话框统一**：新增 ConfirmDialog 组件，替换碎片化的确认实现
- **状态栏优化**：补全所有视图标题，增加模型名和连接状态显示
- **无障碍增强**：添加全局 focus-visible 焦点样式、ARIA 角色标注、disabled 状态规范
- **移动端适配**：InputBox 安全区域适配、iOS 点击高亮修复、PWA manifest 支持
- **设计系统**：新增交互状态 CSS 变量、Tailwind 设计 token 扩展（圆角/过渡/z-index）
- **边框对比度**：修复浅色/深色主题边框几乎不可见的问题
- **插件市场来源校验**：扩展可信 Git 托管域名支持，新增 cnb.cool 和 cnb.woa.com 作为可信来源，同时将 `codebuddy-plugins-official` 加入官方保留名称白名单
- **ACP 协议合规**：移除不符合 ACP 规范的自定义 `state_update` 消息类型，消除 `as any` 类型绕过
- **Settings agent 配置**：新增 `settings.json` 的 `agent` 字段，支持通过配置文件指定默认 agent

### 🐛 Bug 修复

- **Compact 后 Agent 恢复**：修复上下文压缩后 session 错误使用 compact agent 的问题，确保后续对话恢复到压缩前的 agent
- **AskUserQuestion 输入规范化**：修复模型返回错误字段名（answers 代替 options）、纯字符串数组等格式问题，在工具层和 UI 层多点防御

## [2.80.0] - 2026-04-08

### 🎉 新功能

- **Windows PowerShell 工具**：新增原生 PowerShell 命令执行工具，支持 PowerShell 7+ 和 Windows PowerShell 5.1，自动检测版本并适配语法指导
- **无 Git Bash 降级支持**：Windows 上未安装 Git Bash 时，自动禁用 Bash 工具，PowerShell 工具成为唯一 shell 工具，不再崩溃退出
- **GLM-5.1 模型**：新增 GLM-5.1 及 GLM-5.1-ioa 模型配置
- **Memory 系统增强**：Typed Memory 默认启用，使用 4 种记忆类型（user/feedback/project/reference）结构化管理记忆
- **记忆相关性选择**：根据用户查询自动选择最多 5 个相关记忆注入上下文
- **后台记忆提取**：对话结束后可自动从对话中提取记忆（需手动启用）
- **记忆新鲜度管理**：超过 1 天的记忆附带陈旧警告，提醒验证后再使用
- **记忆验证机制**：使用记忆中的文件路径或函数名前，提醒先验证其是否仍存在

### 🔧 功能改进

- **PowerShell 安全检查**：内置 24 项安全验证，覆盖代码注入、下载执行、提权操作等危险模式
- **Windows 进程管理增强**：使用 taskkill 进程树终止替代简单 kill，提升 Windows 上的进程清理可靠性
- **Windows 退出码语义**：正确解释 robocopy、xcopy 等 Windows 工具的非标准退出码
- **JSON 参数修复增强**：修复 LLM 输出中 `">` 被误用为 `":` 导致工具调用参数解析失败的问题，新增预处理 + jsonrepair 的回退修复链路
- **插件更新容错**：插件安装路径丢失时自动探测或重新安装，避免更新失败
- **评价面板交互**：评价面板打开时仅拦截评分按键，不再禁用整个输入框
- **请求兼容性**：移除尾部无 tool_calls 的 assistant 消息，兼容更多 OpenAI 兼容 API
- **企微群聊权限回复修复**：支持带 @机器人名 前缀的群聊消息，正确识别权限确认关键词
- **群聊禁用下一步建议**：群聊场景自动跳过"下一步建议"，避免打扰群成员
- **群聊欢迎消息优化**：区分群聊和私聊的欢迎语，群聊提示 @机器人 提问
- **群聊权限请求提示**：群聊中权限确认消息添加 [请回复确认] 前缀

### 🐛 问题修复

- **终端资源泄漏**：修复进程退出时 Web UI 终端 PTY 会话未被清理的问题，防止系统 PTY 设备耗尽
- **AskUserQuestion 防御性改进**：修复空问题/空选项时组件未正确处理的问题，增加自动拒绝无效问题、过滤空标签选项、规范化 question_request 事件数据

## [2.79.1] - 2026-04-07

### 🎉 新功能

- **系统监控视图**：Web UI 新增 Metrics 页面，展示系统 CPU/内存/磁盘使用概览和各实例进程级资源指标（RSS、Heap、运行时长），支持 8 秒自动轮询刷新
- **Daemon 常驻模式**：支持以后台守护进程方式运行 CLI，提供 `daemon start/stop/status/restart` 命令管理生命周期
- **后台会话**：支持 `--bg` 参数在后台启动任务，配合 `ps/logs/attach/kill` 命令管理
- **Worker 管理 API**：新增 `/api/v1/workers` 和 `/api/v1/daemon` REST API，统一管理所有 CLI 进程
- **Web UI Workers 页面**：可视化管理 Worker 进程和 Daemon，支持启停、终止、查看日志
- **独立日志查看器**：Web UI 新增日志页面，支持 4 种日志类型（遥测/进程/调试/对话）切换、关键词搜索、语法高亮
- **监控页面增强**：Worker 视角展示进程级指标，支持跨进程代理采集 RSS/Heap 数据
- **编辑器标签增强**：支持拖拽排序、固定标签（Pin）、溢出滚动箭头和增强右键菜单（复制路径、在文件树中定位、关闭右侧、关闭已保存）
- **面包屑导航**：编辑器顶部显示文件路径层级，点击可快速切换同级文件
- **快速打开文件**：支持 Cmd+P / Ctrl+P 快速搜索并打开文件
- **文件预览**：支持图片（缩放/拖拽/棋盘格背景）、Markdown、PDF、SVG 预览和二进制文件信息页
- **编辑器状态栏**：底部显示光标位置、选区信息、语言类型等状态信息
- **最近文件**：空编辑器页面展示最近打开的文件列表

### 🔧 功能改进

- **执行阶段追踪**：Loading 状态栏新增细粒度执行阶段显示（preparing / waiting for model / streaming / processing / running tool），帮助用户了解 Agent 当前正在做什么
- **后台任务限制放宽**：仅在 print 模式下阻止后台执行，stream-json 和 headless 模式现已支持后台任务
- **设置页面**：重构为数据驱动的设置面板，支持通过 REST API 读写用户级设置，包含开关、选择、文本输入、JSON 编辑等控件，带保存反馈提示
- **代码块**：复制按钮改为悬停浮动显示，去除语言标签栏，更紧凑美观
- **菜单交互**：斜杠命令、@ 文件补全、+ 功能面板支持点击外部自动关闭
- **实例注册表**：文件读写改为异步操作，消除 busy-wait 阻塞
- **指标采集**：修复多实例场景下 metrics 接口的循环调用问题
- **会话 cwd**：修复 Web UI 会话工作目录设置为 URL 而非实际路径的问题

### 🐛 问题修复

- **命令补全菜单**：修复输入命令参数时补全菜单仍然显示的问题，现在光标离开命令名区域后菜单会正确关闭

### 📝 文档更新

- **Daemon 使用文档**：新增 Daemon 常驻模式完整使用指南
- **API 文档补充**：补充 Workers、Daemon、Metrics 等新增 API 端点文档
- **ACP 协议文档**：更新 ACP 协议文档，补充 Team 状态推送等新特性说明
- **设置文档**：更新设置项文档，补充新增配置说明
- **发布说明**：同步 v2.77.0 ~ v2.79.0 发布说明到 IDE 文档站

## [2.78.1] - 2026-04-05

### 🐛 问题修复

- **Agent 解析**：统一使用 session 关联的 agent 替代默认 agent，修复队列排空和 agent 唤醒时使用错误 agent 的问题
- **模型字段**：修复 reasoning_item 和普通 item 的 model 字段取值，使用实际模型响应信息替代可能为空的 lastAgent.model

### 🔧 功能改进

- **企业微信回复**：增强 chatId 解析能力，支持从 chatId 字符串提取路由信息；优化工具返回格式为结构化 JSON

## [2.78.0] - 2026-04-05

### 🎉 新功能

- **Agent Teams Web UI 支持**：通过 ACP SSE 推送 Team 成员实时状态（运行中/已完成/失败）、token 使用量、工具调用次数，在任务清单面板中展示；点击成员可查看完整对话历史，支持实时流式更新；收发消息显示发送者/接收者摘要及成员专属颜色；页面刷新后通过 ACP history replay 自动恢复 Team 状态和成员对话；新增 13 个 Team 相关的中英文翻译 key

### 🔧 功能改进

- **权限系统**：重构 ACP 权限广播机制，支持 Web UI 页面刷新后恢复权限对话框，修复跨端权限同步问题
- **AskUserQuestion**：改为通过 interruption 广播协议下发问卷，避免多连接下问卷发送到错误客户端
- **上下文压缩**：ContextTruncationInterceptor 改用同步 compact 流程替代手动截断，提升上下文管理可靠性
- **频道消息**：微信/企业微信频道新增消息队列，避免 Agent 运行期间并发消息丢失
- **选项兼容**：TUI 和 Web UI 问卷面板增加对纯字符串选项数组的防御性处理

### 🐛 问题修复

- **命令补全菜单**：修复输入斜杠命令后跟参数时补全菜单消失的问题，现在输入如 `/skill arg` 时仍能正确显示命令补全建议
- **命令建议**：修复光标进入参数区域后命令补全仍然显示的问题

## [2.77.1] - 2026-04-04

### 🔧 功能改进

- **图片 blob 引用还原**：新增环境变量 `CODEBUDDY_REHYDRATE_IMAGE_BLOB_REFS`，设置为 `true` 后可在 `-p` 模式流式输出中将图片 blob 引用自动还原为完整 base64 数据，方便下游系统集成
- **微信/企微权限回复优化**：移除权限操作后的机械确认消息（如"✅ 已批准，正在执行..."），改为由 Agent 后续动作作为隐式反馈，减少消息冗余

### 🐛 问题修复

- **微信/企微消息路由修复**：修复权限回复中 `a`（始终允许）指令因检查顺序错误被识别为建议审批输入的问题，调整权限回复优先于建议审批检查

## [2.77.0] - 2026-04-03

### ✨ 新功能

- **插件系统增强**：全面升级插件系统，支持 npm/Git 子目录安装、MCP Bundle 加载（.mcpb/.dxt/.zip）、Output Style 插件扩展、插件 settings.agent 默认 Agent、插件 bin/ PATH 注入、用户配置选项交互式收集、DFS 闭包依赖解析
- **市场名称保护**：四层防御机制防止第三方冒充官方市场
- **企业策略服务**：通过 managed-settings 控制插件启用/禁用
- **`--plugin-dir` 参数**：支持从本地目录加载插件用于开发测试
- **`/reload-plugins` 命令**：无需重启即可重新加载所有插件组件
- **`/plugin-validate` 命令**：四层校验插件目录结构和 manifest 有效性

### 🔧 功能改进

- **Venus 端点兼容适配器**：支持 Venus OpenAI 兼容代理端点的 Prompt 缓存注入和请求字段清理，模型适配器与端点适配器可叠加使用
- **SDK MCP 工具过滤器**：修复 SDK MCP 服务器缺失工具过滤器的问题，确保权限和 deny 规则正确应用于 SDK 注册的自定义工具
- **设置面板组件 props 兼容修复**：修复 settings-panel 和 memory-saving-menu 组件因额外 props 传递导致的类型警告

### 🐛 问题修复

- **AskPanel 竞态修复**：修复 doneAsk/rejectAsk 与 approve/reject 的调用顺序，避免工具在获得答案前继续执行
- **图片消息类型修复**：`stripImageContent` 使用正确的 `input_text` 类型替换图片占位

### 📝 文档更新

- **插件市场文档**：更新插件市场指南，修复文档内部链接路径
- **CLI 文档全面更新**：更新 CLI 参考、环境变量、HTTP API、斜杠命令、插件系统等多篇文档的中英文版本

## [2.76.0] - 2026-04-03

### ✨ 新功能

- **GLM-5v-Turbo 模型上线**：新增 GLM-5v-Turbo 多模态视觉模型，支持图片理解能力，同步上线国内版和 iOA 版

### 🐛 问题修复

- **模型 temperature 配置修复**：修复模型温度参数被硬编码为默认值 1 的问题，现在正确读取产品配置中各模型指定的 temperature 值

## [2.75.0] - 2026-04-03

### 🔧 功能改进

- **微信实例 ID 动态更新**：微信客户端扫码认证后自动将临时 `_pending` 实例 ID 更新为真实 ID，确保消息回复路由正确
- **微信消息发送错误检查**：`sendMessage` 接口增加返回值校验，发送失败时抛出明确错误而非静默忽略

## [2.74.0] - 2026-04-03

### ✨ 新功能

- **侧问题命令 /btw**：支持在 Agent 工作过程中快速提出侧问题，不中断主线程，答案基于已有上下文即时生成

### 🔧 功能改进

- **渠道会话建议确认**：微信/企业微信渠道对话完成后，自动生成后续建议并等待用户确认后再执行

### 🐛 问题修复

- **AskUserQuestion 防御性处理**：修复当模型返回的 options 字段缺失或非数组时，AskUserQuestion 面板渲染崩溃的问题

## [2.73.0] - 2026-04-03

### ✨ 新功能

- **Channel 建议确认**：当通过微信/企业微信渠道完成一轮对话后，自动生成下一步建议并发送给用户确认，用户回复 y 即可继续执行

### 🔧 功能改进

- **微信/企微权限三选项**：权限请求提示从 `(y/n)` 升级为 `(y=允许/n=拒绝/a=总是允许)`，支持记住选择
- **修复权限卡死**：微信/企微中回复非选项内容时不再卡死，自动拒绝当前权限并将输入作为新消息处理
- **上下文压缩优化**：压缩前自动清理超过 1 小时的旧工具结果（Microcompact），减少发送给压缩模型的 token 数量，实测可节省 80%+ 的压缩输入
- **图片内容剥离**：压缩前自动将图片替换为占位符，避免无意义的图片 token 进入摘要
- **压缩提示词增强**：改进 9 章节结构化摘要格式，提高压缩质量和信息保留率
- **移除异步压缩**：简化压缩架构，统一使用同步阻塞压缩路径
- **JSON 修复增强**：使用 jsonrepair 库替换自定义引号修复逻辑，支持修复中文引号、缺失逗号、截断 JSON 等更多畸形 JSON 场景
- **移除重试机制**：不再向模型发送 malformed JSON 重试 prompt，改为直接修复或静默过滤，减少不必要的模型调用

### 🐛 问题修复

- **渠道消息斜杠命令**：修复从微信等渠道发送的斜杠命令因被 `<channel>` 标签包裹而无法正确识别的问题
- **队列消息命令保留**：消息队列处理时保留斜杠命令，等 agent 空闲后通过正常拦截器管道执行，避免命令被吞掉

## [2.72.0] - 2026-04-02

### ✨ 新功能

- **文件变更面板**：Web UI 新增 Changes 视图，实时展示 Agent 修改的文件列表，支持 Monaco Diff 编辑器查看变更详情
- **Checkpoint 回退**：支持按文件撤回、按回退点回退代码/对话，提供三种回退模式（仅代码、仅对话、全部回退）

### 🔧 功能改进

- **Diff 查看器**：从自定义 LCS diff 算法迁移到 Monaco DiffEditor，支持语法高亮和更好的大文件性能
- **文件图标**：从 @exuanbo/file-icons-js（异步）迁移到 file-icons-js（同步），消除图标加载闪烁
- **会话回放**：支持对话回退后的历史回放，刷新页面可恢复文件变更面板状态
- **Checkpoint 广播**：通过 ACP extNotification 实时推送文件变更通知到所有已连接的客户端
- **插件管理 API**：新增公开 REST API 端点管理插件的安装、卸载、启用、禁用及市场管理，Web UI 迁移至标准 API
- **配置管理 API**：新增公开 REST API 端点查询和修改配置，支持按作用域操作
- **剪贴板兼容性**：增强 macOS 图片粘贴，新增 JXA NSPasteboard 后备方案以兼容企业微信等第三方截图工具
- **消息通知文案**：优化微信和企微 Channel 中工具操作的中文描述，使用户更易理解
- **代码高亮类型修复**：修复 Web UI 中 react-syntax-highlighter 的 TypeScript 类型兼容性问题

## [2.71.1] - 2026-04-01

### 🔧 功能改进

- **SDK MCP 超时机制**：将固定超时替换为 AbortSignal 取消机制，支持长时间运行的 MCP 工具调用
- **推理模型配置**：启用 thinking 模式时自动默认 effort 为 high，确保模型实际产出推理输出
- **产品配置修复**：修正模型配置中 reasoning 字段的拼写错误

## [2.71.0] - 2026-04-01

### ✨ 新功能

- **代码编辑器**：Web UI 新增文件浏览和代码编辑功能，支持目录树导航、多标签编辑、Monaco Editor 语法高亮、自动保存、文件拖拽移动和键盘快捷键

### 🔧 功能改进

- **流式超时时间优化**：将流式响应超时（`CODEBUDDY_STREAM_TIMEOUT_MS`）和首 token 超时（`CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS`）默认值从 2 分钟提升至 10 分钟，减少复杂任务中因模型响应较慢导致的超时中断

## [2.70.1] - 2026-03-31

### 🔒 安全修复

- **CORS 跨域攻击防护**：替换 CellJS 框架默认的全局 CORS 通配符（`Access-Control-Allow-Origin: *`）为精确白名单检查，防止恶意网页通过 JavaScript 跨域访问本地 Gateway 服务执行 Agent 命令
- **DNS Rebinding 防护**：新增 Host 头验证中间件，验证请求的 Host 是否在白名单中（localhost/127.0.0.1/Tunnel URL），阻止攻击者通过 DNS 重绑定访问本地服务
- **SSE 端点 CORS 修复**：移除 SSE 流式输出端点的 CORS 通配符 fallback，仅对白名单内的源返回 CORS 头
- **默认绑定地址安全化**：Gateway 配置默认绑定地址从 `0.0.0.0` 改为 `127.0.0.1`，避免服务暴露到局域网

### 🔧 功能改进

- **自定义跨域规则**：支持通过环境变量 `CODEBUDDY_CODE_CORS_ORIGINS` 或 Settings 配置 `gateway.corsOrigins` 自定义允许的跨域源

## [2.70.0] - 2026-03-31

### ✨ 新功能

- **内置命令模型驱动调用**：AI 模型现在可以通过 Skill 工具直接执行部分内置斜杠命令（如 /clear、/model、/config、/resume、/gateway 等），支持在 WebChat、微信等非终端场景下由模型代理执行命令
- **命令参数扩展**：/model、/config、/resume 等命令新增 `list` 子命令，支持以文本方式列出可用选项（模型列表、配置项、会话列表）
- **统一控制机制**：通过 `disableModelInvocation` 字段统一控制内置命令和自定义命令是否允许模型调用

### 🔧 功能改进

- **实例注册地址简化**：将 localUrl/tunnelUrl 合并为统一的 url 字段，后端根据监听地址自动确定最佳可达地址
- **权限确认框显示修复**：使用 useSyncExternalStore 替代 useEffect 订阅模式，彻底解决权限确认框偶发不显示的竞态问题
- **会话权限模式保持**：修复多实例场景下切换会话时权限模式被重置的问题

## [2.69.0] - 2026-03-30

### ✨ 新功能

- **E2B 兼容文件系统 API**：新增 `/api/v1/fs/*` 和 `/api/v1/files/*` 端点，对齐 E2B filesystem.proto 和 envd.yaml，支持文件读写、目录操作、文件监听等完整文件系统功能
- **E2B 兼容进程管理 API**：新增 `/api/v1/process/*` 端点，对齐 E2B process.proto，支持进程启动（PTY/管道）、输入输出流、信号发送等全生命周期管理
- **系统指标与环境变量 API**：新增 `/api/v1/metrics` 和 `/api/v1/envs` 端点，提供 CPU/内存/磁盘使用指标和安全过滤的环境变量

### 🔧 功能改进

- **PTY 终端增强**：新增 SSE 输出流、HTTP 输入发送、HTTP resize 端点，提供 WebSocket 之外的纯 HTTP 替代方案
- **终端 Web UI 重构**：前端终端组件从 WebSocket 迁移到 SSE + HTTP 通信，对齐 E2B 流式输出模式，提升兼容性
- **分布式追踪**：基于 Hook 机制重构 trace 链路，支持 SDK 传递 traceId 实现端到端追踪
- **工具级追踪**：每次工具调用自动创建子 Span，记录工具名称、参数等关键属性
- **Trace 头注入**：自动将 B3 格式 trace header 注入模型请求，实现全链路串联
- **WeChat 多实例支持**：支持同时连接多个 WeChat 机器人实例，自动路由消息到正确的客户端
- **WeChat 媒体消息**：支持接收和发送图片、文件、语音、视频消息
- **中文引号修复**：自动修复模型输出中的中文引号（如 "" ''「」『』），避免工具调用 JSON 解析失败
- **文档更新**：同步更新 CLI 多语言文档

### 🔒 安全修复

- **企业微信机器人媒体下载 SSRF 防护**：添加 URL 白名单校验，确保媒体下载仅限企微官方 CDN 域名，防止服务端请求伪造（SSRF）攻击；禁用 HTTP 重定向以防止重定向绕过

## [2.68.0] - 2026-03-30

### ✨ 新功能

- **Web UI 文档查看器**：在 Web UI 中新增文档浏览功能，支持全文搜索、中英文切换、目录导航和 TOC
- **API 文档入口**：文档页面提供 API Reference 快捷链接，可直接跳转到 Swagger UI
- **CLI 文档打包**：构建时自动处理 CLI 文档并随 Web UI 一起分发，支持离线查看

### 🔧 功能改进

- **HTTP API 标准化**：所有公开端点统一到 `/api/v1/` 前缀，支持版本控制；内部端点迁移到 `/internal/`
- **API 文档**：新增 Swagger UI（`/api/docs`）和 OpenAPI 规范（`/api/openapi.json`），Beta 阶段
- **统一响应格式**：公开端点使用标准 `{ data }` / `{ error: { code, message } }` 信封格式
- **统一认证**：提取公共认证函数，消除各 Controller 中的重复实现
- **ACP 端点迁移**：ACP 协议端点从 `/acp` 迁移到 `/api/v1/acp`，与 REST API 统一路由前缀
- **文档独立窗口**：Web UI 文档视图支持在新标签页中独立全屏打开
- **版本号显示**：文档视图和侧边栏优化版本号展示逻辑
- **API 响应兼容**：Web UI 适配统一信封格式（`{ data }` 包装），确保 REST 端点响应正确解析
- **凭证存储统一**：WeChat 和 WeCom 凭证从多文件存储迁移到单文件 `instances.json` 格式，支持自动迁移旧格式
- **E2E 测试**：新增 HTTP API 端到端测试覆盖（40 个测试用例）

### 🐛 问题修复

- **确认框显示修复**：修复 AskUserQuestion 确认框偶发不显示的问题，解决路由导航中的竞态条件
- **文档链接格式**：修正 Channels 文档中 localhost 链接的格式

## [2.67.0] - 2026-03-28

### ✨ 新功能

- **企业微信 Channel Bridge**：企业微信 AI Bot 消息通过 channel 系统注入 Agent 会话，支持 WeComReply 工具回复（markdown 格式），支持群聊和私聊
- **多实例接入**：WeChat 和 WeCom 均支持同时连接多个 bot 实例，通过 `/remote-control` 面板交互式添加和管理
- **交互式添加 Bot**：WeChat 直接扫码绑定，WeCom 输入 Bot ID + Secret 后自动连接，凭证持久化到磁盘
- **Web UI 远程控制管理**：新增远程控制页面，支持可视化管理渠道连接（连接/断开/解绑/删除），WeChat QR 扫码和 WeCom 表单添加
- **企业微信媒体消息支持**：WeComReply 工具新增图片、文件、视频等媒体消息的上传与发送能力
- **企业微信媒体接收**：支持接收用户发送的图片和文件消息，自动下载解密
- **微信客服媒体增强**：改进微信客服的图片和文件消息处理

### 🔧 功能改进

- **环境变量控制最大轮次**：支持通过 `CODEBUDDY_CODE_MAX_TURNS` 和 `CODEBUDDY_CODE_SUBAGENT_MAX_TURNS` 环境变量分别控制主 Agent 和子 Agent 的最大执行轮次
- **类型精确化**：修正工厂方法中的泛型参数，使用具体实现类型替代接口类型
- **多行匹配修复**：统一命令解析方法中的正则匹配模式，支持多行内容正确解析
- **企业微信媒体解密**：对齐官方 SDK 使用 AES-256-CBC 算法，增加格式自动检测和诊断日志

### 🐛 问题修复

- **Rewind 虚假 diff**：修复 compact 后 rewind 显示不存在的文件变更问题，compact 消息现在正确继承文件快照状态
- **PTY 文件描述符泄漏**：PTY service 和后台任务的 fd 清理逻辑增强，确保异常路径下也能正确释放资源

## [2.66.2] - 2026-03-26

### 🐛 问题修复

- **模型设置同步**：修复通过 SDK/控制信号设置模型时 `options` 未同步更新的问题，确保模型选择在所有读取路径上保持一致

## [2.66.1] - 2026-03-26

### 🔧 功能改进

- **Channel 权限中继**：支持通过 Channel（如微信）确认工具权限请求，声明了权限中继能力的 Channel 不再强制自动批准，而是将确认请求转发给用户
- **微信权限确认**：工具执行需要权限时，通过微信消息发送自然语言确认请求，用户回复 y/n 即可批准或拒绝
- **微信问答支持**：AskUserQuestion 工具在微信中可发送问题选项，用户回复编号或自由文本选择答案
- **微信计划确认**：ExitPlanMode 时自动读取计划文件并展示摘要，用户可在微信中确认后再执行

### 🐛 问题修复

- **微信 Channel 回复工具**：修复偶发找不到回复工具的问题，WeChat 连接成功后主动刷新 Agent 工具列表，消除竞速条件
- **微信问答重复提示**：修复 AskUserQuestion 同时发送问答消息和权限确认消息的问题
- **微信问答参数解析**：修复 AskUserQuestion 参数为 JSON 字符串时未正确解析的问题

## [2.66.0] - 2026-03-25

### ✨ 新功能

- **思考模式默认开启**：全局默认启用 thinking 模式，开箱即用更强推理能力

### 🐛 问题修复

- **Token 计数器**：修复右下角 token 计数器始终显示 0 的问题
- **状态栏成本显示**：修复状态栏脚本接收到错误成本数据的问题
- **状态栏初始化**：修复状态栏首次渲染时可能不显示的问题
- **上下文百分比**：修复上下文使用百分比在接近上限时显示不准确的问题
- **内存泄漏**：修复状态栏管理器订阅未正确清理的问题

## [2.65.1] - 2026-03-25

### 🐛 Bug 修复

- **无头模式执行稳定性**：移除 headless 模式下固定 60 秒强制退出逻辑，避免长时间运行的 CLI、SDK 或脚本请求被误终止

## [2.65.0] - 2026-03-25

### ✨ 新功能

- **Channel 消息通道**：支持通过 MCP 协议接收外部消息源（如 IM 机器人），实现多通道消息汇聚和处理
- **Channel TUI 展示**：启动界面显示已配置的 Channel 列表，对话中以友好格式展示 Channel 消息
- **Channel 安全管控**：支持发送者白名单、权限中继等安全机制

### 🔧 功能改进

- **非交互模式后台任务管控**：在 headless、SDK、print 模式下禁用 Agent 和 Bash 工具的后台执行参数，避免非交互环境中产生无法管理的后台任务

### 🐛 Bug 修复

- **后台任务 PTY 泄漏**：修复后台任务被 kill 时未释放 PTY 文件描述符的问题，避免长时间运行后 fd 耗尽

## [2.64.2] - 2026-03-24

### 🔧 功能改进

- **登录方式**：移除启动时的内网环境嗅探，所有登录方式（含 iOA）始终显示
- **国内版模型排序**：调整国内版模型列表中 glm-5.0 系列的显示顺序

### 🐛 Bug 修复

- **上下文压缩重复触发**：修复压缩完成后立即再次触发压缩的问题，避免不必要的重复压缩循环
- **会话持久化**：修复大工具结果外部化后误同步回内存导致模型无法理解工具输出的问题

## [2.64.1] - 2026-03-23

### 🐛 Bug 修复

- **终端分屏稳定性**：修复分屏操作导致终端被意外重置的问题，PTY session 仅在用户主动关闭面板时销毁
- **消息气泡过滤**：用户消息展示时移除 system-reminder 标签及内容，避免内部系统提示信息泄露到界面

## [2.64.0] - 2026-03-23

### ✨ 新功能

- **Web UI 全面增强**：全新侧边栏导航、状态栏、登录页，统一视觉风格和交互体验
- **多视图支持**：新增历史会话、任务管理、插件管理等视图，移除过时的工作区切换
- **加载动画**：新增猫爪品牌加载动画组件，替换通用 spinner
- **终端优化**：支持终端标题显示、主题切换时刷新配色
- **实例管理**：增强实例管理面板布局和交互
- **会话恢复**：`/resume` 命令支持跨会话切换，通知 Web UI 同步更新

### 🔧 功能改进

- **TLS 验证跳过**：修复无代理场景下禁用 TLS 验证不生效的问题
- **子代理工具重命名**：将 Task 工具重命名为 Agent，使工具命名更准确地反映其功能定位
- **大工具结果外部化**：当工具返回结果超过 50KB 时，自动将完整输出保存到磁盘并在对话历史中保留摘要占位符，防止长时间运行会话的内存无限增长
- **Agent 任务内存清理**：定时清理已完成的任务记录，驱逐过多的已完成 Team 成员会话引用，修复长时间运行场景下的内存泄漏
- **诊断面板增强**：在 `/doctor` 面板中新增内存使用量和任务统计信息，便于排查资源问题
- **ACP 流优化**：POST stream 延迟关闭机制，解决 tunnel 场景下通知丢失问题
- **Gateway 安全**：新增风险提示，iOA 用户禁止使用 tunnel，新增网络访问配置提示
- **服务启动美化**：HTTP Server 启动信息增加品牌样式和终端超链接
- **消息过滤修复**：仅过滤 `/clear` 命令和系统注入内容，不再过度过滤用户消息
- **消息队列修复**：取消请求时保留队列消息，避免排队消息丢失；包含中断信号时跳过队列合并
- **Token 用量修复**：跳过 compact agent 的 usage 数据，修复压缩后百分比虚高导致重复压缩
- **Rewind 修复**：活跃历史补充文件快照，优先使用修改前的文件状态进行恢复
- **Team 成员清理**：销毁 teammate 时同步清理注册表和配置，允许重新 spawn 同名成员
- **系统标签清理**：队列显示和消息提取时过滤 system-reminder 标签
- **国际化**：大量新增中英文翻译词条

### 🐛 问题修复

- **问答确认框显示**：修复偶发的 AskUserQuestion 确认框"看不见"问题，确保导航前服务状态就绪

### 📝 文档更新

- **Release Notes**：新增 v2.62.1 ~ v2.63.4 共 6 个版本的发布说明
- **环境变量文档**：新增热更新禁用和内置市场跳过的环境变量说明
- **企微 Bot 集成文档**：新增消息处理流程和流式状态指示机制说明
- **文档完善**：更新 HTTP API、设置、故障排除文档

## [2.63.5] - 2026-03-19

### 🔧 功能改进

- **遥测控制**：支持通过环境变量禁用遥测数据上报
- **图片格式识别**：支持通过文件魔数（magic bytes）检测图片 MIME 类型，当文件扩展名与实际内容不匹配时仍能正确识别格式

## [2.63.4] - 2026-03-18

### 🔧 功能改进

- **SDK 场景稳定性**：禁用 SDK 模式下的 CLI 自动更新，防止进程重启导致后续请求瞬间返回
- **会话恢复可靠性**：修复重新初始化会话时 stale MessageLog 未清理导致的消息消费异常
- **E2E 测试增强**：客户端自动响应 AskUserQuestion，命令名验证支持 Unicode 字符
- **子代理进度显示优化**：将子代理和 Team 成员进度中的 token 统计从累计消耗量改为当前上下文窗口大小，更直观地反映实时上下文使用情况

## [2.63.3] - 2026-03-18

### 🔧 功能改进

- **Subagent 上下文压缩**：修复 Subagent 压缩后恢复运行失败的问题，正确处理压缩中断的静默标记、用户意图保留、历史中 compact 消息的非连续查找，并在压缩期间显示进度提示
- **拦截器模块化重构**：将单一大文件拆分为独立模块，提升代码可维护性
- **压缩标签处理优化**：修复上下文压缩时 user_query 标签可能泄漏到摘要的问题

## [2.63.2] - 2026-03-17

### 🔧 功能改进

- **超时重试增强**：首 token 超时允许最多 2 次重试并增加线性延迟（2s/4s），提高网络波动场景下的恢复成功率
- **消息队列处理**：修复超时错误处理后队列中累积的用户消息无法被处理的问题
- **状态一致性**：修复错误处理中 agentState 重置逻辑的竞态条件，确保重试和队列处理的正确性

## [2.63.1] - 2026-03-17

### 🐛 问题修复

- **Malformed JSON 上下文污染修复**：修复模型生成无效 JSON 工具调用参数后，错误重试提示消息未被清理导致后续每轮对话都携带过期错误信息的问题，减少上下文污染和 token 浪费

## [2.63.0] - 2026-03-16

### ✨ 新功能

- **禁用 TLS 验证**：支持通过产品功能开关禁用 HTTPS 请求的 TLS 证书验证，适用于使用自签名证书或内部 CA 证书的私有化部署环境

### 🔧 功能改进

- **插件市场埋点**：新增插件市场操作埋点，支持追踪市场添加/删除/刷新、插件安装/卸载/启用/禁用等用户行为
- **Centrifugo 连接策略**：关闭 Centrifugo 自动连接，改为按需手动启动
- **配置面板精简**：移除 /config 面板中不再使用的 Wecom 配置项

### 🐛 问题修复

- **自动重试竞态修复**：修复网络错误自动重试时，`agent_end` 事件过早触发导致父任务误判子代理失败的问题
- **超时时间优化**：将流式传输超时和首 token 超时从 60 秒提升至 120 秒，减少弱网环境下的误断连
- **上下文压缩稳定性**：修复压缩过程中 abort 信号级联导致会话卡死的问题，提升长对话场景下的可靠性

## [2.62.1] - 2026-03-15

### 🔧 功能改进

- **上下文压缩优化**：重构 compact summary 注入机制，压缩后的摘要以结构化方式注入后续对话，提升上下文恢复质量；提高 token 使用量触发阈值，减少不必要的自动压缩；阻止 system-reminder 和 memory 内容注入 compact agent，避免将规则和记忆压缩进摘要
- **SDK 通信稳定性**：修复 stdout 并发写入可能交错的问题，新增序列化写入器处理背压；SDK 断开连接时自动取消所有等待中的权限请求，避免 CLI 挂起；改进中断服务的取消逻辑，确保正确发送错误响应；Python SDK 增强损坏 JSON 缓冲区的恢复能力；JS SDK stdin 写入增加 drain 事件处理，防止数据丢失
- **企微机器人状态指示**：使用流式消息替代静态文本实现"正在处理"状态，处理完成后自动替换为最终结果，聊天记录中不再残留中间状态消息

### 📝 文档优化

- **侧边栏导航**：统一企业微信机器人接入相关文档的导航标题，修复中文版重复条目

## [2.62.0] - 2026-03-13

### ✨ 新功能

- **Delegate Tool 支持（实验性）**：新增 DelegateTool 工具，允许 Agent 调用由外部客户端（如 Web UI、IDE 插件）注册的委托工具，实现 UI 查询和 UI 控制等功能

### 🔧 功能改进

- **远程控制重构**：将 `/wecom-bot` 命令统一为通用 `/remote-control` 命令，支持多种长连接客户端的统一管理；新增交互式 UI 面板，可通过键盘选择客户端连接或断开；`ILongConnectionClient` 接口新增 `hidden` 字段，支持隐藏不在 UI 面板中显示的内部客户端
- **远程控制本地命令快速执行**：新增快速检测本地命令（如 `/clear`、`/skills`、`/cost`）的机制，避免为本地命令显示"正在处理，请稍候..."提示；改进 Bun 环境的 WebSocket 实现检测；移除对产品配置的动态依赖
- **模型兼容性增强**：新增 OpenAI 模型适配器，自动清理不兼容参数并迁移 `max_tokens` 到 `max_completion_tokens`；Gemini 适配器增加 JSON Schema 字段清理，修复工具参数导致的 400 错误；插件市场创建失败时跳过而非中断整个加载流程
- **流超时处理优化**：将默认流超时从 30 秒调整为 60 秒，新增 finish_reason 检测避免模型已完成响应被误判为超时；统一使用计数器追踪超时重试次数；错误重试时跳过 Stop hooks 和 headless completion 的提前 resolve
- **Bash 工具描述**：优化命令描述提示，对复杂命令提供更清晰的说明示例；细化危险命令列表，明确列出不可逆操作
- **记忆路径结构**：项目记忆目录对齐标准路径结构，支持旧路径自动兼容；修复 Auto Memory 菜单中路径显示不完整的问题
- **AbortController 泄漏修复**：统一使用 `createAbortController()` 替代 `new AbortController()`，防止长会话中监听器累积告警
- **测试稳定性**：修复模型回退拦截器测试中的容器污染问题，提升测试套件运行稳定性

### 🐛 问题修复

- **ACP 会话管理**：修复 newSession 请求默认复用旧会话的问题，改用 continue 字段显式控制会话复用行为

## [2.61.3] - 2026-03-13

### 🔧 功能改进

- **启动稳定性**：修复 CLI 启动时认证初始化超时逻辑和远程控制服务异步初始化导致的启动失败问题
- **Moonshot 适配器**：优化 tool message content 的解析逻辑，仅当数组元素为 content block 对象时才进行反序列化，避免将普通字符串数组（如 Glob 文件路径）错误转换
- **插件更新**：修复插件 Git 仓库更新时本地与远端分叉导致 pull 失败的问题，改用 fetch + reset 策略确保可靠同步
- **SDK 交互能力修复**：移除 SDK 启动时的 `--print` 标志，使 SDK 模式支持交互式工具（如 AskUserQuestion），同时在 Print 模式下正确禁用交互式工具
- **Web 搜索**：迁移到新版搜索 API，优化响应解析和错误处理

### 🐛 问题修复

- **第三方 API 连接**：修复 `CODEBUDDY_SKIP_INTERNAL_HEADERS` 模式下 Authorization 头被误删导致 401 认证失败的问题，同时新增对 `x-stainless-*` 系列头的过滤以避免第三方 API 返回 400 错误

## [2.61.2] - 2026-03-13

### 🔧 功能改进

- **企业微信 AI Bot WebSocket 兼容性**：将 WebSocket 实现从 Node.js 专用库迁移到 W3C 标准 API，支持 Bun 和 Node.js 双运行时
- **企业微信 AI Bot 自动连接**：新增 `--wecom-bot` 启动参数，支持启动时自动连接企业微信 AI Bot

## [2.61.1] - 2026-03-12

### 🔧 功能改进

- **SDK 版本更新**：升级 Agent SDK JS 至 0.3.81

## [2.61.0] - 2026-03-12

### ✨ 新功能

- **# 快捷键记忆保存重构**：将 # 快捷键的记忆保存从 Auto Memory (MEMORY.md) 改为通过 `MemoryManager.addFact()` 保存到 CODEBUDDY.md，支持选择 Project 或 User 两种 scope
- **/memory 命令支持参数调用**：`MemoryCommandExecutor` 新增参数模式，支持通过 `args` 直接传入 fact 和 scope 进行保存，无需导航到管理页面

### 🔧 功能改进

- **Auto Memory 重构**：重构记忆系统，支持独立控制 Auto Memory 开关，新增 `/memory` 管理面板和 `/config` 面板切换
- **Typed Memory**：新增实验性 Typed Memory 模式，支持 4 种结构化记忆类型（user/feedback/project/reference）和 YAML frontmatter 格式
- **记忆配置**：新增 `autoMemoryEnabled` 和 `typedMemory` 设置项，支持通过环境变量 `CODEBUDDY_DISABLE_AUTO_MEMORY` 和 `CODEBUDDY_TYPED_MEMORY_ENABLED` 控制
- **工具搜索与执行解耦**：ToolSearch 不再将延迟工具注入 LLM 工具列表，改为返回完整参数 schema，由新增的 DeferExecuteTool 代理执行，保持上下文前缀稳定以提升 KV 缓存命中率
- **上下文管理优化**：降低 token 使用量告警阈值，使上下文压缩更早触发，减少因上下文过长导致的对话质量下降
- **Shell 性能优化**：优化 PTY fd 泄漏检测机制，避免阻塞事件循环
- **Web UI 清空会话**：修复 /clear 后 loadSession 触发重复 render 循环导致的异常，通过追踪活跃连接避免重复进入 prompt 迭代器
- **企业微信机器人超时修复**：采用两阶段回复机制避免 30s 流式超时问题，长时间运行的 Agent 任务可正常返回结果
- **Web UI 会话同步**：在 Web UI 中执行 /clear 或新建对话时，CLI 终端视图同步刷新
- **文件路径补全**：Web UI 输入框支持 @ 触发文件路径补全，选中后自动添加空格
- **斜杠指令加载**：修复通过 tunnel 访问时斜杠指令列表无法加载的问题
- **提示词建议**：Web UI 支持显示 CLI 端生成的 prompt suggestion，按 Tab 快速采纳

### 🐛 问题修复

- **工具调用重试**：修复模型返回不合法 JSON 参数时直接报 400 错误的问题，现在会告知模型具体的 JSON 解析错误并自动重试一次
- **子代理 Hook 隔离**：跳过子代理 session 的 Stop/UserPromptSubmit hooks 执行，避免子代理触发主 session 专用的钩子逻辑
- **SubagentStop Hook 竞态修复**：将 settled 标记提前到 hook 执行之前设置，防止多检测路径并发导致 hook 重复触发
- **权限通配符匹配**：修复 `Bash(ls *)` 等通配符权限规则无法匹配包含路径参数的命令（如 `ls -al /xxx`）的问题，现在通配符 `*` 能正确匹配包含 `/` 的命令参数

## [2.60.0] - 2026-03-12

### ✨ 新功能

- **企业微信机器人远程控制**：支持通过企业微信 AI Bot 长连接远程控制 CodeBuddy Agent，无需公网 IP，使用 `/wecom-bot` 命令快速接入
- **远程控制客户端架构重构**：将远程控制模块重构为可扩展的多客户端注册架构，支持灵活接入不同 IM 平台

### 🔧 功能改进

- **自定义模型认证错误优化**：自定义模型返回 401 错误时，不再触发自动登出，并提供针对性的 API Key 检查提示
- **模型不可用提示增强**：当指定的模型不存在时，自动列出当前账户可用的模型列表
- **Tracing 初始化**：修复部分用户终端出现 "No API key provided for OpenAI tracing exporter" 报错的问题
- **Web 端命令处理**：移除客户端侧斜杠命令拦截，统一由服务端处理命令逻辑
- **恢复会话面板**：当前正在使用的会话会以绿色高亮显示并带有勾号标记，方便快速识别

### 🐛 问题修复

- **图片历史还原**：修复图片 blob 引用追踪时序问题，确保历史图片去重判断正确；补充 SDK 内部循环中 tool message 图片内容的还原处理，避免模型收到未解析的 blob 引用
- **嵌套 Skills 加载**：修复包含子 Skills 的目录（如 wedata/wedata-poll）无法被发现和加载的问题，同时增加扫描深度上限以支持更深层嵌套结构
- **跳过内部请求头**：修复 CODEBUDDY_SKIP_INTERNAL_HEADERS 环境变量不生效的问题，确保连接第三方网关时内部请求头被正确清理

## [2.59.0] - 2026-03-12

### 🎉 新功能

- **Hook 驱动的 Worktree 支持**：为 SVN、Perforce 等非 Git VCS 项目提供隔离工作区能力，通过 `WorktreeCreate` 和 `WorktreeRemove` Hook 事件实现完全自定义的 worktree 创建和清理逻辑；即使在 Git 仓库中，若配置了 `WorktreeCreate` Hook，也会优先使用 Hook-based 方式；Hook-based worktree 跳过 `git status` 检测，始终显示保留/删除菜单
- **Worktree 指定基础分支**：`--worktree` 参数现在支持配套使用 `--worktree-branch <branch>` 来指定 worktree 的基础分支，支持远程分支和本地分支两种格式；分支不存在时自动降级到远程默认分支并打印警告。`EnterWorktree` 工具同步支持 `branch` 参数

### 🔧 功能改进

- **Plan 模式审批**：修复 ExitPlanMode 工具在 Web UI 中审批时无法正确显示 plan 内容的问题，现在用户可以在审批弹窗中看到完整的计划内容和权限请求列表
- **图片读取去重优化**：修复同一路径图片被修改后重新读取时被错误去重的问题，现在能正确识别文件更新并返回最新图片内容；同时当文件未变化时，提供明确的"文件内容未改变"提示
- **Worktree Hook 兼容性**：补齐 `WorktreeCreate` 和 `WorktreeRemove` 的 SDK 协议与文档说明，确保自定义 worktree hook 能接收完整上下文并稳定接入

### 🐛 问题修复

- **ACP 连接清理**：修复新建聊天时旧连接未正确清理，导致广播消息重复渲染的问题

## [2.58.0] - 2026-03-11

### ✨ 新功能

- **微信客服远程网关适配器**：新增微信客服（WeChat KF）平台接入，支持通过微信客服 Webhook 回调接收消息并主动回复，包含回调签名校验、AES 加解密、sync_msg 消息拉取、客服账号自动创建等完整能力
- **企业微信远程网关适配器**：新增企业微信（WeCom）平台接入，支持 Webhook 回调验证、消息加解密、主动消息回复

### 🔧 功能改进

- **Headless 模式稳定性**：重构模块导出为三层结构，消除 headless 构建中的 IoC 解析失败
- **SDK 错误诊断**：Python SDK 新增启动崩溃检测和 stderr 捕获，改善错误提示
- **JS SDK 健壮性**：改进进程退出原因追踪和跨平台换行符处理
- **Python SDK 认证**：新增独立认证 API（`authenticate`/`logout`），支持 two-phase 登录流程
- **Python SDK 控制请求**：重构控制请求机制，支持请求-响应匹配和超时处理
- **Python SDK 类型**：新增 `McpServerStatus`、`AuthenticateResponse`、`UserInfo` 等类型定义
- **JS SDK 错误处理**：优化错误类型导出和连接模块结构
- **隧道协议优化**：强制使用 HTTP/2 替代 QUIC，提升网络兼容性
- **隧道进程复用**：支持 detached cloudflared 进程跨会话复用，避免重复创建隧道
- **隧道状态持久化**：新增 tunnel-state.json 管理多端口并发隧道，自动清理游离进程
- **任务进度显示**：优化 loading-box 中任务和队友描述的文本截断，避免长文本溢出终端宽度
- **插件市场自动更新开关**：市场详情页新增启用/禁用自动更新功能，内置市场默认开启，第三方市场默认关闭
- **市场存储一致性修复**：修复市场配置更新不生效的问题，确保存储记录唯一且可靠
- **配置缓存隔离**：修复 CLI 临时参数（如 `--system-prompt`）污染配置缓存的问题，确保每次调用使用独立的临时配置
- **Web UI 文件服务**：兼容 Bun SFE 扁平模式下的静态资源加载，修复虚拟文件系统不支持 stream 读取的问题
- **跨平台构建**：使用跨平台方式替代 shell 命令处理 headless 构建产物
- **Gateway 命令**：启动 Gateway 服务时显示 Loading 动画，防止用户重复操作
- **Web UI 图片支持**：历史回放时支持展示用户消息中的图片，新增图片放大查看功能
- **空白内容修复**：修复助手消息和工具组在无内容时产生空白的问题
- **子代理交互优化**：活跃状态的子代理支持点击折叠/展开，工具调用统一可点击
- **稳定性提升**：修复子代理和会话中断时 abortSignal 可能为空的问题，MultiEdit 计算失败时增加降级处理
- **Web UI 静态资源嵌入**：支持将 Web UI 静态文件自动嵌入 Bun 单文件可执行程序，确保打包后的二进制文件可以正确加载 Web UI 资源

### 🎨 界面优化

- **暗色主题视觉优化**：调暗并统一了暗色模式下各组件（侧边栏、状态栏、输入框、实例管理面板及终端面板）的边框颜色，使其在暗色背景下更加柔和自然，提升视觉体验

### 🐛 问题修复

- **Hooks 执行**：修复 hook 脚本启动后台进程时导致执行挂起的问题，同时处理 stdin EPIPE 错误避免未捕获异常
- **SubagentStop Hook**：修复 SubagentStop hook 回调中 transcript_path 指向不存在文件的问题
- **子代理交互**：修复子代理中 AskUserQuestion 被自动批准导致无法在主界面显示问题面板的问题
- **Compact 历史链**：修复 compact agent 因历史截断导致上下文不完整的问题
- **消息分组**：修复 compact 消息分组在多条 assistant 消息场景下归组错误的问题
- **工具审批导航**：修复工具审批确认框消失后输入框不可见的渲染问题
- **子代理标识**：AskUserQuestion 工具调用和中断服务中显示子代理名称，提升可识别性
- **模型同步**：修复 Web UI 切换模型后 CLI 未同步更新的问题，确保 `/model` 命令和后续对话使用正确的模型

## [2.57.1] - 2026-03-11

### 🔧 功能改进

- **无头模式**：补齐定时任务相关能力的导出，便于在无头集成场景中直接使用定时任务功能


## [2.57.0] - 2026-03-11

### ✨ 新功能

- **Remote Gateway（Beta）**：新增远程网关模块，支持通过 Cloudflare Tunnel 远程访问 CLI，包含 Web UI、认证、实例管理、终端面板、交互问答、对话压缩显示、Team 进度展示等完整功能
- **定时任务**：支持创建、查看和取消定时任务，并可让 CodeBuddy 按计划自动执行重复性工作

### 🔧 功能改进

- **工具调用截断判断优化**：仅在 finish_reason 为 length 时才视为截断，避免模型返回格式错误的 JSON 时产生无限重试
- **ToolSearch 参数描述精简**：移除冗余的搜索引擎细节描述，减少 Token 消耗
- **工具搜索参数优化**：将搜索参数重命名为复数形式以更准确反映其数组类型，并增强参数描述以提供更好的使用指引
- **恢复面板快捷键控制**：新增 `showRenameShortcuts` 参数，允许在调用恢复面板时禁用重命名相关快捷键
- **Hook 输出折叠配置**：新增 `hookOutputCollapsed` 设置项，用户可通过 `/config` 面板控制 Hook 输出默认是否折叠
- **消息提取**：优化用户消息内容提取逻辑，正确处理 userQuery 标签包裹的内容
- **首 token 超时检测优化**：改为检测模型有意义的输出而非 HTTP 原始字节，避免服务器心跳或空 SSE 消息导致超时检测失效
- **首 token 超时重试机制增强**：使用 session 级别计数器替代历史消息窗口检测重试状态，解决重试后新消息将 marker 推出窗口导致重复重试的问题
- **定时任务会话隔离**：修复多会话场景下的任务隔离问题，避免查看、取消或清理任务时影响其他会话
- **子代理 MCP 继承**：修复自定义子代理无法继承 MCP 工具的问题，子代理现在可以正确使用父代理配置的 MCP 服务器工具
- **Fish shell 键盘兼容**：修复在 Fish shell 3.4+ 搭配支持 Kitty keyboard protocol 的终端中，Enter、Tab、Backspace 等按键无响应的问题

### 🐛 问题修复

- **API 错误响应处理**：修复 API 返回错误时（如频率限制）UI 卡住的问题
- **MCP OAuth 认证**：修复 OAuth Provider 缓存查找失败的问题，确保认证流程稳定可靠
- **消除 MaxListenersExceededWarning**：修复长时间运行时 abort 监听器超出上限导致的内存泄漏警告
- **流式输出**：修复 stream-json-view 中 JSON 输出的格式和完整性问题
- **Hooks 中文编码**：修复 Windows 上 PreToolUse hook 修改工具参数时中文内容乱码的问题，统一使用 UTF-8 解码 Git Bash 输出


## [2.56.1] - 2026-03-09

### 🐛 问题修复

- **对话压缩显示**：修复压缩对话组的完成判断逻辑，改为检查是否包含 assistant 回复而非固定消息数量，避免在特殊情况下压缩状态显示异常


## [2.56.0] - 2026-03-07

### ✨ 新功能

- **Worktree PR 支持**：支持从 CNB (Code Nebula Buddy) 平台 PR 链接创建 worktree，包括 cnb.woa.com 和 cnb.cool 等域名

### 🔧 功能改进

- **新增 GPT-5.4 模型**：支持 272K 输入、128K 输出，具备推理和图片能力
- **SDK Transport 错误诊断增强**：改进进程关闭时的错误信息，捕获 stderr 输出并提供详细的关闭原因
- **MCP 面板**：移除边框，按配置来源分组展示服务器列表，当存在配置问题时显示诊断信息区域；分割线始终显示在服务器列表顶部，诊断区域为可选展示
- **模型兼容性层**：新增模型兼容性处理器，自动适配 Gemini 和 Moonshot 等第三方模型的 API 请求格式差异
- **错误诊断增强**：改进模型请求的错误日志，支持流式错误响应体读取，便于排查 API 异常
- **SDK Patch 扩展**：修复 reasoning content 在 function_call 场景下的丢失问题
- **工具搜索**：将 ToolSearch 的搜索和激活操作拆分为独立参数 `query` 和 `tool_names`，替代原有的 `mode` 切换方式，提升调用清晰度；未匹配的工具名自动回退模糊搜索
- **用户查询标识**：为用户消息添加 `<user_query>` 标签包裹，帮助模型更准确地区分用户实际查询与系统上下文内容

### 📝 文档更新

- **MCP 环境变量扩展文档**：新增环境变量扩展使用文档，包含语法说明、配置字段支持、示例和常见用例


## [2.55.1] - 2026-03-06

### 🔧 功能改进

- **MCP 环境变量默认值**：支持 `${VAR:-default}` 语法，当环境变量未设置时自动使用默认值
- **Worktree 初始化优化**：优化 symlink 创建逻辑，支持文件和目录类型自动检测，改进已存在目标的冲突处理；优化 `.worktreeinclude` 文件处理，避免大型仓库中加载全量忽略列表导致的性能问题
- **Worktree 会话日志**：修复日志输出被终端 UI 框架覆盖的问题
- **Hooks Windows 路径兼容**：修复切换到 Git Bash 执行 hook 命令后，插件根目录路径和项目目录在 Windows 上使用反斜杠路径导致 bash 误解析转义符的问题，统一转换为 Unix 风格路径

### 🐛 问题修复

- **SDK 认证修复**：修复登录时认证 URL 被错误覆盖的问题
- **环境配置保护**：修复用户通过 `.env` 或 `settings.json` 显式设置的网络环境被 session 检测自动覆盖的问题
- **SessionStart hook 竞态修复**：修复 SessionStart hook 在 session-middleware 中以 fire-and-forget 方式执行导致的竞态条件，首轮消息可能在 hook 完成前被处理，注入的上下文丢失。通过引入门闩机制，在拦截器注入点按需等待 hook 完成，同时不阻塞交互模式的启动流程


## [2.55.0] - 2026-03-06

### ✨ 新功能

- **Git Worktree 支持**：新增 `--worktree` 参数，支持在独立的 git worktree 中运行 CodeBuddy，实现并行开发和安全隔离。配合 `--tmux` 参数可在独立的 tmux 会话中运行，适合长时间任务。新增 `WorktreeCreate` 和 `WorktreeRemove` 事件钩子，支持自定义 VCS 集成
- **Worktree 工具**：新增 EnterWorktree 工具，支持 Agent 在会话中动态创建和进入 git worktree。新增独立的工作目录管理服务，支持主 Agent 和子代理的目录隔离

### 🔧 功能改进

- **工具搜索优化**：支持搜索和激活双模式，搜索模式下分层展示已激活工具和候选工具，激活模式下支持按名称精确激活
- **状态栏折行显示**：状态栏长文本支持自动折行，不再截断隐藏超出部分
- **Diff 宽字符适配**：修复 Diff 视图中包含中文、Emoji 等宽字符时折行位置不准确的问题
- **消息识别**：优化用户消息识别逻辑，排除框架自动发送的队友消息
- **Worktree 退出清理**：退出时自动检测变更并清理无变更的 worktree，创建前自动清理残留的 worktree 记录，避免分支冲突
- **Worktree 退出交互**：优化 worktree 会话退出时的用户交互体验，通过独立的上下文管理和菜单组件，提供更清晰的变更提示和操作选项
- **Worktree 退出稳定性**：将退出事件通道抽离为独立模块，修复 headless 打包时因间接引入 React.createContext 导致的运行时崩溃问题
- **Worktree 子代理隔离**：子代理任务在 worktree 环境中自动继承正确的工作目录，确保文件操作在正确路径下执行


## [2.54.0] - 2026-03-05

### ✨ 新功能

- **Skills 嵌套子目录**：支持在 skills 目录中使用子目录组织 skills，嵌套 skill 自动生成冒号分隔的限定名称，同时支持短名称匹配

### 🔧 功能改进

- **启动优化**：避免 PromptContext 初始化过程中的重复执行，并发请求复用同一初始化结果
- **模型选择**：优化了不同代理模式下的模型选择机制，提升配置灵活性
- **远程控制连接**：优化 WebSocket 适配器实现，提升连接稳定性
- **远程控制稳定性**：修复会话处理逻辑，避免误用旧执行结果导致的异常
- **上下文压缩**：修复自动压缩流程中消息入队导致压缩不执行的问题，增强中断等待的健壮性
- **压缩 UI 显示**：修复压缩过程中内部续行消息在聊天界面异常展示的问题
- **输入编辑器**：Vim 模式和快捷键的词移动（w/b/e）现在正确支持中日韩字符，每个 CJK 字符视为独立词
- **任务面板**：修复任务详情视图在任务状态更新时未同步刷新的问题
- **Gzip 压缩判断优化**：完善自定义端点的检测逻辑，当用户配置了自定义 API 地址或模型使用自定义 URL 时自动跳过 gzip 压缩，避免第三方服务不支持 gzip 导致请求失败
- **Hook 输出乱码修复**：修复在中文 Windows 系统上，Hook 脚本的错误信息（stderr）显示为乱码的问题
- **MCP 配置环境变量展开**：MCP 服务器配置中的 `${VAR_NAME}` 占位符会自动替换为对应环境变量值，支持 stdio 的 command/args/env 和 SSE/HTTP 的 url/headers 字段。缺失的变量保留原样并生成诊断提示
- **/skills 面板增强**：Skills 面板现在同时展示自定义斜杠命令，不再过滤 `userInvocable: false` 的项目，分组标题包含来源目录路径
- **Token 计数优化**：Skills 和斜杠命令的 token 计数改为只统计描述部分（description tokens），避免对上下文占用产生误解
- **Custom Agents 来源显示修复**：修复 `/context` 命令中插件来源的 Custom Agent 显示 `undefined` 的问题
- **优化截断重试机制**：当工具调用参数过长导致输出被截断时，重试提示现在会根据工具类型给出具体的拆分建议，引导模型将大型操作分解为多个较小的操作
- **修复无限重试循环**：统一了两套独立重试机制的检测标记，扩大检测窗口，并添加了最大重试次数限制（2 次）以防止无限循环

### 🐛 问题修复

- **Plan 确认框显示优化**：修复退出 Plan 模式确认框中错误显示 "Loading plan..." 的问题，现在会正确加载并展示 Plan 内容


## [2.53.0] - 2026-03-05

### ✨ 新功能

- **企业微信集成**：支持通过企业微信远程控制 CLI，实现移动端任务下发和结果推送

### 🔧 功能改进

- **MCP 动态工具更新**：支持 MCP 服务器的 `tools/list_changed` 通知，当服务器工具列表发生变化时自动刷新可用工具，无需重启或手动重连
- **Reasoning Effort 配置**：在 /config 面板新增 Reasoning Effort 设置项，支持 auto/low/medium/high/xhigh 五个级别，用户可自定义模型推理深度
- **模型默认推理级别**：将多个模型的默认 reasoning effort 从 medium 提升至 high，提升推理质量
- **状态栏数据增强**：新增会话名称、权限模式、上下文窗口使用情况、额外工作目录、Vim 状态等字段，为状态栏脚本提供更丰富的展示数据
- **状态栏多行渲染**：支持脚本输出多行内容，不再限制为单行
- **状态栏样式优化**：移除边框，支持从配置读取内边距，添加文本截断保护
- **LSP 服务器懒加载**：LSP 服务器现在默认采用懒加载模式，仅在首次使用时启动，减少启动时资源占用；可通过 `eager: true` 配置恢复立即启动行为
- **错误追踪**：WebSearch 和 ImageGen 工具在 API 调用失败时，错误信息中包含 requestId，便于后端定位问题
- **非交互模式权限拒绝优化**：改进 print 模式下工具权限被拒绝时的提示信息，提供清晰的绕过指引，并引导模型在能力受限时主动向用户说明所需权限
- **文件自动补全刷新**：修复输入 `@` 时无法提示新增文件的问题，文件列表缓存现在会在过期后自动刷新
- **Skill 工具结果展示优化**：改进 Skill 和斜杠命令执行后的结果消息格式，移除冗余的启动提示，使返回内容更清晰；增加 `<command-name>` 标签检测提示，避免重复调用已加载的 Skill
- **Hook 输入处理器**：新增 `HookInputProcessor` 扩展点，支持在 Hook 执行前对 `HookInput` 进行富化处理，内置注入生成 ID、模型、客户端、版本等上下文字段
- **图片服务重构**：将 `ImageService` 抽象为接口并移入协议层，类型定义统一收拢至协议文件，降低模块耦合
- **设置读取优化**：图片模型解析从单一 CLI 设置升级为多层级合并设置，支持更灵活的模型配置
- **错误处理**：改进 ACP 模式下的错误信息传输，客户端可获取更详细的错误状态码和错误代码
- **插件面板排序**：移除插件面板中的字母排序，保持数据源返回的原始顺序
- **模型列表排序**：统一国内版和 iOA 版产品配置中模型定义的排列顺序，使其与模型列表声明顺序保持一致

### 🐛 问题修复

- **对话历史恢复**：修复执行 compact 后 resume 会话时丢失压缩前上下文的问题
- **Team 中断信号隔离**：子代理不再监听主 Session 的 abort 信号，避免内部操作（如上下文压缩）误杀 Teammate
- **工具确认框冲突**：修复多个 Teammate 同时请求权限时确认框互相覆盖的问题
- **消息投递可靠性**：优化 Teammate 消息投递重试机制，未就绪时保持消息未读状态等待下次轮询
- **空闲唤醒机制**：Teammate 空闲时收到消息会自动唤醒 Agent，不再卡在队列中
- **消息去重**：防止同一条消息被重复添加到对话视图
- **全局锁超时**：工具审批全局锁增加 30 秒超时保护，防止死锁
- **修复路径解析**：修正相对路径 `./` 的解析方向，使用工作目录而非主目录
- **修复上下文切换数据丢失**：切换设置时状态栏数据不再重置为空


## [2.52.6] - 2026-03-03

### 🔧 功能改进

- **模型请求日志增强**：新增请求生命周期完整日志，包含请求发送、首 Token 到达、流式传输进度、完成/错误/超时等关键节点，支持通过 requestId 和 agent 名称快速定位问题
- **消除运行时警告**：修复长对话中出现的 MaxListenersExceededWarning 警告，封装统一的中止控制器管理工具
- **Hook 消息渲染增强**：Hook 消息现在会根据执行状态（成功/阻断/警告/错误）显示不同的图标和颜色，并支持展开/折叠查看详细内容


## [2.52.5] - 2026-03-03

### 🔧 功能改进

- **图片历史优化**：对话历史中的图片数据通过 BlobStore 去重存储，仅最近 N 轮保留完整图片，更早轮次自动替换为文本占位符，显著降低上下文 token 消耗
- **图片读取去重**：同一轮对话中重复读取相同图片时返回引用提示而非重复发送完整数据
- **Bash 超时配置**：支持通过 settings env 动态配置 Bash 工具超时时间
- **主题系统重构**：扩展主题色彩体系，支持语义化颜色（如 success、warning、error、info 等），增强终端颜色兼容性
- **终端适配**：新增 ChalkFactory 智能检测终端能力，自动适配颜色级别，支持色盲友好主题
- **硬编码颜色迁移**：将分散的 chalk 硬编码颜色调用统一收归主题系统管理，确保全局一致性
- **Gzip 压缩**：修复企业地址登录时请求体被错误压缩的问题，仅在 SaaS 和 iOA 环境下启用 gzip 压缩
- **自定义模型 URL 处理**：自动为自定义模型的 URL 补全 `/chat/completions` 后缀，用户无需手动拼接完整路径
- **异步压缩会话标识修正**：修复异步上下文压缩后会话身份被误判的问题，确保压缩消息正确归属主会话

### 🐛 问题修复

- **Hooks 命令执行**：修复 `node -e "..."` 等包含引号的 hook 命令执行失败的问题
- **登出竞态修复**：修复登出过程中异步操作（token 刷新、session 存储订阅）未及时终止，导致 session 被重新写回的问题
- **工具克隆修复**：修复工具对象克隆时丢失原型链方法的问题


## [2.52.4] - 2026-03-02

### 🔧 功能改进

- **首 token 超时检测**：新增请求发出后首个响应数据的超时检测机制，超时后自动断开并重试，避免长时间无响应的等待
- **流超时检测优化**：将流数据监控间隔从 10 秒缩短至 1 秒，提升异常连接的检测速度
- **超时环境变量**：支持通过 `CODEBUDDY_STREAM_TIMEOUT_MS` 和 `CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS` 环境变量自定义超时时间
- **智能重试策略**：首 token 超时仅重试 1 次，流数据超时保持原有多次重试策略，避免无限重试
- **请求压缩**：支持对 API 请求体进行 gzip 压缩，减少网络带宽消耗，提升慢速网络下的响应速度
- **CLI 子命令别名**：为 `mcp list`、`sandbox list`、`marketplace list` 添加 `ls` 简写别名，与 `config list` 保持一致
- **CLI 配置命令**：为 `config remove` 和 `config add` 添加 `-g/--global` 选项，支持操作全局配置
- **子命令路由修复**：修复使用别名调用子命令时路由路径错误的问题
- **macOS 代码签名**：修复 macOS 26+ 上因缺少 TeamIdentifier 导致多实例运行时被系统终止的问题
- **MCP 工具钩子修复**：解决 MCP 工具无法访问 Session 上下文导致 PreToolUse/PostToolUse 钩子无法正确触发的问题
- **Shell 环境快照**：修复 PATH 导出方式，使用 shell 自身的 PATH 变量替代 Node.js 进程变量，改善 Windows Git Bash 下路径格式兼容性
- **工具调用截断重试**：优化模型输出长度超限导致工具调用参数被截断时的重试机制，通过 SDK 输入过滤器在请求发送前自动修复，提升重试成功率并减少无效 API 请求
- **截断错误提示**：截断的工具调用结果展示更友好的错误提示，替代原始的 JSON 解析错误信息
- **Hook 权限确认提示优化**：PreToolUse Hook 返回 ask 决策时，将决策原因以黄色警告样式展示在权限确认框中，帮助用户更清晰地了解需要确认的原因
- **工具搜索服务**：优化延迟加载工具的索引和过滤机制，确保只有当前 Agent 配置的工具可被搜索
- **粘贴行为**：粘贴文本内容时不再自动检测是否为图片路径并转换，粘贴的文字始终原样插入
- **截图粘贴**：通过 Cmd+V 直接粘贴截图或剪贴板图片数据的功能不受影响，仍可正常转换为图片
- **设置项清理**：移除 `/config` 中已无实际用途的「Paste Image from Clipboard」开关
- **Shell 配置**：移除对 PowerShell 和 CMD 的支持，统一要求 Windows 用户使用 Git Bash，避免路径格式不兼容问题
- **命令解析**：修复 Bash 工具在命令包含未定义环境变量时无法正确识别命令根的问题
- **模型升级**：将 Gemini Pro 模型从 3.0 版本升级至 3.1 版本，以避免旧版本下线带来的影响

### 🐛 问题修复

- **输入历史导航**：修复按上键浏览历史时，滚动到以 `/` 开头的条目后无法继续滚动的问题
- **工具权限拒绝渲染**：修复 PreToolUse hook 拒绝和权限规则拒绝时工具调用无法在 UI 中正常渲染的问题


## [2.52.3] - 2026-02-28

### 🔧 功能改进

- **Gemini 生图模型**：新增 Gemini-3.0-Pro-Image、Gemini-3.1-Flash-Image、Gemini-2.5-Flash-Image 三个生图模型，支持文生图和图生图
- **图片模型选择面板**：修复当前模型标记不正确的问题，对齐模型列表展示格式
- **Ctrl+D 退出优化**：Ctrl+D 仅在输入框为空且没有进行中的对话时才触发双击退出流程，避免误操作
- **Windows 兼容性**：修复 Windows 环境下 Shell 路径选择逻辑，确保优先使用 Git Bash 而非 WSL bash，解决路径格式不兼容问题
- **Windows Shell 环境**：优化 Windows Git Bash 环境下的 shell snapshot 功能，改进配置文件检测、路径转换和编码处理，提升 Windows 平台的命令执行稳定性
- **Shell 环境快照**：修复 Windows 环境下 shell 类型检测不准确的问题，现在能正确识别 fish、tcsh 等非 POSIX shell 并优雅跳过快照创建
- **MCP 配置解析**：`--mcp-config` 参数支持文件路径和直接 JSON 两种格式，统一了 CLI 初始化和中间件的解析逻辑
- **MCP 权限优化**：非项目作用域的 MCP 服务器（用户配置、插件等可信来源）跳过审批检查，减少不必要的确认操作
- **MCP 初始化时序修复**：修复服务器列表初始化时序问题，确保状态同步时能正确获取完整服务器列表
- **Python SDK 类型扩展**：新增 HTTP、SSE、Remote 等 MCP 服务器配置类型定义，支持工具级配置选项
- **插件配置**：启用 PR 审查工具集、安全指导和 Ralph Loop 插件，增强代码审查和安全分析能力
- **依赖升级**：升级 OpenAI Agents SDK 至 0.5.2，OpenAI SDK 至 v6

### 🐛 问题修复

- **插件列表显示**：修复缓存清除后插件 skills 无法正确加载的问题


## [2.52.2] - 2026-02-28

### 🔧 功能改进

- **自定义令牌认证**：支持从 ACC_PRODUCT_CONFIG 环境变量中识别 custom-token 认证配置，修复配置已加载但同步未完成时的认证回退问题
- **/doctor 命令**：修复 session 为空时可能导致属性访问错误的问题
- **修复 SDK Python 构建脚本**：更新 goreleaser 输出目录路径以匹配 headless 构建产物命名，移除未使用的导入
- **会话加载性能优化**：`/resume` 命令加载历史会话时使用并行读取，减少等待时间
- **插件加载提速**：并行化插件加载流程，多插件场景下启动速度提升数倍


## [2.52.1] - 2026-02-28

### 🔧 功能改进

- **启动速度**：`cbc -v` / `cbc --version` 现在即时响应，不再触发完整的初始化流程，启动时间从 5~10 秒缩短至约 500ms
- **管道环境**：在非 TTY 环境下执行子命令（config、mcp、sandbox、plugin 等）时不再等待 stdin，避免卡住
- **稳定性**：认证初始化增加超时保护，网络不通时不再导致 CLI 无限等待
- **团队成员切换**：使用左右键即时切换成员视图，无需回车确认，切换后输入框自动可用
- **成员选择模式**：按下键进入选择模式并默认选中 @main，按上键或 Esc 退出
- **输入历史隔离**：上下键的历史导航与成员选择模式互不干扰，清空输入框自动退出历史导航
- **SDK MCP Server API 简化**：简化 Python SDK 中 MCP Server 的传参方式，可直接传入 server 对象，无需手动构造字典
- **JS SDK 新增可执行文件配置**：支持通过 `executable` 和 `executableArgs` 自定义 CLI 可执行文件路径和参数
- **跳过内部请求头**：支持通过 `CODEBUDDY_SKIP_INTERNAL_HEADERS` 环境变量清理内部请求头，避免干扰第三方 API 网关

### 🐛 问题修复

- **Skill 加载**：修复插件中的 Skill 偶发无法加载的问题，确保插件管理器初始化完成后再读取插件列表
- **Team 成员生成**：修复并发生成 Team 成员时颜色索引重复的问题，将成员注册逻辑统一串行化
- **Skill 调用**：修复 `user-invocable: false` 的 Skill 无法被模型自动调用的问题
- **子代理并发**：增加 abort signal 最大监听器数量，避免大量并发子代理时产生 MaxListenersExceededWarning


## [2.52.0] - 2026-02-26

### 🚀 新功能

- **团队视图切换**：支持通过方向键在不同的团队成员视图之间进行切换，按 ↓ 进入切换模式，←/→ 选择成员，Enter 确认切换，支持高亮预览和边框颜色同步
- **Headless 构建**：新增轻量级 headless 模式（体积减少 45%），支持 `--print`、`--serve`、`--acp` 快速启动

### 🔧 功能改进

- **启动性能**：优化启动流程，Application.start() 耗时降低 96%，内存占用减少 31%
- **Bun 原生优化**：使用 Bun 原生 API 替代第三方依赖（PTY、glob、semver 等），提升运行时性能
- **依赖精简**：移除不再需要的依赖项，减小安装体积
- **认证时序修复**：确保认证在 API 调用前完成，消除冷启动 401 错误
- **模型排序优化**：调整国内版默认模型优先级顺序
- **配置清理**：移除 iOA 和私有化版本中未使用的 SaveMemory 工具
- **命令执行稳定性**：优化命令执行与环境初始化流程，减少异常情况下的执行中断
- **认证体验**：增强 API Key Helper 获取令牌过程的健壮性，提升认证流程稳定性
- **错误处理优化**：将 model 和 session 层的错误处理从字符串匹配升级为自定义错误类，提升错误识别的可靠性和代码可维护性
- **流超时自动重试**：当模型流式响应超时时自动重试，避免用户手动操作
- **超时时间可配置**：支持通过环境变量 `CODEBUDDY_STREAM_TIMEOUT` 自定义流超时时间
- **命令建议过滤**：标记为不可直接调用的 Skill 不再出现在斜杠命令建议列表中
- **Topic Generator 优化**：强化提示词职责边界，改进解析逻辑，减少 token 浪费

### 🐛 问题修复

- **团队成员工具权限确认**：修复团队成员执行工具时跳过权限确认的问题，现在团队成员会继承主 Agent 的权限模式，需要用户确认后才能执行敏感工具
- **权限确认框成员标识**：权限确认框中显示团队成员名称和专属颜色，便于用户区分不同成员的工具调用请求
- **插件 MCP 配置加载**：修复插件 `.mcp.json` 不支持扁平格式的问题，现在同时兼容 `{ "mcpServers": {...} }` 包装格式和直接以服务名为 key 的扁平格式
- **团队成员状态显示**：修复团队成员正常完成任务后因 shutdown 流程被错误标记为 killed 的问题，已完成的成员现在正确显示完成状态；统一两处状态图标的显示逻辑
- **界面修复**：修正状态面板中 Memory 字段的拼写错误


## [2.51.2] - 2026-02-26

### 🔧 功能改进

- **新增模型支持**：添加 Gemini 3.0 Pro 和 Gemini 3.0 Flash 模型配置，扩展可用模型选择范围


## [2.51.1] - 2026-02-25

### 🔧 功能改进

- **stdin 读取调试日志**：在标准输入读取流程中添加日志记录，便于排查管道输入相关问题
- **Ctrl+N/P 快捷键映射**：支持使用 Ctrl+N/Ctrl+P 替代方向键 ↓/↑，在输入框、选择菜单、确认面板等所有场景中均可使用
- **Agent Teams 设置显示**：修复设置面板中 Agent Teams 默认状态显示为关闭的问题，现在正确显示为默认开启
- **Loading 状态 Token 展示优化**：修复主 agent 等待 subagent 时 token 显示为 0 的问题，现在能正确展示实时流式 token 变化；subagent 进度行新增实时流式 token 展示，同时保留累计 tool uses 和 tokens 信息
- **MCP 连接超时保护**：为 MCP 服务器连接等待添加超时机制，防止在 headless 模式下因服务器无响应而无限挂起
- **会话级授权同步**：在子代理执行过程中选择"本次会话不再询问"时，授权现在会同步到主会话和所有子代理，确保整个会话范围内生效
- **Team 成员流式 Token 显示**：Team 成员进度条支持实时流式 Token 数量展示，与子代理进度条保持一致的显示风格
- **Team 通知机制重构**：重构后台任务完成通知，改用 Team 邮箱延迟去重机制，避免重复通知干扰对话流；修复队列消息处理丢失发送者身份的问题；已完成的 teammate 收到关闭请求时自动回复；子代理发现的延迟加载工具同步到父 session；优化 Team 提示词
- **新增模型支持**：添加 GPT-5.3-Codex 模型配置

### 🐛 问题修复

- **自定义命令/Skill 覆盖内置命令**：修复自定义斜杠命令和 Skill 无法覆盖同名内置命令的问题，现在按项目级 > 用户级 > 内置的优先级正确覆盖，菜单中也不再显示被覆盖的内置命令
- **启动界面渲染优化**：修复欢迎 Banner 重复渲染以及信任对话框与 Banner 内容重叠的显示问题
- **后台任务查询**：修复后台 Agent 启动后通过 TaskOutput 查询时报 "not found" 的问题，现在同时支持两种 ID 格式查找


## [2.51.0] - 2026-02-24

### 🎉 新功能

- **记忆目录摘要**：系统提示词中新增记忆文件列表摘要，展示文件名、大小、修改日期及首行标题，帮助模型按需加载相关记忆文件
- **记忆文件自动清理**：会话历史清理时同步清理过期记忆文件，复用相同的保留期配置，避免记忆目录无限增长

### 🔧 功能改进

- **Skills 支持内联 Shell 命令**：Skills 的 SKILL.md 现在支持 `` !`command` `` 语法执行 Shell 命令，与斜杠命令保持一致的处理管道
- **Skill 斜杠命令分发**：支持通过 `/skill-name` 或 `skill-name` 直接调用已注册的 Skill，未匹配到内置命令时自动回退到 Skill 查找
- **自定义子代理工具继承**：修复自定义子代理在未配置工具列表时会继承创建子代理能力的问题，避免递归调用
- **斜杠命令菜单**：描述过长时自动截断，避免菜单项跨多行显示
- **YAML 解析**：支持折叠块标量语法（`>-`、`>+`），正确将多行描述折叠为单行
- **模型系数更新**：更新各模型的计费系数至最新值，新增部分模型支持

### 🐛 问题修复

- **确认框滚动**：修复权限确认框、计划确认框和编辑确认框内容超过终端高度时滚动条自动跳到顶部的问题


## [2.50.7] - 2026-02-19

### 🔧 功能改进

- **Team 成员焦点导航**：支持通过 Shift+↑/↓ 在 Team 成员之间切换视图，查看成员的对话历史、实时进度和 Token 消耗，Ctrl+O 快速返回主视图
- **成员消息直达**：聚焦成员后，输入框自动切换为向该成员发送消息模式，使用 @main 可将消息路由回主代理
- **成员会话恢复优化**：修复子代理 respawn 时 resultSubject 订阅丢失导致 0 token 的问题，修复 agent_end 事件竞态条件
- **消息路由增强**：SendMessage 工具支持 "main" 别名解析为 "team-lead"，用户消息在注入成员会话时不再添加 XML 包装

### 🐛 问题修复

- **子代理 AbortSignal 监听器泄漏修复**：修复 AgentTask 中 abort 事件监听器注册在旧的 AbortSignal 上、cleanup 时却从新的 AbortSignal 上移除的问题，消除级联 abort 时的 `Cannot read properties of undefined` 异常

## [2.50.6] - 2026-02-19

### 🔧 功能改进

- **高危命令识别规则优化**：大幅减少误杀率，细化 CRITICAL/HIGH/MEDIUM 三级风险判定规则，常见开发命令（如 `git restore --staged`、`rm temp.log`、`docker rm`、`kill -9`）不再被错误拦截
- **权限规则安全分层**：将 allow 规则按来源区分为可信（用户设置）和不可信（项目设置），防止恶意仓库通过 `.codebuddy/settings.json` 注入 allow 规则绕过安全检查
- **安全白名单扩展**：新增 50+ 常见开发工具命令到安全白名单，涵盖构建工具、测试框架、包管理器等
- **子代理模型配置优化**：为 MiniMax-M2.5 和 Kimi-K2.5 模型添加 relatedModels 配置，使子代理能正确使用对应的轻量级和推理模型

### 🐛 问题修复

- **进程僵死修复**：修复关闭终端后进程不退出且 100% CPU 占用的问题
- **Shell 句柄泄漏修复**：修复多处 Shell 执行句柄未正确释放的问题，防止 PTY 文件描述符泄漏
- **node-pty fd 泄漏修复**：检测并在 dispose 时关闭 node-pty 内部泄漏的额外 ptmx 文件描述符
- **诊断增强**：在 /doctor 面板中添加 Active PTYs 计数，便于检测潜在的 PTY 泄漏

## [2.50.5] - 2026-02-14

### 🎉 新功能

- **Bash 内置子代理**：新增 Bash 专用子代理，专注于命令执行任务（git 操作、构建工具、测试执行等），使用轻量级模型快速响应
- **命令注入检测**：新增 Bash 命令注入检测机制，拦截反引号替换、`$()` 命令替换、换行符注入等潜在危险命令
- **命令前缀提取**：新增多词命令前缀提取功能，支持环境变量前缀、子命令识别，对齐通用 policy_spec 规范

### 🔧 功能改进

- **子代理工具配置优化**：调整 Plan 子代理工具集，新增团队协作工具和 ToolSearch；精简 Explore 子代理工具，移除不必要的 TaskStop 和 TaskOutput
- **子代理标签渲染优化**：子代理名称统一使用前景色文字显示，替代原有的背景色标签样式，视觉更简洁一致

## [2.50.4] - 2026-02-14

### 🔧 功能改进

- **后台任务统一为团队系统**：后台 Agent 自动创建轻量级团队，通过 SendMessage 回传结果，无需手动轮询
- **移除 TaskOutput 工具依赖**：后台任务完成后自动通知主 Agent，不再需要 TaskOutput 轮询获取结果
- **简化 UI 进度展示**：后台任务统一纳入 TeammateProgressView 展示，TodoProgressBar 移除 teammate 合并逻辑
- **启动性能优化**：优化首次启动时的初始化流程，减少不必要的等待时间，并行化注册流程，提升启动速度约 10%
- **终端渲染优化**：统一所有动画组件（Spinner、呼吸灯、计时器）为全局单一时钟驱动，减少独立定时器导致的终端闪动
- **Static 渲染修复**：修复消息完成后不显示、需要 resize 终端才能看到的问题，优化增量渲染机制
- **内存泄漏修复**：修复 `refreshStatic` 导致 Ink 内部 `fullStaticOutput` 无限累积的问题
- **任务清理修复**：修复失败的子任务未从 TaskManager 中移除导致进度显示残留的问题

### 🐛 问题修复

- **Bash 工具渲染**：修复 Bash 工具执行结果下方偶尔出现多余空白行的问题

## [2.50.3] - 2026-02-13

### 🐛 问题修复

- **模块加载兼容性修复**：修复 `createRequire` 使用 `import.meta.url` 在某些打包环境下不可用的问题，改用 `__filename` 确保兼容性

## [2.50.2] - 2026-02-13

### 🔧 功能改进

- **MCP Remote 传输类型**：新增 `remote` 传输类型支持，允许通过远程 HTTP 连接 MCP 服务器
- **构建优化**：切换到 Rspack 拷贝插件并将 patch 脚本并行化，提升构建速度
- **任务进度显示优化**：已完成的子任务在全部执行完毕后自动清除，避免大量已完成条目累积占据屏幕空间

### 🐛 问题修复

- **粘贴 URL 误判修复**：修复粘贴以 `http://` 或 `https://` 开头的 URL 时被错误识别为文件路径的问题

## [2.50.1] - 2026-02-12

### 🔧 功能改进

- **文档导航优化**：将 Agent Teams 文档移至 Sub-Agents 之后，使导航结构更符合功能关联性

### 🐛 问题修复

- **配置文件注释保留**：修复保存 MCP 配置时 mcpServers 字段下的 JSONC 注释丢失的问题

## [2.50.0] - 2026-02-12

### 🎉 新功能

- **Agent Teams**：支持多 Agent 协作的 Team 功能，包括 TeamCreate、TeamDelete、SendMessage 工具
- **Team 任务协调**：Task 工具扩展支持 teammate 生成，TaskList 支持团队任务协调
- **功能开关**：通过环境变量控制 Team 功能的启用，关闭时自动屏蔽相关工具、参数和提示

### 🔧 功能改进

- **子代理任务展示优化**：后台任务以 `@AgentType` 样式展示实时进度，同步任务进度集成到 loading spinner 中，减少界面冗余
- **任务完成通知增强**：通知消息包含执行时长、工具调用次数和 token 用量等统计信息
- **后台 shell 任务清理**：子代理结束时自动清理其关联的后台 shell 任务，避免资源泄漏
- **TaskOutput 默认超时调整**：默认超时从 30s 提升到 120s，默认阻塞等待完成
- **延迟加载工具激活修复**：修复延迟加载工具通过搜索激活后仍报 "Tool not found" 的问题
- **工具未找到错误提示优化**：区分工具不存在和未激活两种场景，未激活时自动激活并提示重试
- **工具搜索结果展示优化**：搜索结果改为简洁文本格式，未展开时即可看到工具名称和描述
- **MCP 服务器移除**：修复移除 MCP 服务器后配置文件未实际删除对应条目的问题
- **SDK MCP 服务器生命周期管理**：SDK 注册的 MCP 服务器现在会在初始化时自动连接并立即可用，而非仅保存配置
- **依赖注入稳定性**：修复单例组件在循环依赖场景下可能被重复实例化的问题
- **SDK CLI 参数格式统一**：JS 和 Python SDK 的 CLI 参数格式标准化为 `--flag=value` 风格
- **Plan Mode 交互优化**：拒绝计划时区分"继续规划"和"退出规划模式"两种操作，避免用户被困在不可恢复的规划循环中
- **队列消息显示优化**：支持中文字符宽度感知的智能截断，自适应终端宽度，改善长消息的展示效果
- **Memory 功能默认启用**：将 Memory 功能的默认值调整为开启状态
- **主题扩展**：新增 delegate mode 专属颜色配置
- **Bot 触发配置**：调整 PR 评论触发方式为 NPC 模式

## [2.49.7] - 2026-02-11

### 🎉 新功能

- **GLM-5.0 模型支持**：新增 GLM-5.0 模型，支持 200K 上下文和 48K 输出，提供更强的推理能力

## [2.49.6] - 2026-02-11

### 🔧 功能改进

- **CI 配置优化**：为 bot 配置添加 npcName 参数支持
- **ACP SDK 升级**：升级 ACP SDK 至 0.14.1 版本，修复终端输出字节限制参数类型兼容性问题
- **SDK MCP 初始化时序**：修复 SDK 模式下 MCP 服务器注册与 prompt 处理的竞态问题，确保 MCP 工具在 prompt 处理前就绪
- **Headless 模式检测**：改进 headless 模式识别逻辑，支持 ACP 模式和非 TTY 环境
- **MCP 配置文件路径**：SDK 的 mcpServers 参数新增支持文件路径字符串格式

## [2.49.5] - 2026-02-11

### 🔧 功能改进

- **MCP 服务器就绪检测**：修复 SDK 模式下 MCP 工具在初始化时可能未就绪的问题
- **构建优化**：移除 Bun 编译中不再需要的构建标志，简化二进制打包流程

### 🐛 问题修复

- **会话压缩挂起修复**：修复了 ACP 会话在压缩消息日志后可能永久挂起的问题
- **超时保护**：为消息订阅者等待机制增加了超时保护，防止异常情况下的永久阻塞
- **会话历史恢复**：修复查找最后消息 ID 时未正确跳过自定义消息项的问题，避免恢复会话时定位到错误的消息位置

## [2.49.3] - 2026-02-10

### 🔧 功能改进

- **模型错误提示优化**：当模型不可用时，自动展示当前账号支持的模型列表，方便用户快速切换到可用模型
- **错误处理**：优化了被封装的模型行为错误（ModelBehaviorError）的处理逻辑，确保工具调用失败时能够正确识别并重试
- **MCP 服务器就绪检测**：修复 SDK 模式下 MCP 工具在初始化时可能未就绪的问题

## [2.49.2] - 2026-02-10

### 🔧 功能改进

- **跨会话任务列表共享**：支持通过环境变量 `CODEBUDDY_TASK_LIST_ID` 在不同会话间共享任务列表，便于多终端协作和持续任务追踪
- **日期格式优化**：系统信息中的日期显示现在包含星期和更友好的格式，提升可读性

### 🐛 问题修复

- **中断状态竞态条件**：修复 ACP 流式模式下中断状态因共享 RunState 被后续运行修改导致的竞态问题，改用事件快照缓存中断状态
- **结果消息查找**：改进最终助手消息查找逻辑，支持从响应输出中反向搜索已完成消息，并在未找到时回退到会话历史
- **会话切换权限保持**：修复切换会话时权限模式未保留的问题，确保切换后延续当前的权限设置
- **拦截器重试机制**：修复了当模型响应拦截器触发自动重试时，视图层仍然输出原有失败结果的问题。现在拦截器启动重试后，会正确抑制失败结果的输出，仅显示重试后的成功响应

### 🔧 构建优化

- **构建工具升级**：升级 goreleaser、bun、uv 至最新版本
- **Bun 编译优化**：启用字节码编译和 ESM 格式，提升启动性能

## [2.49.1] - 2026-02-09

### 🔒 安全加固

- **沙箱配置文件保护**：沙箱模式下自动禁止写入 CodeBuddy 配置文件（settings.json），防止通过注入 hooks 实现沙箱逃逸攻击
- **工具权限同步**：沙箱的文件系统拒绝规则现在同步应用到 Write、Edit 等文件操作工具，确保安全策略全面一致

### 🔧 功能改进

- **会话列表过滤**：过滤子代理和压缩分支会话，确保会话列表和最近会话仅展示用户真实会话
- **SDK 文档修复**：修复认证配置链接中的括号格式问题

### 🐛 问题修复

- **会话历史定位**：修复了切换会话或恢复历史时，`lastMessageId` 可能错误指向无 ID 的自定义消息（如摘要、主题）导致对话链断裂的问题

## [2.49.0] - 2026-02-08

### ✨ 新功能

- **使用洞察报告**：新增 `/insights` 命令，生成 AI 驱动的使用洞察分析报告，涵盖交互风格、项目领域、摩擦点、亮点、改进建议等多个维度，支持在浏览器中查看 HTML 报告

### 🔧 功能改进

- **统计数据准确性**：优化 token 用量统计逻辑，正确区分主会话与子代理会话，修复工具调用 token 遗漏问题
- **进度显示**：支持自定义进度文本，在 loading 状态中实时展示当前处理进度
- **会话查询性能**：跨项目会话查询支持时间范围预过滤，减少不必要的反序列化开销
- **渲染稳定性**：修复 Static 组件渲染时机问题，改善消息列表显示一致性
- **会话上下文**：在 prompt 上下文中自动注入当前会话 ID，便于追踪和关联会话信息
- **自定义模型配置**：修复自定义模型错误继承全局关联模型配置的问题，确保自定义模型使用时行为符合预期
- **记忆系统**：优化记忆上下文提示词，精简表述并新增隐式记忆源支持，提升跨会话记忆召回能力
- **多语言支持增强**：所有子 Agent（Explore、Plan、Statusline、Content Analyzer 等）现在会正确遵循用户的语言设置进行回复
- **UI 刷新优化**：优化了工具执行完成后的终端刷新策略，仅在编辑类工具完成时触发刷新，并增加防抖机制减少不必要的渲染
- **内存优化**：子 Agent 任务完成后自动释放会话历史和引用，减少内存占用
- **Grep 搜索**：自动修正搜索模式参数，避免不必要的调用失败；兼容 ripgrep 正则语法
- **文件读取**：读取目录时返回目录列表，帮助快速定位目标文件
- **界面优化**：调整错误和中断状态的显示颜色，降低视觉干扰

### 🐛 问题修复

- **工具错误处理**：改进工具未找到时的错误提示和处理逻辑
- **Headless 模式**：修复使用非默认 agent（如 compact）时流式输出阻塞的问题，确保 completion 信号正确发送
- **工具结果显示**：修复 Edit 等工具执行完成后输出不显示，需要手动调整终端大小才能看到的问题
- **会话恢复列表**：移除会话恢复面板中不必要的 agent 类型过滤，允许恢复所有有效会话

## [2.48.1] - 2026-02-06

### 🔧 功能改进

- **环境变量认证冲突检测**：当设置了 `CODEBUDDY_API_KEY` 或 `CODEBUDDY_AUTH_TOKEN` 环境变量时，/login 命令会检测并提示用户如何解决冲突；认证失败时显示更详细的诊断信息
- **子代理消息标识**：修复子代理 user 消息在流式输出时缺少父工具标识的问题，客户端现可正确区分主代理和子代理的消息
- **MCP prompt 命令**：统一 MCP prompt 与斜杠命令的上下文拼接格式，确保模型能正确理解命令来源和参数

### 📝 文档更新

- **Prompt Hooks 文档**：完善基于提示词的 Hooks 功能文档，新增支持事件说明、配置示例和最佳实践指南

## [2.48.0] - 2026-02-05

### 🎉 新功能

- **图生图工具（ImageEdit）**：新增 `ImageEdit` 工具，支持基于已有图片进行 AI 编辑和修改
  - 支持风格转换、添加元素、修改颜色等图片编辑操作
  - 使用 `/model:image-to-image` 命令切换图生图模型
  - 通过 `CODEBUDDY_IMAGE_TO_IMAGE_MODEL` 环境变量或 `imageToImageModel` 设置项配置默认模型
- **Prompt Hook**：新增基于 LLM 的 Hook 类型，支持使用自然语言定义触发条件，实现更灵活的工作流控制

### 🔧 功能改进

- **图片 API 客户端重构**：提取共享的 `ImageApiClient` 模块，统一文生图和图生图的 API 调用逻辑
- **模型标签系统**：引入 `text-to-image` 和 `image-to-image` 模型标签，支持同一模型同时具备多种图像生成能力
- **Hook 配置面板**：支持显示和管理 Prompt Hook
- **Hook 错误反馈**：优化阻断信息的展示方式
- **Token 计算准确性**：`/context` 命令现在只统计实际启用的工具，排除被禁用的内置工具和 MCP 工具
- **Plan 模式权限继承**：Plan 模式下保留进入前的权限设置，支持 "plan + bypass" 等组合模式，子代理同样继承此权限配置
- **计划模式**：退出计划模式时恢复到进入前的权限模式，而非固定切换到特定模式
- **确认选项**：简化计划模式退出时的确认选项，提升用户体验
- **热更新系统优化**：在低文件描述符（FD）限制的容器环境中自动检测并优化热更新行为，避免 EMFILE 错误导致崩溃
- **新增环境变量**：支持 `CODEBUDDY_DISABLE_HOT_RELOAD` 完全禁用热更新，适用于资源受限环境
- **Windows 路径提示**：在 Windows 平台添加使用正斜杠的提示，避免反斜杠导致路径解析错误
- **WorkBuddy 配置目录分离**：WorkBuddy 现在使用独立的配置目录 `.workbuddy/`，与 CodeBuddy CLI 的 `.codebuddy/` 目录分离，避免配置冲突
- **路径处理优化**：改进了路径工具函数的兼容性和稳定性
- **UI 组件优化**：修复了 Skills 和 Agents 面板的显示问题
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.43，SDK-Python 至 0.3.41

### 🐛 问题修复

- **ACP 取消处理**：优化取消请求的事件传递机制，确保会话能正确响应取消操作
- **MCP 非交互模式**：修复 ACP 模式下 MCP 工具未正确识别为非交互模式的问题
- **记忆上下文注入**：修复记忆提示注入时缺少系统标签的问题，确保格式一致性
- **目录扫描**：修复软链接目录下文件相对路径计算不正确的问题

## [2.47.0] - 2026-02-04

### ✨ 新功能

- **跨会话记忆功能**：新增实验性记忆功能，支持 Agent 在会话间保持持久化记忆。可通过 `/config` 设置面板或 `memory.enabled` 配置项启用
- **团队记忆模式**：支持团队协作场景，将记忆存储在项目目录下便于共享

### 🔧 功能改进

- **command:// URI 处理**：优化 ACP 协议中 command:// 资源链接的处理，正确转换为斜杠命令格式并回显原始内容块
- **命令推送过滤**：修复内置命令被错误推送到 IDE 的问题，现在只推送用户自定义命令、skills 和特定内置命令
- **文件路径搜索**：优化重复字符查询的匹配精度，避免误匹配分散的字符
- **SSH 远程剪贴板**：修复在 Linux + SSH 远程环境下 Ctrl+Y 复制到剪贴板失败的问题，通过实现 OSC 52 协议支持远程终端剪贴板操作
- **会话恢复历史控制**：优化 SDK 恢复会话时的历史回放逻辑，通过 `hasPrompt` 信号让 CLI 智能判断是否需要回放历史消息，提升 resume 场景的使用体验
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.42，SDK-Python 至 0.3.40

### 🐛 问题修复

- **管道输入**：修复使用管道传递输入时内容无法被读取的问题（如 `cat file.txt | codebuddy -p "分析"`）
- **Stop Hooks 执行时机**：修复当工具需要用户确认时 Stop Hooks 被错误执行的问题，现在只有在没有待审批工具时才会触发

## [2.46.0] - 2026-02-04

### ✨ 新功能

- **语言设置**：在 `/config` 中新增 Language 选项，用户可以设置首选响应语言，CodeBuddy Code 将使用指定语言进行回复

### 🔧 功能改进

- **复制快捷键**：新增 Ctrl+Y 快捷键，可快速复制最后一条 AI 回复到剪贴板
- **Shell 命令执行优化**：修复命令执行时无条件使用 eval 包装的问题，仅在加载额外环境配置时才使用 eval，保持默认情况下的原有行为
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.41，SDK-Python 至 0.3.39

## [2.45.1] - 2026-02-04

### 🔧 功能改进

- **登录界面优化**：调整登录方式顺序，将 iOA 登录放置到最后并标注仅限腾讯内部员工使用
- **文档完善**：在快速入门文档中添加四种登录方式的详细说明
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.40，SDK-Python 至 0.3.38

## [2.45.0] - 2026-02-03

### ✨ 新功能

- **工具搜索**：新增 ToolSearch 和 DescribeTool 工具，支持通过自然语言搜索和按名称获取延迟加载的工具
- **延迟加载**：MCP 服务器支持 defer_loading 配置，减少上下文消耗并提高工具选择准确性
- **环境变量模型配置**：支持通过环境变量配置模型，方便在 CI/CD 环境和脚本中灵活控制模型选择
  - `CODEBUDDY_MODEL`：覆盖默认代理模型
  - `CODEBUDDY_SMALL_FAST_MODEL`：配置 lite 变体模型
  - `CODEBUDDY_BIG_SLOW_MODEL`：配置 reasoning 变体模型
  - `CODEBUDDY_CODE_SUBAGENT_MODEL`：配置子代理模型
  - `MAX_THINKING_TOKENS`：启用扩展思考并设置 token 预算
- **Commands 订阅**：SDK 新增 `getAvailableCommands()` 和 `subscribeToCommands()` 方法，支持获取和订阅 CLI 可用命令列表

### 🔧 功能改进

- **预发环境域名配置**：新增 staging.codebuddy.cn 等预发环境域名支持
- **命令订阅频道**：支持 SDK 订阅命令列表变更通知，实时获取可用的自定义命令和 Skills
- **Skill Fork 上下文**：支持在 Skill 中使用 `context: fork` 配置，使 Skill 在独立的子代理上下文中执行，不访问主对话历史
- **Agent 类型指定**：新增 `agent` 字段，可指定执行 Skill 的子代理类型（如 Explore、Plan 等）
- **模式命名简化**：将 "Plan Mode" 简化为 "Plan"，使界面文案更简洁
- **图片粘贴**：增加剪贴板读取重试机制，提高第三方截图工具粘贴成功率
- **图片格式支持**：扩展 macOS 剪贴板图片格式检测，支持更多截图工具
- **快捷键提示**：macOS 下明确支持 Cmd + V 和 Ctrl + V 两种粘贴方式
- **回退提示**：完善双击 Esc 回退功能的说明，包含代码回退
- **错误恢复**：当模型返回无效工具名时，系统会提示模型检查并重试，而非直接停止会话
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.39，SDK-Python 至 0.3.37

### 🐛 问题修复

- **ACP 多轮对话**：修复第二轮 prompt 直接返回结果、缺少 sessionUpdate 事件的问题
- **插件加载去重**：修复插件 skills、agents、commands 在菜单中重复显示的问题

## [2.44.1] - 2026-02-03

### 🔧 功能改进

- **Skill/Command 调用控制**：新增 `disableModelInvocation` 配置项，支持将 skill 或 command 设置为仅手动触发模式，避免被模型自动调用
- **自定义 Headers 合并优化**：修复 HTTP headers 合并时的大小写敏感问题，现在会正确覆盖同名但大小写不同的 header（如 `Authorization` 和 `authorization`）
- **输入框**：修复消息发送时序问题，确保消息完全发送后再清空输入
- **子代理中断处理**：优化 Task 子代理被用户中断时的行为，现在会返回清晰的中断提示和可恢复的 Agent ID，支持通过 `resume` 参数继续任务
- **Plan 子代理能力增强**：Plan 子代理现在可以使用 Write、Edit、MultiEdit 工具编辑 plan 文件
- **媒体内容错误自动恢复**：当图片过大、格式无效或数量过多导致请求失败时，系统会自动移除问题内容并提供压缩建议，让对话能够继续进行
- **allowed-tools 字段格式支持**：自定义 Skill 和 Command 的 `allowed-tools` 字段现在同时支持逗号分隔字符串和 YAML 数组两种格式
- **WebFetch 工具**：增强对 SPA 页面的支持，当页面主体内容为空时自动提取 meta 标签信息（title、description、og:title、og:description、keywords）
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.38，SDK-Python 至 0.3.36

### 🐛 问题修复

- **自定义请求头解析**：修复换行符判断逻辑，确保多行 header 配置能够被正确解析
- **文档**：修正沙箱文档链接指向正确的文件

### 📚 文档更新

- **SDK 示例文档**：新增 SDK 演示页面，提供 TypeScript SDK 的使用示例和最佳实践
- **技能与命令文档**：更新技能和斜杠命令的相关文档说明

## [2.44.0] - 2026-02-02

### 🚀 新功能

- **会话标题同步**：支持将会话主题（Topic）通过 ACP 协议同步给 IDE，便于在标签页或侧边栏显示有意义的会话名称

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.37，SDK-Python 至 0.3.35

## [2.43.1] - 2026-02-02

### 🚀 新功能

- **任务管理工具重构**：将任务管理功能拆分为 TaskCreate、TaskGet、TaskUpdate、TaskList、TaskStop 5 个独立工具，提供更细粒度的任务控制能力
- **Skill 工具增强**：支持直接执行斜杠命令，新增 args 参数用于传递命令参数

### 🔧 功能改进

- **计划模式增强**：新增 `/plan` 命令用于预览当前计划文件内容，优化计划模式下的权限控制，仅允许编辑计划文件
- **UI 优化**：改进计划文件编辑时的展示效果，优化进入计划模式的确认框样式
- **子代理配置**：更新 Explore 和 Plan 子代理的工具列表配置，新增 max_turns 参数支持控制代理执行轮次
- **Shell 环境快照**：执行命令时自动捕获用户 shell 配置（函数、别名、选项），确保命令在用户熟悉的环境中运行
- **Shell 环境文件支持**：新增 `CODEBUDDY_ENV_FILE` 环境变量，解决非登录 shell 无法加载 `/etc/profile` 等系统配置的问题
- **提示词优化**：优化 Agent 提示词模板，移除冒号前缀说明，新增时间预估禁用规则，提升回复简洁性
- **文件搜索优化**：精简硬编码忽略规则，优先依赖项目 .gitignore 配置，避免误杀用户需要的文件
- **Grep 工具**：新增 context 参数别名，提升使用便捷性
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.36，SDK-Python 至 0.3.34

## [2.42.3] - 2026-01-31

### 🔧 功能改进

- **会话摘要生成**：自动为会话生成 AI 摘要，在 resume 列表中展示更友好的描述
- **会话主题持久化**：终端标题现在会保存到会话历史，便于后续查看
- **非交互模式支持**：新增 `--enable-session-tracking` 参数，支持在非交互模式下启用会话追踪功能
- **会话追踪配置拆分**：将 `--enable-session-tracking` 拆分为 `CODEBUDDY_INCLUDE_SUMMARY_MESSAGE` 和 `CODEBUDDY_INCLUDE_TOPIC_MESSAGE` 两个独立环境变量，支持更细粒度的控制
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.34，SDK-Python 至 0.3.32

## [2.42.2] - 2026-01-31

### 🔧 功能改进

- **CI 并行测试**：MR 时单元测试和 E2E 测试并行执行，提升 CI 效率
- **热更新服务**：简化热更新流程，移除冗余的用户通知逻辑
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.33，SDK-Python 至 0.3.31

## [2.42.1] - 2026-01-31

### 🔧 功能改进

- **启动性能监控**：新增启动时间分析器，可在 /doctor 面板查看各阶段耗时
- **E2E 性能测试**：新增启动性能 E2E 测试，CI 中自动验证启动时间不超过阈值
- **WSL 环境支持**：自动检测 WSL 环境并提示模型使用正确的 Linux 路径格式
- **路径兼容性**：修复模型在非 Windows 平台发送 Windows 风格路径时的解析问题
- **Session 初始化优化**：优化 Session 的 transport 初始化逻辑，确保并发调用时只执行一次初始化
- **Transport 就绪检测**：改进 CLI 进程就绪状态判断，使用显式标志位替代轮询检测
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.32，SDK-Python 至 0.3.30

## [2.42.0] - 2026-01-30

### 🎉 新功能

- **MCP 配置 JSONC 支持**：MCP 配置文件现在支持 JSONC 格式，允许添加单行注释 (`//`)、多行注释 (`/* */`) 和尾随逗号，提升配置文件的可读性和可维护性

### 🔧 功能改进

- **Python 3.10 支持**：Agent SDK 现已支持 Python 3.10，扩展了兼容的 Python 版本范围
- **ACP 会话控制**：修复了通过 SDK 设置模型和权限模式的功能
- **数据追踪**：修复 prompt suggestion 与主对话数据混淆的问题，确保数据统计更准确
- **工具调用截断恢复**：当模型返回不完整的工具调用参数时，自动检测并请求模型重新生成，提升对话稳定性
- **会话 Fork 功能增强**：支持更多参数组合方式，可通过 `--resume` 或 `--session-id` 指定源会话，并支持自定义新会话 ID
- **命令消息格式**：统一斜杠命令和技能的消息标签格式，新增 `command-args` 标签支持参数提取
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.31，SDK-Python 至 0.3.29

### 🐛 问题修复

- **Hook 输出显示**：修复 hook 执行后显示多余 JSON 原始数据的问题，现在只显示有意义的消息内容
- **软链接支持**：修复 rules 目录下软链接文件无法正确加载的问题，增加遍历深度限制防止循环软链接导致无限遍历

## [2.41.8] - 2026-01-30

### 🔧 功能改进

- **Print 模式输出优化**：在 print 模式下静默通知类消息，避免污染 agent 输出流
- **配置优化**：移除冗余的 deploymentType 配置字段，简化产品配置结构
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.30，SDK-Python 至 0.3.28

### 🐛 问题修复

- **自定义请求头解析**：修复换行符判断逻辑，确保多行 header 配置能够被正确解析
- **系统提示词传递**：修复 SDK v2 Session API 中 `systemPrompt` 参数未正确传递给 transport 的问题
- **会话加载竞态条件**：修复多窗口场景下并发调用 `loadSession` 和 `prompt` 时的竞态条件问题，防止会话数据不一致

### 📚 文档更新

- **环境变量文档**：新增 `CODEBUDDY_IMAGE_GEN_ENABLED` 功能开关说明
- **发版说明**：新增 v2.40.0 至 v2.41.7 版本的中英文发版说明
- **SDK 文档**：完善 hooks、permissions、TypeScript SDK 等文档内容

## [2.41.7] - 2026-01-29

### 🔧 功能改进

- **Checkpoint 性能优化**：将 checkpoint 文件读取改为异步并行处理，避免阻塞事件循环，提升响应性能
- **产品配置优先级修复**：调整 MODELS provider 优先级，确保在 CLOUD 配置之后执行
- **部署类型标识**：为各产品配置添加 deploymentType 字段，支持区分 SaaS、Cloud-Hosted 和 Self-Hosted 部署环境
- **SDK 工具参数传递**：修复 allowedTools/disallowedTools 参数格式，确保正确传递多个工具名称
- **Python SDK 流缓冲区**：增加 100MB 缓冲区限制，防止 MCP 服务返回大 JSON 响应时出错
- **会话恢复优化**：改进 session/load 流程，确保历史消息和 artifact 恢复在响应发送后执行，修复多连接场景下的重复发送问题
- **SDK 版本追踪**：SDK 在与 CLI 通信时会自动注入 User-Agent 请求头，包含 SDK 版本和运行时信息，便于后端服务追踪和诊断
- **CI 配置优化**：更新 Homebrew 发布流程的认证配置
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.29，SDK-Python 至 0.3.27

### 📝 文档修复

- **SDK Custom Tools 文档**：修复 Python SDK 示例中 tool 装饰器的错误用法，改为从包直接导入并使用正确的装饰器语法

## [2.41.6] - 2026-01-28

### 🔧 功能改进

- **输入提交优化**：修复在输入斜杠命令时无法按回车提交的问题，现在可以正常提交命令或将无效命令作为普通消息发送
- **热更新优化**：修复 plugins 目录热更新时可能触发 `.git` 等系统目录变更事件的问题，提升稳定性
- **上下文压缩**：优化历史记录处理逻辑，过滤分支历史确保压缩准确性
- **工具描述模板**：优化工具描述中的引号格式，提升可读性
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.28，SDK-Python 至 0.3.26

## [2.41.5] - 2026-01-28

### 🐛 问题修复

- **热更新优化**：修复 plugins 目录热更新时可能触发 `.git` 等系统目录变更事件的问题，提升稳定性

### 🔧 功能改进

- **会话锁优化**：将 session lock 的获取延迟到实际使用时，减少锁泄漏风险，并支持 fork 操作无需获取锁
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.27，SDK-Python 至 0.3.25

## [2.41.4] - 2026-01-28

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.26，SDK-Python 至 0.3.24

## [2.41.3] - 2026-01-27

### 🔧 功能改进

- **新增模型**：支持 Kimi-K2.5 模型，具备工具调用、图像理解和推理能力
- **参数校验优化**：改进工具参数校验错误提示，提供更清晰的错误信息
- **类型自动转换**：支持字符串形式的数字参数自动转换，提升兼容性
- **热更新通知优化**：用户级 settings.json 热更新时不再显示通知，减少不必要的干扰
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.25，SDK-Python 至 0.3.23

## [2.41.2] - 2026-01-27

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.24，SDK-Python 至 0.3.22

## [2.41.1] - 2026-01-27

### 🔧 功能改进

- **会话管理优化**：SDK 重构 sessionId 参数，改为自动生成，简化 API 调用
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.23，SDK-Python 至 0.3.21

## [2.41.0] - 2026-01-27

### ✨ 新功能

- **配置热更新**：支持 Skills、记忆、配置文件的热更新，修改后无需重启 CLI 即可生效

### 🔧 功能改进

- **工具白名单**：新增 `--tools` 选项，支持限制 CodeBuddy 可使用的内置工具集。可设置为空字符串禁用所有内置工具，或指定逗号分隔的工具列表
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.22，SDK-Python 至 0.3.20

### 📝 文档更新

- **环境配置说明**：为 SDK、ACP 和 IAM 文档添加 `CODEBUDDY_INTERNET_ENVIRONMENT` 环境变量配置指引，帮助不同版本用户正确配置认证环境

## [2.40.1] - 2026-01-27

### 🐛 问题修复

- **图片生成工具**：修复 Windows 系统下输出目录路径解析错误的问题
- **输入建议**：修复从建议菜单选择后消息重复发送的问题

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.21，SDK-Python 至 0.3.19

## [2.40.0] - 2026-01-27

### 🎉 新功能

- **SDK 延迟控制请求同步**：SDK 新增延迟控制请求同步功能，支持在发送消息前设置权限模式和模型，提供更灵活的 API 调用方式

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.20，SDK-Python 至 0.3.18

## [2.39.0] - 2026-01-26

### 🎉 新功能

- **图片生成工具**：新增 `ImageGen` 工具，支持通过 AI 模型根据文本描述生成图片，可自定义尺寸、风格、质量等参数
- **文生图模型切换**：新增 `/model:text-to-image` 命令，支持查看和切换文生图模型
- **CLI 参数支持**：新增 `--text-to-image-model` 参数，可在启动时指定文生图模型
- **配置持久化**：支持通过 `textToImageModel` 配置项设置默认文生图模型

### 🔧 功能改进

- **配置面板**：将 Env-Route 选项移至开发者模式，通过 `/config --dev` 或 `/config -d` 激活
- **输入提交优化**：修复在输入斜杠命令时无法按回车提交的问题，现在可以正常提交命令或将无效命令作为普通消息发送
- **工具描述模板**：优化工具描述中的引号格式，提升可读性
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.19，SDK-Python 至 0.3.17

## [2.38.2] - 2026-01-26

### 🔧 功能改进

- **路径解析优化**：使用 PathUtils 统一 WASM 文件和证书文件的路径解析逻辑，支持从 EMBED_FS 加载嵌入资源，提升不同部署环境下的兼容性
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.18，SDK-Python 至 0.3.16

### 🐛 Bug 修复

- **控制台输出**：修复特定场景下控制台输出模式解析异常的问题

## [2.38.1] - 2026-01-25

### 🔧 功能改进

- **命令安全检查**：移除未使用的命令黑名单功能，简化代码结构
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.17，SDK-Python 至 0.3.15

## [2.38.0] - 2026-01-25

### 🚀 新功能

- **子 Agent 模型变体**：Task 工具新增 `model` 参数，支持指定 `lite`、`reasoning` 等模型变体，根据任务复杂度选择合适的模型

### 🔧 功能改进

- **Checkpoint Hook**：优化文件变更统计计算，通过对比备份文件与当前文件提供准确的增删行数
- **Shell 编码处理**：优化终端输出的字符编码解码逻辑，改善 Windows 环境下中文等非 ASCII 字符的显示效果
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.16，SDK-Python 至 0.3.14

### 📝 文档更新

- **环境要求**：明确 Node.js 最低版本为 18.20+
- **开发文档**：完善 CODEBUDDY.md，补充开发命令、目录结构说明和构建流程细节
- **文档同步**：同步 CLI 文档到 IDE docs 目录，包括中英文版本
- **Release Notes**：新增 v2.37.4 至 v2.37.20 版本的发布说明
- **新增文档**：添加费用说明文档 (costs.md)
- **文档优化**：更新 hooks、settings、models 等核心文档

## [2.37.20] - 2026-01-24

### 🔧 功能改进

- **模型临时切换**：在模型选择面板按 `t` 键可仅对当前会话生效，不修改用户配置
- **--model 参数优化**：命令行 `--model` 参数现在正确覆盖项目级配置，当前会话立即生效
- **上下文压缩优化**：压缩时过滤规则和记忆内容，避免将配置指令压缩进摘要，压缩后自动重新注入完整规则
- **配置面板**：隐藏开发者选项，需通过 `/config --dev` 访问
- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.15，SDK-Python 至 0.3.13

## [2.37.19] - 2026-01-23

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.14，SDK-Python 至 0.3.12

## [2.37.18] - 2026-01-23

### 🐛 问题修复

- **登录视图优化**：修复登录方式映射配置问题，优化登录流程的界面展示

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.13，SDK-Python 至 0.3.11

## [2.37.17] - 2026-01-23

### 🔧 功能改进

- **SDK 版本更新**：同步更新 SDK-JS 至 0.3.12，SDK-Python 至 0.3.10

## [2.37.16] - 2026-01-23

### 🔧 功能改进

- **配置更新**：将机器人配置文件纳入构建流程

### 🐛 问题修复

- **产品配置加载**：修复 endpoint 变更后模型列表不一致的问题，确保用户切换企业版 URL 登录时配置正确加载

## [2.37.15] - 2026-01-23

### 🐛 问题修复

- **退出登录流程优化**：修复退出登录后 token 未清理的问题,确保认证拦截器正确处理登出状态
- **HTTP 拦截器增强**：改进认证 HTTP 拦截器的错误处理和状态同步机制

## [2.37.14] - 2026-01-22

### 🔧 功能改进

- **SDK 动态配置**：新增 `getAvailableModes()` 和 `getAvailableModels()` 方法，支持动态获取可用权限模式和模型列表
- **会话级设置**：`setModel()` 和 `setPermissionMode()` 现在仅影响当前会话，不再持久化到配置文件
- **新增用户提示**：添加更多内置提示，帮助用户了解快捷键和操作技巧
- **模型切换快捷键**：支持 Option/Alt + P 快速切换模型
- **输出限制统一调整**：将各类工具的 token 限制统一为 20000，并排除图片内容不受此限制
- **环境变量支持**：Read 工具支持 `CODEBUDDY_CODE_FILE_READ_MAX_OUTPUT_TOKENS` 环境变量自定义限制
- **Bash 输出上限**：新增 100000 字符的硬上限，防止环境变量设置过大
- **启动性能优化**：优化认证和服务配置初始化流程，提升 CLI 冷启动速度
- **插件市场安装**：优化市场和插件安装流程，提升首次安装和自动更新的性能，显著减少等待时间
- **代码清理**：移除会话处理器中的冗余调试日志，减少日志噪音
- **构建优化**：修复外部 npm 包依赖配置，确保构建稳定性

### 🐛 问题修复

- **Diff 渲染稳定性**：修复了工具调用参数解析时因空字符串或不完整 JSON 导致的渲染崩溃问题

### 🔧 性能优化

- **异步文件操作**：将自定义命令、Agent 和 Skill 的加载改为异步并行处理，提升启动性能
- **Git 信息收集**：优化仓库扫描逻辑，采用异步并行处理提升性能
- **产品配置加载**：改进配置文件查找机制，支持并行路径检查

## [2.37.13] - 2026-01-22

### 🔧 功能改进

- **企业版认证**：优化企业 ID 获取时序，确保企业模型列表正确加载
- **自定义认证**：修复认证状态变化时 token 丢失导致的认证失败问题

## [2.37.12] - 2026-01-22

### 🎨 界面优化

- **应用图标更新**：更新 Work 应用图标，提升视觉一致性

### 🔧 功能改进

- **活动栏增强**：新增活动栏组件，支持更丰富的导航和交互功能
- **设置服务优化**：重构设置服务，提供更灵活的配置管理能力
- **历史记录缓存**：新增历史缓存服务，改善会话历史的加载和管理体验
- **进程池管理**：引入 ACP 进程池，提升多会话场景下的资源利用效率
- **Mermaid 图表**：增强 Mermaid 图表渲染，支持更多图表类型和交互
- **国际化完善**：补充中英文界面文案

## [2.37.10] - 2026-01-21

### 🔧 功能改进

- **登录方式优化**：简化登录选项为"Chinese Site"、"International Site"和"Enterprise Domain"，国内站点登录会自动根据网络环境选择最佳认证方式

## [2.37.9] - 2026-01-21

### 🔧 功能改进

- **侧边栏交互优化**：支持拖拽调整宽度，新增会话管理操作按钮
- **User-Agent 标识**：ACP 进程启动时自动设置包含版本信息的 User-Agent 请求头
- **配置同步优化**：为产品配置同步添加节流+防抖机制，减少高频调用造成的性能开销
- **日志增强**：增加流式消息处理和配置缓存过期的调试日志，便于问题排查

## [2.37.8] - 2026-01-21

### 🔧 功能改进

- **Session lastMessageId 处理**：优化会话状态管理，确保 lastMessageId 在异步压缩时正确更新，简化父消息 ID 的关联逻辑

## [2.37.7] - 2026-01-21

### 🎉 新增功能

- **红包封面推广**：帮助面板新增「码到成功」红包封面领取入口，根据国内/国际版自动显示对应链接

## [2.37.6] - 2026-01-21

### 🎨 界面优化

- **品牌色更新**：将 UI 主色调从蓝色更新为 CodeBuddy 品牌绿色，提升品牌一致性
- **Activity Bar**：新增 VSCode 风格侧边活动栏，支持聊天、账户、设置视图切换
- **账户面板**：展示登录状态、用户信息和认证方式
- **设置面板**：支持主机切换、主题模式和语言偏好设置
- **会话管理**：优化会话连接状态管理和错误处理

### 🔧 功能改进

- **会话恢复**：支持显示通过 /compact 命令生成的会话，用户不再丢失压缩后的会话历史

## [2.37.5] - 2026-01-20

### 🐛 问题修复

- **ACP 会话模型设置**：修复通过 SDK 切换模型后，后续对话仍使用旧模型的问题

## [2.37.4] - 2026-01-20

### ✨ 新功能

- **SDK 自定义 Session ID**：SDK 现在支持在创建会话时指定自定义 session ID，便于外部系统追踪和管理会话

### 🐛 问题修复

- **栈溢出**：防止 session 被重复订阅时导致的递归栈溢出问题
- **Stop Hook 序列化**：移除未使用的 result 字段，避免序列化循环引用导致的错误

## [2.37.3] - 2026-01-20

### 🔧 功能改进

- **SDK Session API**：新增 `setPermissionMode` 和 `getPermissionMode` 方法，支持动态切换权限模式
- **SDK Query API**：优化 resume + prompt 场景下的历史消息处理流程

## [2.37.2] - 2026-01-20

### 🔧 功能改进

- **ACP 认证增强**：在 authenticate 响应中返回用户信息，客户端可获取当前登录用户的 ID、用户名和昵称；修复已登录用户再次调用认证接口时无法弹出登录页面的问题
- **ACP 会话模型隔离**：修复切换模型时影响全局配置的问题，现在模型切换仅影响当前会话
- **上下文压缩**：引入异步上下文压缩机制，当对话历史达到临界阈值时自动触发后台压缩，提升长对话场景下的响应性能
- **插件卸载清理**：修复卸载插件后 MCP 配置仍然残留的问题，卸载时会自动清理相关配置，避免启动时加载失败的警告
- **网络错误处理**：优化 print 模式下网络错误自动重试逻辑，避免异常退出
- **SDK 连接性能**：优化连接池机制，支持并发查询场景下的预热连接复用，显著降低首次消息延迟；增加 `prewarmInitialize` 选项和会话锁机制
- **SDK 性能优化**：优化了会话恢复和用户交互流程，提升了 SDK 响应速度和稳定性
- **会话存储**：支持跨项目目录搜索会话，新增 meta 文件分离存储
- **认证流程**：优化认证机制，新增用户信息查询接口
- **服务模式**：增强服务器模式策略功能

## [2.37.1] - 2026-01-19

### 🔧 功能改进

- **认证 API 增强**：新增 `unstable_v2_logout()` API，支持清除缓存的认证 token，允许切换用户或环境；`authenticate()` 现在会自动检测已有有效认证，避免重复登录
- **Checkpoint Hook**：新增实验性 `unstable_Checkpoint` Hook，支持在文件修改后自动触发，提供文件快照和变更统计信息，便于追踪文件变更历史和实现自动化审计
- **Session API Hooks 支持**：V2 Session API 现在支持配置 Hooks，可在会话中拦截和控制工具执行

## [2.37.0] - 2026-01-18

### ✨ 新功能

- **SDK 认证 API**：新增实验性认证接口，支持 SDK 独立完成登录流程
  - 支持多种认证环境（external、internal、iOA、cloudhosted、selfhosted）
  - 自动检测已登录状态，避免重复登录
  - 通过回调通知登录 URL，支持自定义浏览器打开逻辑

### 🔧 功能改进

- **React 不可变更新**：重构 `addMessageToGroups` 函数中的消息状态更新逻辑，使用不可变操作替代直接修改对象属性，符合 React 最佳实践

## [2.36.3] - 2026-01-17

### 🔧 功能改进

- **测试系统**：修复测试运行问题，确保测试套件正常执行
- **Shell 执行**：优化跨平台兼容性，修复 Windows 系统下包含空格的路径处理问题
- **权限匹配优化**：改进复杂 Shell 命令的权限规则匹配，支持 `&&`、`||`、`|`、`;` 等操作符组合的命令解析
- **SDK 版本要求**：将文档中的 CodeBuddy Agent SDK 版本要求从 v0.2.0 更新为 v0.1.24
- **输入菜单响应**：修复了菜单状态检测延迟导致的快捷键冲突问题，提升了命令和文件建议菜单的响应速度
- **SDK 自定义工具文档**：修正导入路径，`createSdkMcpServer` 和 `tool` 应直接从 `@tencent-ai/agent-sdk` 导入
- **历史记录过滤**：优化会话历史加载时的消息展示

### 🐛 问题修复

- **上下文窗口溢出**：修复模型在高负载场景下 token 超限导致请求失败的问题
- **Windows 配置路径**：修复 Windows 系统下全局配置路径错误（`%appdata%` 环境变量未正确展开）导致无法加载用户配置的问题

## [2.36.2] - 2026-01-17

### 🔧 功能改进

- **权限配置处理**：重构权限规则配置加载逻辑，支持空字符串和纯空白字符的安全处理
- **工具注册检查**：优化启动流程，防止工具重复注册导致的警告

### 🐛 问题修复

- **文件读取行为**：修复 offset 参数为 0 时被错误忽略的问题，现在能正确从第 1 行开始读取
- **Shell 命令解析**：修复反引号（`）语法在 Shell 命令中被错误分割的问题
- **显示设置**：修复 showSuggestions 配置项在某些场景下无法生效的问题
- **流式输出中断**：修复调试日志影响工具流式输出行为的问题

## [2.36.1] - 2026-01-16

### 🔧 功能改进

- **模型显示优化**：改进模型选择列表中推理模型的显示方式，添加 "推理" 后缀以便区分
- **路径补全**：优化文件路径补全体验，解决某些场景下补全结果显示异常的问题

### 🐛 问题修复

- **Windows 兼容性**：修复 Windows 系统下通配符路径 (`\*`) 转换为多文件路径时的解析错误
- **进程清理**：修复程序退出时可能残留僵尸子进程的问题，确保相关后台进程正确终止

## [2.36.0] - 2026-01-15

### ✨ 新功能

- **系统级配置**：新增 `/etc/codebuddy/` 目录支持，IT 管理员可部署统一的权限规则和配置策略

### 🔧 功能改进

- **配置加载顺序**：优化配置文件加载逻辑，现在按照系统级 → 用户级 → 项目级的顺序合并配置
- **网络错误提示**：改进 API 调用失败时的错误信息，提供更清晰的故障排查指引

## [2.35.0] - 2026-01-15

### ✨ 新功能

- **内置规则模板**：新增全局规则配置，代理默认遵守仓库 `.codebuddy/rules` 和 `CODEBUDDY.md` 文件中的规则，提供更好的代码风格和约定支持

### 🔧 功能改进

- **历史加载流程**：重构会话历史消息加载机制，支持增量加载
- **消息处理**：支持处理元数据类型消息，扩展消息类型覆盖范围

## [2.34.1] - 2026-01-15

### 🐛 问题修复

- **MCP 配置类型处理**：修复 `mcpServers` 配置为非对象类型时导致启动失败的问题，增强配置解析的健壮性

## [2.34.0] - 2026-01-14

### ✨ 新功能

- **第三方 API Key 支持**：新增第三方模型 API Key 参数和对应环境变量支持，可直接使用第三方模型 API（需配合自定义 base URL 使用）

### 🔧 功能改进

- **第三方 API 配置**：统一 API Key 配置方式，通过独立参数管理密钥更安全

## [2.33.1] - 2026-01-14

### 🐛 问题修复

- **配置兼容性**：移除 `chat.input.clearOnSubmit` 配置项，该功能在 CLI 环境下无实际意义

## [2.33.0] - 2026-01-13

### ✨ 新功能

- **代码智能 (LSP)**：新增 `LSP` 工具，提供语言服务器协议支持
  - 跳转到定义（Go to Definition）
  - 查找引用（Find References）
  - 悬停文档（Hover Information）
  - 文档符号（Document Symbols）
  - 工作区符号搜索（Workspace Symbol Search）
  - 调用层级分析（Call Hierarchy）

### 🔧 功能改进

- **UI 视觉更新**：优化版本标识显示，移除内部版本标记

## [2.32.0] - 2026-01-12

### ✨ 新功能

- **复制快捷键**：支持 Ctrl+Shift+C 快捷键快速复制 AI 最后一条回复

### 🔧 功能改进

- **模型显示**：优化模型选择器中模型的显示效果
- **会话恢复**：改进历史会话的恢复显示逻辑
- **输入体验**：修复中文输入法在某些场景下的交互问题

### 🐛 问题修复

- **ACP 连接**：优化 ACP 心跳机制，提升连接稳定性
- **工具输出**：修复工具执行结果在某些场景下无法正确渲染的问题

## [2.31.2] - 2026-01-09

### 🐛 问题修复

- **Markdown 转义**：修复渲染问题，确保代码块中的 `$` 和 `{` 字符正确显示
- **文件操作**：修复 Windows 下文件 diff 的路径解析问题

## [2.31.1] - 2026-01-09

### 🔧 功能改进

- **会话存储优化**：改进会话数据持久化策略，提升会话列表加载速度

### 🐛 问题修复

- **内存泄漏**：修复长时间运行时 React 组件未正确卸载导致的内存增长问题
- **热键冲突**：解决某些终端环境下快捷键响应异常的问题

## [2.31.0] - 2026-01-08

### ✨ 新功能

- **输入编辑器外挂**：支持配置使用外部编辑器（如 VSCode、Vim）编写复杂输入，按 Ctrl+G 打开
- **即时会话导出**：支持在会话过程中随时导出对话历史为 Markdown 文件

### 🔧 功能改进

- **自动更新检测**：启动时在后台静默检查新版本，不阻塞用户操作
- **配置热更新**：支持在运行时重载部分配置项，无需重启

## [2.30.1] - 2026-01-08

### 🐛 问题修复

- **子代理通信**：修复子代理结果返回时偶发的解析错误

## [2.30.0] - 2026-01-07

### ✨ 新功能

- **子代理任务**：新增 `Task` 和 `TaskOutput` 工具，支持启动专门化的子代理执行复杂任务

### 🔧 功能改进

- **并行工具调用**：优化多工具并发执行策略，提升复杂任务处理效率
- **上下文窗口管理**：动态调整历史消息裁剪阈值，更高效地利用模型上下文

## [2.29.0] - 2026-01-06

### ✨ 新功能

- **计划模式**：新增 `EnterPlanMode` 和 `ExitPlanMode` 工具，支持 AI 在执行复杂任务前先制定计划
- **任务追踪**：新增 `TodoWrite` 工具，AI 可创建和管理任务清单，提供进度可视化

### 🔧 功能改进

- **中断响应**：优化 Ctrl+C 中断行为，支持更快地终止工具执行

## [2.28.1] - 2026-01-06

### 🐛 问题修复

- **日志路径**：修复 Windows 下日志文件路径包含非法字符导致写入失败的问题

## [2.28.0] - 2026-01-05

### ✨ 新功能

- **Web 搜索**：新增 `WebSearch` 工具，支持实时搜索互联网获取最新信息
- **网页抓取**：新增 `WebFetch` 工具，可抓取指定网页内容并提取关键信息

### 🔧 功能改进

- **Glob 模式**：支持更复杂的文件匹配模式，包括否定模式和大括号展开

## [2.27.3] - 2026-01-05

### 🐛 问题修复

- **会话恢复**：修复从历史会话恢复时，工具调用状态未正确还原的问题

## [2.27.2] - 2026-01-04

### 🔧 功能改进

- **错误信息国际化**：常见错误提示支持中英文双语显示
- **配置校验**：优化配置文件语法错误的提示信息

### 🐛 问题修复

- **Unicode 处理**：修复某些特殊字符在终端显示时的宽度计算问题

## [2.27.1] - 2025-12-31

### 🐛 问题修复

- **会话列表**：修复会话列表在某些终端尺寸下的滚动问题

## [2.27.0] - 2025-12-30

### ✨ 新功能

- **会话管理面板**：新增图形化会话列表，支持浏览、搜索、恢复历史会话

### 🔧 功能改进

- **会话持久化**：完善会话元数据存储，支持按项目和时间检索
- **启动参数**：新增 `-r/--resume` 参数，可直接恢复指定会话

## [2.26.0] - 2025-12-29

### ✨ 新功能

- **用户交互工具**：新增 `AskUserQuestion` 工具，AI 可主动向用户提问以获取必要信息

### 🔧 功能改进

- **批量编辑**：优化 `MultiEdit` 工具的性能，支持更大规模的批量修改

## [2.25.1] - 2025-12-26

### 🐛 问题修复

- **Shell 后台任务**：修复后台命令输出捕获不完整的问题

## [2.25.0] - 2025-12-25

### ✨ 新功能

- **后台 Shell**：`Bash` 工具新增 `run_in_background` 参数，支持启动长时间运行的后台任务
- **输出监控**：新增 `BashOutput` 和 `KillShell` 工具，用于监控和管理后台 Shell

### 🔧 功能改进

- **Shell 复用**：同一会话内的命令在同一 Shell 实例中执行，保持环境状态

## [2.24.0] - 2024-12-24

### ✨ 新功能

- **多文件编辑**：新增 `MultiEdit` 工具，支持在单次调用中对同一文件进行多处修改

### 🔧 功能改进

- **编辑预览**：优化文件编辑的 diff 展示，支持语法高亮

## [2.23.5] - 2025-12-24

### 🐛 问题修复

- **Windows 路径**：修复 Windows 下绝对路径处理的兼容性问题

## [2.23.4] - 2025-12-23

### 🔧 功能改进

- **错误恢复**：优化网络错误后的自动重连逻辑

## [2.23.3] - 2025-12-23

### 🐛 问题修复

- **配置加载**：修复嵌套配置项合并时的覆盖问题

## [2.23.2] - 2025-12-23

### 🐛 问题修复

- **终端尺寸**：修复终端窗口大小变化时 UI 布局未正确更新的问题

## [2.23.0] - 2025-12-22

### ✨ 新功能

- **Hooks 系统**：支持用户自定义 Hook 脚本，可在工具执行前后插入自定义逻辑

### 🔧 功能改进

- **权限规则**：支持在配置文件中定义工具权限白名单/黑名单

## [2.22.0] - 2025-12-20

### ✨ 新功能

- **MCP 支持**：新增 Model Context Protocol (MCP) 服务器集成，可连接外部工具提供商

### 🔧 功能改进

- **工具发现**：动态加载 MCP 提供的工具，支持热插拔

## [2.21.0] - 2025-12-19

### ✨ 新功能

- **自定义命令**：支持在 `.codebuddy/commands/` 目录下创建自定义斜杠命令

### 🔧 功能改进

- **命令补全**：输入 `/` 时显示可用命令列表

## [2.20.1] - 2025-12-19

### 🐛 问题修复

- **Print 模式**：修复 `-p` 模式下输出格式化异常的问题

## [2.20.0] - 2025-12-19

### ✨ 新功能

- **Print 模式**：新增 `-p` 参数，支持非交互式输出，便于脚本集成
- **自动批准**：新增 `-y` 参数，跳过所有工具执行确认提示

### 🔧 功能改进

- **退出码**：规范化程序退出码，便于脚本判断执行结果

## [2.19.2] - 2025-12-16

### 🐛 问题修复

- **Token 统计**：修复长对话中 token 计数不准确的问题

## [2.19.1] - 2025-12-15

### 🐛 问题修复

- **Grep 工具**：修复正则表达式中特殊字符未正确转义的问题

## [2.19.0] - 2025-12-12

### ✨ 新功能

- **Grep 搜索**：新增 `Grep` 工具，支持正则表达式搜索文件内容

### 🔧 功能改进

- **Glob 性能**：优化大型项目中的文件匹配性能

## [2.18.0] - 2025-12-11

### ✨ 新功能

- **Glob 工具**：新增 `Glob` 工具，支持通配符模式匹配文件路径

### 🔧 功能改进

- **文件读取**：`Read` 工具支持读取图片文件，AI 可进行视觉分析

## [2.17.0] - 2025-12-10

### ✨ 新功能

- **Notebook 编辑**：新增 `NotebookEdit` 工具，支持编辑 Jupyter Notebook 单元格

### 🔧 功能改进

- **文件类型识别**：优化二进制文件检测，避免误读

## [2.16.0] - 2025-12-09

### ✨ 新功能

- **文件编辑**：新增 `Edit` 工具，支持精确的字符串替换操作

### 🔧 功能改进

- **Write 工具**：优化大文件写入性能

## [2.15.1] - 2025-12-08

### 🐛 问题修复

- **Bash 超时**：修复长时间运行命令未正确超时的问题

## [2.15.0] - 2025-12-08

### ✨ 新功能

- **Bash 执行**：新增 `Bash` 工具，支持在终端中执行 Shell 命令

### 🔧 功能改进

- **安全检查**：对潜在危险命令增加二次确认提示

## [2.14.1] - 2025-12-07

### 🐛 问题修复

- **文件编码**：修复非 UTF-8 编码文件读取乱码的问题

## [2.14.0] - 2025-12-05

### ✨ 新功能

- **文件读取**：新增 `Read` 工具，支持读取本地文件内容
- **文件写入**：新增 `Write` 工具，支持创建和覆盖文件

### 🔧 功能改进

- **路径补全**：文件路径输入支持 Tab 补全

## [2.13.0] - 2025-12-04

### ✨ 新功能

- **模型切换**：支持通过 `/model` 命令在会话中切换 AI 模型

### 🔧 功能改进

- **Token 显示**：状态栏显示当前对话的 token 使用量

## [2.12.0] - 2025-12-03

### ✨ 新功能

- **配置命令**：新增 `/config` 命令，支持在终端中查看和修改配置

### 🔧 功能改进

- **配置热重载**：修改配置文件后自动生效，无需重启

## [2.11.0] - 2025-12-02

### ✨ 新功能

- **@ 引用**：支持 `@file` 语法引用文件内容到对话

### 🔧 功能改进

- **上下文管理**：新增 `/context` 命令查看当前上下文状态

## [2.10.1] - 2025-12-01

### 🐛 问题修复

- **历史记录**：修复输入历史在某些终端下无法正常工作的问题

## [2.10.0] - 2025-11-28

### ✨ 新功能

- **帮助系统**：新增 `/help` 命令，显示可用命令和快捷键

### 🔧 功能改进

- **命令系统**：重构斜杠命令框架，支持命令别名

## [2.9.0] - 2025-11-26

### ✨ 新功能

- **对话历史**：支持上下箭头键浏览输入历史

### 🔧 功能改进

- **UI 响应**：优化长消息渲染性能

## [2.8.6] - 2025-11-26

### 🐛 问题修复

- **输入处理**：修复多行粘贴时的换行符处理问题

## [2.8.5] - 2025-11-26

### 🐛 问题修复

- **滚动行为**：修复消息列表自动滚动在某些场景下失效的问题

## [2.8.4] - 2025-11-25

### 🔧 功能改进

- **错误提示**：优化 API 错误信息的可读性

## [2.8.3] - 2025-11-25

### 🐛 问题修复

- **会话清理**：修复 `/clear` 命令后历史消息未完全清除的问题

## [2.8.2] - 2025-11-25

### 🐛 问题修复

- **终端适配**：修复在 Windows Terminal 中的显示问题

## [2.8.1] - 2025-11-24

### 🐛 问题修复

- **启动检查**：修复 Node.js 版本检测逻辑

## [2.8.0] - 2025-11-24

### ✨ 新功能

- **清屏命令**：新增 `/clear` 命令清空当前对话
- **退出命令**：新增 `/exit` 命令安全退出程序

### 🔧 功能改进

- **快捷键**：支持 Ctrl+L 清屏，Ctrl+D 退出

## [2.7.0] - 2025-11-21

### ✨ 新功能

- **继续对话**：新增 `-c` 参数，支持继续上次对话

### 🔧 功能改进

- **会话存储**：自动保存对话历史到本地

## [2.6.1] - 2025-11-19

### 🐛 问题修复

- **认证流程**：修复 OAuth 回调处理异常的问题

## [2.6.0] - 2025-11-19

### ✨ 新功能

- **账户管理**：支持多账户切换和登出

### 🔧 功能改进

- **认证状态**：状态栏显示当前登录账户信息

## [2.5.0] - 2025-11-18

### ✨ 新功能

- **配置文件**：支持 `.codebuddy/settings.json` 项目级配置

### 🔧 功能改进

- **默认配置**：优化开箱即用体验

## [2.4.0] - 2025-11-17

### ✨ 新功能

- **代理支持**：支持 `HTTP_PROXY` 和 `HTTPS_PROXY` 环境变量

### 🔧 功能改进

- **网络诊断**：连接失败时提供网络问题排查建议

## [2.3.1] - 2025-11-14

### 🐛 问题修复

- **安装脚本**：修复全局安装时权限不足的问题

## [2.3.0] - 2025-11-14

### ✨ 新功能

- **全局安装**：支持 `npm install -g @anthropic/codebuddy-code` 全局安装

### 🔧 功能改进

- **二进制分发**：提供预编译的平台特定二进制文件

## [2.2.0] - 2025-11-13

### ✨ 新功能

- **流式输出**：AI 回复实时逐字显示

### 🔧 功能改进

- **渲染性能**：优化 Markdown 实时渲染

## [2.1.0] - 2025-11-12

### ✨ 新功能

- **Markdown 渲染**：支持代码块语法高亮
- **状态栏**：显示当前模型和会话状态

### 🔧 功能改进

- **UI 主题**：支持终端颜色主题适配

## [2.0.0] - 2025-11-11

### ✨ 新功能

- **全新 TUI**：基于 React Ink 重构终端界面
- **会话管理**：支持多会话切换
- **工具系统**：基础工具框架

### 🔧 功能改进

- **架构重构**：采用 CellJS 依赖注入框架

## [1.0.0] - 2025-11-01

### ✨ 首次发布

- 基础对话功能
- 模型支持
- 命令行参数解析
