远程工作区:一台通过 SSH 连接的机器,其上的文件夹与会话像本地的一样出现在侧边栏。自 2.4.0 起 41 个提交。
破坏性变更
- 思考档位按 endpoint 判定,不再按模型名。中转端点不再被提供厂商专属档位(
max、xhigh);超出该 API 文档词表的档位降级到最深的标准档,而不是被拒绝。声明了supported_efforts的端点仍以自己的声明为准。此前一个中转的 deepseek-v4-flash 每轮返回field ReasoningEffort invalid, should be one of: low, medium, high, xhigh, none,且按继续会重发同一设置,该轮无法自行恢复。
新增
远程工作区(侧边栏 › 主机)
- 主机是一个分区而不是前缀:同一台机器上的所有工作区共享一条 SSH 连接,链接断开时整个分区一起变灰。本地工作区不带标记,所以带标记本身就是信号;同样的标记出现在 pane 标签与面包屑上,因为命令落在焦点标签指向的那台机器上。
- 连接后的主机列出自己有什么:其上的文件夹与其中的会话,通过已在该机器上打开的 pane 读取,不另开连接、不另起进程。恢复一个远程会话与恢复本地会话是同一个动作。未连接的主机只保留一行,这一行就是连接按钮。
- 每个 pane 在远端开自己的 runtime。此前两个 pane 打开同一个远程工作区会共用一份对话记录——一份记录,两个写入者,两条流交错。
- 冷启动会在远端安装内核,安装按步骤逐条显示,而不是一个分不清「正在下载」与「卡住了」的转圈。
- 主机簿可以在窗口里编辑(设置 › 主机),此前只能从 CLI 添加。主机簿属于使用者本人,不属于添加时恰好打开的那个文件夹。
~/.ssh/config里已有、主机簿里还没有的别名,可一键导入。 - 首次连接会停下来发问:不在 known_hosts 中的机器弹出指纹确认,带口令的私钥弹出口令输入。指纹换行显示而不省略中段——中段被省略的指纹无法与任何东西比对;焦点默认落在「取消」上。
- Windows 可以作为远程主机。此前 SSH 之下的一切都假设 POSIX shell,现在收敛到一个接口:用哪个 shell、路径怎么拼写、进程怎么启动与再找到。已对真实 Windows 主机端到端验证:安装、启动、跨 SSH 会话存活、经转发访问
/status与/tree、停止。 - SSH agent 在 Windows 上通过 OpenSSH 服务固定名字的命名管道使用;
IdentitiesOnly的筛选此前整个在!windows编译标签内,现在三平台共用。 - 主机密钥变更、指纹被拒、凭据被拒各自带编码,密钥变更携带 known_hosts 中冲突的那一条记录(精确到行)。不能承载内核的远端会说明是哪一半失败,而不是以 502 抵达窗口、暗示链路有问题。
- 远程会话列表与本地一样上限 30 条,主机可折叠。
- Windows 路径的两种拼写(SFTP 答复的
/C:/Users/...与其内核接受的C:\Users\...)由平台层转换。
任务等待可以说明在等什么
wait新增until_output_matches(RE2 正则):任务写出匹配内容时立即返回。一个跑一小时的任务因此只花一轮,而不是每看一眼一轮,并且仍会被真正重要的那一行唤醒。
性能
-
自动保存不再重扫已经读过的轮次。每次保存都要遍历整份记录以生成侧栏预览行与用户轮次计数,其中两处模式是关于单轮长度的二次复杂度。
消息数 之前 之后 1,000 70.0ms 35.4ms 5,000 196.1ms 119.3ms 20,000 652.3ms 432.6ms -
工具描述减少 256 token。三个最大的描述都以逐字段复述自己的 schema 结尾,其中一处复述已经与 schema 不一致。升级后各会话首次请求冷启动一次缓存,之后恢复。
-
只读的能力调用可以同批并行。此前排除靠一张六个工具名的表,而这张表把「不需要审批」和「不能与别的调用同批」当成了同一个问题。现在每个工具自己声明,多个只读
use_capability调用同批发出,而不是一个接一个。
修复
- 网关答 200 却什么都没送——把流开着足够久以显得健康,然后不带任何内容结束——被当作模型给出了空答案:耗掉三次重试,并在最后指认错了责任方。现在按上游中断处理,由请求层重试并以实际发生的事情结束。只带用量记录的流仍算模型作答,保留该轮重试。
- 同一条通知重复占屏,现在折叠成一行加计数。通知在传输中携带的编码此前被会话状态丢弃,本版起有对应文案的通知按读者的语言显示,不认识的编码也仍可读。
- 正在工作的后台任务被报成「可能卡住」。把输出重定向到文件的任务在自己的流上是沉默的,看门狗在十五分钟后据此判定停滞——而它正在下载一百兆。
wait现在说明任务已运行多久、以及是否有任何输出到达过这一侧,并给出更长的超时而不是又一次短轮询。 - 历史搜索把主机注入的块当成用户输入来索引。十一种块中只剥离了五种,于是搜一个路径会匹配到每个会话的每一轮,搜索预览显示的是块而不是消息。索引会在本版首次打开时重建。
- 界面缩放后,上下文分解气泡跑出窗口右缘,且缩放越小越靠左。
- 局域网内的机器从窗口一律不可达,而 ping 与 CLI 都能到达:macOS 只对在 Info.plist 里声明了用途的应用授予本地网络权限,两个包都没有声明,所以这个授权请求从未被提出过——没有弹窗,隐私列表里也没有条目。开发包另有一处:指向源码树的符号链接使
codesign --strict失败,而 macOS 无法验证的应用拿不到稳定身份,也就挂不住这条授权。 - 切换到另一台机器上的 pane 会把本窗口重绘成那台机器的主题。外观属于窗口,此前是跟着焦点 pane 读写的,而远程内核有自己的一份。
- 远程 pane 的对话没有回声:事件流没有带 runtime 前缀,于是 pane 把轮次发给自己开的 runtime,却在听对方的默认 runtime——一切正常,什么也不回来。
- 窗口不再把自己当作可上传到远端的 CLI。远端会收到一个 Wails 应用、探测它的 serve 命令、然后拒绝——在付完传输代价之后。现在退回 npm 安装,再退回带校验的发布包下载。
macOS 已用 Developer ID 签名并公证,打开时不需要清除隔离属性。Windows 包未签名 —— Authenticode 签名绑定在受保护的 main-v2 上,本分支拿不到它,所以 SmartScreen 会告警:选「更多信息」,再选「仍要运行」。Linux 从 .deb 安装。
三个平台都能自更新:Linux 走自己的包,Windows 运行下一个安装器,macOS 替换自身 bundle。