窗口这一版被整备成一台仪器:灰阶回到产品自己的色相,活动流成为一条可扫读的执行轨,菜单栏有了状态图标。自 2.5.0 起 25 个提交。
破坏性变更
- 关闭按钮不再总是退出。
[desktop] close_behavior早就可配置、可迁移、可编辑,却没有任何代码读它——quit|background是一个没有兑现的承诺。现在有状态图标时,关闭把窗口收起,图标把它带回来;没有图标时仍然直接退出,因为一个消失了又找不回来的窗口是两者中最坏的结果。要保持旧行为,把close_behavior设为quit,或用tray = "off"关掉图标。
新增
状态图标(菜单栏 / 任务栏)
- 图标说明这台机器上正在发生什么:几轮在等你、几轮在跑、几个后台任务还活着。后台任务是没人会猜到的那一半——一个收起的窗口里跑着 dev server,仍然在替你占着这台机器。
- 菜单可以唤回窗口、就地切换关闭行为、退出。文案跟随机器的语言。
tray = "auto"|"off"(设置 › 桌面)。
活动流成为执行轨
- 左侧那条竖线加粗到 2px,并按类别上色——读是中性、写是琥珀、联网是蓝、委派是青。时间线的结构一直写在那里,只是 1px 的浅灰在屏幕上等于不存在。子代理面板里的子步保持窄沟槽,两级同宽就分不出层。
- 终端输出与 diff 凹进去一档,成为一块面板。此前它们是全屏最占地方的元素,却直接贴在白底上。
- 等你批准的那张卡从流里浮起来,带一层琥珀底;答复过就撤掉。琥珀在这套配色里只说一件事——需要你——而它此前只到按钮为止。
- 每一步的墙钟在头部行右端画成一段横条,右端对齐耗时数字。跨度是三个数量级,所以长度按对数映射;一列卡扫下来,左端参差就是这一轮的耗时分布。
- 每一轮以一条分隔线开始。轮次不编号:回退入口就在那张卡上,没有号需要用眼睛去对。
- 右栏九个等距堆叠的度量块按成本 · 进度 · 环境 · 产出分成四组,此前读起来像一份没填完的表单。
窗口的灰阶回到产品自己的色相
- 整套中性色此前落在色相 255–267,而产品唯一拥有的那个颜色在 75——相差 185 度,这就是它看着像别人家配色的原因。现在是 OKLCH,落在琥珀的色相上,彩度低到仍然是灰,明度逐一沿用被它替换的那个十六进制值。
排队的行可以撤回
- 一轮正在跑时打字,这行会排到下一个工具边界。此前没有任何办法取消:持久条目有 id 也有删除路由,但删除拒绝排队这一个状态,而前端把回执丢掉了——屏幕上那一行没有名字可以用来撤销。
子代理的依赖边携带答案
depends_on此前只排先后、不送内容,于是一对「先调研、再实现」的任务把同一份调研付了两次钱。答案现在随边传递,走ContextRequest.Upstream,不塞进目标文本里——目标必须保持交付判定读的那份原文。- 失败带身份而不是一句话:429 与 400 分开,上下文溢出与被拒绝分开,调用方据此决定要不要带着已完成的节点重发整张图。没有任何判断读消息文本,来源没有署名的错误就报成未分类,而不是猜。
配置文件读不了时,说清楚在哪一行
- 此前设置界面显示的是内建默认值——没人选过的设置,摆在那里像是你的——并且一声不吭,直到某次保存被一句关于列号的解析器报错拒绝。现在它加载最后一份可用快照,并指出坏在哪、怎么修。
修复
- 主题开关的第一次点击什么都不变。循环写死成
auto → light → dark,而「跟随系统」和它当前解析出的那一档在屏幕上长得一模一样:浅色机器上默认的 auto 走到 light,一个像素都不动,读起来就是这个开关坏了。下一档现在从系统当前是什么推出来。 - 一张过大的图片会让会话再也走不下去。视觉模型把超尺寸图片报成「不支持的格式」,而被拒的那条用户消息留在历史里、每轮重发——一个附件结束一整个会话。限制是单边长度而不是总像素或字节(实测 8192×1000 通过,8193×1000 不通过,8000×8000 通过,12MB 的 PNG 通过)。现在超出预算的图片在本地就被拦下,附上尺寸和该怎么办;模型也被告知存在一个它看不到的附件,不会当作什么都没附。
- 重试提示会比它报告的那一轮活得更久。窗口只在文本或推理增量到达时清它,于是首包是工具调用的那一轮,会让「正在重试 1/5」和它的计时器在屏幕上停留整轮,压在一堆跑得好好的调用上面。
- 中文 Windows 上原生界面是英文。语言探测读
REASONIX_LANG和 POSIX 区域变量,而 Windows 一个都不设——CLI 自己的文案、文件夹选择器、状态图标的菜单全部退回英文,旁边的网页视图却读浏览器列表并且答对了。同一个应用的两半对同一个问题给出不同答案。 - 配置损坏的横幅在 Studio 里永远加载不出来。
/config/problem与/config/repair只走 HTTP 到过内核,而窗口按表路由,于是两者都答 index.html。开发代理上是同一个洞。 - 提交被拒时屏幕上出现半句中文加一条 API 路径。内核把「改用 POST /inbox/items」写进了错误详情,而前端对那个编码的文案会把详情原样插进去——内核在告诉客户端该怎么做,客户端把这句话展示给了人。
- 工作区写入租约被后台任务永久持有。dev server 永远不会进入终态,于是下一个会话的第一次写入就排在一个永远不会结束的东西后面,只被告知「安全时会自动继续」。
- 侧栏和顶栏里最弱的一档文字不达 AA(4.03,需要 4.5)。这一档的明度是按中栏那张纸校准的,而它实际上绝大多数落在侧栏、顶栏那层更暗的底上——出现 768 次对 1 次。
- 琥珀色当文字用时,浅色下没有一处达标:在自己的浅色底上 4.07、在侧栏底上 3.91、在浮层上 3.80。这套配色本来就为此准备了两个值——一个用来填充、一个用来阅读——但有 45 处规则用填充值写字。深色下两者本就是同一个值,所以这一项只影响浅色。
macOS 已用 Developer ID 签名并公证,打开时不需要清除隔离属性。Windows 包未签名 —— Authenticode 签名绑定在受保护的 main-v2 上,本分支拿不到它,所以 SmartScreen 会告警:选「更多信息」,再选「仍要运行」。Linux 从 .deb 安装。
三个平台都能自更新:Linux 走自己的包,Windows 运行下一个安装器,macOS 替换自身 bundle。