本版加入会话行双击重命名、没有模型服务也能启动、磁盘空间不足提醒和扩展界面的地图与仪表盘,并整理侧边栏与对话的显示细节。
新增
- 双击侧边栏会话行就地重命名;重命名对话框可以按需自动起标题 (#12977, #11591 by @Guan0923)
- 没有配置任何模型服务也能启动,直接打开连接引导 (#12966)
- 项目或会话所在磁盘快满时发出提醒,默认开启,只提醒不清理文件 (#12960)
- 终端界面向终端报告工作中、等待你、已完成的状态 (#12976)
- 已完成的会话可以在「进行中」列表里多留一段时间,默认关闭 (#12957)
- 侧边栏标出保存在 1.x 里的会话,终端恢复列表标出未查看的会话 (#12405 by @keeyangyy, #12587)
- 用 / 调用技能时显示为紧凑的技能块;工具调用的 JSON 输入带语法着色 (#12972, #12969)
- 变更列表里可以暂存和取消暂存文件 (#12923)
- 应用图标显示未读的任务完成数,并换成扁平的新图标 (#12922 by @KHG420, #12897)
- 新增「清白蓝」「茶绿」配色,主题包可以声明密度和圆角 (#12932 by @SivanCola, #12513 by @f1shsmell)
- 图标栏有新建会话按钮;点标题栏的文件夹标记可以打开项目文件夹 (#12891, #12857, #12288 by @keeyangyy)
- 对话里的文件链接可以在工作台打开;文件菜单可以把文件或文件夹加入对话 (#12910 by @KHG420, #12877)
- 远程机器收进一个可折叠的行,会话树各层级更容易分清 (#12878, #12905)
- 第二次按 Esc 才会停止正在运行的回合 (#12859)
- 扩展界面支持样式字段、可编辑草稿、地图对比仪表盘和非阻塞动作 (#12830, #12854, #12876, #12896)
- 已安装的包可以按功能搜索、显示贡献类型、复制调用方式,安装预览显示解析出的提交 (#12065 by @KHG420, #12117 by @KHG420, #12070 by @KHG420, #12075 by @KHG420, #12098 by @KHG420)
- 可以查看子代理的技能声明,并搜索 MCP 服务器的工具清单 (#12102 by @KHG420, #12085 by @KHG420)
- 发现 WSL 发行版并探测其中一个 (#12595)
- 手机页可以添加到主屏幕;已配对的手机在重启后保留,设置里有开关 (#12591, #12440 by @keeyangyy)
- 发布 Linux arm64 的 .deb 和 .rpm 安装包 (#12914)
- 本机 stdio 的 MCP 服务器能收到工作目录和宿主的只读状态 (#12967)
- MCP 服务器在运行中增删工具并发出通知时,工具目录会自动刷新 (#12138 by @boscocp)
- 可以关闭宿主对已改动回合的检查 (#12860)
- 从右到左的文字块按自身方向显示 (#12118 by @xxoingr)
- 工作台浏览器标签菜单新增「关闭右侧浏览器标签」,可用键盘打开 (#12557 by @SivanCola)
变更
- 版本页只保留最新的几个早期版本,其余折叠到一个按钮后 (#12982)
- 会话列表统一为单行省略,批量选择入口移到「这台机器」的更多菜单 (#12935 by @SivanCola)
- 桌面侧栏统一用分隔条操作;品牌标识统一为正式字标 (#12918 by @SivanCola, #12936 by @SivanCola)
- 计算机操作改用 CUA Driver (#12937)
- 对话里的「执行过程」改成淡色一行,展开后的头部会吸在顶部 (#12954, #12944)
- 标题栏的会话标题紧挨项目名;分支按钮悬停的形状与相邻按钮一致 (#12955, #12971)
- 模型列表只留设置页的一条滚动条,显示别名输入框跟随主题 (#12979)
- 已安装的技能按来源分组 (#12329 by @KHG420)
修复
- 压缩拿不到摘要时,被折叠的用户消息不再整段消失 (#12963)
- 上下文占用的显示改为和触发压缩时用的数字一致,不再比服务商回报的偏小 (#12991, #12988 fixed in #12991)
- Windows 上点任务完成通知会把窗口带到前台,点击过程写入日志 (#12907, #12956)
- 关闭浏览器标签时不再读取内核不会发送的内容 (#12886)
- 你已经开始作答的提问不再超时跳过 (#12884 by @par73e)
- 运行时重建或回合结束事件丢失后,仍保留正在进行的回合 (#11735 by @jf200s)
- 保存设置的结果区分成功、未应用和失败,失败后可以重试 (#12350 by @KHG420)
- 撤销入口从后端恢复,撤销失效状态会保存下来 (#11589 by @Guan0923)
- 工作台里未保存的文件草稿会被保留 (#12898 by @XTLine)
- 切换模型设置后上下文占用立即刷新 (#12871 by @xlyy1)
- 费用按钱包的币种显示,文件夹选择器能列出隐藏文件夹 (#12874)
- Windows 上 Git Bash 探测挂起时重试一次,并正确显示回退用的终端路径 (#12887)
- 只发 /技能名 时,历史里记录的是你输入的原文 (#12890)
- MCP 工具重名会被拒绝,原始标识在各条路径里保持一致 (#12889 by @XTLine, #12893 by @XTLine, #12892 by @XTLine)
- 子代理状态帧在客户端落后时不再丢失 (#12888)
- 文件预览会先检查目标是否允许访问,并先经过 PreToolUse 钩子 (#12115 by @Guan0923)
- 记忆保存失败时会撤回,迁移过的记忆再次修改时会修复索引 (#12938 by @chuiwenwei, #12939 by @chuiwenwei, #12940 by @chuiwenwei)
贡献者
感谢本版本的贡献者:@Guan0923、@keeyangyy、@KHG420、@SivanCola、@f1shsmell、@boscocp、@xxoingr、@par73e、@jf200s、@XTLine、@xlyy1、@chuiwenwei
What's Changed
- fix(studio): keep the sidebar toggle clickable in the desktop shell by @esengine in #12855
- feat(studio): open the project folder from the chrome folder mark by @esengine in #12857
- feat(studio): open the project folder from the chrome folder mark by @keeyangyy in #12288
- feat(studio): ask for a second Escape before stopping a running turn by @esengine in #12859
- feat(config): let the user turn off the checks the host asks of a changed turn by @esengine in #12860
- fix(studio): centre dialogs on the window rather than below the title bar by @esengine in #12863
- fix(studio): end the workbench card's tab strip on the pane's tab-row line by @esengine in #12864
- fix(studio): stop the sidebar head leaving a blank strip under the toggle by @esengine in #12856
- fix(studio): one line per project in the session tree by @esengine in #12865
- fix(desktop): give the window frame the app's theme so Windows draws no light border by @esengine in #12869
- fix(studio): value a turn in the wallet's currency, and list hidden folders in the folder picker by @esengine in #12874
- perf(studio): tween the workbench width on the pane, not on the whole app by @esengine in #12875
- feat(studio): gather remote machines under one foldable row in the sidebar by @esengine in #12878
- feat(tools): show what a waited-on job writes while wait runs by @esengine in #12882
- feat(studio): add a file or folder to the conversation from the Files menu by @esengine in #12877
- fix(studio): close a browser tab without reading a body the kernel never sends by @esengine in #12886
- fix(sandbox): retry a hung Git Bash probe once and print the fallback shell path unescaped by @esengine in #12887
- fix(studio): move one highlight between the pane's view tabs by @esengine in #12870
- fix(control): record the typed text as raw input for a bare skill invocation by @esengine in #12890
- feat(studio): start a new session from its own button on the icon rail by @esengine in #12891
- feat(feedback): reopen the issue when a reporter replies to a fixed report by @esengine in #12895
- feat(studio): a flat, friendlier app icon, and the sidebar shows it by @esengine in #12897
- fix(studio): preserve unsaved workbench file drafts by @XTLine in #12898
- fix(studio): refresh context after model settings change by @xlyy1 in #12871
- feat(studio): tell the session tree's levels apart and make its row actions findable by @esengine in #12905
- fix(notify): hand the foreground right to the shell on a toast click, and stop discarding send failures by @esengine in #12907
- fix(serve): keep sub-agent status frames when a client falls behind by @esengine in #12888
- fix(studio): end a machine row's actions on the same edge as a project row's by @esengine in #12908
- fix(mcp): preserve cached raw identity during lazy dispatch by @XTLine in #12892
- fix(capability): preserve raw MCP identities across runtime paths by @XTLine in #12893
- fix(mcp): reject colliding model-visible tool names by @XTLine in #12889
- fix(studio): avoid unchanged workbench polling renders by @XTLine in #12904
- feat(studio): stage and unstage changes from the changes list by @esengine in #12923
- feat(release): ship Studio for Linux arm64 (.deb and .rpm) by @esengine in #12914
- feat(studio): badge unread task completions on the application icon by @KHG420 in #12922
- feat(theme): ship a neutral white and blue pack by @esengine in #12928
- test(control): bound inbox and edit-persist waits by testenv.Budget by @xxoingr in #12934
- test(storage): give a stalled walk room to reach its first entry by @xxoingr in #12930
- test(plugin): wait for the handshake's cache write before changing a schema by @xxoingr in #12929
- feat(theme): add Clear Blue and Tea Green palettes / 新增清白蓝与茶绿内置配色 by @SivanCola in #12932
- fix(studio): compact session rows and relocate batch selection / 紧凑会话列表并迁移批量选择入口 by @SivanCola in #12935
- feat(styles): give layout spacing an eight-step scale by @f1shsmell in #12407
- fix(configbackup): preserve distinct native hook identities by @XTLine in #12899
- fix(studio): keep an open activity group's header at the top while it scrolls by @esengine in #12944
- fix(memory): withdraw a save whose index publication fails by @chuiwenwei in #12938
- fix(memory): repair the index when a migrated fact is revisited by @chuiwenwei in #12939
- fix(memory): audit the recall a carried note suppresses by @chuiwenwei in #12940
- test(installsource): cover hostile skill paths in discovery warnings end to end by @xxoingr in #12569
- revert(theme): drop the unreleased Neutral Blue pack in favour of Clear Blue by @esengine in #12947
- feat(studio): unify official brand marks / 四处品牌区统一到正式字标与产品符号 by @SivanCola in #12936
- fix(studio): use the divider as the desktop sidebar control / 桌面侧栏统一使用分隔条操作 by @SivanCola in #12918
- test(studio): strengthen Linux package verification / 增强 Linux 包与发包验证 by @SivanCola in #12921
- test(acp): bound drainPrompt's idle wait by the hang budget by @xxoingr in #12949
- test(gitcommit): stage a literal glob name Windows can create by @xxoingr in #12946
- test(studio): await HTML preview selection / 等待 HTML 预览选中状态落定 by @SivanCola in #12952
- fix(studio): quiet the activity group so the reply stands out by @esengine in #12954
- fix(notify): log the toast click path end to end by @esengine in #12956
- feat(notify): warn when the workspace or state volume is nearly full by @esengine in #12960
- feat(studio): keep finished sessions in the Running list for a chosen time (off by default) by @esengine in #12957
- fix(studio): keep the session title beside the project name in the title bar by @esengine in #12955
- feat(config): start with no provider and open the connection guide by @esengine in #12966
- fix(studio): keep an engaged ask from timing out by @par73e in #12884
- fix(e2ebench): bind SFT exports to graded run provenance by @par73e in #12885
- fix(studio): submit only current extension form fields by @KHG420 in #12214
- feat(plugin): tell local stdio MCP servers the workspace and the host's read-only posture by @esengine in #12967
- feat(studio): migrate computer use to CUA Driver by @esengine in #12937
- fix(compaction): carry the user's words through a degraded fold and cap the summarizer input by @esengine in #12963
- fix(studio): keep failed extension forms editable by @KHG420 in #12211
- feat(tui): mark unviewed sessions in the resume picker and clear on view by @esengine in #12587
- feat(studio): let the phone page be added to the home screen by @esengine in #12591
- docs(release): one release-note fragment per pull request by @esengine in #12968
- feat(serve): keep paired phones across restarts, with a settings switch by @keeyangyy in #12440
- fix(studio): give the branch button the same hover shape as its neighbours by @esengine in #12971
- feat(studio): open conversation file links in the workbench by @KHG420 in #12910
- feat(studio): search MCP server tool inventories by @KHG420 in #12085
- feat(studio): show a skill invocation as a compact chip in the conversation by @esengine in #12972
- feat(studio): recover extension surfaces after reload (RFC #12584 P0) by @esengine in #12825
- fix: unbreak repolint and the release-notes script tests on studio by @esengine in #12973
- feat(tui): tell the terminal what the session is doing (OSC 7501) by @esengine in #12976
- feat(studio): double-click a session row to rename it by @esengine in #12977
- test(plugin): pin MCP OAuth credentials to the recorded authorization server by @esengine in #12978
- fix(studio): one scrollbar on the provider model list, and a themed alias field by @esengine in #12979
- feat(studio): mark sessions kept in the 1.x store by @keeyangyy in #12405
- feat(wsl): discover WSL distributions and probe one (RFC #12225, slice 1) by @esengine in #12595
- test(studio): wait for the restore receipt instead of reading it at once by @esengine in #12980
- fix(perf): open settings through its button in the model-rows guard by @esengine in #12981
- feat(studio): copy canonical skill invocations from Settings by @KHG420 in #12070
- feat(studio): colour the JSON input of a tool call by @esengine in #12969
- fix(studio): 从后端恢复撤销入口并持久化撤销失效状态 by @Guan0923 in #11589
- feat(studio): keep the newest earlier releases on the versions page and fold the rest by @esengine in #12982
- feat(studio): show resolved plugin commits in install previews by @KHG420 in #12098
- feat(studio): inspect subagent skill declarations by @KHG420 in #12102
- fix(studio): keep prompt-refine help reachable and shortcut intact by @KHG420 in #12314
- feat(studio): add styled native fields and choice cards (RFC #12584 P1) by @esengine in #12830
- test(studio): expect the copy button first in a skill row's tab order by @esengine in #12983
- fix(studio): distinguish settings save outcomes and allow retry by @KHG420 in #12350
- refactor(studio): share the saved-not-applied predicate and the save note by @esengine in #12984
- feat(studio): add editable drafts and styled text previews by @esengine in #12854
- feat(studio): add nonblocking surface actions (RFC #12584 P2) by @esengine in #12876
- test(studio): wait for the lazily loaded surface field instead of reading it at once by @esengine in #12986
- fix(studio): make chart values discoverable along dense lines by @KHG420 in #12313
- fix(studio): align advanced appearance with settings cards by @KHG420 in #12323
- fix(session): keep the live turn through rebuilds and lost turn ends by @jf200s in #11735
- feat(studio): render right-to-left text blocks in their own direction by @xxoingr in #12118
- feat(studio): copy package invocations and archive paths by @KHG420 in #12075
- fix(studio): group installed skills by source by @KHG420 in #12329
- feat(studio): identify installed package contribution kinds by @KHG420 in #12117
- feat(theme): read the density and corner recipes a pack declares by @f1shsmell in #12513
- feat(studio): add a rename dialog with on-demand session auto-naming by @Guan0923 in #11591
- feat(studio): add maps, comparisons and dashboards by @esengine in #12896
- feat(studio): find installed packages by contributed capabilities by @KHG420 in #12065
- feat(studio): use controller close in extracted tab menus / 标签菜单适配控制器关闭路径 by @SivanCola in #12557
- fix(agent): gate file previews on target access and PreToolUse by @Guan0923 in #12115
- test(desktop): create the CUA fixture socket at 0600 instead of chmod-ing it afterwards by @esengine in #12987
- test(agent): let the target-access wiring walk skip files that vanish mid-walk by @esengine in #12989
- feat(plugin): refresh an MCP catalog on tools/list_changed / 收到 tools/list_changed 后刷新工具目录 by @boscocp in #12138
- docs(release): Studio 2.39.0 notes by @esengine in #12990
- fix(agent): the context gauge reads the provider-reported size the fold trigger acts on by @esengine in #12991
- docs(release): add the last two changes to the 2.39.0 notes by @esengine in #12992
Full Changelog: studio-v2.38.0...studio-v2.39.0
macOS 已用 Developer ID 签名并公证,打开时不需要清除隔离属性。Windows 的窗口、内核与安装器都经 Certum 代码签名证书做了 Authenticode 签名。Linux Debian 系从 .deb 安装,Fedora、RHEL、openSUSE 等从 .rpm 安装(sudo dnf install ./ReasonixStudio-linux-amd64.rpm)。x86_64 用文件名带 amd64 的包,aarch64(统信 UOS、麒麟等)用带 arm64 的包。
三个平台都能自更新:Linux 的 .deb 走自己的包(.rpm 的自更新尚未提供,请手动下载新包),Windows 运行下一个安装器,macOS 替换自身 bundle。