dsh-matlab-runner: Run MATLAB in the DSH sidebar

前言

在 DeepSeek Harness 里做数值计算或脚本调试时,常见做法是依赖 MCP 类 MATLAB 插件,把执行交给智能体工具;或者自己在终端里开 matlab -batch,和侧栏、工作区变量脱节。沙箱下的 shell 还可能在 MathWorks 配置目录无法写入时让 MATLAB 直接退出,控制台为空。

dsh-matlab-runner 走的是另一条路:在右侧边栏提供接近 VS Code 的 .m 编辑与运行面板,由宿主进程以系统用户权限拉起常驻 MATLAB 会话,图形窗口可在桌面打开,工作区变量可查看和写回;智能体侧另有 matlab_run 工具,与面板共用同一会话。下面介绍它是什么、能做什么,以及如何安装与打开。

这是什么

dsh-matlab-runner 是社区维护的 DSH 客户端(UI)插件,维护者为 seally-web,npm 包名 dsh-matlab-runner,当前版本 0.2.2,许可证 MIT(以 package.json 为准)。它不是一个「只包一层 MCP」的代理:面板本身是产品,宿主负责持久会话与 /matlab/api/*,浏览器端负责编辑器、控制台、变量与图形预览。

一个包内分成两半:

部分 入口 职责
Host lib/index.js、lib/runner.js 持久 MATLAB 会话、运行注册表、API、注册 matlab_run 工具
Browser lib/client.js 侧栏页:编辑器、脚本选择、Run/Stop/Save、控制台、图形缩略图、设置与引导卡片

与基于 MCP 的 MATLAB 插件相比,侧栏编辑与运行是主路径;智能体仍可通过 matlab_run 在同一工作区执行代码。

核心功能

两种运行模式

  1. session(默认) — 长期运行的 matlab -nodesktop -nosplash,经 stdin 喂命令。首次启动约 6–9 秒,之后单次运行约 10–30 ms,变量在多次运行间保留;figure 会在桌面打开,面板同时展示导出的 PNG。输出在脚本运行过程中流式写入控制台。
  2. batch — 每次 matlab -batch,无界面,脚本结束进程退出(单次约 15–20 秒)。适合偏 CI、跑完不留状态的场景。

侧栏与 matlab_run 共用同一会话,模型执行的代码与你手动运行的代码落在同一 MATLAB 工作区。

为何能在智能体沙箱外跑通 MATLAB

MATLAB 启动前需要向用户目录下的 MathWorks 支持路径写入配置。在 workspace-write 沙箱里,matlab -batch 可能以退出码 1 结束且控制台为空;智能体拥有的 PTY 同样受沙箱约束。本插件的 Host 通过 node:child_process 从宿主进程拉起 MATLAB,使用系统用户权限,不依赖把整段会话改成 Full access,侧栏即可正常运行。

面板能力(README 已列项)

  • 文件树 — 从面板 workdir 浏览,懒加载子目录;可挂载多个绝对路径根目录(类似 MATLAB 的 add to path),持久化在 matlab-runner.json 的 extraRoots。
  • 编辑器 — 行号、MATLAB 语法高亮,Tab 为两空格;Run(⌘/Ctrl+Enter)将缓冲区写到 <workdir>/.dsh-matlab-runner/<stem>.m 并在会话中执行。
  • 脚本选择器 — scriptDir 下所有 .m 与未保存草稿;切换文件或标签页会记住各缓冲区内容。
  • 变量 — 展示 base 工作区名称、类型、尺寸;双击可编辑字面量并通过 evalin('base', ...) 写回;每次运行后自动刷新(经 whos 写入 JSON,避免被控制台截断)。
  • 图形 — 运行产生的 .png/.jpg/.svg/.gif/.webp 在控制台下方以缩略图显示;session 模式下桌面也会弹出 figure 窗口。
  • .mlx 预览 — 本地解析(ZIP + OOXML,lib/livemd.js),只读预览标题、代码块与输出;预览时 Run/Save 禁用。
  • Stop — 中止当前脚本;session 模式下会重启 MATLAB 会话。
  • Save / 自动保存 — 可写到 scriptDir;成功运行后可自动落盘,可通过 autoSave 或设置关闭。
  • 设置 — 运行模式、图形预热、路径、超时、配置文件位置,以及 Restart session。

运行环境要求 Node >= 20(见 package.json engines)。

安装与启用

Web 侧(README 给出的 npm 安装方式):

dsh plugin --profile web add dsh-matlab-runner

桌面版 DSH 的 profile 由 Electron 应用管理,需用仓库内脚本把包复制进 profile、写入依赖与 dsh.profile.bundles、种子配置并重新 compose。在插件目录或仓库根执行:

node bin/install-local.sh

等价路径:plugins/dsh-matlab-runner/bin/install-local.sh。脚本会把内容放到 ~/.dsh/profiles/desktop/node_modules/dsh-matlab-runner 等位置。

开发时若只改了 Host 侧文件,可通过改动 ~/.dsh/profiles/desktop/package.json 中的 bundle 行触发重载(无需重启应用)。也可执行:

plugins/dsh-matlab-runner/bin/reload-host.sh

然后 ⌘/Ctrl+R 刷新页面以更新浏览器端;若侧栏仍是旧 UI,再考虑重启应用。

典型用法

  1. 安装并加载插件后,打开右侧边栏的 +,选择 MATLAB 运行器 / MATLAB runner 卡片;首次访问后标签会固定在侧栏条上。
  2. 全局快捷键:⌘/Ctrl+Shift+M 打开面板(Web 构建为 ⌘/Ctrl+Shift+Alt+M)。
  3. 在文件树中打开或新建 .m,编辑后 ⌘/Ctrl+Enter 运行,在下方控制台查看输出与耗时;若有绘图,查看缩略图或桌面 figure。
  4. 在 Σ 变量 中检查工作区;需要时用写回功能改变量后继续迭代。
  5. 若希望智能体与面板共享状态,在对话中依赖插件注册的 matlab_run 工具(与会话模式下的 workspace 一致)。

路径、超时、scriptDir、workdir 等可在面板 Settings 中调整;具体字段以插件配置文档与 matlab-runner.json 为准。

适用场景与注意

适合:已在本地安装 MATLAB、希望在 DSH 内用侧栏完成 .m 编辑/运行/看图/查变量,并偶尔让智能体在同一会话里跑短脚本的用户;需要桌面 figure 时应使用默认 session 模式。

注意:

  • 插件 Host 以当前 DSH 宿主进程对应的系统用户权限启动 MATLAB,安装前请阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。
  • 社区目录 skillhub.cn 插件页 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,本文事实以仓库 README 与 package.json 为准。
  • batch 模式较慢且无图形窗口;Stop 在 session 模式下会重启会话,长时间运算需自行权衡。
  • 仅文本扩展名可在编辑器中打开;二进制文件会提示 binary。

结尾

dsh-matlab-runner 把 MATLAB 编辑、常驻会话、工作区变量、图形与 .mlx 预览收进 DSH 右侧栏,并用宿主权限规避沙箱下 MATLAB 无法写配置目录的问题;智能体通过 matlab_run 与面板共享工作区。进一步了解与 issue 见:

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye