本版新增默认关闭的 Windows 命令沙箱、定时运行、外部文字确认开关,以及工作台里 PDF、CSV 和静态 HTML 的预览(AI 文件交付卡片需在用户配置里主动启用),并修复长会话窗口内存上涨、1.x 会话导入与历史搜索、自定义预设切换过慢等一批问题。
新增
- 设置 → 自动化 → 定时运行:查看、预览确认后创建、暂停、续期、删除定时任务,并查看每次运行的结果。关联 #11406。
- Windows 命令沙箱(设置 > 沙箱,默认关):不能在授权文件夹外创建或改写文件;删除、重命名、读取、联网、ssh-agent/docker 管道不受限。见 #13109。
- 设置的「工具与权限」里有「外部文字」开关,开启后照抄网页或工具结果文字的调用,Auto 和 YOLO 也先问你;默认关。关联 #13111。
- 配置项 permissions.ask_on_external_origin(默认关):调用逐字复制了网页或工具结果里的文字时,Auto 和 YOLO 也先问你。见 #13111。
- 远程机器现在可以在侧栏里上移、下移(远程项目菜单里的“上移/下移 机器名”),整台机器连同它的项目一起移动。关联 #13958。
- 会话右键菜单有「标为已读」,未读的会话(本机或远端)不用打开就能清掉未读标记。关联 #13962。
- 打开有未读回答的会话时,在新回答开始的位置画一条分隔线;可在设置的外观里关闭。关联 #13962。
- 用户配置 tools.present_files 主动启用 AI 交付卡片;工作台直接预览 Markdown、图片、PDF、CSV/TSV 和静态 HTML。关联 #14031 by @SivanCola。
- 终端的会话选择器(/resume)里按 Ctrl+D 询问、对同一行再按一次 Ctrl+D 才永久删除该会话;当前打开的会话会被拒绝并说明原因。见 #13954。
变更
- 会话很长时,折叠或展开左侧会话栏不再逐帧重算整段对话的样式,动画明显更顺。关联 #13936 fixed in #13937。
- Agent 预设编辑器的“添加模块”下拉在名称旁显示工具、技能或命令自己的一行说明,下拉箭头和“添加模块”按钮的间距也调开了。关联 #13964。
- 交付卡片适配宽窄布局,提供文件类型图标、当前预览标记和“更多”操作;聊天及工作台图标增加统一提示。关联 #14031 by @SivanCola。
- 工作台打开 HTML 默认使用不执行脚本的静态预览;本地桌面需点击“交互运行”才能运行页面。关联 #14031 by @SivanCola。
修复
- 启动较慢时,等待窗口说明正在等待本地服务就绪,不再让普通重启看起来像首次安装。启动和关闭到托盘的行为不变。关联 #13352。
- 已完成的工具调用的输出不再被拆成逐行页面节点,调用多的长会话里窗口内存不再因此上涨,外观不变。关联 #13899。
- 恢复旧会话时,1.x 桌面端的会话按各自记录的工作目录归到各自项目,不再整库倒进所选项目;没有记录归属的留在原处并列为未导入。见 #13920 fixed in #13921 and #13970。
- 项目里有大量 1.x 旧会话时,每次展开项目都要把它们逐个重放,列表要等几分钟;现在重放一次后记住结果。关联 #13950。
- 用
!直接运行命令时,现在和模型的 bash 工具一样能找到终端里装的工具(读取登录 shell 的 PATH),不再报“command not found”。关联 #13956。 - 侧栏里运行中的会话行,行首不再出现“圆点叠在竖线上”的两个重叠形状,标题也不再比其他行多缩进一格。关联 #13960 fixed in #13963。
- 会话列表比窗格晚加载时,正在前台的会话仍显示未读圆点,现在窗口有焦点时会自动标为已看。关联 #13962。
- 写入落在「额外可写入范围」等工作区之外的文件时,不再占住整个工作区,别的会话写项目文件不会被卡住;只有同一路径的写入互相等待。关联 #13965。
- 连接 WSL 后,含空格的 IPv6 区域名被写进已知主机文件,之后所有远程连接都读不了它;现在不再写区域名,并跳过已损坏的行、给出警告。关联 #13967 fixed in #13992。
- 在不属于任何版本库的文件夹里,只改文档的交付任务不再被要求补一次根本跑不通的检查,也不再每轮重复同一条验证提示。关联 #13971 fixed in #13983。
- 侧栏里当前会话的行与悬停行、普通行几乎分不出来,现在选中行有更深的底色和一圈细轮廓,悬停不会盖掉它。关联 #13972 fixed in #13975。
- 输入框下方的 Git 指示和相邻的 Agent、询问等控件字号、行高一致,放大界面文字后也不再错位。关联 #13982 fixed in #14000 by @lancy69。
- Studio 计算机操作功能首次启动或中断后重启时,会等待驱动就绪,避免偶发启动失败。关联 #13985 by @SivanCola。
- 服务器拒绝 sftp(如群晖 NAS)时,远程目录选择、连接和
remote test改用普通命令通道;见 #13981、#13987。 - Agent 预设提示「组合所需资源不可用」时,现在会写明是哪个模块(如 tools:xxx)以及原因,不再只显示一句笼统的话。关联 #13988。
- 点过聊天里的文件链接并关掉那个文件后,再点侧栏「文件」会重新打开它,而不是显示文件树。关联 #13993。
- 会话历史搜索只索引「用户说过的话」,不再把宿主前置的语言、日期、项目说明等块写进索引,因此这些块里的词不会再出现「命中却看不到出处」。关联 #14022 by @chuiwenwei。
- 文档删除或撤销访问后不再保留过期的已保存正文;未保存编辑仍会保留,元数据检查不再随每次按键重复触发。关联 #14031 by @SivanCola。
- 新建自定义预设会话按需加载技能和扩展、连接 MCP,不再生成全量快照。继承模式跟随当前已授权配置。关联 #13988。
升级须知
- 升级后首次启动会重建一次历史索引。关联 #14022 by @chuiwenwei。
- 已有快照会话保持原行为。新会话使用事件 schema 5、归档 version 3,旧客户端不能继续执行;升级后仍可读取旧会话。关联 #13988。
贡献者
感谢本版本的贡献者:@SivanCola、@lancy69、@chuiwenwei
This release adds an opt-in Windows command sandbox, scheduled runs, an external-text confirmation switch and workbench previews for PDF, CSV and static HTML, and fixes window memory growth in long sessions, 1.x session import and history search.
New
- Settings, Automation, Scheduled runs: list, create after a confirmed preview, pause, renew and delete scheduled tasks, and read each run's result. Refs #11406.
- a Windows command sandbox (Settings > Sandbox, off): no creating or overwriting files outside granted folders; delete, rename, read, network, ssh-agent/docker pipes are not bounded. #13109
- Settings > Tools has an "Outside text" switch: when on, a call that copies text from a web page or tool result asks first, even in Auto and YOLO. Off by default. Refs #13111.
- permissions.ask_on_external_origin (off by default): Auto and YOLO ask first when a call copies text verbatim from a web page or tool result. See #13111.
- Remote machines can now be moved up and down in the sidebar (the remote project menu's "Move up/down"), taking their projects with them. Refs #13958.
- the session context menu has "Mark as read", which clears the unread mark of a local or remote conversation without opening it. Refs #13962.
- opening a session with unread answers draws a line where they begin; it can be turned off in Settings, Appearance. Refs #13962.
- user-only tools.present_files opts into AI delivery cards; the workbench previews Markdown, images, PDF, CSV/TSV and static HTML. Refs #14031 by @SivanCola.
- In the terminal's session picker (/resume), Ctrl+D asks and a second Ctrl+D on the same row erases that conversation for good; the open session is refused with the reason. See #13954.
Changed
- folding or opening the left rail with a long conversation no longer restyles the whole transcript on every frame, so the animation stays smooth. Refs #13936 fixed in #13937.
- the preset editor's add-module menu shows each tool, skill or command's own one-line description, and the arrow and button spacing are less cramped. Refs #13964.
- responsive delivery cards have type icons, current-file markers and More actions; chat and workbench icons share accessible tooltips. Refs #14031 by @SivanCola.
- HTML opens as a script-free static preview by default; on desktop, select Interactive run to execute the page. Refs #14031 by @SivanCola.
Fixed
- a slow launch says it is waiting for the local service, rather than making an ordinary relaunch look like a first installation. Startup and close-to-tray behaviour are unchanged. Refs #13352.
- a finished tool call's output is no longer split into one page node per line, which inflated window memory in long sessions with many calls; it looks the same. Refs #13899.
- recovering older sessions files each 1.x Desktop conversation under the project its own header records, not all under the one picked; one with none is left and listed. See #13920 fixed in #13921 and #13970.
- a project holding many 1.x conversations replayed each of them on every listing, so the list took minutes; the result is now remembered after the first replay. Refs #13950.
- Commands run with
!now find the tools your terminal finds (the login shell's PATH), like the model's bash tool, instead of "command not found". Refs #13956. - a running session row in the sidebar no longer draws a status dot on top of its state bar, and its title no longer sits one step further right than the other rows. Refs #13960 fixed in #13963.
- a session already in front kept its unread dot when the session list arrived after the pane; it is now marked seen as soon as the window has focus. Refs #13962.
- writing a file outside the workspace, such as in an extra writable folder, no longer claims the whole workspace; only writes to the same path wait on each other. Refs #13965.
- an IPv6 zone with spaces was written to the managed known_hosts file and broke later remote connections; zones are no longer written, broken lines are skipped with a warning. Refs #13967 fixed in #13992.
- a Delivery task that only edits documents outside any repository is no longer asked for a check that cannot run there, and a verification debt is explained once. Refs #13971 fixed in #13983.
- the current session's sidebar row was hard to tell from a hovered or plain row; it now has a stronger fill and a thin outline that hovering does not override. Refs #13972 fixed in #13975.
- the composer's Git indicator now shares its neighbours' font and line height, so it stays level with them at larger interface text. Refs #13982 fixed in #14000 by @lancy69.
- Studio computer use waits for driver readiness on initial launch and restart after interruption, preventing intermittent startup failures. Refs #13985 by @SivanCola.
- when a server refuses sftp (e.g. a Synology NAS), the remote folder picker, connect and
remote testnow use the plain command channel. #13981, #13987 - when an Agent preset reports that its required resources are unavailable, the message now names the module (such as tools:xxx) and the reason instead of a generic sentence. Refs #13988.
- after opening a file from a link in the conversation and closing it, pressing Files reopened that file instead of showing the file tree. Refs #13993.
- session history search indexes what the user said, not the host-prepended language, date and project blocks, so a hit can no longer come from words its snippet cannot show. Refs #14022 by @chuiwenwei.
- deleted or revoked documents no longer retain stale saved text; unsaved drafts remain intact, and metadata checks no longer restart on every keystroke. Refs #14031 by @SivanCola.
- new custom presets load skills/extensions and connect MCP on demand. Inherited permissions follow current authorized configuration. Refs #13988.
Upgrade notes
- the history index is rebuilt once on the first launch after upgrading. Refs #14022 by @chuiwenwei.
- existing snapshots remain supported. Live sessions use event schema 5 and archive version 3; older clients cannot execute them. Refs #13988.
Contributors
Thanks to this release's contributors: @SivanCola, @lancy69, @chuiwenwei
What's Changed
- feat(desktop): the scheduled runs screen by @esengine in #13759
- feat(studio): a settings switch for asking about text copied from outside by @esengine in #13815
- fix(sessionstore): remember what replaying a 1.x conversation answered by @esengine in #13955
- perf(studio): stop the rail fold restyling the whole transcript on every frame by @esengine in #13957
- feat(tui): delete a saved session from the resume picker with a confirming second Ctrl+D by @esengine in #13954
- fix(shell): run user ! commands with the login shell PATH the bash tool uses by @esengine in #13956
- test(control): wait for the first turn to end before clearing the session by @esengine in #13961
- fix(studio): a running session row marks its state once by @esengine in #13963
- feat(remote): put a remote machine before another in the sidebar's book order by @esengine in #13958
- feat(sandbox): a Windows command sandbox on a write-restricted token, off by default by @esengine in #13769
- test(boot): size the compaction fixtures from their own first request by @SivanCola in #13951
- fix(studio): mark the session in front as seen whenever it is unread and the window has focus by @esengine in #13969
- feat(presets): describe each module in the add-module menu and loosen its spacing by @esengine in #13968
- fix(rail): make the current session's row distinct from hover and plain rows by @esengine in #13975
- test(builtin): skip bash confinement tests when the spec cannot be confined on this host by @esengine in #13974
- fix(migration): file each 1.x Desktop conversation under its own project, never under the one picked by @esengine in #13970
- feat(permission): ask a person when a call repeats text an external result gave the task by @esengine in #13792
- fix(lease): a path outside the workspace is its own claim, not the whole workspace by @esengine in #13973
- fix(studio): describe the startup splash as waiting for the local service by @lancy69 in #13979
- fix(studio): end a development shell with its launcher and survive a closed console / 开发版 Studio 随启动者退出,控制台关闭后不再卡死 by @SivanCola in #13720
- android: run the kernel and page as an Android app by @imcreazy in #13414
- fix(studio): wait for embedded CUA readiness / 修复 CUA 启动就绪竞态 by @SivanCola in #13985
- feat(schedule): controller port, serve routes and port types for scheduled runs by @esengine in #13755
- fix(control): tell the model its scratch directory is $TMPDIR and needs no cleanup by @SivanCola in #13946
- fix(provider): read a numeric error code in the responses and gemini models by @imcreazy in #13976
- feat(studio): mark a session read from its menu without opening it by @esengine in #13986
- fix(jobs): a job started while the manager closes no longer races its wait by @SivanCola in #13989
- fix(readiness): Delivery owes no generic check for prose outside any repository by @esengine in #13983
- fix(remote): never write an IPv6 zone into known_hosts, and skip unreadable managed lines with a warning by @esengine in #13992
- refactor(studio): split two files that are over the 800-line ceiling by @esengine in #13995
- fix(studio): a file opened from a conversation link is not reopened when Files is pressed by @esengine in #14001
- fix(composition): say which module is unavailable and why by @esengine in #14002
- ci(studio): run the session row guards in the browser guards job by @esengine in #14003
- feat(studio): mark where the new answers start when a session with unread answers opens by @esengine in #14004
- fix(studio): align the composer Git indicator with its neighbours by @lancy69 in #14000
- test(studio): give a cold lazy import more room and cap the test workers by @esengine in #14007
- remote: serve files over exec when the server refuses the sftp subsystem by @esengine in #13987
- bench(realrepo): long tasks over a pinned snapshot of this repository by @SivanCola in #13948
- fix(composition): load linked resources and explain MCP failures / 修复人设资源加载与 MCP 报错 by @SivanCola in #14006
- fix(import): do not report 1.x sidecar logs as unreadable sessions by @esengine in #14009
- feat(netdns): resolve through the servers the person named by @imcreazy in #13435
- fix(shell): restore the login-shell PATH for ! commands that a merge dropped by @xxoingr in #14010
- fix(tui): restore the resume picker's two-press delete that a merge dropped by @xxoingr in #14011
- feat(composition): load preset resources on demand / 自定义预设资源按需加载 by @SivanCola in #14015
- fix(history): index what the user said, not the blocks the host prepends by @chuiwenwei in #14022
- fix(studio): add right padding to session highlights by @lancy69 in #14021
- ci(windows): give the full-suite package timeout headroom over assembly/boot by @esengine in #14030
- build(deps): bump hono from 4.13.0 to 4.13.11 in /workers/crash-report by @dependabot[bot] in #14032
- build(deps): bump vite from 7.3.6 to 7.3.7 in /workers/forum by @dependabot[bot] in #14033
- Add file deliveries and document previews / 新增文件交付卡片与文档预览 by @SivanCola in #14031
- build(deps): bump vite from 7.3.6 to 7.3.7 in /workers/accounts by @dependabot[bot] in #14035
- fix(studio): keep the refine tip inside the ask card by @imcreazy in #14036
- fix(studio): draw a finished call's output as one text node, not one per line by @esengine in #14038
- docs(release): studio 2.47.0 notes by @esengine in #14039
Full Changelog: studio-v2.46.0...studio-v2.47.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 的包。也提供 .AppImage(只提供下载,不会自更新;需要 FUSE 2,或用 --appimage-extract-and-run 启动)。
三个平台都能自更新:Linux 的 .deb 走自己的包(.rpm 的自更新尚未提供,请手动下载新包),Windows 运行下一个安装器,macOS 替换自身 bundle。