github esengine/DeepSeek-Reasonix studio-v2.28.0
Reasonix Studio v2.28.0

latest release: v2.28.0
pre-release2 hours ago

本版是第一个同时发布命令行 reasonix 的 Studio 版本:终端界面补齐 1.x 的常用命令并换上 2.x 内核,同时加固权限规则、插件安装与凭据显示,并新增提交说明草拟、用量日历范围和复制会话信息。

新增

  • 命令行:本版起 reasonix 命令行随 Studio 一同发布,1.x 的命令行迁移到 2.x 内核,迁移差异见 docs/MIGRATING.md (#11968, #11920)
  • 终端界面:/model、/provider 打开可搜索的选择面板并切换当前会话,也可带参数直接切换;选择只对当前会话生效 (#11929)
  • 终端界面:/skills 打开面板,可搜索、按来源筛选,空格标记后按回车批量启停技能 (#11934)
  • 终端界面:/mcp 打开管理面板,可启停、重连并查看 MCP 服务;启用仓库自带的服务前会先显示脱敏后的启动命令并要求确认 (#11935)
  • 终端界面:/remote、/preset(别名 /work-mode、/profile)和 /paste-image 不再提示未知命令 (#11937)
  • 终端界面:底栏和每轮回执标出本次花费按高峰还是低谷价计费;只在按厂商官方时段定价时显示 (#11936)
  • 终端界面:没有可用密钥时发送消息会在本地拒绝并说明原因,不再发给服务商换回 401 (#11928)
  • 工作台的「更改」列表新增「提交…」:根据已暂存的差异草拟提交说明,可编辑,确认后只做本地提交,不推送 (#11534)
  • 暂存内容含疑似密钥文件时,提交前需勾选确认;这类文件的差异不会发给模型 (#11534)
  • 设置的用量页支持自定义日期范围和按自然月查看,并新增每日明细表,触屏上也能读到每天的确切用量 (#11665 by @Harbor404)
  • 用量图按配置的服务商显示名称,并为各服务商使用固定的颜色 (#11665 by @Harbor404)
  • 设置的用量页新增费用显示币种(自动、人民币、美元),/currency 切换后各面板立即跟随 (#11950)
  • 会话右键菜单新增「复制会话信息」,复制会话 ID、上下文目录、任务目录和会话记录文件路径 (#11667 by @Harbor404)
  • 智谱 GLM-5.2 提供 auto、none、minimal 到 max 的思考强度档位,GLM-5.3 提供 auto、low、high、max,所选档位会发给服务商 (#11342 by @par73e)
  • 未改动过的内置智谱预设会补上 GLM-5.3 和 GLM-5.3-Flash;自己调整过的模型列表不受影响 (#11342 by @par73e)
  • 自动语言模式下,用户用中文提问时,可见回答也会被要求使用中文,不再出现中文思考、英文回答 (#11953)
  • 新增可安装的离线回显服务商示例,无需密钥即可完整跑通一轮对话,供扩展作者参考 (#11839 by @KHG420)

变更

  • 在会话里切换模型不再改写配置里的 default_model,新会话和下次启动仍用原来的默认模型;设置里的「默认模型」和首次启动的选择仍会保存 (#11897)
  • 应用窗口的刷新快捷键改为 Ctrl/Cmd+Shift+R;F5 和 Ctrl/Cmd+R 留给页面,在内置浏览器里只刷新当前页 (#11908)
  • 保存的密钥现在逐字节原样读回:用引号包起来输入的密钥会连引号一起保存,${HOME} 之类不再被展开 (#11923)
  • 无法安全存储的密钥值会在写入前被拒绝,并提示原因,不会让整份凭据文件失效 (#11923)
  • 终端界面:未知的 /xxx 命令作为普通消息发给模型,并显示一行提示,与 1.x 一致 (#11969)
  • 终端界面:/status 补上工作区分支行、思考强度和模型引用,与 1.x 一致 (#11924)
  • 终端界面:/rename <序号> <标题> 命名指定的已保存会话,恢复选择器也显示自定义名称 (#11926)
  • 终端界面:待办全部完成后继续显示,直到下一轮开始 (#11933)
  • 终端界面:只有空白内容的思考块不再画出「thought for 0s」标记 (#11930)
  • 保存设置时运行时正忙,现在提示「已保存,等本轮结束后生效」,不再显示成重建失败 (#11911)
  • 服务商编辑表单区分保存失败和已保存但尚未生效,两者用不同标题和颜色 (#11939)
  • 添加或测试服务商时,如果只有 /v1/models 能应答,保存的地址会自动补全为带 /v1 的地址,聊天请求不再打到错误的路径 (#11909)
  • 单个模型检查被拒绝时,显示 HTTP 状态码和服务端返回的说明,其中密钥已被遮蔽 (#11990)
  • 同一地址上、使用不同密钥的两个服务商,其模型现在都会出现在模型列表里,不再被当成重复项丢掉 (#12006)
  • 手动压缩和自动压缩失败时,提示会用当前界面语言给出具体原因,取消、忙碌和未分类的失败也有说明 (#11975)
  • 压缩摘要请求改为使用服务商允许的较低思考强度,减少摘要被思考耗尽输出而丢弃;DeepSeek pro 没有低档,不受影响,仍可能被截断 (#11972)
  • 摘要因超时、失败或截断而失败后,输入增长到一定量会再次尝试自动压缩,不再整段对话都不再重试 (#11973)

修复

  • Windows 上会话里第一次执行删除命令时,PowerShell 解析器冷启动较慢,不再因此被拒绝 (#11895)
  • Windows 开始菜单里的应用图标铺满图标格,与相邻图标大小一致;已安装或已固定的图标需等系统刷新图标缓存 (#11925)
  • 点开一个被窗格打开的历史版本,侧栏里不再同时出现两行同一份记录,也不会同时弹出两个删除确认 (#11914)
  • 第一轮对话所在的文件夹会被记住,之后启动到别的文件夹时,侧栏仍能找到这些会话;已经丢失的需要重新添加该项目 (#11981)
  • 提交消息后输入框立即清空,不会被草稿恢复重新填回;取回排队消息时原文只恢复一次 (#11831)
  • 排队消息取回的竞态:连点不再误报「已发送,无法取回」,过期的队列刷新不会把已取回的消息放回面板,也不会留下幽灵行 (#11976)
  • 反馈对话框关闭再打开后,已附的截图会保留,发送成功后才清掉 (#11903)
  • 没有打开任何会话时点击反馈,会先启动会话再打开,不再毫无反应;云备份按钮不可用时会说明还差什么 (#11960)
  • 创建云备份时,已删除服务商遗留的私有密钥槽不再导致备份创建成功却无法预览恢复,旧备份也因此可以恢复 (#11964)
  • 设置的「恢复旧会话」可以从 1.x 的项目目录、sessions-v4 和桌面版会话目录导入,选错目录时会提示应选哪一个 (#11927)
  • 点击对话里的链接时,若页面在内置浏览器里加载失败,不再同时在系统浏览器里再打开一份 (#11982)
  • 没有兼容能力而被拒绝的市场安装预览,不再进入「确认安装」界面,而是显示错误并可重试 (#11806 by @KHG420)
  • 导出插件时,带字节序标记、UTF-16 或 GBK 编码的 JSON 文件也能正常导出,且仍会清除其中的凭据 (#11711 by @KHG420)
  • 插件代理清单的名称与运行时一致,同名代理只列出实际生效的一个,并说明被遮蔽的路径 (#11742 by @KHG420)
  • 插件的技能或代理声明被拒绝时,已安装列表和 plugin doctor 会给出原因,即使该插件已被停用;不显示被拒绝的字段值 (#11697 by @KHG420)
  • plugin doctor 检查插件运行时文件是否可执行,不可执行时报错退出,不再显示 ok (#11719 by @KHG420)
  • 通过 ACP 报告每个 MCP 服务的健康状态;尚未获启动批准的项目服务在列表里显示为待批准,开关保持关闭 (#11343 by @par73e)
  • 命令行归档里的 reasonix version --verbose 现在会显示提交号和构建时间,与 npm 包一致 (#11931)
  • 扩展 SDK:提供方流结束或取消时释放上下文,打开阶段的取消生效,拦截超时把读取外置内容的时间计算在内 (#11791 by @KHG420, #11795 by @KHG420, #11789 by @KHG420)
  • 扩展 SDK:提供方返回未注册的块类型、负的用量或空的工具调用标识时,流以失败结束,不再静默丢块 (#11837 by @KHG420, #11843 by @KHG420, #11844 by @KHG420)

升级须知

  • 命令行:在未信任的文件夹里,reasonix run 和 -p 拒绝了编辑或命令时退出码为 4(加 --fail-on-unverified 时为 3),不再返回 0;脚本需先 reasonix trust 或明确指定模式 (#11920)
  • 命令行:Shift+Tab 和 Ctrl+Y 进入 YOLO 立即生效,没有确认,与 1.x 一致;只有 --yolo 或 --permission-mode yolo 启动时会在首次询问一次 (#11968)
  • 命令行:默认模式是自动,沙盒能限制写入且文件夹受信任时生效,否则为询问;启动前仍会询问是否信任该文件夹 (#11968, #11920)
  • 命令行:/recover-context 和 /continue-checks 已退役,/web 不是斜杠命令,请在外壳里运行 reasonix web (#11968)
  • 安全:Bash 的拒绝和询问规则现在会穿透 env、sudo、doas、command、nohup、time、nice 等包装,再匹配实际运行的程序;无法确定目标时改为询问,规则不会因此放宽 (#12018)
  • 安全:远程安装的清单必须完整且有上限:超过 2 MiB 或服务器擅自返回部分内容都会被拒绝,单次下载最长 30 秒 (#11808 by @KHG420)
  • 安全:MCP 的地址、参数和诊断信息在所有显示、预览、导出和备份界面里统一遮蔽凭据;地址无法解析时整体隐藏;不含密钥的备份也会遮蔽这些内容 (#11816)
  • 安全:Studio 调用 git 时,会拒绝会运行程序或写文件的选项,例如 --upload-pack、--output、--ext-diff (#11906)
  • 安全:读取插件的代理清单只在插件包目录内进行,只读普通文件,并限制为 1 MiB;包外的路径不会被描述 (#11702 by @KHG420)

贡献者

感谢本版本的贡献者:@Harbor404、@par73e、@KHG420

What's Changed

  • test(studio): wait for the plugin recovery focus move by @esengine in #11893
  • fix(studio): clear the composer on submit and restore a withdrawn queued message exactly once by @esengine in #11831
  • test(boot): fix the shell used by the restart image effect test by @esengine in #11824
  • fix(bash): give the PowerShell delete parser a cold-start budget by @esengine in #11895
  • fix(mcp): redact endpoint credentials fail-closed in every display, preview and export surface by @esengine in #11816
  • fix(serve): a session's model switch no longer rewrites default_model by @esengine in #11897
  • fix(install): require complete bounded remote manifests by @KHG420 in #11808
  • fix(studio): export plugins using supported JSON encodings by @KHG420 in #11711
  • fix(studio): keep feedback screenshots in the held draft by @esengine in #11903
  • fix(studio): leave F5 and Ctrl/Cmd+R to the page; app-window reload moves to Ctrl/Cmd+Shift+R by @esengine in #11908
  • fix(gitcmd): refuse program-running git options at the exec exit by @esengine in #11906
  • fix(serve): settings saved while the runtime is busy no longer read as a failed rebuild by @esengine in #11911
  • fix(providers): save the base URL the model-list probe answered at by @esengine in #11909
  • feat(usage): add calendar ranges and precise daily details by @Harbor404 in #11665
  • fix(gitcmd): make the option screen a CodeQL barrier at the exec exit by @esengine in #11913
  • fix(studio): list a version a pane has open once, not under its parent and as its own row by @esengine in #11914
  • fix(studio): expose GLM reasoning effort levels by @par73e in #11342
  • feat(studio): draft a commit message from the staged diff, commit locally on confirm by @esengine in #11534
  • fix(tui): /status lists the work tree, the effort and the model ref as 1.x does by @esengine in #11924
  • fix(desktop): fill the Windows icon tile so the Start menu icon matches its neighbours by @esengine in #11925
  • fix(tui): a thinking block with no text draws no marker by @esengine in #11930
  • feat(tui): the footer and turn receipt name the peak or off-peak rate a spend was billed at by @esengine in #11936
  • fix(tui): a finished to-do list stays docked until the next turn starts by @esengine in #11933
  • fix(run): exit 4 when an untrusted folder refused the work, and 1.x migration notes by @esengine in #11920
  • feat(control): answer /remote, /preset (/work-mode, /profile) and /paste-image by @esengine in #11937
  • ci(release): CLI archives carry the same build identity as the npm packages by @esengine in #11931
  • fix(settings): distinguish failed save from saved-but-not-applied in provider edit by @esengine in #11939
  • feat(chartspec): add the closed v1 chart spec, validator and text summary by @esengine in #11919
  • fix(tui): /rename <title> names the nth saved session and the picker shows the name by @esengine in #11926
  • ci(release): write the Homebrew cask only after the CLI release exists by @esengine in #11932
  • fix(migration): import 1.x sessions from project, v4 and desktop v5 stores by @esengine in #11927
  • build(deps-dev): bump electron from 44.4.5 to 44.5.1 in /desktop/electron in the npm group by @dependabot[bot] in #11946
  • feat(tools): add the render_chart built-in, hidden from the provider schema by @esengine in #11944
  • build(deps): bump the npm group in /desktop/frontend-next with 4 updates by @dependabot[bot] in #11948
  • build(deps): bump the go group with 2 updates by @dependabot[bot] in #11945
  • build(deps): bump pnpm/action-setup from 6.0.9 to 6.1.0 in the actions group by @dependabot[bot] in #11949
  • fix(control): constrain the visible answer language per turn in auto mode by @esengine in #11953
  • feat(tui): /skills opens a panel to search, filter by source and toggle skills by @esengine in #11934
  • feat(settings): choose the cost display currency (Auto / CNY / USD) by @esengine in #11950
  • fix(config): a stored API key reads back byte-for-byte by @esengine in #11923
  • feat(tui): /model and /provider open a searchable picker and switch the session by @esengine in #11929
  • feat(tui): /mcp opens a panel to enable, reconnect and inspect MCP servers by @esengine in #11935
  • fix(studio): report per-server MCP health over ACP by @par73e in #11343
  • fix(studio): feedback opens with no pane, visible refusals, backup button explains itself by @esengine in #11960
  • fix(backup): accept the private credential slot a provider key lives in by @esengine in #11964
  • test(serve): pass the usage window its zone instead of writing time.Local by @esengine in #11967
  • feat(tui): a keyless first run says why and refuses the turn locally by @esengine in #11928
  • fix(compaction): typed codes for /compact notices and aborted cards, localised by the frontends by @esengine in #11975
  • fix(compaction): summary request asks for the lowest approved reasoning depth by @esengine in #11972
  • test(config): the state-root guard skips directories removed mid-walk by @esengine in #11979
  • fix(studio): queue withdraw races (double click, stale pull, late receipt) by @esengine in #11976
  • fix(compaction): release a transient summary failure once the input has grown by @esengine in #11973
  • fix(serve): list the folder a first turn is held in by @esengine in #11981
  • fix(tui): send an unknown slash command to the model with a visible notice by @esengine in #11969
  • test(acp): resume invariant is no transcript replay, not no notification by @esengine in #11987
  • fix(studio): keep blocked market previews out of confirmation by @KHG420 in #11806
  • fix(sdk): cancel provider contexts when streams finish by @KHG420 in #11791
  • fix(studio): a link whose page failed to load no longer also opens the system browser by @esengine in #11982
  • test(e2ebench): prove every declared-solvable verification-stress task can pass by @chuiwenwei in #11852
  • fix(providers): show HTTP status and endpoint text when a model check is refused by @esengine in #11990
  • docs(migrating): match the verified 2.x CLI behaviour for 1.x users by @esengine in #11968
  • fix(sdk): include externalized reads in the intercept budget by @KHG420 in #11789
  • fix(cli): detect non-executable plugin runtimes in doctor by @KHG420 in #11719
  • fix(sdk): cancel provider streams while opening by @KHG420 in #11795
  • fix(sdk): drop the import the merged intercept-budget change left unused by @esengine in #11997
  • feat(sdk): add an installable offline provider example by @KHG420 in #11839
  • feat(studio): copy session handoff information by @Harbor404 in #11667
  • fix(sdk): reject unregistered provider chunk types by @KHG420 in #11837
  • fix(studio): guard agent inventory source residency by @KHG420 in #11702
  • test(config): treat a directory mid-deletion on Windows as vanished in the state-root walk by @esengine in #12000
  • fix(sdk): reject negative provider token usage by @KHG420 in #11843
  • fix(studio): match package agent inventory to runtime names by @KHG420 in #11742
  • fix(sdk): validate provider tool call identifiers by @KHG420 in #11844
  • test(context-retrieval): assert live runs are seeded from entropy, not that two answers differ by @esengine in #12002
  • test(boot): deflake URL-interaction and fullsidecar effect tests by @esengine in #12004
  • fix(studio): diagnose rejected plugin profile declarations by @KHG420 in #11697
  • fix(serve): keep models from two accounts at one endpoint in the model list by @esengine in #12006
  • fix(permission): match Bash deny and ask rules through transparent command wrappers by @esengine in #12018
  • docs(release): Studio 2.28.0 notes by @esengine in #12022

Full Changelog: studio-v2.27.0...studio-v2.28.0


macOS 已用 Developer ID 签名并公证,打开时不需要清除隔离属性。Windows 的窗口、内核与安装器都经 Certum 代码签名证书做了 Authenticode 签名。Linux 从 .deb 安装。

三个平台都能自更新:Linux 走自己的包,Windows 运行下一个安装器,macOS 替换自身 bundle。

Don't miss a new DeepSeek-Reasonix release

NewReleases is sending notifications on new releases.