# 更新日志

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

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


## [未发布]

## [2.184.0] - 2026-11-13

### 🎉 新功能

- **非 WorkBuddy 宿主可开启 macOS osascript 沙箱外执行**：通过 `CODEBUDDY_CLI_CAPABILITIES=sandbox.native-osascript` 显式开启单条字面量 osascript 命令的沙箱外执行能力，沿用现有审批与会话授权；WorkBuddy Desktop 默认行为不变（#178217）。
- **Read 工具返回行区间元数据**：每次成功读取返回本次行区间与文件总行数；截断语义对齐主流实现，部分读取给出下一页参数，单行超长、整文件超 token 上限、offset 越过 EOF 等边界行为统一，ACP 与沙箱通道一致，提示路径在工作目录外使用绝对路径（#179730）。
- **usage_update 新增 model_calls 指标**：按 step 下发每次模型调用的耗时、首字延迟、结果、尝试次数、结束原因与实际模型，随会话记录落盘并被 `session/resume` 回放；客户端在 `_meta['codebuddy.ai'].modelCallMetrics` 声明后才下发（#179641）。
- **文件权限兜底审批支持会话级目录授权**：经校验的目录授权可覆盖本次会话；无法提供目录授权时沿用原有命令审批规则。
- **智能体目录列表默认稳定排序**：Web UI 目录顺序固定为创建序（新的在前），应答/干活不再使行跳位；「按状态动态排序」开关可恢复旧行为（默认关闭）。
- **左侧菜单支持固定会话顺序**：开启后列表顺序不随任务状态自动切换（默认关闭）。
- **置顶会话在「最近会话」浮层顶部显示**：与全屏对话页置顶分组体验一致。
- **定时任务支持立即运行**：Web UI 任务卡片新增「立即运行」按钮（循环任务），触发后执行记录即时可见。

### 🔧 改进

- **定时任务默认留在当前会话执行**：到点前可查看下次执行时间并取消；只有明确指定其他智能体时才另开会话（#177750）。
- **大工具参数预览不再拖慢会话**：减少大工具参数预览造成的卡顿，保留完整的工具参数与执行结果（#174411）。
- **多任务事件公平调度**：多任务事件集中到达时让出执行时间给其他请求，减少任务切换和界面响应等待（#176548 #178589）。
- **标准工具模式提示精简**：不再向系统提示词追加重复的模式纠偏正文；PTC 与极简模式契约统一用 `<tool_mode>` 标签包裹，新会话首轮不再向用户消息重复注入模式提醒，仅在活跃历史确认工具模式切换时纠偏。
- **LLM 请求新增归属头**：新增 `X-Feature-Module` 功能模块归属和 `X-Agent-Core: agent-cli` 核心实现标记，便于模型服务区分功能入口与不同 Agent core；无功能模块时显式发送空值，跳过内部请求头时一并清理（#181254）。
- **REPL 后台任务回执结构化**：Bash/PowerShell 转后台时沙箱直接拿到 `{ status, taskId, id }` 句柄而非整段人读文本；`describeTool` 对延迟索引工具自动补全真实 schema；沙箱工具回执中的宿主文本块数组拍平为文本。
- **工具交替循环识别**：两个工具连续交替 20 轮时进入现有工具循环判定流程，减少空转。
- **消息待处理横幅补充说明**：标注「回合结束后自动发送」，消除等待期困惑。

### 🐛 修复

- **PreToolUse hook 改写参数后的权限判定**：所有权限模式都按改写后的参数判断；hook 返回 `allow` 时 deny 规则仍拒绝、ask 规则仍弹窗；plan 模式下不再直接放行非只读调用；`updatedInput` 不符合工具参数定义时拒绝执行并告知模型原因；审批弹窗、IDE、SDK `canUseTool` 与 stream-json 权限请求展示实际要执行的参数；审批方原样批准时不再重跑 hook（#167309）。
- **PermissionRequest hook 改写参数后同样要过 deny 与 ask 规则**（#167309）。
- **A2A 与 stream-json 同时应答 AskUserQuestion**：stream-json 一方只取 `answers`，其他字段不再写入工具参数（#167309）。
- **沙箱审批现在会执行 PermissionRequest hook**：删除文件、命中文件/网络询问规则、批量删除或申请提权时，审批弹窗出现前先执行 settings 配置的 hook；放行直接执行、拒绝直接拒绝，不再等到超时；同一次工具调用只执行一次（#177445）。
- **WorkBuddy 沙箱询问规则不再被零退出跳过审批**：命中命令、文件或网络询问规则时，即使命令最终退出码为 0 也会触发审批；普通拒绝记录在零退出时不触发重跑的行为保留（#175830）。
- **海外沙箱子 agent 语言默认值**：宿主写入 `DEPLOY_REGION=intl` 且会话未设置语言时，按「默认英文、中文提问回中文」回答，不再固定回中文；国内和已设置语言的会话行为不变（#177634）。
- **TUI 自动探测终端亮暗**：启动时自动探测终端背景亮暗（OSC 11，回落 OSC 10 / COLORFGBG），未显式设置 theme 时按亮暗自动选用 light / dark 主题，修复浅色终端上默认 dark 主题正文几乎不可见的问题；深色系金色恢复亮金 `#fdd663`，浅色系保持 `#9E6A24`，agent-rs TUI 同步对齐（#181764）。
- **WorkBuddy 沙箱安全审计上报恢复**：修复被拦截命令的分析与上报自 5.7 起静默失效的问题；SDK 初始化失败后可在后续命令自动重试恢复（#179664）。
- **目录授权不再重复询问**：修复本地会话批准目录访问后，切换会话或恢复目标执行时重复询问的问题；已确认的目录授权继续限定于原会话和原操作。
- **模型原生拒答不再报内部错误**：保留模型拒答原文，不自动重试，后续对话可继续；不修改 WorkBuddy 展示策略（#167310）。
- **编辑重发后团队协调者可续跑**：修复团队成员完成时，协调者因重复应用旧消息回退而无法续跑的问题（#174441）。
- **删除团队只影响当前团队**：删除时只检查和清理当前团队的成员，其他会话中的团队可以继续运行（#180023）。
- **宿主下发品牌不再被 CLI 兜底覆盖**：官方产物未配置 customization.json 时，非空 `productName` 以宿主下发值为准，系统提示词不再出现产品名写成 CodeBuddy 的情况；宿主下发空值时仍使用兜底品牌（#178969）。
- **PTC 模式 Mod 订阅恢复 Notification**：hasHooks 门禁计入 Mod 的 classic.* / classic.<Event> 订阅，不再在 classic 扇出前短路事件；AskUserQuestion 等待期间的 permission_prompt 等通知可正常送达。
- **排队消息等待上一轮历史落盘**：整轮结束自动发送排队消息前，先等待上一轮答复写入会话历史；排队轮次的模型上下文不再缺失上一轮回答。
- **Web UI 新建会话卡死与消息串台**：会话创建回归 frame 域原子执行，新会话消息不再被回答到进行中的旧会话；发送出口解析统一收敛。
- **Web UI 默认模型不生效**：设置默认模型后新建会话即生效（daemon 侧设置变更即时重采样）。
- **Web UI dock 弹窗自动展开又收起**：尊重用户关闭偏好，水合不再自动展开；显式开关行为保留。
- **Web UI 分身工作状态绿点不显示**：启动恢复路径补记绑定状态，工作绿点恢复正常点亮。
- **Web UI 菜单宽度每会话各记一份**：宽度全局唯一记忆，切换会话不再跳变。
- **待发送消息预览显示真实文件名**：file 附件不再显示 (attachment) 占位。

## [2.183.0] - 2026-11-11

### 🎉 新功能

- **打开智能体时自动恢复执行开关**：Web UI 设置新增该开关，默认保持点开已结束智能体即自动恢复；关闭后打开只查看历史，需点「重新运行」或发送消息才恢复，刷新页面或重连远端不再隐式拉起已停止的智能体（#177157）。
- **资源管理器多根工作区**：Web UI 可同时打开多个目录，分区渲染、独立折叠/刷新；「添加目录」以追加方式加入工作区并自动同步后端访问权限，「打开目录」保持原有替换行为。
- **会话内展示定时任务执行结果**：定时任务触发后在对话中展示结果条（状态、耗时、失败原因），可一键跳转「执行记录」详情；刷新或会话重载后自动恢复。
- **btw 侧聊 Markdown 渲染**：侧聊回答按 Markdown 渲染（标题、列表、代码块、链接），与主聊天观感一致。
- **目标恢复不自起新一轮**：goalControl `resume` 支持 `continueRun: false`，只恢复目标而不自起 kick-off 轮；宿主在目标暂停期间收到普通消息时，由该消息所在轮结束后继续推进目标，避免与 kick-off 轮抢跑。

### 🔧 改进

- **主机连接准备放开回环限制**：Web UI 的 SSH 主机添加/连接准备接口不再要求从 127.0.0.1 发起，通过域名或局域网地址访问网关（含 DevCloud 中继等远程场景）即可添加带密码或私钥的主机；保护收敛为网关鉴权本身，启用鉴权时认证失败仍返回 401。
- **会话恢复与目录读取提速**：缩短本地会话恢复和读取命令、技能目录的等待时间（#176548）。
- **云端会话 MCP 并发**：挂载大量 MCP 连接器时，过期的工具目录改为并发刷新，等待时间收敛到最慢的一个；经延迟加载调用的只读 MCP 工具按只读声明并行执行。
- **命令授权按会话复用**：安全中心的命令询问按同一会话和工作目录复用授权；单条命令按命中的前缀规则复用，复合命令原样执行可复用，改动任一命令段后重新询问。
- **工具模式提醒精简**：工具模式相关的系统提示词和会话提醒统一使用英文并兼容旧中文历史；标准模式首轮和模式未变化的后续轮不再重复附加提醒，模式切换、模型能力回退和会话恢复时保留必要纠偏（#178688）。
- **TUI 底栏提示优化**：权限模式切换提示改为 `⇧tab`（自定义快捷键显示实际绑定）；非默认权限模式、输入框有内容或行宽不够时不再显示 `? for shortcuts`；底栏金色加深，浅色终端更易阅读。
- **文件下载与预览动作区分**：文件请求携带 `intent=download|preview` 动作语义，为下载审批与行为分流提供依据，未知取值明确拒绝。
- **桌面窄窗口不再误判为移动端**：移动端判定改为真实设备信号（UA/触摸能力）优先，宽度仅作兜底；窄窗口下回车发送恢复正常。
- **后台任务期间切换权限模式立即报错**：后台任务运行期间切换权限模式当场返回 “Sandbox rules can only change after background tasks finish”，会话级模式保持原值，避免改成新模式后后续每一轮都失败；后台任务结束后切换照常生效（#177895）。
- **图片查看回归保护**：覆盖读图失败提示、历史会话恢复时的图片回放、宿主侧进度与授权，以及不同模型能力下的图片输入差异（#178376）。

### 🐛 修复

- **交互卡片与插件调用**：修复交互卡片通过延迟工具调用时无法展示、历史恢复后识别错误、交互流程重复执行及错误结果提前反馈的问题；修复桌面会话中支付 Mod 无法调用 App 专用工具、插件隔离环境参数导致连接断开、插件服务更名后卡片调用定位错误等问题；支持包含空格的 MCP 服务名称，插件内部调用不再绕过用户权限规则。
- **agent-home 表面按产品面放行 headless job**：Web UI 派发/恢复/重拉时显式声明产品面，未声明的 headless job 默认不进入自治工具面，云平台流水线等宿主恢复 Agent Teams 可用；无收件人频道的广播接收面同步收窄（#176858）。
- **SendMessage 归因自愈**：跨进程/重启后队员会话丢失团队上下文时，凭创建时写入的身份字段自愈归因，完全外来的会话仍拒绝（#177114）。
- **TeamCreate 支持持久化**：宿主设 `CODEBUDDY_TEAMS_PERSIST=1` 后显式创建的团队容器不再被会话退出清理，工具结果新增 `Team dir` 行标明落盘路径（#176860）。
- **团队队长工具模式重放失败**：修复启动后台智能体并成为团队队长后，宿主重放工具模式配置导致后续消息和队员回信失败的问题；配置错误给出明确提示，自动续跑遇到确定性配置错误时保留未读消息并停止重复唤醒（#177757）。
- **工具模式切换被错误拒绝**：修复仅开启工具模式能力的客户端切换模式被错误拒绝的问题，角色选择权限、连接归属和模型能力限制保持独立生效（#178688）。
- **自动审批误拒命令**：修复自动审批在部分工具模式下无法读取本地上下文、导致命令被错误拒绝的问题（#178178）。
- **目标 recap 误弹**：无参 `/goal` 的状态查询改走独立的 `recap` 动作，`snapshot` 恢复静默语义，宿主 attach / 换 runtime 后不再误弹「当前没有目标」。
- **已完成目标不再复活**：目标达成或不可达后，后续 reconcile 不再从历史中复活目标并重挂 Stop hook。
- **改目标 / 恢复后不再评估被打断的那一轮**：Stop hook 对 cancelled / interrupted 回合跳过目标评估，避免白等一次模型调用、多出「Goal evaluation unavailable」或误判「已达成」。
- **目标暂停能停掉评估**：目标 Stop hook 评估支持中止，暂停 / 清除 / 换条件时立即停止仍在运行的评估；评估期间恢复或换目标让当前轮接着跑，不再与客户端排队消息抢会话。
- **进程内会话目标控制**：进程内 server 会话（Harness）支持目标的暂停 / 恢复 / 编辑 / 清除；`/goal` 提问的历史记录与 ACP 同形，宿主投影时不再露出命令原文或把状态行当成提问。
- **`codebuddy agents` 启动崩溃**：修复入口首帧没有当前会话时报 `Cannot read properties of undefined (reading 'id')` 的问题。
- **AskUserQuestion 参数校验前置**：一次超过 4 题时在弹框前返回参数错误并提示拆分调用，选项数与标题长度校验同步对齐，避免作答后才被拒绝。
- **加固系统无法创建空文件**：专家团等需要先落下空输出文件的任务不再失败，覆盖已有文件时正确清空。
- **会话偶发卡在「准备中」**：插件运行时刷新挂起时，提交链路的等待增加 5 秒上限，超时后放行，会话不再卡死。
- **REPL 子工具失败被掩盖**：REPL 脚本正常结束时，子工具失败不再被完成结果掩盖，模型可收到失败摘要；折叠界面保留子工具原有报错，不再重复汇总错误数量（#177633）。
- **REPL 沙箱加固**：暴露给沙箱的 API 在收到非法入参时不再在宿主侧同步抛出未转换的异常，阻断经异常构造器取回宿主能力的逃逸路径，并补充全向量回归测试（#177715）。
- **fork 会话继承源工作区**：从会话 fork 的新任务继承源会话的工作目录与上下文，显式选择的工作区仍最高优先。
- **文件下载越权访问收口**：下载动作接入审批校验，授权范围为工作目录与附加目录，含 realpath 复核防符号链接逃逸，本地与远端链路一致。
- **Windows 添加 SSH 远程主机失败**：修复本机探测与安装脚本被权限检查误判为「不安全」而拒绝执行的问题。

## [2.182.0] - 2026-11-09

### 🎉 新功能

- **会话目标宿主控制**：宿主可管理可冷恢复的会话目标，运行中编辑复用当前轮次，暂停和清除仅停止自动续跑；敏感文件审批在异常和超时时遵守配置策略（#175475）。
- **TUI 底栏状态项粒度配置**：支持按 `tui.statusLine` 配置底栏可见状态项（`model` / `reasoning` / `agents` / `shortcuts` / `permission` / `thinking` / `shells` / `git-branch` / `context-remaining` / `tokens`）；未设置保持默认全显，空数组隐藏全部可配置状态项（MCP 错误、IDE 选区等事件态提示不受影响）；新增 `git-branch` 分支段，非 git 目录自动隐藏。
- **新增 `/new` 命令**：保留终端已有内容并开启全新对话，沿用当前会话设置；旧对话仍可通过 `/resume` 恢复。`/clear` 继续清屏后开启新对话。
- **桌面端 osascript 审批执行**：macOS 固定支持在沙箱外执行单条 osascript 命令，默认权限下通过通用审批卡片展示多语言风险提示，可选择仅允许本次、会话内允许或拒绝；完全访问模式免审批，普通命令 allow 规则不能免审批；会话授权只按程序名复用，不跨会话、不持久保存；管道、复合命令、动态展开和路径形式的程序调用不通过该专用出口放行。

### 🔧 改进

- **自定义排除路径**：接入自定义不自动备份路径和直接删除路径，与原有内置排除规则分别合并生效，覆盖 macOS、Windows 和 Linux 执行入口；排除路径统一通过新版 `SetExclusionRules` 协议下发，不再使用备份开关请求中的旧排除字段。
- **长会话压缩内存优化**：不再专门保留压缩前轮次用于运行中回退，降低长会话多次压缩后的内存占用；压缩后的文件和对话回退保持可用，已保存的旧对话仍可查看（#176056）。
- **模型输出背压**：模型输出消费变慢时暂停读取上游数据，避免未读内容持续积压占用内存；继续消费后保持输出完整，停止任务时正常释放连接。
- **流式输出内存与连接释放**：降低大段流式输出的额外内存分配，并在输出处理提前退出时正确关闭响应，避免已中止的响应继续传输（#176056）。
- **每轮用量事件**：本轮结束事件补齐 token 用量，主线程轮次与子 Agent 轮次结束时带上本轮真实模型请求累加后的输入 / 输出 / 缓存读写用量及应答模型，未触达模型的轮次不携带用量。

### 🐛 修复

- **ACP 工具审批拒绝**：审批拒绝不再错误终止整轮任务，危险操作仍被阻止，拒绝作为工具反馈交回模型；真正的取消和计划拒绝保留停止语义。
- **工具循环误报**：连续读取不同文件不再误报工具循环；规则命中后先做 jev 复核，确认不是重复执行就继续，不再弹出确认。
- **会话恢复地址来源**：本地缓存的服务地址缺失或过期时，恢复会话仍能使用同一份产品配置中的地址，并在回放失败时保持进程存活，避免宿主反复重启会话。
- **MCP 会话失效后长期断开**：远端 MCP 服务端回收会话后，工具列表请求与重新连接不再互相打断，重新连接不会中断正在进行的连接，也不会误关新建立的连接（#175004）。
- **云端沙箱 ViewImage 读图失败**：修复图片占位符给出的 blob 路径在沙箱内不存在，导致首次读图必然失败、模型需绕路查找上传文件的问题。
- **Web UI 首次连接 502**：新建后台智能体时等待 worker 地址完成注册，避免 ACP 首次连接因启动竞态返回 502（#176308）。
- **新建智能体与主输入框保持一致**：工具模式展示和提交独立继承主会话当前模式，PTC、极简和创造模式不再回落到标准模式或出现跳动；独立工具模式不携带不支持的 Plan 循环，关闭主 Agent 总闸时 shipped 模式安全回落；创建同事和恢复会话时保留继承的工具模式（#176308）。
- **后台协作会话消息积压**：忙时不再排队等到超时，超过时限自动插空投递，任务不再看起来卡死。
- **看板与私信操作失败指引**：任务不存在、重复完成、缺验收材料等错误直接说明缺什么、该怎么补，不再盲目重试。
- **后台协作长会话上下文治理**：上下文线性增长到阈值或临近模型窗口上限时自动压缩，避免整段历史反复重发造成的高成本与无响应。
- **暂停同事状态更新**：频道 @ 到已暂停的同事，或该同事自己发言后，左侧列表和频道成员行会一起离开「已暂停」，改显示当前活动。
- **左右运行状态对齐**：左侧显示运行中时右侧输入框同步变为可停止，不用等模型吐出第一个字；网络断开本身不会把任务改成失败或空闲。
- **新建智能体输入框锁定**：新草稿继承工具模式，但主会话正在跑不会把新输入框锁成运行中。
- **后台智能体运行状态滞后**：修复没有首个 LLM 帧时的运行状态滞后，并去除无 messageId 的镜像流重复输出。
- **频道 @所有人**：广播只用来同步上下文，不再让每个同事显示被点名；没有新内容时保持沉默，空回复和就位确认不会再转给其他人或用户（#176125）。
- **纠偏私信**：私信可以标明不用回复，对方没在跑时不会被这条私信叫醒；建同事不填权限时默认完全访问；私信可以用唯一的名字找到人，创建结果可直接读到编号（#176125）。
- **分身频道回执**：主会话收到频道信封后按 `SpeakInChannel` 处理，不再把 @ 分身误当成 1:1 私信，避免答案只落到私聊（#176125）。
- **频道处理中提示**：改为消息区浮层，成员开始或结束工作时不再插入或移除虚拟消息行，不改变历史消息的滚动位置（#176125）。
- **Goal 启动阶段取消**：暂停替换运行控制器后，启动阶段取消不再被收成内部错误（#97819）。
- **Goal runtime 回收窗口取消**：启动取消时不再误报为内部错误，该竞态稳定收口为正常取消（#97819）。
- **行内补全提示占位**：修复首个字符不置灰、看起来像用户已输入内容的问题。
- **文件回退菜单误报**：重复编辑已有文件后，回退菜单不再误报"没有代码变更"（#176056）。
- **代理规则查询超时**：同一地址在 5 分钟内已有可用代理结论时沿用该结论，应用短暂卡顿时模型请求不再报「检查网络」；从未查询过的地址和明确拒绝的情况仍按原方式报错（#174582）。
- **工具调用 ID 复用**：模型在后续对话中复用工具调用 ID 时，历史记录配对错误导致服务报错、对话无法继续（#172950）。
- **工具结果文件被覆盖**：同一会话复用工具调用 ID 时，大工具结果文件不再被后续输出覆盖，保留独立的完整结果及历史读取路径（#172950）。
- **root 用户粘贴图片丢失**：切换会话再回来图片消失；历史回放可以显示 root 家目录里的粘贴图和会话附件（#175324）。
- **`/new` 重复打印欢迎信息**：新建对话时不再重复打印欢迎 banner 和命令回显，保留已有终端内容；`/clear` 仍正常显示新会话的欢迎信息。
- **分支会话目标继承**：修复分支会话错误继承源目标的问题，保留普通会话的目标恢复以及分支独立设置、暂停和清除目标的能力（#175475）。

## [2.181.0] - 2026-11-06

### 🎉 新功能

- **插件评估 `plugin eval`**：新增 `plugin eval` 与 `plugin eval init`，支持插件评估用例、消融对比、免费及模型评分器、MCP mock 与录制回放，生成 JSON 与本地 HTML 报告；成本与预算使用网关积分，通过 `--max-cost-credits` 设置上限。
- **插件测试 `plugin test`**：新增 `codebuddy plugin test` 命令，在插件目录下运行自带测试文件，测试可像插件一样调用各项能力，也可在最底层注册 hook 模拟宿主应答，逐个输出通过与失败原因，插件作者在本地即可验证 hooks 行为（#168929）。
- **服务端会话 toolMode**：服务端执行入口支持独立的会话 `toolMode` 参数，按实际模型与宿主准入校验，使用既有运行轮快照控制提示词与工具调用，不改变角色、权限或全局用户设置，供 Harness 模式配置接线使用（#172952）。
- **MCP 权限规则增强**：所有 MCP 服务的权限规则末尾写 `(*)` / `()` 时按整工具或整服务规则处理，整服务 deny 也会隐藏其工具；自定义 agent 的 `tools` 可用 `mcp__<服务片段>` / `mcp__<服务片段>__*` 使用整台 MCP 服务工具，普通与插件服务均适用并统一符号归一化匹配。
- **插件 MCP 命名规则调整**：插件 MCP 服务器改用 `plugin:<插件名>:<服务名>`、工具改用 `mcp__plugin_<插件名>_<服务名>__<工具名>`，同名服务以 `plugin.json` 配置为准；旧服务名的权限规则、禁用列表与 hook matcher 不再匹配插件工具，需按新名重写，插件 MCP 的 OAuth 需重新登录（不兼容变更）。

### 🔧 改进

- **后台任务流式投递**：支持宿主为后台任务减少流式增量投递，保留完整结果与任务完成通知，降低多任务并发时的事件积压。
- **自动模式审核判定**：自动模式审核在审核模型调用不可用工具或返回格式有误时更容易完成判定，减少操作被误拦截（#175212）。
- **输入框底栏常驻模型与档位**：底栏常驻显示当前模型与思考档位，切换后立即刷新；欢迎头图不再重复显示模型，模型名与档位统一小写；窄终端下提示按行截断，智能体提示与快捷键提示合并为一行；后台 shell 计数与提示并入模型行，窄终端优先截断提示、保留完整计数，空闲态按 ↓ 先进入 shells 与 `press ↓` 提示保持一致。
- **获批命令走沙箱单次 token**：命令获批、命中会话授权或自动批准后，优先使用单次执行 token 在沙箱内执行；token 创建或沙箱准备失败且确认命令尚未启动时沿用本地执行并记录回退原因，启动状态不明确、策略拒绝或取消时不重跑（#162691）。
- **插件与技能加载提速**：多个任务同时启动时复用已安装插件的组件读取结果，减少重复加载，保持加载顺序与会话配置隔离，取消时停止排队中的读取；插件更新与刷新后正确重新加载。
- **插件选项配置规范化**：删除 `CODEBUDDY_PLUGIN_OPTION_<KEY>`、`PLUGIN_OPT_<KEY>` 与 `${PLUGIN_OPT:key}`；钩子进程改用官方约定的选项环境变量（仅导出到钩子进程），配置占位符改用 `${user_config.key}`，MCP / LSP / MCPB 共用默认值与枚举过滤规则，缺失配置时给出统一指引（不兼容变更）。
- **MCP 工具输入 schema**：MCP 工具的模型声明保留服务提供的额外字段约束，未声明该约束的对象保持开放，模型声明与实际参数校验使用同一份服务 schema。
- **流式 JSON 每轮用量**：长连接 stream-json 执行期间上报已结算的每轮模型与生成工具用量 / 积分，使用稳定的阶段标识与终态 / 回放快照；会话总 token 与 USD 字段不变，缺失积分保持未知，被中断的请求不再返回上一轮回答。
- **plugin eval 的 MCP 命名**：`plugin eval` 的 MCP mock 复用宿主命名规则，插件替身按完整注册服务键覆盖真实声明，授权与轨迹使用与插件加载器一致的工具名。
- **plugin eval 启动隔离**：`plugin eval` / `plugin eval init` / `plugin test` 的父进程从启动起不读取、展开或连接当前目录与用户的 MCP。

### 🐛 修复

- **Goal/Stop 评估模型上下文不足**：长会话中评估请求始终携带完整历史；lite 模型装不下时切换到当前会话主模型，没有可用主模型时直接判定评估不可用，不再发送注定超限的请求（#166057）。
- **会话重新附着后后台任务运行期间消息与 MCP**：宿主重新加载历史后会话级 MCP 连接被误判需要替换，导致新消息被拒并提示 10000 错误；现在后台任务运行期间只迁移宿主提供的 MCP 连接，其余保持不变（#170890）。
- **Fork 对话偶现失败**：Fork 点之前存在失败响应用量或失败轮次重试记录时会被误判历史不一致而失败；现统一 Fork 选取历史与持久化校验保留的记录类型（#172708）。
- **大型任务列表反复压缩**：修复大型任务列表导致反复压缩的问题。
- **PTC 媒体结果丢失本地路径**：修复 PTC 模式下图片生成、图片编辑和视频生成的媒体结果丢失本地路径导致产物卡片不显示；HTTP 宿主补齐 PTC 内层工具事件，实时与回放保留经安全审查的最小媒体身份（#173408）。
- **PTC 内部工具父子关联丢失**：修复 PTC 内部工具在 HTTP 实时和历史投影中丢失父子关联与取消信息的问题，保留必要的关联、完成和遗漏事实（#173965）。
- **PTC 计划审批前不展示完整计划**：修复 PTC 计划审批前不自动展示完整计划预览的问题，用户可先核对计划内容再确认执行（#173973）。
- **云主机添加目录误报与工具报错展示**：桌面版切换到云主机后「添加目录」可正常确认，不再误报「这不是一个目录」；工具调用失败时报错改为 ERROR 标签加错误态底色并自动换行，不再截断（#174027）。
- **编辑重发提前切换对话历史**：修复编辑重发在新消息被接受前就切换对话历史的问题；接受前取消或失败保留旧对话，接受后按选定分支继续并支持中断后的文件回退恢复。
- **Agent Home 审批与问答闭环**：修复同事身份绑定、跨会话审批回投、私密数据传递、收件箱控制和 Web UI 状态同步在重启、并发与跨进程场景下可能停滞的问题，后续模型轮次和历史答案保持一致。
- **TaskCreate / TaskUpdate 参数提示**：修正 REPL 中参数提示，明确使用 `taskId` 更新任务状态，避免模型传 `id` 导致校验失败（#174632）。
- **Web UI frame bus 502**：修复 Agent worker 冷启动或退出时反复出现 frame bus 502 的问题，连接现在短暂等待后有界重试并正确收敛到离线状态。
- **手机浏览器输入框换行**：手机端软键盘回车键改为插入换行，发送由右侧按钮完成；桌面端 Enter 发送、Shift+Enter 换行不变。
- **自定义模型额度不足反复重试**：修复自定义模型返回余额不足或账户欠费时仍反复重试的问题，直接显示额度不足提示，普通限流仍按原策略重试。
- **缓存服务地址不一致**：修复启动时缓存的服务地址与模型列表不一致导致会话恢复失败的问题，并防止请求结束后错误处理重复写入响应导致 CLI 进程退出。
- **小程序 / App 技能任务计数**：小程序和 App 里实际调用技能后会计入成长计划的技能任务，同一次技能调用不会在之后的对话里被重复计数（#173264）。
- **权限切换后沙箱规则更新**：修复 Harness 本地任务切换权限后需等待下一轮消息才更新沙箱规则的问题，切换时重新下发当前沙箱会话的持久规则并保留本轮临时授权，同代已应用时跳过重复下发（#164767）。
- **后台任务未知退出码拖垮会话**：内部「退出状态未知」哨兵不再作为 ACP 终态退出码下发（改为 null 并附明确结束原因），单个畸形更新帧不再关闭 live 会话订阅，停止的后台任务不再表现为「agent 进程意外终止」（#174553）。
- **macOS 默认删除放行**：补齐 macOS 当前用户 X 子树及路径别名的默认删除放行，保留显式限制，不从非标准 TMPDIR 推导兄弟目录。
- **连接器恢复后工具仍不可用**：修复连接器短暂异常恢复后工具仍显示不可用、重连时错误报告工具已就绪；重连后立即刷新工具目录并避免旧请求迟到结果覆盖，后台任务运行期间连接器重绑定失败后不再重试的问题也一并修复。
- **MCP 工具失败错误说明**：MCP 工具失败时显示服务端错误说明，恢复会话、stream-json 输出、REPL 和插件钩子能正确识别失败，经 DeferExecuteTool 调用时保留错误码，工具返回错误后仍可恢复后续请求。
- **插件 userConfig 默认值**：插件函数钩子按 `userConfig` 解析默认值、用户设置与 `--settings`，运行模块前校验并在公开配置变化后重载；bundle / 创作 / 导出包改用 `userConfig.<key>.default`，不再读取 manifest 顶层 `options`；`userConfig` 每个字段必须声明 `type` / `title` / `description` 且键名匹配标识符规则，不合规声明会阻止组件加载（已有包需重新构建 / 安装 / 导出）。
- **SSH 连接失败缺日志**：连接失败及远端会话 attach 失败时在本机日志记录失败原因（`[HostConnect]`），便于定位 Windows 等平台连接问题。
- **Windows SSH 认证后仍失败**：修复 Windows 上认证通过后因清理临时日志失败而返回 SSH 连接失败（HTTP 502）的问题。
- **stream-json 终态文本**：stream-json 输出正常结束时包含终态前到达的全部回复文本。
- **turn.complete 触发时序**：`turn.complete` 和 `session.measure` 等最后一条响应写入历史后才触发，hook 读到的回答和用量不再偶尔缺少这条响应；进程在后台配置清理结束前关闭时退出码不再变成 1（#168929）。
- **插件运行时与沙箱加固**（#168929，随 `plugin test` 一同交付）：hooks / 测试 / 视图 / REPL 的沙箱边界、`next()` 与 `$` 调用的入参与克隆校验、matcher 逐层判断、`next.to` / `next.trace`、流式收尾与中止、session.append / session.end 答案校验，以及深层嵌套数据传递、栈溢出、宿主原型冻结等边界问题得到系统性加固。

## [2.180.0] - 2026-11-04

### 🎉 新功能

- **模型可下发 PTC 默认工具模式**：支持通过模型配置 `toolMode` 下发 PTC 默认模式，保留用户显式选择优先级。`CODEBUDDY_CODE_MODE_ENABLED` 统一控制 PTC / 极简模式：TUI 与 WebUI 默认许可，其他宿主默认关闭，关闭后模式选择器隐藏这两项，标准 / 创造模式不受影响；程序化调用需显式设置 `CODEBUDDY_CODE_MODE_ENABLED=1`。模型未下发 `toolMode`、明确 `direct` 或声明无效时隐藏入口；会话中切换到不支持的模型时自动回退标准模式并同步界面，不修改用户偏好 (#167448)。
- **自动记忆附带摘要注入**：自动记忆首轮注入会附带受预算上限约束的 Memory summary，规则类反馈随摘要进入上下文，并补充何时读取记忆正文的决策边界；缺 type 或 frontmatter 的记忆以 unknown 垫底纳入摘要，摘要会过滤疑似凭据行。可用 `CODEBUDDY_MEMORY_SUMMARY=0` 关闭 (#170626)。
- **定制版可打包独立 Web UI 视觉资源**：定制打包新增 `--assets <dir>`，一次性放入 `page-logo.svg`、`logo.svg`、`pwa-icon.svg` 即可覆盖侧栏 / 欢迎页 / 登录页水印、浏览器标签图标与 PWA / 通知图标；`--page-logo` / `--favicon` / `--pwa-icon` 仍可按槽位覆盖非标准文件名。仅接受 SVG，打包时校验格式与大小，基座构建未暴露槽位时失败关闭；品牌文案同步投影到 HTML 标题、agent-stage iframe、降级页与 PWA 名称。官方版与未指定槽位保持现有资源 (#153571)。

### 🔧 改进

- **本地记忆提示词改为自研文案**：主 Agent 的记忆说明、后台记忆提取、挑选相关记忆和陈旧提醒的提示词按新结构重写，示例换成办公与研发场景；记忆类型、文件格式、`MEMORY.md` 目录和工具名不变，已有记忆照常读取 (#153721)。
- **REPL 能力边界说明更清晰**：工具描述、Code Mode overlay 与 production tpl 明确「仅支持 JavaScript、不支持 TypeScript」，列出可用全局（console、setTimeout/clearTimeout、TextEncoder/TextDecoder）与不可用的宿主 API；`fetch`、`require`、`process`、DOM 等未定义时给出替代工具提示。
- **REPL 报错更可操作**：出错帧附带前后文；Pythonism（三元 `if` / `elif` / `True` / `None` / `print` 等）给出可行动的 JavaScript 改写提示；通用解析失败给出说明。`Bash` 反斜杠预检对所有宿主生效，会丢失反斜杠的命令字符串在执行前拒绝。
- **`permissions.deny` 覆盖 REPL 工具目录**：被禁工具从 REPL 目录剔除，精确名搜索与调用拒绝路径补充规则来源（`permissions.deny` / `--disallowedTools`）与「不要重试同名工具」提示，骨架目录列出整工具级 deny。
- **auto 权限模式审批更稳定**：模型或网络异常时自动重试并切换可用模型，每次尝试默认最多等待 90 秒，连续 60 秒无输出时提前重试；可通过 `CODEBUDDY_AUTO_REVIEW_TIMEOUT_MS`、`CODEBUDDY_AUTO_REVIEW_STALL_TIMEOUT_MS` 调整。全部尝试失败后仍不执行动作，保持原有权限边界。
- **AskUserForStructuredInput 等待时长可配置**：新增 `CODEBUDDY_ASK_USER_FOR_STRUCTURED_INPUT_TIMEOUT_MS`（毫秒，默认 10 分钟），超时后撤销表单并让模型继续处理。
- **后台任务状态区分更明确**：区分阻塞等待、进度读取与完成通知，显示当前状态与耗时，避免把空输出或等待超时误判为完成；普通会话与执行任务的代理保留原有等待语义，协调者读取进度后等待完成通知 (#170204)。
- **子代理调度按产品配置过滤**：按产品配置过滤不适用的内置子代理，同时保留自定义代理能力；内置子代理被关闭时提示改用其他可用类型或直接完成 (#162917)。
- **公众号文章附件支持**：支持公众号文章附件的消息格式转换与历史卡片恢复，保留文章标题、来源和原文链接。
- **复制操作反馈**：Web UI 资源管理器、编辑器标签、源代码管理等处的「复制路径 / 名称」操作，复制后提示「已复制到剪贴板」，失败时提示「复制失败」(#170683)。
- **macOS 沙箱补充常用工具链缓存放行**：补充 Homebrew（含 Intel / Rosetta）、pnpm store、nvm 下载缓存与 Yarn 全局包缓存默认放行规则，保留已有自定义权限限制。
- **移除外部 Agent 目录的默认沙箱放行**：保留共享技能目录，已保存的用户配置不做定向清理。
- **Web UI 长名称截断可读性**：资源管理器根目录名不再被隐藏按钮挤占宽度；最近会话标题与任务模版描述被截断时可悬停查看全称 (#172160)。

### 🐛 修复

- **历史敏感映射缺失与思考明文回流**：完整映射照常还原，缺失映射的内容保留密文，避免整轮对话失败；模型思考内容保持密文，不再随后续请求以明文发送 (#167109)。
- **轮次进行中「复制请求 ID」缺少 traceId**：工具由宿主执行、轮次尚未结束时，思考帧与 `tool_call_update` 等 live 帧现在也会带上当前前台 run 的 `codebuddy.ai/traceId`；已自带 traceId 的帧不覆盖 (#130672 #172287)。
- **MCP 仅返回结构化结果时模型误判无输出**：部分 MCP 工具只返回结构化结果时，模型不再只看到 "(No output)" 并误判为没有数据。
- **同名插件市场换源后安装失败**：另一进程仍持有旧市场缓存时，安装或刷新插件不再失败。
- **团队任务冷启动续跑**：修复重启后继续团队任务时唤醒已有成员可能报错中断、同一次执行中先派出再继续成员时进度关联到较早调用、正常退出后成员被永久结束无法唤醒、以及重启后首次继续时未及时恢复团队身份导致成员仍暂停等问题 (#171597)。
- **含中文的 UTF-8 文件被 Edit 误损坏**：修复文件编码探测在采样窗口恰好截断中文字符时误判为 GBK、编辑后整文件中文被重编码损坏的问题 (#172447)。
- **NotebookEdit 说明更清晰**：修正单元格 ID 与插入 / 删除说明；工具参数、执行逻辑和默认开关保持不变 (#168401)。
- **REPL 工具与运行时全局不可再被覆盖**：REPL 中已提供的工具名和运行时全局不能再由代码覆盖，后续调用仍使用原来的工具；工具从当前目录移除后，再覆盖或调用该名字会说明已不可用，并提示重新查看当前可用工具。
- **自定义模型不再携带平台身份请求头**：自定义模型直连第三方端点时不再附带企业、用户等平台身份请求头，身份信息不再随请求发往用户自配的第三方服务；经官方网关转发的自定义模型与内置模型行为不变 (#172062)。
- **REPL 工具在压缩对话后保留**：避免稀疏 toolsUpdate 清空已注入的 Bash / ViewImage 与 MCP methods (#170792)。
- **压缩后仍可回退**：手动或自动压缩对话后，双击 Esc / `/rewind` 仍能选择压缩前的提问，恢复代码和对话后回到压缩前状态；PTC / Code Mode 下压缩前每轮的文件改动也能正确显示并可单独回退 (#172098)。
- **长会话恢复变慢**：修复恢复长会话时重复扫描历史消息导致响应缓慢的问题。
- **`/goal` 评估模型不一致**：修复会话中切换模型而全局配置模型不可用时，`/goal` 每轮结束都提示「Goal evaluation unavailable」、无法判定完成的问题；Stop 评估现在使用与当前会话一致的模型 (#168973)。
- **`/goal` 长循环上下文膨胀**：修复 Stop feedback 同一轮被写两次、且每轮重复注入整段续跑约束的问题。反馈只经 Stop hook 的 `continueRequest` 单通道写入，只在上下文里没有该约束时补发全文，其余轮次只回 `[条件]: 评估理由` (#170322)。
- **Vim INSERT 模式误中断**：修复 Vim INSERT 模式按 Esc 切换到 NORMAL 时误中断正在生成的回复；保留 NORMAL 模式和标准编辑模式下的 Esc 取消能力 (#171819)。
- **`/clear` 重复执行**：修复粘贴内容后首次按回车执行 `/clear` 时命令被重复为 `/clear/clear` 并误触发模型请求的问题 (#171977)。
- **Windows 搜索不进入 junction 目录**：Glob / Grep 在 Windows 下默认跟随链接目录，junction 下的子目录和文件不再从搜索结果中缺失 (#169375)。
- **Windows 连接 SSH 远程工作区失败**：修复 Windows 上准备成功后连接立即失败并提示 SSH 连接失败（HTTP 502）的问题。
- **子代理内置工具清单与 MCP 声明不能配合**：支持空内置清单下直接使用已授权的 MCP 工具，恢复 MCP 服务选择器与服务级通配匹配，同时保留精确 MCP 工具限制、安全校验及会话隔离。
- **Web UI 历史会话列表重复**：修复因路径大小写不同而重复显示同一会话的问题 (#170788)。
- **Web UI 写入文件预览区高度塌陷**：修复 Agent 写入文件时编辑内容预览区只能看到一条缝、无法完整查看文件内容的问题。
- **Web UI 分身切换模组入口闪烁**：从智能体切回分身时左侧栏模组入口不再闪烁 (#170455)。
- **输入与长草稿编辑体验**：修复连续输入与粘贴交界时长内容绕过粘贴折叠的问题；限制长草稿和历史召回的可见编辑区域并跟随光标，避免输入框挤出屏幕和大量重绘；改善小尺寸终端下的输入与导航。
- **被叫醒的智能体状态闪烁**：被同事或频道来信叫醒继续工作的智能体在执行过程中如实显示为运行中，对话页不再在「已完成」与「思考中」之间反复闪烁。
- **Agent Home 收信编造与漏收**：修复协作成员在收信频繁、上下文较长时回合收尾反复自行编造「下一条来信」并被拒绝（`REFUSED: FABRICATED MESSAGE`）的问题；同时避免被拒的编造内容导致之后的真实来信被误判为重复而漏收 (#172140)。
- **关闭敏感信息保护后无法更新长期记忆**：修复该问题。
- **内置 devcloud 中继网关地址被覆盖**：默认地址改为 http；在「网关设置」中修改并保存的内置网关地址不再被默认值覆盖回 https。
- **定制版用户数据目录分裂**：MCP 配置、内存监控与崩溃诊断、企业策略缓存全部跟随客户配置的用户目录，不再回落到官方目录；后台任务、daemon 与恢复指引改用客户二进制名；定制打包同步替换文档中的用户目录、项目目录与指令文件名 (#153571)。
- **REPL cell 被用户停止的文案**：明确归因为「the run was stopped by the user」并提示不要重试，不再与超时共用疑似故障的文案。

## [2.179.3] - 2026-11-03

### 🎉 新功能

- **Windows / Linux 桌面端新增标题栏菜单与托盘**：标题栏左侧新增菜单按钮，可打开原本只在 macOS 菜单栏里的设置（如切换内置 / 外置 CLI、退出时停止后台服务）；新增托盘图标，可显示窗口、退出或停止后台服务并退出。行为变化：关闭窗口默认最小化到托盘，不再直接退出；如需恢复关窗即退出，在托盘菜单或标题栏菜单「服务」中取消勾选「关闭窗口时最小化到托盘」。macOS 行为不变。

### 🔧 改进

- **企业安全中心支持读取前敏感检测**：敏感保护中可开启「文件读取前检测」（`preReadDetection: true`），开启后 Agent 读取文件（含编辑已有文件前加载原文）会在内容进入工具前扫描敏感信息，命中时按企业规则给出的选项处理；未下发或个人版保持原有行为 (#144925)。
- **沙箱执行遵循企业统一下发策略**：遵循企业统一下发的程序黑名单、网络严格模式、拦截恶意网站和 HTTP 请求拦截策略；企业统一下发的自动备份开关、备份总上限与单文件大小上限同样生效；企业未下发的项继续沿用本地设置 (#144925)。
- **启动阶段并发加载与 IO 优化**：并发发现项目规则和加载自定义命令，本地缓存改为异步原子读写；减少启动时无关设置合并、重复工具参数转换和主 Agent 展示的会话磁盘读取，模型配置已就绪时首屏模型展示不再等待全部 Agent 注册；ACP SDK 加载延后到首次连接，本机标识异步获取，避免原生命令阻塞启动主线程。
- **WebSearch 工具结果默认跳过敏感信息检测**：保留已有密文保护、外发检查和工具执行审批。

### 🐛 修复

- **MCP 完成 OAuth 后仍显示待认证**：修复 MCP 服务器授权并成功连接后仍显示「待认证 / 连接失败」的问题；连接成功时同步清除此前 401 留下的 needsAuth 与错误信息，Web UI 不再让过期认证标记盖住已连接状态，并区分「未连接 / 待审批 / 连接失败」(#140189)。
- **文本形式的短错误码显示错误**：修复自定义模型服务以文本形式返回 429、500、503 这类较短数字错误码时，错误提示显示请求状态码、而不是服务返回的错误码的问题；字母形式错误码仍按原规则处理 (#167599)。
- **Harness 公共错误丢失产品业务码**：保留 HTTP 400 携带的 402 / 404 / 502 等产品业务码；与 HTTP 状态相同的 429 / 5xx 仍视为状态码，不当作业务码 (#166528)。
- **悬停已退出会话就拉起后台进程**：修复 Web UI 中鼠标悬停在已退出的智能体 / 会话上就拉起后台进程的问题，悬停只预取历史不再启动进程，避免浏览列表时凭空累积数百 MB 内存；真正打开时仍会自动恢复，并直接显示已预取的历史 (#170420)。
- **`--serve` 常驻进程命令行被展示名覆盖**：进程标题改为保留原启动命令（展示名仍在最前），按 `codebuddy --serve` 命令行识别进程的健康检查、取 pid、采样等外部监控升级后不再静默失配 (#170421)。
- **频道任务板下游任务永久卡住**：上游步骤被判放弃后，lead 或用户可用任务更新改写下游任务依赖（改指向替代步骤或解除依赖），原任务编号与历史保持不变；依赖终态的报错给出可执行的下一步 (#170422)。
- **切换数据目录后会话仍写入旧位置**：修复预热激活切换数据目录后会话仍写入旧位置，以及会话目录被清理后首次保存失败的问题；保留目录预热和缓存复用，正常保存不增加文件系统探测，仅在目录缺失时重建并重试一次。

## [2.179.2] - 2026-11-02

### 🎉 新功能

- **Web UI 直接切换工作目录**：本机 daemon 的 Web UI 在主对话的目录 chip 菜单里新增「切换工作目录…」，daemon 会以新目录重启（后台任务不受影响），页面随后在新目录重新加载，不再依赖 CodeBuddy Desktop 菜单；同时新增 `POST /api/v1/daemon/workspace` 接口。

### 🔧 改进

- **AICC 机密模型的端侧判定只看模型标签**：模型目录里带 `enterprise:aicc` 标签的内置模型一律走 AICC 加密（`custom-local:` 自定义模型除外），移除 `AiccConfidentialModel` 产品开关、模型 id 名单配置以及「IOA 内网或企业旗舰版账号」限制；专享版等其他账号类型只要能看到 AICC 模型即按 AICC 逻辑调用，能否看到该模型继续由服务端企业白名单控制 (#127985)。
- **会话初始化取消与超时及时返回**：初始化超时或取消后不再长时间等待清理，失败及时返回且不影响其他会话；减少大量技能初始化时重复的文件检查，以及能力列表与首次执行前重复的资源读取；补齐初始化前置读取的取消响应和各阶段耗时记录，便于定位慢启动 (#163909)。

### 🐛 修复

- **云主机切换工作区时目录选择反复失败**：修复反复报 `HOST_PREPARATION_DIRECTORY_FAILED`、点「打开目录」没有反应的问题；切换时显示进行中并拦截重复提交，复用已打开的目录租约直接连接（不再多等一轮探测），失败原因显示在弹窗内。

## [2.179.1] - 2026-11-01

### 🎉 新功能

- **频道历史完整保留与结构化读取**：频道历史不再按 800 字符截断正文，模型回看时标出消息 kind 并合并同一任务生命周期内的重复更新；长消息在时间线中默认折叠，展开后可查看全文。`historyFormat=json` 返回带 `id`、标准化 `kind`、完整正文、任务载荷和分页游标的结构化记录，可按 `kind` 和 `pinnedOnly` 过滤；当前安全窗口没有匹配项时返回 `olderCursor`，可用 `beforeCursor` 继续扫描。
- **频道任务板支持协调角色、DAG 依赖与复核**：ChannelTasks 可创建/派发协调角色与依赖，提供 `review` 动作提交带证据的接受或返工决定并标注 reviewerRole，依赖步骤据此推进或重开；`listFormat=json` 回显协调、复核、依赖、`stepId` 与远端状态，`correlationId` 让 specialist/critic/arbiter 共享同一协调批次。
- **频道消息编辑、撤回、固定与成员静音**：频道消息支持编辑、撤回和固定，资料面板展示固定的决策与结论；可按成员静音，静音成员仍保留在历史中但不会被频道自动唤醒，静音当前轮次 baton 成员时看门狗会立即记录跳过并交棒。

### 🔧 改进

- **频道任务与历史工具统一返回机器可读错误码**：ChannelTasks、SpeakInChannel 和 Agent Home 编排工具的失败路径统一带上 `error` code（如 `BOARD_READ_FAILED`、`COMPUTER_UNAVAILABLE`、`FABRICATED_INCOMING_MESSAGE`、`COORDINATION_ROLE_REQUIRED`、`COORDINATION_CORRELATION_REQUIRED`、`KICKOFF_NOT_POSTED`），调用方无需解析人类可读文案。
- **频道任务远端 MR/PR 状态探测**：已完成任务中的 GitHub / CNB / GitLab 引用会做只读远端状态探测，结果以内联 `remoteStatus` 返回；探测不可用时保留 `remote-review=pending`，不改动本地任务板。
- **频道空闲时仍推进逻辑时钟**：持久化 idle ticker 在频道安静时继续推进逻辑时钟、执行复核 SLA 超时和 outbox 排空，并对超时占用的 claimed 任务做有界去重 nudge。
- **`lossless` 的 `acp-v2` 订阅增加积压保护**：积压到 4096 帧后不再入队文字、思考增量和工具参数增量，完整条目、工具开始、最终参数、生命周期和用量照送；开始丢弃时告警一次，`sessionEventBacklog()` 多返回最大积压、丢弃帧数与格式化/回调耗时 (#166248 #163262)。
- **远程主机自动替换过期后台服务**：遇到身份已确认但配置过期的旧服务时，在同一次连接中自动替换并重连；Web UI 手动重试会重新准备连接租约，新开通的中继账号同时获得 Web 绑定所需代理权限。
- **WorkBuddy 仅在 plan 模式暴露 Plan 子代理**：非 plan 模式的会话不再向模型暴露内置 Plan 子代理 (#164123)。

### 🐛 修复

- **专家团积分用尽后仍唤醒主 Agent**：主 Agent 或任一成员积分用尽后，团队消息先保留，等用户下一次发送消息再继续处理；成员因积分用尽失败时带上与主会话相同的错误码 (#155225)。
- **停止子 Agent 时取消终态抢跑**：改为等这一轮输出写完（最多 3 秒）再发取消终态，终态之后不再转发该轮输出，进程内 Harness 不再把迟到输出判为协议故障 (#161833)。
- **旧 ACP 入口 `session/steer` 提前回 `idle`**：主 Agent 已答完、提问还在等成员时，插话先进入缓冲并叫醒主 Agent，被取走后才回 `steered: true`；叫醒失败、被新请求抢占、用户取消等场景会撤回插话并回 `idle` (#167576)。
- **团队成员恢复执行时继承已结束的 hook 上下文**：修复因此跳过模型请求的问题；ACP 将内部空响应错误按失败上报，保留正常完成和真实用户取消行为。
- **`hy4-dev` 图片直传模式误判**：修正 `hy4` 前缀把 `hy4-dev` 判为非多模态的问题，并支持模型级 `imageInputMode` 远端配置 (#168519)。
- **主理人收不到成员结果**：中断或会话卸载后保留未处理结果并在恢复时继续送达，主理人完成当前回复后成员仍可在后台继续工作 (#163063 #161795)。

## [2.179.0] - 2026-10-30

### 🎉 新功能

- **Web 插件管理可直接查看和管理 MCP 服务**：MCP 筛选下会列出 mcp.json 中配置的服务器，显示连接状态、传输方式和来源，并支持启用/停用、重连、删除与发起认证；插件自带的服务器在此只读；同时提供多种能力的插件在 Skills 和 MCP 两个筛选里都能找到，种类改由插件自身声明的能力判定，不再靠插件名猜测 (#165860 #166031)。
- **REPL 执行中实时展示内层工具调用**：折叠态按完成态的调用树逐条透出，正在执行的调用显示转圈与实时耗时，长任务不再只剩一行 running (#166646)。
- **Goal 支持附件与更长的目标条件**：可随目标发送文件、图片、资源引用和长文本上下文，暂停恢复保留附件，敏感内容沿用现有审查；条件上限由 4000 提升到 8000 字符。Web UI 目标编辑弹层支持上传、粘贴、拖拽附件以及预览和移除，等待发送时保留新草稿、切换会话取消旧请求 (#97819)。
- **同一会话空闲时可切换工具模式**：终端和 CLI 自带 Web UI 可在标准、PTC、极简与创造模式之间切换而无需清空历史，下一轮同步使用新的调用指导、工具声明和上下文统计，保留原角色、模型与权限；运行中或等待审批时仍禁止切换不同策略。
- **Mod 的 `$` 接口补齐到 2.1.311**：无头运行（SDK / 服务模式）下会话、工具、命令、配置、模型、MCP 等接口可用，`$.session.usage` 返回上下文窗口用量，`$.tool.call` 与 `$.command.run` 在当前会话里真实执行（工具先经权限检查），Mod 可在会话内登记工具、命令和子 agent 并随会话结束回收，`$.config.set` 真正写入设置，`$.settings.read` 支持 `local` / `flag` / `policy` 来源和 `{ key }`，新增 `$.ui.notify`、`$.ui.view`、`$.session.identity`、`$.prompt.media`、`$.prompt.paint`；`tool.check` 的 hook 能读到 `approver` 与 `isReadOnly`，`ask` 只能由人回答；公开类型声明同步到上游 2.1.311 (#160452 #167398)。

### 🔧 改进

- **Agent Home 频道消息流改为虚拟化渲染**：只挂载可视区域内的消息行，行高实测、窗口外不进 DOM；单频道内存保留最近 1000 条，滚动到顶部自动加载更早历史，长频道滚动与重渲不再随消息数变卡，气泡合并、引用跳转、卡片作答等交互保持不变。长文本消息在挂载时即使用真实高度，避免首帧未测量导致的消息重叠 (#168263)。
- **辅助任务模型失败自动回退**：用户自选的 Lite 模型请求失败时不再只认 401，任何模型错误都先在原模型重试一次，仍失败则恢复默认模型再执行一次，同一会话内后续请求直接走默认模型；此类请求不再叠加请求层退避重试，失败时不会长时间卡住，未登录与取消不触发 (#159950)。
- **频道发言正文上限提升**：由 2000 提升到 20000 字符，超限时显式报错（HTTP 400 `MESSAGE_TOO_LONG`、工具侧提示未发送），不再静默截断；房间历史裁剪仍保留，但会标出被省略的字符数。
- **自动快照跳过未变更文件**：已确认与备份一致、且之后未被修改的文件不再每条消息重读，跟踪大文件后发消息不再明显变慢；确认不了时仍逐字节比较 (#166155)。
- **Bash 沙箱追踪补充阶段**：Galileo 时间线增加策略检查、沙箱首跑、拦截归因和本地重试阶段，内部审批等待关联到沙箱编排并区分等待、授权和实际执行耗时；宿主通道的人工审批补上等待 span，自动审查与审批排队不计入人工等待。
- **请求发起方统计更准确**：修正定时任务、团队消息和插件辅助调用的发起方归类，新增请求场景分类；用户插话仍按用户输入统计，工具续轮不重复打标，辅助调用的已知用途保持固定类别。
- **上下文压缩摘要在多会话下跟随当前会话模型**：Harness 多会话时以 `requestOptions.model` 优先于 `options.model`，显式指定的压缩模型仍然优先 (#166900)。
- **会话资源配置改为 capabilitiesRoots**：以稳定资源 ID 和执行位置描述会话资源，常规 skills/agents 目录与插件包一并由既有扫描器加载，保留已安装插件配置与技能元数据 (#163268)。
- **Harness 上报 skill_info 回填身份**：进程内 Harness 上报时回填 run 级 userId / enterpriseId，并按会话技能加进程技能查找 skillId。
- **清理已废弃的测试和 SDK 示例入口**：统一维护仍在使用的验证资源，减少开发者误用历史流程。

### 🐛 修复

- **会话历史清理开关不再随环境继承**：交互式入口不再把 `CODEBUDDY_SESSION_HISTORY_CLEANUP=1` 写进自身 `process.env`，工具、hook、MCP、插件里拉起的嵌套 `codebuddy` 不会继承后按内置 30 天删除会话；读不到用户保留期（`--setting-sources` 排除 USER 档或读取失败）时整次跳过清理，不再回落到 30 天；显式设置的环境变量与 `codebuddy cleanup --days <n>` 仍然生效。
- **Web UI 状态不再被陈旧快照覆盖**：实时回合仍运行时，频道、侧栏和顶部状态栏优先展示实时运行状态，避免智能体状态在工作中跳回已完成或空闲 (#167429)。
- **Web UI 通知通道 409 不再无限重试**：任何 409 都按连接冲突处理，先释放旧连接再重新获取授权并重建通知流（有次数上限），服务端同时带上稳定错误码 `ACP_NOTIFICATION_STREAM_CONFLICT`；只有 Bearer 凭据的页面也能建立总线连接，认证下沉到 `client_hello` 的 ACP 授权校验，非浏览器客户端仍要求网关密码。
- **远程主机准备失败能看出该修哪里**：本机探测资产问题单独归类为 `HOST_PREPARATION_PROBE_ASSET_UNAVAILABLE` 并带 `assetCode` 与 `path`；`/prepare` 由 502 改为 409 且 `retryable: false`，`/connect` 维持 502 但保留 `reason` / `assetCode` / `path` / `retryable`；远端 ssh 失败按 `dns` / `tcp` / `banner` / `auth` 归层给出提示；探测资产按目标平台只读取所需那份，`.ps1` 固定以 LF 落盘 (#167289)。
- **沙箱内命令已成功不再触发审批或重复执行**：避免重复产生副作用；自动模式下沙箱拦截后保留首轮结果并提示显式申请沙箱外执行；命令转后台后提权拒绝不再被误报为成功；云沙箱中审批放行后点「停止」不再卡死会话，而是以取消收尾 (#166209 #168035)。
- **PTC 模式问答不再十分钟超时**：用户稍后返回终端仍可回答，取消或停止时正确撤回本次问题；Code Mode / PTC 内层工具调用现在会执行 PreToolUse 决策，hook 的 allow、deny 与参数改写在权限检查前生效。
- **工具模式上下文诊断更准确**：按实际模型声明估算工具占用并避免重复计算 MCP 工具，PTC 与极简恢复专用 REPL 调用说明，模式选择不改变真实角色、权限与其他会话。
- **带图会话第二轮不再重复注入图片本地路径**：避免打断模型前缀缓存导致命中率骤降 (#164903)。
- **微信支付卡片恢复显示**：宿主接管微信支付后支付卡可正常显示、查询结果可回填，调用失败时保留错误原因并区分商户订单与支付状态，避免引导重复下单 (#164381)。
- **Agent Home 频道协作修正**：系统入站消息按只读回执处理，出站工具不再暴露入站字段，模型误重放 incoming 会被明确拒绝；跨进程派单提交后任务板按持久化协调版本刷新并显示新任务；REPL 内 Agent 在实时参数更新及长 prompt 超预算时保留任务描述，子代理卡片不再统一回退到 general-purpose。
- **Agent Home 同事统一使用默认权限**：创建、唤醒与定时任务统一使用默认权限，并继承创建者当前有效模型。
- **自定义子代理 `tools: []` 按零工具白名单生效**：不再退化成继承全部工具，`agent/list` 与资源查询原样返回，调用方可区分「未声明」与「显式零工具」 (#167401)。
- **原生 ACP 延迟 MCP 调用不再新增审批**：已授权的调用保留原有授权与执行路径 (#167426)。
- **MCP strict schema 日志刷屏**：无法无损转换时仍降级为非 strict，但日志降为调试级别，需要排查时用 `DEBUG=openai-agents:core` 打开。
- **旧云沙箱伽利略配置不再触发启动等待**：不再消费旧 `CODEBUDDY_GALILEO_CONFIG` 的内容，存在该旧配置的云沙箱中上报暂时关闭，首轮请求不再为此最多等 10 秒；后续恢复上报改由 `CODEBUDDY_GALILEO_CONFIG_V1` 承载（本次未开启下发）(#150453)。
- **定时任务返回聊天可定位到触发消息**：job 只读转录覆盖期间不再错过定位事件。
- **终端连续或长按退格不再插入不可见控制字符** (#168311)。

## [2.178.1] - 2026-10-29

### 🔧 改进

- **各模式统一为业务 Agent 的工具策略**：终端和 CLI 自带 Web UI 的标准、PTC、极简与创造模式改为同一业务 Agent 的工具策略，切换模式不再改变角色、所选模型或权限，模式状态按会话同步；子代理保留自身角色与工具限制，REPL 工具目录、调用与授权沿同一会话策略生效，嵌入宿主不再受终端手动模式影响；原生延迟工具保持纯文本结果，MCP 参数按原始 Schema 校验，延迟工具原名与 SDK 别名保持一致的参数转换和诊断，长整数业务 ID 不再在工具包装中提前舍入。
- **底层对话引擎升级**：保持现有对话、工具调用、审批、取消与历史会话恢复行为不变 (#131958)。
- **收紧 Agent Home 的同事消息工具协议**：模型只能执行列表和发送，系统入站回执不再出现在可调用参数中；兼容历史回执解析，绕过 schema 时明确拒绝伪造来信。
- **子代理失败提示补充执行模型**：子代理执行失败时在错误文案的 subagent 后带上实际执行模型，便于区分主模型和子模型。

### 🐛 修复

- **审批恢复后的执行与二次拦截**：已被拒绝的工具调用在审批恢复后不会再被执行，自动模式下用户已批准的调用不会被二次拦截；内容安全拦截继续显示安全提示而非内部错误；模型偶尔返回格式异常的工具名后，该会话后续对话不再持续报错 (#131958)。
- **PTC 下 REPL 内嵌问答不再重复弹窗**：宿主已托管审批或用户已作答的提问不会被误判为需要再次审批，问答结果以文本形式返回给模型 (#164482)。
- **频道同事不再被同一条消息反复唤醒**：消息已在之前的通知里给过、又不需要他回应时直接收下，不再为它单独唤醒；被 @ 或轮到他发言时照常唤醒，只用一行提示指向之前那条 (#165119)。
- **任务完成通知里同一个文件只出现一次**：同一文件的不同路径写法（如 `/tmp` 与 `/private/tmp`）现在会合并 (#165119)。
- **任务板执行人登记**：登记了实际执行人的任务即使还没人认领，改派后登记也会自动清除；按成员筛选任务时，频道外的实际执行人也会出现在筛选项里 (#165389)。
- **旧版本任务板升级**：Agent Home 已有的任务板不再报错、加载失败，第一次修改时自动转存到新的存储；同事在调用模型之前失败时显示真实原因，不再一律提示去查模型服务 (#165540)。
- **REPL 返回值里的图片可以出现在任意位置**：图片放在对象字段、数组或嵌套结构里都会被识别并展示，不再把整段 base64 当文本发回、被传输上限截断成损坏数据；图片参数写错时给出改用看图工具的手把手指引。
- **服务模式下推送流不再被误判断开**：远程终端等推送流在网络较慢、输出量较大时不再被误判为停止读取而断开，终端输出不再截断或需要重连；只有客户端长时间完全不再读取时才会断开连接 (#165505)。
- **Web UI 编辑器终端切回不再错乱**：在全屏终端程序（如 CodeBuddy Code 交互界面）运行中切到其他页面再切回，不再出现重复状态行、分隔线长短不一等错乱。

## [2.178.0] - 2026-10-28

### 🎉 新功能

- **链路追踪页面能按会话找到 trace**：会话列表右键「查看链路追踪」即可打开该会话（含子智能体、后台任务进程）的全部 trace，也可用 `#/traces?session=<会话 ID>` 直接打开；列表新增执行者与工具筛选，span 标题改为「工具名 + 描述」「模型调用 · 模型名」等可读形式，详情页显示执行者与所属会话，可复制会话 ID 或一键只看该会话；列表按时间从新到旧读取、并发会话不再串号 (#164202)。
- **频道人数上限调大，并可在设置中修改**：频道默认最多容纳 12 个 AI 同事（原来 6 个），「设置 → AI 同事 → 频道最大成员数」可改为 2～20；调小上限不移出已有成员，只是不能再加人；人数超限时提示当前上限和修改入口，每轮讨论发言名额随人数相应增加 (#164672)。
- **新增 `/approve` 重试授权**：可选择当前会话最近被自动审查拒绝的动作，记录对该准确动作的一次重试授权；不会直接执行动作或切换权限模式，重试仍需经过自动审查；终端界面完整展示自动审查的拒绝原因、风险与授权等级，以及审查失败或超时提示 (#164700)。
- **Agent Home 支持只读频道与任务执行人登记**：主智能体可只读回看频道发言与任务事件（可分页往前读），不打扰频道成员；任务被私信转给别人时可在任务板登记实际执行人（可为频道外同事），卡片与时间线显示真正做的人，改派、放回或收回认领时自动清除，完成结果记在实际执行人名下 (#165389)。

### 🔧 改进

- **定制构建全程使用客户身份**：模型以配置的 CLI 名称自我介绍，`/init` 生成配置的指令文件，Web UI 入口页与连接文案使用配置的产品名，skills 提示指向配置的配置目录；官方构建行为不变 (#153571)。
- **Mods 的 `tool.check` Hook 返回 `ask` 语义对齐**：引擎记下发起询问的插件（`ToolCheckResult.plugin`），这类询问只能由人回答；任何权限模式、本会话已记住的允许和自动风险审查都不会替人放行（自动审查仍可拒绝）；ACP 客户端和宿主回调收到的确认只有「允许一次」和「拒绝」(#160452)。
- **server 新增只读 `sessionEventBacklog()`**：返回各会话订阅还没送达的事件帧数，只列有积压的会话、从多到少，供宿主做内存诊断；读取不改变投递 (#161150)。
- **补齐 Harness 模型元数据透传**：支持通过 prompt 的 `_meta['codebuddy.ai']` 发送 `customPassthroughHeaders` 和 `extraFieldsMeta`，沿用请求头前缀白名单与模型转发策略；载荷按执行轮捕获，子任务和延迟调用保持所属轮快照，后续提问省略字段时不沿用上轮值。
- **Web UI 运行状态更透明**：对话底部状态行区分「模型生成中 / 模型正在生成某工具的参数」「某工具执行中」「等待模型响应」，并显示当前步骤已持续时间；代码执行卡片区分「模型正在生成代码」与「正在执行代码」(#164183)。
- **Web UI 长会话更流畅**：头像动画滚出视野或被遮挡即停，伴宠不再让页面每帧重绘，终端标题更新不再触发整界面重渲染。
- **远程主机状态一致、频道数据更可靠**：连接远程电脑后主会话与各智能体看到的主机状态保持一致（回环用本地桌面、已连接电脑转发操作、未连接显示离线），Linux 远程电脑支持桌面操作与剪贴板；同事消息确认送达前不会丢失，任务板或频道目录文件损坏时保留原文件并备份、可从备份恢复。
- **智能体证据核验**：智能体自己编造的「队友来信」被明确拒绝并告知消息不存在；频道任务标完成必须附本机可核实的证据（存在的文件或可解析的提交），缺失或对不上会被拒绝；任务板为已完成任务标出「证据已核验」或「未经证据」。

### 🐛 修复

- **Windows 进程与句柄**：修复 NPM CLI 连续执行 Bash 后遗留 conhost 进程和原生句柄的问题，交互终端、命令输出和后台任务行为保持不变 (#159867)。
- **网络错误归因**：网络连续中断、重试次数用尽后不再被误判为「模型服务异常」，保持网络异常提示 (#161377)。
- **Web UI 终端**：包管理器脚本启动时内置终端不再命中项目依赖中的同名 `cbc`/`codebuddy` 命令 (#164916)；终端里运行 `cbc` 不再无输出静默退出，残留配置会提示原因和解决办法 (#164062)。
- **Chat 网关思考开关**：显式关闭思考时正确发送 `reasoning_effort: none`；第三方 Chat、Responses 和未设置开关时保持原行为 (#163753)。
- **同事重启接回会话**：切换过会话的同事重启后不再收不到任务和 @ 消息；即使会话长时间对不上，收件箱也会改投到实际运行的会话，不再无限等待。
- **桌面端新窗口通知**：修复「新窗口」页面收不到完成后系统通知的问题；系统通知被拒绝时设置页「发一条测试通知」如实提示失败。
- **远程主机密钥轮换**：主机重建、密钥轮换后不再被「主机密钥已改变」永久阻断——自己的 SSH 配置已关闭校验（`StrictHostKeyChecking no`）时自动重新确认并替换过期记录；未关闭校验的主机保持阻断 (#164092)。
- **Web UI 工具卡片**：复制入口浮于结果区右上角并分别标注「参数」「结果」，桌面端悬停出现、触屏窄屏常驻；执行命令的命令行与输出合并为一张卡片 (#164113)。
- **带图消息显示**：会话标题与气泡不再露出 `<image_local_path>`、`@image#1` 等内部标记，「回到这里」按钮移到气泡下方操作行；只发图片的消息正常显示缩略图、刷新不消失，只发图会话标题跟随界面语言，旧标题去掉路径 (#164162)。
- **自动沙箱边界**：修复自动模式下沙箱写入边界与权限判断不一致的问题，仅对工作区、临时目录及明确允许的目录免审写入；沙箱拦截无记录时给出明确的受审查重试提示，完整保留权限拒绝原因和沙箱提示 (#164191)。
- **推送流背压**：修复服务模式下页面挂起或代理停止读取时，文件监听/终端输出/任务列表等推送流持续积压导致内存增长直至崩溃的问题；停止读取的连接会被主动断开，文件监听不再上报内部锁文件 (#164286)。
- **分身卡片**：选中后有明显底色；悬浮提示图片标记显示为「[图片]」，标题单行、摘要最多两行、运行状态显示在标题右侧 (#164298)。
- **私信自动建会话**：给还没开过会话的同事发私信自动起会话并投递，起会话失败时信不丢、稍后自动重试 (#164665)。
- **新建会话使用默认模型**：Web UI 手动切换过一次模型后，新建会话不再沿用那次选择，一律使用设置里的默认模型（项目设置优先）；输入框切换只影响当前会话 (#164976)。
- **频道消息去重与完成通知**：只用任务板干活、不在频道发言的同事不再反复收到同一批旧消息；任务完成通知列出 Issue、MR、commit、证据路径并注明是否经证据核验 (#165119)。
- **智能体切换不跳动**：打开正在运行、历史较长的智能体直接呈现折叠形态，不再先全部展开再折叠 (#165281)。
- **额度用尽提示**：个人、部门和企业额度用尽时，已用数量、上限和周期正确传给界面。
- **插件详情页**：展开部分插件详情不再整页报「页面加载出错」，信息格式不一致也能正常显示，单卡失败只影响该卡片并可重试。
- **任务模板图标**：推荐模版中安全扫描、TODO 清理、测试覆盖率等卡片按类型显示对应图标，不再统一是时钟。

## [2.177.1] - 2026-10-27

### 🎉 新功能

- **后台会话预热池**：后台智能体（Web UI 派发的后台会话）默认使用 CLI 预热缩短首次连接时间，后台服务维护 1 个待命进程、新建会话时直接激活，实测首次可连接耗时由约 1.3 秒降至约 0.4 秒；可在 Web UI「设置 - 行为」中随时开关（即时生效），也可用环境变量 `CODEBUDDY_BG_PREWARM_POOL_SIZE` 调整预热数量（0 关闭）(#161405)。
- **额度用尽说明更具体**：额度用尽时会区分个人、部门和企业资源包，并保留原有的备用模型切换。
- **Web UI 新增「显示 REPL 内部工具调用」开关**：默认隐藏内部执行步骤与详情，可随时开启，保留子智能体、回复与必要交互。

### 🔧 改进

- **子代理派发与任务工具使用收紧**：只有用户、项目指令、skill 或当前 agent / 模式明确要求时才派发子代理，「深入、全面分析」不算授权；TeamCreate 不再因任务复杂而主动建团队。可逆、只读、修复类工作和已授权的操作不再反复确认，授权在原范围内跨轮有效，高风险操作仍需确认。plan 模式强调复用已有实现、最终计划包含背景与端到端验证方式、审批只走 ExitPlanMode，Plan 子代理改为架构设计角色；Explore 收窄为范围明确的定位类问题；任务工具只在 3 步以上、用户要求清单、用户给出多项任务或 plan 模式下使用 (#143786)。
- **桌面端后台服务改用一组固定端口**（56527 / 56528 / 56529，按顺序取第一个空闲的），端口稳定后 Web UI 的通知授权与本地设备状态不再因端口漂移被清空；三个都被占用时不指定端口，回落到原有默认端口 (#163017)。
- **主机管理页新增主机信息悬浮卡片**：主机名旁的 info 图标可查看完整主机信息（主机名、共享者、SSH 账号与端口、全部局域网地址、连接方式、登录方式、中继网关与网关地址、隧道名），他人共享的设备还会展示共享有效期 (#163017)。
- **Web UI「打开目录」弹窗新增刷新按钮**：远程主机目录浏览可显示指向目录的软链接，弹窗静置较久后自动恢复连接而不再卡在加载失败；资源管理器目录树加载长时间无响应时转为可重试的错误提示。
- **IDE 集成终端进程归属检测改为异步并增加超时**，同轮检测复用查询结果，减少 Windows PowerShell 探测对输入和界面更新的阻塞；终端 @文件补全在移动光标进入已完成路径时不再重触发搜索，查询复用工作区索引并后台刷新，模糊匹配分批执行 (#162812)。
- **轮末结算写入上下文类目快照**（`context-usage` fact），历史会话 resume / 回放时可取回类目明细 (#161180)。
- **新增 `sandbox.safeDeleteBulkApprovalEnabled` 配置**：可独立关闭批量删除数量阈值审批，同时保留删除保护和其他权限检查；默认开启，配置刷新后对后续工具调用生效。
- **从远程主机切回本机后，终端接回切换前仍在运行的本机会话**，不再新开 shell、丢失原有输出。

### 🐛 修复

- **等待提问回答或工具审批时停止，本轮真正结束**：stream-json 模式下本轮停在 AskUserQuestion 或工具审批上时宿主发送 interrupt，不再把取消当成「用户拒绝回答」另起一轮继续执行；本轮未执行的工具调用记为「被用户中断」，先跑完本轮 Stop hook、写出取消终态 `type=result`，再处理排队的消息 (#158327)。
- **Stop hook 要求续跑但续跑未能启动时不再卡在「生成中」**：续跑被拦截、取消或启动失败时，本轮以已有答复写出终态 `type=result`，后续消息不再被一直挂起 (#158327)。
- **REPL 返回的图片支持任意位置**：图片放在对象字段、数组或嵌套结构里都会被识别并展示，不再把整段 base64 当文本发回而被传输上限截断成损坏数据 (#148988)。
- **代码执行返回无效图片时立即给出明确提示**：保留其他结果和正常输出，不再造成后续对话反复丢图。
- **企业微信长回复完整送达**：超过平台单条长度上限时拆成多条依次发送，拆分处代码块在下一条重新打开、表格重复表头，每条等平台确认送达后再发下一条；流式回复无法继续时改为普通消息补发完整内容，最终仍未送达时返回失败并说明原因 (#151881)。
- **修复团队任务在自动重试交接期间提前结束的问题**，回复与任务输出持续更新，直到本轮任务真正完成 (#151213)。
- **修复团队成员详情与续跑历史的身份关联**：使用稳定子会话 ID、公开昵称与角色读取成员内容，保留旧 agentName 与历史描述符兼容；成员续跑后可用当前 task_id 查询 TaskOutput，团长不再误读用于展示状态的后台记录，重开历史后成员也不再被重复分类为普通子代理 (#160479)。
- **修复 Windows 上系统 PATH 不含 PowerShell 时插件 hook 启动失败并拦截用户提问的问题**：按 PATH、系统自带 PowerShell 路径依次查找，找不到时改由默认 shell 执行 (#161099)。
- **修复 Plan 模式下同轮并行「写计划文件 + 退出计划」时审批卡片只显示兜底提示、看不到计划正文的问题**：退出计划前重新读取最新的计划文件内容 (#163073)。
- **修复 `settings.agent` 自定义主线程的工具检查误用子代理实例、导致错误提示工具不可用的问题**，保留延迟工具与子代理权限限制 (#159902)。
- **修复桌面端左下角更新提示面板「下载中」按钮文字在暗色主题下几乎看不清的问题**：禁用态改用中性灰底与次要文字色 (#162319)。
- **修复桌面端左下角头像菜单「可观测」分组与「配置」分组左沿错位的问题**：分组分隔线不再把后续分组整体右移 (#162632)。
- **修复 WorkBuddy Harness 会话的沙箱审批绕过 AIReview 的问题**，恢复静默决策、风险提示和取消处理 (#162930)。
- **修复从定时任务执行记录进入对话时误提示「没有可定位的过程记录」的问题**：重新打开的历史对话也能定位到对应执行，较早的执行会自动加载更早历史后定位 (#163016)。
- **修复智能体进程已退出时点「新建会话」反复 502、舞台长期停在「正在连接会话…」的问题**：改为先重启该智能体、等重新绑上后再建会话；已接上且没有历史时直接展示空会话。
- **修复 Lite 模型请求失败后未恢复默认模型的问题**：仅当用户设置的 Lite 模型最终返回 HTTP 401 时清除用户级覆盖并通过 ACP 通知宿主，网关故障、限流、超时和网络错误不再清除用户选择；Lite 模型自动恢复默认后广播 USER 级重置通知，避免 one-shot 辅助任务的临时会话导致提示丢失 (#159950)。

## [2.177.0] - 2026-10-26

### 🎉 新功能

- **会话级 Code Mode 配置**：新增 ACP `codeMode` 配置项（`off` / `all`），对所有 ACP 宿主下发；完整 PTC 通过 REPL 调用内部工具，首轮后锁定取值，同值重放保持幂等。Code Mode 下 REPL 保留为模式入口，不被宿主传入的 `--tools` 工具精选集过滤，会话模式标记按现有历史存储保全；未上线的 MCP-only 模式删除，不增加存量迁移 (#141591)。
- **Web UI 支持在对话内预览 SVG 与播放视频**；远程会话的审批与问题请求可发送到本地桌面原生通知，操作按钮提供悬停提示 (#161919)。
- **stream-json 新增 `reconnect_mcp` 控制请求**：无需重启 CLI 即可重新连接已配置的 MCP 服务，响应在服务工具可用后返回完成 (#158574)。
- **交互式终端长任务网络重连**：断网后持续重连直到恢复或按 Esc 停止，重连间隔按 1/2/4/8/16/32/64 秒增长并保持 64 秒；等待时显示重连提示、次数与断开原因。主任务默认不再限制 500 轮，`--max-turns` 与 `CODEBUDDY_CODE_MAX_TURNS` 仍然生效 (#152375)。
- **Web UI 子代理工作台与消息级 Fork**：后台子代理与同步子代理统一在右侧工作台查看执行详情，过程与结论展示与主对话一致；消息复制按钮旁新增 Fork，可带上到该消息为止的上下文在侧栏并行处理任务 (#160582)。
- **模型请求与自动恢复的本地退避统一使用 ±10% 随机抖动**，上限限制基准间隔，服务端要求的等待仍优先 (#152375)。

### 🔧 改进

- **PTC 全量 Code Mode 内部工具展示**：按真实调用展示等待、运行、完成、失败和取消状态，ACP 历史重开时恢复相同调用身份与顺序；展示记录采用有界安全摘要，不改变模型的 REPL 执行接口 (#141591)。
- **Web UI 长会话内存优化**：停在底部空闲时自动释放更早消息占用的页面内存，上滑时按页加载回来，屏上内容不变；运行中、待确认或查看其他面板时不触发。导出对话包含完整历史 (#154955)。
- **桌面端更新提示优化**：新版本已下载提示的主按钮在深浅色主题下都清晰可点，会话与任务将结束的提醒单独成行，面板样式与其他弹层保持一致 (#160547)。
- **WebUI 输入框右键菜单补齐剪切、复制、粘贴、全选**，与换行、发送分组展示，按选区与可编辑状态自动启用或禁用，显示当前平台快捷键，支持键盘操作；菜单粘贴可粘贴图片和文件，剪切可撤销 (#160558)。
- **Daemon 重启后自动恢复微信与企业微信渠道连接**：手动关闭的渠道不恢复，恢复在后台进行，失败时按上限间隔重试并展示「重连中 / 由其他进程承载 / 重连失败」状态；同一机器人始终只由一个进程连接 (#160574)。
- **Web UI 编辑器体验优化**：编辑器页面用顶部搜索打开文件会直接在编辑器中打开；图片预览与调用链图谱双指缩放跟随捏合幅度平滑缩放并以光标为中心；代码编辑器与差异视图触控板滚动更跟手 (#160896)。
- **Auto 模式工具安全审查增强**：统一常规工具、MCP、REPL 及后台命令的风险判断与审批反馈，支持查看默认和生效策略并通过额外策略补充审查要求；自动审查优先使用快速模型，不可用或调用失败时回退原有审查模型。
- **自定义模型请求头分账**：直连白名单内的合作模型服务平台请求携带渠道、模型类型、端来源和哈希后的企业标识，其他地址及跳过内部请求头的请求不携带 (#125729)。
- **Web UI 对话流正文字号由 13px 调整为 13.5px**，辅助文字保持不变 (#161671)。

### 🐛 修复

- **修复嵌入式 Agent Runtime 中用户停止后，后台任务完成通知自动启动新轮次的问题**：停止期间保留未消费通知，直到下一条显式用户输入执行完毕后再派发 (#151224)。
- **修复云任务标题丢失用户请求的问题**：开场消息包含技能引用时不再丢失原始请求 (#151275)。
- **修复 WebUI 刷新页面或切换会话后，历史回复底部的本轮消耗积分与「复制请求 ID」消失的问题** (#160549)。
- **修复定时任务执行记录指向错误会话的问题**：「查看执行过程和结果」会打开真正执行该轮的对话，已有历史执行记录也会自动纠正 (#160551)。
- **修复 Web UI 国际化文案**：英文界面不再出现中文，中文界面不再出现英文；统一「智能体」「Sign in」「canceled」等术语与省略号写法 (#160561)。
- **修复后台子代理运行期间切换工作树后输出记录持续写入失败、丢失后续内容的问题** (#160614)。
- **修复 Desktop 内置浏览器重启后重复提示登录、导入后黑屏**：按「每次启动自动更新」重新同步 Chrome 登录状态并在页面加载前完成；重启后恢复各会话（含新对话页）上次打开的网页，新对话页拥有独立的工作台 (#160641)。
- **修复同一台设备上多个 CBC 进程共用中继时状态不同步的问题**：任一进程开启或停止「共享本机 SSH」，其他进程自动跟随；承载中继 Web 绑定的进程退出后，其他进程自动接管 (#160972)。
- **修复 Web UI 侧栏 Fork 分支与主对话渲染不一致**：分支运行时同样流式输出、完整展示工具卡片，实时显示思考与阶段信息，分支结束后仍可查看历史并继续发消息 (#161013)。
- **修复模型输入内存保护误拦截**：先回收一次内存再判断，只有回收后仍然耗尽才暂停当前请求；内存充足时历史条数很多也能正常对话 (#161015)。
- **修复新建会话在快照同步期间长时间停留在连接中的问题** (#161919)。
- **修复 Auto 审查残留与拒绝反馈问题**：REPL 并发调用结束后残留状态、一次性批准撤销后被在途失败审核恢复、MCP 达到拒绝上限未结束本轮、后台命令拒绝反馈缺失等。
- **修复工作目录为网络共享（WebDAV/UNC）路径时 Windows 上 CLI 冷启动崩溃**：加载插件/Mod 的编译器不再依赖会话工作目录。
- **修复 `/fork` 和 `/branch` 对包含上下文窗口记录的会话误报历史元数据损坏**，保留独立子智能体历史并支持重启后继续父子对话 (#161013 #161015)。
- **修复流式连接中断自动恢复时的提示**：显示明确恢复提示而非只显示 `aborted`，重试耗尽与主动取消保持不同提示；修复已输出部分正文时提前显示 `Worked for` 的问题 (#152375)。
- **修复 Windows 上 PowerShell 只读命令因路径末尾为 `/en`、`/enc` 或 `-en` 被误判为编码命令的问题**，并补充拦截 `-e`、`-ec` 别名及 `-EncodedCommand` 任意前缀 (#158081)。
- **修复 `-p` 无头模式后台工作流固定等满 10 分钟才退出的问题**：工作流一结束即退出，主 agent 总结打印到终端；超出等待上限时告警、停止后台任务并以非 0 退出 (#158181)。
- **完善多成员协作回归覆盖**，并修复验收页面窄屏导航布局 (#89304)。
- **修复远程主机连接时「停止并重试」无法替换异常后台服务的问题**，不再持续返回 502。
- **修复终端对话快速输入或粘贴后立即回车时消息末尾文字丢失的问题** (#161864)。

## [2.176.0] - 2026-10-25

### 🎉 新功能

- **远程 SSH 主机支持桌面深链打开**：远程控制 Web UI 的主机列表新增「在桌面端打开」，点击生成 `codebuddy-desktop://` 深链唤起本机桌面客户端，直接打开该 SSH 主机及其工作区；主机与工作区信息随链接恢复，未登记的主机保持挂起不误连 (#160333)。
- **服务模式由宿主提供确认卡通道**：`QueryOptions.elicitation` 与 ACP 连接的 `elicitation/create`、`elicitation/complete` 同形，会话激活时绑定，子任务沿用主会话的通道。微信支付拦截的支付确认卡与 A2A 工具的认证失败、审批中断卡片优先经它发给宿主；此前服务模式没有确认卡通道，这些卡片不发出。微信支付服务先查会话自己的 weixinpay MCP，服务模式下它由宿主按会话声明。CLI 进程不设该选项，行为不变 (#143363)。
- **服务模式会话支持 `strictMcpConfig`**：`QueryOptions.strictMcpConfig` 与 CLI 的 `--strict-mcp-config` 同义，为 `true` 时会话插件（已启用插件与 `pluginRoots`）声明的 MCP 不进会话 MCP，插件的技能、命令、hooks、agents 照常加载；Product、插件与工作区定义的 Agent 不启动自带的 MCP，`agents` 传入的定义保留。会话激活时绑定，`reload({ strictMcpConfig })` 替换常驻会话的取值 (#143363)。
- **IOA 默认请求头的路由模式**：新增环境变量 `CODEBUDDY_ENV_ROUTE_MODE`，取值同设置项 `envRouteMode`。设置里没有 `envRouteMode` 时读这个变量，只用于选择 `X-Domain`、`X-Enterprise-Id`、`X-Tenant-Id` 的 staging 或正式取值；地址选择不受影响 (#143363)。
- **专家请求头随提示的 baggage**：提示的 W3C `baggage` 带 `x-expert-id`、`x-expert-team-task`、`x-moderation-type` 时，展开成同名平台请求头 `X-Expert-Id`、`X-Expert-Team-Task`、`X-Moderation-Type`。只加在内置模型请求上，覆盖用户自定义头里的同名项；平台 REST（生图、生视频、生音频、记忆平台）与联网搜索、网页读取发往平台的请求同样带上；回合外的自主回合沿用准入时的值；值不是合法请求头值时丢弃该成员。经 `CODEBUDDY_CUSTOM_HEADERS` 传入的请求头不变 (#143363)。
- **文件变更支持按轮净差异通知**：文件变更支持按轮净差异通知；大文本的小修改保留标准补丁，复杂计算退化为内容准确的粗粒度补丁 (#143363)。
- **服务模式支持预设本轮 conversationRequestId**：Server 支持调用方预设本轮 conversationRequestId，使 Harness 对话的前端调试信息、模型请求、事件和历史保持同一 ID；非法或重复 ID 在执行前拒绝，后台自主续跑仍使用新 ID (#143363)。
- **服务端会话的 stdio MCP 可在会话执行环境里启动**：`start()` 的会话 `mcpServers` 中，标记 `connection_origin: 'environment'` 的 stdio 服务在查询运行时于会话的执行环境里启动，启用沙箱时在会话沙箱内，与 CLI 进程启动会话 MCP 的方式一致。会话的第一次查询在首个模型请求前等它连接，等待上限是 `CODEBUDDY_FIRST_RUN_MCP_PREWAIT_TIMEOUT_MS`，与进程级 MCP 的首轮等待相同，期间连上的服务工具出现在首个请求里；之后的查询沿用同一连接，会话关闭或沙箱重启时随之关闭或重连。超过等待上限仍未连上时查询照常进行，它的工具在连上之后可用。未标记的服务与 CLI 进程不受影响 (#143363)。
- **服务模式的错误字段**：服务模式落盘的请求终态带上模型服务给的提示文案、排队信息与自定义模型标记，新增的 `codeBuddyErrorFromFailure` 供宿主把实时失败投影成同一形状；自定义模型鉴权失败、配置缺失与空回复使用新的错误码 (#143363)。
- **服务模式的宿主内部请求头**：查询选项新增 `internalModelRequestHeaders`，宿主为本会话的内置模型请求提供请求头（如图灵盾设备令牌）。每次 query 整体置换，空对象清空，省略保持上次；与插件运行时的内部头同一门控与清理集：自定义模型端点不下发，`CODEBUDDY_SKIP_INTERNAL_HEADERS` 时清理，只在驻留会话上，不进历史与存储 (#143363)。
- **服务模式会话发现源的策略席位**：查询选项新增 `remoteAgentsTrusted` 与 `remoteAgentsEnabled`，是进程 env `CODEBUDDY_A2A_TRUSTED_RESULTS` / `CODEBUDDY_A2A_OUTBOUND_ENABLED` 的会话版，只对会话自己以 `remoteAgentsUrl` 表态的发现源生效：前者声明该源中 Agent 的返回可信、A2A 工具结果免于防注入检测，后者为本会话打开出站 A2A 特性开关（与 env 覆盖一样只能打开）。两项是一个置换单元，省略保持当前，钝化清除 (#143363)。
- **宿主可让沙箱起不来的一轮在本机执行**：`start()` 新增 `sandboxUnavailable` 选项。服务端会话要求本地沙箱而沙箱起不来、本平台没有沙箱或读不到沙箱设置时，默认 `'fail'` 让这一轮失败，会话不会在它要求的沙箱之外运行；`'local'` 与 CLI 进程一样按关闭沙箱执行这一轮，只适合会话都属于本机用户的宿主。后台任务进行中修改沙箱规则仍然报错。CLI 进程不受影响 (#143363)。
- **库模式由宿主提供服务代理地址**：`start()` 新增 `serviceProxy` 选项。CLI 进程在回环端点上提供服务代理，hook 命令、Bash 命令与 stdio MCP 经 `CODEBUDDY_SERVICE_PROXY_URL` 访问；库模式没有回环端点，这些进程此前拿不到该变量。宿主自己提供服务代理时，以 `serviceProxy.resolve()` 给出地址，每次启动这类进程时询问，返回 `undefined` 即不提供。ConfigChange hook 仍用按操作开启的代理地址；CLI 进程不设该选项，行为不变 (#143363)。
- **服务模式的会话插件根**：查询选项新增 `pluginRoots`，列出只在本会话加载的插件目录。会话按目录直接读插件清单并走标准加载器，`id` 决定插件身份（命令命名空间），同 `id` 的已安装或市场副本让位；缺清单或加载失败时告警并跳过。会话激活时绑定，`reload(sessionId, { pluginRoots })` 整体替换，`readSessionCatalog` 同样接受 (#143363)。
- **库模式按会话给 Agent 启动的进程设置环境变量**：`start()` 新增 `shellEnvironmentPolicy` 选项，名字取自 Codex 的 `shell_environment_policy`。会话每次运行开始时以 `set({ sessionId, signal })` 询问宿主一次，可以直接返回变量表，也可以返回 Promise；到该会话下一次运行开始或会话关闭之前，Agent 为它启动 Bash、PowerShell 命令与沙箱里的 Grep、hook 命令、只属于该会话的 stdio MCP 服务和独立进程的团队成员时都用这次结果里给出的变量，子 Agent 与进程内的团队成员也一样，已经启动的进程保留启动时的环境。这次询问失败、返回 `undefined` 或 60 秒内没有结果时不保留，各处在启动进程前各自询问。返回的变量在本运行时环境与 shell 快照之上，在 MCP 声明的环境和 Agent 为每个进程设置的变量之下；`PATH`、凭据等 Agent 自己设置的变量被丢弃，并按变量名告警。shell 命令的目录改由新变量 `CODEBUDDY_SHELL_PREPEND_PATH` 给出，Agent 在加载 shell 快照之后把它放到 `PATH` 最前，风险审查和 Linux 沙箱规则也读它；此前读取的 `WORKBUDDY_EXTRA_PATHS` 不再读取。库模式下不论是否提供该选项，每次会话驻留都生成自己的 shell 快照，关闭会话时删除，不再预热进程级快照；不属于任何会话的调用在需要时生成进程这一份。CLI 进程不使用该选项，宿主改为把目录写进 `CODEBUDDY_SHELL_PREPEND_PATH` (#143363)。
- **start({ env }) 支持移除环境变量**：Server 的 `start({ env })` 支持把值设为 `undefined`，从本运行时的环境中移除对应变量；在 Harness 共享运行时内只对 Agent 隐藏宿主进程的值，不修改宿主进程。凭据类键也可以这样移除，设置取值仍然拒绝 (#143363)。
- **按会话设置 Agent Teams**：服务模式新增查询选项 `agentTeams`。在带 `product` 的查询中，TeamCreate、TeamDelete、SendMessage、Agent 工具组队，以及 Agent 与 TaskList 描述中的 Teams 部分，都按本会话的设置决定，并发会话互不影响。`null` 恢复为进程设置 `CODEBUDDY_CODE_EXPERIMENTAL_AGENT_TEAMS` (#143363)。
- **按会话关闭会话标题生成**：服务模式新增查询选项 `aiTitle`。为 `false` 时，本会话不再在提示后发起生成标题的模型请求，其他会话不受影响；`null` 恢复为进程设置 `CODEBUDDY_CODE_DISABLE_TERMINAL_TITLE` (#143363)。
- **按查询的需确认规则**：服务模式新增查询选项 `askTools`，文法同 `allowedTools`，提供即整体替换，省略时沿用上次。判定时与各设置档的 `permissions.ask` 合并，在 bypass 之前判定；可信放行规则（含 `allowedTools`）先于它放行。子 Agent 沿用主会话的规则 (#143363)。

### 🐛 问题修复

- **ACP v2 标准错误终态**：ACP v2 使用标准错误终态并保留业务错误详情；旧 CLI 错误展示保持不变 (#143363)。
- **会话连接器**：首次等待连接器启动时可以及时取消对话；关闭会话会等待尚在初始化的连接器进程完成清理，避免后台进程残留 (#143363)。
- **安全审查拒绝只作用于当前调用**：修复安全审查已自动拒绝的工具调用在对话继续时被重复审查、甚至因后续审查结论变化而执行的问题。拒绝仅作用于当前调用，后续独立调用仍正常审查 (#143363)。
- **Harness 取消归因与历史恢复**：修复 Harness 取消归因与历史恢复，内部审批超时和上下文限制使用标准终态，保持 WorkBuddy 停止提示与循环退费语义 (#143363)。
- **截断与审批结果的终态归因**：修复模型截断、请求次数上限和敏感输入审批结果的终态归因，恢复后保留同一结果与原有展示，被拒绝轮次不进入后续模型上下文 (#143363)。
- 修复同步和异步 Hook 超时后，仅终止外层 shell、实际命令仍在后台运行的问题。复用已有进程树回收，保留超时结果语义 (#143363)。
- **常驻服务工具调用的安全审查与风险提示**：修复常驻服务调用工具时未执行安全审查自动阻断、人工审批缺少风险提示的问题，保持既有安全审查语义。
- **ViewImage 大图不再中断 ACP 会话**：修复 ViewImage 图片结果在 ACP 中重复传输导致消息过大、会话连接中断的问题，保留完整图片及历史内容。
- **延迟调用的 MCP 工具视图与历史**：修复 Harness 延迟调用 MCP 工具时 App 视图和历史数据缺失，保持旧 CLI 广播与工具审批行为。
- **连接器安全**：修复进程内会话中远程连接器和托管浏览器调用未遵循网络访问规则的问题，保留现有审批与取消行为 (#143363)。
- **微信支付**：支付已完成或取消时，回收尚未响应的宿主确认请求，避免过期卡片阻塞后续审批 (#143363)。
- 修复模型等待响应头超时被误判为取消的问题，复用首 token 超时恢复预算；真实用户取消仍立即停止且不触发重试 (#160294)。
- **插件的 `tool.call` 钩子**：每次工具调用只派发一次。命令行模式下 MCP 工具（含工具搜索加载后调用的延迟工具、代码模式沙箱里调用的工具）也会派发；经延迟调用通道调用的工具按目标工具的名字派发，子代理的调用带上子代理 id；钩子返回的附加上下文与错误标记会进入模型读到的工具结果。插件经 `$.mcp.call` 直接调用 MCP 工具时不再派发 `tool.call` (#143363)。
- **插件钩子与工具确认的顺序**：命令行模式下启用了插件运行时，工具确认改在插件的 `tool.call` 钩子、PreToolUse 钩子与 `tool.check` 之后进行，确认的是钩子最终交给工具的参数；钩子改写参数不再被拒绝。子代理的工具调用被拒绝时，主代理能读到拒绝原因 (#143363)。
- **服务模式 MCP 直调不再双发钩子**：修复服务模式会话中模型直接调用 MCP 工具时，插件的 tool.call 钩子执行两次的问题（例如同一次调用弹出两张确认卡） (#143363)。
- **库模式的沙箱会话使用会话的工作目录**：库模式下 Agent 启动沙箱时，OpenSession 带发起启动的会话的工作目录，sandbox 中心按它展开 `{SESSION_WORKSPACE}` 规则；此前带的是宿主进程的工作目录。启动参数 `BootstrapOptions` 新增可选的 `workingDir`。CLI 进程仍用进程的工作目录，行为不变 (#143363)。
- **服务模式会话在 ACP 路径提供「本会话允许」的地方都提供**：服务模式的审批请求此前只对权限服务的普通默认询问（Bash 除外）与本会话范围的产品技能规则提供 `allow_always`，hook 返回 ask 的调用、必须审批的工具与 Bash 每次调用都询问。现在除工具风险审查外都提供（"Allow for this session"）。选择后的记忆与 ACP 路径相同：高风险命令与 ExitPlanMode 只放行这一次；宿主设置 `CODEBUDDY_ALWAYS_APPROVAL_OVERRIDES_HOOK_ASK` 时，记住的批准优先于 hook 的 ask；Bash 记住整个工具。CLI 不受影响 (#143363)。
- **关闭会话与后台任务**：服务模式关闭会话时，与 CLI 进程退出一样结束整棵会话树：先结束该会话及各级子代理仍在运行的后台任务，再取消仍在运行的子代理（包括不随会话中止的分离子代理）并等它们清理完毕，然后钝化会话。此前关闭后任务进程继续运行，退出时客户端收不到更新，模型也收不到完成通知。关闭的会话不再接收这些任务的完成通知；团队成员仍按原有方式强制结束 (#143363)。
- **服务模式会话按查询的 Product 过滤内置技能**：服务模式的技能有两个来源，都没有按查询带来的 Product 过滤：会话激活时的技能扫描同样读取内置技能目录；查询的 Product 叠加到进程的 Product 上之后，也没有再执行产品配置的过滤。Product 里 `disabledBuiltinSkills` 列出的内置技能因此仍出现在 Skill 工具的列表里，也能加载；`DisableMultimodalGeneration`、`DisableTerminalVariable` 也只按进程的 Product 生效。现在两处都按查询的 Product 过滤，规则与 CLI 相同。CLI 不受影响 (#143363)。
- **服务端会话在执行环境里启动的 MCP 按会话的连接上限连接**：查询选项新增 `mcpConnectTimeoutMs`（正整数毫秒）。标记 `connection_origin: 'environment'` 的 stdio 服务每次连接都以这个值为上限，到期没连上时这次连接失败、服务进程结束，查询照常进行。它取代内联连接的上限（服务自己的 `timeout`、`MCP_TIMEOUT`、30 秒）。此前进程内会话只能用内联连接的 30 秒，宿主为会话 MCP 设的连接上限到不了这些服务。它不属于会话 MCP 的配置：只改它的查询不重连 MCP，下一次连接用最后给出的值；省略保持当前值，`null` 回到内联连接的上限，会话钝化时清除。CLI 进程与以子进程运行的 CLI 不受影响 (#143363)。
- **服务端会话在执行环境里启动的 MCP 按会话的首轮等待上限等待**：查询选项新增 `mcpFirstPromptWaitMs`（非负整数毫秒，`0` 不等）。会话的第一次查询在首个模型请求前等标记 `connection_origin: 'environment'` 的 stdio 服务连接，最多等这个值；宿主没有给出时才取进程环境的 `CODEBUDDY_FIRST_RUN_MCP_PREWAIT_TIMEOUT_MS`（默认 2 秒）。此前进程内会话只能取宿主进程的环境变量，宿主为某个会话放宽的等待到不了这些服务。它不属于会话 MCP 的配置：只改它的查询不重连 MCP，下一次等待用最后给出的值；省略保持当前值，`null` 回到进程环境变量，会话钝化时清除。CLI 进程与以子进程运行的 CLI 照旧读环境变量 (#143363)。
- **服务模式的错误原文**：服务模式与 ACP 规范接口的公共错误带上脱敏后的错误原文 `additionalDetails`（去掉调用栈与凭据形状的值，上限 2000 字符），宿主据此还原原来的 `data.details` (#143363)。
- **中止归因**：run 的取消器 reason 在 `codebuddy.ai/error` 键下带公共错误时，这一轮的持久终态记为该错误而不是 `cancelled` (#143363)。
- **服务模式 hook 拦截提交后的结束状态**：服务模式下 UserPromptSubmit hook 或插件 Mod 的 `prompt.submit` 返回 `drop` 拦截提交时，本轮按正常结束（`completed`），不再按失败结束并推送错误事件；拦截消息照旧写入会话，与 CLI 的 ACP 会话一致 (#143363)。
- **空闲会话与后台任务**：服务模式的空闲清扫不再钝化有运行中后台任务的会话。此前关闭沙箱或本机放行时，后台 Bash 运行期间会话可能被钝化，终端卡片停在运行中，模型也收不到完成通知。一直运行的后台任务会让会话常驻 (#143363)。
- **进程内插件 Mod 的子进程与出网**：Harness 进程内的 functional hooks 与插件 Mod 和 CLI 一样可以使用 `$.process.run`、`$.process.spawn`、`$.http.fetch`；`CBC_MODS_ALLOW_PROCESS=0`、`CBC_MODS_ALLOW_HTTP=0` 时拒绝，每次调用时读取。此前进程内一律拒绝，依赖子进程的插件 Mod（例如订阅门控）不生效 (#143363)。
- **服务模式会话的 Agent 工具列出会话级子代理**：服务模式下，会话启用的插件、会话工作目录里的自定义 Agent 与查询选项 `agents` 注入的 Agent 原先可以派发，但不出现在 Agent 工具的子代理目录里，模型看不到。现在它们并入该会话的目录，同名时以会话级为准，与派发一致；插件 `settings.agent` 指定的根 Agent 不列出，与 CLI 一致。其他会话与 CLI 不受影响 (#143363)。
- **服务模式会话的审批请求带上审批卡片分类**：服务模式下，PreToolUse hook 声明的审批分类（如高积分闸门）与产品的技能审批规则没有进入审批请求，宿主只能显示通用审批卡。现在审批请求的 `toolCall._meta` 带上 `codebuddy.ai/approvalPolicyId`、`codebuddy.ai/approvalCategory`、`codebuddy.ai/approvalKind`（技能审批另带 `codebuddy.ai/approvalScope`），拼法与 ACP 路径相同。CLI 不受影响 (#143363)。
- **服务模式会话插件的 MCP 白名单与延迟工具清单对齐 CLI 子进程**：会话插件声明的 builtin 裸名清单（不含 `mcp__*`）不再精确约束透明代理服务的裸名工具，与 CLI 子进程丢弃该清单的口径一致；显式空清单仍隐藏裸名工具，SDK Host builtin 仍受插件声明约束，含 `mcp__*` 的清单仍精确匹配。本轮工具目录的 ToolSearch 清单改列 MCP 索引原名（含连字符），不再是 SDK 归一化后的下划线写法；DeferExecuteTool 先按清单名、再按 SDK 声明名查找 (#143363)。
- **服务模式的资料库上传与分享按运行身份鉴权**：LibraryUpload 的启用判定与请求鉴权、Artifact 与 ArtifactControl 的请求鉴权先读本轮绑定的运行身份，缺席时用启动登录；运行身份的归因头与宿主头替换启动登录派生的同名头。进程内会话没有启动登录时，LibraryUpload 不再缺席。CLI 进程不绑定运行身份，行为不变 (#143363)。
- **服务模式会话按产品技能审批规则提供「本会话允许」**：产品技能审批规则的 `authorization.scope` 为 `session` 时，服务模式的审批请求没有 `allow_always` 选项，同一技能每次调用都询问；宿主按规则只显示对应 `allow_always` 的「允许」时无法批准。现在这类调用提供 `allow_always`（"Allow for this session"），选择后本会话内同一技能不再询问，与 ACP 路径相同；`scope` 为 `once` 的规则不变。CLI 不受影响 (#143363)。
- **服务模式下，工具调用的开始信号改在钩子与权限确认之后发出**：宿主注册了工具钩子时，`session_info_update` 里带工具调用 id 的 `tool_executing` 阶段原本在派发时就发出，早于钩子和权限确认：确认卡还在等待时，宿主就把这次调用显示为执行中，被拒绝的调用也显示过执行中。现在派发时只发不带调用 id 的 `tool_executing`，钩子放行、权限确认通过、工具开始运行时才发出带这次调用 id 的开始信号；被钩子或用户拒绝的调用不发。CLI 不受影响 (#143363)。
- **会话设置来源隔离**：服务模式支持按会话收窄 `settingSources`，受限工作区可只读取用户设置，阻止项目与本地设置中的 hook 和权限规则生效；并发会话互不影响，复用现有 reload 更新驻留会话 (#143363)。
- **子代理父会话工具与 A2A 目录**：修复宿主提供会话 MCP 时，子代理无法使用父会话工具的问题，保留子代理白名单及连接归属；修复会话独立 Product/插件路径首轮缺少 A2A Agent 目录的问题 (#143363)。
- **整轮净差异只保留标准文件变更信息**：整轮净差异只保留标准文件变更信息，避免将最后一次编辑的备份误作为整轮改前内容；工具卡片和历史回放继续保留各次编辑的备份 (#143363)。
- **凭据保护**：WorkBuddy 使用常驻服务时，内置工具申请的临时凭据继续自动保护；官方多模态工具可在同一会话复用，无需重复确认。自定义工具和其他会话仍需按原有规则确认，关闭保护及服务异常时的降级行为保持不变 (#143363)。
- **安全确认**：WorkBuddy 使用常驻服务时，敏感信息保护、疑似循环的工具调用、工具风险复核后的执行确认、运行时安全策略，以及 REPL 内的提问、计划确认和安全确认，改为通过宿主弹出确认卡片。此前这些确认没有界面可以显示，会静默放行或一直等到超时。卡片的选项和超时时间与原来一致；超时或本轮取消时，卡片自动撤回 (#143363)。
- **回复语言**：修复 WorkBuddy 使用常驻服务时界面语言未同步到回复和标题生成的问题。不同会话独立应用语言，切换后在后续对话生效。
- **企业安全策略**：WorkBuddy 使用常驻服务时，沙箱开关、沙箱规则、删除保护和敏感信息保护按本轮对话的产品配置执行，不再读取进程级配置；本轮配置未下发策略时按未托管处理 (#143363)。
- **会话配置**：修复 WorkBuddy 使用常驻服务时 Max Mode 设置失败的问题。开启后关闭普通预压缩，关闭后恢复默认策略；不同会话相互隔离，模型切换时仍执行必要的压缩。
- **网络环境**：WorkBuddy 使用常驻服务时，IOA 默认请求头（模型请求、WebFetch、WebSearch）、自定义模型的内部元数据透传，以及 endpoint 与环境不符的告警，按本轮对话产品配置的网络环境判断，不再读取进程级配置；本轮配置未声明网络环境时按未设置处理 (#143363)。
- **沙箱规则重建**：WorkBuddy 使用常驻服务时，会话释放与 center 重连后重建的沙箱规则按该会话最近一次查询的产品配置读取企业托管策略，不再按未托管下发用户本地规则 (#143363)。
- **安全审查**：修复 WorkBuddy 使用常驻服务时安全审查设置未生效的问题。保留本轮策略快照，在后续轮次应用新设置；非法配置清除旧策略，不同会话相互隔离。
- 修复服务模式清空上下文的维护入口：保留对话历史，以持久化分界隔离后续上下文，不额外发起模型请求 (#143363)。
- 压缩通知统一使用标准 `compaction_update`，保留实时与历史中的压缩来源，宿主可区分发送前静默压缩和紧急压缩 (#143363)。
- 修复压缩前扩展等待期间无法停止的问题：取消后保留原有上下文，后续对话与压缩可继续使用 (#143363)。
- **遥测**：WorkBuddy 使用常驻服务时，未自带会话的遥测事件使用所在 Agent 会话的 id，不再由所有会话共用进程级的会话标识 (#143363)。
- **提示的上游元数据**：WorkBuddy 使用常驻服务时，服务端查询按 ACP 的方式采纳提示 `_meta['codebuddy.ai']` 中的专家、运行环境、用户、遥测与自动化标记，并记录提示请求 ID、发送时间与开始时间；场景不写进会话，仍只随本轮发给内置模型请求，非专家场景清掉上一轮的专家；Galileo 关联、首字时间、`X-Agent-Runtime` 与 `X-Agent-Purpose` 与 CLI 子进程一致。提示请求 ID 与发送时间也可由 baggage 成员 `workbuddy.prompt_request_id`、`workbuddy.client_send_time` 给出 (#143363)。

## [2.175.0] - 2026-10-24

### 🎉 新功能

- **Web UI 快速访问面板**：⌘P 与 ⇧⌘P 合并为同一个面板，输入 `>` 运行命令、`/` 斜杠命令、`#` 转到对话、`?` 查看帮助；顶部新增可关闭的搜索框（桌面版融入标题栏，全屏时也可用），左侧新增后退 / 前进，可在智能体、对话、页面和文件之间来回切换。⌘P 优先列出最近打开的文件并同时搜索整个工作区。「打开目录」弹窗支持输入即导航与键盘操作，加载失败时说明原因并可重试或返回上级。桌面版会记住窗口大小与位置，「完成后通知」恢复正常 (#160120)。
- **项目指令文件向上递归查找可关闭**：在项目子目录启动会话时，默认会沿目录向上逐级查找并加载 `CODEBUDDY.md` / `AGENTS.md`。现在可在 settings 中设置 `memory.parentDiscovery: false`，或设置环境变量 `CODEBUDDY_DISABLE_PARENT_MEMORY=1`（优先级更高），关闭后只加载启动目录本身的指令文件与规则目录；Web UI 设置页「记忆」分组同步提供该开关 (#159973)。

### 🔧 改进

- **桌面版挂机与 Web UI 空闲资源占用下降**：宠物动画按状态分档帧率并在画面无变化时跳过重绘，选中任务的兜底轮询降频，频道事件流与兜底轮询在服务异常时指数退避、恢复后自动回到原节奏，事件总线停止空转采集并清理已结束会话的流缓存 (#159981)。
- **任务执行期间更省电**：流式回复的逐字释放改为约 30fps 节拍（速度不变），刷新兜底草稿不再逐个增量把整条回复序列化写入存储；窗口失焦或页面隐藏时暂停所有循环动画，回到窗口后自动恢复；模型请求预处理不再逐条深拷贝工具结果。
- **Web UI 对话过程展示更清爽**：思考不再在每个工具前单独占一行，悬停工具行即可查看对应思考；过程标题改为统计实际操作次数，不再出现完成后时长变小的情况；运行中的当前思考只在底部状态显示一次；工具行突出任务描述；长任务运行时只展示最近几步，更早的步骤可一键展开 (#160026)。
- **Web UI 文件变更汇总改为胶囊**：在输入框上方显示「N 个文件已更改 +X -Y」，点击可展开文件列表、查看 diff 或撤销本轮改动，不再在对话流中逐轮插入卡片；修复重新加载历史后每轮变更文件把之前轮次也计入的问题。点击消息中的 `~/` 路径或目录时能正确定位。
- **桌面端标题栏与快速访问细节优化**：窗口关闭等按钮与标题栏垂直居中；后退 / 前进跳过不会改变画面的记录，不再出现点了没反应；搜索框右侧新增「回到我的分身」入口；顶部搜索框改为在设置「外观」中开关；快速访问面板文字统一为 13px；侧栏 Logo 下方不再显示版本号，改为悬停提示。
- **远程主机安装改为单一稳定入口**：POSIX 目标装到 `releases/<version>` 并用 `current` 软链指向当前版本，升级不再改写正在运行的 release，磁盘最多保留两份；准备阶段探测 / 整体超时放宽（30s / 75s），慢机器装完不再报 504；「停止后台服务并重试」未选目录时也能发起，旧版无身份指纹的 daemon 可二次确认后强制结束；准备失败或已被消费时弹窗内可直接重新准备。

### 🐛 问题修复

- **Remote Control（/gateway）安全与稳定性**：修复登录限流可被全速绕过；手机端 Web 终端不再把网关密码放进 URL，网关密码不再永久留在浏览器本地存储；补齐 Host 头全局校验，防止恶意网页通过 DNS Rebinding 操控本地 Gateway；Tunnel 进程意外退出后自动恢复；消息发送失败不再无限转圈；长连接超时定时器不再泄漏；job 页后台轮询暂停以省电 (#159983)。
- **后台服务重启后 Web UI 分身自动恢复会话**：重启后分身会还原上次打开的会话，主机管理里的中继 Web 绑定自动跟随当前服务，不再需要手动重新绑定 (#160098)。
- **频道工具在用户自己的会话里恢复正常**：主 Agent 发言、私信、改任务板不再被误判成「没有 Agent Home 身份」；复用同一批成员的频道时会把频道 lead 补上，不再留下无法派单的空 lead 频道；建频道的开场白发送失败时会在结果里明确说明，而不是静默丢弃后仍显示已叫醒成员 (#160169)。
- **切到远程主机后新建 / 恢复智能体页面不再卡死**：远程侧补齐 job frame 的会话快照路由，并给「补齐视口」的自动翻页加上失败熔断，避免远端路由不可用时把重试泵成每秒上千次的循环。
- **经中继 Web 绑定子路径打开 Web UI 时 WebSocket 可正常连接**：注入的 base-path 引导脚本把 `ws:` / `wss:` 与页面的 `http:` / `https:` 视为同源，绝对 WebSocket 地址也会补上子路径前缀；相对地址仍按页面协议转成 `ws` / `wss`。
- **Windows 下智能体重启偶发失败**：agent-home 目录与任务状态写盘在目标文件被短暂占用时，对原子替换做退避重试，不再直接返回 500。

## [2.174.0] - 2026-10-24

### 🎉 新功能

- **Web UI 支持为智能体设置系统提示词**：在侧栏右键智能体选择「系统提示词」，可选择追加到内置提示词之后或替换内置提示词，保存后下一轮对话即生效，无需重启；可一键恢复默认。通过 `/fork-bg` 复制出的后台会话会沿用原会话的 `--system-prompt`、`--system-prompt-file` 与 `--append-system-prompt`。
- **企微机器人支持接收频道内容**：在 CBC 的远程控制面板里为单个企微机器人开启「接收频道内容」后，机器人所在频道的每条新帖和新回复都会作为输入交给 Agent，Agent 可在对应帖子下以评论回复。默认关闭；仅处理新建内容，机器人自己发出的内容不会再次触发；频道里的内容不会被当作斜杠命令执行，也不能回答待确认的权限提示。企业未开通频道灰度时会给出明确提示。
- **Ctrl+L 清屏并保留当前会话**：清除屏幕和回滚区，之后只显示新内容，上下文不变（`/clear` 仍是新开会话）。Web UI 同步支持 Ctrl+L 清屏。原重绘动作保留为 `app:redraw`，可在 keybindings.json 中自行绑定。

### 🔧 改进

- **模型请求上报 Harness 元数据**：使用内置模型时，每次模型请求会在 `extra_vars.harnessMetadata` 中携带本次调用在当前请求内的序号、上一次调用，以及子 Agent 的层级和创建它的调用，便于服务端还原调用链路。使用自定义（第三方）模型时不携带，行为不变。
- **技能清单按来源分组**：`<available_skills>` 的 `skills under folder:` 由「SKILL.md 的父目录」改为「技能来源」。应用包内置副本与 `workbuddy-builtin` 市场插件统一收敛为一行 `workbuddy-builtin`；插件缓存与本地市场目录截到插件名层，不再暴露版本、`skills`、`experts` 层；用户/项目/连接器/会话注入等平铺来源按扫描根一行展示，多个注入目录各成一行。字符预算口径、条目格式与截断策略不变。
- **新增 `CODEBUDDY_BASH_FORCE_PARALLEL` 环境变量**：显式传入 `1` 或 `true` 后，同一轮里的 Bash 与 PowerShell 调用一律并行执行，不再按命令内容推算是否只读；未传入时行为不变。
- **Web UI 智能体切换与恢复更快更稳**：恢复已退出的智能体时不再长时间等待网络同步和重复加载历史；恢复不会再把智能体顶到列表顶部，状态只显示「恢复中」且不多弹完成提示；切换时模组入口不再闪烁，切回仍在运行的智能体不再提示恢复中，历史记录在接上前后保持一致。切换智能体时对话、文件改动卡片与输入框配置首帧即为最终状态，总是停在对话底部；悬停时预取历史，打开更快 (#159886)。
- **中继 Web 绑定换端口后可一键重新绑定**：重启后端口变化时界面标记「端口已变更」并提供一键「重新绑定」，子路径、访问密钥等配置保持不变；重启恢复时 Web 绑定不再被其它共享恢复失败连带跳过。
- **侧栏右键菜单加宽**，长菜单项不再折行。
- **独立可执行版本的运行时升级**：Bun 运行时升级至 1.4.4，构建工具链中的 uv 升级至 0.13.5 (#158945)。

### 🐛 问题修复

- **Code Mode 下 MCP 工具调用名统一**：使用逻辑服务名与原始工具名，搜索、描述和 REPL 调用保持一致 (#148355)。
- **ACP 工具调用参数不再被显示为工具输出**：正确保留参数的完整 JSON 值及流式、完成和历史回放中的敏感保护标记；无法确定敏感范围时保守隐藏整个参数。配置更新等待后台任务和排队续跑结束 (#158644 #158454)。
- **后台频道任务完成回执不再投递到错误会话。**
- **`chat_tool_action` 事件补齐 `toolArgs`**：仅对已批准的调用与字段上报参数，本地路径与 ID 脱敏；未知字段或最终 JSON 达 1 KiB 以上时省略 `toolArgs` 但保留工具事件。
- **未绑定的 Ctrl+字母不再插入字母**：修复终端按 Ctrl+L 时输入框多出一个 "l" 的问题。
- **Linux 启用 sandbox-cli 的环境变量改为 `ENABLE_LINUX_SANDBOX_CLI`**：只有值为 `1` 时才进入沙箱。新名字未设置时，本机留下的 `WORKBUDDY_ENABLE_LINUX_SANDBOX_CLI` 仍然生效；新名字有值时不再看旧名字。WorkBuddy 在 Linux 上注入新名字 `1`。
- **Web UI 任务列表偶发 500**：job 目录索引不再把 ctime 计入 stamp，扫描持续不稳定时降级返回本次目录快照而不是抛错，左侧智能体/任务列表不再整块加载失败 (#157938)。
- **同一设备多进程新建中继 Web 绑定不再被拒**：修复「代理已存在」导致的失败；中继网关相关错误提示改为跟随界面语言（中文 / 英文）显示，进入页面时自动加载中继网关失败不再主动弹出错误 (#159160)。
- **定时任务可靠性**：长时间无进展会自动判定失败，不再永久停在「执行中」；后台任务与团队成员进程不再承载项目定时任务；容器或远程访问时「查看实时过程」不再跳到无法连接的地址；模型工具名中混入的模板标签会被自动清洗，避免整轮失败；修复检查忽略文件时偶发的进程崩溃。移动端工作台菜单与桌面对齐，窄屏输入工具条保持单行。
- **大目录下服务模式更稳定**：在 Linux 上以服务模式运行且工作目录很大时，文件监听达到上限后不再继续遍历整棵目录树，避免长时间卡住。
- **内存诊断报告按时间分别保存**，不再互相覆盖。
- **日志不再记录仓库地址中的凭据**：仓库远程地址里内嵌的访问令牌在写日志前会被去除。
- **常驻服务会话里运行嵌套 `codebuddy -p` 不再卡住**：一次性进程不再被当成常驻服务，执行完正常退出，不会打断当前任务、取消子代理，也不会抢走已连接的微信等频道。
- **SSH askpass 不再因超长 argv 失败**：校验 SSH 进程归属时只读取进程名和启动时间，不再读取完整命令行，避免远程引导脚本撑爆有界观测缓冲区导致 askpass 全部 fail-closed。
- **远程工作区安装策略**：直接安装与 WebUI 完全相同的版本，不再走「兼容版本」分支；安装落在控制器专属目录，不覆盖目标端已有安装。远端 `remote-host serve` 启动时注入 `DISABLE_AUTOUPDATER=1`。npm 安装失败时把目标端有界诊断带入连接日志，界面改为「检测 → 一键安装同版本 → 自动重新检测」，底层状态收进「技术详情」。
- **远程主机上的 Web UI 终端不再卡在「重连中」**：owner 会话未就绪或探活期间被换绑时按退避继续重试，ACP 换绑后重新订阅输出流；终端输出这类长期流式响应不再套用请求总时长超时，不再每隔两分钟被代理切断重连。
- **远端 Node.js 运行时按实际环境解析**：探测与安装共用同一个运行时解析器，按「已证实路径 → CBC 同前缀 runtime → 当前 shell → 版本管理器自身命令 → 用户 shell 的 rc → 用户前缀」依次取证，不再误判「版本过低」；解析失败且用户已批准时自动把 Node.js LTS 装到用户前缀后再继续。
- **远程 serve 复用探测到的 Node 运行时**：修复「准备阶段 CBC compatible、连接阶段却因系统 Node 过低而 `serveFailed`」；修正 POSIX 与 Windows 兜底 PATH 优先级，显式运行时优先于系统目录。
- **Web 端长会话向上滚动可加载更早对话**：历史改为按游标分页，上滑到顶继续取回更早一页；只有尾部追加新的用户消息才吸底；翻页只补新增分组、滚动度量按帧合并，修复长会话上滑卡顿与整段历史全量挂载导致的卡死。
- **子代理不再重复携带整份主提示**：在 Code Mode 等站立模式下派发通用子代理或基于主模板的自定义子代理时，每次子代理请求约减少 6k 输入 token，也避免两份指令互相矛盾。
- **退出时用量统计修正**：部分模型的 input 恒为 0、未命中缓存的输入被误计为 cache write；`/context` 与 `/stats` 的缓存写入统计同步修正。

## [2.173.0] - 2026-10-22

### 🎉 新功能

- **ViewImage 工具**：新增统一的图片读取入口。多模态模型调用时直接返回图片；非多模态模型调用时由识图模型读取图片并返回与提问相关的文字描述，主模型不再接收图片，避免带图请求触发服务端模型改派与会话缓存失效。Read 工具遇到图片文件时改为引导使用 ViewImage。
- **用户发图的图片转文字**：当前模型不支持原生图片输入时，用户消息里的图片会换成一句带本地路径的提示，引导模型改用 ViewImage 读取。图片本身仍保留在会话历史里，切换到多模态模型后照常直接发送，不会因为换模型丢图；历史里超出保留轮次的图片占位符也追加了 ViewImage 使用指引。
- **委托改为可叠加的协调工作模式**：委托不再占用权限模式，而是可以叠加在常规、代码模式和精简模式之上，与多任务模式互斥；新增 `/delegate` 命令开关委托，Web 界面输入框新增委托胶囊并支持一键开关，ACP 客户端可通过会话配置项开启委托。委托派出的子智能体沿用主会话的权限设置。对话框的权限选择器精简为默认、自动、完全访问三项，新建智能体的启动权限精简为四项。**不兼容变更**：ACP 客户端不能再通过切换权限模式为 `delegate` 开启委托，此类请求会直接报错，请改用委托配置项。同时修复委托叠加代码模式时模型拿不到可用工具、停止后重新派出的后台子智能体被误终止、精简模式开启委托时无法派发子智能体、代码执行报错时缺少委托指引等问题。
- **中继隧道新增「Web 访问」**：把本机 Web UI 绑定到中继网关的子路径（留空随机生成，网关上全局唯一），在任何浏览器或手机上打开 `https://<网关>/w/<子路径>/` 并用本人 iOA 账号登录即可直接访问，无需输入 Web UI 密码；可选开启访问密钥（默认关），复制的完整链接自带密钥，打开后密钥自动从地址栏清除并按子路径保存在该浏览器。支持复制链接、二维码、开关 / 更换密钥和解除绑定，CodeBuddy 重启后绑定自动恢复；主机管理页在手机上的布局同步优化 (#157090)。
- **Lite 场景模型 Host API**：宿主可通过 `/api/v1/model-variants/lite` 查询、设置和恢复与 `/model:lite` 相同的用户级 Lite 配置，便于 WorkBuddy 等客户端展示和修改当前生效的 Lite 模型 (#148427)。

### 🔧 改进

- **模型列表按终端可用高度展示**：不再限制十项；优先保留相邻模型的完整 ID，再分配描述高度，滚动时提前露出邻项。模型 ID、费率和英文描述按统一列宽对齐，窄屏费率优先简写为完整倍率，空间不足时整列隐藏描述与费率，长 ID 可换行 (#153564)。
- **文件改动帧新增「改前内容」指引**：Write / Edit / MultiEdit 每一刀写盘前都会备份当时的内容，改动帧据此指明该次改动对应的备份版本；未备份时明确给出原因（检查点已关闭、无需备份、备份缺失），客户端的差异视图与撤销不再需要猜测。
- **Agent Home 打开更快更稳**：ACP 绑定失败时在同一 endpoint 上按 250ms → 500ms → 1s → 2s 有界重试，最多 4 次；鼠标悬停已退出的智能体行 150ms 即预热 worker，全局预热间隔不小于 5 秒；智能体转录缓存跨组件挂载保留，回到同一条会话时首帧直接显示上次转录；新增启动阶段打点，可在 Console 用 `window.__agentHomeStartup()` 读取每段耗时。
- **Web UI 观感与易用性优化**：下拉菜单与悬浮框统一为一致的弹层风格；主机管理页重新设计，并新增中继连接的工作原理示意图；模组页的工作台视图与编辑器保持一致；智能体恢复提示改到输入框上方；新手引导不再自动弹出，可随时手动打开 (#157661)。
- **自动记忆不再保存敏感数据**：自动记忆不再保存密码、密钥、令牌，也不再保存真实的主机、端口、域名、路径、账号与证书标识，只保留「东西在哪、长什么样」；用户在对话里贴配置、启动横幅或日志时，记忆只留键名和位置，明确要求记住时同样不保存原值。
- **Team 空闲时不再反复刷新**：成员全部结束后停留在成员视图或让终端一直挂着，界面不再每隔几秒反复刷新，空闲 CPU 占用和日志量明显下降 (#157112)。
- **插件组合运行补充回归保障**：验证工具拒绝后的会话恢复和异常隔离 (#89304)。

### 🐛 问题修复

- **Read 读取 BMP 图片**：BMP 现与 PNG / JPG / WEBP / GIF 一致，Read 返回绝对路径并提示调用 ViewImage，不再返回「二进制文件」错误 (#153331)。
- **ViewImage 识图超时放宽至 60 秒**：此前 30 秒窗口没有余量、偶发超时后只能回报「图片没能读到」。
- **工具执行中停止后本轮不再卡在「执行中」**：stream-json 模式下工具审批放行、工具正在执行时宿主发送 interrupt，被中断的一轮现在会立即写出唯一一条取消终态 `type=result`（`terminal_reason=aborted_tools`），sandbox-proxy 能正常结束本轮，同一连接可继续对话；A2A 混合模式下对应任务报 CANCELED (#156921)。
- **Hook 拦截工具调用时原因可见、来源明确**：插件或用户配置的 PreToolUse hook 拦截工具时，日志会单行记录拦截原因、来源插件与对应调用；模型收到的结果会标明是被 hook 拦截，减少误判为工具故障 (#157167)。
- **daemon 恢复的 job 在 `/reply` 后正常收尾**：每轮回复结束后 job 都会回到 `done/idle` 并带上本轮结果，不再一直停在 `working/active` (#157372)。
- **新建智能体后的回复稳定上屏**：修复 Web UI 中新建智能体后流式回复反复刷新、正文不随输出追加、输入框状态来回跳动的问题；刷新页面或切回该智能体后，已经流出的正文不再从半截重新开始。
- **Agent Home 多个问题修复**：修复首轮回复展示、恢复智能体输入法组合态、最近活跃排序、忙时重复消息，以及频道图片 / 文件附件上传失败的问题 (#157103)。
- **Web UI 派发或恢复的会话可用自主组队**：这类会话现在可以正常创建频道、查看同事并分配任务 (#157284)。
- **恢复 Agent View 键盘接管与列表滚动**：在会话列表里按回车、`→` 或 Esc 能重新进入选中的后台会话，已结束的会话回车后重新拉起；会话多到一屏放不下时光标越过窗口底部会带着列表一起滚动，进不去时给出原因。
- **Linux 独立 CLI 沙箱恢复显式开启**：只有 `ENABLE_LINUX_SANDBOX_CLI=1` 时才进入 `sandbox-cli`，避免在无法创建 user namespace 的机器上 bash 启动失败。
- **远端主机连接修复**：「SSH 准备」不再把主机密钥已通过校验、仅因探测进程没有凭据而停在认证阶段的情况误判为不可达；显式端口一定生效（显式端口 → ssh 配置解析端口 → 22）；带密码或私钥的连接准备只允许回环来源；目标端存在无法复用的后台服务时展示 PID、端口、工作目录与启动时间，并支持确认后停止重试。
- **远端 CBC 更新不再悄悄多装一份**：安装目标由控制端显式指定为该 SSH 用户的 npm 前缀（POSIX 为 `~/.local`，Windows 为 `%APPDATA%\npm`），并在连接日志里显示实际安装路径；目标端 Node.js 低于 v18.20.8 时直接中止并给出原因；远端 CBC 探测失败时，弹窗给出可在目标机直接执行的排查命令。
- **切换到远端主机后不再误报账号状态未知**：账号状态探测改为在目标连接的路由通道就绪后才发起，不再把正常可用的远端主机误判并阻断创建智能体。

## [2.172.1] - 2026-10-21

### 🎉 新功能

- **自定义子代理可禁止模型自动调用**：在 `.codebuddy/agents/*.md` 中设置 `disable-model-invocation: true` 后，该子代理不再出现在模型的 Agent 候选清单中，避免被自动选用；仍可按名称委派（例如在 skill 中写明代理名），工具、模型与权限配置不变。
- **Web UI 远程连接支持 FRP 中继隧道**：主机管理新增「中继隧道」：内网设备互不相通时，可通过 frp 网关中继打通远程 SSH。账号就绪后默认自动共享本机 SSH（无 sshd 时静默启动仅公钥的 sshd，失败可重试，`CODEBUDDY_FRP_AUTO_SHARE=0` 关闭）；同账号其他设备会出现在「设备」里，同一 iOA 企业内也可邀请其他账号共享并随时撤销，对方使用专用密钥登录；一键添加为远程主机后，SSH 连接先直连、直连不通才走中继。支持添加、修改和删除网关；登录账号属于 iOA 时自带内置网关，并可直接「用 iOA 身份开通」。网关地址、frps 服务端（主机、端口、TLS）与连接时的本地端口均可自定义，网关配置按登录账号隔离。连接两端均由 CodeBuddy 自身进程完成，无需安装或运行任何 frp 程序 (#156233)。
- **工具结果可声明 MCP App 视图**：任何工具（含 mod 在 `tool.call` 中改写的结果）可在结果的 MCP 元数据里声明 `ui://` 资源所在的 MCP server 与要展示的数据，宿主只读取该资源并渲染到当前工具卡，卡片按钮通过 MCP Apps 协议回调 MCP 工具；宿主不会替任何调用方执行工具。可用 `CBC_MCP_APP_VIEWS=0` 关闭 (#156568)。
- **微信支付运行时拦截可关闭**：设置 `CBC_WEIXINPAY_INTERCEPTION=0`（或 false / no / off）即可关闭 `WeixinPay-Required` 的识别与拦截，优先于远程配置 (#156568)。

### 🔧 功能改进

- **Bash / PowerShell 执行结果精简**：移除前台、后台及错误回执中与调用参数重复的命令正文，保留实际输出和执行状态；REPL 兼容新旧结果格式，避免程序输出中的命令标签影响结构化结果读取。部分直接接收工具结果正文的 hook 及失败错误诊断将不再包含重复命令，请通过独立的 `tool_input.command` 获取调用命令。
- **Web UI 流式输出更流畅**：长回复流式输出时，对话区自动吸底不再每帧额外触发页面重排，降低 CPU 占用与卡顿，同时保持始终跟随最新内容 (#156569)。
- **流式 Markdown 渲染降耗**：已完成的代码块不再随新内容逐帧重复语法高亮，正在输出的代码块先以纯文本显示、输出完成后再高亮，长回答输出期间界面更流畅、内存占用更低。
- **后台更省电**：桌面端与 Web 界面切到其他应用后，侧栏智能体头像的装饰动画暂停、宠物动画降低刷新频率，后台空闲时的 CPU 占用明显下降；回到窗口后动画立即恢复，体验不变。
- **发版流水线**：修复 openspec 企业专家团测试夹具（13 个 zip）被 `*.zip filter=lfs` 规则命中、导致全新检出后工作区被判定为 dirty、goreleaser 拒绝构建的问题。
- **Linux 沙箱默认由 `sandbox-cli` 执行**：Linux 上开启沙箱后默认由 `sandbox-cli` 执行命令，与 macOS / Windows 一致；此前独立 CLI 在 Linux 上开启沙箱时，命令实际不经隔离直接执行。宿主可通过 `ENABLE_LINUX_SANDBOX_CLI=0` 关闭。同时移除已无执行路径的 `@anthropic-ai/sandbox-runtime` 旧后端，`/sandbox` 在 Linux 上的依赖检查只要求 `bubblewrap`，不再要求 `socat` (#153722)。
- **Mods `$.mcp.call` 返回值对齐官方 `McpToolResult`**：返回 `{ content, isError, structuredContent }`，content 为服务端原样的内容块；调用未真正到达服务端（未连接、被出站审查拦截等）时 `isError` 为 true (#156568)。
- **新手引导「已看过」改为服务端持久化**：之前只存在浏览器本地缓存，换端口或浏览器会重新弹出引导；现在保存在用户级设置中，并会把旧的本地状态迁移上去 (#156568)。

### 🐛 问题修复

- **会话运行态卡在 `model_done`**：修复上下文压缩失败并取消续跑后，续跑轮正常结束但终态 `agent_end` 未被状态机收下，导致会话永久保持 busy、同会话后续提问被当作排队消息静默丢弃的问题；新消息准入前会把无 lifecycle owner、无在途 run 的残留运行态收敛回 idle (#153047)。
- **Agent Teams 成员关闭状态**：修复成员已交付产出时因关闭请求被误标为「已中断」的问题；关闭会等待本轮正常结束并保持「已完成」，减少不必要的回复轮次与重复完成通知 (#153786)。
- **Grep 带 glob 搜索超时**：修复大仓库中带 glob 搜索时空等 30 秒后超时失败、模型被迫改用全仓 grep 重搜的问题；现在只启动一次 ripgrep，并按 glob 的目录前缀缩小搜索范围，搜索超时时保留已找到的结果并提示缩小范围 (#154213)。
- **Auto 模式下 REPL 内层工具权限分类**：内层工具不再因嵌套深度跳过权限分类，实际工具参数按普通调用执行权限分类：模型允许时直接执行、拒绝时直接拦截；分类失败后需要确认的动作不再静默放行，并修复等待分类期间取消后仍可能执行的问题 (#155940)。
- **专家团收尾时序**：修复专家团最后一位成员结束后，主对话在负责人尚未处理完成员结果时提前结束，导致负责人的后续输出被错误归到上一轮、下一轮提问在会话中错位的问题 (#154806)。
- **Windows 终端重绘**：在 Windows 终端中进入 `/login` 再返回，或调整窗口大小时，旧欢迎界面不再残留在滚动历史里层层堆叠，往上滚动只会看到一份 (#153803)。
- **定时任务锁失效**：电脑休眠唤醒或进程长时间卡顿后，定时任务执行记录的文件锁可能被其他进程判定过期并清理；本次写入现在按普通失败交给已有重试处理，不再触发进程级未捕获异常，也不会在终端输出异常堆栈。
- **升级失败提示**：npm 升级失败时，错误信息不再只有 `exit code 1`，会带上 npm 给出的具体原因（如缓存目录权限问题）；后台自动更新失败时不再每小时弹出错误提示（当前版本不受影响），仅在安装被损坏、需要手动修复时提示。
- **远端 CBC 安装与连接**：远端缺少 CBC 时统一走 npm 安装，缺 Node.js/npm 时先请求明确授权再安装到当前 SSH 用户目录；远端 CBC 不兼容时展示具体原因（版本、协议、探测失败等），不再只显示「未知」，并提供一键更新、兼容判定改为版本范围 + 协议校验；修复主机导入不支持 `ssh root@host -p 36000` 形式端口、远端后台服务升级后复用旧实例导致连接失败、原生更新清理历史版本时可能删除当前运行入口以及更新失败仍返回成功的问题。
- **远端目录浏览**：目录浏览可进入根目录（切换工作区不再 502），路径栏随导航刷新。
- **Web UI 智能体自动恢复**：修复侧栏 / 智能体页点击已退出的智能体后不再自动拉起 worker、必须手动点「重启」才能继续对话的问题（历史抽屉与深链仍保持只读）。
- **新建智能体回复稳定上屏**：修复 Web UI 中新建智能体后流式回复反复刷新、正文不随输出追加、输入框状态来回跳动的问题；刷新页面或切回该智能体后，已流出的正文不再从半截重新开始。
- **Windows 上 Glob 搜索兜底**：修复 Windows 上内置搜索程序偶发启动失败时 Glob 文件搜索直接报错的问题，现在会自动改用备用搜索方式返回结果 (#155323)。
- **UserPromptSubmit hook 阻断后上下文丢失**：修复阻断后进程重建会丢失此前对话上下文的问题；阻断提示不再挂到未落盘的用户输入上，读取旧会话时也会修复既有的断链 (#156425)。
- **MCP App 卡片按钮调用被拒**：修复卡片内按钮触发的反向调用没有携带会话信息、在开启敏感出站审查的环境里统一返回拒绝（按钮永远无效）的问题 (#156568)。

## [2.171.0] - 2026-10-20

### 🎉 新功能

- **模型请求分层重试**：生成开始前的模型请求失败优先遵循网关 `retry_policy`：策略为不重试时不重试；允许重试或未下发策略时，对 429（瞬时限流）、5xx（EdgeOne 570-579 除外）、408、409 最多重试 8 次，1s 起步翻倍、单次本地等待封顶 32s。服务端通过 `Retry-After`（秒数或 HTTP 日期）或 `retry_policy.retry_after` 要求更久时按服务端时间等待，不再截短；重试等待期间会话显示为正在重试，用户停止后立即结束等待且不再发起请求。
- **远程主机管理**：侧边栏提供紧凑的主机快速切换与主机管理页面，支持在新窗口打开指定主机并保留原窗口的工作区与会话；添加主机时可复用已有 SSH 配置，或预览 SSH 命令并明确应用连接信息。
- **远程授权目录文件与 Git 只读**：可在已授权的远程目录中浏览文件，查看 Git 状态、Diff、日志与分支；浏览器取消或连接中断时对应的远程文件/Git 请求同步终止，不再在后台悬挂。

### 🔧 功能改进

- **后台会话崩溃自动续跑**：`--bg` 后台会话进程异常退出（如 OOM 被强杀）时按原会话 `--resume` 自动拉起，崩溃时任务仍在进行则自动发送续跑提示接着执行；600 秒内最多自动重启 3 次，可用 `CODEBUDDY_JOB_CRASH_AUTO_RESUME` 关闭，并用 `CODEBUDDY_JOB_CRASH_MAX_RESTARTS` / `CODEBUDDY_JOB_CRASH_RESTART_WINDOW` / `CODEBUDDY_JOB_CRASH_RESUME_PROMPT` 调整次数、窗口与提示文案。
- **REPL 调用展示**：调用行不再展示完整代码（收进 Ctrl+O），结果区默认每次一行展示内部工具调用；设置 `CODEBUDDY_REPL_HIDE_TOOL_CALL_DETAILS=1` 可隐藏明细，结果区只保留耗时与 Output。
- **云端记忆工具命名**：记忆召回与更新工具统一为 `MemoryRecall`、`MemoryUpdate`，精简云端记忆使用规则并明确平台不可用时不得写入本地文件替代，保持 Cloud Agent MCP 的展示兼容。

### 🐛 问题修复

- **网关密码下的 ACP 连接认证**：修复 `--serve` 开启网关密码后，暴露远程端口或经 Tunnel／反向代理转发时无需密码即可创建 ACP 连接、领取连接令牌的问题，以及密码可经网址泄露到代理与访问日志的问题 (#146634)。
- **嵌套 CLI 误删宿主会话历史**：Bash / PowerShell 执行的用户命令不再继承宿主 `CODEBUDDY_CONFIG_DIR`，避免在 WorkBuddy 对话中运行用户自装的 `codebuddy` 时按 30 天策略清理宿主会话导致旧对话显示「暂无对话记录」；第一方脚本仍可通过 `WORKBUDDY_CONFIG_DIR` 获取宿主目录 (#152783)。
- **stream-json 回合边界**：print 模式每轮 `result` 为该轮最后一帧，不再在 `result` 之后补发 `system/init`，避免回合超过 30 秒时向 SDK 宿主进程内 MCP server 多发工具列表请求导致宿主退出 (#120260, #154617)；`--a2a` 混合模式轮次在 stdout 上以 `system/init` 开头。
- **后台任务重复唤醒**：修复后台任务结果已读取后仍重复唤醒对话的问题，等待中的未读完成通知合并处理，通知轮正常结束且无内容时静默收尾 (#143750)。
- **纯思考响应误续跑**：交互式 CLI 中模型仅返回思考过程、无正文与工具调用时正常结束本轮，避免续跑请求以 assistant 消息结尾被模型网关拒绝；显式关闭开关与非交互调用保持原行为 (#154840)。
- **自动刷新插件打断提交**：修复刷新插件时中断正在提交的消息、请求提前结束且无法显示模型错误提示的问题，未变化的插件保留运行状态 (#153952)。
- **检查点与文件回退**：修复编辑前后字节长度相同时检查点未保存新版本、恢复代码误撤销更早轮次修改的问题 (#152458)，以及恢复旧会话并压缩上下文后文件回退提示 `Checkpoint workspace is unavailable` 的问题。
- **内置只读工具误拦截**：修复内置工具展示本地文件及部分只读操作可能被安全审查误拦截的问题，保留敏感文件、自定义安全规则与原有权限检查 (#152556)。
- **后台会话启动状态登记**：修复 Windows 下后台会话偶发无法完成启动状态登记，以及会话已运行但进程信息未登记时回复被误存为待发送消息的问题。
- **`codebuddy update` 多 Node 环境**：修复机器上并存多个 Node（Homebrew 与 mise / nvm）时更新后一直停在旧版本的问题，npm 升级始终装回当前正在运行的这份安装。
- **PTC 嵌套派发归属**：修复 PTC 模式下协调者嵌套派发子 Agent 时误切换团队归属，导致运行中的下级从终端任务树消失、回报无法唤醒协调者的问题。
- **远程连接与生命周期**：身份验证完成后才显示已连接；取消或断开时及时回收认证资源，迟到结果不影响新连接；远程网关退出后自动关闭独立进程组中的智能体；改进密码传递，避免暴露在进程参数与环境变量中。
- **远程主机切换与观测**：修复断开远程连接后被自动恢复重新连接、实例删除失败与有效进程被误判为已替换的问题；统计、链路与监控页面接入远程服务，切换主机时清除旧主机数据并阻止迟到响应覆盖。
- **远程首屏与 daemon 操作**：先完成远程 API 与存储作用域绑定再挂载会话组件，避免刷新后账号与状态查询误发到本机；停止远端 daemon 或断开连接失败时保留操作菜单并显示错误。
- **关闭文件预览**：本地与远程文件读取均传递取消信号，避免预览关闭后仍占用连接。
- **模组重新信任**：修复模组取消信任后因缺少信任的历史诊断阻止再次弹出授权确认、无法重新信任并启用的问题。
- **智能体后台运行协作能力**：修复 Web UI 智能体任务改为后台无界面运行后，频道成员在重启或恢复会话后无法发言、无法读写任务板与私信的问题；用户自行发起的无人值守任务仍不开放这些协作能力。
- **智能体模型与权限保留**：目录读取快路径仍从主任务补齐缺失配置，且不会覆盖显式设置。
- **macOS 快捷键写法**：命令面板、快捷键设置、编辑器与对话空态、最近会话提示统一使用 ⌃⌥⇧⌘ 符号及系统菜单顺序，Windows / Linux 保持 `Ctrl+Shift+P`；快捷键设置页仍支持 `cmd+shift+p` 等写法搜索 (#153795)。
- **Web UI 手机浏览器适配**：底部输入区与各类底部控件避开 iPhone Safari 浮动地址栏，触屏按钮更易点按，输入时页面不再自动放大，窄屏与键盘弹出时菜单不再超出可见区域；对话空状态的欢迎区恢复为简洁的品牌标识。
- **Desktop Web UI 新手引导**：修复 CodeBuddy Desktop 拉起 daemon 后，daemon 重启时新手引导再次自动弹出的问题，未显式指定端口时复用稳定 Web UI 端口并保持设备级 origin 状态 (#154485)。


## [2.170.0] - 2026-10-19

### 🎉 新功能

- **Web UI 新手引导**：首次进入智能体页时分步讲解分身、如何拉频道和智能体协作、模组能做什么以及能力边界；欢迎区提供可点开的引导卡片，并可从头像菜单、设置页和命令面板随时重新观看。欢迎区与桌面端选择工作目录的启动页同步使用最新的智能体头像，分身保持专属形象。

### 🔧 功能改进

- **工作台内置浏览器**：CodeBuddy Desktop 提供内置浏览器时，工作台不再展示 Web UI 自带的浏览器预览：「打开浏览器」入口、对话与内嵌智能体页面中的链接统一在 Desktop 内置浏览器中打开，其标签与入口改用地球图标；普通浏览器中保持原有预览。
- **工作台按会话保存**：每个会话保留自己的标签页（含 Desktop 内置浏览器），切换会话或刷新、重启后恢复到该会话的工作台；切到其它页面时 Desktop 内置浏览器会收起，不再遮挡页面。
- **工作台浏览器页签**：页签改为胶囊样式并显示站点图标，浏览器页签按标题自适应、工具栏居中；空白页跟随主题，修复切换视图后页面残留、菜单被页面遮挡、中文输入法回车误触发搜索及后台任务输出滚动条位置。
- **模型选择面板**：新增随光标切换、自动换行的独立详情区，描述优先跟随系统界面语言，缺少中文文案时回退英文，并支持手动指定语言；列表根据终端尺寸调整可见项数，修复长列表切换时的旧详情残留与显示错位。模型说明及相关展示文案按纯文本处理，限制长度，阻止控制字符改变终端标题或剪贴板。
- **图片读取与历史回放开销**：读取图片时保留完整图片预览，避免工具结果重复传输图片数据，降低大图和多图读取的传输开销；本地 WorkBuddy Client 显式声明能力后，历史图片直接回放为 BlobRef 资源引用，其他 ACP Client 继续收到标准 base64 图片，保持兼容。
- **Windows Shell 环境快照**：函数定义改为直接写入快照，不再逐函数 base64 编码后再还原，避免完整版 Git for Windows 大量函数时序列化逼近 10 秒超时；在已启用删除保护的命令执行环境中再启动 CLI 时，快照不再被拖慢，约 1~2 秒完成。
- **工具检索 Decision 精排（内部能力）**：ToolSearch 和 PTC 工具检索支持可选的 Decision 精排，默认关闭；开启后默认精排最多 128 个候选，超时或接口失败时回退至原检索顺序。
- **云上 CBC 伽利略配置**：支持云上 CBC 专用伽利略配置，日志及会话、模型、工具调用链路可上报到指定后端对象和环境，保持桌面端默认行为不变；专用配置无效时，日志与追踪一致关闭且不回落到产品配置。
- **问答链路数据埋点**：对齐问答核心链路埋点口径，`chat_request_send` 新增 `isMaxMode` / `source`，`mentionContexts` 升级为 `type:count` KV 字符串数组，`skillId` 支持本轮多技能聚合；仅数据改动，不影响运行时行为。
- **质量验证录屏**：TUI 终端录屏改为 asciicast v2 格式（`tui.cast`），并记录每一步操作和检查结果的标记；`quality:trace show` 可直接回放该录屏。

### 🐛 问题修复

- **取消后保留已写盘的文件修改**：取消对话时，若 `Write` / `Edit` / `MultiEdit` 已把修改写入磁盘，会话记录保留真实执行结果，不再记成「Interrupted by user」；免审批下执行的工具同样生效（#142914）。
- **会话卡在生成中**：修复模型请求出错后预判会自动重试、实际未重试时，stream-json / ACP 等通道不下发本轮终态结果，导致前端一直显示「生成中」。
- **记忆提取空压缩**：记忆提取等辅助调用不再触发会话压缩；压缩结果没有写入历史时连续压缩次数会回滚，后续对话仍能正常压缩（#152070）。
- **压缩后误显示用户取消**：修复上下文压缩后任务正常完成仍显示「用户已取消」的问题，保留真实取消、目标暂停与续写失败的正确终态。
- **远程访问完全访问（#153450）**：修复远程访问 Web UI 时新建智能体选择「完全访问」报 `unsupported permissionMode` 的问题，远程访问也可使用完全访问权限并设为默认。
- **PowerShell 赋值脚本裁决**：修复 PowerShell 赋值脚本被按 Bash 解析，导致沙箱命令裁决主体为空的错误；使用 PowerShell AST 提取命令，不新增合法脚本语法限制，并正确处理 wrapper 字符串转义和未调用的函数定义。
- **PowerShell 编码命令误判（#17117）**：修复 `checkEncodedCommand` 的 `\b` 边界在文件名 `-EN`、路径 `/en.` 处成立，导致普通明文命令被整体拦截；真实编码命令仍被阻断。
- **Web UI Bash 命令输入**：执行 REPL 中的 Bash 命令前提示会丢失反斜杠的字符串转义，避免错误命令静默挂起；自动命令不再无限等待无人提供的标准输入，后台任务显示转后台原因、实际运行时长和最近收到新输出的时间。
- **Web UI 文件树 Git 忽略状态**：修复查询 Git 忽略状态可能导致 CLI 退出、打断任务的问题；非 Git 目录正常显示文件树，减少重复查询并取消过期请求。
- **Web UI 任务状态与启动**：新增服务端计算的任务活跃度投影，统一 agent-view、jobs API 与 Web UI 行；接管的 job 报 idle/settled 时关闭输入框的运行中状态；重启 job worker 时恢复被中断的用户指令；Web UI 智能体任务改为 headless 运行，移除启动对 PTY broker 的依赖；保留可操作的失败详情。
- **插件工具结果文本**：交互式终端正确显示插件工具返回的文本结果，不再显示 `[object Object]`（#149571）。
- **非托管入口自动更新**：修复从源码目录或非托管入口运行时，误更新另一份全局安装并反复重装、提示安装损坏的问题。
- **REPL 折叠标题**：调用行默认展示 code（去换行压成一行，水平放不下时截断），并同时展示模型回填的 description，不再显示无信息量的 Code / REPL（#153360）。

## [2.169.0] - 2026-10-19

### 🎉 新功能

- **Web UI 全屏工作台对话标签**：全屏工作台新增固定对话标签并显示当前会话标题，可在对话与文件、终端等标签之间切换，切换后保持会话状态。

### 🔧 功能改进

- **工作台浏览器地址栏与页签**：地址栏聚焦态对齐 Chrome（填充胶囊 + 焦点环）；页签改为无缝排列、激活页签与内容区连成一整块，并显示站点 favicon。
- **插件入口收进头像菜单**：左侧导航栏移除「插件」一级入口，改由底部头像菜单进入，减少左轨占用。
- **模组页头部按钮等宽**：「添加模组」与「AI 创建」统一最小宽度并排，避免长短不一。

### 🐛 问题修复

- **工作台浏览器空白页跟随主题**：空白页签不再挂载会露出白底的预览页面，统一渲染跟随明暗主题的空白画布；地址栏中的 `about:blank` 也按空白页处理。
- **工作台浏览器收起后不再残留**：桌面端非激活页签或收起右侧工作台时隐藏浏览器预览，避免网页浮在界面上且无法关闭；重新展开时不再刷新页面或丢失前进后退历史。
- **新建文件行号与编辑卡片**：查看新建文件时仅显示一列行号；编辑卡片使用本轮固定的编辑片段展示差异，不再因会话状态变化偶发丢失高亮。

## [2.168.3] - 2026-10-18

### 🎉 新功能

- **定时任务有效期与指派**：持久化定时任务默认设置 30 天有效期，查看具体结果或手动续期后重新计时；到期暂停并保留历史，可自定义有效期或明确选择永不过期。定时任务可以指派给分身或同事，默认由分身在任务所在项目执行；改派后隔离执行历史，指派对象失效时暂停而不自动换人。
- **防止系统自动休眠**：全局设置新增默认开启的「防止系统自动休眠」开关，允许正常熄屏；关闭后后台服务即时释放防休眠请求，无需重启。Windows 防休眠方式同步修正，电源请求随进程退出自动释放，不再写入持久系统 override。

### 🔧 功能改进

- **Web UI 输入区与消息队列**：工作流、后台任务与待处理消息统一吸附在输入框上方，默认紧凑摘要、详情互斥展开，避免并存时挤占对话区；忙碌时默认在下一次模型请求插入跟进消息，输入框加号菜单可切换插入或排队并记住选择，消息队列仅在存在实际消息时显示。
- **问答卡片**：优化问题层级、选项状态、自定义回答、填写进度、提交反馈、审核回改与历史答案摘要，修复刷新后已回答记录被隐藏的问题。
- **对话顶栏与提示样式**：精简对话顶栏，移除导出按钮，将工作台展开按钮置于最右，统一左右侧栏图标；统一停止、执行限制和后台失败提示样式并保留具体错误信息，连接故障支持展开详情并保留重试与接管入口。
- **工具过程渲染开销**：收起动画结束后释放不可见正文与视图订阅，重新展开保留完整记录；过程计时不再每秒重绘整段历史正文，流式阶段不再反复执行定稿解析与文件校验。
- **TUI 长文本换行**：优化长中文与 emoji 工具输出的换行计算，减少输出更新阻塞终端输入回显的情况，保留完整内容与精确省略行数。
- **技能管理日志**：减少技能管理可用性检查产生的重复日志和无关配置序列化开销，保留首次状态及开关变化诊断。

### 🐛 问题修复

- **文件改动卡片显示行数（#134426）**：ACP v2 文件变更的每个 `DiffChange` 在 `_meta['codebuddy.ai/stats']` 中携带增删行数与字符数，大文件未生成 patch 时仍能显示 `+N -N`，会话回放同样保留。
- **计划批准后权限未生效（#142040）**：服务端批准计划后，所选权限在同一轮后续操作前应用，自动模式继续遵守可用性限制。
- **取消后旧操作仍执行**：修复自动审批等待期间取消任务后，迟到的审批或插件处理仍可能执行旧操作的问题；取消后可正常开始新任务，已运行的后台任务和原始对话内容不受影响。
- **daemon 重启后远程控制未恢复**：用户主动连接成功后保存恢复偏好，主动停止后不再恢复，普通 CLI 不自动联网；已断开的微信、企微与远程控制连接执行停止时仍会清除恢复意图，停止期间的迟到连接不会重新启动。
- **定时任务网络恢复**：修复电脑休眠后网络尚未恢复时定时任务立即失败的问题，网络恢复后再启动，并在执行记录中显示可读的失败原因。
- **Web UI 左侧栏底部布局**：`before`、`after`、`footer` 的模组贡献统一由宿主按行承载并约束 rail 宽度，避免自定义尺寸或长内容把底部入口挤乱。
- **Web UI 宠物与对话定位**：宠物类型与显示偏好保存到本机服务，重启后更换访问端口仍可恢复选择；查看较早消息后发送新消息会立即回到对话底部，工具过程与下一条用户消息之间保留清晰间距。
- **Web UI 排队消息竞争**：修复多条排队消息消费时通用自动排空与 ACP 排空同时启动下一轮的竞争，主会话由 ACP 串行消费并完整转发结果；回合结束后抵达的跟进消息通过原消费循环自动继续，停止后不自动恢复。
- **输入框 Agent 模式**：修复 Web UI 选中智能体后的输入框不显示当前 Agent 模式的问题，智能体新建会话后也会继续显示对应模式。
- **Web UI 子代理与思考强度**：派发子代理的 Agent 卡不再被后续流式参数帧或快照尾部覆盖，实时对话与刷新回放均保留子代理身份；PTC 模式下通过 `Agent()` 派发的子代理同样显示为子代理卡片；取消当前回合后不再残留「运行中」状态；MCP 经 `DeferExecuteTool` 返回的压缩 JSON 自动格式化并支持折叠预览；思考强度读取与终端一致的配置，各模型档位按实际支持能力展示。

## [2.168.2] - 2026-10-16

> 说明：v2.168.1 未成功发布，本版本重新发布其全部内容。

### 🔧 功能改进

- **TUI 新会话默认使用 PTC 模式（#141503）**：交互式 TUI 新建空白会话在未指定 Agent、未设置默认模式且无上次选择时，默认使用 PTC 模式；`/agent-mode` 的切换会被记住，`--agent cli` 可显式使用标准模式。非交互调用、SDK、ACP、后台会话及恢复会话行为不变，关闭主 Agent 总开关后仍使用标准模式。

### 🐛 问题修复

- **子 Agent 模型跟随会话（#149675）**：通过 IDE 模型选择器、`/model` 或 ACP 切换模型后，未单独配置模型的默认 `lite` 子 Agent 跟随当前会话所选模型，包括自定义模型，不再回落到启动默认模型。
- **企微机器人连接被抢占（#150664）**：新开命令行进程自动连接前会让位给正在服务同一机器人的存活进程，仅手动连接才接管；被本机其他进程接管后，对方退出时可自动重连，并提供明确的告警日志。
- **Mod Hook 误报（#150666）**：不再把 Mod 的 Hook 清单当作 Shell Hook 配置校验，正常加载的 Mod 启动时不再误报「hook 配置格式无效」。
- **频道引用回复错位（#150667）**：忙碌成员在本轮结束后收到的引用回复仍保留自身消息编号及被引用原话，避免将答复对应到其他待办。
- **团队负责人频道权限（#150668）**：负责派单的 lead 创建子 Agent 后，仍可在频道发言和更新任务板，不再被误判为影子会话；团队成员及子代理仍不能冒名发言。
- **Web UI 文件路径点击（#150752）**：相对路径按当前会话工作目录、上级目录及项目文件查找，重名文件提供候选菜单；支持文件名加行号、行列号、多行号及 Markdown 文件链接。助手输出完成后统一校验文件路径，仅真实存在的文件显示为可点击链接。
- **大图工具结果导致终端卡死（#151011）**：浏览器截图等 MCP 工具返回的内嵌图片在终端显示为 `[Image: …]` 摘要；超长无空格文本换行采用线性处理，避免界面长时间无响应。
- **专家团 Hook 工具拦截（#149700）**：修复安装 Hooks 插件后，专家团队员及 leader 后续轮次的工具调用被 `Hook operation was cancelled or completed` 错误拦截的问题。
- **压缩后上下文用量（#148771）**：上下文压缩后的估算用量用于实时推送、配置切换与会话恢复，不再显示压缩前用量；累计计费保持不变，下次模型请求后恢复实测用量。
- **原生运行时错误恢复（#149666）**：修复工具调用异常无法自纠正、步数上限误判及取消和权限拒绝分类不准确的问题。
- **独立二进制批量安全删除（#150443）**：修复批量删除获准后仍失败的问题，宿主与 Shell 共用真实 sidecar 路径，正确保存自动批准、手动批准和拒绝结果，批准后仍通过安全删除回收文件。
- **任务列表文案与恢复**：非英文任务标题不再被错误拼接 `ing`；恢复中断会话后，每轮从保存的任务列表恢复当前进度，避免列表为空或停留在旧状态。
- **搜索信源保留（#150643）**：WebSearch 不再误删合规隐藏 URL 的搜索信源，保留可用摘要与来源信息。
- **当前失败请求重试（#143142）**：Harness 可通过 `session/prompt` 重试当前轮并复用原 requestId 和用户消息，避免排队重试重复创建输入，支持从持久化历史恢复。
- **macOS 工具输出警告**：修复签名版 IDE 执行安全删除和 brokered 命令时，输出混入 Electron 环境变量警告的问题。
- **Windows Gateway 终端选择**：按 PATH 选择 PowerShell，避免同步版本探测阻塞请求或跳过可用终端。
- **会话授权与规则隔离**：HTTP「本次会话放行」授权在本地保存并按序同步，安全中心断连或重启后可重新下发，释放会话后同步清理；文件、命令和网络的「本会话允许」在当前 Agent 会话内复用，不自动新增安全中心规则，受保护条目失效后重新审批。规则上下文与产品保护路径绑定目标会话，避免切换会话后串用规则；释放历史会话不再清空当前受限规则。
- **沙箱命令收尾与取消**：执行期间持续确认文件操作记录，重试不重复添加删除事件；命令退出、启动失败或关闭运行时会等待文件操作及清理完成，再获取结果。取消超时不再视为可信退出，释放后 30 秒仍未退出的执行按无退出状态收尾；查询与关闭仅对可识别的短暂传输故障有限重试，证据不完整或收尾失败时明确提示文件可能已被修改。
- **沙箱资源与安全删除兼容性**：跳过不完整的 Runtime Kit 候选目录，Broker 资源缺失时明确失败；修复 Desktop 本地沙箱包与独立删除 helper 的校验冲突。批量删除预检在安全中心裁决不可用时保留用户审批，定制版保护与放行路径使用产品目录配置。

## [2.168.0] - 2026-10-15

### 🎉 新功能

- **模组工具返回图片**：模组注册的工具可以返回 MCP 风格的图片内容，模型会直接看到图片（例如网页截图），不再只收到文本。
- **桌面 Agent 浏览器原语**：在 CodeBuddy Desktop 中，模组可以通过 `desktop.agentBrowser.acquire()` 拿到自己的浏览器租约，用视图、页内 CDP、镜像帧 / 原生挂载 / webview、独立的 Cookie 分区、加密保存的登录凭据和原生确认框等原语自己实现浏览器功能；没有模组申请时 Desktop 不创建任何相关资源。
- **内置模组批准接口**：新增 `GET /api/v1/plugins/mods/source` 与 `POST /api/v1/plugins/mods/approve`，安装方可以按确切源码哈希批准刚安装的模组（与 `cbc plugin add --yes` 一致）。

### 🔧 功能改进

- **模组启动与重载开销**：通过有界编译结果复用、轻量发现与可取消下载降低模组启动和重载成本；已安装模组只在视图、文件、记忆主题或显式操作需要时加载，不再重启无关扩展。
- **模组入口提前可用**：模组可以在代码加载前发布本地化的工作台与命令入口，用户可在原生命令快捷键设置里绑定这些命令，已保存的绑定在停用再启用后依然保留；新增跟随原生主题与语言的持久化 Notes 工作台模板。
- **模组资源与快照回收**：包内图片、字体与数据与代码独立加载，复用已验证的资源字节并安全回收未使用的快照；已批准的 Web 包与函数 Hook 使用所选定的不可变源码，撤销、损坏与安装标识变化仍是明确失败；普通原生插件与开发目录行为不变。
- **模组命名空间与服务诊断**：保持模组之间的翻译命名空间相互独立；提供服务 API 不匹配的诊断，并在不重新下载的前提下恢复兼容的消费者；新增可选的、带校验的浏览器存储迁移与版本快照，升级失败时保留旧数据。
- **模组启动诊断**：暴露有界的启动与命令诊断，只在页面就绪后发布发生变化的报告，并允许在不重放业务写入、不降低源码批准要求的前提下显式恢复。
- **模组创作错误本地化**：模组创建、组合与编辑的入口错误改用本地语言提示，覆盖会话繁忙、待回答提问或待审批、会话缺失、模式切换超时与会话变更等场景；源码批准与加载上限也使用本地语言，诊断细节保留在本地化摘要之后，第三方错误内容保持原样。
- **模组集合导出与锁定**：`plugin collection` 可导出已安装 Web 模组的精确源码快照及其必需依赖闭包，保留包默认值、本地化贡献与选定的启用状态，不读取用户配置、凭据或业务数据；接收方使用普通 bundle 导入流程，且必须独立批准每一份源码。锁定 bundle 成员的路径、名称、版本、完整源码哈希与启用状态，在安装或构建前拒绝不匹配的成员，只有在明确的构建 / profile 组合后才更新派生锁，非法更新时保留最后一次提交的目录。该锁定是可复现性校验，不是发布者签名或批准授权。
- **WorkBuddy 首轮响应**：预热 CBC 在 activate 阶段异步启动 outbound A2A AgentCard 发现，不延迟 ready ACK；首条消息仅在发现尚未完成时等待同一个请求。

### 🐛 问题修复

- **Monitor 成本失控**：修复 Monitor 启动后可以永不停止、用户离开后仍持续唤醒模型并消耗大量 Token 的问题。现在所有 Monitor 默认运行 5 分钟、最长 30 分钟，移除了可无限运行的 `persistent` 参数；到期后模型会收到一次带事件数的通知，确有需要可自行重新开启。此前 Monitor 的完整工具说明也未注册，模型看到的只是占位字符串，现在完整说明正式生效。
- **防注入检测覆盖率（#149039）**：增加每轮工具结果审核的输入预算，减少较长任务中后续工具结果因预算耗尽而跳过审核的情况。
- **Web UI 监听器泄漏（#149564）**：任务面板反向代理复用连接时不再累积超时监听器，长时间运行不再刷出 `MaxListenersExceededWarning`。
- **ACP 子代理提问（#89387）**：在 WorkBuddy Desktop / Web 中，workflow `agent()`、Agent 工具和 fork skill 启动的子代理现在可以正常使用 AskUserQuestion，不再静默失去提问能力。
- **插件 Hook 特殊路径（#148529）**：用户目录中含有反引号、美元符号等字符时，插件 Hook 不再因路径被当作命令语法而启动失败。
- **分支会话保留子代理历史**：`/fork` 与 `/branch` 现在可以复制包含已完成子代理历史的会话，并保留所选主 Agent、模型、输出风格与权限；关联的子代理记录与工具输出独立复制，分支可以续聊而不影响原会话。
- **Goal**：修复清除后仍继续执行、异步操作覆盖新目标、重启后状态丢失及已结束目标重新激活的问题；分支会话不继承原目标，重新加载后正确完成目标，清除已暂停目标不会中断其他工作；Esc 暂停 Goal，终端补充暂停、恢复和清除提示。
- **Goal 持续推进**：评估失败不再误报目标达成，提示目标已保留并可继续任务重试；未达成判定缺少原因时仍可续跑，每轮强化完整目标验证与必要提问边界，不绕过授权和暂停。
- **会话恢复与列表**：修复会话保存与历史追加并发时 JSONL 被清空、导致重启后会话消失的问题；修复长会话或模型出错后 resume 列表把仍有工作记录的会话误判为空的问题。
- **模组创建会话绑定**：修复新建会话（以及清空会话）后进入模组创作时，会话绑定迟迟建立不起来、要等满 15 秒才失败的问题；连续发起多个创建请求不再静默丢弃后一个，当前已是创造模式且仍在运行时，会为新的创建请求另开一条创造模式会话。
- **浏览器模组定时器**：修复使用普通定时器或动画帧的浏览器模组（例如游戏与动画组件）报 `setTimeout is unavailable` 的问题；定时器与动画帧现在正常运行，并在模组停止、更新或页面切换时自动取消。
- **模组客户端检查恢复**：修复模组客户端就绪握手与会话启动竞争、或在重新绑定时被撤回，导致当前应用页面上的检查无法完成的问题；现在只重试幂等的页面握手，并为查询挂载、取消与在途容量设置上界，同时保持精确的连接 / 会话归属，不再从其他已打开页面作答。
- **后台任务列表刷新**：修复进程检查较慢时 Agent View 列表停留在旧状态的问题，操作后的刷新会合并执行。
- **停止后删除**：修复后台进程被清理 PID 或启动时间表示变化后，Ctrl+X 偶发无法停止、删除同一任务的问题；列表重绘后快捷键读取当前选择，停止失败时显示原因。
- **后台会话接管**：修复临时目录路径过长时无法接管后台会话的问题；控制端点启动失败时停止内层进程并保留错误。
- **空闲回收与主动停止**：修复后台会话空闲回收请求重叠时被直接拒绝，导致正常结束的 worker 在退出后被误判为异常结束的问题；用户主动停止后台任务时明确显示 `stopped by you`，不再与异常结束共用提示。
- **PR 关联与评审**：支持从结构化 gh 工具输出关联 PR，Jobs 详情返回 PR 链接和检查状态，成功完成但仍有开放 PR 的任务进入待评审分组。

## [2.167.0] - 2026-10-14

### 🎉 新功能

- **模组整页应用（#147597）**：模组可以注册整页应用，入口出现在 Web UI 左侧导航最顶部；同一页面可在 CodeBuddy Desktop 中以独立窗口或全局浮窗打开。在 CodeBuddy Desktop 中，模组还可以打开独立窗口、置顶的全局浮窗并注册全局快捷键，模组停用或页面刷新时自动释放；模组可以使用依赖弹层（Portal）的常见 React 组件库。内置 Web 模组去掉 `codebuddy-` 前缀，彩蛋模组更名为 `brawler`。
- **工作台浏览器（#148857）**：右侧工作台的「+」菜单新增「浏览器」，可以新开空白标签并在地址栏手动输入网址（自动补全协议，支持 localhost 等本地开发地址），提供后退、前进、刷新、停止和在外部浏览器打开。在 CodeBuddy Desktop 中可直接打开禁止被内嵌的网站并支持在其中登录，页面跳转后地址与标签标题自动同步；网页运行在独立隔离的环境中，无法访问本机或应用能力。普通浏览器中打开被站点禁止内嵌的页面时，提示可改用 CodeBuddy Desktop 打开。
- **压缩恢复会话内动态上下文**：新增 `current-context` 层的压缩恢复能力，压缩后按固定顺序提取身份、模式、连接器状态等白名单标签在历史中的最后一份并回填，避免压缩续聊时丢失这些上下文；其中模式标签按互斥槽位只保留最新一份，避免同时恢复冲突指令。
- **云端长期记忆工具（#60574）**：在 WorkBuddy 桌面端运行时新增 `MemAnswer` 与 `MemCurate` 工具。`MemAnswer` 按自然语言问题召回当前用户的云端长期记忆，并附带最多 5 条来源；`MemCurate` 把值得跨会话保留的用户信息提交到云端记忆，单次内容超长时直接提示精简或拆分。提交受理不代表已经记住，工具结果会明确提醒模型不要向用户宣称记忆已保存；其他宿主环境不启用这两个工具。

### 🔧 功能改进

- **启动与目录扫描开销（#145582）**：减少同一次 Skills 扫描中重复读取父目录元数据的开销，插件命令与 Skills 加载可通过当前 DataFs 的查询级只读装饰器合并重复 IO；收窄管理路径使用的 Agent 常量、Hook 和插件协议导入，减少 Harness 冷启动和首次目录查询共同承担的依赖加载；保留宿主文件系统的可选版本元数据，并避免把 UnionFs 上层目录版本误当作合并目录版本，独立 CLI 默认读写与挂载语义保持不变。
- **Web UI 工具集精简**：Web UI 会话不再向 Agent 提供页面查询与页面操作两个委托工具，对话中不再出现对应的工具调用。
- **回归保障（#89304）**：增强跨平台场景的端到端测试稳定性，降低回归误报；加强终端、Web UI、SDK 与协议接入的真实链路回归验证，并补充终端登录、环境认证与自动权限场景的回归覆盖。

### 🐛 问题修复

- **渠道消息与主 Agent 模式（#144106）**：修复在 PTC、Creator 或自定义主 Agent 模式下，企业微信 / 微信远程控制或 MCP channel 推来的消息唤醒会话时，这一轮会以标准模式执行的问题（Creator 的追加指令和自定义预设正文丢失、PTC 下 REPL 工具说明被换成标准模式版本），现在这一轮与该会话的主 Agent 一致；修复每次渠道消息唤醒都会在共享的 agent 上多挂一个监听、且别的会话结束时会提前恢复本会话权限模式的问题，权限模式只在本会话这一轮结束（或超时）时恢复。
- **持久化定时任务沿用主 Agent（#144106）**：修复持久化定时任务到点执行时总是以标准模式运行的问题，现在任务执行时沿用当前会话正在使用的主 Agent 模式（PTC、Creator、自定义主 Agent 等），切换模式后下一次触发也跟着变。
- **连不上的会话 MCP 不再拖垮整轮对话（#146512）**：会话插件 `.mcp.json` 和子代理声明的 inline MCP 原先依次连接，每个都要等满 60 秒，也不看 server 配置里的 `timeout`，一个连不上就会让宿主等不到对话受理而报「网络请求超时」。现在改为并行连接，连接超时依次取该 server 的 `timeout`、环境变量 `MCP_TIMEOUT`、默认 30 秒；连不上的 server 只是缺少自己的工具，本轮对话照常进行。
- **终端粘贴内容不再丢失（#148803）**：修复在终端（TUI）里先粘贴大段文本或图片，再按 Home 回到行首输入 `/命令`，用补全菜单回车选中命令时，粘贴的内容只剩 `[Pasted text #N]` 占位符、不再作为命令参数发送的问题。
- **A2A 链路追踪**：修复 `A2AGetTask` 轮询和 `A2ACancelTask` 未透传 `traceparent`、`tracestate` 与 `baggage`，导致同一远端任务的查询和取消请求产生独立 Trace 的问题。
- **Code Mode 误直连调用工具**：模型在 Code Mode 里把文件读写、频道发言、成员消息等工具当作直接工具调用时，改为当轮返回「请在 REPL 中调用」的工具提示，同一轮里的其他调用照常执行；不再整轮失败后自动重试，对话里也不再出现一条额外的系统纠正消息。
- **Daemon 重启保持权限模式**：修复重启 daemon 后，分身（主会话）被重置为默认权限模式的问题，现在会保持之前设置的权限模式。
- **本地模型纯思考消息**：修复历史包含纯思考消息时，后续对话可能失败的问题，保留原有思考和工具调用行为。
- **启动日志范围**：正常启动时不再把自动发现的 Mod 加载明细输出到启动界面；显式通过 `--plugin-dir` 指定的 Mod 仍保留加载与失败报告。
- **插件缓存与安装并发**：修复启动时插件缓存清理与安装并发执行，导致暂存目录被删除、安装偶发失败的问题。
- **移除隐蔽任务提醒**：移除长任务运行中自动注入的任务列表提醒。此前在标准模式直连任务工具、或 PTC 模式在 REPL 沙箱内使用 `TaskCreate` / `TaskUpdate`（及旧版 `TodoWrite`）时，若一段时间未更新任务状态，会向模型追加一条隐藏提醒，该行为被反馈会带来副作用，现已整体撤除；不清理或过滤旧会话已保存的提醒内容，任务工具和任务列表在 TUI 的展示不受影响。
- **Server 文件系统适配**：修复 Server 文件系统适配接口对 bigint 文件标识的类型兼容，以及发布类型声明对私有核心包子路径的引用。
- **终端取消提问后 Web UI 同步停止**：修复在终端（TUI）发起的对话里 Agent 用 AskUserQuestion 提问、用户按 ESC 取消后，同时打开的内嵌 Web UI 会一直显示「思考中」、输入框一直提示消息会排队的问题，现在会收到「本轮已取消」并恢复空闲。
- **企微机器人连接锁**：修复新开一个 CBC 会自动连接同一企微机器人、把仍在运行的老进程踢下线的问题（企微同一机器人只允许一个长连接订阅者）。现在自动连接会先检查跨进程连接锁，若机器人正被另一个存活进程服务则礼让跳过，只有用户手动连接时才接管；持有者进程已退出（或来自其他主机）时锁视为陈旧，新进程可正常接管，不会因为残留锁文件而连不上。
- **图片位置**：用户消息中的图片现在统一排在用户查询文本之后，符合约定的内容顺序。

## [2.166.0] - 2026-10-14

### 🎉 新功能

- **ACP 后台任务管理（#144511）**：支持 ACP 客户端列出后台 Bash / PowerShell 任务、查询状态和最终结果，并按任务 ID 取消；任务按会话隔离，取消后保留结果记录，且不会额外触发模型调用。宿主可按会话和终端 ID 停止后台任务而不打断前台对话，后台任务的查询与取消也补齐了旧版宿主兼容入口。
- **Web UI 每轮文件变更**：对话中每轮结束后显示本轮编辑过的文件和增删行数，点击「查看」即可在右侧工作台打开 diff 并定位到改动行，最近一轮支持一键撤销；「设置 → 外观」新增「对话内显示文件变更」开关。变更视图跟随当前打开的智能体会话。
- **工作空间插件（#145418）**：Web UI 输入框「+」菜单与智能体右键菜单新增「工作空间插件」，在右侧面板按智能体工作目录启用、禁用或从市场添加插件，配置写入该工作空间的 `.codebuddy/settings.json`，可一键恢复继承用户级设置。
- **「我的分身」与头像升级（#147424）**：Web UI 智能体列表中的主智能体升级为「我的分身」，固定在列表最上方并配专属头像，默认可以加入房间和频道，频道里被同事 @ 时会转给你的主对话处理；头像库重新设计为更柔和呆萌的风格并新增多款款式；列表支持「按目录分组」（默认关闭）。
- **Web UI 输入框能力升级**：输入框加号菜单按上下文、工作方式和技能分组，支持搜索、键盘选择和移动端操作；可引用工作区文件或文件夹（目录引用不会改变工作目录或授予访问权限），运行中仍可补充附件，运行中有草稿时同时提供发送和停止按钮；中文输入法组词期间确认文字后再搜索。
- **Web UI 快捷键**：对话输入支持快捷停止、权限模式切换、模型选择、思考切换、复制最近回复、展开任务进度和搜索输入历史；快捷键使用独立配置，可改键、解绑和恢复，不覆盖终端快捷键。
- **Web UI 宠物**：新增西游记系列宠物（悟空、唐僧、八戒、沙僧、白龙马），默认显示在输入框右上方，随智能体状态切换动作；单击摸摸、双击打招呼、眼睛跟随鼠标；可用 `/pets` 显示、隐藏或切换宠物，偏好保存在当前浏览器。
- **更省积分的长效提示缓存**：使用内置模型时，请求自动启用 1 小时的提示缓存（此前为 5 分钟）。长会话、反复读取同一批上下文的场景中，重复内容更容易命中缓存而不按全量重新计费，可明显降低积分消耗；缓存档位在会话首次请求时确定并在该会话内保持不变。可把环境变量 `CODEBUDDY_DISABLE_PROMPT_CACHING_1H` 设为 `1` 退回 5 分钟缓存。
- **MCP 网络域名规则**：开启沙箱后，HTTP / SSE / 远程 MCP 的工具调用按安全中心的网络域名规则判定：允许的直接执行，需审批的弹出审批卡片，禁止的直接拒绝，并记录到安全审计日志。
- **stream-json 会话配置对齐本地 ACP（#145200）**：由环境变量 `CBC_SESSION_CONFIG_SYNC=1` 开启，未设置时协议与行为和此前完全一致。开启后 `set_config.contextWindow` 按当前模型档位校验，`result._meta` 新增本轮实际生效的上下文预算，新增会话级思考键 `thoughtLevel`，`set_model` 切模型后按 ACP 同一顺序修正思考与档位配置。
- **server 库形内置 REPL（#147078）**：经 `@tencent-ai/agent-cli/server` 接入时，内置工具清单加入 REPL（Code Mode）。默认不开启，设置 `CODEBUDDY_REPL_ENABLED=1` 后，会话中即可执行代码。
- **我的应用与模组中心**：Web UI 新增「我的应用」，支持用自然语言创建、修改、组合和修复应用，无需节点编辑器、Schema 表单或发布流程，安装常驻代码仍需正常授权。自定义扩展管理收拢为「模组中心」，功能模组与外观模组共用清单、搜索、类型过滤和 AI 创建入口；模组详情支持查看保存版本、恢复指定版本，以及直接导出标准安装包（固定版本依赖随包携带，不携带用户状态与授权）。
- **模组插槽与工作台（#147469）**：工作台新增生命周期管理的标签页与文件预览槽位；侧边栏开放顶部、动作、导航、底部和账户等插槽，面板可直接摆放到原生左侧智能体栏；模组还可为后台任务与子代理详情、智能体目录与工作台停靠区贡献原生插槽，并保留原生输出、取消、历史与权限归属。
- **Mods desktop 命名空间（#146490）**：Mods 浏览器扩展新增可选的 `desktop` 命名空间，在桌面壳中可打开链接与目录、复制、发送系统通知和在工作目录启动终端；普通 Web UI 下该服务不存在，模组可渐进增强并保留浏览器降级。
- **模组创作与分发**：新增 `plugin init/build/pack/import/export` 标准包创作与分享流程，以及 `cbc plugin --profile web add` 的 npm / Git / 本地目录来源安装入口（安装不执行任何 npm lifecycle 脚本）；AI 创建支持事务化增量草稿补丁、无源码回执、字段级校验和预览动作测试，浏览器源码诊断可定位到文件、行、列。

### 🔧 功能改进

- **模型请求标识 X-Agent-Runtime**：模型请求新增 `X-Agent-Runtime` 请求头，标识对话运行形态：`local-agent`（本地对话）、`cloud-agent`（云端对话）、`agent-agent`（A2A），未指定或其他值为 `other`。可经 `_meta.baggage`、ACP `_meta` 或环境变量 `CODEBUDDY_AGENT_RUNTIME` 指定。
- **工具并发上限**：同一轮中可并发的工具调用（只读的 `Read`、`Grep`、`Agent` 等）最多同时执行 10 个，超出的按顺序排队，避免大量调用同时跑时占满资源；可用环境变量 `CODEBUDDY_MAX_TOOL_USE_CONCURRENCY` 调整。
- **会话历史清理改为显式开启（#145446）**：新增环境变量 `CODEBUDDY_SESSION_HISTORY_CLEANUP` 替代原来的 `CODEBUDDY_DISABLE_SESSION_HISTORY_CLEANUP`，仅设为 `1` / `true` 时执行 30 天会话 / 记忆 / Trace 清理。交互式启动（TUI、`--serve` Web UI、`codebuddy cleanup`）默认开启清理，`-p`、`--acp`、`--a2a`、SDK 以及 WorkBuddy、云端 Agent 等被程序拉起的 CLI 默认保留全部历史，不会因宿主漏配而误删。**不兼容变更**：CLI 不再读取旧变量，曾用它关闭清理的用户请改为 `CODEBUDDY_SESSION_HISTORY_CLEANUP=0`。
- **大目录启动不再卡顿**：在包含大量子目录的目录（如用户主目录）中启动时，后台仓库发现改为异步、有上限的扫描，并跳过隐藏目录与系统资料目录，启动期不再长时间阻塞，也不再产生大量诊断日志。
- **Bash 大输出预览（#143816）**：优化 Bash 大输出落盘后的预览内容，成功时优先展示实际输出开头，失败时保留退出码提示，便于快速判断命令结果。
- **自定义模型排查增强（#145984）**：自定义模型请求失败或重试时，日志附带上游返回的请求 ID、链路追踪和限流等响应头，便于与模型服务方核对问题；凭据和用户身份类信息不会被记录。未在 `models.json` 单独填写 API Key 时，恢复使用环境变量或全局配置中的凭据。
- **模型请求录制（#146229）**：模型请求录制（`OTEL_LOG_RAW_API_BODIES=file:<目录>`）的响应记录补充实际使用的模型、首个 token 时间、完成时间与被重试的失败尝试，便于分析每次调用的耗时与重试。
- **Web UI 分支与终端**：分支选择框使用中文等输入法时，回车先确认候选词上屏，不再直接创建或切换分支；分支列表改为两行展示分支名、领先 / 落后提交数与本地化相对时间，以及作者、提交号和提交信息；CodeBuddy Desktop 内置终端在本机未安装 codebuddy 时自动使用应用内置的 CLI。
- **Web UI 导航细节**：左侧导航底部新增「设置」入口，头像菜单改为从导航栏右侧弹出并优先显示账号真实头像；「源代码管理」图标的变更数角标改为贴在图标右下角并带底色描边，在自定义皮肤下也保持清晰可读。
- **回归保障（#89304）**：补充命令行、会话和终端关键流程的端到端回归，以及图片输入、异常恢复与历史会话的回归验证，提升版本发布的稳定性。

### 🐛 问题修复

- **`--serve` 内部接口鉴权（#143153）**：修复 `codebuddy --serve` 暴露远程端口（如 `--host 0.0.0.0`）时内部接口可被未授权调用、进而以当前用户权限执行命令的安全问题。开启网关认证后，内部接口与公开 API 一样需要凭据；直接调用内部接口的外部脚本需补带 `Authorization: Bearer <网关密码>`，否则返回 401。
- **主 Agent 模式一致性**：修复在 PTC、Creator 或自定义主 Agent 模式下，定时任务（含 `/loop`）触发、后台会话收到后续消息、团队 lead 被成员消息唤醒的那一轮会以标准模式执行的问题（Creator 追加指令与自定义预设正文丢失、PTC 下 REPL 工具说明被替换）；现在这些轮次与用户自己发消息时使用同一个主 Agent。
- **Agent Teams 停止语义**：修复通过 Server 接入（如 Agent Harness）的 Team 会话在用户停止后，队员消息和框架通知又自动唤醒 lead 开始新一轮的问题；停止后队员也会被一并暂停，期间收到的队员消息会保留，等用户下一次发消息后再送达。
- **工具调用顺序与并发**：修复同一轮中排在需确认调用之后的调用不等审批就先执行的问题（现在按顺序执行，被拒绝时后续调用显示为 `Skipped (an earlier tool call was rejected)`）；修复写文件、编辑、执行命令等有副作用操作可能乱序并发执行的问题，只读调用仍可并发。
- **退出码显示**：Bash / PowerShell 命令以非 0 退出码结束时，交互界面会在结果首行显示退出码并以错误颜色标出，不再看起来像执行成功。
- **斜杠命令回显**：修复在 IDE / Web UI 中执行 `/init` 等内置提示词型命令后，用户气泡把展开后的整段系统提示词显示出来的问题；历史回放同样只显示命令本身（含参数），模型收到的提示词不变。
- **复制中文乱码（#145105）**：修复在 macOS 桌面版内置终端中运行 CLI 时，`/copy` 复制的中文内容粘贴后变成乱码的问题；内置终端缺少语言环境时也会默认使用 UTF-8。
- **MCP JSON 工具结果**：修复延迟加载的 MCP 连接器（如乐享、表格）返回 JSON 对象结果后，下一轮对话报 `Only text tool outputs are supported for chat completions`（错误码 10000）、会话此后无法继续的问题；已出现该报错的会话重新打开后可继续对话。
- **自动升级**：修复通过 npm 安装时，自动升级过程中网络中断可能导致旧版本被删除、退出后命令无法启动（`command not found`）的问题；现在升级会先完整下载新版本再替换，替换阶段若安装被破坏会自动重装修复。
- **server 库形接入（#147078）**：修复经 server 库接入时 ToolSearch 只要搜到工具就报 `Tool search failed: … is not a function`；一并修复会话首轮跳过 MCP 服务器连接等待、命令型 hook 输出提示信息时出错卡住的问题。
- **会话标题生成（#145164）**：修复部分模型生成会话标题时默认开启深度思考、导致标题迟迟不出现的问题；标题生成现在统一关闭思考。
- **后台任务输出与收尾**：修复后台命令退出时与文件输出读取并发，导致终端推送或任务结果遗漏最后一段输出的问题；修复后台任务完成后的自动处理进行中，用户新发送的消息要等这轮处理全部结束才开始响应的问题。
- **ACP 历史与位置信息（#144697）**：修复 Read 参数中的非法路径或行号导致 Server / Harness ACP 连接关闭或历史恢复失败的问题；实时消息和历史回放会安全省略无效位置或可选行号，保留原始工具参数及结果。
- **Hook 上下文**：修复 hook 的 `systemMessage` 用户提示意外进入模型上下文的问题，界面提示、纯文本 stdout 和显式 `additionalContext` 行为保持不变。
- **网络 dispatcher**：修复调用方传入自定义网络 dispatcher 时首次请求初始化失败的问题，普通直连和待机仍保持按需加载。
- **图片历史兼容**：修复图片历史在 CLI 版本回退后无法继续对话的问题（新保存的图片引用兼容旧版，读取同时支持新旧格式），并修复恢复会话后使用 `/btw` 等临时问答时图片无法正常读取。
- **提示缓存与模型调用（#142992）**：修复模型调用重构后，提示缓存处理可能导致请求发送前失败的问题；保持自有模型缓存策略不变，不向自定义模型注入内部缓存字段。
- **模型优化默认值**：统一 Desktop 设置页与 CLI 模型请求的默认值策略，修复国内版未配置「帮助优化模型」时错误发送隐私数据标记的问题，并正确处理海外版、专享版等账号的默认状态。
- **文件回滚**：修复超过备份大小阈值的文件被误标为可精确恢复的问题；跳过备份的记录不再作为恢复快照，没有可用版本时保留文件当前内容。
- **沙箱文件审批与授权（#143090、#142526）**：修复沙箱文件审批通过后重跑命令时，首轮已成功删除的文件被误报不存在的问题；修复 macOS 沙箱删除或重命名文件、目录后旧路径自动授权持续累积的问题，回收同一沙箱会话中已失效路径的 auto_grant 与 temp 规则。
- **独立运行沙箱与连接稳定性**：独立运行（非 WorkBuddy 托管）开启沙箱后，命令不再因安全中心未启动而全部被拒绝执行，后台会话共用同一个安全中心；修复 Windows 版 CodeBuddy Desktop 中智能体会话完成首轮回复后即退出、后续消息报 502 的问题；Web UI 恢复繁忙会话时，首次加载超时后的重试给予更充足的等待时间。
- **Web UI 连接回退**：修复经反向代理访问时实时通道已连通但收不到会话消息、对话不显示的问题，现在确认能收到当前会话的消息后才切换到实时通道，被拒绝或断开时自动回退到原有连接方式；修复重新登录后打开带会话链接的页面偶发加载超时报错（加载稍慢时自动重试一次）。
- **Web UI 模式与页面状态**：修复刷新后已选择的 PTC 等智能体模式被错误显示为标准模式的问题，恢复对话时保留该对话自己的模式；修复打开或执行 `/btw` 时因空记录导致 React 最大更新深度错误的问题，并让被旧 Service Worker 接管的页面在 Agent 空闲时自动无感刷新。
- **输入历史**：修复恢复会话后上键可能跳过最后一次重复输入，以及新输入被恢复的旧记录排到前面的问题；上下翻阅仍能恢复未发送草稿。
- **企微 / 微信机器人（IOA）**：`/remote-control` 中已连接的企微、微信机器人不再随 CBC 登录态变化被断开，重新登录后会自动恢复；连接过（未手动停止）的机器人跨进程重启后自动重连；remote-control hostId 落盘复用，重启后不再生成新 ID。
- **持久化定时任务**：修复持久化的周期定时任务在创建 3 天后执行一次即被自动删除的问题，现在会持续运行直到手动删除。
- **本地专家**：修复首次使用尚未安装的本地专家插件时首轮对话回落到默认人设的问题；现在会在远端市场下载前优先完成本地专家安装，并在首次模型请求前注入专家提示词。
- **语音转写积分（#137815）**：修复使用免费模型调用 AudioTranscribe 后，对话中未展示语音转写实际积分消耗的问题，并保留该消耗供历史回放。
- **插件缓存与市场**：修复已保留新版缓存时插件更新仍选旧版、市场离线或移除及无启用选择时无法卸载的问题；目录市场的插件摘要先验证完整缓存投影再读取元数据；插件市场下载改用进程已配置的 fetch，修复中断下载残留文件的问题。
- **模组运行时与契约**：修复插槽 contract 的 strict / legacy 字符串及历史 object / null 输出导致 Slots 和 Runtime 整表校验失败的问题；修复 Workbench Pet 示例与模板的 styles 绑定；浏览器包与运行时元数据读取串行化，避免读到部分发布的代次。
- **Web UI 权限与附件细节**：修复新建智能体交替使用权限下拉和规划入口后，退出规划模式可能恢复过期权限的问题；附件读取完成后才允许发送，避免提前发送遗漏材料。

## [2.165.0] - 2026-10-11

### 🎉 新功能

- **Web UI 浏览器通知**：完成后通知新增浏览器通知渠道，由 Service Worker 投递，绑定站点 origin 授权，页面切后台 / PWA 窗口失焦 / 标签关闭后仍可靠，云端 / 无桌面环境同样可用。设置 → 通知改为「关闭 / 系统通知 / 浏览器通知」，用户自选；系统通知（本机 CodeBuddy 直接发，免站点授权、不受端口变化影响）保持为既有能力，浏览器通知不再自动降级，避免"选了一条却走了另一条"。点击通知统一把窗口拉回前台并导航到对应会话（主对话带 `sessionId`，同事 / job 带 `job` + `sessionId`）。子路径（base-path）模式下 Service Worker 被禁用，浏览器通知不可用，设置页就地提示并保留系统通知选项。另修复 Safari 中首次授权后设置页仍显示「被拦截」、需刷新页面才恢复的问题。
- **Mods API 对齐 Claude Code**：Mods 现在看到与 Claude Code 2.1.293 相同的 API：`codebuddy-code`（别名 `claude-code`）类型即 Claude Code 自身声明，且其中列出的事件全部生效——`prompt.autocomplete` 向补全列表添加行、`prompt.compose` 塑造系统提示词、`prompt.mention` 控制 `@file` 附加内容、`session.append` / `session.send` 观察对话与消息、`telemetry.log` / `telemetry.mark` 观察遥测、`session.compact` 覆盖 `/compact` 与自动压缩、`session.end` 在退出与 `/clear` 时触发、`ui.fault` 上报加载或渲染失败的 Client。新增 `$.process.spawn`、`$.mcp.connect`、`$.session.version`、`$.ui.copy`、`$.ui.selection` 五个调用；`turn.step` hook 支持流式，可单次请求切换模型或强度、或不调用模型直接作答；`agent.spawn` hook 可改写子代理提示词 / 模型 / 类型；`config.set` hook 可改写写入值；`command.describe` hook 可隐藏命令或改写补全条目；`$.session.messages`、`$.model.complete`、`$.model.fork`、`$.mcp.call` 等调用在终端中也可用。mod 注册的工具命名为 `mcp__<plugin>__<name>` 并以 MCP 文本块返回结果，针对 MCP 工具的 `permissions.deny` 规则同样拦截；CLI Web UI 向 mod 报告自身为 `desktop` 表面。
- **运行社区 mod Flightdeck**：支持用 `--plugin-dir` 不加改动地运行社区 mod Flightdeck（实时 Agent 仪表盘）：mod 可保持响应式状态、跟随每个模型请求、观察子代理启动、读取权限决策、每轮后接收度量、在终端绘制动画 `Client` 区域并设置状态行。CLI Web UI 中 mod 面板停靠在对话旁的侧栏。另修复 CLI Web UI 在子代理工具卡片首次出现时崩溃的问题。

### 🔧 功能改进

- **CLI 更新状态与自动重启（#144749）**：后台服务上报 CLI 更新状态并支持立即检查，可设置更新后空闲时自动重启；Web UI 跟进队列移到输入框上方，采用紧凑摘要并提供清晰的操作反馈。
- **Server 宿主注入 HTTP 代理策略**：Server 支持宿主注入动态 HTTP 代理策略，修复 Harness 写入代理配置后模型请求仍直连的问题；未注入时保持原有 CLI 与 Server 代理行为。代理策略回调同时接收 Agent 的有效环境，兼容嵌入式运行时的环境隔离与 settings.env 代理配置。
- **MCP OAuth 登录自动续期（#128551）**：授权时向服务端申请续期能力，服务端支持时 MCP 服务登录过期后自动续期，无需再手动授权；已登录的服务在下一次授权后生效。

### 🐛 问题修复

- **ACP 错误码投影（#143142）**：修复 Server/Harness ACP 错误投影丢失上游业务码的问题，保留终态通知及已有持久化错误回放中的排队业务码；旧 CLI 错误格式与现有错误分类保持不变。
- **ACP SDK 1.7.0 与工具输入校验**：升级共享 ACP TypeScript SDK 至 1.7.0，CommonJS 消费方改用原生动态 import 加载其 ESM 入口并使用稳定的 elicitation API；工具输入按其声明的 JSON Schema dialect 校验（含 MCP SDK 2.x 的 draft 2020-12），保留既有 draft-07 与延迟工具强制转换行为；Server 的 ACP v2 输出中，提交的 `/compact` 命令以原始消息 ID 报告，内部压缩指令保持隐藏，默认 messages 与 ACP v1 输出行为不变。
- **MCP 授权错误信息丢失**：修复远程 MCP 服务在登录凭据过期或授权服务返回错误时，连接失败只提示 `Invalid OAuth error response ... [object Response]`、真实原因丢失的问题；现在能正确识别授权错误并按凭据失效流程重新授权，错误信息带上真实原因与状态码。
- **回退 `/clear` 后的安全审查继承**：该继承在会话清理后沿用上一会话待生效的审查策略，带来性能问题；改回让新会话从默认全关起步，等 Host 重新下发安全审查配置后再生效。会话模型、思考配置、上下文档位等其余配置的继承保持不变。
- **独立二进制下 daemon 服务空转**：修复独立二进制安装方式下，`daemon install` 注册的 Linux 后台服务把安装路径当提问反复发送给模型、持续消耗额度的问题。升级后重新执行一次 `codebuddy daemon install` 即可自动修复已注册的旧服务；后台服务异常时也会在几分钟内自动停止重试。另修复独立二进制安装方式下自动模式规则评审附带多余输入、tmux 模式下无法启动团队成员的问题。
- **Web UI 新建会话消息残留**：修复 Web UI 后台智能体内点击「新建会话」后，上一条会话的首句用户消息被重复补种进新会话的问题（首句归属改为锚定该智能体最初的会话，会话切换后不再生效）；同时修复智能体内换会话后左侧列表小字摘要停在旧内容、不再随新回合刷新的问题。
- **Electron 内嵌运行子命令参数移位**：修复 CLI 在 Electron 应用内运行（`ELECTRON_RUN_AS_NODE`，如 CodeBuddy Desktop 内置 CLI）时子命令参数被移位的问题：`codebuddy install <version>` 现在会安装指定版本，不再失败。
- **`find -delete` 执行前审批（#119395）**：修复声明 `CODEBUDDY_CLI_CAPABILITIES=file.safety` 的 IDE、Harness 等宿主未触发 `find -delete` 执行前审批的问题；复用现有 FileSafety 能力判断及审批流程，保留 WorkBuddy Desktop 默认行为和未声明能力的普通 CLI 行为。
- **后台任务收尾期间图片丢失**：后台任务完成后的自动处理进行中，用户发送的带图片消息不再丢失图片，会连同图片一起加入正在进行的处理，与纯文字消息行为一致。
- **含后台历史的会话无法 fork（#131672）**：保留历史工具结果，仅复制已完成的普通子任务历史，不接管源会话的运行任务。
- **ACP 小编辑文件 diff**：支持最大 2 MiB 文本文件（4 MiB 合并输入预算）的小编辑保留 ACP 文件 diff；行数预算避免对大量短行的文件做高成本分词。补丁大小与协作计算预算保持不变；产出的补丁仍保留在持久化的工具结果与回放中。
- **代理请求稳定性**：修复宿主修改 JavaScript 堆栈跟踪设置后 HTTP/HTTPS 代理请求失效的问题，同样修复模型请求与遥测；本地请求协议不匹配改报连接错误（而非 HTTP 400），且不再通过其他地址或代理路径重试。
- **PTC 安全审批交互**：PTC / Code Mode 沙箱中需要安全审批的工具调用（高危命令、敏感文件访问）不再直接失败：交互式会话（TUI / Web UI / ACP）显示嵌套审批提示，用户可批准或拒绝；非交互式会话保持阻止，并说明放行方式（`permissions.allow` 规则或完全访问模式）。另修复批准后复用 REPL worker 时，后续工具被已完成的 hook 上下文阻塞的问题。
- **sandbox-center 退出等待**：修复同步结束后预算定时器未释放，导致进程关闭后仍需等待最多 3 秒才能退出的问题；同步超时及降级策略保持不变。
- **Server 延迟工具短描述（#142379）**：修复 Server functional hooks 路径丢失延迟工具短描述、导致工具目录过长的问题；保留完整工具说明与现有白名单、审批规则。
- **Server `steer()` 撤回输入**：`steer()` 在其请求被取消时会撤回缓冲输入，且不打断查询或其他提交；队列回执暴露消费结果，宿主可区分已确认撤回与输入已交给运行中的 Agent。
- **ToolSearch 隐藏被禁工具（#126987）**：修复整工具级权限 deny 未从 ToolSearch 描述、搜索及精确查找中隐藏工具的问题；目录按所属会话过滤，权限更新后刷新描述；带参数的 deny 继续只限制具体调用，不隐藏整个工具。

## [2.164.0] - 2026-10-09

### 🎉 新功能

- **CLI Web UI 统一使用 AI 同事通讯录**：不再提供单干 / 组队模式切换；Agent 自主创建同事、使用频道和唤醒成员改为设置页中的独立开关。TUI、WorkBuddy、IDE 与无人值守入口的能力边界保持不变。同一个会话在终端与内嵌 Web UI 之间来回切换时，Agent 自主组队的工具只在 Web UI 发出的轮次里出现：回到终端继续聊不再继承这些工具，关掉浏览器后也一样。
- **Web UI 支持 Function Hooks mod 的 `Svg` 与 `Client` 元素**：`Svg` 以隔离图片显示（交互模式用无脚本沙箱框）；`Client` 的 surface module 在沙箱中运行，支持本地状态、帧时钟、指针与按键输入，`surface.post` 送达插件的 `ui.message` hook，hook 回的 `{ props }` 直接回到实例。
- **Function Hooks `ui.resolve` hook 生效**：插件可在加载时为其他插件改写或去掉元素；`$.ui.resolve(e)` 同步返回当前面的元素表，原有 `await $.ui.resolve(e)` 写法继续可用。
- **运行 Claude Code 示例 mod**：支持用 `--plugin-dir` 不加改动地运行 Claude Code 的示例 mod（Blast Radius、Replay Theater、Token Weather）；mod 可在提示词上方绘制条带（`AbovePrompt`），并在终端与 CLI Web UI 中用按钮打开面板（`$.ui.open`），通过 `$.session.usage()` 读取真实上下文用量，以及用 `tool.call` 暂扣高危 shell 命令。
- **Web UI 界面与对话字号档位**：设置页「外观」新增界面字号与对话字号档位（小 / 标准 / 大 / 特大）：界面字号调整整体文字大小，对话字号在其基础上单独调整对话流，设置会被记住并同步到其他已打开的页面。

### 🔧 功能改进

- **stream-json 历史回放限长（#89304）**：支持仅在 stream-json 历史回放时限制工具调用参数、工具结果和推理文本的长度，减少云端会话恢复的 stdout 传输量，同时保持实时输出和模型上下文完整。
- **Agent SDK 跨语言端到端回归（#89304）**：为 Agent SDK 新增 JavaScript 与 Python 的端到端回归覆盖，涵盖认证、取消、会话生命周期与持久化、查询消息、工具钩子与权限、MCP 集成、子代理与长任务工具，提升发布信心，不改变运行时行为。
- **Function Hooks `classic.*` 钩子结果生效**：对齐 Claude Code，`classic.PreToolUse` 返回的 `updatedInput` 会在执行前改写工具参数，`next(e')` 改写同样生效，`deny` / `ask` 会拒绝或要求确认；`classic.PostToolUse` 等事件的 `additionalContext`、`updatedToolOutput`、`block` 等字段也会传回宿主。mod 仍不能放行宿主已拒绝的调用，也不能用 `allow` 跳过权限确认；`classic.PreToolUse` 收到的事件改为类型声明中的 `{ tool, tool_use_id, ...参数 }`，其余 `classic.*` 事件不再带出宿主内部的 session 对象。

### 🐛 问题修复

- **插件 UserPromptSubmit hook 首轮不执行**：修复插件中配置的 UserPromptSubmit hook 在部分场景下不执行的问题：当插件已安装时，首轮对话不再因插件状态尚未就绪而跳过该 hook；当插件在本次进程内安装完成后，后续轮次也能正常触发。
- **ESC 取消后会话状态卡死**：修复交互式 TUI 中按 ESC 取消当前运行时，偶发无法彻底中止、会话状态卡死（spinner 持续转动、输入框不可用、后续 ESC 失效）的问题；取消后运行资源与会话状态正确收敛，不影响后续会话。
- **子代理丢失任务内容（400）**：修复 Web 界面、IDE 接入和 `-p` 非交互模式下，默认类型子代理丢失任务内容、请求被拒绝（400）的问题；子代理现在能正常收到并执行派发的任务。
- **【PTC】子代理读到用不了的工具说明（#142296）**：Code Mode 下 REPL 工具说明对所有身份是同一份文本，子代理（如只读的 Explore）会读到 Agent、TaskOutput 的用法，但它们的工具目录里并没有这些工具，容易反复检索却找不到。现在这部分用法按各身份实际拥有的工具生成，主代理保持完整说明。
- **【PTC】截断结果可完整取回（#142772）**：Code Mode 下 REPL 脚本返回的内容超过上限时，超出部分原先直接丢弃，模型只能重新执行整段逻辑。现在完整返回值会保留在沙箱的 `REPL.lastTruncated` 中，截断提示会告诉模型在下一次调用里对它筛选、汇总后只返回结论。
- **【PTC】子代理返回类型提示修正**：PTC / Code Mode 下，子代理 `Agent()` 的返回类型提示不再把“返回任务句柄”误写成只有显式后台调用才会发生。命名 Agent、团队成员会话以及定义级后台的 Agent 同样会异步返回任务句柄，模型据此先判断返回值类型再读取任务标识，避免把句柄当字符串用而丢失任务标识、重复派发子代理。
- **Web UI 历史回放被截断**：修复长会话打开、刷新或切换后，Web UI 用最新一页历史覆盖完整回放、导致起始用户提问消失的问题；现在会保留更早的历史，仅更新重叠的最新尾部。
- **Web UI 子代理历史恢复**：修复刷新或重新打开会话后，Agent 父卡未恢复子代理元数据、导致子代理详情无法识别和展开的问题。
- **Web UI 智能体配置隔离**：修复新建智能体的配置隔离：新建页里选择的权限模式、模型与引擎不再回写宿主用户默认，只有显式选择才写入该智能体档案，继承默认时保持跟随全局。同时修复新建智能体后首条用户消息不回显的问题，并把「完全访问」收紧为本机 Web UI 专属：远程、Tunnel、局域网或经代理转发的调用，无论直接传入该权限模式、还是先改写用户级默认权限再以缺省权限派发，都会被拒绝。
- **Web UI 新建智能体未继承默认权限**：修复新建智能体没有继承用户级默认权限模式的问题：新建时优先使用目标工作区解析出的有效默认值，仅在不存在显式默认时回退 last-used，并避免把继承到的默认值物化为智能体固定配置。
- **Web UI 图片预览无关闭入口**：修复对话流中图片放大预览没有关闭按钮的问题：右上角新增关闭按钮，所有图片预览均支持 Esc 键与点击遮罩关闭，关闭后焦点回到原位置。
- **CNB 子路径下品牌图片加载失败**：修复 Web UI 通过 CNB 实例子路径访问时，欢迎页与登录页品牌图片因未携带路径前缀而加载失败的问题。
- **会话文件检查点重复记录**：会话记录不再重复保存相同的文件检查点：写入新文件时只记一次，改写已跟踪文件不再追加重复记录。批量写文件的会话，检查点数据约减少一半（新建 300 个文件的会话从约 7.3MB 降到约 3.6MB）。记录格式不变，撤回、文件变更展示以及旧版本打开会话都不受影响。
- **工具内容注入防护下读取图片报错（#142310）**：开启「工具内容注入防护」后，读取图片（含 MCP 截图、自定义模型传图）的下一轮请求不再报「服务出现未知错误 | 10000」；图片结果仍按不可信内容包裹后发送给模型。
- **文档与 Excel 子代理保存未备份（#133876）**：文档脚本编辑与 Excel 子代理自动保存接入 Agent 会话文件备份，避免保存时遗漏回退所需的原文件内容。
- **微信远程控制重连残留轮询**：电脑休眠唤醒或网络恢复触发重连后，不再残留多条并发的消息轮询，避免断网时错误日志成倍刷屏、重连后重复拉取消息。
- **Windows 终端拼音候选框位置错误**：Windows VSCode 终端下停在输入位置时显示终端自身光标（不再画反色块），系统 ConPTY 才会同步光标位置，候选框不再钉在左下角。

## [2.163.0] - 2026-10-09

### 🎉 新功能

- **iOA 本地资源与产物上报（#128820）**：新增 iOA 场景下的本地资源与产物上报能力，采集受开关保护、上传有并发与超时上限。需要员工交互式登录，身份或特性变化时自动取消，文件不安全或超出预算时直接丢弃而不阻塞 CLI 使用。上传使用校验后的私有快照，粘贴的图片在界面清理临时文件前先保留私有副本。仅含附件的提交现在也会走完整的输入钩子链路。
- **自定义模型支持 OpenAI Responses API**：`models.json` 中的模型可设置 `"api": "openai-responses"`，请求改发 `{url}/responses`，多轮对话原样回放加密推理内容，会话记录同时保留上游 `model` / `region` / `accountId`。模型 apiKey 支持运行时占位符 `${CODEBUDDY_SESSION_ID}`，便于上游把同一任务的请求固定在同一账号。新增产品特性 `ResponsesStore`，开启后请求携带 `store: true`，否则显式发送 `store: false`；限流 429 退避重试，额度耗尽不重试并交给备用模型。另新增 `OTEL_LOG_RAW_API_BODIES` 用于落盘完整请求与响应体。
- **微信 / 企微聊天记录隐私标记持续生效**：聊天记录分享标记命中后，当前会话及其派生 Agent 的后续模型请求持续标记为隐私数据，独立会话恢复后仍保持该状态。标记仅覆盖走平台网关的模型请求，自定义模型与显式设置 `CODEBUDDY_SKIP_INTERNAL_HEADERS` 时不下发。
- **Mods（函数钩子）默认开启**：`--plugin-dir` 指定的 mod 与已装插件中的 mod 无需再设置环境变量即可加载；如需关闭，设置 `CBC_ENABLE_FUNCTION_HOOKS=0`。
- **Mods 新增网络请求与进程执行能力**：mod 现在可以通过宿主发起 http/https 请求（支持 `socketPath`）和按 argv 运行本地命令（不经 shell，默认 30 秒超时、最长 10 分钟，git 自动关闭仓库钩子）。命令无法启动、超时或请求失败时调用会 reject；管理员可通过环境变量关闭这两个能力。
- **关闭敏感数据防护的环境变量**：新增 `CODEBUDDY_DISABLE_SENSITIVE_PROTECTION=1`，关闭本进程的敏感数据防护，效果与设置文件中的 `sensitiveProtection.enabled: false` 一致，但不修改共享的设置文件；企业托管策略下发的值仍然优先。
- **Web UI 智能体自动命名**：新建智能体若未改名，先显示「新智能体」占位；第一段对话生成标题后自动改用该标题作为名字，且只改这一次。新建页、侧栏或顶栏手动起过的名字不会被覆盖，标题生成时页面是否打开都不影响。
- **Web UI Mods 生成式 UI**：助手消息支持由 mod 接管渲染，mod 可向模型注入自定义输出规则，再把回复里的标签画成卡片、按钮、提示条等可交互组件；按钮点击回到 mod 执行，重画时已显示的卡片按最新状态刷新。Mod 渲染树新增布局（方向、间距、内边距、边框卡片）与文本样式能力。同步新增「点餐 → 下单 → 退单」示例 mod。
- **通用生成式 UI 示例 mod**：新增不绑定业务的生成式 UI 示例，模型在回复里输出 genui JSON 代码块，Web UI 把它画成卡片、表格、进度、表单和按钮；点击按钮会把对应内容作为下一条消息发出，每张卡片只能回答一次，刷新页面后仍显示已选结果。mod 画出的输入框与下拉框现在可以直接填写和选择。
- **Web UI 管理类页面焕新**：任务、插件、远程控制、设置、快捷键、文档、进程、统计、追踪、日志页面统一了页头、卡片、按钮、标签切换和开关样式，加载时显示骨架屏，空数据和出错时给出下一步操作，并加入适度的入场与反馈动效（系统开启「减少动态效果」时自动关闭）。快捷键页按分组展示、组合键逐键显示为键帽，录制时实时回显并提示冲突；微信、企业微信的绑定二维码改为本地生成，失败时提供重试和手动填写入口；对话中的正文、标题、代码、表格、工具名与过程信息统一为 13px。

### 🔧 功能改进

- **Bash / PowerShell 工具描述精简（#132427）**：两份工具说明去掉重复内容和低频细节，每轮常驻上下文分别减少约 51% / 33%（Bash 约 1500→730 token，PowerShell 约 1160→780 token）。同时明确：命令被用户、权限规则或安全策略拒绝后，不再换命令、换工具或换 shell 重试，而是如实说明。
- **PowerShell 语法提示按实际版本给出**：Windows 上会识别当前是 Windows PowerShell 5.1 还是 PowerShell 7+，只提示对应版本可用的链式运算符和默认编码，不再让 PowerShell 7 用户也被告知不能用 `&&`。
- **MCP 工具目录预取**：在首次提示词执行前异步准备 MCP 工具目录和会话专属工具描述，任务调度仅等待工具描述，实际使用 MCP 时复用目录预取的 singleflight，避免无关慢服务阻塞请求；MCP 权限过滤仍按请求生效，工具目录变化或连接替换时缓存自动失效。
- **内容搜索正则兜底重试**：正则中出现 `foo(`、`struct X {` 等不平衡字面括号时不再直接失败，而是把括号当作字面文本重试一次，并告知模型实际使用的模式，省去一次额外往返。
- **本地命令也先过敏感输入审批**：`/skills`、`/doctor`、`/cost` 等本地命令现在会先经过敏感输入审批，被拒时不再执行（有意收紧，fail-closed）。
- **跳过内部请求头时不再发送 User-Agent**：设置 `CODEBUDDY_SKIP_INTERNAL_HEADERS` 时出站请求不再发送 `User-Agent`（此前会由 axios 补回 `axios/<version>`）。依赖该 UA 做兼容或统计的第三方网关部署方需注意。
- **历史图片校验结果复用**：图片预处理对完全相同的输入复用校验结果，历史图片不再每次请求重新扫描（3 MB PNG 约 32ms → 3ms），对话与 Responses 两条链路均受益。
- **自动化回归测试跨平台增强（#89304）**：扩充打印、服务、网关与交互界面等入口模式的端到端覆盖，涵盖流式恢复、MCP OAuth 生命周期、安全中心命令规则与终端启动诊断；回归用例默认不再依赖公网内置市场，并修复 Windows 平台用例收尾时的无效等待；支持对已知缺陷做告警级标注，缺陷触发时相关用例降级为告警而不中断整体回归，缺陷修复后自动恢复强校验。

### 🐛 问题修复

- **AI 代码入库率（SaaS 企业账号）**：修复已开通入库率统计的 SaaS 企业账号下，CLI 写入的代码不计入入库率的问题；现在 CLI 会按企业的入库率开关正常上报 AI 改动，与 IDE 行为一致。
- **AgentLens 调用链丢失 span**：修复自建 OTLP 上报下遥测在对话进行中被重新初始化，导致 Agent 与工具调用 span 被整类丢弃、平台只显示模型调用 span 的问题；对话进行中不再中途重建上报通道。
- **检查点回退一致性**：修复首轮回退预览定位失败、可用替代版本未被实际恢复，以及文件恢复失败后仍截断会话的问题；分批恢复失败时补偿所有已执行批次。
- **`/clear` 保留会话设置**：保留模型选择、思考与上下文窗口覆盖、主 Agent 模式、工作区与工具配置以及安全审查设置，仅以全新的对话与执行状态开始；未设置模型覆盖的会话仍会采用最新默认值。
- **代码模式子代理派发**：子代理按自身预设的角色与任务边界执行，不再以主会话身份启动、偏离任务导致超时；同步派发的子代理返回结果可直接作为数据解析，误用后台任务查询时给出明确的修正提示。
- **重试耗尽后的提示文案**：响应超时且自动重试已耗尽时不再显示「正在自动重试」，改为提示检查网络、重试或切换模型；空响应改为明确的「模型未返回有效响应」提示，并给出重试、切换模型或反馈的建议。
- **会话回退目标选择**：修复异步更新后回退定位到第一个提示词的问题，只把用户提示词作为回退目标，重载或发送编辑后的提示词后保持所选状态，包括回退到开头的情况。
- **任务执行中插入消息的图片**：执行过程中插入的消息（立即发送）现在会保留附带的图片，模型可以直接看到图片内容；只发图片的插入消息也能送达当前这一轮。
- **图片与视频产物备份**：开启文件备份时，图片和视频生成工具在覆盖已有产物前备份原文件，并为新建产物登记回滚记录；修复云端图片和视频服务缺少文件写入依赖导致的产物保存失败。
- **沙箱追踪生命周期**：开启沙箱追踪的会话会在每轮开始时同步采集开关及保存目录，并在轮次结束、备份处理完成后刷新追踪记录；采集失败不影响对话和文件备份。
- **恢复会话后历史图片不显示**：修复恢复会话后历史消息中的图片无法显示的问题，保留原图和文件名；图片文件不可用时显示文字提示。
- **移动端资源管理器自动加载**：修复手机端进入资源管理器后文件树不自动加载、必须手动点击「打开目录」才显示的问题。
- **Web UI 页面细节**：修复日志页每行被拆成多列、文字挤成多行的问题，查看历史日志时不再被自动拉回底部；修复追踪时间线在窗口宽度变化时标签与条形错位、文字被拉伸的问题；修复插件市场选中单个市场时「重试」无效的问题；修复暗色主题下部分按钮出现多余灰色边框的问题。

## [2.162.0] - 2026-10-07

### 🎉 新功能

- **Web UI 会话导出（#140508 #140553）**：Web UI 输入 `/export` 可下载当前会话的对话记录与可用调试日志 ZIP；文件名包含完整会话 ID、时间和随机标识，便于区分多次导出。共享工作区日志仅保留提及该会话的行，归档附带敏感信息提示。

### 🔧 功能改进

- **长任务任务列表提醒（#140589）**：长任务中会适时提醒模型检查当前任务列表，减少因进度信息过时而遗漏后续工作；提醒不作为用户消息展示，也不会强制改变任务顺序。支持通过环境变量临时关闭，便于灰度回滚和效果对照。
- **zsh 未匹配通配符透传（#140480）**：默认 shell 为 zsh 时，命令中未匹配到文件的通配符（如 `grep --include=*.ts`）不再导致整条命令报 "no matches found" 失败，而是与 bash 一致原样传给命令执行，减少无效的重试轮次。

### 🐛 问题修复

- **Web UI 斜杠命令列表恢复完整（#140508 #140553）**：修复总线权威模式下命令目录更新被丢弃的问题，`/` 菜单不再只显示少量内置命令，后端下发的命令与技能会正常出现。
- **`/clear` 与 Web UI 会话切换即时生效（#140508 #140553）**：修复会话重置通知使用了新会话标识、导致前端把它当成其他会话事件而忽略的问题；`/clear`、`/resume`、`/fork` 现在会立即切换并刷新界面。
- **Web UI 新版本不再要求手动刷新（#140508 #140553）**：入口页改为网络优先，避免旧 Service Worker 一直返回上一版页面，新构建的菜单与交互刷新后即可生效。
- **新建智能体沿用用户默认配置（#140508 #140553）**：新建智能体优先使用用户显式设置的默认主智能体与默认授权模式，不再被上次临时选择覆盖。
- **Web UI 会话重置全端同步（#140508 #140553）**：修复会话重置后其他打开页面不跟随 `/clear`、收不到后续实时回复、已完成轮次无法按空闲态重载的问题；重置通知不再进入可回放历史。
- **Web UI 实时过程顺序与回放一致（#140640）**：修复 Web UI 多次工具调用时流式正文反复重取快照、阶段说明累加的问题；实时过程按思考、完整阶段正文、工具和结果的原始顺序展示，主对话过程默认展开、工具详情保持收起，最终答复完整可见。
- **ACP 连接释放后的资源占用（#140478）**：Web 界面或桌面端连接断开后，后台服务会及时停止向该连接推送对话与团队成员进度，长时间运行的服务不再因残留连接持续占用内存和 CPU，日志也不再被大量重复告警刷屏。
- **`/fork` 与 `/branch` 保留会话配置（#140439）**：分支现在会携带源会话的主 Agent（PTC 会话不再静默回落到 cli）、所选模型、输出风格与额外目录，不再复用源会话的运行状态和远程会话 ID；携带子代理历史的分支会明确提示不支持，不再生成引用损坏的子会话。
- **交互面板控制字符覆盖（#139725）**：修复模型输出中夹带回车等控制字符时，提问卡片和工具授权确认框内容被覆盖、显示不全的问题。

## [2.161.4] - 2026-10-06

### 🎉 新功能

- **Web 新建智能体身份卡**：Web 界面新建智能体时默认分配头像和名字，开口前可点头像从头像库换脸、点名字改称呼；对话开始后点顶栏头像和名字同样可以修改，所选头像随第一句话一起保存，主对话 CodeBuddy 的头像和名字不受影响。关联 #137919。

### 🔧 功能改进

- **自动化回归测试跨平台增强（#89304）**：加强 CLI 核心链路的自动化回归覆盖，包括会话恢复、权限续聊、内存压缩、插件钩子与 Windows 平台交互场景，提升版本稳定性。

### 🐛 问题修复

- **队友并发启动端口冲突**：修复队友（brokered job）并发启动时共享同一端口池导致的端口竞争问题，不再因 `listen EADDRINUSE` 停在「活着但不建会话」的僵尸态；稳定端口池现在只服务真正需要固定 origin 的交互实例，显式 `--port` 与父进程传入端口的优先级不变。
- **队友重启因会话未落盘而假死**：修复队友重启时目标会话从未成功创建导致直接报错退出的问题，现在会回退为新建空会话并进入可投递状态；用户显式 `--resume` 一个不存在的会话时仍按原语义报错。
- **`/compact` 在含图片对话中失败**：修复 `/compact` 在包含图片的对话中无法执行的问题，并在压缩失败时显示警告；折叠的终端对话中不再出现内部压缩摘要和过程消息。
- **Web UI 新建智能体状态异常**：修复 Web UI 新建智能体后主 Agent 模式胶囊消失、流式正文反复折叠，以及侧栏运行态和摘要更新不及时的问题。

## [2.161.3] - 2026-10-05

### 🎉 新功能

- **嵌入式宿主函数钩子**：嵌入式宿主可以通过函数钩子扩展输入、上下文和工具行为，扩展状态按执行作用域隔离。
- **工具按轮次延迟发现**：支持将内置工具、宿主工具和 MCP 工具按轮次设为延迟发现，同时保留工具权限、参数校验和审批检查。
- **Server 装载插件函数钩子**：Server 可从会话 dataFs 装载已启用插件的 functional hooks，与宿主 hooks 复用 Mods 引擎；模块状态、文件访问与清理归属各自会话。Headless UI 展示为无操作，提问仍等待宿主回调，工具授权沿用原有检查。

### 🐛 问题修复

- **未启用 mods 时启动失败**：修复未启用 mods 时 headless 和 JS SDK 因缺少 esbuild 而启动失败的问题；TypeScript/TSX mods 无需额外安装编译器即可加载，保留隔离执行和缓存；CLI 与 Agent Harness 的独立可执行文件不再内嵌 esbuild。
- **缺失的项目设置文件被反复打开**：缺失的工作区 `.codebuddy/settings.json` / `settings.local.json` 读取结果现在与其他读取结果一样被缓存，同一文件的并发首次读取共享一次磁盘读取，消除会话启动或预热进程激活后每个文件上千次的失败打开。
- **后创建的项目设置未及时生效**：创建（或删除后重建）工作区 `.codebuddy` 目录时会重新绑定监听并刷新设置；监听建立前已缓存的设置会在监听就绪后刷新一次。
- **Auto Memory 提取权限隔离**：任务完成后执行记忆提取时不再修改当前会话的权限模式，避免界面和后续任务异常继承 bypass。
- **Remote Control 权限归属**：复用交互会话时保持用户当前选择的权限模式，只有独立远程会话继续使用无人值守权限。
- **输入钩子等待期间取消无法结束请求**：修复输入钩子等待期间取消或拒绝后，请求无法结束的问题。
- **函数钩子重复执行与上下文串用**：修正函数钩子的事件校验、异步注册、重试和执行预算，避免重复执行或跨会话共享上下文。
- **钩子改写参数的安全校验**：工具及审批改写的参数继续经过原有校验和安全检查；取消审批不会执行工具，延迟工具也保留高积分强制审批。
- **工具参数与钩子事件字段重名丢失**：修复宿主或 MCP 工具的参数与钩子事件字段重名时丢失参数的问题，重试时同样保留原值。
- **Server 延迟工具审批与 Plan 拒绝反馈**：修复 Server 启用 functional hooks 后，延迟工具缺少「本会话允许」选项，以及拒绝 Plan 时丢失继续规划反馈、提前续跑模型的问题（包括延迟代理自身审批被拒绝的情况）；显式审批规则与高风险工具的逐次确认保持不变。
- **工具结果被误判为轮次终止信号**：普通及延迟工具均保留结果的原生结构，避免将普通 JSON 文本误识别为轮次终止信号；附加的私有上下文仅供模型使用。
- **WorkBuddy 内置插件市场更新期间安装失败（#134482）**：修复 WorkBuddy 内置插件市场更新期间来源与内容不一致导致的插件安装失败，保留自动更新能力，更新失败时继续使用已安装版本。

## [2.161.2] - 2026-10-04

### 🔧 功能改进

- **Agent View 列表与侧栏加载提速**：收集 Agent View 列表时不再为每一行打开不存在的 broker 与 display 边车文件（正常作业读取仍会检查当前端点，目录枚举失败时保留原有读取行为）；侧栏不再重复执行首次 Agent Home 加载与紧随其后的冗余兜底轮询，并跳过无关列表渲染与已折叠的隐藏行，页面可见时首次目录加载失败仍按退避重试。
- **`/btw` 侧问与子 Agent 交互增强**：`/btw` 改为独立侧问面板，仅按 `f` 才把选中的问题升级为带工具的主树 Agent 并向主对话汇报结果；选中的子 Agent 现在可以接收后续文本、排队消息与图片，已完成、失败、停止的 Agent 在选中期间保持可见，离开时保留 30 秒宽限期并支持显式清除。
- **自动化回归测试跨平台增强（#89304）**：E2E 用例跨平台化并消除外网拓扑依赖，提升 Windows 与类 Unix 系统下的一致性与稳定性。

### 🐛 问题修复

- **Agent View 工作区恢复与重绑**：仅在记录的目录或 Git worktree 能安全还原时恢复缺失的 Agent View 工作区，否则在启动时给出可操作的错误；已退出的 Agent 从侧栏进入时会被显式唤醒，深链与历史会话选择保持只读、不再重载会话文档；停止并重启后，所有已打开的 Agent 页面（含实时事件流）重新绑定到新的 Worker，会话身份保持不变。
- **Agent View 状态被过期活动覆盖**：逐轮串行化作业与进程注册表的状态更新，避免已完成、失败或手动停止的 Agent 被过期活动覆盖；空闲与回复摘要保持同步，不再闪现中间阶段或重载会话。
- **后台 Worker 回收**：浏览器保持被动 ACP 或 Jobs SSE 订阅时，已完成与空闲的后台 Worker 也能被回收，同时保留对进行中提问及其他请求的保护；由 Worker 自己用实时会话与任务核对过期活动作业，再重新开始空闲宽限期，而不是依据进程注册表推断空闲。
- **每轮跟进结果未同步到侧栏**：修复每轮完成的跟进结果未发布到所有打开的侧栏（与上一轮相同的回答被跳过）的问题；只读实时跟随者在会话流重连后可以补齐历史。
- **通用子 Agent 输入丢失**：修复在父 Agent 模式下运行通用子 Agent 时输入被丢弃、模型收到空消息的问题。
- **并行子 Agent 工具流归属错误**：修复并行子 Agent 的工具调用内容混入主对话流，以及网页内容分析偶发收到空输入的问题。
- **工具参数校验提示缺少类型**：延迟工具参数校验失败时展示实际类型和期望类型，同时不回显参数原值。
- **自定义模型配置提示无法直达**：修复自定义模型缺少接口地址或 API Key 时，客户端重启后错误提示里的「前往配置」无法直达该模型配置页的问题。
- **工具轮次追踪上下文丢失**：修复工具执行切换追踪上下文时丢失本轮 W3C baggage，导致子 Agent 请求场景回落为默认值的问题。
- **长会话恢复后任务标题被覆盖**：修复长会话恢复后已命名（含手动重命名）的任务标题被当成未命名会话、用最近一条消息重新生成并覆盖的问题；从会话中途分叉出的新会话仍会生成自己的标题。
- **运行环境重启后残留失效问题卡片**：stream-json 会话在运行环境重启后回放历史时，已中断的 `AskUserQuestion` 会被标记为已取消，不再留下可操作的失效卡片。
- **长工具执行后的 Trace 断链**：修复 stream-json 长工具执行期间 drainWait 请求覆盖会话追踪头、导致工具之后的模型请求与响应流脱离当前 Trace 的问题。

## [2.161.1] - 2026-10-02

### 🔧 功能改进

- **历史回放保留 Read 图片引用**：支持在历史回放中保留 Read 工具的图片引用，避免向 CloudAgent 重复传输 base64 图片数据。

### 🐛 问题修复

- **取消对话后续提问上下文丢失**：修复取消对话后继续提问时，上一轮问题和已执行的工具记录未完整进入后续对话的问题；现在会保留这些上下文，并明确告知助手前一轮已中断，避免误将其当作待继续执行的请求。
- **Server 库 Skill 混入内置命令**：修复 Server 库运行时 Skill 工具混入并尝试执行 CLI 内置控制命令的问题；保留真正的技能，并让提示词命令调用使用当前会话的命令目录。
- **带尾随数据的图片被判无法处理**：修复部分 PNG / APNG 动图和手机拍摄的 JPEG 在文件末尾带有额外数据时被整张判为无法处理、会话历史里只剩「图片无法处理」且模型收不到图片的问题；这类图片现在会按原样保留在历史中并正常发送给模型。
- **Server 拒绝执行计划后未结束提问**：Server 在拒绝执行计划后正确结束当前提问，保持 Plan 模式并等待用户继续输入；工具审批等待、自动重试与取消行为保持不变。
- **Server query 场景元数据未生效**：修复 Server query 的场景元数据未用于模型请求和遥测的问题；复用 W3C baggage，按请求隔离并由子任务继承，保留 CLI 原有的场景默认行为。
- **Server ACP 历史回放丢失 traceId**：Server 的 ACP 历史回放现在保留原请求的 traceId，恢复会话后仍可复制请求 ID；继续移除历史追踪的传播上下文，不改变实时请求的追踪。
- **专家团同时汇报导致重复总结**：修复多名成员几乎同时汇报时负责人只看到其中一条就给出最终总结、随后又被其余汇报逐条触发并重复输出的问题；同时到达的汇报现在会一起交给负责人当前这一轮处理。
- **专家团成员唤醒后消息无人处理**：修复成员被唤醒继续工作后运行期间又收到其他成员消息时，这些消息无人处理、成员一直停在「运行中」导致整个专家团任务无法结束的问题；现在这类消息会在成员当前一轮结束后继续处理。
- **可信文件操作审批标题显示为通用项**：修复同一文件的推定读取记录干扰可信删除或写入操作、导致沙箱审批标题显示为通用「访问文件」的问题；同路径可信操作覆盖推定读取时恢复「本次会话内允许此目录」选项，真实混合操作仍不提供目录授权。
- **Web UI 子代理状态误拨主对话**：修复 Web UI 子代理后台输出误入主对话、反复将主智能体状态从空闲拨回运行中导致闪屏的问题。
- **Windows `/copy` 中文乱码**：修复 Windows 下使用 `/copy` 复制中文等 Unicode 文本乱码的问题，并保留原始换行符。
- **WSL 粘贴 Windows 剪贴板文本**：修复在 WSL 中通过 Ctrl+V 或 Alt+V 粘贴 Windows 剪贴板文本的问题。

## [2.161.0] - 2026-10-01

### 🎉 新功能

- **新增错误码 4100**：本地自定义模型缺少接口地址或 API Key 时，请求不再发往供应商端点，直接返回 4100 与「前往配置」指引。此前缺少 API Key 会带着账号凭据发出请求，并被误报为「密钥无效」，把配置问题误导成鉴权问题。4100 及其之后统一作为 Agent CLI 错误码区间维护。指向本机回环地址的模型（如 Ollama 本地）本就不需要 API Key，保持原行为不受影响。
- **上下文监控**：新增常驻上下文占用率显示配置，并支持通过 `CODEBUDDY_SHOW_CONTEXT_USAGE` 环境变量开启。
- **`/btw` 侧问**：侧问与主会话隔离并保留最近历史，TUI 与 WebUI 支持历史浏览、快捷切换、复制、清空，以及升级为带工具的后台任务。
- **`/web` 命令**：在默认浏览器中打开当前会话的 Web UI。没有 Web UI 地址的宿主（无 loopback / 远端会话）只提示不可用，不会打开浏览器。
- **Web UI 每轮积分用量**：每轮对话结束后于回复底部显示本轮共消耗的积分（含子代理与图片、视频生成），刷新页面或打开历史会话后仍可查看。

### 🔧 功能改进

- **长历史会话恢复自适应限流**：会话恢复时按输出积压量自适应限流，避免图片与大附件回放导致进程内存溢出，同时保持正常消费场景的批量输出性能。
- **Server 生成层装配检查（#135550）**：补齐 Server 生成层中的 MCP 工具策略、模型重试与遥测依赖，保持 Shell 可选注入语义；编译和打包时检查源组件与生成层的依赖声明，保留 Effect 服务图类型，防止组件重构后遗漏接线。

### 🐛 问题修复

- **模型中断后误判空流**：修复模型已输出部分内容、紧接着上游报错时，若两段数据恰好一起到达，已输出内容会被整段丢弃、按「没有任何输出」反复重试并最终提示「上游返回空流」的问题；现在会保留已输出内容并从中断处继续。
- **`/rewind` 回退工作区外文件失败**：修复会话中写过工作区外文件（如临时目录下的草稿）后，`/rewind` 回退代码直接失败并报 「Checkpoint file destination is outside the workspace」的问题；工作区外的文件现在会被跳过，不再阻塞工作区内文件的回退，回退失败时 rewind 面板会显示原因，不再丢失输入框内容。
- **后台服务文件变更资源泄漏**：修复后台服务在工作区一次性写入大量文件（如切出新的工作副本、安装依赖）时内存暴涨、失去响应甚至需要重启的问题；同时修复 Web UI 关闭页面或断开连接后，文件监听、进程输出订阅等后台资源不会释放、越积越多的问题。文件树在变更过多时会自动整体刷新。FileChanged 钩子改为按批次依次执行：短时间内同一文件的多次变化会合并为一次触发；一次性变化的文件过多（超过 1000 个）时，这一波变化不再逐个触发钩子，改为记录一条告警。
- **Server 文件与网络规则审批（#136552）**：Server 文件与网络规则的 ask 审批通过会话 canUseTool 回调交给宿主，修复 Harness 中 Read、Write、Edit 一直等待且不展示审批的问题。取消只清理所属请求，迟到的授权不会带入下一轮；未绑定宿主的 CLI 保留原审批通道。
- **Server 沙箱备份通道遗漏（#135550）**：修复 Server 原生依赖装配遗漏沙箱备份通道，导致开启文件安全后 Write/Edit 覆盖失败或新建文件未登记备份的问题。同步工具权限、循环调用保护和手动压缩入口的依赖，并增加装配漂移与真实沙箱备份回归。
- **Server Plan 模式权限（#136158）**：Server 进入 Plan 时保留会话原权限，退出时沿用 ExitPlanMode 恢复；支持宿主在首次挂载前通过 `permissionModeBeforePlan` 传入原模式。普通工具审批将可复用的会话规则传给 canUseTool，Defer 审批展示实际目标工具，授权规则只覆盖该目标。强制审批与高风险命令不提供此会话授权建议。
- **会话级 MCP 工具描述（#136531）**：会话级 MCP 的 ToolSearch 目录复用 `_meta.shortDescription`，与全局 MCP 目录保持一致；完整描述仍用于工具搜索和调用定义。
- **skill 名称开头普通文本误触发**：修复在会话中输入以某个已安装 skill 名称开头的普通文本（不带斜杠）时，消息被误判为 skill 命令的问题：此前模型会收到 skill 全文而非用户原话，且下一轮后历史中的用户原始消息也被覆盖。现在只有显式输入 `/skill-name` 才会触发 skill 展开。
- **TUI 顶部 Web UI 链接**：修复 TUI 顶部栏展示的 Web UI 链接会额外拼接当前会话 id（`?sessionId=...`）的问题，现在直接展示配置的 Web UI 地址。
- **Web UI 智能体选择串改**：修复 Web UI 中在多个智能体之间切换时，权限模式和模型选择互相串改、切回后又跳成别的值的问题；现在每个智能体各自保留自己的选择，子智能体里的选择也不会再改写全局默认权限。
- **Web UI 源代码管理刷新（#136936）**：Web UI 源代码管理面板改为变化即推送：文件改动、提交、切换分支后约 0.4 秒内刷新，仓库无变化时不再反复扫描，大仓库下单个文件变化的刷新从约 1.8 秒降到几十毫秒；页面隐藏时暂停、回到页面立即刷新，旧版本服务端自动回退到定时刷新。同时修复含空格或非 ASCII 字符的文件路径、已暂存重命名文件显示异常的问题。
- **Windows 自动升级卡死**：修复 Windows 上开着 CodeBuddy Code 时自动升级经常失败、并可能让安装残缺的问题：之后执行命令会卡死，只能重启。现在开着窗口也能正常自动升级；万一安装仍然残缺，命令会立即报错并改用普通方式执行，不会再卡死。

## [2.160.0] - 2026-09-29

### 🎉 新功能

- **Web UI 原生智能体视图 v2**：Web UI 改为单条总线（`/api/v1/bus`）复用多路数据流，`journal` 以 `seq/epoch/volatile` 定序，订阅带游标续传、`ack` 即重放结束；游标不可续回时返回 `resync_required`，客户端重取快照后按 `asOfSeq` 重订阅。新增会话快照接口，一次返回消息分页、`inFlightTurn` 与待审批 / 待回答，客户端「先快照后订阅」，运行态只来自快照与 `turn` 事件。目录流改走总线（展示字段投影 diff + 同 tick 合并帧 + 15s volatile keepalive），总线就绪时停用旧 SSE、掉线自动回退；多个 Web UI 页面之间视为对等写者，同一会话可在多个页面同时打开并发送，写入由服务端 run queue 串行，TUI / `--acp` 等非 Web UI 客户端维持原有防双写者语义。行状态设 2.5s 最短停留（需要输入立即切换），默认 Agent 行的忙闲收窄到「本页连接承载主会话」；worker 在 `RUN_FAILED` 回到 idle 但进程仍存活时，job 行落成 `failed` 并冻结终结时间。
- **Web UI 动态工作流可视化**：启动工作流（如 `/deep-research`）后，对话中出现实时更新的工作流卡片，展示状态、当前阶段、分段进度、agent 完成数与 token 用量；输入框上方在运行期间显示等待状态，结束后自动消失。点击卡片或输入 `/workflows` 可在右侧侧边栏按阶段查看每个 agent 的指令、最近活动与结果，并支持暂停、继续、停止整个工作流或跳过单个 agent。同时修复工作流子任务的中间过程被平铺到主对话中的问题，并补齐工作流相关界面与审批卡片的中英文文案。
- **沙箱审批规则来源与目录授权**：沙箱审批现在提供实际命中的规则来源，支持客户端查看对应规则或保护机制；支持 macOS 非白名单目录直接删除的允许、询问、禁止设置（默认询问）；文件审批支持当前目录及子目录的会话授权，读、写、删除分别生效。
- **资料库上传（`LibraryUpload`）**：新增工具，把本机单个文件上传为资料库节点，支持工作区外的文件（附件常在 Documents / 桌面）；打开前解析软链并与 `fstat` 比对防替换，敏感路径由会话权限规则把关（工作区内静默、其余需授权）；上传后节点保持私有，不生成公开分享链接；大文件按流式上传，不整体读入内存。新增 `ProductFeature.LibraryUpload` 灰度开关（默认关闭），同时校验 endpoint 与登录态，关闭时工具不注册。
- **Server subscribe 支持多种输出格式**：`subscribe` 支持 `openai`、`messages`、`acp-v1` 与 `acp-v2` 四种输出格式。默认保持原有 `messages` 输出；完整 SDK 原始事件通过 `format: 'openai'` 显式选择，现有消费者无需修改；Harness 使用 `acp-v2` 直接投影原生事件，复用历史消息编码，移除 stream-json 中转。旧 CLI 入口保持原有行为。
- **`$.ui.log` 进入 chat view**：mod-plugin（function hooks）里的 `$.ui.log(text)` 现在会作为一条 assistant-role 消息进入 TUI / Web UI 的会话历史，与用户 / 助手消息同区渲染，语义对齐 function hooks 协议的 transcript 行为。此前 `[mod] <text>` 只写 stderr、TUI 里几乎不可见，现在改为 `<plugin>: <text>` 出现在会话历史里（headless / 无 chat view 的场景仍走 stderr 兜底，可追溯性等价）；`to === 'debug'` 通道保持只走 logger，不进 chat，避免污染 `--print` 的 stdout 契约。
- **后台工作流报告写回对话**：`/deep-research` 等命令启动的后台工作流完成后，会把最终报告写回对话，并像其他后台任务一样通知主 Agent，可随时按任务编号查看完整结果。

### 🔧 功能改进

- **后台任务完成通知更克制**：调整后台任务完成通知的提示措辞，任务跑完后不再要求助手回头翻查历史消息、自行推断「还有哪些后续步骤要做」，减少任务结束后的无谓额外动作；同时明确这类通知属于系统事件而非用户发言，避免助手把它当成用户的确认或同意后继续执行。取输出的指引保持不变。
- **`/btw` 与切换小上下文窗口时先压缩**：`/btw` 超过模型上下文上限时会先执行标准 `/compact`，再基于压缩后的上下文回答；TUI `/model` 在切换到较小上下文窗口前复用同一压缩流程；运行中的会话或压缩后仍无法适配目标窗口时会保留当前模型并提示重试。
- **错误上报带上实际域名（#132873）**：请求失败时，错误明细会带上这次请求实际打到的域名，方便按域名查看错误。
- **模型输入内存保护可配置（#135093）**：支持通过 `CODEBUDDY_DISABLE_MODEL_INPUT_MEMORY_GUARD=1` 关闭保护，并允许 `/compact` 在内存压力下完成上下文压缩。
- **后台 Shell 任务的 TaskOutput 默认增量返回**：TaskOutput 默认只返回上次读取后的新增 stdout / stderr，避免轮询时重复消耗上下文；可通过 `full: true` 获取当前累计输出快照。
- **会话恢复读取更快（#135192）**：使用有界异步分块读取会话尾部，减少逐行回调与插件、MCP 初始化争用事件循环造成的等待，同时避免为中大型会话加载完整文件；会话列表读取增加并发限制，并减少工具描述缓存命中的重复调试日志，降低启动阶段的资源争用和聚合内存峰值。

### 🐛 问题修复

- **内置插件市场不再每次启动重新下载**：安装后会正确记录版本，之后只在市场确实发布了新版本时才重新下载，启动更快、流量更省；同时会自动清理此前因进程中断残留在系统临时目录中的下载文件。
- **子 Agent 跟随主会话上下文窗口档位（#133811）**：修复 subagent（含 Agent Team 成员）不跟随主 Agent 上下文窗口档位选择的问题：主 Agent 切换到 1M 等档位后，新建或唤醒的 subagent 会自动同步该显式选择；主会话没有显式选择时 subagent 回落到自身模型的默认档，不会误继承主会话按其模型算出的有效预算。
- **Web UI 会话同步（#133784）**：新建会话、切换会话、链接直开恢复会话时立即显示历史，并实时收到其他端（含命令行）发到该会话的消息；同一会话可在多个网页同时打开并发送，不再提示「此会话正在其他窗口或设备使用中」；修复回合结束后会话偶发一直显示运行中、输入框卡在排队状态；回退对话后刷新页面，已回退的回复不再重新出现。
- **空流重试等待用量时断连（#124399）**：空流重试等待用量时如果连接断开，这一轮仍会自动重试，不会被当成一条没有正文的正常完成。
- **工具管控入口下线期间禁用设置不再生效**：智能体工具管控入口下线期间，已保存的工具与 MCP 禁用设置不再生效，避免工具被禁用后无法通过界面恢复。
- **Agent frontmatter 数字名称兼容（#101095）**：兼容 Agent frontmatter 中未加引号的有限数字名称和描述，避免文件存在但管理目录遗漏。
- **预热进程激活后读取实时环境**：修复预热进程激活后仍使用待命阶段环境变量和启动参数快照的问题，确保首轮工具描述及运行时配置使用当前会话值。
- **Product 工具描述模板名被直接发给模型**：修复 `/server` 使用逐轮 Product 时，工具描述模板名被直接发送给模型的问题；模板读取与工具描述缓存遵守执行配置边界，避免并发会话串用同名描述。
- **沙箱批量删除权限串用（多会话切换）**：默认权限会话不再借用其他会话的 fullAccess 跳过确认，完全访问会话也不会受其他默认权限会话影响而额外请求审批；批量删除审批、保护记录与审计始终归属命令执行的会话，需要确认时会等待用户允许后再重跑，拒绝后保持拦截。
- **PowerShell / Grep / Monitor 沙箱执行的会话归属**：确保删除保护、审批和后台任务属于实际执行会话；PowerShell 的 Server 沙箱审批复用 canUseTool 回调；取消后不再接受迟到的审批或发起新的 Shell 执行及本机重跑。
- **上下文压缩摘要污染用户消息身份（#72511）**：修复上下文压缩摘要污染真实用户消息身份，以及内部恢复续跑误触发 Sandbox 初始化和规则同步的问题。
- **sandbox-cli 输出与退出事件丢失**：修复 sandbox-cli 快速执行时输出和退出事件可能丢失、工具持续等待的问题；管道和 PTY 执行在响应到达时同步注册进程句柄，保留连续到达的输出与退出状态。
- **Sandbox Shell 懒加载遗漏事件**：Sandbox Shell 在组件初始化时注册反向监听，避免等待会话就绪期间遗漏事件；重启继续复用原监听。
- **Monitor 与 Bash 一致遵循 `usePty`**：Monitor 与 Bash 一致遵循宿主的 `query.options.usePty` 选择；未指定时保留 CLI 原有行为。
- **Server 无 prompt 的 compact 请求身份**：修复 Server 无 prompt 的 compact 操作未登记请求身份、导致压缩历史条目的 conversationRequestId 被上一轮覆盖的问题；维护操作复用内核的请求登记机制，与当前 runId 保持一致。
- **Server ACP 事件状态与关闭清理**：修复 Server ACP 工具参数增量、权限模式变更与重订阅事件状态；恢复读取会话时的 Agent 身份，减少无订阅者时的事件处理，并在关闭时取消 shell 快照进程。
- **Server 把普通文本中的客户端引用误显示为文件**：实时回显和历史回放保留文本内容，显式资源引用、图片和附件继续还原；旧 CLI 的默认引用解析行为不变。
- **Server 插件 Agent 组合**：Server 会话复用 CLI 插件 Agent 组合逻辑，正确展开 welcome-mode 与 interaction-mode 的模板，并应用工具声明（包括显式空列表）；插件模板读取遵守会话挂载的 dataFs，多会话模式选择互不影响，普通 CLI 的插件优先级保持不变。
- **Server 完整 stop 后支持同进程再次 start**：每次构建独立容器与 Effect 服务实例，恢复启动时覆盖的环境配置，并等待旧执行任务结束；关闭失败时拒绝重建。Server 文件锁仅在持锁期间注册退出清理，最后一个锁释放后注销自身监听器，避免 Harness 关闭后在宿主进程留下信号监听。
- **Server 沙箱「本次会话内允许」串会话（#134978 #134979）**：修复 Server 沙箱「本次会话内允许」未复用或误写到其他会话的问题；审批读写绑定到执行所属 Session，保留命令与工作目录的授权边界；Server 的 canUseTool 传递与 CLI 相同的沙箱展示信息，并复用原有目录授权校验。
- **Server 关闭崩溃**：等待 shell snapshot 预热回调完成后再释放内嵌 Server 运行时，避免关闭时崩溃。
- **会话级 MCP 工具未出现在 ToolSearch 清单（#134992）**：修复 `/server` 通过 `query({ mcpServers })` 注入的会话级 MCP 工具默认延迟加载后未出现在 ToolSearch 清单的问题；清单随工具变更、配置替换和移除刷新，并保持会话隔离。
- **Web UI 工作目录未同步**：修复 Web UI 从 CLI 启动进入后工作目录未同步的问题：默认 Agent（主对话）的家目录跟随当前 CLI 启动目录，不再停留在历史目录；侧栏该行的时间改为显示主会话最近一次用户发言的时间，不再回落成创建日期。
- **工作流与多任务派生 Agent 未完整继承主会话模式**：修复工作流和多任务派生的 agent 未完整继承主会话模式的问题，并将工作流进度留在工作流视图中；同时恢复主界面通过方向键选中、回车进入普通 Agent 的操作。
- **大型仓库创建工作树超时残留**：修复在大型仓库中创建工作树耗时过长被中止后，残留的半成品目录与分支导致后续无法正常重新创建的问题；创建工作树的等待时间也相应放宽。

## [2.159.0] - 2026-09-28

### 🎉 新功能

- **技能清单按目录分组展示**：Skill 工具的 `<available_skills>` 现按技能所在目录分组（每个目录一行 `skills under folder`），条目精简为「名称: 描述」，不再暴露技能文件路径；单条描述默认字符上限由 150 提升至 200；总预算不足时优先压缩描述，必要时从末尾省略条目并在末尾提示 `Omitted skills: N.`。

### 🔧 功能改进

- **ACP 自动重试与 meta 提示**：ACP 网络自动重试时在 `agentPhase` 上带 `retry.reason=network`，接入方可直接识别重试原因；`session/prompt` 支持 `isMeta`，模型可见但不作为用户消息展示、广播或回放。
- **智能体头像更灵动且状态更清晰**：所有头像保持原本鲜明配色；闲置状态以舒缓动作呈现，活动中与等待关注状态通过更快的动作节奏和既有绿色/黄色状态点区分，不添加外圈光晕，也不降低透明度或饱和度，同时继续尊重系统的「减少动态效果」设置。
- **新建与组队头像更易区分**：普通头像扩展到 15 款；新建智能体优先选择当前使用较少的款式并持久化，房间和频道内再对冲突头像做稳定错位分配。
- **关联模型路由完善**：完善 GPT、Gemini 的 `lite` / `reasoning` 映射，并在提供新一代轻量模型的产品配置中优化 DeepSeek V4 系列路由；为缺少映射的 Hy4 IOA 与默认模型补充安全兜底，同时保持其他国产模型现有路由不变。
- **Skill 工具描述预算固定为 8000**：`<available_skills>` 列表整体（目录分组行 + 条目 + 省略行）的字符预算固定为 8000，不再读取 `CODEBUDDY_SKILL_TOOL_CHAR_BUDGET` / `SLASH_COMMAND_TOOL_CHAR_BUDGET` 环境变量覆盖，保证任何宿主环境下列表体上限一致、超出即按 per-entry cap → 均分 → names-only → 尾部省略逐级收敛。

### 🐛 问题修复

- **Web UI 智能体配置切换不持久**：修复 Web UI 智能体模型与权限模式切换不持久的问题：配置按智能体写入状态存储并经 ACP 应用，打开模型下拉和刷新页面不再回退用户默认；权限模式直接更新 live Session 并保留覆盖值；新建智能体继承当前用户/工作区有效配置，旧智能体从主 Run 的持久启动参数自动补齐配置；嵌入智能体的目录 chip 显示真实固定 cwd。
- **并发编辑同一文件时会话卡死**：修复同一轮对话中并发编辑同一个文件时，会话可能长时间停在「修改中」、CPU 占满单核且无法停止的问题。文件快照备份不再与并发写入相互干扰；备份期间文件被外部改动时会记录告警，便于排查回退内容异常。
- **文件回退可能拿不到修改前内容**：此前快照备份写入失败会被忽略、修改照常进行，回退只能得到修改后的版本。现在备份建不出来会直接拦下本次修改并给出明确原因，文件保持原样。路径指向目录或特殊文件时会直接给出准确的路径错误，不再误报成备份故障；目录和特殊文件也不会在备份目录留下空文件。
- **PTC / Code Mode 下 `/rewind` 无法回滚文件**：这些模式下的文件编辑现在会正确创建历史快照，`/rewind` 面板不再对有实际改动的检查点误报「No code changes」，会列出改动文件并显示准确的 +N/-M 行数变更，且能通过「Restore code」把文件还原到编辑前的状态。常规模式行为不变。
- **Auto mode 权限判定**：修复强制推理模型在 Auto mode 下无法完成权限判定的问题，以及非交互 Auto mode 下安全操作被错误拒绝的问题。
- **Web UI 流式渲染闪动与跳动**：修复工具执行结束时结果区瞬间消失导致消息流上跳、思考过程完成时丢失用户已展开的阅读状态、含数学公式的正文被误判成表格而拆断等问题；长回答改为按已完成段落增量渲染，正文以稳定速率匀速流出并在末尾显示光标，不再成段跳出。
- **ESC 取消需要按两次**：修复 Web UI 中按 ESC 取消当前轮次需要按两次才停止的问题。
- **从非命令行入口注册系统服务**：修复从非命令行入口注册系统服务会写入无法启动的配置，以及把测试运行器等无效入口写入系统服务后反复启动失败的问题。
- **Web UI 右侧面板与本机文件链接**：修复切回智能体对话时可能同时出现两个右侧面板、在内嵌对话点击本机文件链接导致黑屏的问题；`file://` Markdown 链接统一在父页面右侧工作台打开，SVG 默认使用与图片一致的预览模式。
- **进程内 Agent Harness 使用 sandbox-cli**：修复 broker 因读取不到 CLI 的进程级当前会话而拒绝 Bash 文件访问的问题。broker 现在按实际执行中的 shell 调用校验会话与工具调用，并恢复该轮的异步上下文；shell snapshot 的进程退出清理也不再访问已释放的 Agent 运行时。
- **未显式选择模型时可能自动跑在预览模型上**：此前该场景按智能体声明列表的顺序取首个可用模型，而声明列表头部是模型选择器用的档位占位（默认位/快速/均衡/极致），当前环境没有对应模型时会被逐个跳过，于是自动落到列表里第一个真实模型。现在改为优先使用产品标记的默认位，没有则按当前环境下发的模型列表顺序取首个可用；智能体自身声明了具体模型时行为不变。
- **启动后首次拉取远端配置被拒**：修复首次拉取远端配置时 User-Agent 缺少产品品牌名、被服务端校验拒绝返回 400 的问题。此前产品配置尚未就绪时客户端标识会回退成安装包名，导致首屏那次配置请求失败；磁盘缓存未命中时会直接得到空配置，可用模型列表随之退化。现在首次请求与后续请求的 User-Agent 保持一致。
- **多截图对话提交立即失败（#132615）**：修复带多张截图（约 10 MB 以上）的对话提交后立即失败、报 `Request body larger than maxBodyLength limit` 的问题：此前 CLI 本地这一跳会在 10 MiB 就自行拒收，与其自身 100 MB 的接收上限不一致，重试也必然复现。内容体积确实超出服务端上限时，现在会自动移除过大的图片或截断较早的对话后继续作答，并由 AI 说明被省略了什么；无法自动恢复时才提示实际体积和处理建议，不再抛出内部传输错误信息。
- **长会话追踪数据内存占用**：限制长时间会话的追踪数据内存占用，降低服务进程因追踪数据持续增长而异常退出的风险。
- **macOS 后台服务启动失败重试频率**：限制 macOS 后台服务启动失败时的重试频率，避免失效的 CLI 路径持续拉起进程并快速写满错误日志。

## [2.158.0] - 2026-09-24

### 🎉 新功能

- **内置模型目录更新**：更新内置模型目录、可用范围、上下文能力与计费信息，并同步图像和视频生成模型配置。
- **Web UI 用户设置与工作空间设置**：用户设置与 CBC 配置模型保持一致并支持搜索；智能体右键菜单新增工作空间设置，可在右侧工作台按智能体工作目录编辑，相同工作目录复用同一配置，并可恢复为继承用户设置；智能体侧栏只保留全局导航头像，工作空间设置与对话导出统一收口到智能体右键菜单，后台和已完成智能体可直接导出对应转录；修复右键菜单二级分组在鼠标离开后不关闭的问题。
- **WebUI 编辑器视频预览**：打开 MP4、WebM、OGV、MOV、M4V、AVI 和 MKV 视频文件时，使用浏览器原生播放器直接预览，并提供播放、进度、音量和全屏控制。

### 🔧 功能改进

- **同步子 Agent 支持可选墙钟超时（#129530）**：用 `CODEBUDDY_SUBAGENT_TIMEOUT_MS`（正整数毫秒，上限 `2147483647`）启用后，同步前台子 Agent 超过该预算仍未完成时会被终止，并把超时结果交回主 Agent 继续处理，主 Agent 不再无限等待。**不设、留空、非法值或超过上限均不启用**（保持原有无限等待行为）；后台、detached 和 Team member 不受此超时约束。
- **macOS 沙箱压缩包创建回退**：通过 zip、rar、7z/7zz/7za 创建或更新单个普通压缩包，以及通过 tar 创建压缩包时，接入文件备份与回退登记；分卷、删除源文件、解包等未覆盖模式保留原命令行为并提示回退限制。zip 空字符串目标保留原命令行为，并明确提示未接入回退；修复 zip 多字符选项被误判为短选项组合的问题；使用日志参数时明确提示未跟踪回退，避免将日志路径误登记为压缩包；对包含 lf 的 zip 选项串增加保守保护，统一提示未跟踪回退，合法的 ll 与 f 组合可拆为独立参数保留回退跟踪。

### 🐛 问题修复

- **A2A 任务被调用方取消后，stream-json 终态被报成执行出错**：此前取消借用 `error_during_execution` 终态，并附带 `errors: ["Turn cancelled"]`。下游 sandbox-proxy 会把 `errors` 当作回复正文转给端侧，用户看到一行 `Turn cancelled`，结束原因还被映射成"拒绝继续"。现在取消不再算错误，对齐同类 Agent CLI 的约定：终态为 `subtype: "success"`、`is_error: false`、`result` 为空，并通过新增的 `terminal_reason` 字段说明中止发生在哪个阶段：`aborted_streaming` 表示停在模型输出上，`aborted_tools` 表示停在工具执行上。取消终态同样不会带上上一轮的答复或会话上残留的结构化输出。
- **A2A 取消时如果恰好有工具在等审批，终态被报成权限被拒**：这种情况下终态此前是 `Permission denied for tool(s): unknown`，把取消说成了权限被拒。现在同样输出取消终态，`terminal_reason` 为 `aborted_tools`。真正的"拒绝权限并中断"仍然按原样报权限被拒。
- **端侧点停止（控制请求 `interrupt`）的终态现在也带 `terminal_reason`**：其余字段不变，消费方不需要再猜这一轮是不是被中断的。
- **#127888 stream-json contextWindow 入口放开**：`set_config.contextWindow` 只校验为正整数，不再按 CLI 本地模型目录校验档位（本地目录缺失/滞后时会误拒上游合法档位）；`session_id` 指定哪个会话就写哪个会话。档位是否生效仍由消费端按当前模型档位判定。
- **企业模型列表 404**：endpoint 带 path 前缀（如沙箱 `http://auth.proxy/codebuddy`）时，`/console/enterprises/{id}/config/models` 请求丢掉前缀导致 404。改为交给 baseURL 拼接，保留前缀。
- **Agent Home 消息投递**：目标会话忙碌或尚未恢复完成时，收件箱会记录明确的等待阶段与原因；进入空闲后立即触发消费，投递或确认失败时保留消息继续重试。频道轮转和成员显式点名不再跳过被空闲回收的成员，后续接棒人会通过 SSE 持续展示"正在处理"。Job 详情现在可查询非空收件箱的 queued / processing 状态和最老消息等待时长。
- **Agent Home 唤醒审计**：将已入队但等待唤醒的消息从 `wake_skipped` 拆分为 `wake_deferred`，并让催办事件携带 messageId 和实际投递结果。
- **PTC 后台命令指引**：明确使用 `Bash({ run_in_background: true })` 承载会话内后台任务；文档补充需要跨会话存活时的 systemd user unit 用法，避免依赖裸 `nohup` / `setsid` 进程。
- **PTC 恢复回归**：补充长会话冷恢复测试，确保残缺 session-meta 不会令 PTC 回落 CLI，恢复后仍保持 REPL-only 工具面。
- **手动压缩重入**：主任务仍在执行或等待工具确认时触发手动压缩，会等主任务空闲后再开始，不再与当前回合抢跑，压缩摘要也不会泄漏成普通对话消息。
- **压缩后续写完成态**：自动压缩后的续写正常结束时，不再被误报为用户取消。
- **压缩边界展示**：消息前压缩和触顶压缩的边界会立即收进静态历史区，不再等助手回复后才收起；重绘前先刷新顶部栏，切换模型后顶部栏不会停在旧数据。
- **空流重试积分统计**：对话因空流自动重试时，已经产生的积分也会计入本轮消耗，聊天展示与账单保持一致。
- **对话中途追问上下文丢失**：修复"发送但不中断"的消息在触发工具后从后续模型上下文丢失，确保最终回答持续包含用户追加的问题。
- **`plugin_status` 状态上报默认关闭**：改为默认关闭，仅 CLI UI 版本默认开启，并继续支持通过环境变量显式覆盖。
- **自定义 Agent 文件链接边界**：自定义 Agent 的运行时加载与管理清单使用相同的文件链接边界，跳过指向 agents 目录外的文件链接，并保持项目级 Agent 优先于同名用户级 Agent。
- **stream-json 长会话请求身份稳定**：修复 stream-json 长会话中后台任务通知导致请求身份变化、终态无法匹配而阻塞后续请求的问题，并隔离迟到的上一轮结果，避免提前结束新请求。
## [2.157.0] - 2026-09-23

### 🎉 新功能

- **CLI 白牌定制**：支持通过 `customization.json` 定制 CLI 的软件名称、启动 Logo、品牌配色、EndPoint 网关、遥测上报端点、产品内链接、内置插件市场与配置目录，面向专享版 / 私有化交付；支持 npm 包形态（离线 tgz 分发）与 Bun 二进制形态（单文件可执行、定制配置编译期嵌入防篡改）两种定制出包方式；升级策略可按客户禁用自动更新或指向客户自建升级源；定制目录名 / 指令文件名与官方不同时，可按需回退读取存量配置与记忆。
- **录音文件识别内置工具**：可将本地音频文件转写为带时间范围的文本，支持 wav/mp3/m4a/flv/mp4/wma/3gp/amr/aac/ogg-opus/flac 等常见格式，单文件时长 ≤5 小时、大小 ≤1GB，覆盖中文、英语及多种方言。工具自动上传音频、内部提交异步转写并轮询，用户无需自行提供链接或查询进度；识别失败、文件无效或超时会返回明确说明。该能力为计费工具，可由宿主开启高积分前置确认（本次确认 / 会话内始终允许 / 拒绝），默认关闭，通过产品配置或环境变量开启。
- **资源管理器文件传输**：支持将本地文件拖拽上传到指定目录并显示文件数与字节进度；目录可通过右键菜单下载为 ZIP；并可从文件或目录所在位置直接打开终端。
- **Output Styles 能力增强**：新增内置样式，支持 `/output-style <style>` 直接切换并写入项目本地设置，无界面模式可列出并标记当前样式；自定义样式支持用户级与 Git 仓库内嵌套项目目录，距离当前工作目录最近的同名定义优先，插件样式支持独立的 `force-for-plugin` 语义；前台 fork、内部 fork 与后台 fork 均继承当前样式。
- **目标（/goal）的 ACP 宿主控制通道**：新增宿主控制方法，可让目标立即暂停 / 继续 / 清除 / 改条件，以及只读查询当前目标快照，语义与 Web UI 接口一致但不进 prompt 队列，做到秒停；没有活跃回合时（暂停、清除、达成）以及历史回放结束时，目标状态帧同样送达会话级连接，宿主状态条不再停在旧状态；换进程后目标状态可由宿主快照与 history 恢复执行镜像。
- **Server 宿主接入能力**：Server 复用现有 Agent、SessionStore 和插件加载器，提供空会话创建、只读历史与目录、轮内追加、压缩、回退和下一轮组件刷新入口；query 支持宿主 Product、认证刷新、Hook、自定义工具、标准 MCP Transport 和会话 Sandbox 配置；subscribe 补充工具、子任务、配置、目录、用量和轮次事件及 drain / closed / unsubscribe；Server 启动不再隐式连接宿主命令行或 CLI 用户配置中的 MCP，避免嵌入宿主重复启动 MCP 进程。
- **运行时安全检测（企业托管）**：新增 Prompt、工具调用前和工具结果三处运行时安全检测，支持告警、默认拒绝审批、拦截与本机审计记录；本机审计只记录命中事件，文案写用户的原始指令。
- **stream-json 上下文窗口选择**：`set_config` 支持通过 `contextWindow` 在首条消息前或会话运行时选择模型支持的上下文预算，保持原配置请求与逐键响应格式不变。
- **客户端自定义 header 透传扩展到 ACP 链路**：客户端可随 prompt 透传自定义 header 到官方 model gateway，与 stream-json / print 链路共用同一套前缀白名单与门控策略，ACP 侧按轮次写入并在轮末还原，杜绝跨轮或后台请求残留。

### 🔧 功能改进

- **ToolSearch 检索质量提升**：优化工具检索的分词与排序，补齐 camelCase 命名工具（如部分第三方 MCP）的召回，并对低相关结果加相关性下限过滤，显著减少返回的无关工具；新增可选环境变量 `CODEBUDDY_TOOL_SEARCH_MIN_SCORE_RATIO` 调节相关性下限（默认 `0.3`）。工具发现的排序策略进一步去噪调优，工具名按单词拆分索引的能力新增运行时开关，可快速回退到默认分词行为。
- **任务闭环与循环检测**：完成任务后自动提示剩余工作或最终验证要求，减少在实现、测试或交付前提前结束；识别仅 JSON 参数键顺序不同的重复工具调用，减少无效调用。
- **定时任务执行记录管理**：执行记录支持单条和批量删除，执行中或排队中的记录受保护不可删，清理不影响定时任务本身或关联对话；每条记录展示实际执行它的实例类型与所属会话，并支持跳转到关联对话查看实时过程或完整结果；流程图、时序图等 Mermaid 图表支持放大 / 缩小、适应视图和全屏查看。
- **频道任务板读写分权**：派生会话（子代理 / fork / Agent Teams）现在可以读频道任务板，避免重复别人已在做的事；认领、完成、派发等改板操作仍只在同事自己的主对话里进行，保证一个任务只有一个负责人。
- **频道发言归属**：以同事身份在频道发言只发生在该同事自己的主对话里，子代理 / fork / Agent Teams 会话不再能冒充同事对房间讲话；默认 Agent 以用户身份进频道说话不受影响。
- **Agent Home 工具宿主判据放宽**：会话级判据不再要求进程带 `--serve` 宿主指纹，内嵌 Web UI、同事 job 等形态都能拿到频道与协作工具，方便宿主按自身形态接入。
- **团队 agent 与子代理跟随会话模式**：会话内切换 Agent Mode（标准 / PTC / 极简 / 创造 / 自定义主模式预设）后，teammate 与子代理（含 Explore 这类任务型子代理）都按同一模式运行；子代理的沙箱按自身定义收窄，只收窄不放宽，REPL 的工具目录、发现接口与调用路径共用同一份身份判据。
- **REPL 调用标题**：加强 REPL 工具 `description` 参数说明，引导模型总是给出简短的动作标题，时间线据此展示该调用的意图。
- **Browser 导航接入安全中心网络规则**：内置 Browser MCP 显式打开网页和 URL 导航接入安全中心网络规则，支持询问用户授权，沿用 IPC 失败时放行的行为。
- **子 Agent 并发上限**：子 Agent 默认最多同时运行 20 个，并支持通过 `CODEBUDDY_CODE_MAX_CONCURRENT_SUBAGENTS` 调整；完成、失败、取消或终止后会自动释放并发槽位。
- **连接复用与启动性能**：ACP HTTP Server 空闲 keep-alive 回收窗口从 5s 放宽到 75s，并使客户端按服务端声明的窗口自适应淘汰，恢复 loopback 连接复用且不回退旧版行为；Server 启动计时复用现有 profiler，支持宿主名称与分段统计。
- **发布产物精简**：cbc 的 full 与 headless 产物不再拆分 lazy chunk，分发文件数与升级期间的 chunk 合并复杂度明显下降；lite-wb 保持既有 lazy 化不变，用于压低 standby 常驻内存。
- **Server 构建与组件复用**：Server 提供独立 default 工具预设构建目录，宿主可共享组件模块图及 Effect 依赖，现有 Cloud/workbuddy 预设保持独立；复用 lite-wb 的惰性加载和模型目录压缩，并修复跨平台产物中的构建机路径残留。
- **Daemon 任务回执**：Agent Home 支持逐项、仅整批或关闭自动完成回执，同时保留频道事件与负责人收口流程。
- **完成通知与模式切换**：新增 Windows 系统通知支持，云端 / 无桌面环境下提示并引导改用浏览器通知（设置页显示浏览器授权状态）；侧栏的「单干 / 组队」切换器收成纯图标，使用搜索时也保留切换入口。

### 🐛 问题修复

- **模型列表不再回落旧清单**：修复在容器、远程开发机等凭据读取较慢的环境下，新开终端时 `/model` 列表退化成随包内置旧清单、看不到最新上线模型的问题，登录完成后的补拉现在会立即生效。
- **长会话恢复后主 Agent 模式失效**：会话身份（主 Agent 模式、多任务 overlay、A2A 上下文、宿主类型）快照现在会在恢复时补读文件头、并随历史增长周期性补写到文件末尾，身份可自愈；关闭多任务模式能真正落盘，不再重开会话又变回开启；中途开启多任务模式不再把主 Agent 打回标准模式，字段按字段继承、新值优先，不会再被视野不全的写入方擦掉。
- **任务标题稳定性**：上下文压缩后保留已生成或用户修改的会话标题，阻止后台任务通知、监控事件等系统信封被误用为标题；WorkBuddy 任务标题恢复自动生成，统一清除隐藏的系统提醒，并在用户输入与后台通知分块共存时优先识别明确的用户查询，同时继续排除混合通知和格式异常的消息。
- **本地多图片对话**：提高 ACP 本地 HTTP 请求体上限，避免大量图片经 base64 编码后触发 `request entity too large` 并导致发送失败。
- **空流与失败切备**：Completions 空 Readable 切一次备站，避免主站连打；上游只吐思考并以 `finish_reason=error` 收尾时会话层恢复最多 1 次重试；Agent Team 后台成员遇到模型空输出时不再永久卡在 running/retrying，成员任务如实失败收口并通知，空输出也不再被成功率遥测误记为成功。
- **空闲 job / worker 回收**：回收判定收紧为「真的在跑」，attach 只在 1 小时内钉住回收，无 pid 的僵死行空闲 24 小时后收成终态，不再长期占用内存或显示「运行中」；回收拒绝原因按可检索的原因码记日志。
- **长任务内存占用**：修复 Trace、缓存及预览截断文本仍保留完整父字符串、导致内存持续增长并可能堆溢出的问题，保持原有展示长度与 Unicode 文本内容。
- **Team 子任务授权恢复空转**：工具批准写入产生中断的准确运行状态，来源运行已结束或已释放时不再触发恢复；同一组未决工具调用无任何实际进展时最多重复恢复 3 次即阻断，正常等待用户审批不计入；延迟派发模式下的子任务排队消息可正常消费；同 ID 会话不再被旧任务清理误释放。
- **团队 teammate 权限档与审批**：spawn 时把 leader 当前生效的权限档显式带给 teammate，teammate 启动时真正落位（`plan` 不外传）；需要审批的 teammate 会把审批通过团队通道转给 lead，由用户作答后继续；同事执行体取值做白名单校验；启动参数解析不再把「值」当成「旗标」，审批请求不会被送到非预期地址。
- **频道轮转唤醒与交接**：修复非 @ 用户发言后唤醒队列断链的问题；接力叫到不可达成员时当场交棒给下一位，完全没送出去的唤醒不再占用自动唤醒限速预算；@ 点名成员未回频道发言时按固定间隔催办、满额后按弃权推进队列；成员进程不在时显示头像红点并支持一键重启，轮次收场在频道里落一行系统消息说明原因；交棒 / 催办不再被回执误写成「被 @ 点名」。
- **频道工具可见性与身份归属**：频道发言、任务板、私信工具对所有 Agent Home job agent 可见，含尚未被认领的后台任务；发言、改板、私信等动作要求真实身份，认不出同事身份时明确拒绝，不再以用户身份代发；派生会话不再能以同事身份私信别人或写入用户主对话邮箱；会话身份登记上限淘汰改为保留最新记录。
- **Agent Home 生效范围**：在 Web UI 打开 CodeBuddyS 后，终端里新开的对话不再被当成 Agent Home 主对话，不再注入同事花名册 / 频道提醒或提供自治工具，同事完成回报留在队列等 Web UI 会话打开时投递；同事身份改为按会话持久登记，job 内派生的会话与新建智能体首轮未完成认领的窗口不再丢失频道能力。
- **提问与权限面板重复渲染**：修复 Web UI 回答提问后，会话历史回放（刷新页面 / 切换会话 / 断线重连）可能把同一提问再渲染一次的问题；回放窗口内处理过的审批面板不再以未处理状态复活，也不会再拦住输入框。
- **WebUI 频道消息与多会话**：频道消息气泡限制在共享阅读宽度内并自然换行，使用与普通聊天一致的方向性圆角；上一对话持续运行时仍可新建并切换对话，晚到的会话事件不会再串到新选中的对话。
- **切换智能体后工作目录串台**：每次切换都按当前所在会话重新确定工作目录，切回主对话立即恢复该会话自己的目录；归属目录取不到时统一回落到启动目录，不再跟着「添加目录」的结果走；目录入口直接展示会话创建时确定的固定目录与说明，避免「添加目录」被误读为切换工作目录。
- **会话可靠性与对话状态**：强化后台进程身份核验与恢复清理，避免进程号复用导致状态误判；统一 Web 与终端中的思考、工具调用、运行阶段和恢复状态展示；修复移动端浏览器安全区、动态视口、Markdown 表格及输入区宽度问题，消息内容与输入框保持同宽。
- **工作区文件回退与重命名**：修复冷打开历史会话后、未先发送消息时文件回退因沙箱规则未准备而失败的问题；修复通过 Bash 改名的文件未进入产物回退预览的问题，回退时恢复原路径并移除新路径。
- **后台子代理取消**：主 Agent 执行中按 Esc 会同时停止其后台 subagent，不再需要逐个进入成员视图取消。
- **终端审批选项**：修复终端审批选项低频出现方向键可移动、但回车和 Esc 无法生效的问题。
- **Agent 管理目录符号链接**：修复 Agent 管理目录遗漏符号链接或 Windows junction 子目录中的定义，使 `agent/list` 与运行时加载结果一致。
- **定时任务执行记录不再「复活」**：重启或状态合并时，若磁盘上的终态记录已被删除或被保留策略清理，本地缓存不再把它写回列表。
- **`@文件引用` 不再误伤 git diff**：引用语法统一为仅识别行首或空白后的单个 `@`，词内 `@`（如邮箱）、`@@` diff 标记及代码块或行内代码中的 `@path` 均按字面文本处理。
- **技能命令转发**：统一识别带或不带斜杠的自定义命令名，修复技能通过名称转发项目命令时提示找不到命令的问题。
- **状态栏上下文用量**：自定义状态栏改为只输出最新一次模型请求的 token，并正确拆分普通输入、缓存读取和缓存写入，不再混入会话累计缓存量，与 `/context` 共用同一统计口径。
- **PTC / Code Mode Hook**：PTC 模式下在 REPL 中调用需审批的工具时，现会正确触发 PermissionRequest hook；在 REPL 中发起需要用户应答的交互时，现会补发权限提示通知，便于审计、策略联动与桌面 / 终端提醒。
- **工具发现口径一致**：`REPL.describeTool` / `describeTools` / `searchTools` 与骨架目录共用同一份沙箱可见性判定，不再返回沙箱里实际不存在的工具或提示不存在的全局；加入频道、身份登记完成这类会话级能力变化后，同一会话的下一次调用即可用上新可见的工具。
- **会话历史落盘失败不再终止回合**：Windows `EBUSY` / `EPERM` / `EACCES` 等本地写失败被识别为旁路故障，短退避重试后放弃当批并只记日志；恢复会话时严格配对 tool_call 与 tool_result，丢掉孤儿调用与重复调用，此前本地正文里的持久化孤儿会让每次恢复都被上游拒绝。
- **网络监控口径补齐**：API 请求指标补充 `host`（最终目标域名）、`path`（动态段归一化）与 `error_code`（传输层错误码）维度，支持按请求量口径统计主备域名流量分布与传输层失败细分。
- **Daemon 与自动更新**：修复 pnpm 安装在缺少环境变量或存在多个全局副本时被误判为 npm、更新到错误位置仍提示成功的问题；修复 systemd 托管下自重启可能静默全停，旧版服务配置未迁移时安全拒绝自重启；补齐空闲会话的空闲起始时间；Daemon 默认使用普通权限模式；Web 对话明确支持 headless PTC，并保证会话结束、取消和重连后正确恢复输入状态。
- **Product 首次加载**：内置配置接口和宿主自定义配置请求可在认证刷新完成前加载，避免循环等待，普通业务请求仍等待新凭据。
- **Server 关闭与生命周期**：关闭失败时保留具体清理阶段和原始错误堆栈；取消 Product 延迟刷新、停止配置通知并等待在途同步；等待 MCP 配置刷新结束后再释放执行服务；未启用的可选组件不再导致容器清理提前失败；关闭时明确拒绝仍在等待的配置读取，避免调用永久挂起；Windows 本地命令超时和取消时回收进程树，PTY 自然结束后释放仍保活的连接资源。
- **Server 会话工作目录与审批等待**：Server 的每条会话 query 在各自工作目录中执行，提示词、Bash 与会话历史使用传入的 `cwd`，同一进程服务多个工作区时不再回退到宿主进程启动目录；修复 `/server` 会话在工具审批等待超过 30 秒时提前结束 `query` 的问题，等待 `canUseTool` 回调期间保持回合打开，直到续跑结果或显式取消到达。
- **Server 共享组件**：配置组件支持宿主提交回调和版本化用户配置事务，配置缓存区分文件系统与路径；插件、Agent、命令和 Skill 目录读取复用原解析器；会话 Product 与 MCP 工具目录按执行上下文读取；文件工具可向宿主提供变更事实；修复模型完成后重试导致的用量遗漏，以及会话标题生成、超时和关闭时的资源清理问题。
- **Server Bash 输出方式**：支持宿主通过 query 选项为 Bash 选择输出方式，未指定时保留 CLI 原有选择，沙箱规则、权限审批与进程回收不变。
- **沙箱与工具名称映射**：修复 bash/zsh 沙箱未传递 Electron 的 Node 运行模式标记、导致文件操作辅助命令启动失败的问题；修复 Server 进程内会话延迟加载 Sandbox Shell 时遗漏命令输出和退出事件、导致 Bash 工具一直等待的问题；修复工具名称映射将 Agent 与 MCP SDK 提前载入 lite-wb 启动主包，并在 MCP 工具目录整组替换后同步更新名称别名。
- **WebUI 界面细节**：打开目录弹窗可显示并进入有效目录符号链接，在文件树与文件浏览列表中标识符号链接并保持沙箱工作目录边界校验；定时任务执行记录页筛选下拉框的文字与箭头间距在窄屏和中英文文案下保持一致。

## [2.156.0] - 2026-09-20

### 🎉 新功能

- **持久化定时任务由 daemon 接管**：持久化定时任务支持由 daemon 优先接管，并提供跨进程单活、执行租约、执行历史与失败重试能力。
- **WebUI 编辑体验**：优化编辑器搜索、输入菜单与终端标签交互，增强键盘可达性、状态反馈和多终端辨识度；定时任务执行记录支持按状态、时间和关键词筛选，并提供稳定分页与可分享详情路由。

### 🔧 功能改进

- **大仓搜索性能**：使用可取消的流式搜索、受控结果上限和文件范围预筛选，减少大仓搜索的内存占用与无效扫描
- **终端连接稳定性**：完善终端连接生命周期与资源回收，降低重连和视图切换时的状态异常
- **PTC / Create / Multitask 模式命令展开**：PTC、Create 和 Multitask 模式现在能够正确展开自定义命令与 MCP 命令。
- **端到端测试的云端调度**：新增调度宿主入口，使 quality e2e 用例可在阿拉丁 CI 平台上被派发执行——按用例动态领取、执行后逐条上报结果与产物，支持按边界筛选与全量跑批；同一批用例可在多台执行机之间分摊且不重不漏，进程被中断时已完成并上报的结果不会丢失。
- **质量 E2E 跨平台治理**：将 PTY 生命周期、进程生命周期、CLI 生命周期、预热预算等用例按平台拆分为 posix / win32 / darwin / linux 独立 spec，并抽取共享 harness，消除单文件内的平台条件分支，提升各平台回归稳定性与可读性
- **测试运行时进程治理**：在测试工具层引入受管进程树能力，统一跟踪与回收 E2E 拉起的子进程，降低用例残留进程导致的串扰与挂起风险
- **Windows 平台 E2E 补齐**：新增 Windows 下文件操作、Shell 执行、后台任务、WebUI 能力与交互式会话等 E2E 用例，覆盖中文路径等典型场景，提升 Windows 平台回归保障
- **企业 TLS 场景验证**：为测试运行时补充 TLS 服务能力，新增企业 TLS 网络环境下的连接与遥测 E2E 用例，保障受限网络环境中的可用性

### 🐛 问题修复

- **MCP 会话不再泄漏**：CLI 进程退出（wb 会话结束 / 关闭、CLI 单发跑完、TUI 退出等）时，向 Streamable HTTP MCP 服务器发送协议约定的 DELETE 终止会话，不再依赖服务器端超时兜底回收。
- **站立主 Agent 的模型选择**：`ptc` / `minimal` / `create` 现在与标准模式同源继承用户模型选择（`CODEBUDDY_MODEL` > `settings.json` 的 `model`），不再因 Agent 模型列表从 cli 拷贝而来就静默回退到列表首项。作用面仅 `ptc` / `minimal` / `create` 三个 shipped 站立模式；`multitask`（unopted 宿主可达）、显式声明 `model` 的 Agent、自定义 `mainAgent: true` 预设、普通子代理与 unopted 宿主（WorkBuddy）行为不变。
- **站立主 Agent 模式族定义继承**：ptc / minimal / create / multitask 改为从产品默认 Agent 全量继承（默认 Agent 按 `cli` 身份标签 + `default` 标签解析，顺序与引擎一致，回落名为 `cli` 的定义），仅显式覆写模式自有字段并剔除子代理语义字段（isolation / variables / handoffs / asTool / maxTurns / background 等；`initialPrompt` 属主模式首轮注入契约，保持继承）。修复 Agent 定义字段在模式上静默丢失（接口 25 个字段旧实现只落位 8 个）；继承的顶层数组字段（models / commands / tools / tags / skills / disallowedTools / mcpServers 等）改为每模式独立拷贝，消除模式与基座共享引用导致的互相污染；配置中不存在带 `cli` 身份标签的默认 Agent 时，模式族不再整体消失。新增继承 canary 回归防线，任一字段未落位即失败。
- **站立主 Agent 的上下文压缩**：`ptc` / `minimal` / `create` / `multitask` 以及 `mainAgent: true` 自定义预设会话，现在与标准模式同样参与紧急自动压缩（此前因判据只看默认 Agent 名而被跳过，长会话可能撞上下文上限）。模型选择的作用面不含 `multitask`，两者差异是有意设计。
- **站立主 Agent 的 Stop hook 续跑**：Stop hook 返回续跑请求时，站立模式会话不再被当成子代理处理，校验/续跑语义与标准模式一致。
- **会话运行 Agent 的模型与预算作用域**：站立模式（`ptc` / `minimal` / `create` / `multitask` / `mainAgent` 预设）会话的请求思考开关、上下文压缩预算与排队消息执行身份，现在都按**会话实际运行的 Agent** 解析，不再一律取产品默认 Agent。此前默认 Agent 与运行 Agent 档位不一致时，会出现思考字段发给不支持它的模型、压缩触发点按错误窗口计算（如默认 1M 而运行 200K 时触发点被抬到 800K）、排队消息以 `cli` 身份执行（工具面 / 提示词 / Code Mode 约束全变）等问题。
- **只读/served 文件系统**：修复图片 blob 落盘遇到只读文件系统（EROFS）、分片目录缺失（ENOENT）等文件系统错误时崩掉整个回合的问题——blob 缓存写失败现优雅降级（跳过缓存、后续回退占位符），不再中断会话；非文件系统的 `ERR_*` 编程错误仍向上抛出。`write` 工具遇到只读文件系统也返回明确的权限类错误而非笼统失败。
- **同一轮读取大量大图不再内存溢出**：一次对话里连续读取多张高分辨率大图（例如单张 10MB 的截图或设计稿）时，进程可能因内存耗尽直接崩溃且不留任何提示。现在压缩前会先把尺寸收到目标体积对应的范围内，且每张图只做一次重编码（此前最多四次），内存占用大幅下降
- **保留透明通道**：带透明通道的图片在压缩时不会被转成不支持透明的格式
- **单轮图片总量超出预算时给出明确说明**：同一轮读入的图片总体积超过上限（128MB，约十余张 10MB 大图）后，后续图片不再被载入，而是返回一条清晰说明，提示在后续轮次继续读取，避免静默崩溃。该预算按轮重置，不会永久拒绝
- **读取图片更快、更省内存**：去掉了同一张图在读取过程中的重复读盘与重复编码，以及一次只为「确认字节能解码」而做的整图解码（改为校验图片容器结构），大图读取的耗时和内存占用同步下降
- **批量删除拒绝状态隔离**：拒绝一次批量删除后，仅阻止当前工具调用重试，不再误拒同一轮对话中后续的独立删除调用。
- **WorkBuddy 专家团成员头像与名称异常**：团队成员使用角色名作为运行时名称时，ACP 团队状态现在会同时透传稳定的 Agent 类型，避免多轮对话及上下文压缩后把角色名误当成专家身份，导致头像和名称回退。
- **Web 编辑器资源管理器稳定性**：修复目录展开状态跳动、刷新后展开目录内容为空，以及文件树更新不及时的问题
- **Web 编辑器文件同步与自动保存**：打开的文件可及时感知磁盘更新，编辑过程会显示待保存和保存中状态，并在外部内容冲突时阻止自动覆盖
- **目标回顾面板**：修复目标回顾面板按 Esc 时重复回退、导致输入框消失的问题。

## [2.155.0] - 2026-09-19

### 🎉 新功能

- **A2A 被调侧终态 Task 跨重启可查**：`--a2a` / 混合模式下，已完成的 A2A 任务（COMPLETED / FAILED / CANCELED / REJECTED）现在会落盘，进程重启（sandbox 休眠唤醒、CLI 崩溃重启、sandbox-proxy 重拉）后，调用方凭 taskId 仍能通过 `GetTask` 取回结果。混合模式下按 session 物理隔离，其它 session 的 taskId 一律返回 TaskNotFound；运行中的任务不落盘，重启后按 TaskNotFound 处理由调用方重发。
- **增强定时任务管理**：支持编辑、暂停、恢复和查看执行记录，并在对话中展示任务触发信息。
- **Web UI 首访自动进入 CodeBuddyS**：首次用浏览器打开 CLI Web UI（非内嵌 iframe）时自动写 `codebuddy.agentHome.orchestration=true` 并进入 CodeBuddyS 视图，等价用户点开侧栏切换器；用户切回 CodeBuddy 后记住选择、不再自动；被 env/运维键硬关或网络失败挡下时记「已尝试」，之后不再自动重试。后端开关判据与武装机制不变——从不访问网页则 settings 永不写入、运行时保持休眠，TUI / WorkBuddy / IDE 不受影响
- **完成后系统通知（Web UI）**：设置页新增「通知」开关（默认关）。开启后，**页面不在前台**（标签隐藏或窗口失焦）时，主对话一轮收口（完成 / 出错 / 中断 / 停在等你回复）、同事或后台任务落定（完成 / 失败）会弹一条**系统通知**，点通知把窗口拉回来。弹的标准：开关开 + 页面不在前台，两条缺一不弹；同一件事 5 秒内只弹一条；你自己手动停止的任务、守护进程重启一次打翻一片的失败不弹。
- **不再依赖浏览器站点授权**：通知由**本机 CodeBuddy 进程直发**（macOS `osascript` / Linux `notify-send`，文案走 argv 不拼 shell）—— 不需要给站点授权，也就不受"端口一变就是新 origin、要重新点允许"的影响（实测 Chrome/Safari 都要反复授权，站点被拦过之后连框都不弹）。平台不支持（Windows 等）或端点不可达时，**仅当浏览器通知权限已经是 granted**（从不主动弹授权框）退回浏览器通知保底。设置页提供「发一条测试通知」用于分辨"我们没发"和"系统层吞了"。
- **正文取最新一轮回复**：思考条目不冒充正文；正文还没进时间线时最多再等几拍（≈1.5s + 3×1.0s），一直没到就只报状态 —— 绝不拿上一轮的回复冒充。

### 🔧 功能改进

- **端到端测试保障增强**：扩充命令行、交互界面与服务模式的端到端测试覆盖（交互面板生命周期、快捷键异常、本地命令执行、模型选择、权限模式切换、文件输入、会话取消与钩子等场景），并增强测试运行时的边界诊断与证据记录能力，让回归问题能够更早被发现
- **质量回归保障增强**：端到端测试运行时新增进程内存采样与操作耗时测量能力，支持在预热待命稳态阶段采集常驻内存证据；并新增精简产物（lite-wb）的待命内存与产物体积预算回归用例，防止历次裁剪优化成果被后续变更悄悄回退
- **质量回归保障增强**：端到端测试运行时新增软断言能力，单个用例内的多处断言失败可一次性完整收集后再统一报告，避免首个断言失败即中断导致后续断言结果丢失；相关存量用例已同步改造接入
- 缓存短时间内重复的 MCP 配置缺失探测，同时保持已有配置内容和会话刷新语义不变，并修复删除后的内存同步。
- **Agent Home**：统一频道输入框、任务面板与任务状态事件的视觉层级，改善窄屏和不同浏览器下的表单布局。
- **模型选择**：根据终端可用宽度自适应模型信息布局，避免窄窗口下描述内容逐字换行。
- **侧栏顶栏收成一行**：模式切换、搜索、新建不再各占一块。搜索收成图标，点开才在列表上方浮出输入框（自动聚焦；Esc、点外部、点列表行都会关闭并撤掉过滤，不留隐形筛选）。
- **模式切换器文案**：中文「CodeBuddy 单干 / CodeBuddy 组队」，英文「CodeBuddy Solo / CodeBuddy Group」，一眼看出两种工作台的区别。
- **交互式启动默认用稳定端口（一组，多开各领一个）**：TUI/`cbc` 交互启动会挑一个空闲端口并落盘（`~/.codebuddy/web-ui-port.json`），同机多开时后续实例依次领 `base+1 / base+2 …`（最多 4 个）。除了省掉"每次记住新端口"，它还稳住了 **localStorage 的 origin** —— 工作台模式、通知开关这些设备级偏好原先一换端口就被清空。`--port` / 已设的 `SERVER__PORT` / `--serve` 行为不变。
- **设置页可发一条测试通知**：「通知」一行新增「发一条测试通知」（故意绕过"页面在前台不弹"）—— 点了没反应就说明是浏览器/系统层（macOS 系统设置 → 通知、专注模式）拦了，而不是本功能没弹。

### 🐛 问题修复

- **浏览器预览**：页面加载失败时展示明确原因和恢复操作，并保留本地与内网页面的直接预览能力。
- **对话时间线**：修复一轮回复在终止/结束后整段乱序涌出的问题——最终答案现在按实际时间位置渲染，不再掉到「问题已取消」等交互面板下方；提问/审批面板挂起时，面板前的完成正文保持可见，不再折叠成单行摘要。
- **正文排版**：恢复回复正文的字号与标题层级（正文 15px/1.7、标题阶梯拉开、段距放松），过程组展开内容的排版同步放松；工具与思考轨道的中性排版保持不变。
- **上下文压缩**：修复长会话在大窗口模型下 heap 累积、偶发 Node OOM 崩溃的问题。上下文压缩成功后同步裁剪运行时内存中的会话历史，与请求侧的裁剪语义一致，避免每轮请求对历史做全量深拷带来的临时内存放大。持久化与冷启动路径行为保持不变。
- **自定义模型缺少接入地址时给出可操作提示**：自定义模型没有配置接入地址（`url`，含填成空值的情况）时，此前会把请求发往平台网关，换回一条指向「当前模型不可用，请切换其他模型」的报错，把配置问题表述成了模型问题，用户无法自助修复。现在会在请求发出前直接失败并提示补全该模型的接入地址；本地拉起的模型改为提示等待其下载与启动完成。企业管理员下发的自定义模型仍按原有链路走平台网关，不受影响。
- **MCP 工具调用**：修复自定义模型名含中文/非 Latin1 字符时，MCP 工具调用因 X-Model-ID 请求头 ByteString 校验失败而全部报错（`Cannot convert argument to a ByteString`）。检测到非 Latin1 modelId 时跳过 header 注入并记录警告，模型 ID 仍通过 JSON-RPC `_meta.modelId` 透传给后端。
- **PluginStatus 上报**：支持通过 `CODEBUDDY_PLUGIN_STATUS_REPORT_ENABLED` 环境变量关闭上报（默认开启），并按账号在本机跨进程去重，确保每个自然日最多成功上报一次。
- **PTC / Code Mode 工具 Hook**：修复通过 REPL 编排内置工具时 PreToolUse Hook 不触发、Hook 输出在执行期间刷屏、以及乱序到达时展示错位的问题。现在每次内层工具调用都拥有独立的调用标识，Pre/Post 生命周期稳定关联；内层 Hook 仅归属所属 REPL 记录，主界面保持紧凑、按 Ctrl+O 可查看完整输出，普通直连工具的 Hook 仍在主界面直接可见。
- **Web UI 工作区**：修复换一个目录启动命令行后、从命令行打开 Web UI 时工作区仍显示成「上次编辑器打开的目录」的问题。工作区现在只以命令行的启动目录（或你显式指定的目录）为准，不再被历史遗留的错误目录带偏；从旧链接（带目录参数）打开时仍按链接里的目录进入。
- **Windows PTY worker 缺失时 shell 命令卡死**：Windows 上 `@lydell/node-pty` 用 Worker 线程读 ConPTY 输出，遇到 worker 文件在磁盘缺失（杀软隔离 / 破损安装 / `--omit=optional`）时，pty 会异步崩溃且导致 shell 命令挂死。修复：在 `getPty()` 里预检 worker 文件是否存在，缺失即回落到 `child_process`，不再卡死。
- **Agent Home 任务指派没唤醒被指派人**：唤醒票（投递时对方进程不在、又没拉起来留下的信物）此前只有常驻 broker 的 2s tick 会消费——TUI 进程内嵌的 Web UI（`cbc` 无参数启动、argv 无 `--serve`）没有这个循环，票就一直没人处理，被指派人永远不被拉起。现在 **Agent Home 面板被访问时顺带消费一次积压票**（10s 节流 + 单飞，与 broker 共用同一份 `wakeColleagueJob` 逻辑），不开常驻 tick、不动任何宿主门（IDE / `-p` / headless 进程零影响）。
- **重拉失败的过渡态被当成「用户终止」**：`respawn` 失败（如工作目录被清导致 fork 失败）会把记录留在 `stopped`，投递侧据此判定「用户主动停止过」→ 唤醒票被丢弃、自动唤醒永久失效。失败现在回滚到重拉前快照（仅当记录仍停在 stopWorker 写的 `stopped` 过渡态、且本轮 launch 仍持有它），下一次投递 / 唤醒票可正常重试。
- **唤醒审计区分「真投递」与「只留票」**：`deliverToColleagueJob` 新增 `deferred` 结果（信已入箱、仅留唤醒票），审计从 `wake_delivered` 改为 `wake_skipped(reason=deferred)`，现场可直接分辨「对方已在处理」与「等被拉起」。
- **减少缓存过期后的长上下文消耗**：关闭常规 pre-message 阈值压缩时，会话已使用提示词缓存、空闲超过一小时且上下文达到有效窗口 50%，将在发送下一条消息前提前压缩上下文；开启常规阈值压缩时不启用该缓存过期策略。
- 文件操作命中预设允许规则时不再记录放行审计日志，用户和企业配置的允许规则仍正常记录。
- 修复 `cbc -c` / `--resume` 恢复 PTC 等非默认主 Agent 时丢失 `settings.json` 模型选择、误回退到 Agent 模型列表首项的问题。
- **修复 Web IDE 终端文件拖放**：资源管理器文件拖到 Dock、工作台或画布终端时统一粘贴路径，避免误打开文件引发界面卡顿。
- **主 Agent 收件箱不再"谁先 tick 谁拿"**：同事写给主 Agent 的汇报现在有投递门槛 —— ① 会话里必须有用户自己的发言（同事/频道信封不算），全新会话或被 `--resume` 拉起但还没开口的会话不再被旧汇报占掉开场（实测过一封信在盘上躺 1h43m、用户起个全新终端就被它抢了第一轮并白烧约 37k prompt tokens）；② 不抢别的活跃会话（主邮箱旁的活跃会话指针 = 最近有用户发言的会话，2 小时保鲜、单调前进），多开会话时汇报投给"你真正在用的那个"；③ 超过 30 分钟的旧信要求用户最后一条发言晚于这封信落盘 —— 旧汇报不主动拉人干活，等用户开口时再投。
- **投给"发起这件事的会话"（寻址）**：同事的 job 记录现在会记下**它是被哪个主会话起 / 叫起来的**（`originSessionId`，创建与唤醒两处快照）；同事回投主 Agent 时把地址带上（信封新增可选 `targetSessionId`）。投递**地址优先**：命中那个会话就直接投（不再看"活跃指针 / 有没有用户发言"那两条启发式），不是它就等那个会话来取；时效（旧信等用户开口）对有无地址一视同仁。没地址的信（批次汇总、系统事件等）行为不变。
- **信不丢**：暂不投的信走 `.retry` 退避队列（不在被 watch 的队列里），用户下一次开口后自然投出去；认领/去重/隔离等原有纪律不变。
- **投递可查**：成功投递补 `main_mail_delivered` 审计（目标会话 + 信龄），暂不投补 `main_mail_held`（原因，同原因 60 秒一条节流）—— 以后"这封信为什么现在才投 / 投给谁了"不用再靠会话文件时间戳反推。
- **减少重复删除审批**：批量删除数量按每次工具调用独立累计，长任务中先前命令的删除数量不再导致后续少量删除反复要求审批。
- **macOS fallback 归因**：不再把 CLI 根据拒绝信息推定的文件操作当成真实 Delete；按 Read 维恢复 Sandbox Center 裁决，避免敏感读取被错误直接拒绝。
- **避免文件读取重复审批**：文件 Open 阶段不再检测敏感内容，保留工具结果发送给模型前的统一敏感检测，避免 `cat` 等读取命令连续弹出两次敏感审批。

## [2.154.0] - 2026-09-18

### 🎉 新功能

- **Agent Home 自治组队**：智能体可以自己拉人建团。新增 `CreateColleague`（自主创建同事）、`CreateChannel`（建频道 / 拉人 / 一句话 kickoff 唤醒全员）与 `ChannelTasks`（频道任务板）三个工具，只对 Agent Home 表面开放——TUI、WorkBuddy 等通用 ACP 会话与子代理都看不到。
- **频道任务板**：频道内新增黑板式任务协作。任务单写者认领（同一任务只有一个 owner，抢占返回冲突），可指派、可引用产物（文件 / 提交 / PR），完成 / 放回都有事件落在频道时间线上；Web UI 频道页右侧新增任务板面板（按状态分组、完成度进度、负责人、停滞标记、内联添加与一键完成）。支持删除（用户与 lead 可删任意任务，成员仅可删自己创建且无人认领的任务；任务编号不复用）、同分组内拖拽排序、按成员筛选与引用产物增删。
- **Lead 编排**：频道可指定 lead（缺省为创建者）。lead 在被叫醒的那一轮会带上任务板快照，并可用 `dispatch` 批量派单（带幂等与同名去重）、用 `escalate` 催办卡住的人或收回其认领。
- **主 Agent 不进频道（委托侧）**：主 Agent 是用户当前的工作现场（随窗口/进程生灭、上下文是用户私有的现场），房间则是执行侧——所以它**不进成员表、不参与依次发言、不被房间唤醒**（@ 它也不算），但**能建频道、派单、读板、在频道里说话**。它在频道里说话时按**用户发言**落盘（开一轮、叫醒同事），在任务板上按**用户权限**操作（可建单/派单/催办，不能 claim/complete）。历史数据里混进成员表的主 Agent 会在读盘时自愈剔除（频道本身保住）。
- **团队干完会回报主 Agent**：同事与频道原先只有"主 Agent → 房间"这一个方向，团队干完没人通知委托人。现在收件人统一成一个概念（同事 = 他的 job 收件箱；主 Agent = 委托侧），同事可用 `MessageColleague` 直接回报主 Agent 或私信任何同事（不再按房间划界）；主 Agent 的来信**落盘**在 `agent-home/inbox/`，主会话空闲时注入一轮（窗口关着、进程重启都不丢，用户正在打字时绝不插队）。一批派单**全部完成**时，频道会落一条系统消息并叫 lead 回报委托人。
- **`ListColleagues` 通讯录**：一次调用拿到全部同事与频道（id、会话状态、谁是 lead、谁是委托人），组队前先看清有谁；玩法提示也改成"先 ListColleagues"。
- **建同事可选模型与权限模式**：`CreateColleague` 新增 `model` / `permissionMode`（HTTP 建人 / 改人接口同样支持）。设定随档案落盘、启 job 时拼进 `--model` / `--permission-mode`，并且写进 respawnArgs——同事重启 / resume 后仍是同一档，不会掉回产品默认。模式必须过 CLI 认的那张表，非法值直接拒绝并列出可用值。
- **配额与审计（免审批）**：同事上限 50、频道上限 20、频道成员 2–6、任务板 50、唤醒预算 5 次/人/任务（超限标记停滞不再自动叫）、创建深度 ≤2；关键动作落 `agent-home/audit.jsonl`。
- **选项卡卡片（widget）**：成员可用 `SpeakInChannel({ widget })` 在频道里发一张「提问 + 2–6 个选项」的卡片（对齐上游 `type:widget`）；发卡即结束本轮发言，用户点选后作为用户发言回到房间，成员下一轮即可看到所选值。卡片已答状态从消息流推导，历史保持 append-only。
- **Web UI 开关**：设置新增「Agent 团队（Agent Home）」分组，可一键关闭「允许智能体自主组队」；关闭后自治工具与任务写入即不可用（读板不受影响）。
- **stream-json 存活心跳（区分"慢"与"卡死"，默认关闭的可选特性）**：在 `--output-format stream-json` 的一轮 turn 执行期间，CLI 可按事件循环节奏周期性吐出一条 `{type:"system", subtype:"keepalive"}` 消息。心跳挂在 Node 事件循环上——同步卡死时回调根本不会 fire（真死不被掩盖），只有事件循环还在转（异步等待某个慢工具/IO）才发出，因此下游宿主可据此判定"cbc 还活着、只是慢，并没有卡死"，避免把健康但慢的 worker 误判为无响应。是 ACP transport 侧 `startPromptKeepalive`（#102424）在 stdio/stream-json 链路上的对应实现。该特性由环境变量 `CODEBUDDY_STREAM_KEEPALIVE_INTERVAL_MS` 作为开关——**仅当显式设置为正数（毫秒间隔）时才开启**；未设置 / 空 / 非数字 / `<= 0` 一律视为关闭，不配置时输出与引入本特性前逐字节一致。消息复用既有 `system` 消息族的信封与通道（与 `subtype:"status"` 同形），不认识该 `subtype` 的既有消费者都会安全忽略、透传或丢弃，不报错、不改变既有行为；心跳发送为 best-effort，turn 进入终态即停表。

### 🔧 功能改进

- **架构拆包**：Agent 执行、上下文编排、Session 生命周期与历史存储下沉到独立包 `@genie/cbc-core`；SDK 惰性绑定与跨层叶子契约下沉到 `@genie/cbc-shared`。CLI 保留 HTTP/ACP/CLI 入口、工具装配、宿主适配器，通过核心包窄接口注入宿主能力。四种产物（TUI/headless/lite-wb/server）与发布声明的隔离加载校验均保持通过。
- **构建依赖锁定整理**：继续清理 `pnpm-lock.yaml` 中重复的构建期依赖解析条目（Babel / Jest 系），不改变运行时依赖与发布产物内容。
- **频道对齐上游群聊模型（严格）**：用户发言（或建频道 kickoff）开启一轮房间轮次，成员按名册**依次发言**，每轮换首发（公平，避免永远同一人开头）；一次轮次最多 3 轮、跨轮累计 10 条成员发言，每人每轮最多计 2 条；@ 点名只回被点名的人，`@everyone` / 没有 @ 则全员参与；成员只看到**自他上次发言以来**的新消息（最多 24 条），不再塞全量历史；没有新内容可回 `(pass)`（不计条数、不落盘，只推进轮次）；被叫到的人会看到回合标记（第几轮 / 已用条数）。整套上限保证群聊有界，不会无限对聊。
- **交互格式对齐上游**：SpeakInChannel 补"唯一出口"语义（只有工具调用会被房间看见）、`(pass)` 弃权、`replyTo` 引用与 `attachments` 附件；入站回执改为 `[Group chat: "…" - with …]` + 隐藏提示标记 + 唯一出口契约 + "New messages in the room (oldest first)" + "It's your turn, X … (pass)"，房间历史每条带 `[#xxxxxxxx]` 短地址（可直接引用）。
- **附件安全**：SVG/HTML 这类可执行文档不再按图片内联或打开（按文件卡片下载），附件响应带 nosniff/下载语义；图片沿用仓库既有的栅格图白名单（体积上限 + 中途可取消）。
- **消息引用与附件**：Web UI 频道气泡支持引用块（点击跳转原消息，失效显示"原消息已不在"）与附件（图片内联、其它文件卡片、点击下载/查看）；附件复制进频道存储（内容寻址、20MB 上限、每消息 4 个），通过带鉴权的附件路由读取。
- **频道输入框能传图/传文件了（对齐主 chat）**：`+` 菜单新增「上传图片 / 上传文件」，支持**粘贴**（截图直接粘）与**把文件拖进输入框**；输入框上方有待发附件条（图片缩略图、文件名、单条删除）与上传进度，发送时才上传（串行，失败保留待发列表并给原因）。上限与服务端一致：**每条 ≤4 个、单个 ≤20MB**。只发附件不带文字也合法，侧栏预览显示 `[图片] 文件名`。频道里的图片**点击放大**（对齐主 chat），下载保留在放大层右下角；其它文件点击下载。
- **频道气泡按主 chat 的方式渲染**：正文走 markdown（代码高亮 + 复制、表格、mermaid、KaTeX 公式、图片点击放大），**@提及仍是芯片**（在 markdown 文本节点上替换，代码块/行内代码/公式里的 `@` 不会被误伤）；代码块里像路径的行内代码仍可点击打开。任务板系统行与选项卡卡片保持纯文本。
- **引用某条消息**：气泡 hover（触屏常显）出现「引用」动作条，回填输入框上方的引用条，发送后作为 `replyTo` 落库并画在气泡上方（点引用块跳回原消息）。
- **过程可见（一行式）**：频道底部只在有人干活时出现一行「X 正在处理…」（复用成员运行信号，全部空闲即消失）；刻意不做计数条/进度面板。
- **轮次看门狗**：当前发言人的进程没了就跳过它、把这一棒交给下一位（正常 turn 要 3–4.5 分钟，所以判据是"进程死没死"而不是超时），另配 20 分钟绝对上限兜底；与既有 2s 唤醒 tick 共用，不新增定时器。
- **催办：轮到的人太久没回就再点一次**：当前该发言的人进程还活着、却 4 分钟没出声，会再叫它一次（最多 3 次）并留痕，不再只能干等 20 分钟看门狗兜底。
- **同一批人不再重复建频道**：`action=create` 时若已存在成员完全相同的频道（且 lead 一致），直接复用并在结果里说明，不再开第二个——同一组人开两个群，消息会分叉，人和模型都记不清谁在哪儿说话（对齐上游 `createGroup` 的同成员集合去重）。
- **@ 名字句柄对齐上游**：点名不再要求写全名——大小写不敏感、去空格、第一个词都认（`@codebuddy` / `@Code Buddy` / `@Code` 指同一个人）；`@` 紧跟字母数字后不算点名（`user@CodeBuddy`）；句柄有歧义时谁都不点（上游取第一个匹配，我们保持"重名不猜"）。
- **名字不再是身份（对齐上游）**：显示名以前被当地址用——建人**禁止重名**（撞上就 409，把建频道 / 拉人整条流程断在中途），`@ 名字` 撞名时**谁都不点**，收编运行 / 草稿转正还要先偷偷改名才能建。上游的规则是：唯一性只在 **id** 上（建人 / 改名 / 复制都不查重名），工具参数只收 id，**只有正文里的 `@名字` 是名字寻址，撞名时同名的人全部叫上**。现在照此对齐——`CreateColleague` / 建频道 / 拉人 / lead / 任务指派 / 私信收件人 / 频道选择一律按 id（名册、看板、频道名册注入都带 `[id=…]` 方便抄），重名随便起也照样能建；`@名字` 会把认领这个名字（或它的第一个词）的人**全部叫上**，要精确到人就用 `@<id>` / `@<前 8 位>`（输入框补全在重名时自动插 id）。随之删掉两条「说不清是谁」的错误码（`MEMBER_AMBIGUOUS` / `CHANNEL_AMBIGUOUS`）与按名字找频道 / 找人的回退路径。
- **同事的记忆不再互相覆盖**：同一个工作目录下的同事原先共用一个 `MEMORY.md`，而记忆提取是"对话结束起一个 run 写文件"——几个同事同时写就会覆盖，也分不清是谁学到的。现在同事的记忆落到自己的分区 `memory/agents/{agentId}/`（单写者），项目和全局记忆作为**只读**共享层读得到。门闸沿用 Agent Home 表面判定并额外硬排除 WorkBuddy，主 Agent / 普通 TUI / 子代理的记忆目录与注入文本逐字节不变（真实 CLI A/B 已核对）。
- **发送失败能说清原因**：频道里发消息失败时，原先只有一句「操作失败，请重试」——后端重启/进程没了和校验失败长得一样。现在区分「连不上后端」（提示服务可能刚重启、文字已保留可直接重试）与其它失败，草稿一律留在输入框。
- **发送遇到「目录忙」自动重试**：锁忙时服务端一个字节都没写，现在返回 503（可重试）而不是 500，前端自动重试两次；其余失败不重试——写可能已经落盘，重试会多出一条用户消息。
- **多个窗口不再互相抢锁**：Agent Home 的状态本来就是多窗口 / 多端口共享的（有意设计），但自治循环（2 秒叫醒 tick、唤醒票 drain、轮次看门狗）原先按**进程类型**判归属——每个 `--serve` 实例都算一份。现在加了**每个 HOME 一个协调者租约**：常态只有 1 个实例在跑循环，其余只读待命；持有者心跳过期或被强杀后，下一个 tick 自动接管（关掉那个窗口也不会停摆）。
- **崩溃不再丢信（收件箱两阶段投递）**：投递改成「认领 → 处理后确认」两步。进程在投递中途崩溃或被强杀时，信只是停在"已认领"状态，重启后会被重新取走再投一次（重复由回执判重吸收）。同事收件箱与主 Agent 邮箱同一套纪律；解析不出来的条目改为**隔离保留**（`inbox/.undeliverable/`）并留审计，不再静默删除。
- **一批入队只开一轮（成本）**：同事收件箱里的多条信会合并成**一次**模型调用（原先一条一轮 —— N 条频道 @ 就是 N 次调用）。成员 @ 只入队、不再顺带把已经停下的同事拉起来，并对同一个同事加**入队预算**（10 分钟内最多 20 条提示；超量只丢提示、不丢信息，用户消息不受影响）。
- **用户消息带打断语义**：用户发言带优先级（对齐上游 `priority` 语义）——模型正在做的一轮收尾后先回应用户这条，再回到频道与任务里。
- **频道时间线实时刷新**：同事在频道里说话，页面不再需要切走或刷新才看见（SSE 实时推送）。原先"每秒全量轮询一次频道历史"降级为**只在 SSE 静默时兜底**，并每 30 秒对账一次——同一条时间线不再被两条链路各拉一遍。
- **频道只属于常驻同事**：成员资格与组队同一条——主 Agent 与「极简」都不能进。建频道、拉人、改成员三条写路径（工具与 HTTP）都会显式拒绝并给出原因，不再出现「加进去了但读盘又被剔掉」。
- **HTTP 建人与建频道和智能体工具同一套规则**：Web UI 的建人 / 建频道 / 改人原先各写一份校验，能绕过智能体工具那条路（同事 50 人上限、极简引擎、权限模式白名单）。现在 UI 与工具走同一个入口，超配额返回 409 并说明原因。
- **建同事的档位继承**：新同事缺省继承创建者当前的**权限档与模式**（同事建同事跟创建者自己的档；主 Agent 建人跟它这一轮的模式），不再静默掉回产品默认。
- **取消「每小时最多创建 10 次」的护栏**：一次「分配专家团队…直接做」就合法地要建 8 个同事 + 2 个频道，正好顶满 10/小时。这条频率护栏撤掉（同事 50 / 频道 20 / 成员 2–6 / 创建深度 ≤2 这些硬配额都还在，防失控能力不减）。
- **组队玩法改成"讲道理"而不是硬规则**：用户实测把"分配专家团队…直接做"合并成一句话时，主 Agent 会先花 4 分钟自己搭骨架、再建队派单。提示词里补上委托方/施工方的定位（"你是委托方不是施工方；队友并行施工，你保持能回话、盯板"），同时保留"该先冻结契约就先冻结"的判断空间。
- **派单纪律「一文件一 owner」**：派单结果与频道玩法说明都写明队友是**并行**干活的，同一个文件只能有一个 owner——两个任务要改同一个文件就一次派一个、等完成事件再派下一个，避免并行互相覆盖。
- **说清「发完就收工」**：发言 / 派单后的结果文案明确写着「你会被叫醒，不要 sleep 轮询看板、不要替同事收工」，主 Agent 不再自己空转干等；派单结果也从「已叫醒 N 人」改成「已派给 N 人」。
- **不再承诺做不到的事**：主 Agent 的玩法提示原先写着"你会被叫醒"，而房间 → 主 Agent 这条边按定位并不存在。现在明说：派单后结束回合等回报，等不及就用 `ChannelTasks action=list` 看板。
- **状态去噪**：左栏成员被 @ 到时不再直接把这一行标成「需要你输入」，@ 只给黄点 + 一行「@ 了你」；「需要你输入」留给真的在等用户输入的任务。
- **看门狗不再有「判不了就当活着」的特例**：发言人一定是常驻同事（有 job 可判 pid），指针不会停在一个起不来的席位上等 20 分钟。
- **任务板改为频道右侧信息栏，支持就地编辑**：原先是对话上方一条常驻横幅，进入频道即占用近一屏高度，并与对话争用同一列宽度。现改为右侧信息栏（顶栏按钮开合，按钮带未完成数角标）：对话列恢复整幅宽度；栏内按**停滞 / 进行中 / 待认领 / 已完成**分组（需人工介入的置顶，已完成的默认折叠，附完成度进度条）；每条任务显示负责人、催办次数、引用数、最近更新时间。未手动开合过时，**仅当存在未完成任务时自动展开**，空板不占用空间；开合状态本地记忆；窄屏下改为覆盖层，不再压缩对话列。
- **任务板新增指派与详情编辑**：添加区常驻栏顶，除标题外可展开填写**详情**并**直接指派成员**（下拉仅列频道成员）；任务卡片点击就地编辑（标题 / 详情 / 指派，保存或取消），「完成」保留在悬停动作中以避免误触。为此新增任务板 `update` 动作（领域层 + HTTP `POST .../tasks/:taskId/update` + `ChannelTasks action=update`）：本人、lead 与用户可修改，修改后频道时间线追加一行变更记录（含变更字段），**变更负责人会唤醒新的承接人**；标题与其它未完成任务重复时仍会被拒绝。
- **任务板信息密度与视觉规范统一**：筛选收纳进标题行（幽灵下拉，悬停显形），详情输入默认单行高度并按内容自动增高，控件统一为无边框填充样式（含原生下拉的自绘箭头），完成度改为 2px 细线，分组之间增加发丝分隔线，卡片信息层级收紧（标题 12.5px/500、详情两行截断、元信息 10.5px）。同时统一命名与文案口径（如「删除任务」「筛选」「详情」「引用」），并为频道时间线中的任务板系统行补上**按当前语言的渲染**（落盘保留结构化事件，英文界面不再显示中文系统行），浅色与深色主题均已核对。
- **文件树 watcher 不再"面板没打开也连着"**：它是又一条常驻长连接，以前只要工作台 dock 渲染过就连上（收起或切到其它工具页也照连），白占 6 条同源配额里的 1 条。现在只在文件面板**真的看得见**时连接（桌面看 dock 的可见性、移动端看抽屉是否滑开），隐藏即断开、重新可见再接回。
- **目录写坏不再无声**：目录预览 / 未读写失败会留一条审计（jsonl 已落盘、气泡不丢，但可排查），审计文件轮转后读回也不再丢上一段。
- **存储预留**：目录与频道模型预留外部成员、共享房间、宿主字段位（含读盘清洗），为后续跨端协作留位，当前行为不变。

### 🐛 问题修复

- **PTC 模式工具面收紧**：延迟加载的 MCP 工具统一在 REPL 沙箱内调用，不再同时出现在对话层直连工具列表里，模型不会绕过 REPL 直接调用 MCP。
- **与专家/skill 会话时积分消耗不显示**：修复在无法解析上下文窗口大小的场景下，本轮已产生的积分扣费无法送达客户端、导致回复底部积分消耗一直不展示的问题。现在即使上下文用量暂不可用，也会通过独立的积分帧把已结算的消耗下发给客户端，同时不污染真实上下文用量基线。
- **对话遍历更稳**：MCP 服务器缓存并发重排不再引起偶发 "Duplicate tool names" 报错，整轮对话不会因此中断。
- **模型选择浮层**：修复 Web UI 模型浮层中「思考强度」二级面板超出视口被裁切的问题，模型较多或窗口较矮时各档位也能完整展示。
- **Glob/Grep 大小写**：修复 Windows 和 macOS 上 Glob/Grep 的 glob 参数大小写不匹配时静默搜不到文件的问题，Linux 仍保持大小写敏感语义。
- **git 仓库发现不再向上走到盘根（#99803）**：仓库根、VCS 根、项目根与 prompt 上下文的向上查找统一收敛到 enclosing-root 逻辑，在卷根 / 用户容器 / 进程临时目录根处停住，避免在临时目录冷启动时反复探测不存在的 `.git`。
- **Web UI 上滚不再被拉回底部**：Agent 输出期间用鼠标滚轮向上滚动查看历史时，对话区不再被自动吸底抢回底部；滚回底部后恢复跟随。在思考内容、流式代码块等区块内滚动也不会误停对话区的跟随。
- **思考等级同步**：在 CLI 切换思考档位后，Web UI 的思考强度选择器会同步更新，不再停留在会话开始时的旧值。
- **会话授权缓存**：文件、命令和网络审批选择"本会话允许"后保留会话授权缓存，不再自动新增安全中心会话规则，避免覆盖已有权限或扩大授权范围。
- **PTC 或自定义 Agent 作为主 Agent 时的补话**：执行工具期间通过 Enter 补充的消息现在能在下一次模型请求生效，不再只能等待整轮任务结束。
- **停止任务后的迟到权限请求**：修复停止任务后旧命令的迟到权限请求阻塞后续删除确认弹窗的问题。
- **macOS 下反复触发沙箱删除审批**：修复 PPT 截图等操作清理系统缓存时反复触发沙箱删除审批的问题。
- **Server 端修复**：修复 Server 的 workbuddy preset 和显式 tools 声明中的延迟工具无法通过 ToolSearch 发现和调用的问题；修复会话回退后尚未发送新消息时，冷启动恢复历史选中旧分支的问题；修复 Server 内存文件系统入口丢失调用方初始文件和构造选项的问题；补齐反射元数据依赖，避免 Server 构建时意外使用不一致的依赖版本。
- **WorkBuddy 团队成员状态**：修复缺少 Team 身份、恢复期无物理任务的成员被误报为运行中，以及永久关闭的成员被后续消息错误恢复，导致任务完成或中断后会话仍可能显示运行中的问题。
- **任务指派用显示名落板会导致被指派人认领被拒**：现在 create / dispatch 一律把显示名解析成 agentId 再落板（解析不到就拒绝），板上只存 id。
- **修复开轮的第一棒**：开轮时不再把刚开口的那个人排进这一轮。上游是同步编排，发言人在自己那一棒只会看到"没有新消息"随即 `(pass)`；我们是投递叫醒，且投递不会给自己发自己的入站——首发若是说话人自己，这一棒就没人接、整轮静在原处。现在成员 kickoff 的首发是别人。
- **修复 invite 不被轮次抢走**：`CreateChannel action=invite` 叫人时不再被"当前轮次指针"接管，优先通知新加入的成员（以及 kickoff 里 @ 到的老成员）。
- **修复「终止过的同事又自己跑起来」**：用户明确终止过的同事，自动唤醒（频道发言、派单、广播）一律不再把它拉起来，信留在它的收件箱里等它回来自己看；只有用户下次显式 @ 它才算重新激活。
- **修复「用户在频道里发话没人接」**：用户发言会重开一轮房间轮次，但唤醒仍按"成员发言"那条规则算——指针指向的第一位从来没被叫过，用户的话谁也不接，整轮静在原地只能等 20 分钟看门狗。现在开轮后立刻唤醒指针指向的那一位，后面按名册依次接力。
- **修复「@ 了没人回」**：频道里 @ 某个人不再被"轮次指针"吞掉——@ 永远优先，被点名的人一定会被叫。
- **修复「只发卡片发不出去」**：`SpeakInChannel` 的文档写着发选项卡卡片时可以省略正文，实现却报"content 必填"；现在两种写法都能发出，报错文案也统一了。
- **修复「停在频道页点什么都没反应」**：浏览器对同一个源（HTTP/1.1）只给 6 条连接，而页面常驻的通知流已经占掉 4 条。频道页再单开一条就顶满配额 —— 这时所有点击都被浏览器排队。现在频道与侧栏**共用同一条** Agent Home 事件流，频道页不再额外占连接；切频道只是换一次参数重订。
- **lead 现在真的能派单**：任务板原先硬编码「不是 lead」，导致 lead 也派不了单。现在按频道 lead 判定；主 Agent 因为按用户身份操作，也能直接派单/催办。
- **看板不再被一条脏数据带崩**：频道 SSE 载荷里的任务板逐条校验（缺字段的行丢弃），不再把坏行灌进看板导致排序 / 计数 / 归属一起错。
- **任务板写失败有反馈、快捷键不再误伤、可键盘操作**：建/改/删/完成失败原先**静默**，现在服务端原文会以提示条弹出，面板内也有错误行；在"删除确认"上按 Escape 不再连带收起整个任务板，编辑器打开时 Escape 先取消编辑、不丢草稿；任务卡支持 Tab 聚焦 + Enter 打开编辑，「详情」输入上限定为与服务端一致的 2000 字。
- **禁用 Skill 响应**：用户直接调用已禁用 Skill 后，会话不再持续显示思考中、请求可以正常结束。
- **自定义模型弹窗**：点击弹窗外区域不再关闭弹窗，避免误触后整张表单内容丢失；关闭入口收敛为右上角 X 与列表页 Esc，表单页「取消」「保存」只回到列表页。表单字段顺序调整为 显示名称 → 提供商 → 接口 URL → API Key → 模型 ID。模型 ID 校验放开 `/`，`z-ai/glm-5.3` 这类带厂商前缀的模型 ID 可以正常保存。
- **模型选择**：去掉输入框模型 chip 上的无限符号（深度思考标记），避免被误读为无限额度/无限积分；思考状态仍由 chip 悬浮提示与模型浮层里的开关表达。倍率为 0 的模型直接显示 `0x`，不再回退显示上下文窗口大小；上下文窗口只在模型未下发倍率时兜底展示。
- **REPL 工具调用**：工具签名会明确展示参数对象结构，并在误传位置参数时返回清晰提示。
- **会话标题生成**：标题统一解析 typed badge，图片与文字一起发送时不再显示 `@image#N:` 和哈希文件名，应用、聊天记录等资源也会展示为可读名称。

### 📝 文档更新

- **CLI 文档**：同步近期 CLI 能力说明、配置参考、发布说明和多语言文档，并修正文档链接。
- **文档可见性**：移除内部实验和设计文档，精简启动性能采集说明，避免展示内部路径与实现代号。

## [2.153.0] - 2026-09-17

### 🎉 新功能

- **客户端自定义 header 透传到 model gateway**：stream-json / print 链路的每条 prompt 可通过 `_meta['codebuddy.ai'].customPassthroughHeaders` 携带一组自定义 HTTP header，agent-cli 会在本轮**每次**出站模型请求上转发到官方 model gateway。逐轮 set-or-clear，不跨轮残留；由启动期前缀白名单 `CODEBUDDY_PASSTHROUGH_HEADER_PREFIXES`（默认空 = 功能关闭，即安全边界，须与内部 `X-*` header 命名空间不相交）把关，且沿用 custom-model 门控（不下发到第三方/自定义模型端点）。
- **质量闭环能力**：新增 agent-cli 质量测试套件与质量保障 harness，覆盖 ACP 协议、控制平面、Headless、MCP、Package、Prewarm 等领域的 conformance 测试，以及 MCP 客户端、多轮对话、权限流程、Session 存储、工具管线等集成测试。
- **质量 harness**：提供 artifact-collector、fake-mcp-server、fake-model-server、normalizer、permission-driver、real-entry-runner、test-workspace 等可复用测试基础设施。
- **质量入口脚本**：新增 codebuddy-quality-mvp 脚本作为质量执行入口。
- **质量测试配置**：新增 vitest.quality.config.mjs，独立运行质量套件。
- **质量策略文档**：补充 agent-cli 质量需求、技术设计、交付清单与校准测试清单等质量建设文档。

### 🔧 功能改进

- **质量测试（telemetry）**：telemetry 数据上报 E2E 升级为全链路场景测试，覆盖完整对话事件族、公共上报字段信封、身份环境变量注入与 TUI 反馈问卷场景，提升遥测链路回归防护能力。
- **构建依赖锁定整理**：清理 `pnpm-lock.yaml` 中重复的构建期依赖解析条目（Babel / Jest 系），不改变运行时依赖与发布产物内容。

### 🐛 问题修复

- **`--a2a` 与 stream-json 混合模式下 A2A 轮次在 stdout 上完全静默**：一条 A2A 消息进来只回 A2A 结果，同一进程的 stream-json 通道上什么都读不到。现在 A2A 轮次会和普通轮次一样，在 stdout 上完整输出本轮的初始化信息、执行内容与终态，A2A 侧的结果不受影响；两路输出落在同一条 stdout 上，本轮终态先于 A2A 响应落地。
- **同一会话里 A2A 轮次之后，接下来的轮次可能缺少初始化信息**：初始化信息此前按会话记录「已发过」，导致后续轮次收不到自己的那一条。现在按轮次记录。
- **一轮输出可能重复或缺失**：长轮询与直接请求撞上同一轮时会各渲染一遍、同一轮内容写两次；权限被拒中断与正常完成两条收尾路径也可能各写一条终态。现在同一轮只渲染一次、只产出一条终态。
- **首帧内容可能丢失**：初始化信息的准备包含一次较慢的工具清单查询，这段时间内到达的模型输出会整段丢失，只剩最后的终态。现在这段窗口的内容会被完整保留并按序输出；准备失败或超时则降级为一份最小可用的初始化信息，不影响本轮结果。
- **取消一个正在运行的 A2A 任务后 stdout 仍会继续输出**：取消此前只作用于执行侧，管不到输出。现在取消会同时停止该轮的后续内容输出。
- **进程可能在输出尾部写完之前退出**：A2A 轮次的输出不经过原有的在途追踪，退出时可能截断。现在退出前会等待这部分输出完成。
- **混合模式下畸形的 JSON-RPC 消息处理不当**：协议归属此前只认版本号正确的消息。版本号写错或消息被截断时会落到另一条通道，调用方只收到一条它根本不认识的输出，连「自己发错了」都无从得知；而同时带有两种协议特征的消息更会被当作普通输入**照常执行一整轮**。现在这类消息一律按协议错误返回，不再进入执行路径，发错了在协议层面可见。纯文本提问与提到 jsonrpc 字样的自然语言提问不受影响（消息被截断时按规范无法判定请求标识，调用方仍需依赖自身超时，此处改善的是可诊断性）。
- **对话空包不再连打**：对话接口 200 空 body 记一次终态，会话层不再自动重试。
- **对话容灾去重**：同一轮对话容灾流已在飞时，不再发第二轮请求。
- **备站地址兜底**：HTTP-DNS 给出的 IP 连不上或列表为空时，再钉北京 Anycast；兜底地址不进主站。
- **Chat 408 切备**：请求超时按 408 切一次备站，拦截器已切过后不再同域重打。
- **空流不提前 commit**：200 但 body 是流时不锁死，后续 408 仍可切备。
- **配置最终兜底**：`/v3/config` 主备都失败后，DIRECT 路径在剩余预算内钉备站兜底 IP 最后一枪；代理路径不绕过代理。
- **容灾并发去重**：同一对话请求已有切备流在途时，不改写请求或继续钉 IP，内部哨兵按取消路径收口并写入诊断日志。
- **工具调用上报**：修复同一轮并发调用多个工具时仅上报最后一个 `chat_tool_action` 的问题，确保每个工具结果都独立上报。
- **stream-json 用户消息回显**：修复启用 `--replay-user-messages` 且关闭会话持久化时，stream-json 模式偶发遗漏用户消息回显的问题，并保留客户端传入的轮次 ID。
- **会话标题生成**：标题生成超时时间延长至 1 分钟，减少模型响应较慢时标题生成失败。

## [2.152.0] - 2026-09-16

### 🎉 新功能

- **本地 shell 子模式（bash-local，命令不进入模型上下文）**（#116394）：在 Bash 模式（`!`）下按 `Shift+Tab` 切入本地 shell 子模式，提示符变为青色/teal。命令与输出仅在当前 TUI 会话中瞬态展示，从不进入对话历史——既不喂给模型，也不写入会话记录（`--continue` / `--resume` 时不回放），`/btw`、上下文压缩、`/fork` 同样看不到。本地命令可在本次运行中用 `Up`/`Down` 与 `Ctrl+R` 连同模式召回，但不写入输入历史文件，重启后不保留；普通命令召回不变。
- **`/effort` 与模型能力联动**：`/effort` 命令和交互式 effort 面板现在只展示当前模型可用的档位。选择当前模型不支持的档位（例如部分模型不支持 `max`）会被直接拒绝并提示可用档位，不再出现「设置成功但请求被拒」的情况；无法确认模型能力时保持原有档位并给出提示。展示的当前档位会按当前模型能力换算，配置里的档位高于模型可用范围时会同时提示实际生效档位；发起模型请求前，超出当前模型可用范围的 effort 会自动收敛到可用档位，避免请求因档位不支持而失败。
- **内置 Miora MCP 走沙箱 stdio**：内置 Miora MCP 在启用 WorkBuddy 沙箱时通过双向 stdio 运行，并在沙箱会话重建后自动恢复连接。

### 🔧 功能改进

- **主 turn 聚合键对外暴露**：W3C baggage 新增 `codebuddy.root_request_id` 条目，与已有的 `codebuddy.session_id` / `codebuddy.conversation_request_id` / `codebuddy.conversation_message_id` 并列；同时为 Hook / Bash 子进程新增 `CODEBUDDY_ROOT_REQUEST_ID` 环境变量。Hook / bash 子进程再拉起的 OTel-aware 服务可据此把 subagent / team 子调用的观测数据归回主用户轮次。
- **降低预热资源占用**（#118883）：降低 WorkBuddy 和 CodeBuddy 预热待命进程的常驻内存，保留激活后的完整对话与工具能力，并加强内存防劣化保护。
- **CBC WebUI 消息交互**：消息操作栏在桌面端按需显示，频道与普通对话的消息空白区域可直接聚焦输入框；时间分隔采用更清晰的相对日期和星期展示。

### 🐛 问题修复

- **网络中断后会话卡死无响应**：修复模型流连续因网络错误中断、自动重试预算耗尽后，本轮不再返回任何结果、界面持续停在「加载中」直到用户手动停止的问题。现在预算耗尽会立即下发终态错误，用户可直接重发。此前该状态还会让随后发送的消息一并静默排队、永不执行，需等 30 分钟兜底超时才恢复，现已一并修复。
- **Windows Web UI 源代码管理面板与内容搜索**：修复 Windows 上 Web UI 的 Git 面板恒显示「不是 git 仓库」、分支列表与提交历史为空，且页面不报错的问题（macOS / Linux 不受影响）。修复 Windows 上内容搜索整体不可用（报 `spawn grep ENOENT`）的问题：内容搜索现在优先使用随 CLI 分发的 ripgrep，其次系统 ripgrep，最后回退 grep；没有匹配结果也不再被当作失败上报。
- **TUI 中断**：修复批准工具权限后，前台命令在排队消息场景下按 Esc 无法中断的问题，并补充级联清理回归覆盖。
- **WorkBuddy 场景恢复 ImageGen / VideoGen 工具可用**：修复 WorkBuddy 精简产物中 `ImageGen` / `VideoGen` 工具因构建期被误排除而始终不在可用工具列表中的问题。WorkBuddy craft / plan / expert 工作模式本就把这两个工具纳入白名单，此前会导致模型在这些模式下无法生成图片和视频；恢复后是否真正启用仍由产品开关和环境变量控制，未开启时不会出现在工具列表里。
- **WorkBuddy 精简 CLI 异常诊断**：修复 WorkBuddy 精简 CLI 进程在崩溃、被信号收、或终端吊销时缺少退出诊断落盘的问题，恢复与其它 CLI 变体一致的 `~/.codebuddy/logs` 记录能力，方便事后闭环根因。
- **搜索工具改名后禁用配置失效**：修复 WorkBuddy 搜索工具改名后旧禁用配置在 CLI 执行阶段失效的问题；升级前禁用 agentic_search 的用户无需重新操作安全中心，domain_search 仍保持禁用。
- **技能清单条目丢失来源与位置信息**（#117081）：当技能描述以多行形式书写时，清单里的该条目会被拆成多行，导致模型看不到它的来源标记和文件位置，也就无法据此加载技能。现已将描述统一折叠为单行后再展示。
- **Skill 描述覆盖**：修复内置 Skill 经市场更新进入插件缓存后，宿主显式配置的 description 上限仍被总预算二次截短的问题。更新前后同一 Skill 现在保持一致的描述长度。
- **插件市场下架后无法启停卸载**：修复插件市场下架后，仍在本地安装的插件无法启用、禁用或卸载的问题。
- **macOS 沙箱安全删除**：修复关闭删除保护后，Python 和 Node.js 删除操作被沙箱拦截时可能因缺少绝对路径而无法触发 `delete=ask` 审批的问题；修复移动既有文件后后续删除绕过安全删除的问题，移动后的路径仍自动授权，但删除会进入废纸篓。
- **Grep 沙箱稳定性**：将分页上限下推到实际搜索并减少高频输出日志，降低大范围搜索对 sandbox IPC 的压力。
- **工具参数校验**：修复 Bash、PowerShell 和 Monitor 工具收到非字符串命令参数时可能中断整批工具调用的问题，现在会返回可读的参数错误并继续执行其他工具。

## [2.151.0] - 2026-09-14

### 🎉 新功能

- **Web UI 按用户消息回退（rewind）**：会话中 hover 任意一条用户消息即可「回退到这里」，弹窗提供与终端一致的风险告知与回退范围（回退对话 / 回退代码 / 两者）；回退后自动刷新会话并把该条消息回填到输入框，方便修改后重新发送。文件回退接口支持按调用方指定的会话解析，避免回退点列表与回退动作作用到其它会话。

### 🔧 功能改进

- **产物声明只保留带外通道**：移除迁移期临时受理的 `::codebuddy-artifact::` stdout 标记，脚本请统一往 `$CODEBUDDY_ARTIFACTS` 指向的文件追加 JSON 行来声明产物；标准输出不再被解析，打这样一行只是普通输出。
- **模块拆分**：把 `packages/agent-cli/src/node/update/` 抽成独立 workspace 包 `@genie/cbc-update`，与 `@genie/cbc-tui` / `@genie/cbc-workflow` / `@genie/cbc-daemon` / `@genie/cbc-cron` / `@genie/cbc-a2a` 保持同一范式；对外行为不变。
- **对话 IP 直连**：备站失败后只钉 HTTPDNS IP；HTTPDNS 为空才用兜底 Anycast，不再钉 LocalDNS。

### 🐛 问题修复

- **受管运行时启动诊断**（#115185）：记录凭据保护接收和初始化状态，帮助定位本地任务启动异常且不输出凭据内容。
- **Web UI Markdown 表格**：修复「有单元格为空」的表格行被误拆成两行的问题，此前这类行会让整张表错位（内容串列）或直接退化成纯文本展示。
- **Glob/Grep 搜索稳定性**：修正 `.gitignore`、路径 glob 和特殊文件名的匹配；Grep 先筛选文件再搜索内容，避免读取匹配范围外文件；保留 glob/type 组合、显式输出模式及上下文格式，并让 Glob 明确提示不存在的可选搜索目录。
- **图片格式兼容**：修复用户图片、工具返回图片和历史图片因格式不兼容导致模型请求报错的问题。统一发送 JPEG、PNG、WebP；BMP、TIFF、GIF 自动转为 PNG，无法处理的图片以文本占位。
- **并行工具调用历史分组**：修复一轮并行工具调用在下一轮对话里被拆成 N 条消息、同一段思考文本重复 N 份的问题。现把工具结果暂存，等这组并行调用结束再整体排到组尾，避免白耗上下文，也顺带消除并发工具调用丢失思考签名的成因。
- **Web UI 会话被旧连接占用**：修复刷新或重开页面后显示「已在其他窗口打开，当前只读」、必须手动点「接管」才能继续对话的问题。改为按文档识别遗留连接，覆盖移动端多页面互抢、智能体窗口（iframe）重载与「接管」三条路径；确有两个窗口同时在线时仍保持只读跟随，不会互相抢占。
- **智能体窗口反复重载**：修复新版本检查在智能体窗口内也生效、导致整页刷新并反复重载的问题；版本更新只在宿主页面处理，窗口白屏自动复活的次数上限不再被重载动作清零。
- **macOS 沙箱 find 卡住**：修复目录遍历时 Broker 连接无法持续处理请求而卡住的问题，保留并发限制并限制单连接请求积压。
- **Windows 沙箱命令路径**：修复 Git Bash 缺少配套工具路径导致 grep、tail、cat 等命令无法执行的问题；Bash 初始化不再依赖 dirname，精简 PATH 环境下安全删除包装器可正常加载。
- **WorkBuddy 子 Agent 沙箱复用**：修复子 Agent 复用主沙箱时，Broker 因会话 ID 不匹配而拒绝 Bash 文件访问的问题。
- **Web UI 资源管理器 / 源代码管理器打开文件**：修复右侧栏无法打开文件的问题。工作树中的图片等二进制变更使用文件预览，暂存或已删除的二进制版本明确提示暂不支持；Git 相对路径按仓库根解析，普通文件与 staged/unstaged diff 可分别打开和切换。
- **插件初始化告警**：插件后台初始化失败时仅写入日志文件，不再在 TUI 中显示启动警告。
- **WorkBuddy 旧沙箱配置补齐**：修复升级后旧沙箱配置未补齐临时目录等默认文件规则的问题；迁移时补回缺失默认项，并保留用户单条规则的权限和优先级。
- **并行命令授权弹窗**：修复相同命令并行触发拦截后，选择「本次会话始终允许」仍对同一授权范围内的排队请求重复弹窗的问题。
- **沙箱临时文件删除**：修复沙箱内删除 `/tmp`、`/private/tmp` 下临时文件被拦截并弹出删除审批框的问题；为原生基线放行目录补入显式条目，使其在有序规则表中先于全局删除兜底命中。
- **自定义 MCP 安全管控**：修复 WorkBuddy 本地会话在安全中心关闭自定义 MCP 后，仍可调用 iWiki 等自定义 MCP 工具的问题，覆盖 HTTP、SSE 和 stdio 连接。
- **WorkBuddy Desktop 沙箱排除命令**：不再通过 `sandbox.excludedCommands` 跳过沙箱，避免复合命令和重定向无审批写入工作区外；独立 CLI 的命令排除行为保持不变。

## [2.150.0] - 2026-09-11

### 🎉 新功能

- **A2A 被调过程结构**：思考、模型中间回复与工具过程按执行顺序进入任务历史；最终回复和文件作为独立任务产物，调用方可以稳定区分执行过程与正式结果。
- **Web UI 消息操作**：用户消息和助手正文支持复制完整内容、查看消息时间；超过 12 行的用户长文本默认折叠，可展开或收起。助手回复的复制按钮和时间在生成结束或停止后一起显示。
- **Web UI 渲染 Mermaid 图**：助手输出 mermaid 代码块时直接在对话里画成图，主题跟随浅色/深色；图上可复制源码、导出 SVG。流式过程中围栏未写完时保持代码块，解析成功后再替换成图。
- **Web UI 嵌套围栏按示例预览**：外层围栏按示例预览渲染，内层围栏按自身语言做语法高亮，复制仍取整段示例原文。
- **Web UI 复制与导出入口补齐**：模型输出、用户消息、频道来信、工具调用的参数与结果、Markdown 表格、Mermaid 图都能直接取走；对话右上角支持整轮导出为 Markdown 或 JSON。复制类按钮在触屏与窄屏下常驻显示。

### 🔧 功能改进

- **出站 A2A 工具寻址**：`A2ASendMessage` / `A2AGetTask` / `A2ACancelTask` / `A2AGetAgentCard` 统一改用稳定的 `agent_id` 寻址，取代原先按名称匹配的方式，避免重名歧义。
- **中文/多语言 agent 名称**：稳定标识保留中文、日文等非拉丁名称的可读前缀，不再退化为通用占位。
- **A2A 被调输出契约对齐 A2A 1.0**：过程消息的类型标识从数据体移到片段元信息，统一用 `metadata.codebuddy_type` 表示；内容类型改为按 A2A 1.0 的成员判别识别。任务产物不再携带 `kind`、`sequence`、`toolCallId` 三项元信息。对接方需同步调整判别逻辑。

### 🐛 问题修复

- **出站 A2A 重名下游 agent**：同一父 agent 绑定多个名称完全相同的下游 A2A agent 时，按稳定标识区分，重名的下游都能被发现并调用。
- **A2A 被调问答重发**：同一份回答被网络重试或重复点击再次提交时，直接返回任务当前状态，不再误报参数错误。
- **Bash 非 UTF-8 输出**：修复 Bash 非 UTF-8 输出及沙箱异步事件处理异常可能导致 CLI 退出的问题；执行命令时按需加载编码支持。
- **沙箱中文文件名**：修复 macOS/Linux 沙箱缺失字符编码环境时中文文件名显示为问号的问题。
- **Windows 删除盘符路径**：安全删除在进入回收站前拦截包含内嵌盘符的混拼路径，覆盖变量和通配符展开。
- **Windows 子进程残留**：修复 Git Bash 启动的 hooks 等子进程在 CLI 退出后残留的问题；普通后台任务随所属 CLI 回收，daemon 保持独立存活。
- **可视化指南工具改名**：将 WorkBuddy 可视化指南工具改名为 `widget_guidelines`，并兼容旧 `read_me` 配置与历史记录。
- **Web UI 带附件的用户气泡**：发送图片/文件后按快照合并回显，一条消息只保留一条气泡，正文不再重复。
- **Web UI 流式正文掉字**：改用服务端逐帧时间戳精确判重，避免相邻合法 delta 被误丢，标题、列表、表格不再被静默咬掉字符。
- **Web UI 流式 Markdown 错位**：渲染前修回块级结构，流式过程中标题、列表、表格即可正常分层。
- **Web UI 流式表格被拆散**：拆行后保持表格行相邻，不再把行内格分隔误判成新行。
- **取消中断**：修复排队输入后按 Esc 中断时，前台子任务可能继续运行且界面无响应的问题。
- **Team 子 Agent 内存**：修复长时间使用 Team 子 Agent 时，已结束任务的 Session 与历史被持续持有，导致堆内存随任务数量增长的问题。

## [2.149.0] - 2026-09-11

### 🎉 新功能

- **Skill 交付物声明**：Skill 执行 Bash 命令时可通过 `$CODEBUDDY_ARTIFACTS` 声明本地文件或远程资源；作为 A2A 被调方时，这些声明会转换为文件 artifact 下发，让调用方可获取脚本生成并上传的 pptx、pdf、xlsx 等交付物。声明独立于标准输出，支持可选元数据；格式错误的记录会被跳过，项目外本地路径会退化为纯引用。
- **Web IDE 多分组编辑**：编辑区支持最多四个横向或纵向分组，文件和终端标签可跨分组拖拽，也可在底部终端面板与编辑区之间移动；分组布局、激活标签和分隔比例支持持久化恢复，迁移终端时保持现有会话。
- **企微机器人全局默认配置**：可统一设置未单独配置机器人的流式回复与权限/建议卡片默认值，支持 TUI、Web UI、配置文件与环境变量，并按单机器人配置、全局默认、环境变量、内置默认的优先级生效；修改后立即同步到未单独设置的运行中机器人。

### 🔧 功能改进

- **Web UI 长会话增量渲染**：打开消息较多的会话时仅渲染最近内容，接近顶部时自动展开更早消息，并保持当前阅读位置，改善长会话打开速度与滚动流畅度。
- **多 CBC 进程自动升级**：多个 CBC 进程共用同一安装目录时，自动升级会预热当前版本 lazy chunks，并通过带内容哈希的 chunk 清单执行合并安装，避免其他活跃进程阻塞升级或被磁盘覆盖影响。
- **Transcript 链路上下文落盘**：会话 transcript 的消息 `_meta` 会记录其对应的 W3C carrier，便于沙箱代理可靠推送企微消息和失败补传，同时避免链路信息进入模型上下文或错误继承到历史消息。
- **W3C 链路追踪传播**：完善 ACP、stream-json、进程内 Server API、SDK 控制请求与出站 A2A 调用的 `traceparent`、`tracestate`、`baggage` 传播，让具有明确请求归属的响应与实时更新保持正确链路上下文。

### 🐛 问题修复

- **A2A 被调链路问答**：修复回答被接受后，任务状态仍携带已作答问题卡片，导致调用方重复展示、重复提交并收到参数错误的问题。
- **延迟工具调用长 ID**：修复 MCP 工具接收长数字 ID 时可能因精度丢失而无法定位资源的问题，嵌套在代理工具参数与数组中的长 ID 同样可正确恢复。
- **排队对话链路归属**：修复连发多轮对话时，排队 prompt 在 ACP 空闲 drain 阶段错误继承上一轮 W3C carrier，导致后一轮响应被归属到前一轮 trace 的问题。
- **REPL 工具超时**：cell 超时改为按空闲无进展判定，等待用户交互或长任务在途时不再被误杀；超时后仅放弃当前 cell 并隔离后台残留逻辑，默认超时时长由 30 秒提升至 60 秒。
- **插件依赖启用语义**：修复插件更新或 `autoEnable: false` 安装时意外启用依赖、已禁用插件被物化为已安装、会话级依赖配置残留，以及延迟发布记录缺少依赖边的问题。
- **专家团消息状态**：修复团队模式排队接力启动新一轮时，上一轮可能被提前判定结束并重复发送结束通知，导致前端消息状态与加载态错乱的问题。

### 📝 文档更新

- **历史发布文案**：清理旧版本说明中的第三方品牌表述。

## [2.148.0] - 2026-09-09

### 🎉 新功能

- **快速问答工具注入**：支持快速问答模式下的工具注入流程，完善推荐胶囊退场动画。
- **AI 会话标题**：进程内 Server 模式支持生成并实时发送 AI 会话标题，云端会话可自动更新标题。
- **对话网络容灾**：直连对话在出字前，遇到解析失败、连不上、可恢复 TLS 错误或网关 502/503/504 时，会先换同域名地址，再改打备站；自签证书、本机断网和已经出字后的断流不会自动切换。托管 CLI 云控 / Chat 读 `~/.workbuddy/failover.json` 选路，默认主源、熔断后才切备源，不调用 Desktop / daemon Route RPC。
- **项目数据清理命令**：新增 `codebuddy project purge` 命令，支持按项目预览并清理本地会话、任务、文件历史、输入历史、项目级 MCP 状态和目录信任记录；交互模式将底层清理目标聚合为最多四个逻辑类别逐项确认，对路径碰撞、保留名称冲突或无法验证归属的状态保守跳过并提示，headless 环境支持 `--dry-run`、`--yes` 和 TTY 确认。

### 🔧 功能改进

- **流间静默超时默认值回滚为 20 分钟**：将 `CODEBUDDY_STREAM_TIMEOUT_MS` 默认值从 5 分钟回滚为 20 分钟，与 `CODEBUDDY_FIRST_TOKEN_TIMEOUT_MS` 默认对齐；两者仍是独立常量与独立环境变量、可各自单独覆盖，长任务中大工具输出后的短暂静默或链路瞬时抖动不再被误判为死连接。

### 🐛 问题修复

- **内部网关 429 白名单重试**：请求级重试对 `429` 改走白名单——自有/官方模型仅在 body 携带瞬时/短窗口限流码（`14003 RateLimitError` 及 Craft 秒/分窗口 `6001/6002/6005/6006`）时才退避重试，License 过期、未激活、会话数超限、Craft 时/天窗口、排队等确定性失败一律零重试直接上抛交 fallback 换模型，避免配置/权限问题空转满重试配额；`5xx / 408 / 409` 照旧重试，第三方模型沿用「见 429 即重试」。
- **ACP skills 刷新**：修复 ACP 模式下项目级、用户级和插件 skills 晚加载或更新后斜杠命令列表未同步刷新的问题，可见性配置变化后也会自动刷新。
- **内置插件市场**：修复内置插件市场刷新期间可能重复安装或使用过期配置，导致市场安装结果不稳定的问题。
- **压缩标记一次性语义**：修复会话触发自动上下文压缩后 `X-Agent-Purpose` 永久停留在 `conversation:compact`，导致后续所有对话埋点与服务端会话日志静默丢失、Langfuse trace 标签错标的问题；该标记改为仅作用于压缩后紧随的一轮请求，手动 `/compact` 不再写入。
- **压缩 SessionStart hook**：修复 CLI TUI 手动 `/compact` 成功后因压缩历史异步写入而偶发遗漏 `SessionStart(compact)` hook 的问题，正确区分手动与自动压缩路径，避免重复触发或阻塞会话收尾。
- **压缩 hooks 未触发**：修复手动和自动上下文压缩未触发 `PreCompact`、`PostCompact` hooks 的问题，并向 SDK callbacks 正确传递压缩触发类型与摘要。
- **Windows 换行技能/智能体解析**：修复 Windows 换行格式的技能和智能体文件可能丢失描述、错误解析布尔字段的问题，兼容 UTF-8 BOM 文件头。
- **MCP 工具资源结果**：修复 MCP 工具返回资源内容时，下一轮对话可能因工具结果文本丢失而中断的问题。
- **纯 print 模式后台 Agent**：修复纯 print 模式下后台 Agent 等待十分钟后退出、无法输出最终汇总的问题；该模式改为同步执行后台及具名 Agent，stdio stream-json 和交互模式保持不变。
- **沙箱命令环境变量缺失**：修复连接器绑定成功后沙箱命令仍提示缺少运行时凭证的问题。
- **Windows 状态栏命令**：修复状态栏命令经原生 Job 收容时引号被错误转义、Job 初始化失败后状态栏静默消失、含空格工作目录下执行失败、引号内普通文本被当作路径改写等问题；初始化失败时自动降级并继续显示，保留 Windows 子进程窗口隐藏行为。
- **subagent 工具未找到不再作废前序工作**：修复 subagent 内部请求了不在允许工具列表里的工具时，父任务被立即判失败、已完成工具调用全部作废的问题；现在遇到可恢复的模型错误会等待内部智能重试完成再决定成败。
- **Web UI 图片气泡**：发送图片后刷新会话，用户气泡不再并排出现两张相同缩略图，只保留一张预览和原文。
- **Web UI 流式回放**：刷新后回放不再重复拼接同一段文字；生成尚未完成时刷新，当前标签页会补回未落盘的进行中内容，而不会只剩空白。
- **Windows 裸命令解析**：修复 Windows 启动裸命令时解析阻塞、环境变量大小写不一致的问题，保持当前目录优先的命令查找行为。
- **Windows 子进程管理**：由 CLI 进程直接持有 Job、退出时统一清理子进程以降低内存占用，后台任务、daemon 和持久 tunnel 保留跨 CLI 存活能力；改进未处理异常时的进程退出行为，避免系统报错窗口阻塞子进程清理。
- **Agent Home 新建会话残留**：修复后台智能体使用顶部新建会话按钮后仍残留上一轮用户消息的问题，新会话由当前智能体自身的 ACP 连接创建并原子清空对话。
- **工具输出预览乱码**：修复 TUI 与 Web 中运行 Bash / PowerShell / REPL 工具时运行中输出预览与结果显示乱码的问题。
- **下掉微信支付 nativeurl 拦截**：工具输出中出现 `weixin://wxpay/bizpayurl?pr=...` 形状链接时不再自动弹出微信支付确认卡，输出原样透传；`WeixinPay-Required` 协议拦截行为保持不变。
- **macOS 文件回退审批**：修复 macOS Bash 文件拦截信息不完整时直接失败、不出现审批的问题，恢复 Sandbox Center 裁决回查，明确拒绝或无法完整确认权限时继续阻止重试。
- **沙箱原生文件权限对齐**：文件权限与 Sandbox Center 的读、写、删除裁决对齐，避免本地旧规则二次判断覆盖安全中心配置；默认 SSH 和产品登录凭据访问改为询问，Windows 原生确认当前会话备份启用后默认放行删除、备份关闭或未确认时默认询问。
- **Web UI 后台智能体恢复**：修复被宿主空闲回收的 worker 经 `--resume` 重新拉起后因空闲时钟未随新进程重置被立即回收、前端陷入"恢复中"无限重试死循环的问题；respawn 刷新空闲时钟，终态会话不再被反复自动保活，只读查看时明确展示"已结束运行 + 重新运行"。
- **Web UI 智能体运行状态**：修复已完成的智能体会话继续执行时，正文已显示思考中但左侧智能体项未同步显示运行状态的问题。
- **Web UI 会话接管**：修复单开仍提示「此会话已在其他窗口打开」无法重连的问题，「在此接管」通过 ACP `_meta` 通道发出显式抢写请求，服务端断开旧占用连接后授予新连接，带进程内互斥占位避免并发抢写双活；抢写失败时的原始错误透传给页面。
- **Windows MCP PATHEXT 解析**：修复启动命令写成「带路径但不带可执行扩展名」的 stdio MCP 服务无法拉起、工具整组消失的问题，启动前按系统 PATHEXT 规则补全扩展名，与命令行下的解析行为一致。

## [2.147.0] - 2026-09-07

### 🎉 新功能

- **本地数据清理**：新增 `codebuddy cleanup` 命令，支持按保留天数清理过期本地数据，并可通过 `--dry-run` 预览清理结果。
- **启动性能画像**：新增 `--startup-prof-md`，支持在 Node 和 Bun 版 CLI（含 Windows）导出启动阶段的 Markdown 报告和 JSON 时间线，显示模块加载、DI、生命周期及首请求准备耗时；按运行模式自动结束采集，支持自定义输出目录和文件名，兼容 `CODEBUDDY_STARTUP_PROFILE=1`。

### 🔧 功能改进

- **伽利略 SDK 升级**：将伽利略 Node SDK 升级到 `0.3.17-beta.5`。
- **构建工具链**：改进本地构建与开发启动流程，提升编译缓存复用效率，并修复构建时依赖版本冲突导致的失败。

### 🐛 问题修复

- **独立安装文档中心 404**：修复独立安装（Bun 二进制 / standalone）下 Web UI 文档中心一直「文档加载失败」的问题。二进制按 basename 扁平嵌入静态资源，docs 的 cn/en 同名 md 互相覆盖且 `/docs/*` 路由未适配扁平形态，导致 `sidebar-zh.json` / `search-index-zh.json` 及文档正文全部 404。现文档产物改为逻辑路径编码的唯一文件名，`/docs/*` 在磁盘与扁平虚拟文件系统两种形态下统一解析。
- **Windows 控制台黑窗**：修复 Windows 下启动受收容的子进程时弹出可见控制台黑窗的问题。
- **hooks generation_id 对齐**：CLI hooks 的 `generation_id` 对齐 session Request ID（`conversationRequestId`），与 IDE `agent.requestId` 一致；不再另铸独立 `session.generationId`，便于 hooks 与 session 观测 jsonl 关联。
- **任务回收与频道 Web UI**：协作式 reclaim、mutation lock、PID 复用防护，避免误杀存活 worker 或留下幽灵任务；Job broker 启动拆分 JobFileStore / broker runtime，修复 SWC 装饰器与依赖泄漏导致的启动失败；频道 Web UI 返回时还原进入前选中态，消息分页与 stick-to-bottom，频道 SSE 有界读取，idle 但仍存活的实例可 Stop。
- **Team 导航与状态刷新**：修复查看 team 成员或子代理时，所有 agent 结束后无法返回主会话的问题；保留 Main 导航入口，并支持在已结束成员的空输入框按 Esc 返回，优先退出 Vim 插入模式或历史搜索。修复恢复会话后空闲或已停止的 team 成员被误显示为运行中，以及正在查看的子代理结束后状态不刷新的问题。修复自动创建的团队在最后一个成员结束后未正确清理的问题，包括切换恢复到另一个已结束团队的场景；选择底栏时按 Esc 只退出选择，不会同时中断任务。
- **安全删除自动授权残留**：修复新建文件自动授权跨回合残留的问题：仅当前回合新建的精确路径删除时绕过回收站，安全中心规则刷新不会提前取消授权，后续回合会清理自动授权和临时规则并恢复安全删除。
- **Windows 默认程序黑名单**：Windows 不再读取旧 `systemToolPolicy`；未保存程序黑名单时固定下发默认系统程序黑名单，显式空名单仍按用户配置生效。

### ⚠️ 行为变更

- **TUI 主 Agent 命令重命名（Breaking change）**：`/mode` → `/agent-mode`，旧命令名不再生效，命令提示、帮助文案与报错说明已同步更新；TUI 主 Agent 显示位移除，欢迎页与输入区状态栏不再常驻展示当前主 Agent 模式名称，如需查看或切换可执行 `/agent-mode`，或读取设置项 `codebuddy.mainAgent.lastUsed`。

## [2.146.0] - 2026-09-05

### 🎉 新功能

- **客户端轮次标识**：raw stream-json 与 ACP 输入支持通过 `_meta['codebuddy.ai/conversationRequestId']` 提供 UUIDv7 轮次 ID，并将接纳后的 ID 传播到 transcript、模型请求头和语义消息输出；不扫描 JSONL 历史做碰撞检测。语义消息使用稳定 UUID，模型 generation 继续通过 `providerData.messageId` 分组，并在用户 turn 写入前固定 `conversationRequestId`。
- **UUIDv7 统一**：消息链路中新生成的 session、turn / 内部 run、模型 / hook generation、history entry、stream-json frame 和 ACP transport UUID 统一使用 UUIDv7，保留原有连字符格式，不重写旧历史或外部 ID；仅接受 UUIDv4 的消费方需要放宽校验。
- **可靠回显用户消息**：启用 `--replay-user-messages` 后，仅在主 session 的外部用户消息成功写入 transcript 后回显一次，并兼容 `--include-partial-messages`。
- **ACP 消息身份**：live 与 replay 的 user/assistant/thought `messageId` 统一复用 JSONL entry ID；工具仅使用 `toolCallId`。模型请求关联放在 `_meta['codebuddy.ai/modelRequestId']`，为现有产物上报保留同值 `llmMessageId` 别名。
- **文件快照关联**：新 `file-history-snapshot` 使用 `messageId` / `snapshot.messageId` 关联 checkpoint，不再生成顶层 `id` / `uuid` 或用它覆盖用户 entry；旧 local JSONL 保持原样可读，回滚仍使用 `snapshot.messageId`。
- **会话 metadata**：新 `session-meta` fact 增加自身 UUIDv7 `id`，仍只在白名单内容变化时追加、latest-wins、不参与对话树；兼容旧的无 ID 记录。

### 🔧 功能改进

- **Multitask 后台 worker 进度可见**：Multitask 模式下 Web / WorkBuddy 现在能实时看到协调器派出的后台 worker 的进度——worker 执行的工具调用与结果、以及最终回复，会嵌套显示在对应那张 Agent 卡下面，协调器会话本身保持空闲、不被 worker 活动打断。协调器与普通 Agent 调用共享实时 Agent 目录，可派发内置、自定义和插件 Agent；并发 worker 使用独立任务空间和可区分的进度卡片，并遵循 Agent 声明的 worktree 隔离。标准 ACP 客户端可从 `configOptions` 发现 Multitask 开关并通过 `session/set_config_option` 控制。后台 worker 结束后会在 idle 会话上再开一轮，先下发 `session_info_update`（`codebuddy.ai/unsolicitedTurn`），宿主用其中 requestId 打开新 Request；用户询问进度时协调器会读取一次中途输出并汇报。worker 仍可向用户提问或提交计划，提问留在父会话直到用户作答。
- **构建工具链升级**：将 standalone 构建工具链的 Bun 运行时升级到 1.4.1，uv 升级到 0.12.9。

### 🐛 问题修复

- **主 Agent 启动等待**：修复交互式 TUI 新建会话时主 Agent 盖章等待 MCP 动态配置初始化、导致启动最长多等 10 秒的问题。
- **Windows 子进程收容**：在 Windows 上通过随包 N-API Job Object 增加进程树收容（默认开启），确保 CLI 被强制终止时同步回收其会话子进程；设置 `CODEBUDDY_DISABLE_CHILD_PROCESS_CONTAINMENT=1` 可关闭回退到旧行为。非 Windows 平台行为不变。

### ⚠️ 行为变更

- **PromptResponse 字段调整（Breaking change）**：删除 PromptResponse 的 `_meta['codebuddy.ai/modelRequestId']`（旧值实际是 turn ID），不返回“最后一个模型请求”。模板、专家埋点改读 `conversationRequestId`，兼容旧 `requestId`；只读取被删除字段的旧客户端需要升级。完整 assistant 的 `message.id` 现在表示模型 generation，逐条 transcript 去重请使用 `uuid`；`system/init` 不再携带 turn ID，旧历史缺少 request ID 时也不会用当前 turn 回填。

## [2.145.0] - 2026-09-05

### 🎉 新功能

- **出站 A2A 与 stream-json 混合模式**：`--a2a` 现在可与 `--input-format stream-json` 组合使用。同一 stdin 中每一行归属一种协议，两种消息可以交替发送，并共同驱动同一个会话。混合模式支持 A2A `SendMessage` / `GetTask` / `CancelTask`，并沿用共享会话现有的工具权限策略。A2A 发起的执行调用 `AskUserQuestion` 时，Task 会进入 `input-required` 并返回可读问题及结构化 `questions`，调用方使用同一 `taskId/contextId/toolCallId` 回答后原执行继续运行（阻塞和 `returnImmediately` 两种发送方式均支持）。两条通道共享同一个会话，`contextId` 指向其他会话时返回标准 JSON-RPC 参数错误；`SendMessage` 会等待当前会话空闲（默认最长 10 分钟，可通过 `CODEBUDDY_A2A_WAIT_IDLE_TIMEOUT_MS` 调整），任务查询与取消不受等待阻塞。单独使用 `--a2a` 保持原有独占 stdio 行为，`--a2a` 仍不能与 `--acp` 组合。

### 🔧 功能改进

- **出站 A2A 审批结果文案规整**：出站 A2A 审批被拒或未作答时，`A2AGetTask` 给模型的结果从一整段散文改为固定的具名段落——`Approval shown to the user:`（被审批内容）、`Task result:`（卡片打开期间任务已跑完时才有）、`Outcome:`（用户动作、远端取消真实结果、停止轮询禁令）、`Reason:`（宿主传来的原因，JSON 编码后收尾，其后不再有指令；多条时改用 `Reasons:` 并标出各自 action）。同时删去不可靠的 `(agent "X")` 标注和冗余提示，仅保留三句反直觉指令：不要重新轮询、取消未确认时改调 `A2ACancelTask`、任务已完成时按真实终态汇报。轮询、远端取消与结果缓存行为逻辑不变。
- **出站 A2A 轮询节奏改为固定 500ms**：`A2AGetTask` 轮询从「2 秒起步、1.5 倍指数退避、最大 30 秒」改为固定 500ms，避免长尾处任务完成后仍被退避间隔拖住而看似卡死；总时长上限从 15 分钟提到 30 分钟。两个值仍可用 `CODEBUDDY_A2A_POLL_INTERVAL_MS` 和 `CODEBUDDY_A2A_POLL_MAX_DURATION_MS` 覆盖；`CODEBUDDY_A2A_POLL_BACKOFF_MULTIPLIER` / `CODEBUDDY_A2A_POLL_MAX_INTERVAL_MS` / `CODEBUDDY_A2A_POLL_MAX_ATTEMPTS` 三个环境变量随之删除。

### 🐛 问题修复

- **A2A 与 stream-json 会话复用**：修复复用会话时可能产生两份会话历史的问题；修复等待期间取消任务后可能重复返回冲突终态的问题；修复并发重复回答可能把仍在执行的 `input-required` Task 覆盖成失败态的问题（回答等待默认 10 分钟超时，避免断连调用方永久占用会话）。
- **A2A `tasks/get` 请求失败不再终结整轮轮询**：按 HTTP 状态码区分——明确的 400–409（任务 id 不对、无权限等）立刻抛给模型并带上状态码与远端响应体；其余情况（含 429、5xx、网络错误、单次请求 120 秒超时）退避重试 5 次（1s / 1.5s / 2.25s / 3.375s / 5.0625s），任意一次成功即回到正常轮询，重试等待与轮询间隔共用同一份 30 分钟预算。
- **模型调用 tracing 数据缺失**：修复登录态或产品配置变化后模型调用 tracing 数据可能缺失的问题，并消除延迟初始化时产生的无关 tracing 配置报错。
- **standalone 二进制内置 workflow 不可用**：修复 standalone 二进制（bun SFE）安装下调用 `deep-research` 等内置 workflow 报 "not found" 的问题。`bun/entry.js` / `bun/entry-headless.js` 引入 embed 文件，生成器同步导出 (name → 嵌入路径) manifest，内置 workflow provider 在 SFE 下改走 manifest 发现；内置目录读取失败不再静默（打 warn 日志），workflow 找不到时的报错文案补上 builtin registry。

### ⚠️ 行为变更

- **出站 A2A 轮询到点/重试耗尽改为直接取消远端任务**：不再返回「还在跑，你再调一次」让模型自行续调，而是直接取消远端任务并如实汇报结果——取消成功说明最终状态，取消发现任务已跑完则按普通终态结果返回（含产物下载），取消未送达则告知任务可能仍在运行并提示改调 `A2ACancelTask`。相应地 30 分钟从「单次调用等待上限」变成「任务本身时长天花板」，需要跑更久的任务须调高 `CODEBUDDY_A2A_POLL_MAX_DURATION_MS`。`A2AGetTask` 与 `A2ASendMessage` 工具描述同步删掉「拿到 still running 就立刻用同一 task_id 再调」的指令。

## [2.144.0] - 2026-09-04

### 🎉 新功能

- **TUI 主 Agent 模式入口**：仅空白会话可用 `/mode` 切换 `cli` / `ptc` / `minimal` / `create`（以及 `mainAgent: true` 的自定义智能体）。启动顶栏显示当前模式；空输入且仍可切换时提示 `/mode to switch`。选择写入 `lastUsed`，下次启动/新会话沿用，对话开始后锁定。WorkBuddy 不受影响。
- **TUI 模式专属配色**：Standard / PTC / Minimal / Creator 使用不同颜色，自定义智能体固定一种额外颜色；Web UI / ACP `set_agent` 切换主 Agent 后，同进程 TUI 顶栏即时刷新，不再残留旧模式。
- **进程级 `--agent` 优先于记忆**：以 `--agent`（含 `mainAgent: true` 自定义）启动时不再被上次模式盖掉；回合进行中与开聊后，空输入行不再误提示 `/mode to switch`；Minimal 模式工具约束脚注留在系统提醒内，不再泄漏到用户气泡。
- **出站 A2A 与 stream-json 混合模式**：`--a2a` 现在可与 `--input-format stream-json` 组合使用，同一 stdin 中两种协议的消息可交替发送并共同驱动同一个会话，支持 A2A `SendMessage` / `GetTask` / `CancelTask`，沿用共享会话的工具权限策略。两条通道完全对称——谁先到谁建立会话，后到的一方复用同一个会话，首条消息可以直接是 A2A；`SendMessage` 省略 `contextId` 时自动绑定本进程正在服务的会话并在响应 Task 中回传会话 id；以 `--session-id` 启动时该 id 从进程启动起即可用作 A2A `contextId`。`contextId` 指向本进程未在服务的其他会话时返回标准 JSON-RPC 参数错误，并同时给出期望值与实际值。`SendMessage` 会等待当前会话空闲（默认最长 10 分钟，`CODEBUDDY_A2A_WAIT_IDLE_TIMEOUT_MS` 可调），任务查询与取消不受等待阻塞；单独使用 `--a2a` 保持原有独占 stdio 行为，`--a2a` 仍不能与 `--acp` 组合。
- **出站 A2A 待审批任务可交互**：任务停在待审批时不再只是把「(N pending approval)」当普通进度一路轮询到超时，而是通过 ACP `elicitation/create` 弹出可操作的审批卡片（ACP 与 stream-json 通道均支持），并把审批 token 透传给宿主完成带外审批；同意后继续轮询等任务恢复，拒绝或未作答则停止轮询并取消远端任务。取消时若任务已到终态（如用户改在企微等渠道直接审批），上报的是任务真实状态而不是「已取消」。TUI 以及未声明 `elicitation.form` 能力的客户端保持原有行为不变。
- **出站 A2A 多轮对话跨重启连续**：`contextId` 关联记录在会话上并随会话持久化，`--resume` 续聊时自动带上，同一个远端 Agent 只对应一段远端对话；关联按「发现源 + Agent」区分，同名 Agent 来自不同发现源不会互串，也不再按 `skill_id` 细分。默认 24 小时有效（自最后一次使用起算，持续活跃的对话不会中途过期；`CODEBUDDY_A2A_CONTEXT_TTL_MS` 可调）。ACP / 网关服务化会话不写会话 meta 落盘，关联按进程生命周期生效（降级，不阻断）。
- **A2A GetTask 过程快照**：`--a2a` 被调方在执行期间将思考、工具调用与部分回复写入 `Task.artifacts`，调用方通过 `GetTask` 轮询即可拿到全量快照（无需 `SendMessageStream`）；工具入参/出参超 8KB 截断；`sequence` 仅在 artifact 首次打开时分配。不做脱敏，敏感内容由调用方按信任边界处理。(#106351)
- **Hook UserPromptSubmit 携带 `generation_id`**：该 ID 在用户提交消息时生成、同一轮对话内稳定不变，`UserPromptSubmit` 与对应的 `Stop` 等事件共享同一值，可用于把一轮对话的多个 hook 事件关联起来。

### 🔧 功能改进

- **出站 A2A 目录会话化（/server）**：新增 `QueryOptions.remoteAgentsUrl` 会话级发现源席位（#99451 家族）——提供即置换本会话的出站 A2A 发现源（目录、gate 判定、discovery 拉取均按该 URL 解析），`''` 表示本会话显式关闭出站 A2A，省略保持当前。同源会话共享目录分区与单飞拉取，进程 env 源与 bin/spawn 链零影响；会话源拉取失败不清空既有分区，避免半路抹掉租户目录；`A2ASendMessage` 远端对话延续 Map 改为按会话 + 源键控，杜绝跨会话续接。特性开关（`CODEBUDDY_A2A_OUTBOUND_ENABLED` / ProductFeature）仍是进程级 kill-switch。
- **/server `workbuddy` 工具预设收编出站 A2A 四件套**：A2AGetAgentCard / A2ASendMessage / A2AGetTask / A2ACancelTask 纳入 `WORKBUDDY_TOOLS` 预设，双层 gate 自守（`CODEBUDDY_REMOTE_AGENTS_URL` × `CODEBUDDY_A2A_OUTBOUND_ENABLED`/ProductFeature，env 运行时 live 读）；未配置 A2A 的宿主零感知（工具 isEnabled 自隐藏），配置即开。曝光/执行/描述三面均逐 run 生效，目录变更后逐 run 跟新。
- **会话档技能与自定义命令进模型清单**：修复 /server 多会话进程中会话档技能不进模型清单的问题（lamp「skills 不可用」根因）。新增 session-agent-view：会话档输入存在时激活期构建一次 per-session agent 视图，技能 / SlashCommand / ToolSearch 描述换成会话内渲染字节，同会话同输入逐轮字节稳定（prompt cache 不受扰动），视图字节永不写回全局物化面；`~/.codebuddy/commands` 会话档自定义命令随会话生效，清单与执行两面同源合并；A2AGetAgentCard 的 `<available_A2A_agents>` 按会话视图目录指纹自足跟新 discovery 结果。新增 `QueryOptions.agent`：/server 会话主 agent 选择，未知名以 `AgentOptionError` 在派发前响亮拒绝。(#108461)
- **智能体工具管控**：支持按产品 Tool、必要 Tool、MCP Server、MCP Tool 及自定义 MCP 配置启用或禁用，并在执行阶段返回明确的 WorkBuddy 安全中心拒绝信息。
- **WorkBuddy 平台目录保护**：WorkBuddy 会话现在允许 Agent 读取平台持有的数据，但修改或删除数据库、会话历史、恢复数据、授权状态和内部索引前会询问用户；长期记忆、Connector 与 Agent 任务目录保持可写。

### 🐛 问题修复

- **/server 启动崩溃**：修复 `/server` 产物 `start()` 必崩（2.141.0–2.143.0 全部受影响）：cbc-tui 组件图从 server bundle 结构性剔除，避免 tsx Context Provider 顶层 `createContext` 求值崩溃并毒化 start latch；新增 `server-boot-no-tui.spec.ts` boot 回归守卫。
- **出站 A2A served 面物理失效**：修复出站 A2A 在库形 `/server` 下从未出现在 served 会话模型工具面的问题——`gen-server-tools-exclude.cjs` 字符类不含数字导致 `A2A*` 家族解析失败，A2A 服务实现（五个 DI 组件）也未被纳入 server bundle 组合根 import 闭包。新增 served 面 e2e `server-a2a-client.spec` 覆盖。
- **agent-view attach 卡死与输入失效**：大会话下 attach / 转后台不再因同步转换整段会话历史而阻塞事件循环、卡死终端，交接只处理 seed 推导所需历史尾部；attach 成功后按键失效（Windows）问题通过清理 Ink 卸载后残留监听修复，恢复 raw / flowing 模式。
- **TUI 输入修复**：粘贴 `@xxx` 后无空格直接按 Enter 消息无法发送的问题——现在仅在补全菜单确有候选时才拦截提交，候选为空时作为普通文本正常发送；多行输入中 Ctrl+A / Ctrl+E 正确移动到当前逻辑行的行首/行尾，不再跳到全文首尾。
- **工具参数流式解析畸形键**：修复长命令（如多行脚本）按字节流式下发时引号错误残留进键名、权威参数到达后畸形键未清理、命令区渲染空白的问题；修复后流式解析期间不再产生畸形键，命令区正常显示。
- **ImageGen / VideoGen 会话关联头缺失**：修复图片/视频生成请求缺失会话/身份/IDE 关联头（`X-Conversation-ID` 等），此前只有 Chat 模型请求带这批头，服务端无法把生成请求归到对应会话（影响计费归户、审计追踪、埋点关联）；新增 `buildConversationHeaders` 在 image / video service 请求处与 Chat 请求一致注入，VideoGen 同步补齐身份归因头。
- **VideoGen 适配 Kling V3 参数**：视频时长固定为 5 秒，分辨率支持 720P / 1080P；文生视频支持画幅与有声生成，图生视频画幅跟随输入图片且不再下发 `aspect_ratio`；水印仍强制开启。
- **插件市场不完整压缩包降级安装**：压缩包声明了某插件却没有把它打包进去时，跳过缺失插件、正常安装其余插件，并在更新过程与日志中说明跳过项（此前整个市场更新失败且重试无效，一个插件拖垮整个市场）；缺失比例过大（超过一半或超过 3 个）仍拒绝安装，插件目录指向压缩包外部或不是目录时同样拒绝。本地解压中断导致的残缺不受影响，仍自动重新下载修复。
- **任务空续跑**：修复消息已经处理后仍触发空续跑、导致额外模型请求或服务异常的问题。
- **Worktree 退出结果提示与误删**：修复退出菜单执行保留/删除后缺少结果提示的问题，并确保附加到已有工作区时不会误删用户工作区。
- **WorkBuddy 静默加密凭据重复确认**：凭据在 Agent CLI worker 替换后继续外发到受信官方工具时复用会话内保护记录，不再重复弹出敏感凭据确认。
- **Broker IPC 洪峰限制**：单个 Node 运行时最多并发 127 个异步请求并为同步请求保留 1 个槽位，等待队列最多保留 8192 个请求；Broker host 执行并发限制为 128（文件请求最多 112），执行槽超限时等待容量恢复而不再立即拒绝；只有确认尚未发送的普通文件操作才会降级到原生 fs。
- **Multitask 后台 worker 进度实时可见**：Web / WorkBuddy 现在能实时看到协调器派出的后台 worker 的工具调用、结果与最终回复，嵌套显示在对应 Agent 卡下，协调器会话保持空闲；标准 ACP 客户端可从 `configOptions` 发现 Multitask 开关并经 `session/set_config_option` 控制。worker 结束后在 idle 会话上再开一轮：先下发 `session_info_update`（`codebuddy.ai/unsolicitedTurn`），宿主须用其中的 requestId 打开新 Request；用户询问进度时协调器读取一次中途输出汇报。
- **会话产物与 trace 残留清理**：会话历史过期清理同步清理对应 session 生成产物，并补扫 owner JSONL 已不存在的孤儿 session 产物目录；同时清理过期 trace 临时文件残留。
- **pnpm 安装兼容性**：`node_modules/.pnpm` 虚拟仓库内的清理操作改为原生删除，避免 safe-delete 批量保护被 pnpm 包装成 linking error。
- **上报携带完整 W3C baggage**：Agent CLI 上报事件与 Galileo 指标携带全部 W3C baggage 条目，使 WorkBuddy 传入的 `buddyId` / `buddyName` 公参正常上报。(#87954)
- **智能体工具管控修复**：配置读取超过 1 秒时自动放行 Tool 调用，避免策略存储异常阻塞正常任务；兼容遗留 `miora-query` 运行时标识，确保 `miora` Server 与 `miora_query_task` 开关都能阻止调用。

## [2.143.1] - 2026-09-03

### 🎉 新功能

- **工具调用循环闸门**：新增 `ToolCallLoopGuard`，命中后由用户选择继续或终止。命中两条规则之一即拦截：单次请求内同一工具连续调用 40 次（不区分入参），或 AAB 形状（两次同工具后接一次不同工具）连续重复 10 轮。计数按 `session.id + conversationRequestId` 记账，跨轮不累积；`DeferExecuteTool` 只作路由不记账，MCP 按 `mcp__server__tool` canonical 名记账。CLI 默认不开启（通过 `isWorkBuddyDesktop()` 门控），WorkBuddy 下的 headless / 后台任务 / 子会话等价于「继续执行」。可选环境变量：`CBC_LOOP_GUARD_DISABLED`、`CBC_LOOP_GUARD_CONSECUTIVE_THRESHOLD`、`CBC_LOOP_GUARD_SEQUENCE_REPEATS`；超时口径复用 `CBC_SANDBOX_APPROVAL_TIMEOUT_MS`。新增 `loop_suspected` / `loop_continue` / `loop_detected` 三类埋点。(#102217)
- **打包同包多版本检测卡点**：cbc 打包链路（主 bundle / headless / server）新增同包多版本检测，报告落 `dist/bundle-duplicates.<mode>.json`，按字节倒序逐版本列出上游引用来源。默认 warn，`CBC_BUNDLE_DUPLICATE_STRICT=1` 时非零退出用于 CI 阻断；`CBC_BUNDLE_DUPLICATE_ALLOW=pkg1,pkg2` 追加豁免。新增 `packages/agent-cli/build/bundle-pins.json` 作为多版本包版本锚 SSOT，由打包器 rspack alias 与 `.pnpmfile.cjs` 共同消费。

### 🔧 功能改进

- **Auto 分类器模型可单独配置**：`auto` 权限模式的安全分类器现在遵循与其他子代理一致的模型优先级 —— 环境变量 `CODEBUDDY_CODE_SUBAGENT_MODEL`（一刀切）> `subagents.agents.autoModeClassifier.model`（项目级 > 用户级）> 内置默认的 `lite` 解析链。当分类器因模型输出不可用（例如强制长思考的推理模型把小输出预算耗尽）而失败时，失败原因会带上实际使用的模型，以及当前真正在起作用的那个配置入口（env 在管就点名环境变量，否则点名 settings 项），提示改用合适的模型。
- **Auto 分类器拿不到判定时不再降级为审批弹窗**：分类器跑通但没有可解析结论时，交互式会话此前会静默回落成普通审批弹窗，等于把 `auto` 的安全审查降级成 `default` 的「问用户」。现在这类失败统一 fail-closed 拒绝，拒绝文案会指出分类器没有给出判定并引导配置合适的分类器模型；同时计入「被拒次数」上限，连续 3 次后 `auto` 暂停（交互式回落弹窗、headless 中止 run），避免一个始终给不出判定的模型把会话卡死。「分类器不可用」（超时 / 连接失败 / 5xx）与「对话超出分类器上下文」两类行为不变。
- **出站 A2A Agent Card 按需 TTL 刷新**：默认缓存 12 小时，可通过 `CODEBUDDY_A2A_DISCOVERY_TTL_MS` 调整；过期后的首个 A2A 工具调用触发刷新，并发调用共享同一请求。刷新后的 Card 会重新创建对应 SDK Client，避免继续访问旧端点。
- **steer（立即发送）消息注入时转发用户消息事件**：模型运行中通过「立即发送」插入的消息，在真正注入模型上下文的那一刻，agent-cli 会把这条用户消息作为 `user_message_chunk` 事件转发给前端。客户端通过独立的 `clientUserMessageId` 显式请求回执并获得原样 message id；成功的 `session/steer` 同时返回当前运行轮的不透明 `ownerRequestId`，后续 steer 可通过 `expectedRequestId` 约束只能加入同一轮。适用范围：仅 ACP `session/steer` 通道生效。
- **插件自定义 agent model 字段生效**：修复插件目录（`.codebuddy-plugin/plugins/<name>/agents/*.md`）的 agent frontmatter 中 `model` 字段未生效的问题，现在插件作者声明的自定义模型（含 `custom-local:*` 前缀等）会真正落到该子 agent 的执行上；未知模型继续按运行时既有链路降级并保留来源日志。
- **企微机器人可关流式回复**：TUI `/remote-control` 和 Web UI 远程控制页可为当前企微机器人选择流式或非流式。非流式沿用 2.140.0 的 WeComReply 整段推送，企微侧不再刷工具进度和子代理感知。
- **企微机器人可关卡片交互**：可为当前机器人关掉模板卡片，改回 2.140.0 的纯文本确认（回复 y/n 或编号）。默认仍是卡片。`CODEBUDDY_WECOM_BOT_*` 拉起的 `default` 改流式/卡片时会 upsert `instances.json`。
- **透传模型服务下发的错误提示**：模型服务在错误响应中附带面向用户的提示语时，原样透传给上层展示，不再在解析阶段丢弃。多语言提示按需透传，新增语种无需改动。
- **WebSearch 恶意域名过滤**：搜索结果进入模型和界面前过滤恶意域名，恶意结果会被移除、恶意 favicon 不再下发，正常结果仍可继续返回；命中同时写入安全中心审计并上报防护遥测。
- **CBC Web UI 打包告警清零**：修复 Vite/Rollup 报出的 7 组 `dynamic import will not move module into another chunk` 引用异常告警，去除混用同一模块的静态与动态 import 反模式，把跨 store 的初始化胶水拆到独立模块中。

### 🐛 问题修复

- **A2A 文件下载位置**：将出站 A2A 返回的 URL 文件保存到当前会话工作空间的 `outputs/a2a` 目录；沙箱会话使用对应的虚拟文件系统，确保 WorkBuddy 和 CloudAgent 都能继续访问下载结果。
- **ACP 会话错误提示**：修复中断恢复后偶发把后续模型错误误判为取消的问题，确保真实错误信息正常返回。
- **WorkBuddy 团队会话工具状态归属**：修复 inbox 唤醒后的工具状态更新缺少请求归属信息，并避免影响子任务流归属。
- **同批 TaskCreate 顺序**：修复模型同批并发创建任务时数字 ID 可能与计划顺序不一致的问题；同批 TaskCreate 现在按模型调用顺序执行，其他工具保持并发。
- **模型服务错误缺少 HTTP 状态码**：修复导致结构化错误分类不准确的问题。
- **恢复 VideoGen 可选生成参数**：重新向模型开放宽高比、负向提示词和音频开关，并将模型提供的参数传递给视频生成服务；未提供时默认使用 16:9、空负向提示词并开启音频，修复生成视频默认无声的问题；水印仍强制开启。
- **企微流式回复去掉黑色竖线**：封口帧仍要改首字，否则企微会按前缀追加把正文截断；垫片从 `▌`/`▍` 换成全角空格 / 不换行空格，气泡不再顶着一条黑线。
- **企微交互卡片选项不再横排挤压**：Ask / 权限 / 建议一律改走官方 `vote_interaction` 竖排选项，点提交回传所选 id；选项文案不再裁成 10 字按钮。企微权限卡展示命令参数：投票卡没有 `sub_title_text`，命令改放到 `main_title.desc`；超长参数再跟一条原文。
- **企微来信立刻显示发送者**：企业微信用户消息到达已打开的 Web UI 时，不再等到刷新才出现「企业微信 · 用户」标签。
- **macOS 沙箱文件审批**：修复 Brokered Host 新建文件后未向 Sandbox Center 注册临时自动放行规则，避免 Git 等工具清理本轮创建的临时文件时误触发规则审批。
- **额度耗尽即刻提示**：修复 IOA 账号无 token 额度时约 1m40s 才提示「无 Token 额度」的问题。网关返回 HTTP 429 + 业务码 14019（无可用 Token 额度）时，此前被当成瞬时限频走满请求级指数退避重试（≈100s）才落 fallback。现将 14019 纳入额度耗尽码，命中即不重试、直接交 fallback。
- **图片工具结果敏感检测**：以 JSON 字符串传递时，敏感信息检测不再扫描其 Base64 载荷，避免图片随机字节被误判为 API Key；同一结果中的文本与普通 JSON 内容仍会正常检测。
- **同一 ToolCall 敏感命中审批复用**：同一 ToolCall 多次命中敏感信息时只展示首次审批弹窗，后续命中及工具结果准入静默复用用户选择；新命中的敏感值继续按首次选择保留原文、分别加密或拒绝。
- **WebUI 后台任务与源代码管理**：修复后台任务页面在 worker 重启后串台或无法恢复的问题（按任务代次选择正确的运行实例，并增强任务页面加载和布局恢复）；修复源代码管理无法撤回嵌套目录中新建文件的问题（按 Git 未跟踪文件状态区分回收站清理与已跟踪文件恢复，并避免将文件 pathspec 错误误报为分支不存在）。
- **Python shim 签名保护**：禁止在打包应用目录写入字节码缓存，避免破坏 macOS 应用签名。
- **Sandbox Center 不可用时降级放行**：当 Sandbox Center 启动失败、请求超时或 IPC 异常时，WebFetch、网络策略检查和文件守卫将降级放行，不再因安全中心不可用而误拦截；安全中心正常返回的拒绝规则仍然生效。
- **修正安全删除审计语义**：macOS 隐式兜底规则自动执行安全删除时，不再错误显示为命中文件白名单。

## [2.143.0] - 2026-09-01

### 🎉 新功能

- **出站 A2A（Agent2Agent）能力**：Agent CLI 可作为标准 A2A 客户端，发现并调用其他已授权的 Agent（任何经 ACP 或 stream-json 接入的宿主均可使用）。新增 `A2AAgentSearch`（按名称/自然语言发现已授权 Agent 及其 Skill）、`A2ASendMessage`（单次非阻塞调用）、`A2AGetTask`（限界轮询，带实时进度中继）、`A2ACancelTask` 四个工具；任务轮询期间的中间状态会通过 ACP `tool_call_update` / stream-json 实时呈现。Agent 发现改为 `CODEBUDDY_REMOTE_AGENTS_URL` 懒加载；新增 `ProductFeature.A2AOutbound` 独立开关（子会话内禁用），也支持 `CODEBUDDY_A2A_OUTBOUND_ENABLED` 直接启用；新增 `CODEBUDDY_DISABLE_BUILTIN_SUBAGENTS` 仅屏蔽内置子代理。
- **`--a2a` 入站模式**：新增隐藏模式，以标准 A2A (Agent2Agent) JSON-RPC 协议通过 stdio 常驻服务，供 SDK/CloudAgent 等程序化调用方接入。支持 `SendMessage`/`GetTask`/`CancelTask` 三个方法，不支持的扩展方法返回标准 A2A 错误码而非崩溃或挂起；与 `--acp`、`--input-format stream-json` 互斥。
- **`A2ASendMessage` 支持按 URL 附带文件**：新增可选入参 `attachments`（`{ url, filename?, media_type? }`），以标准 A2A url 文件 part 拼在文本消息之后发给远端 Agent。
- **ACP 客户端可主动取消后台任务**：新增扩展方法 `_codebuddy.ai/session/cancelBackgroundTask`，终止进程（含 nohup 派生的孙进程），任务保留在注册表直到保留期到；取消后立即向客户端补发终端退出状态，模型也会收到取消通知。接口只接受 `terminalId` 且强制校验会话归属，旧版本客户端会收到「方法不存在」并自动隐藏取消入口。
- **后台任务结束原因上报**：后台任务结束时通过终端状态扩展字段告知客户端「为什么结束」，用户取消、输出超限被强制终止、会话中断、被沙箱拦截、退出码未采集五种情况各有明确文案，悬停可见补充说明；旧客户端自动回退到按退出码判断。
- **后台命令输出实时推送（ACP）**：按 ACP v2 terminal-output 规范，运行期以 `terminal_output_chunk` 增量推送，刷新/重连用 `terminal_update.output` 全量快照重建；字节以 base64 传输，非法 UTF-8 与分片多字节字符可完整还原。推送由客户端能力位 `terminalOutputChunk` 门控，并修复了终端状态快照重放不生效的问题。
- **Web UI 后台任务实时输出**：后台任务面板每条任务可展开查看实时输出（约 250ms 一帧刷新），跨块字节解码避免多字节字符乱码；窄屏保持原有行内展开。
- **Web UI 后台任务输出侧栏**：点击任务行可在右侧工作台以 xterm 只读终端全屏查看输出，自动滚底、手动上翻后不再被拽回；输出游标显式记录绝对写入位置，避免滑动窗口下增量计算错位。
- **Web UI 后台任务取消与结束原因**：运行中任务可请求终止进程，已结束任务可移除记录（纯客户端视图操作，不乐观更新）；结束文案与 ACP 对齐，取消按钮按破坏性语义对齐图标并常驻显示。
- **命令卡片上的后台任务取消入口**：聊天流命令卡片上可直接取消任务，状态文案与面板同口径。
- **WorkBuddy 专属精简 CLI 产物（codebuddy-lite-wb）**：在 headless 基础上进一步剔除 WorkBuddy 场景用不到的模块，冷启动更快、常驻内存更低；`CODEBUDDY_FORCE_LITE_WB_BUNDLE=1` 分流命中，产物缺失时自动回退 headless、再回退完整版。
- **Skill 描述按名放宽**：新增 `CODEBUDDY_SKILL_DESC_MAX_OVERRIDES` 环境变量，按 skill 名逐个覆盖工具描述单条字符上限（默认 150），适用于描述较长会丢失关键触发信息的主 skill。
- **Multitask 运行时**：落地协调器派工、锁与唤醒基建，补齐 `session/set_multitask` 协议契约；Multitask overlay 叠在 Standard/PTC/Create 上（极简模式不能开），Code Mode overlay 在 REPL 沙箱内派工，worker 终态通知投递与 TaskOutput 读取语义对齐（对外入口随后续版本开放）。

### 🔧 功能改进

- **出站 A2A 对齐远端协议**：`message/send` 总是携带 `configuration`（`returnImmediately: true` 与 `acceptedOutputModes`），行为与「立即返回、非终态请调用 `A2AGetTask`」说明一致。
- **出站 A2A 工具改按名字取 Agent Card**：`A2AAgentSearch` 重命名为 `A2AGetAgentCard`，按 `agent_name` 精确解析（忽略首尾空格与大小写，先精确再别名），未命中返回 `AGENT_NOT_FOUND`、命中多个返回 `AMBIGUOUS_AGENT_NAME`；三个委派工具入参统一由 `agent_id` 改为 `agent_name`。
- **出站 A2A 可委派 Agent 列表动态渲染**：`<available_A2A_agents>` 由发现结果实时渲染每个 Agent 的 name/description，启动时后台预触发一次发现并响应式刷新，首条消息前有限界预等待。
- **取消远程 A2A 任务会通知对端停止**：用户在轮询期间取消（WorkBuddy/ACP、CloudAgent interrupt、ESC/Ctrl-C）时向远端发送一次尽力而为的 `tasks/cancel`，避免远端继续占用算力；超时可用 `CODEBUDDY_A2A_CANCEL_TIMEOUT_MS` 调整。
- **待命进程内存进一步降低**：图像处理依赖改为运行时按需加载；精简产物额外剔除结构性用不到的能力（工作流面、手机号校验元数据等），`--prewarm` 待命内存进一步下降。
- **后台任务结束通知按原因给出行动指引**：用户取消时明确不要重启或重试；输出超限被终止时先引导读取输出再换方式重跑；任务摘要区分「被用户取消」和「因输出超限被终止」。
- **Web UI 对话消息流精修**：统一正文/思考过程/工具步骤层级、展开控件与间距节奏；思考与阶段说明节点默认单行摘要、点击展开；过程时间线去装饰、严格左对齐；修复「思考中」挂错轮次与流式标记残留问题。
- **Web UI 后台任务侧栏加固**：切换 Agent 不再残留空壳标签；窄屏行内视图只处理尾部 8KB，滚动跟随由代码显式控制；增量写入算法抽成纯函数并补测试；消除嵌套交互元素、移动端不显示后台任务标签。
- **提高工具定义的 Prompt Cache 命中率**：按稳定内置工具、显式稳定 MCP、动态内置工具、动态 MCP 四段排列，工具重名时回退 SDK 原始顺序。

### 🐛 问题修复

- **取消输入残留到下一轮**：用户主动取消的未完成对话轮次不再作为后续模型上下文。
- **自定义模型「超高(xhigh)」档位误降级**：不在内置 catalog 的自定义模型选择 `xhigh`/`max` 时不再被无脑降级为 `high`，依据 `models.json` 声明的 `supportedEfforts` 保持原值（未声明 `max` 时降为 `xhigh`）。
- **空流错误提示**：上游模型返回空响应时归类为「模型服务未返回消息」，不再误报「网络连接失败」。
- **对话卡死自愈**：修复个别会话轮结束后陷入内部空转、新消息发不出去的问题，异常状态下自动恢复到可继续对话状态。
- **Web UI 实时回复丢失连续相同文本片段**：模型输出 `1000` 时不再错误显示为 `100`，同时继续过滤 ACP client 切换期间的镜像流式事件。
- **Web UI 压缩摘要展示**：仅解析并默认折叠 summary 正文，隐藏内部 `/_compact` 命令，补齐内置斜杠命令描述的中英文文案。
- **窄终端超长行渲染错位**：超宽行被自动折行时按实际显示行数重绘，避免光标错位、旧内容残留、花屏或黑块。
- **单个 Agent 也走树选择**：只有一个子 Agent 时输入框下方同样展示 ● main 树，可 ↓ 选中，不再退回旧胶囊。
- **CLI 启动内存**：SandboxAudit SDK（含 tree-sitter WASM）从启动立即加载改为运行时按需加载，非沙箱场景冷启动 external 内存直降约 35MB。
- **专项版 Web UI 模型下拉与 `/model` 对齐**：企业登录后输入框展示完整模型列表（含倍率与当前模型），不再只显示安装包默认的少量模型。
- **macOS 拼音候选框跟随输入光标**：TUI 输入时硬件光标落到视觉 caret，候选框不再钉在窗口左下角。
- **PowerShell 后台任务补齐 ACP 终端标识**：Windows 上经 `run_in_background`、前台超时自动后台化或 Ctrl+B 转后台的命令在客户端后台任务面板可见并正确显示状态。

## [2.142.0] - 2026-08-30

### 🎉 新功能

- **本地模型运行支持**：新增本地模型下载、暂停/续传与完整性校验，按设备能力自动选择运行后端；Agent CLI 选择本地模型后会等待服务就绪并将请求切换到本地端点。
- **Web UI 固定路径前缀**：`--serve` 支持通过 `--base-path` 或 `CODEBUDDY_GATEWAY_BASE_PATH` 将页面与 API 挂载到固定路径，适配按实例前缀反向代理的访问入口。
- **遥测上下文传播**：按 ACP v2 `_meta` 规范接收 W3C Trace Context 与 Baggage，并将当前轮次上下文传递到遥测、MCP 请求和短命子进程；长命子进程自动剥离请求级上下文，避免上下文冻结。

### 🔧 功能改进

- **Web UI 智能体创建与启动体验**：主会话连接、新建智能体和 iframe 加载阶段统一使用轻量欢迎页，隐藏空白页面与冗余连接文案；创建后立即展示首条用户意图并预留输入区，同时通过启动宽限、快速详情查询、提前发现 `webUrl` 和延迟连接提升 Agent View 首屏速度。
- **Web UI 工具分组简化**：连续完成的工具调用达到 3 个时才显示分组折叠层，1～2 个工具直接展示，减少重复展开操作。
- **空闲智能体回收**：Web UI 和 TUI 侧栏中的空闲 worker 约 10 分钟后只回收进程，保留会话与 transcript；再次进入时可自动恢复，正在运行、查看或 attach 的会话不受影响。
- **Agent View 认证前启动**：broker PTY 内层可先完成服务监听和 `webUrl` 登记，再等待认证执行首条消息，缩短 Agent View job 的可访问等待时间；前台 TUI 与 `--acp` 行为不变。
- **并发任务面板**：会话中的后台 shell、workflow 与 agent 树支持分层选择、详情查看、单项停止和全部停止；并发子 agent 默认折叠展示，已完成节点自动移除。
- **插件 Host 重载能力**：`--serve` Host 可按 Product 快照物化已配置插件，并提供空请求体的 `/api/v1/plugins/reload`；required-root reconcile 调整为只读校验已提交缓存。
- **依赖锁文件一致性**：统一文档构建链路使用的 `markdown-it` 解析版本并移除重复锁项，保持依赖解析结果稳定。

### 🐛 问题修复

- **并发 agent 状态与清理**：修复中断后临时 team 残留、后台 shell 计数混入 team 成员、任务面板选中项跳动、单 agent 边界不展示，以及同步树在没有 teammate 时被错误切回 idle 的问题。
- **插件 Marketplace 刷新一致性**：修复仅刷新 `lastUpdated` 后插件安装或更新失败的问题，在规划和物化前重读已提交 catalog，并阻止失效的并发扫描覆盖新缓存。
- **插件生命周期与 TUI 对齐**：ACP 与 serve 启动时先投影已提交的 registry/cache，再后台执行 Marketplace 管理；修复安装、启用、更新、依赖闭包校验、无版本缓存占用和空请求体 reconcile 的一致性问题，避免管理 Host 自占用时返回 HTTP 500。
- **iframe ACP 状态与首条消息**：新建智能体会及时离开欢迎区并为 iframe 输入框预留空间；占用、断链和发送无响应会显示可重试提示，冷启动的初始 `disconnected` 不再误报断链，空白新对话也不会写入旧 prompt。
- **弱网长工具执行保活**：ACP serve 在 prompt 执行期间定期发送合法业务进度心跳，避免长工具或异步 I/O 被上游看门狗误判为无响应；真正同步卡死时仍由本地 idle timeout 兜底。
- **上下文超限恢复终止**：上下文超限自动恢复持续收到业务码 `11115` 时不再无限空转；compact 成功续跑也计入重试上限，耗尽后正确向用户展示上下文超限错误，并在新用户请求边界重置计数。
- **Esc 中断语义**：Esc 只停止当前前台对话，不再优先终止后台 workflow；对话中存在排队消息时可正确中断在途轮次并继续执行队列，同时清理长会话累积的取消监听器。
- **输入草稿恢复**：worker 被回收或 iframe 失效时切换到宿主输入框，并在同一页面恢复长草稿；ACP 连接遮罩不再挡住底部输入区。
- **Web UI 回放去重**：`session/load` 历史回放与 live SSE 不再重复拼接同一段助手正文，同轮相同 REPL 也只保留一张工具卡。
- **交互式工具界面历史恢复**：会话重开或页面刷新时一并恢复缓存页面的资源元数据，并处理界面实例创建与工具结果到达的竞态，避免嵌入内容被策略拦截或首屏结果丢失。
- **沙箱工作目录稳定性**：沙箱初始化不再覆盖 Agent CLI 的逻辑当前目录，避免相对路径解析和后续文件操作偏离用户打开的工作区。
- **沙箱文件写入与备份路径**：统一真实路径、链接路径、Windows 短路径和临时目录的归一化与排除规则；已获安全规则放行的写入不再因回滚备份被边界拒绝而失败。
- **macOS 目录扫描授权**：命令成功且沙箱仅拒绝受保护目录的元数据探测时，不再触发额外授权弹窗或脱沙箱重跑，同时保留隔离与拦截记录。
- **敏感工具结果保护**：同一次工具调用中由运行时恢复的敏感值复用原保护条目并保持密文投影，不再重复弹出审批；不同调用或新敏感值仍按原策略检测。
- **多窗口会话占用判断**：仅当另一窗口仍是真实 writer 时进入只读跟随，残留锁、幽灵连接和探测超时不再误判占用；跟随窗口可通过 inbox 发送文本，重试连接会重新争夺 writer。
- **占用状态展示**：后台 job 或主会话被其他窗口占用时保持 transcript 预览并固定提示，不再误显示启动中；团队面板、子代理卡片及连接超时文案同步收敛。
- **Agent View 恢复连接**：iframe 恢复后可在同页继续连接并直接加载历史会话；park 释放 grant 时只清理自身授权，避免快速切换时冲掉新连接。
- **Web UI 工具输出**：Bash 与 REPL 的 `{ stdout, stderr }` 结果转换为真实终端文本，Bash 卡片不再把流式脏 key 的原始 JSON 显示为输入。
- **Web UI 侧栏空闲状态**：对话已结束时不再仅根据磁盘中的 `tempo: active` 持续显示“运行中”，iframe 会将 ACP 回合空闲状态同步给宿主。
- **安全中心询问文案**：文件操作按读取、写入和删除显示准确动作，文件、网络与命令询问统一标注当前命令。
- **Plan 子 agent 定位**：修正 Plan agent 与 Explore 描述雷同的问题，明确其只读方案设计职责并收敛工具集合，便于主 agent 正确选择委派对象。
- **Web UI 终端链接确认**：OSC 8 与纯文本 HTTP/HTTPS 链接统一使用跟随当前主题的站内确认框，并补齐中英文文案。
- **MCP 资源目录稳定性**：MCP 资源查询成功结果在短期内复用，查询失败时沿用上次已知结果并输出告警，服务断开后立即清理缓存，避免资源工具在对话中途反复消失和恢复。
- **终端文件链接识别**：Web UI 与 TUI 支持相对路径、Unicode、带引号空格路径、诊断行列号及范围定位，修正跨平台解析、宽字符点击范围和版本号误链接。
- **Web UI 编辑器诊断**：Monaco 模型使用真实文件 URI，隐藏浏览器 TypeScript worker 无法可靠判断的模块缺失诊断，并补充 Vitest 全局声明，同时保留其他语法和语义检查。
- **Web UI 资源管理器**：Git ignored 文件和目录使用弱化样式并始终隐藏 `.git`，统一暗色主题文字样式，修复右键删除未作用于目标条目及菜单在视口边缘显示不全的问题。
- **发版版本查询**：修复 `/cli:release` 查询 PyPI 最新版本时的 Python 字符串转义错误，并校验 npm/PyPI 返回值为非空 semver；下载、解析或格式异常时统一按 `QUERY_FAILED` 失败关闭。

### 📝 文档更新

- **CLI 文档归档**：同步最新使用指南、API 与版本说明，补齐多语言导航和翻译索引，并修复站内路径及锚点链接。

## [2.141.0] - 2026-08-28

### 🎉 新功能

- **任务运行状态接口 `GET /api/v1/status`**：为 `--serve` 场景（Web UI / ACP 链路）提供任务维度心跳，返回 `busy`（当前是否有正在执行的任务）、`lastCompletedAt`（进程级上次任务完成时间）以及活跃 session 存在时的 `activeSessionId` / `runStatus`；与 `/health` 职责分离，health 仍作为进程存活/就绪探针。
- **WebUI 文件面板独立化与公式渲染**：对话中文件路径带行号范围时可正常打开；右侧文件面板与菜单栏编辑器状态隔离，资源管理器、文件搜索、源代码管理、文件编辑和终端拆为独立工具标签；对话消息支持行内与块级 LaTeX 公式渲染。

### 🔧 功能改进

- **后台会话保持实时权限模式**：`/bg`、左箭头转后台与 `/fork-bg` 交接时，把会话当前的权限模式（含 Shift+Tab 切换出的 auto）写入 worker 的 spawn 与 respawn 参数，避免 auto mode 在转后台瞬间掉回 default。
- **后台 job Web endpoint 隔离**：后台 job 不再继承父 Gateway 的固定端口、host 与认证模式，避免撞端口与 loopback iframe 误继承父实例密码；Jobs API 只暴露本机存活 bg worker 的 loopback `webUrl`。
- **标题生成模型路由**：支持隐藏的内置轻量场景模型，允许新版本客户端通过远端模型映射切换标题生成模型，未配置映射时自动回退既有轻量模型路径。
- **统一终端链接打开位置**：仅对话页右侧终端中的文件路径在右侧面板打开，其余终端文件路径进入独立编辑器页面；HTTP(S) 链接继续通过外部浏览器打开。
- **智能体列表悬浮展示目录**：悬浮时展示所属目录，便于快速区分不同工作目录下的智能体。
- **企业微信 AI Bot 交互升级**：交互工具转成 template_card 按钮卡片（权限确认、AskUserQuestion、下一步建议可点选）；长连接按官方协议做真流式回复，一段一条封口换行，长工具以单独状态条提示当前动作。
- **插件 ZIP 流式解压与统一首轮加载**：插件市场与 MCPB 解压按文件流式读取并施加写入背压，统一首轮运行时投影构建来源，单缺失插件以插件错误降级，不再让 `--print` 额外等待全量 Marketplace 物化。
- **显式识别 `additional-data` role**：压缩续聊还原逻辑显式声明「只还原 `user-context`、不还原 `additional-data`」的两层语义，便于后续按 role 扩展压缩策略。

### 🐛 问题修复

- **编辑重发静默截断错误分支**：编辑历史消息重发时，回给客户端的定位 ID 在若干场景下不指向消息本身，导致回退砍在错误位置却上报成功（表现为另一轮对话凭空消失且冷加载不回）；现已只认用户本人提问，定位不到时退化为本地剪枝加全新发送。同时修复取消或编辑后再次重发提示「服务出现异常，请重试」的问题。
- **团队模式队员消息边界丢失**：修复队员消息在回合结束边界偶发丢失、导致 team-lead 停在「思考中」不再续跑最终结论的问题，改为两段式消费以保留未进模型的消息。
- **模型异常收尾**：模型流最终返回错误状态时，通过 ACP JSON-RPC 错误结束请求，不再误报成功或错误标记为 Agent 主动拒绝。
- **Stream JSON 长轮询防抢跑**：避免后台 drain 在会话非空闲时抢跑，防止重复输出上一轮结果并保持队列与停止操作语义一致。
- **工作空间路径过长导致会话历史写入失败**：修复目录层级过深、单段目录名超文件系统上限时创建历史目录报错的问题，超长路径被安全截断并附加稳定短哈希。
- **极简模式沙箱工具可用**：切到极简后 REPL 内可调用 Bash / Edit / Skill，修复骨架目录和沙箱全局为空导致工具注册不上的问题。
- **REPL 前台进度刷屏**：对 `isStreaming` 的进度帧按 `callId` 去重、就地刷新同一条，并补上与 Bash 一致的 `callId` 兜底。
- **Agent View 进会话再回来丢列表**：重挂与左键进 view 同样保持全局，只有用户显式传 `--cwd` 才收窄，避免别的启动目录会话整批消失。
- **插件专家 system prompt 缺位**：修复普通 plugin settings.agent 场景下 host system prompt 的 PluginAgentPrompt 槽位缺少专家提示词来源的问题。
- **macOS 文件安全兜底**：文件规则未命中或未配置时允许读取和写入，删除操作仍需用户确认。
- **Windows 系统代理 EPROTO**：修复系统代理地址把目标协议误当作代理传输协议导致 HTTPS 握手报 `EPROTO packet length too long` 的问题，失败重试真正绕过坏代理并归类为 TLS 网络错误。
- **checkpoint 回退误删**：修复 checkpoint 备份失败时回退可能误删用户已有文件的问题，按文件隔离备份失败，确保其他文件仍可正常更新。
- **标准插件安装生命周期**：统一 Product 内置与远程 marketplace 的标准插件安装生命周期（版本化 cache、可恢复事务 journal、last-good 回滚、并发读锁修复等），后台 remote reconcile 失败不再阻断企业 managed policy 应用。
- **WebUI 多项修复**：修复编辑器状态栏分支列表无法点击切换、底部终端末行被裁切、新建智能体后首条用户消息偶发不显示、智能体模式锁定状态提示、已完成任务摘要重复计数、对话执行中消息左侧冗余竖线、文件面板与编辑器状态隔离、任务终态回退与成员历史重复、团队执行成员/任务动态展示等问题。

## [2.140.0] - 2026-08-26

### 🎉 新功能

- **CBC WebUI 群聊气泡**：消息队列解析成员消息中的发送者、摘要和正文，以可区分成员身份的群聊气泡展示；消息进入对话流后保持相同样式。同时增大对话输入框底部留白，避免输入框紧贴窗口底边。
- **stream-json 模式新增 `steer` 控制信号**：在 `--input-format=stream-json` 下可通过 `control_request`（subtype `steer`）向正在执行的 Agent 轮次注入用户消息，语义对齐 ACP `session/steer`，复用现有 `SteerInputBuffer` 与模型请求前注入机制，供 SDK/网关调用方（如云助理 sandbox-proxy）后续接入。

### 🔧 功能改进

- **Web UI 对话流排版节奏**：优化正文、思考与工具组排版，运行中以连续轨道交错展示正文和工具，用户消息气泡改为中性灰色；REPL 工具折叠态聚焦执行意图，展开态按 `Code` / `Output` 分区并提供 JavaScript 语法高亮。
- **REPL 大输出不再撑爆上下文**：REPL 工具结果补齐 Bash 同款分层保护——返回值超过 30KB 时按 head/tail 截断并带 `... [truncated N bytes] ...` 标记；完整输出（stdout/stderr/result）落盘到 tool-results 目录，模型面收敛为 `<persisted-output>` 占位符（2KB 预览 + 文件路径），需要时可 Read 完整内容，跨轮不再重复发送全量结果。REPL 工具加入 compact 白名单，长会话压缩时旧 REPL 结果与其他大输出工具一致被折叠。
- **Web UI 项目目录菜单**：主输入框和新建智能体输入框的目录菜单均默认向上展开，上方空间不足时向下；新建智能体菜单使用页面级浮层，并修复智能体/房间搜索结果被输入框遮挡的问题。
- **Web UI 收件人搜索体验**：移除输入框的突兀聚焦描边，候选列表以浮层展示，避免撑开页面布局。
- **安全中心有序规则**：文件、命令和网络能力支持按统一名单的顺序执行规则，并在当前会话中热更新；文件规则按平台处理路径大小写，命中命令拒绝规则后直接结束当前任务，不再换用等价写法重试。文件写入执行前重新校验竞态出现的目标及其真实路径；同一路径的会话级读取、写入审批合并生效，不再互相覆盖。Grep 搜索目录在执行前应用读取规则，沙箱模式下系统 grep 回退同样通过沙箱执行，无安全后端时拒绝使用 JavaScript 直接读取文件。

### 🐛 问题修复

- **后台任务通知退出码**：后台命令完成通知中补充可信退出码，PowerShell 退出码未采集到或停止竞态时明确提示以输出为准，避免将未知结果误判为成功或失败。
- **挂载点 / 软链环境下"AI 回复丢失"**：虚拟磁盘挂载或软链场景下，用户可见的短路径与其物理路径会被会话存储、工具产物存储等不同链路各自压缩成不同 storeId，同一次对话被切成两半、历史列表打开的是缺 AI 回复的那一半。现 storeId 派生统一收敛到经过 realpath 归一化的物理路径；存量会话在规范目录未命中时透明回退到老短路径目录读取，无需手工迁移。
- **团队协作停止按钮静默失效**：团队主 Agent 回合已结束但成员子任务仍在执行时（如本地专家团成员正在撰写内容），点击停止会被误判为「空闲会话的兼容性取消」而吞掉，成员子任务不会被终止。现正确识别团队仍活跃的情况，立即终止所有成员子任务并将任务状态同步到已取消终态；同时取消一个会话的操作不再影响其他会话正在运行的团队成员。
- **REPL / 沙箱交互工具被误拦截**：REPL / 沙箱模式下 AskUserQuestion、ExitPlanMode 等交互工具被误判为高风险操作拦截，导致问题面板 / 计划审批无法弹出、模型收到报错并把问题文本当普通文本复读。显式拒绝规则仍然生效。
- **云沙箱 cancel 后状态机卡死、消息零回复**：cancel 中断当前 turn 后，上一轮已被 abort 的 run 的迟到 `agent_start` 事件可能把 `session.activeRunContext` 写脏并把状态机推到 `model_requesting`，后续所有 prompt 被空结果顶掉。现改用 `session.abortController` 身份判定：身份未变说明没有新 run 接管，必须 forceIdle 把状态机救回。
- **子 agent 压缩结果丢失**：子 agent 触发上下文自动压缩后，父 agent 会收到「任务被用户中断」而拿不到真实结果，续跑 run 成为孤儿、只能重跑一遍重活。现改为在续跑 run 派发之后再统一收口，与 Blocking / PreMessage 两个策略保持一致。
- **agent team 队员唤醒后跑错模型**：队员每次收到新消息被重新唤醒时，之前单独指定的模型会丢失、回落到主对话使用的模型；为其单独配置的工具禁用项同样失效。现队员在整个生命周期内稳定使用指定模型与工具限制，后台任务 agent 与显式恢复的子 agent 一并修复。
- **`<system-reminder>` 泄漏到界面**（#100020）：记忆笔记、hook 输出等注入内容里出现字面量 `</system-reminder>` 标签时，注入块在伪闭合处提前截断，孤立闭合标签与记忆正文残渣泄漏到用户消息渲染区。现注入入口对伪闭合标签做转义中和，确保注入块始终被完整剥净。
- **stream-json steer 处理器编译失败**：`SteerInputBuffer.push` 改为对象入参后，stream-json 的 steer 控制信号处理器仍按旧签名传参，导致 agent-cli 类型检查与桌面端编译中断；同时补齐两处仍按旧签名断言的单测。功能行为不变。
- **对话流 steer 消息 `_meta` 透传**：`session/steer` 插入的消息现在可携带客户端不透明 `_meta`，agent-cli 原样落盘到该消息的 `providerData.clientMeta`（不解读、不改模型注入、不加 `isMeta`）。修复历史重放把 steer 消息展示成 userMsg、以及重开后立即发送排序错乱的问题。
- **pyenv 兼容**：将 `~/.pyenv/` 加入跨平台默认工具链写白名单，避免 macOS 等平台安装或切换 Python 版本时因无法更新 pyenv 版本、shim 和配置而失败。
- **Monitor WebSocket 规则执行**：现在遵循安全中心有序网络规则，正确执行首条命中的允许、询问或拒绝动作，并仅在全部规则未命中时应用 `denyAll` 兜底。
- **Web UI PWA 清单鉴权**：PWA 清单请求现在携带同源凭据，避免在 Cookie 鉴权环境中加载失败。
- **后台任务定位**：`TaskStop` / `TaskOutput` 在目标 `task_id` 不存在时，改为明确报错并列出当前运行中的任务（含任务类型标注），不再让模型只能盲猜 ID。
- **WebFetch 图片/二进制分流**：图片或文件 URL 不再走 WebFetch 的 AI summary。工具描述引导模型用 Bash 下载后再 Read；若模型仍误调 WebFetch，运行时按 `Content-Type` 跳过摘要并返回同样的下载指引。
- **Windows Ctrl+G 记事本兜底**：未设置 `$VISUAL` / `$EDITOR` 时，`ExternalEditorUtils.getAvailableEditor()` 的 Windows 兜底从裸 `notepad` 恢复为 `cmd /c start /wait notepad`，修复 Windows Terminal / 集成终端 / `--serve` 或 daemon 派生子会话下记事本窗口不上前台、TUI 死等问题；`filePath` 仍以 argv 单 token 传入 `spawnSync`，shell 元字符与命令替换不会被解析。
- **插件市场更新阻塞**：修复插件市场更新可能被本地安装态阻塞的问题；后台插件准备保持幂等，失败时仍投影已成功恢复的插件。
- **Miora 凭据外发审批**：官方 Miora MCP 使用 `connect_cloud_service` 已静默保护的 `tempKey` 时不再重复弹出外发审批；仅复用可信自动保护记录，其他参数与同名自定义 MCP 仍照常检测。
- **敏感结果策略丢失**：修复 MCP 延迟工具原子替换索引时丢失敏感结果策略的问题；`connect_cloud_service` 返回的凭据恢复静默加密，不再误弹敏感信息审批框。

### 📝 文档更新

- **`-y` 与 `CODEBUDDY_IS_SANDBOX` 风险说明**：`codebuddy -h` 的 `-y` 说明改为：默认仍会询问 HIGH/CRITICAL；隔离沙箱 full pass 需设置进程环境变量 `CODEBUDDY_IS_SANDBOX=1`。文档补充高危风险声明，并说明故意不做成 CLI 参数、不会从 `settings.json` 的 `env` 注入。

## [2.139.0] - 2026-08-25

### 🎉 新功能

- **结构化答复征询工具 `AskUserForStructuredInput`**：直连 ACP v1 `elicitation/create` 通道，接受说明文字与受限 JSON Schema，让客户端渲染表单收集用户的结构化答复，适合"多字段一次填写""可变长度的逐项授权/连接"等开放形状。默认关闭，需同时设置 `CODEBUDDY_ENABLE_ASK_USER_FOR_STRUCTURED_INPUT=1` 且客户端声明 `capabilities.elicitation.form=true`；参数完全泛化（`message` + `requestedSchema`），业务场景走 `--append-system-prompt`，仓库内置示例 prompt 可跑通 `/cli:debug` 全链路。CBC 内置 Web UI 同步新增卡片渲染器。不影响现有 elicitation 链路。

### 🔧 功能改进

- **`CODEBUDDY_IS_SANDBOX` 真正 full pass**：设置进程环境变量 `CODEBUDDY_IS_SANDBOX=1` 后，`-y` / `--permission-mode bypassPermissions` 跳过 HIGH/CRITICAL 审批，可见模式不变（TUI 显示红色 bypass）；默认 `-y` 仍是安全收敛后的 `bypassPermissions`，不会从 `settings.json` 注入该变量，`permissions.disableBypassPermissionsMode` 仍然生效。
- **REPL 授权接入统一权限流程**：REPL 工具不再对每次执行硬性要求审批——auto 模式下由分类器读代码自动放行/拦截，普通模式下可被 allow 规则与"本会话允许"豁免；REPL 内危险命令（如 `rm -rf`、强制推送主分支等）与敏感文件访问会被拦截并回报错误。
- **REPL 前台执行进度展示对齐 Bash**：不再显示会反复重置的孤立 `...running Ns ago` 条目，改为单行聚合进度（单调递增运行时长 + 子工具摘要 + 累积输出），内部子工具流式刷新被抑制；执行结束后结果行首行显示总耗时，`ctrl+o` 展开查看完整输出。工具调用行只回显 `code` 正文，不再显示 `timeout` / `description` 等次要入参。
- **REPL 终端展示**：工具调用行显示代码用途说明，按 `ctrl+o` 展开后代码与执行结果分区展示，保留多行与语法高亮。
- **`AskUserForStructuredInput` Web UI 卡片样式**：对齐 `AskUserQuestion` 面板视觉规范——pending 状态 brand 主色边框 + 呼吸动画、标题栏图标、独立卡片列表字段区、`enum` 选中填充主色、`boolean` 使用 switch 控件、主次分明的操作栏。
- **内置插件市场改为 ZIP 分发**：由 Git 仓库克隆改为 ZIP 归档下载安装，提升安装稳定性与更新效率；为市场下载增加连接阶段超时兜底，DNS 解析 / TCP 连接 / 无响应时 10 秒内快速失败，不再阻塞主进程。
- **工作台可下载当前文件**：编辑器、预览和文件树都能把当前文件存到本地。

### 🐛 问题修复

- **后台任务完成通知丢失**：后台任务结束但退出信号丢失时，不再停留"运行中"，改为定期核对进程真实存活状态，数秒内收口并推送通知；手动停止的任务正确显示「已停止」而非「已完成」；退出码无法采集时明确标注退出码未知并提示以命令输出判断结果；停止失败不再导致任务真正结束后的完成通知被永久丢弃。(#92382)
- **对话偶发报「请求信息无效」（400）后卡住**：后台任务通知/撞线消息的续圈判定与注入间存在竞态，可能发出以助手回复结尾的请求被网关拒绝。现续圈时用同一归属快照取消息，并在仍取不到时自动补隐藏续跑占位，保证请求永不以助手回复收尾。仅影响上层自管队列（Mode B）场景。
- **长会话内存泄漏**：修复 abort 监听器逐轮叠链、keep-alive socket `close` 监听器永不自摘导致的泄漏；token 估算改为只读遍历，移除对整条 history 的逐轮深拷；修复 fork/team 长会话首次保存时全量拼接历史导致的内存峰值；工具结果外置扩展到 `output_text` 正文（`providerData.toolResult.content` 渲染字段除外）。
- **插件初始化恢复**：修复多进程并发或网络异常时插件初始化长期无响应、重复迁移或覆盖可用缓存的问题；增加 24 小时后台清扫、进程退出释放与 Windows PID 复用识别，自动收敛失效的 `.in_use` 标记；Git 身份探测仅对真实 Git 来源解析并限制耗时，避免打包市场因上级目录含 `.git` 触发无关调用。
- **子智能体恢复与模型持久化**：打开已有子智能体保持当前画面不闪空白，带会话地址时短暂失败会重试；运行中改过的模型重启后沿用，不改主对话默认模型；空白会话套用上次选的模型；频道回执按频道认、坏信封不当用户气泡；1:1 @ 只补全不投递、频道点名走频道页；发言后头像马上进入忙碌态。
- **历史回放容错**：单条 schema 异常的历史工具调用（如 `command` 为对象而非字符串）不再导致整段会话回放报错、HTTP 500 或历史打开为空——工具标题生成走安全兜底，坏项逐条跳过并记录可定位日志，其余历史正常展示。(#94491)
- **sandbox 会话断开执行工具挂起**：主动断开连接也会通知上层收尾活跃执行句柄，不再因依赖反向结束通知的工具永久 pending 导致 Agent 任务卡死。
- **新建页搜索下拉不再挡住输入**：搜索结果跟在搜索条下面占位，不盖住下方输入框。
- **Web UI 源代码管理**：并发 Git 操作或短暂 index 锁冲突导致切换分支失败的问题，统一串行化仓库操作并阻止重复触发，提供友好错误说明与重试入口。

### 📝 文档更新

- `docs/tools-reference.md` 补充 `AskUserForStructuredInput` 工具条目。
- `docs/env-vars.md` 补充 `CODEBUDDY_ENABLE_ASK_USER_FOR_STRUCTURED_INPUT` 开关说明。

## [2.138.0] - 2026-08-24

### 🎉 新功能

- **REPL 代码执行模式**：新增 REPL 工具，模型可在隔离沙箱中编写 JS 编排工具调用，支持内置工具与已连接 MCP 工具的零导入直接调用，减少多工具任务的往返次数。受 `CODEBUDDY_REPL_ENABLED` 开关控制（默认关闭）。标准 REPL 默认注入全部内置工具；`general-purpose` 子代理在开启后也可进入该模式。
- **回合与后台任务耗时**：对话结束后展示本轮墙钟耗时（`✔ Worked for …`）；后台命令与 Dynamic Workflow 完成后展示独立耗时。收尾时仍有后台任务会标注 `shells still running`。可通过 `showTurnDuration` 或 `/config` 关闭。
- **思考强度可见且可持久化**：欢迎界面在模型名后展示当前思考强度；通过 `/effort` 设置的档位会写入用户配置，重启后仍然生效。
- **专家团会话恢复**：恢复协作会话时保留成员运行状态、上下文和输出查询能力，刷新或重连后可继续查看进展。
- **SDK 动态更新配置**：新增 `update_sdk_config` 通道，stdio 常驻会话可在不重连的情况下替换 MCP 与 hooks 配置。
- **Web UI 后台智能体与目标条**：后台智能体改为同源 iframe 池，避免多标签挤占连接；支持设置进行中目标、暂停后续跑，以及派发图片与文件附件。

### 🔧 功能改进

- **Agent Home 频道与房间**：频道和房间使用专属表面，主助手与极简模式不能加入组队或频道；频道内可用短 ID 点到同事，气泡可进入对方对话。
- **Edit 内容级匹配**：Edit / MultiEdit 不再要求必须先 Read 且文件未变，改为按磁盘当前内容匹配替换，减少无效重读。
- **后台通知期间新消息即时生效**：处理后台任务完成通知时发出的新消息会插入当前轮，不必等通知处理完才响应。
- **stream-json 历史顺序**：新增 `CODEBUDDY_STREAM_JSON_REVERSE_HISTORY`，resume 时可按最新在前输出历史。
- **Web UI 工作台与对话体验**：统一输入框上下文与智能体术语，优化右侧工作台、对话流视觉节奏、Markdown 代码高亮、智能体头像与响应式文件面板。
- **用量提醒**：独立 CLI 不再请求已下线的用量提醒接口。
- **WorkBuddy 快速问答**：复用宿主下发的产品与登录信息，提升预热命中率。
- **插件市场与缓存**：首轮从已安装登记投影，市场增删改走跨进程事务；内置市场登记在缓存暂不可用时仍保留。
- **绕过权限时仍遵守显式询问规则**：开启 bypass 后，显式 ask 规则仍然生效。
- **SDK 初始化**：只重放当前进程的易变配置，避免无关远端刷新。

### 🐛 问题修复

- **Agent Home**：侧栏重命名即时生效；频道发言留在当前页可见；同事互 @ 不再叫醒主助手；已结束同事会话恢复不再卡死进程；创造 / 极简新建会话不再卡在「正在连接」；同事回给主助手的私信不再卡在收件箱；未认领 Run 不再计入主助手。
- **排队消息不再丢失**：上层自管队列时，Agent 忙碌期间到达的消息会按序等待真实空闲后再执行，不再被误判为已完成而清空；后台任务完成通知改为随当前轮送达，避免与排队消息抢占导致界面停在「思考中」。
- **上下文超限与压缩**：扩充超限文案识别范围，自动压缩恢复成功后不再把最终结果标成失败；空会话执行 `/compact` 不再误报失败；stream-json 实时流和历史回放不再暴露内部压缩消息。
- **MCP 与工具可用性**：晚连的直连 MCP 工具不再在首轮偶发缺失；ToolSearch 清单不再只列出部分工具；系统提示只列出当前真正可调用的工具，避免 ImageGen 等「提示可用但调用被拒」。
- **`-p` 非交互模式长任务**：前台命令被自动转入后台后不再立刻退出，构建/编译等长任务可以跑完。
- **自定义斜杠命令**：命令连同隐藏上下文被包裹发送时也能正确识别，用户级与项目级自定义命令均可执行。
- **同名 Skill**：根级与子目录、内置与用户自定义、插件内同名 skill 可稳定共存或按预期覆盖，不再随刷新翻盘；非字符串技能名不再导致崩溃。
- **敏感内容保护**：专家团并发检测相同敏感信息时共用一次审批；「完全访问」下即时关闭敏感检测；Sandbox 新格式密文不再被误拒；会话 worker 替换后「允许原文」授权不再失效；保护处理失败不再写入无效审计。
- **CLI 退出后子进程回收**：Bash / PowerShell、hook 以及 `--serve` 网关的终端与进程 API 子进程，在 CLI 退出时不再残留为孤儿进程。
- **思考签名回放**：修复并发工具调用后下一轮请求丢失私有思考签名、导致模型请求失败的问题。
- **积分/用量展示**：模型响应因达到最大 token 限制被截断并自动重试时，本轮积分与上下文用量会正确推送到客户端。
- **等待计时与结束耗时对齐**：等待中的秒数与结束后 `Worked for` 显示一致。
- **自定义模型鉴权**：模型级 API Key 鉴权失败时不再误提示平台重新登录。
- **WorkBuddy 部署形态**：作为宿主子进程运行时跟随宿主声明的部署形态，避免同一账号拉到两套模型与智能体清单。
- **WorkBuddy 专家团取消后恢复**：停止主会话后成员进入可恢复暂停态，只有定向消息才会唤醒对应成员。
- **权限与沙箱**：`find -delete` 执行前会提示该命令不受安全删除保护；恢复 macOS 默认写入白名单，减少正常写入误弹权限；Windows 沙箱删除会先尝试系统回收站。
- **Web UI**：修复编辑器终端重复重连、智能体列表面板误显示、输入框字号不一致、标签过长挤压、编辑器多余顶栏、智能体错误提示不友好、空白欢迎页标题、侧栏指示线过亮、终端双层背景、思考与工具状态间距不齐等问题。
- **其他**：`--serve` 未叠加 `--acp` 时不再把会话更新打到 stdout；`/context` 分项估算在未发过模型请求时也能显示本地估算；诊断日志按预算自动清理。

## [2.137.1] - 2026-08-17

### 🐛 问题修复

- **上下文压缩续跑**：修复长任务上下文接近窗口上限时，同步压缩成功后会话可能永久停在「思考中」、无法继续的问题。现在压缩完成后会正确续跑对话。
- **Shell 工具关闭交互式分页器与 `less` 历史**：本地和沙箱命令统一使用非交互分页器，并禁止 `less` 更新用户目录下的历史文件，避免 `git diff` 等命令等待输入或触发无关的文件保护提示。
- **safe-delete 程序黑名单**：修复 macOS Brokered Shell 运行时不可用时，`rm` / `unlink` / `rmdir` 经 safe-delete 链路绕过程序黑名单的问题。程序黑名单命中后优先硬拦截，禁止混合文件拦截记录触发授权或脱离沙箱重试。
- **纯数字技能名**：修复技能名称为纯数字（如 `12306`）时，新建会话失败并提示 "Internal error" 的问题。

## [2.137.0] - 2026-08-15

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.136.0] - 2026-08-13

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.135.0] - 2026-08-12

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.134.0] - 2026-08-11

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.132.0] - 2026-08-02

### 🎉 新功能

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

### 🐛 问题修复

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

## [2.131.0] - 2026-07-31

### 🎉 新功能

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

### 🐛 问题修复

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

## [2.130.0] - 2026-07-30

### 🎉 新功能

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

### 🐛 问题修复

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

## [2.129.0] - 2026-07-29

### 🎉 新功能

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

### 🐛 问题修复

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

## [2.128.1] - 2026-07-29

### 🐛 问题修复

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

## [2.128.0] - 2026-07-28

### 🎉 新功能

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

### 🐛 问题修复

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

## [2.127.3] - 2026-07-27

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.127.2] - 2026-07-26

### 🐛 问题修复

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

## [2.127.0] - 2026-07-24

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.126.0] - 2026-07-23

### 🎉 新功能

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

### 🐛 问题修复

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

## [2.125.5] - 2026-07-23

### 🐛 问题修复

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

## [2.125.4] - 2026-07-23

### 🐛 问题修复

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

## [2.125.3] - 2026-07-23

### 🔧 功能改进

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

## [2.125.2] - 2026-07-22

### 🐛 问题修复

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

## [2.125.1] - 2026-07-22

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.125.0] - 2026-07-21

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.124.1] - 2026-07-19

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.124.0] - 2026-07-17

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.123.1] - 2026-07-16

### 🐛 Bug 修复

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

## [2.123.0] - 2026-07-16

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.122.0] - 2026-07-15

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.121.3] - 2026-07-15

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.121.2] - 2026-07-14

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.121.1] - 2026-07-14

### 🐛 Bug 修复

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

### 📝 文档更新

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

## [2.121.0] - 2026-07-14

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.120.0] - 2026-07-13

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.119.4] - 2026-07-12

### 🔧 功能改进

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

## [2.119.3] - 2026-07-12

### 🐛 Bug 修复

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

## [2.119.2] - 2026-07-12

### 🔧 功能改进

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

## [2.119.1] - 2026-07-11

### 🐛 Bug 修复

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

## [2.119.0] - 2026-07-10

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.118.2] - 2026-07-09

### 🐛 Bug 修复

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

## [2.118.1] - 2026-07-09

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.118.0] - 2026-07-08

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.117.2] - 2026-07-07

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.117.1] - 2026-07-06

### 🔧 功能改进

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

## [2.117.0] - 2026-07-04

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

### 📝 文档

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

## [2.116.0] - 2026-07-03

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.115.0] - 2026-07-02

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.114.3] - 2026-07-02

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.114.2] - 2026-07-01

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.114.1] - 2026-06-30

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.114.0] - 2026-06-29

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.113.0] - 2026-06-28

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.112.1] - 2026-06-27

### 🐛 Bug 修复

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

## [2.112.0] - 2026-06-26

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.111.0] - 2026-06-26

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

### 📝 文档更新

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

## [2.110.0] - 2026-06-25

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.109.3] - 2026-06-23

### 🎉 新功能

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

### 🐛 Bug 修复

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

## [2.109.2] - 2026-06-23

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.109.1] - 2026-06-21

### 🐛 Bug 修复

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

### 📝 文档更新

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

## [2.109.0] - 2026-06-19

### 🎉 新功能

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

### ⚠️ 不兼容变更

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

## [2.108.2] - 2026-06-18

### 🐛 修复

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

## [2.108.1] - 2026-06-18

### 🐛 修复

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

## [2.108.0] - 2026-06-18

### 🎉 新功能

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

### 🐛 修复

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

## [2.107.0] - 2026-06-17

### 🎉 新功能

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

### 🔧 改进

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

### 🐛 修复

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

## [2.106.7] - 2026-06-16

### 🔧 改进

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

## [2.106.6] - 2026-06-16

### 🐛 修复

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

## [2.106.5] - 2026-06-16

### 🐛 修复

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

## [2.106.4] - 2026-06-15

### 🎉 新功能

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

### 🔧 改进

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

### 🐛 修复

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

## [2.106.3] - 2026-06-13

### 🐛 修复

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

## [2.106.2] - 2026-06-13

### 🎉 新功能

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

### 🔧 改进

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

## [2.106.1] - 2026-06-12

### 🐛 修复

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

## [2.106.0] - 2026-06-12

### 🎉 新功能

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

### 🔧 改进

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

### 🐛 修复

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

## [2.105.2] - 2026-06-10

### 🐛 修复

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

## [2.105.1] - 2026-06-10

### 🔧 改进

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

### 🐛 修复

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

## [2.105.0] - 2026-06-09

### 🎉 新功能

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

### 🔧 改进

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

### 🐛 修复

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

## [2.103.4] - 2026-06-08

### 🔧 改进

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

## [2.103.3] - 2026-06-08

### 🐛 修复

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

## [2.103.2] - 2026-06-07

### 🔧 改进

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

### 🐛 修复

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

## [2.103.1] - 2026-06-04

### 🔧 改进

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

### 🐛 修复

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

### 📝 文档

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

## [2.103.0] - 2026-06-04

### 🎉 新功能

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

### 🔧 改进

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

### 🐛 修复

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

## [2.102.0] - 2026-06-03

### 🎉 新功能

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

### 🔧 改进

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

### 🐛 修复

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

### 📝 文档更新

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

## [2.101.0] - 2026-06-02

### 🎉 新功能

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

### 🐛 修复

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

## [2.100.2] - 2026-06-01

### 🐛 修复

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

## [2.100.1] - 2026-05-30

### 🐛 修复

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

## [2.100.0] - 2026-05-30

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 修复

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

### 📝 文档

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

## [2.99.1] - 2026-05-28

### 🔧 功能改进

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

### 🐛 修复

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

### 📝 文档

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

## [2.99.0] - 2026-05-27

### 🎉 新功能

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

### 🐛 修复

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

### 📝 文档

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

## [2.98.1] - 2026-05-25

### 🐛 修复

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

## [2.98.0] - 2026-05-24

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 修复

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

## [2.97.5] - 2026-05-22

### 🐛 修复

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


## [2.97.4] - 2026-05-21

### 🔧 功能改进

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

### 🐛 修复

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

## [2.97.3] - 2026-05-19

### 🔧 功能改进

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

### 🐛 修复

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

## [2.97.2] - 2026-05-16

### 🔧 功能改进

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

### 🐛 修复

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

## [2.97.1] - 2026-05-14

### 🐛 修复

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

## [2.97.0] - 2026-05-13

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 修复

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

### 📝 文档

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

## [2.96.1] - 2026-05-12

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 修复

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

## [2.96.0] - 2026-05-11

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 修复

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

## [2.95.1] - 2026-05-07

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.95.0] - 2026-05-01

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 开发体验改进

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

## [2.94.4] - 2026-05-01

### 🐛 问题修复

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

## [2.94.3] - 2026-04-29

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.94.2] - 2026-04-28

### 🐛 问题修复

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

## [2.94.1] - 2026-04-28

### 🐛 问题修复

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

## [2.94.0] - 2026-04-28

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.93.7] - 2026-04-26

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.93.6] - 2026-04-25

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.93.5] - 2026-04-23

### 🔧 功能改进

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

## [2.93.4] - 2026-04-23

### 🔧 功能改进

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

## [2.93.3] - 2026-04-22

### 🔧 功能改进

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

## [2.93.2] - 2026-04-22

### 🐛 问题修复

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

## [2.93.1] - 2026-04-21

### 🔧 功能改进

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

## [2.93.0] - 2026-04-20

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.92.0] - 2026-04-20

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.91.0] - 2026-04-17

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.90.0] - 2026-04-16

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.89.0] - 2026-04-16

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.88.0] - 2026-04-14

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

### 📝 文档

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

## [2.87.0] - 2026-04-14

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.86.0] - 2026-04-13

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.85.0] - 2026-04-12

### 🚀 新功能

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

### 🔧 功能改进

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

## [2.84.0] - 2026-04-12

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.83.1] - 2026-04-10

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.83.0] - 2026-04-10

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.82.0] - 2026-04-10

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.81.2] - 2026-04-09

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.81.1] - 2026-04-08

### 🔧 功能改进

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

### 📝 文档更新

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

## [2.81.0] - 2026-04-08

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.80.0] - 2026-04-08

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.79.1] - 2026-04-07

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.78.1] - 2026-04-05

### 🐛 问题修复

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

### 🔧 功能改进

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

## [2.78.0] - 2026-04-05

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.77.1] - 2026-04-04

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.77.0] - 2026-04-03

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.76.0] - 2026-04-03

### ✨ 新功能

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

### 🐛 问题修复

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

## [2.75.0] - 2026-04-03

### 🔧 功能改进

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

## [2.74.0] - 2026-04-03

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.73.0] - 2026-04-03

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.72.0] - 2026-04-02

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.71.1] - 2026-04-01

### 🔧 功能改进

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

## [2.71.0] - 2026-04-01

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.70.1] - 2026-03-31

### 🔒 安全修复

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

### 🔧 功能改进

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

## [2.70.0] - 2026-03-31

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.69.0] - 2026-03-30

### ✨ 新功能

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

### 🔧 功能改进

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

### 🔒 安全修复

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

## [2.68.0] - 2026-03-30

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.67.0] - 2026-03-28

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.66.2] - 2026-03-26

### 🐛 问题修复

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

## [2.66.1] - 2026-03-26

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.66.0] - 2026-03-25

### ✨ 新功能

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

### 🐛 问题修复

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

## [2.65.1] - 2026-03-25

### 🐛 Bug 修复

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

## [2.65.0] - 2026-03-25

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.64.2] - 2026-03-24

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.64.1] - 2026-03-23

### 🐛 Bug 修复

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

## [2.64.0] - 2026-03-23

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📝 文档更新

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

## [2.63.5] - 2026-03-19

### 🔧 功能改进

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

## [2.63.4] - 2026-03-18

### 🔧 功能改进

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

## [2.63.3] - 2026-03-18

### 🔧 功能改进

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

## [2.63.2] - 2026-03-17

### 🔧 功能改进

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

## [2.63.1] - 2026-03-17

### 🐛 问题修复

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

## [2.63.0] - 2026-03-16

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.62.1] - 2026-03-15

### 🔧 功能改进

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

### 📝 文档优化

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

## [2.62.0] - 2026-03-13

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.61.3] - 2026-03-13

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.61.2] - 2026-03-13

### 🔧 功能改进

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

## [2.61.1] - 2026-03-12

### 🔧 功能改进

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

## [2.61.0] - 2026-03-12

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.60.0] - 2026-03-12

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.59.0] - 2026-03-12

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.58.0] - 2026-03-11

### ✨ 新功能

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

### 🔧 功能改进

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

### 🎨 界面优化

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

### 🐛 问题修复

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

## [2.57.1] - 2026-03-11

### 🔧 功能改进

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


## [2.57.0] - 2026-03-11

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.56.1] - 2026-03-09

### 🐛 问题修复

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


## [2.56.0] - 2026-03-07

### ✨ 新功能

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

### 🔧 功能改进

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

### 📝 文档更新

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


## [2.55.1] - 2026-03-06

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.55.0] - 2026-03-06

### ✨ 新功能

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

### 🔧 功能改进

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


## [2.54.0] - 2026-03-05

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.53.0] - 2026-03-05

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.52.6] - 2026-03-03

### 🔧 功能改进

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


## [2.52.5] - 2026-03-03

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.52.4] - 2026-03-02

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.52.3] - 2026-02-28

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.52.2] - 2026-02-28

### 🔧 功能改进

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


## [2.52.1] - 2026-02-28

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.52.0] - 2026-02-26

### 🚀 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.51.2] - 2026-02-26

### 🔧 功能改进

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


## [2.51.1] - 2026-02-25

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.51.0] - 2026-02-24

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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


## [2.50.7] - 2026-02-19

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.50.6] - 2026-02-19

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.50.5] - 2026-02-14

### 🎉 新功能

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

### 🔧 功能改进

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

## [2.50.4] - 2026-02-14

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.50.3] - 2026-02-13

### 🐛 问题修复

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

## [2.50.2] - 2026-02-13

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.50.1] - 2026-02-12

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.50.0] - 2026-02-12

### 🎉 新功能

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

### 🔧 功能改进

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

## [2.49.7] - 2026-02-11

### 🎉 新功能

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

## [2.49.6] - 2026-02-11

### 🔧 功能改进

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

## [2.49.5] - 2026-02-11

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.49.3] - 2026-02-10

### 🔧 功能改进

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

## [2.49.2] - 2026-02-10

### 🔧 功能改进

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

### 🐛 问题修复

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

### 🔧 构建优化

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

## [2.49.1] - 2026-02-09

### 🔒 安全加固

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.49.0] - 2026-02-08

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.48.1] - 2026-02-06

### 🔧 功能改进

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

### 📝 文档更新

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

## [2.48.0] - 2026-02-05

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.47.0] - 2026-02-04

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.46.0] - 2026-02-04

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.45.1] - 2026-02-04

### 🔧 功能改进

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

## [2.45.0] - 2026-02-03

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.44.1] - 2026-02-03

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📚 文档更新

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

## [2.44.0] - 2026-02-02

### 🚀 新功能

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

### 🔧 功能改进

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

## [2.43.1] - 2026-02-02

### 🚀 新功能

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

### 🔧 功能改进

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

## [2.42.3] - 2026-01-31

### 🔧 功能改进

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

## [2.42.2] - 2026-01-31

### 🔧 功能改进

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

## [2.42.1] - 2026-01-31

### 🔧 功能改进

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

## [2.42.0] - 2026-01-30

### 🎉 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.41.8] - 2026-01-30

### 🔧 功能改进

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

### 🐛 问题修复

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

### 📚 文档更新

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

## [2.41.7] - 2026-01-29

### 🔧 功能改进

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

### 📝 文档修复

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

## [2.41.6] - 2026-01-28

### 🔧 功能改进

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

## [2.41.5] - 2026-01-28

### 🐛 问题修复

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

### 🔧 功能改进

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

## [2.41.4] - 2026-01-28

### 🔧 功能改进

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

## [2.41.3] - 2026-01-27

### 🔧 功能改进

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

## [2.41.2] - 2026-01-27

### 🔧 功能改进

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

## [2.41.1] - 2026-01-27

### 🔧 功能改进

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

## [2.41.0] - 2026-01-27

### ✨ 新功能

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

### 🔧 功能改进

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

### 📝 文档更新

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

## [2.40.1] - 2026-01-27

### 🐛 问题修复

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

### 🔧 功能改进

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

## [2.40.0] - 2026-01-27

### 🎉 新功能

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

### 🔧 功能改进

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

## [2.39.0] - 2026-01-26

### 🎉 新功能

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

### 🔧 功能改进

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

## [2.38.2] - 2026-01-26

### 🔧 功能改进

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

### 🐛 Bug 修复

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

## [2.38.1] - 2026-01-25

### 🔧 功能改进

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

## [2.38.0] - 2026-01-25

### 🚀 新功能

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

### 🔧 功能改进

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

### 📝 文档更新

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

## [2.37.20] - 2026-01-24

### 🔧 功能改进

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

## [2.37.19] - 2026-01-23

### 🔧 功能改进

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

## [2.37.18] - 2026-01-23

### 🐛 问题修复

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

### 🔧 功能改进

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

## [2.37.17] - 2026-01-23

### 🔧 功能改进

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

## [2.37.16] - 2026-01-23

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.37.15] - 2026-01-23

### 🐛 问题修复

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

## [2.37.14] - 2026-01-22

### 🔧 功能改进

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

### 🐛 问题修复

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

### 🔧 性能优化

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

## [2.37.13] - 2026-01-22

### 🔧 功能改进

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

## [2.37.12] - 2026-01-22

### 🎨 界面优化

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

### 🔧 功能改进

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

## [2.37.10] - 2026-01-21

### 🔧 功能改进

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

## [2.37.9] - 2026-01-21

### 🔧 功能改进

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

## [2.37.8] - 2026-01-21

### 🔧 功能改进

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

## [2.37.7] - 2026-01-21

### 🎉 新增功能

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

## [2.37.6] - 2026-01-21

### 🎨 界面优化

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

### 🔧 功能改进

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

## [2.37.5] - 2026-01-20

### 🐛 问题修复

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

## [2.37.4] - 2026-01-20

### ✨ 新功能

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

### 🐛 问题修复

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

## [2.37.3] - 2026-01-20

### 🔧 功能改进

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

## [2.37.2] - 2026-01-20

### 🔧 功能改进

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

## [2.37.1] - 2026-01-19

### 🔧 功能改进

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

## [2.37.0] - 2026-01-18

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.36.3] - 2026-01-17

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.36.2] - 2026-01-17

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.36.1] - 2026-01-16

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.36.0] - 2026-01-15

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.35.0] - 2026-01-15

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.34.1] - 2026-01-15

### 🐛 问题修复

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

## [2.34.0] - 2026-01-14

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.33.1] - 2026-01-14

### 🐛 问题修复

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

## [2.33.0] - 2026-01-13

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.32.0] - 2026-01-12

### ✨ 新功能

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

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.31.2] - 2026-01-09

### 🐛 问题修复

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

## [2.31.1] - 2026-01-09

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.31.0] - 2026-01-08

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.30.1] - 2026-01-08

### 🐛 问题修复

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

## [2.30.0] - 2026-01-07

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.29.0] - 2026-01-06

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.28.1] - 2026-01-06

### 🐛 问题修复

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

## [2.28.0] - 2026-01-05

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.27.3] - 2026-01-05

### 🐛 问题修复

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

## [2.27.2] - 2026-01-04

### 🔧 功能改进

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

### 🐛 问题修复

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

## [2.27.1] - 2025-12-31

### 🐛 问题修复

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

## [2.27.0] - 2025-12-30

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.26.0] - 2025-12-29

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.25.1] - 2025-12-26

### 🐛 问题修复

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

## [2.25.0] - 2025-12-25

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.24.0] - 2024-12-24

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.23.5] - 2025-12-24

### 🐛 问题修复

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

## [2.23.4] - 2025-12-23

### 🔧 功能改进

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

## [2.23.3] - 2025-12-23

### 🐛 问题修复

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

## [2.23.2] - 2025-12-23

### 🐛 问题修复

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

## [2.23.0] - 2025-12-22

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.22.0] - 2025-12-20

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.21.0] - 2025-12-19

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.20.1] - 2025-12-19

### 🐛 问题修复

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

## [2.20.0] - 2025-12-19

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.19.2] - 2025-12-16

### 🐛 问题修复

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

## [2.19.1] - 2025-12-15

### 🐛 问题修复

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

## [2.19.0] - 2025-12-12

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.18.0] - 2025-12-11

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.17.0] - 2025-12-10

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.16.0] - 2025-12-09

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.15.1] - 2025-12-08

### 🐛 问题修复

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

## [2.15.0] - 2025-12-08

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.14.1] - 2025-12-07

### 🐛 问题修复

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

## [2.14.0] - 2025-12-05

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.13.0] - 2025-12-04

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.12.0] - 2025-12-03

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.11.0] - 2025-12-02

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.10.1] - 2025-12-01

### 🐛 问题修复

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

## [2.10.0] - 2025-11-28

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.9.0] - 2025-11-26

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.8.6] - 2025-11-26

### 🐛 问题修复

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

## [2.8.5] - 2025-11-26

### 🐛 问题修复

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

## [2.8.4] - 2025-11-25

### 🔧 功能改进

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

## [2.8.3] - 2025-11-25

### 🐛 问题修复

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

## [2.8.2] - 2025-11-25

### 🐛 问题修复

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

## [2.8.1] - 2025-11-24

### 🐛 问题修复

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

## [2.8.0] - 2025-11-24

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.7.0] - 2025-11-21

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.6.1] - 2025-11-19

### 🐛 问题修复

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

## [2.6.0] - 2025-11-19

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.5.0] - 2025-11-18

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.4.0] - 2025-11-17

### ✨ 新功能

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

### 🔧 功能改进

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

## [2.3.1] - 2025-11-14

### 🐛 问题修复

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

## [2.3.0] - 2025-11-14

### ✨ 新功能

- **全局安装**：支持通过 npm 全局安装 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

### ✨ 首次发布

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