本版让终端能把 diff 排成可读的差异视图,市场可以在明确信任后安装未固定版本的已批准包,更新优先走镜像并支持续传,并补上模型服务空闲超时。
新增
- 终端里的 diff 或 patch 代码块、以及整段输出就是 diff 的命令结果,会渲染成差异视图,也可用
[cli].diff_formatter指定外部格式化命令 (#11201 by @BuGlessRB) - 可以为每个模型服务单独设置流空闲超时
idle_timeout_seconds,超时后中止等待 (#11258 by @BuGlessRB) - 市场里已批准但未固定版本的包,在你明确表示信任后可以安装 (#11317 by @esengine)
- 市场优先展示可安装的条目,并标出已安装的能力 (#11292 by @KHG420)
- 新会话默认使用的沙盒与终端姿态取决于沙盒声明和文件夹信任 (#11298 by @esengine, #11256 by @esengine)
- 对话内查找改为 Ctrl+F 能真正触发 (#11236 by @esengine)
- 可以在「记住的规则」里撤销项目规则 (#11177 by @KHG420)
- 可以在模型服务设置里给服务改显示名,不影响它的标识和已有会话 (023f20e)
- 技能名称支持 Unicode,MCP 标识不受影响 (42e9c7c)
变更
- 更新下载优先走镜像,镜像不可用时才回退 GitHub (#11322 by @esengine)
- 完整安装包下载可以断点续传,增量更新文件放在另一个磁盘卷时也能正常使用 (#11325 by @esengine)
- 市场信任徽章的文案更清楚,翻页不再出现重复条目 (#11335 by @KHG420, #11337 by @KHG420)
- 终端里以 ! 开头的命令只在本地运行,不再触发一轮模型对话 (#11262 by @esengine)
修复
- 打开 1.x 写的会话不再丢掉它的上下文压缩摘要 (ac30722)
- 命令实时进度中的非 UTF-8 输出(如 Windows 中文代码页)不再乱码 (#11327 by @KHG420)
- 不带终端直接运行
reasonix时退出码为 0,与 1.x 一致 (#11278 by @esengine) - 无头模式在模型正常结束时退出码为 0,结论写进结果里 (#11285 by @esengine)
- 无头模式恢复 1.x 的 stream-json 与 events-jsonl 行格式 (#11277 by @esengine)
- npm 包来源可以使用精确的语义化版本固定 (#11351 by @esengine)
- 模型服务拒绝连接时立即报错,不再空等 (c906f3c)
- 无头运行的错误输出保持干净,诊断信息放到
run --debug后面 (a062240) - 从 macOS 程序坞点击图标可以恢复已关闭的窗口 (#11221 by @SivanCola)
- 回复可以从它自己所在的轮次重新生成 (#11279)
- 过期的提问卡片会在恢复历史前清掉 (465d7e7)
- 空草稿不再显示发送箭头 (78a6794)
- 项目菜单里过长的工作区路径会自动换行 (d1a2786)
- 保存用户配置时只改写你改过的键,并保留项目服务商的来源 (3e56072, 162ee3e)
- Windows 命令行过长时会明确指出长度限制 (9f789f9)
- 终端每一行都按终端的宽度完整绘制 (34ef4b0)
- 医生检查不再误报缺少 use_capability (fb7e7c3)
贡献者
感谢本版本的贡献者:@BuGlessRB、@esengine、@KHG420、@SivanCola
What's Changed
- feat(studio): render the await_user notice's need as markdown by @esengine in #11224
- fix(agent): send choices through ask, keep await_user's need to one line by @esengine in #11223
- fix(studio): restore window on macOS Dock activation / 修复 Dock 点击无法唤回 Studio by @SivanCola in #11221
- fix(studio): keep the relayed event stream alive and the tab on its pane by @esengine in #11228
- fix(sessionstore): keep the legacy import marker unstamped when a copy fails by @chuiwenwei in #11227
- feat(studio): support Unicode skill names by @KHG420 in #11206
- fix(studio): format ask prompt text by @KHG420 in #11225
- feat(studio): find in a conversation that Ctrl+F actually reaches by @esengine in #11236
- test(sessionstore): encode the import-marker fixture's workspace as JSON by @esengine in #11234
- fix(session): keep 1.x context sidecars and carry their summary forward by @esengine in #11231
- fix(bash): name the Windows command-line limit instead of "filename too long" (studio) by @esengine in #11233
- feat(providers): rename a model service without changing its identity by @esengine in #11243
- test(goal): cover whitespace validation without schema changes / 补充目标参数空白校验测试 by @SivanCola in #11240
- fix(remote): reconnect the phone silently across relay leases and desktop reconnects by @esengine in #11248
- fix(tui): Enter runs a command typed in full instead of completing it by @esengine in #11260
- fix(tui): the terminal's own words go through i18n by @esengine in #11265
- feat(cli): default the terminal posture from the sandbox claim and folder trust by @esengine in #11256
- fix(shell): defensive PowerShell prologue, UTF-8 redirects on 5.1, Store pwsh detection by @esengine in #11252
- fix(e2ebench): keep MemoryBench's memory-off arm free of the seeded store by @esengine in #11251
- fix(studio): keep reply action menus whole near the transcript's edges by @esengine in #11266
- fix(tui): refuse slash commands nothing answers instead of sending them to the model by @esengine in #11259
- fix(tui): /rewind picks a turn, /clear asks first, Esc clears and Esc Esc rewinds by @esengine in #11261
- fix(tui): /help, /compact's card and /context's breakdown as 1.x shows them by @esengine in #11263
- fix(tui): keep task bookkeeping and host notes out of the transcript by @esengine in #11264
- fix(grep): preserve search roots across symlinks and sandboxes / 修复符号链接与沙箱下的 grep 搜索范围 by @SivanCola in #11244
- feat(studio): show remembered project rules and default skills to user scope by @KHG420 in #11177
- fix(tui): a ! command runs locally and does not start a model turn by @esengine in #11262
- fix(studio): lay transcript cards and the composer on one reading column by @esengine in #11281
- fix(studio): keep short user bubbles flush right and fold their controls to icons by @esengine in #11284
- fix(cli): restore 1.x's stream-json and events-jsonl line contract by @esengine in #11277
- fix(cli): fail fast on an unreachable model service, quiet doctor, bare reasonix exits 0 by @esengine in #11278
- fix(cli): reasonix setup --help prints usage instead of writing a file by @esengine in #11239
- fix(cli): restore 1.x entry points (chat/code, run --takeover, sessions maintenance, leading --preset) by @esengine in #11242
- fix(cli): headless run exits 0 when the model finishes; verdicts go in the result by @esengine in #11285
- fix(config): rewrite only the keys a user-config save changed by @esengine in #11235
- fix(tui): return from Subscribe only once the stream is attached by @esengine in #11302
- fix(studio): 修复旧回复重新生成错误地重跑最后一轮 (#11279) by @Guan0923 in #11280
- fix(cli): keep a headless run's stderr clean; diagnostics behind run --debug by @esengine in #11288
- docs(studio): provide a tested community author workflow by @KHG420 in #11295
- feat(studio): find installable market entries and installed capabilities by @KHG420 in #11292
- feat(studio): default new window sessions from the sandbox claim and folder trust by @esengine in #11298
- fix(config): avoid persisting built-in providers in project config by @KHG420 in #11275
- test(studio): cover declarative plugin install lifecycle by @KHG420 in #11307
- fix(serve): replay startup notices to first SSE window by @KHG420 in #11308
- fix(studio): ignore stale extension scope reads by @KHG420 in #11314
- fix(tui): draw every row whole and in its column on Terminal.app, conhost and Windows Terminal by @esengine in #11287
- fix(agent): a plan check's own residue does not void it by @esengine in #11100
- refactor(config): split provider entry types and table rendering into their own files / 重构(config):将 provider 条目类型与表格渲染拆分到独立文件 by @BuGlessRB in #11289
- feat(market): install an unpinned approved package on explicit trust by @esengine in #11317
- fix(studio): handle missing config and 1.x desktop approval modes by @par73e in #11313
- test(studio): cover theme-only plugin install lifecycle by @KHG420 in #11305
- test(studio): verify installed skill reaches provider by @KHG420 in #11318
- test(studio): exercise installed HTTP MCP package through boot by @KHG420 in #11320
- test(studio): exercise installed plugin MCP through boot by @KHG420 in #11315
- fix(update): fetch Studio artifacts from the mirror first, GitHub as fallback by @esengine in #11322
- test(studio): exercise installed standalone MCP through boot by @KHG420 in #11326
- docs(studio): clarify market skill asset packaging by @KHG420 in #11324
- fix(studio): show installed theme location in market demo by @KHG420 in #11328
- fix(studio): decode code-page shell progress before TUI display by @KHG420 in #11327
- fix(memorybench): mb-contradiction grader can never pass by @esengine in #11333
- fix(studio): clear stale ask cards after rewriting a message by @Guan0923 in #11330
- fix(studio): wrap long workspace paths inside project menus by @Guan0923 in #11321
- fix(studio): hide send arrow for empty live drafts by @Guan0923 in #11331
- fix(update): keep Studio's delta on another volume and make full downloads resumable by @esengine in #11325
- docs(studio): add multi-file skill package example by @KHG420 in #11332
- fix(studio): dedupe overlapping market pages by @KHG420 in #11337
- fix(memorybench): isolate committed answers from graded runs by @KHG420 in #11340
- test(extension): verify installed SDK sidecar lifecycle by @KHG420 in #11341
- feat(provider): per-provider stream idle timeout (idle_timeout_seconds) / 功能(provider):按 provider 设置流空闲超时(idle_timeout_seconds) by @BuGlessRB in #11258
- fix(studio): clarify market trust badge by @KHG420 in #11335
- docs: bring the contract documents up to the docs standard (batch 2) by @esengine in #11344
- fix(installsource): accept an exact semver pin on npm package sources by @esengine in #11351
- fix(memorybench): reject answer reads found in trajectories by @KHG420 in #11346
- feat(cli): render diff fences, an external diff formatter, and shell results that are whole diffs / feat(cli):渲染 diff 围栏、外部 diff 格式化器,以及整体为 diff 的 shell 结果 by @BuGlessRB in #11201
New Contributors
Full Changelog: studio-v2.22.0...studio-v2.23.0
macOS 已用 Developer ID 签名并公证,打开时不需要清除隔离属性。Windows 的窗口、内核与安装器都经 Certum 代码签名证书做了 Authenticode 签名。Linux 从 .deb 安装。
三个平台都能自更新:Linux 走自己的包,Windows 运行下一个安装器,macOS 替换自身 bundle。