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

pre-releaseone hour ago

本版修复 Windows 上内核因协程暴涨而崩溃的问题,让同一工作区里写不同文件的会话可以并行,并补强记忆迁移备份、递归删除保护、自动压缩失败说明,以及市场、主题、插件和 MCP 的大量使用细节。

新增

  • 手机访问的局域网直连链接可以在用户配置的 [serve] share_port 里指定固定端口,不再每次随机;端口被占用时会明确提示 (#11568, #11540)
  • 市场「我的包」每一行新增「发布新版本」,自动带入类型、名称、简介、仓库、标签和可见性,只需补来源 (#11566 by @KHG420)
  • 新增主题作者指南和可直接安装的纯主题示例 Paper Dawn,替换掉旧桌面时代的指南和含无效字段的模板 (#11578 by @KHG420)
  • 市场发布表单在名称或来源框里按回车即可提交;市场的种类、排序和浏览切换支持方向键,MCP 安装位置支持方向键与 Home、End (#11845 by @KHG420, #11821 by @KHG420, #11847 by @KHG420)
  • 扩展作者新增可安装的工具扩展示例、可运行的 stdio MCP 插件示例,以及本地测试和自定义宿主关闭的说明 (#11553 by @KHG420, #11584 by @KHG420, #11788 by @KHG420)

变更

  • 同一工作区里写入不同路径的会话现在可以并行,不再整个工作区排队等第一个写入的会话;同一路径、重叠目录和移动的两端仍会互相等待 (#11823, #11815, #11833)
  • 旧版记忆文件在迁移到 V2 之前会先原样备份,迁移改写的内容不再无从找回 (#11857, #11846 fixed in #11857)
  • 自动压缩失败时,卡片会说明具体原因(超时、摘要被截断、服务商出错、上下文已变化等),不再只写「这一轮什么也没折叠」 (#11869, #11838)
  • 子代理继承的思考强度在执行模型不支持时自动退回该模型默认值,换回支持的模型后恢复;子代理指定与父会话相同的模型时沿用父会话强度 (#11269 by @zcxads666, #11841, #11268 fixed in #11269 by @zcxads666)
  • 递归删除的目标不是工作区授权范围内的字面路径时,即使在自动或 YOLO 模式下也会被拒绝,模型会收到明确原因 (#11786, #11782 fixed in #11786)
  • 只改动 .md、.rst 文档且工作区没有任何检查项时,不再要求先跑一遍验证命令 (#11780, #11776)
  • 手机访问的互联网设备编号复用最小的空号,同一台手机重连不再变成「设备 3、4、5」 (#11879, #11855)
  • 命令行的 --compact-ratio 接受 0 到 100 之间任意比例,例如 0.5,与配置文件一致 (#11854)
  • 切换到已在使用的模型或思考强度时不再重建会话,切换更快 (#11546 by @Harbor404)
  • 市场发布表单选择私有时,说明改为「仅自己可见、无需审核」,不再承诺审核后发布 (#11716 by @KHG420)

修复

  • Windows 上宿主因工作区快照遍历把协程和线程撑爆而崩溃,现在遍历受限,不再崩溃 (#11840, #11820 fixed in #11840)
  • 删除保护不再因 Windows 8.3 短路径里的 ~ 把工作区外的删除误判为「目标不是字面路径」,现在会按越界目标拒绝 (#11866)
  • 通过 SSH 连接远程时,引导阶段点取消会立刻中止,不再卡在打开会话 (#11622 by @Harbor404, #11619 fixed in #11622 by @Harbor404)
  • 远程「从目录树打开」支持 Windows 盘符、UNC 和绝对路径,不再拼到远程主目录后面 (#11543 by @Harbor404, #11539 fixed in #11541 and #11543 by @Harbor404)
  • PowerShell 命令别名存在但无法启动时被跳过,并记录实际用的外壳,不再每条命令都报 exit status 1 (#11504 by @Harbor404, #10633 fixed in #11504 by @Harbor404)
  • 项目里的 MCP 条目不再丢掉用户禁用的工具,调用被禁用的工具会得到明确提示,空工具名不再被接受 (#11506 by @Harbor404, #11473 fixed in #11506 by @Harbor404)
  • 第三方中转拒绝 previous_response_id 并返回 400 时,自动改发完整历史重试,不再反复报错 (#11803, #11797 fixed in #11803)
  • 托盘菜单跟随系统语言,从访达或程序坞启动也不再回退为英文 (#11759, #11750 fixed in #11759)
  • 身份服务不可达时,侧栏和账号面板一致显示「已登录」和错误,并提供重试与退出,不再弹出登录表单 (#11777, #11769 fixed in #11777)
  • 界面大小不是 100% 时,会话和项目的右键菜单不再偏离点击位置或超出窗口底部 (#11729, #11727, #11773)
  • 侧栏拖到很窄时文字不再挤在一起重叠,最小宽度提高到 232 像素 (#11731, #11723)
  • 运行分析里点开一条记录,详情显示在被点的那一行下面,不必拖到列表最底部 (#11732, #11720)
  • 安装文本插件后切换模型,插件的技能和代理、自定义技能目录不再丢失 (#11736 by @KHG420)
  • 回退对话后不再在工作目录留下 .bak 临时备份文件 (#11699 by @Guan0923)
  • MCP 添加命令:复制的 mcp add 命令(含续行、绝对路径启动器)能被正确解析,空定义不再出现在粘贴预览里 (#11747 by @KHG420, #11779 by @KHG420, #11804 by @KHG420, #11752 by @KHG420)
  • MCP 名称与传输:npx、uvx、Python、Node、Go 等启动方式生成的名字不再带版本号或选项值;只有路径里完整的 sse 段才判为 SSE,大小写不同的 HTTP 也能识别 (#11865 by @KHG420, #11787 by @KHG420, #11768 by @KHG420)
  • 需要认证的 MCP 服务选「仅此项目」安装后,不再被保存为全局启用 (#11749 by @KHG420)
  • MCP 检查输入在读取期间保持稳定,操作失败时显示当前的诊断信息 (#11805 by @KHG420, #11809 by @KHG420)
  • 主题:导入期间禁用重复操作;同一地址重新导入后图片立即更新;同时选 ZIP 与散文件时给出明确提示;读取失败时保留已有主题并可重试预览 (#11810 by @KHG420, #11811 by @KHG420, #11814 by @KHG420, #11812 by @KHG420, #11813 by @KHG420)
  • 市场:安装失败可重新预览并保留失败项,登录失效时点赞回到登录入口,连续点提交审核不再重复提交,确认与发布反馈支持读屏 (#11784 by @KHG420, #11781 by @KHG420, #11580 by @KHG420, #11807 by @KHG420, #11800 by @KHG420)
  • 插件、MCP 和技能清单读取失败时显示错误和重试按钮,不再当成空列表;更新期间的禁用导航变灰,插件开关保留重载结果 (#11796 by @KHG420, #11477 by @KHG420, #11819 by @KHG420)
  • 插件安装失败后可通过重新预览恢复;空插件列表的指引改为设置 > 扩展 > 已安装 > 插件包 > 添加 (#11651 by @KHG420, #11696 by @KHG420)
  • plugin doctor 会检查已声明的代理目录,目录被删或被换成文件时报错;声明成文件的技能、代理、命令和提示目录会给出警告 (#11745 by @KHG420, #11689 by @KHG420, #11790)
  • 已安装插件换版本后,重复的贡献行和兼容性提示行不再残留旧内容;中文名技能显示为 /包名:审查 而不是 SKILL (#11737 by @KHG420, #11733 by @KHG420, #11740 by @KHG420)
  • 导出插件包时,数字开头的 MCP 服务名和残缺的 $NAME 引用不再让收件人填写的值失效 (#11725 by @KHG420, #11738 by @KHG420)
  • 扩展 SDK:交互结果需显式确认,取消的请求不再写出,关闭回调和通知队列更稳,工具参数缺失与响应格式会校验 (#11850 by @KHG420, #11802 by @KHG420, #11798 by @KHG420, #11793 by @KHG420, #11828 by @KHG420, #11835 by @KHG420)

贡献者

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

What's Changed

  • fix(studio): place rail context menus correctly at a zoomed interface size in #11729
  • fix(studio): open a run-analysis record under the row that was clicked in #11732
  • fix(studio): keep the narrow workspace column legible in #11731
  • fix(boot): retain configured skill discovery after Studio model switches by @KHG420 in #11736
  • fix(studio): refresh repeated compatibility issue rows by @KHG420 in #11733
  • fix(studio): replace duplicate contribution rows with current package inventory by @KHG420 in #11737
  • fix(studio): validate declared agent roots in plugin doctor by @KHG420 in #11745
  • fix(studio): parse copied MCP add commands as declarations by @KHG420 in #11747
  • fix(sdk): declare only callable tool handlers by @KHG420 in #11758
  • fix(studio): omit empty MCP definitions from pasted previews by @KHG420 in #11752
  • fix(studio): derive MCP names through mixed-case runner extensions by @KHG420 in #11753
  • fix(studio): skip uvx from values when deriving MCP names by @KHG420 in #11756
  • fix(studio): keep uvx version pins out of MCP server names by @KHG420 in #11755
  • fix(checkpoint): 回退成功后清理临时备份 by @Guan0923 in #11699
  • test(boot): exercise exported MCP recipient headers by @KHG420 in #11724
  • fix(repolint): keep quoted paragraphs separate by @KHG420 in #11715
  • test(gitcmd): mark rewritten staging fixture stat dirty by @KHG420 in #11705
  • test(schedrun): wait for child startup before supervisor crash by @KHG420 in #11698
  • fix(studio): derive Python MCP names from interpreter entry points by @KHG420 in #11764
  • fix(remote): open absolute Windows workspaces from tree by @Harbor404 in #11543
  • fix(studio): follow Registry pages for exact MCP installation names by @KHG420 in #11765
  • fix(studio): correct empty plugin list install guidance by @KHG420 in #11696
  • fix(studio): diagnose native contribution roots that name files by @KHG420 in #11689
  • fix(pluginpkg): generate expandable numeric server aliases by @KHG420 in #11725
  • fix(studio): show a signed-in account consistently when the identity service is unreachable in #11777
  • test(boot): verify copied slash commands across their lifecycle by @KHG420 in #11508
  • test(studio): verify installed hook context lifecycle by @KHG420 in #11507
  • fix(studio): skip uv dependency values when deriving MCP names by @KHG420 in #11767
  • fix(studio): derive Node MCP names from script entry points by @KHG420 in #11766
  • fix(studio): recognize HTTP URL schemes regardless of case by @KHG420 in #11768
  • fix(studio): drop mixed-case Markdown command suffixes by @KHG420 in #11748
  • fix(sdk): make starter interceptor work on composed inputs by @KHG420 in #11503
  • feat(examples): add a runnable stdio MCP plugin by @KHG420 in #11584
  • docs(sdk): add an installable tool extension example by @KHG420 in #11553
  • fix(mcp): preserve disabled tool policy by @Harbor404 in #11506
  • feat(studio): prepare market release drafts from own packages by @KHG420 in #11566
  • fix(cli): print package warnings before plugin doctor rejects an agent root in #11790
  • perf(studio): skip rebuilds for unchanged model or effort by @Harbor404 in #11546
  • fix(shell): skip a PowerShell Store alias that will not start; record which ran by @Harbor404 in #11504
  • fix(evidence): do not demand verification after supporting-only edits when no checks exist in #11780
  • fix(responses): fall back to full history when a relay rejects previous_response_id in #11803
  • feat(host): log elapsed milliseconds per startup phase in #11760
  • fix(shell): refuse recursive deletes whose target is not a literal path inside the granted roots in #11786
  • fix(studio): parse continued MCP setup commands by @KHG420 in #11779
  • fix(studio): skip Node option values in MCP names by @KHG420 in #11799
  • fix(studio): derive MCP names through uv global options by @KHG420 in #11801
  • fix(studio): pass the system language to the kernel host so the tray follows it in #11759
  • fix(sdk): synchronize notification queue shutdown by @KHG420 in #11793
  • fix(studio): recognize copied MCP add launcher paths by @KHG420 in #11804
  • docs: add the change discipline rules to REASONIX.md in #11829
  • fix(sdk): recover shutdown callback panics by @KHG420 in #11798
  • fix(sdk): stop already-cancelled host requests before writing by @KHG420 in #11802
  • fix(sdk): require tool argument presence by @KHG420 in #11828
  • fix(sdk): handle null arguments in fullsidecar demo by @KHG420 in #11826
  • fix(sdk): validate provider response format types by @KHG420 in #11835
  • ci(ops): register the ops events relay deploy workflow on the default branch in #11862
  • fix(cli): validate compact-ratio against the config layer bounds in #11854
  • fix(state): bound the workspace snapshot walk so goroutines and threads stay limited in #11840
  • fix(boot): a subagent that names the parent's model inherits the parent's effort in #11841
  • fix(sdk): require explicit UI result acknowledgements by @KHG420 in #11850
  • fix(shell): only a leading tilde makes a delete target non-literal in #11866
  • fix(studio): recover signed-out market vote writes by @KHG420 in #11781
  • fix(studio): keep MCP inspection input stable while reading by @KHG420 in #11805
  • fix(studio): show current MCP operation diagnostics by @KHG420 in #11809
  • fix(studio): retain plugin switch reload outcomes by @KHG420 in #11819
  • fix(pluginpkg): redact literals mistaken for environment references by @KHG420 in #11738
  • fix(studio): name installation source inputs accessibly by @KHG420 in #11818
  • test(extension): clean conformance scratch before exiting by @KHG420 in #11792
  • fix(studio): retain themes when inventory reads fail by @KHG420 in #11812
  • fix(session): let sessions that write disjoint paths of one workspace proceed in parallel in #11823
  • docs(sdk): align fullsidecar demo guidance by @KHG420 in #11556
  • test(studio): cover installed SDK provider streams at boot by @KHG420 in #11832
  • fix(studio): retry previews after theme inventory refresh by @KHG420 in #11813
  • fix(studio): add semantics to publisher feedback by @KHG420 in #11800
  • fix(studio): serialize own-package review submissions by @KHG420 in #11580
  • fix(studio): submit publishing drafts with Enter by @KHG420 in #11845
  • fix(studio): expose market confirmation busy and error states by @KHG420 in #11807
  • feat(share): let the phone-access LAN link use a fixed port in #11568
  • fix(studio): support keyboard MCP installation locations by @KHG420 in #11847
  • fix(boot): let inherited subagent effort yield to execution model (studio) by @zcxads666 in #11269
  • test(studio): drive own-review regression through the real inventory reload in #11874
  • fix(studio): recover from extension inventory read failures by @KHG420 in #11796
  • fix(studio): recover failed plugin installs through fresh previews by @KHG420 in #11651
  • test(builtin): compare ambiguous writer grant targets against the resolved root in #11875
  • fix(studio): explain private market drafts before saving by @KHG420 in #11716
  • fix(studio): recover failed market install results by @KHG420 in #11784
  • fix(compaction): name why an automatic fold failed instead of "folded nothing" in #11869
  • test(boot): bound snapshot walk goroutines by pool size, not total growth in #11877
  • docs(studio): add current theme author guide and starter by @KHG420 in #11578
  • fix(studio): show disabled update navigation and cover lock release by @KHG420 in #11477
  • fix(serve): reuse the lowest free ordinal for Internet controllers in #11879
  • fix(studio): retain local scope for pending MCP installs by @KHG420 in #11749
  • docs(sdk): explain local tests and custom host shutdown by @KHG420 in #11788
  • fix(memory): back up legacy memory files before the V2 migration rewrites them in #11857
  • fix(remote): cancel SSH session opening during bootstrap by @Harbor404 in #11622
  • test(control): wait for turn events within testenv.Budget instead of fixed 2-10s in #11881
  • test(boot): bound permission-rule contention by writer count and process readiness by testenv.Budget in #11883
  • test(shellrun): give the quiet-timeout case a deadline that outlasts PowerShell startup in #11882
  • fix(studio): serialize theme import feedback by @KHG420 in #11810
  • perf(sandbox): remember a bash.exe that already passed the launch probe (refs #11885) in #11887
  • test(shellrun): stop the quiet-timeout test racing interpreter startup in #11888
  • test(boot): make the workspace scan limit injectable (refs #11885) in #11886
  • fix(studio): share keyboard navigation for market radios by @KHG420 in #11821
  • fix(studio): infer MCP transport from endpoint path segments by @KHG420 in #11787
  • fix(studio): revalidate theme assets with content ETags by @KHG420 in #11811
  • fix(studio): reject mixed theme archive selections by @KHG420 in #11814
  • docs(ecosystem): add compatible command example and host proof by @KHG420 in #11569
  • fix(studio): unify MCP launcher name inference by @KHG420 in #11865
  • fix(studio): align package skill inventory with runtime names by @KHG420 in #11740
  • test(boot): close process-global catalogs before the temp dir is removed in #11889
  • docs(release): prepare Studio 2.27.0 notes in #11890
  • fix(release): never credit the repository owner in release notes in #11891

Full Changelog: studio-v2.26.0...studio-v2.27.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.