Repository navigation
v2.35.2
What's Changed
- 补齐 Anthropic Messages、OpenAI Chat/Responses、Gemini 与 Grok 的错误分类和重试边界。 HTTP status、provider
type/code/status、网络 errno 与 SSE error envelope 统一进入同一分类器;408/409/425/429/529、5xx、连接中断与暂时不可用会在既有上限内重试,认证、权限、计费、无效请求、model not found、确定性 TLS 错误与用户取消立即失败。Responses 的标准event: error、顶层error与response.error/failed不再被忽略;Chat/Grok/Gemini/Responses 的流若未收到协议终止标记,不再把半截响应当成功。只有在没有可观察输出时才可重放;text、thinking、signature、tool identity/arguments 或 refusal 一旦出现即禁止重放。SDK/NDJSON 的error字段继续保持合法枚举,原始 producer error 仅保存在非枚举元数据中。 - 登录、刷新与 logout 不再误删或丢失其他 Provider 的凭证。 新 Anthropic 凭证先可靠落盘,再清理旧 API key/OAuth;macOS Keychain 直接 upsert,不再先删旧项,删除失败也不再宣称成功。普通 Anthropic logout 只移除 Anthropic credential 字段,ChatGPT/Codex、Gemini/Antigravity、MCP/plugin secrets、其他 API key、provider profiles、模型/端点与 Web Search 配置全部保留;安全存储的 fallback 只有在确认旧 primary 不会遮蔽新值时才报告成功。
- 凭证文件写入改为 0600 原子替换,Web Search 设置失败会如实显示。 ChatGPT、Antigravity 与明文 secure-storage fallback 都通过同目录临时文件 write+fsync+rename,原子替换失败时不再退回直接截断目标文件。
/search-setting只 patch 当前 source 的 override,写入失败不会乐观翻转复选框或显示成功。 - 修复 SSH 重连与 LSP 启停竞态留下未受管进程。 用户断开后才完成的 SSH reconnect 会立即关闭新进程;同一 LSP server 的并发首次请求共享一次启动。shutdown 开始后拒绝新的 initialize/start,并等待已登记的启动结束后再次 stop,避免清空 manager 后进程才复活。
- Workflow 面板在窄/矮终端中始终保持当前选择可见。 phase 与 agent 列表按焦点分别导航,选中的 agent 不会滑入被裁剪区域,分页提示不再遮住选中行;当前 run tab 会旋转到可见窗口左端并按真实面板宽度裁剪。
Tab/Shift+Tab负责切 pane,[/]切换 run。 - 长期后台任务与会话清理不再无界增长或留下空白 UI。 long-running RemoteAgent 只保留最近 200 条事件,同时继续累计总数、todo 与 rich result;
cleanupPeriodDays递归清理tool-results和subagents,每层都拒绝跟随 symlink。teammate 退出导致详情对象消失时,TeamsDialog 自动返回成员列表,不再留下空白模态层。 - 禁用延迟工具网关的一半不再让全部延迟工具消失。 只有 SearchExtraTools 与 ExecuteExtraTool 同时可用时才延迟 schema;任一端被权限规则移除时,不再宣告不可执行的搜索路径,其余 MCP/延迟工具改为直接随请求发送,保持可调用。
Full Changelog: v2.35.2^...v2.35.2