Reasonix Studio v2.14.0
Pre-release
Pre-release
·
1543 commits
to main-v2
since this release
本版的主线是**「这个界面能做什么」从一份名单变成一个可以验证的集合**:每个可交互的控件写上身份,一套读源码结构的普查判定哪些输入会写宿主,其中十六条不变量在 CI 里拦着——一个被证明会写、却没有名字的输入不能进主干。同期把「一个回合」收成一条边界:回合从哪条消息开始、一次调用是谁要的、一份轨迹覆盖了会话的多少,都由宿主记录,而不是留给读者按位置去猜。压缩这一侧则是先有账单再有决定:一次折叠报的是它真正发生的调用,/compact 不再因为问了两遍就买两次摘要。自 2.13.0 起 89 个提交。
升级路径:无需人工步骤。三平台照旧自更新——Linux 走 .deb,Windows 运行下一个安装器,macOS 替换自身 bundle。
新增
这个界面能做什么,是一个可以验证的集合
- 一百三十二个动作 id,一份注册表。身份是产品自己的:一个 id 写成
<界面>.<意图>,在控件上写一次、在actions.ts里再写一次,于是两边可以不一致并且会被抓住——共用一个常量只会让检查拿一个值和它自己比。属性只承载归属,是哪一条记录由data-target说,给的是哪个答案由data-value说,所以一行渲染七十次仍然是一份契约,「取消」永远不会变成一个身份。 - 一套普查读结构,不读措辞。426 个交互根,每一条判定要么带着一个正面证据,要么带着挡住它的那条开放边。十六条不变量在 CI 里跑,
UNDECLARED_MUTATION == 0是它存在的理由,并且已经在真实缺陷下重新亮红过三次——一个藏住 prop 链的 memo 别名、一个藏住另一条的 JSX 展开,都不是装饰性的绿灯。 - 一次写入需要一个有人刻意做出的手势。重命名会话、移动压缩起点、重命名面板此前只在失焦时保存,而失焦会因为没人瞄准的原因触发——点到别处、按 Tab、窗口消失、元素被移除。回车现在提交并带上身份;失焦仍然保存,因为点开确实是一种回答。
- 什么东西证明一个值是 Promise,在
.then有意义之前就要回答。只有源码声明的Promise<T>算数:可能不是的联合类型、这里跟不下去的别名、PromiseLike、any,各自都什么都不说明。落在已证明的 Promise 上的续延才是一条执行边,并且是延后的——请求回来时才写的处理器,不是现在就写的那个。 - 按下要有回答,而回答它的是标记说它是什么。改之前先量:页面上 42 个接受指针的控件里,21 个在按下时什么都不显示。原因是归属而不是意图——同一条按下规则列了九个类名,在降低动效的块里有第二份拷贝,更上面还有第三份拼写不同的。归属现在来自标记本身。
一个回合有一条边界
- 一个回合此前有几次模型运行就有几个开始。协调器在计划前开一个,执行器在干活前开另一个,回合中批准的计划再开第三个。这条路线是生产可达的:当计划方断定无需改动,执行器根本不会运行。
- 回合开始时说出它是关于哪条消息的。此前
turn_started什么都不带,自己生成用户行的客户端只能靠位置配对、靠提示词文本确认——两条一样的提示词只能靠运气分开,而一条插在中间的引导会让它后面每一次配对都错位。 - 一次调用带着是谁要的。模型发出的、宿主替它铸出的(给批准的计划铺清单、推进一个步骤、关掉一个目标、把一次委派展开成条目)、供应商在自己那侧跑的,此前共用一个 id 空间和一个形状。读真实语料:51 个候选执行片段里有 5 个的头部是
plan-seed——宿主自己的记账——任何按步骤计数的折叠都会把它算到模型头上。 - 重开的会话能把卡片重建出来。记录里没有流式增量,回放只有一帧落定的
message,而此前的归约器只会给流已经打开的卡片封口,于是重开一个会话会丢掉计划方写过的每一个回答。 - 一份轨迹说出它覆盖了会话的多少。
/trajectory此前回一个裸数组,三种不同的状态给出同一个空数组:没有记录的运行、被容量上限停止追加的日志、确实没产生帧的会话。
压缩:先有账单,再有决定
- 一次折叠的回执覆盖它发出的每一次摘要调用。此前读的是它决定留下的那个答案的用量;一次需要覆盖修复的折叠会计费两次而只留一次,于是报出来的从来不是这笔交易。
- 请求整理上下文不等于请求为它付钱。
/compact此前设一个Force,而这个布尔在做五件事,其中只有两件是人在请求时的意思。另外三件是为什么把命令敲两遍会买到两份摘要——而这台机器自己的历史里,自动压缩每五千次调用触发一次,/compact则定义上每次都触发。 - 丢了事实的摘要是补全,不是再买一次。覆盖修复此前靠把同一次折叠再总结一遍来回答"摘要忘了一个改过的文件";那些事实是宿主自己的——回执已经证明哪些路径被写过、哪些命令失败过。
- 压缩不再把本地原始工具输出提升进摘要。
计费、上下文与运行时事实
- 一个会话说出它计费的部分里有多少带着价格。此前是一个布尔,而一个聚合有四个答案要给:什么都没计费的、每一轮都定了价的、定了一部分的、一分都没定的——第一个和最后一个还合计出同一个数字。
- 表盘倒数到折叠点,不是倒数到窗口。决定何时折叠的是两个界限里较低的那个,而画在屏幕上的是窗口:一个 1M 的会话在维护真正发生的那一刻画出一条 16% 的条。
- 上下文与缓存显示的是决定,不是重复的遥测。用量此前画两次——一次对折叠点,一次对窗口——393 次采样渲染中从未不一致,因为它本来就是一个数。现在画一次,每个上限各占一行并各自说明自己的分母。
- 运行时事实在有话要说的时候才出现。一次干净运行的采样里,100% 的样本都在显示"失败步数 0、外部请求 0、子代理数量 0"以及两个只用来说自己没有内容的块。
- 吞吐按墙钟过期,而不是被墙钟重新推导。此前每秒读四次,无论有没有 token 到达:样本从窗口前端老去而被除的跨度不动,于是读数沿着一条平滑的斜坡下滑——采样到一次运行里连续十七个读数从 87 掉到 2 tok/s,其间模型什么都没产出。
- 工具派生的运行时事实来自执行,不来自卡片。
设置与外观
- 设置能回答关于它自己的两个问题:一个设置在哪里找,以及改动它要付什么代价。此前找一个设置意味着已经知道它归在十四个页面的哪一个下;而改动的后果是整张表最上面的一句话,那句话替三个答案里的两个说了话。
- 一个设置说出它归谁所有,而不只是它何时生效。作用域是读每个控件背后的端点得到的,不是从它恰好归档在哪一页推断的——仅模型页一页就同时存在按供应商条目存的、按整机存的、和哪里都不存的值。
- 外观页先打开被看的那部分,其余折起来。这一页此前不像控制台是因为它一次全到,而且顺序不是谁选的:语言和窗口在前,明暗和配色在最后。
- 一次拒绝在发生点击的那一页上被说出来。对着活内核点完 121 个非破坏性按钮,逐个问屏幕是否给了回答,只有一个没有:会话页上的「创建隔离副本」。这次清扫顺带拆掉两处拿句子当状态用的代码——一行技能靠比较渲染出来的「调不到」决定自己的标记,一个会话归约器靠比较「等待工作区」来知道自己在离开哪个状态。
- 设置页现在按需加载,工作区的次要部分同样推迟。
一份机器列表
- 导航栏画的是一棵三层的树:机器、工作区、会话,而不是「工作区」和「远程」两块各有各的标题、各有各的添加按钮、各有各对「一行是什么」的理解。本地此前跳过机器那一层,因为那台机器是不言自明的——现在它是列表里的第一台。
- 导航栏的搜索问的是整份列表,不是当前展开的那一段。
- 远程会话的标题在远端内核写下它的时候到达。远端内核在第一个回合结束时给会话命名,而此前没有任何东西在那之后重读过那本册子。
供应商
- DeepSeek 的 flash 视觉能力在 Studio 各处被识别。
- 未列出的供应商模型可以验证后使用。
- OpenAI 侧被取消的流有了清理边界。
修复
grep的斜杠通配以搜索目标为根,不是以工作区为根。- 回合运行时,实心的那个按钮是停止它的那个。
- 标题栏的控件重新回到窗口拖拽区之外。
- 窗口里的内核说配置的那种语言。
- 一张卡片在回合中到达时,转录不再窜动。
- 菜单标记当前行的方式与导航栏一致;会话行的操作是安静而不是缺席。
- 一笔已知的金额不会被印成零会印出的那个字符串。
- 已经从内核拿到的答案会到达设置的读取方。
- 动效有原因,而挂载不是原因之一。
门禁与工具
- 普查跟进动态 import。
@babel/parser8 把import()解析成ImportExpression,而普查是按名字把它当调用读的,那条分支从未命中;设置页改为按需加载之后,整棵设置子树退出产品可达图,75 个动作被记成没有生产根。 - 输入框的粘贴声明了它的身份。粘贴文件走
attach → upload → port.attach,是一次证据确凿的宿主写入。 make check会打开 git 尚未被告知的文件。- 发布流水线从产生产物的作业取件。
- 这一版的界面文案、注释与守卫输出统一为书面中文,注释统一为英文。
macOS 已用 Developer ID 签名并公证,打开时不需要清除隔离属性。Windows 的窗口、内核与安装器都经 SignPath 做了 Authenticode 签名。Linux 从 .deb 安装。
三个平台都能自更新:Linux 走自己的包,Windows 运行下一个安装器,macOS 替换自身 bundle。