Skip to content

Releases: MCviseron/dsh-matlab-mcp

v0.7.1

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:07

0.7.1 - 2026-10-14

修复

  • deploy/proxy-config.mjs 非默认端口漏端口:--port 8443 时生成的 proxy_redirect 目标与 downloadMirror 行都不带端口(指向 80/443),客户端第一跳就会走进死路。现在引入 authority(默认端口省略、非默认端口补上),三处 proxy_redirect、镜像行与验证命令统一使用它。

新增

  • deploy/DEPLOY.md:服务器部署详细流程 —— 现状勘察(含按发行版/宝塔/1Panel/Docker 判断配置目录)、备份、放文件、nginx -t + reload、本机 curl 判读表、安全组放行、插件填一行、回滚,以及未备案决策树(非标端口 / IP 直连 / 境外机器)。

v0.7.0

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:07

0.7.0 - 2026-10-14

变更

  • 划清边界:服务器侧部署工具移出插件目录。原先放在 scripts/ 的 mirror-assets.mjs(建静态镜像)与 proxy-config.mjs(生成 nginx 反代配置)移到 deploy/,并配独立 README 说明「这不是插件的一部分、npm 包也不包含它」。
    • scripts/ 现在只剩插件侧内容:install.mjs(把插件装进 DSH)与各类验证探针。
    • 插件 README 把原来大段的 nginx/备案/端口内容压成一小节「制品获取(镜像 / 本地目录)」:只保留插件自身需要配置的 downloadMirror / localAssetsDir,其余指向 deploy/。
  • 插件运行逻辑不变:这两个字段是插件「从哪取制品」的配置能力(默认关闭/空值),与制品如何部署到服务器上无关。

v0.6.1

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:06

0.6.1 - 2026-10-14

修复

  • proxy-config.mjs 在 IP 场景不可用:--host 给 IP 时原来仍生成 listen 443 ssl + 证书占位符,而 IP 一般拿不到公共 CA 证书(实测 dl.159.75.130.207 这类「前缀+IP」连 DNS 都解析不了)。现在按主机名自动选择:IP → --scheme http(listen 80,不生成 ssl 指令)并给出提示;域名 → HTTPS。新增 --scheme / --port 显式覆盖。
  • 反代下 19.5 MB 二进制缓存永远 MISS:release 资产的最终 URL 带会轮换的签名串(?sp=…&se=…&sig=…),而 nginx 默认把整个 request URI 计入 cache key。生成配置现在给 /mp-assets/ 指定 proxy_cache_key "$scheme$request_method$host$uri"(仅按路径),并加 proxy_read_timeout/send_timeout 300s。
  • 生成文件的头部注释补充放置位置说明(Debian/Ubuntu 的 conf.d 已在 http{} 内;CentOS/宝塔注意 server{} 上下文)。

v0.6.0

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:05

0.6.0 - 2026-10-14

新增

  • 服务器反代配置生成器 scripts/proxy-config.mjs:输出可直接粘贴的 nginx 片段(三段上游 + 缓存 + Range 透传 + 安全限制)与对应的 DSH 镜像行,适合「不占磁盘、配置即用」的部署。
    • 实测跳转链决定了配置形态:…/releases/latest/download/X → github.com(同主机换 tag)→ release-assets.githubusercontent.com(19.5 MB 二进制终态);…/archive/refs/heads/main.zip → codeload.github.com。nginx 不跟随跳转,因此 codeload 与 release-assets 各需独立 location 并用 proxy_redirect 把跳转留在代理内,否则客户端会绕过代理直连 GitHub CDN。
    • 生成的配置默认包含 limit_except GET HEAD 与 client_max_body_size 1m 以避免开放代理,并加 X-Mirror-Cache 便于验证缓存命中。
  • 本地制品目录 localAssetsDir(可选、完全离线):命中 mirror-assets.mjs 产出的目录树时直接复制、零网络请求;优先级 本地目录 → 镜像列表 → 直连。适合内网/断网机器与「一次拷贝、多机复用」。

变更

  • 供给日志区分来源:本地目录 / local、镜像 / via mirror 或直连。

v0.5.0

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:04

0.5.0 - 2026-10-14

新增

  • 自建镜像工具 scripts/mirror-assets.mjs:在一台网络好的机器上跑一次,产出可整体上传的静态目录树(按 GitHub 路径排布,因此一个 {path} 模板即可覆盖全部制品)、mirror.json(路径 + 字节数 + sha256)、nginx.conf.example 与 README.txt(上传/部署/验证清单)。
    • 实测:4 个文件合计 38.4 MB(二进制 19.5 MB + 工具箱 0.06 MB + 两个 zipball 4.1/16.4 MB),经 gh-proxy.com 拉取 5.22 / 0.06 / 4.12 / 13.55 MB/s。
    • 支持 --via <模板>:抓取时也可走镜像;--out / --base-url / --asset / --force。
  • 端到端验证:本地起静态服务器模拟「用户自己的服务器」,在隔离的 DSH_HOME 里跑插件的真实供给流程 —— 二进制 v0.14.0 (via mirror)、工具箱 via mirror、两个技能仓均从该服务器下载,ready: true。
  • 文档新增「自建镜像」一节:静态模式(推荐)与反向代理模式的取舍,以及开放代理风险的明确警告(不得做成对全路径开放的 GitHub 代理)。

说明

  • 静态模式对服务器零副作用:不新开端口、不访问外网、无缓存进程;磁盘占用即上表 38.4 MB,CPU/内存开销可忽略。
  • 许可提示:把 MathWorks 制品放到自己的服务器供自己使用属于私有使用;发布到公共 registry/公开站点则构成再分发,需遵守其许可证(保留版权与许可声明、仅配合 MathWorks 产品使用)。

v0.4.0

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:04

0.4.0 - 2026-10-14

修复

  • 严重:点「一键安装 / 修复」后 DSH 客户端崩溃(dsh: fatal uncaught exception: Error: spawn ...bin\matlab-mcp-server-windows-x64.exe ENOENT)。
    • 根因不是文件缺失:libuv 在 cwd 不存在时同样报 spawn <exe> ENOENT(错误指向命令,实为 chdir 失败)。挂载配置的 cwd 指向 <DSH_HOME>\matlab-mcp\workspace,而全新机器上该目录从未被创建(一键安装只建了缓存根与 logs/)。新机器时间线:启动时还没有二进制 → 不挂载(安全)→ 点安装 → 二进制就位 → 路由 reconnect() → 用不存在的 cwd 启动 → 未捕获异常 → 宿主退出。
    • 实测对照:同一个真实存在的 exe,cwd 正常 → spawned ok;cwd 不存在 → ENOENT,与崩溃日志逐字一致。
    • 修复(多层防护):① buildLaunch 构造启动配置时创建 cwd 与 --log-folder;② 挂载前用我们自己的 execFile 做 --version 预检,跑不起来的二进制不再交给 MCP 客户端,改为可操作报错;③ 挂载配置在 ctx.inject(['tools']) 回调内现算,压掉「检查存在」与「真正 spawn」之间的窗口;④ probeMcp 补上 child.on('error')(此前缺该监听,同样会变成未捕获异常);⑤ 下载改为暂存校验后再原子换入(校验在 .partial 上做),失败只清理暂存文件;ensureBinary 不再「先删后下」,也不再对下载后跑不起来的二进制返回成功。
  • 这是 DSH 侧 dsh-mcp-client 的健壮性缺陷:子进程 spawn 失败以未捕获异常终止宿主。插件已从自身侧消除可预见的触发条件,仍建议向上游反馈「ChildProcess 的 'error' 事件必须被捕获」。

变更

  • 多镜像 + 镜像优先:downloadMirror 改为逗号分隔的模板列表(支持 {url} 前缀式、{path} 换主机式,兼容老的纯前缀写法);开启镜像后镜像优先、直连兜底(实测直连 0.21 MB/s vs 镜像 2.5–9.5 MB/s)。
  • 默认镜像按实测重排:gh-proxy.com → gh.llkk.cc → ghproxy.net(2026-10-14 关梯子实测:gh-proxy.com 2.53 MB/s / codeload 9.51 MB/s,ghproxy.net 0.03 MB/s,其余候选全部不通)。
  • 技能仓优先走 zipball(开启镜像时):codeload 经镜像实测 9.5 MB/s(40 MB ≈ 5 秒);git clone 直连 GitHub、绕不过镜像,退居兜底。解压成功后才切换目录,失败不会毁掉已有技能仓。
  • 设置卡新增「镜像测速」:对真实制品测 TTFB 与吞吐,并可一键「把最快的排到最前」——镜像存活期常常只有几小时,写死排序必然过期。
  • README 排障表补充:崩溃日志读法(ENOENT ≠ 文件不存在)与杀毒软件隔离的应对。

v0.3.1

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:03

0.3.1 - 2026-10-14

修复

  • 内联版在 DSH 里加载失败(matlab-mcp (dsh-matlab-mcp): failed to import):
    • 现象:0.3.0 的 lib/index.js 在 node -e、DSH 自带 Node、Electron-as-Node 三种独立进程里都能 import,但 DSH 启动时该 entry 的 fiber 始终是 undefined(dsh-app-boot 把 fiber === undefined 归类为 failed to import,真实异常只打到控制台)。
    • 定位:把 DSH 宿主的 Electron 进程当作测试环境(run_code 就运行在其中),用与加载器相同的 await import(file://…) 复现出真实异常:
      Error: Dynamic require of "child_process" is not supported at lib/index.js:11:9(栈上是 cross-spawn ← MCP SDK)。
    • 根因:把 CJS 依赖内联进 ESM bundle 后,esbuild 会把它们的 require('child_process') 改写成 __require 垫片;ESM 里没有 require 绑定时该垫片直接抛错 —— 只有真正走到宿主加载路径才会触发。
    • 修复:build.mjs 给宿主 bundle 加 banner,用 createRequire(import.meta.url) 恢复 CJS 全局(require / __filename / __dirname)。
    • 验证:在宿主 Electron 进程内 await import() 成功,resolveConfig / Config / buildLaunch 均正常。
  • CI 增补:inlined CJS dependencies must have their globals(检查 banner 关键字)与 the host bundle must import cleanly(真实 import + 导出形状断言),防止同类问题再溜过去。

v0.3.0

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:02

0.3.0 - 2026-10-14

变更

  • 插件改为「clone 下来就能用」:
    • 宿主 bundle 现在内联全部运行时依赖(@deepseek-ai/dsh-mcp-client、dsh-settings、schemastery 等),lib/index.js 只依赖 Node 内置模块 —— 实测把 node_modules 整个移走后仍能 import 成功(IMPORT OK -> Config,MATLAB_MCP_SETTINGS_NAMESPACE,apply,buildLaunch,inject,resolveConfig)。
    • lib/ 随仓库提交(移出 .gitignore),新客户端 git clone 后无需 pnpm install / pnpm build 即可加载。
    • scripts/install.mjs 相应简化:不再强制安装依赖与构建,只做接线(建 %DSH_HOME% 联接 → 写 profile → 建立/修复 node_modules 联接),没有 pnpm 也能装;新增 --rebuild 供开发者从源码重建。
  • CI(.github/workflows/check.yml):每次 push 跑 typecheck + 6 套测试 + build,并校验 ① lib/ 与全新构建一致(不会悄悄过期)② lib/index.js 里不再残留 @deepseek-ai/* 外部 import(保证自包含)。
  • dependencies 清空(依赖已内联),相关包移入 devDependencies。

v0.2.1

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 15:01

0.2.1 - 2026-10-14

新增

  • 新客户端一键安装器 scripts/install.mjs:git clone 后在仓库里跑 node scripts/install.mjs 即可完成全部接线 ——
    ① 仓库内 pnpm install(prepare 顺带构建 lib/index.js);
    ② 在 %DSH_HOME% 建 matlab-mcp-plugin 联接指向仓库(同盘路径,规避 pnpm 跨盘 link: 问题);
    ③ 给每个存在的 profile 写 dependencies / dsh.profile.bundles / cordis.patch.yml;
    ④ 在 profile 内 pnpm install,并统一修复所有失效的 link: 联接(含其它本地插件);
    ⑤ 打印后续步骤。支持 --dry-run / --profile <name> / --skip-profile-install,pnpm 缺失时给出 DSH 自带 pnpm 的用法。

修复

  • 新客户端启动报 matlab-mcp (dsh-matlab-mcp): failed to import:根因是仓库按惯例不提交构建产物(lib/ 被 .gitignore 排除)且插件从自身 node_modules 解析 @deepseek-ai/*,全新克隆后两者都不存在。安装器与文档(README「安装」第 0 节 + 排障表)现在明确覆盖这一路径。

v0.2.0

Choose a tag to compare

@MCviseron MCviseron released this 14 Oct 07:15

0.2.0 - 2026-10-14

新增

  • 聊天主界面「打开 MATLAB」按钮:注册到会话标题栏动作位 conversation.session.header.actions(独立于设置页的第二个 UI 入口),点击即打开 MATLAB 桌面窗口。
    • new 会话模式:打开独立 MATLAB 桌面窗口,按钮提示里说明 Agent 使用的是它自己启动的会话。
    • auto / existing 会话模式:以 -r shareMATLABSession 打开共享会话,MCP 服务器随后连到同一个 MATLAB —— 你能在窗口里直接看着 Agent 干活。
    • 以 detached + unref 启动,窗口独立于插件生命周期:插件卸载不会关掉它(脚本 scripts/open-matlab.ts 实测:新 MATLAB 进程出现,且归属判定为「非本插件所有」)。
    • 新增宿主路由 POST /api/dsh-matlab-mcp/open-matlab 与 buildMatlabDesktopArgs 单测。