# 更新日志

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

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


## [未发布]

## [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

### ✨ 首次发布

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