# 🚀 CodeBuddy Code v2.102.0 发布

## 📦 版本信息

| 组件 | 版本 |
|------|------|
| CodeBuddy Code CLI | v2.102.0 |
| Agent SDK JS | v0.3.164 |
| Agent SDK Python | v0.3.163 |

## ✨ 新功能

### 后台任务完成主动推送

通过 `run_in_background` 启动的 bash / powershell 任务，在完成、失败或被终止时会自动以 `<task-notification>` 形式注入对话流。模型在下一轮即可感知任务状态变化，无需再循环调用 `TaskOutput` / `BashOutput` 进行轮询，大幅减少无意义的 turn 占用。

## 🔧 改进优化

- **网页获取并发竞争策略**：WebFetch 工具由串行降级改为并发竞争模式，本地 fetch（30s 超时）与远端 API（20s 超时）并发启动，远端胜出立即取消本地请求；远端失败则直接降级到已并发启动的本地结果。最坏总耗时从 `20s + 30s` 降为 `max(20s, 本地实际耗时)`，显著提升网页抓取响应速度。
- **网页获取体积限制与缓存**：远端 API 限制最大返回长度 100K 字符，超过 15K 字符自动触发 AI 摘要降低上下文占用；fetch 结果缓存 15 分钟，命中缓存直接复用跳过网络请求。
- **网页获取可观测性**：新增 `webfetch.complete` / `webfetch.failed` 结构化埋点，包含来源（cache / api / local）、各分支耗时、URL host/path、是否触发摘要等信息，便于诊断与告警。
- **后台任务工具描述刷新**：bash / powershell 工具描述明确告知"完成会自动收到通知，不要 sleep / poll loop"，引导模型避免无意义的轮询。
- **subagent 调用链路追踪**：chat_message_send / response / tool_action 等事件新增 `parentConversationId`，与 chat_request_send 对齐；chat_message_status 补全 `rootRequestId`、`agentName`、`agentType` 等关联字段，支持 subagent / team 调用链端到端追踪。
- **traceId 全链路打通**：ACP agent 生成 traceId 贯穿 Galileo session / tool 上报，便于端到端追踪单次对话请求；trace 资源属性中注入用户 ID，提升多用户环境下的日志关联能力。
- **辅助功能埋点过滤**：prompt_suggestion、conversation_topic、context_compact 等辅助功能不再上报 chat_message_send / response，减少埋点噪声。

## 🐛 问题修复

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

## 📝 文档更新

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