LM Studio 0.4.13 踩坑实录:解决 JS Sandbox 的 Deno 缺失与网络权限问题

93 阅读2分钟

在 LM Studio (版本 0.4.13) 中使用官方提供的 JavaScript 运行环境插件 lmstudio/js-code-sandbox 时,开发者经常会遇到两个阻碍代码执行的底层问题。本文将直接拆解这两个问题的根源,并提供最彻底的解决路径。

问题一:ENOENT - 找不到 deno.exe

现象

即使在系统中全局安装了 Deno 且配置了环境变量,大模型在尝试运行 JavaScript 代码时依然会报错: Error calling run_javascript: spawn C:\Users<用户名>.cache\lm-studio.internal\utils\deno.exe ENOENT

原因

该插件的底层源码(src/toolsProvider.ts)中包含一个硬编码的 getDenoPath() 函数,它强制要求 Deno 必须位于 LM Studio 的特定内部缓存目录下,从而完全无视了系统的全局环境变量配置。

解决方案(物理覆盖法)

不要尝试修改源码,直接将 Deno 文件放入指定目录:

  1. 打开 PowerShell,运行 where.exe deno 获取你系统中已安装的 deno.exe 路径。
  2. 复制该 deno.exe 文件。
  3. 打开资源管理器,进入报错信息中提示的目录(注意替换为你的真实用户名): C:\Users<用户名>.cache\lm-studio.internal\utils
  4. deno.exe 粘贴到该目录下(与原有的 node.exe 等文件同级)。
  5. 重启 LM Studio。

问题二:网络请求被拒绝 (Requires net access)

现象

解决 Deno 运行环境后,当大模型尝试执行带有 fetch 等网络请求的代码(如查询 API、获取股价等)时,Deno 会拦截并报错: Requires net access to "xxx", run again with the --allow-net flag

原因与陷阱

Deno 默认是沙箱隔离的。插件在启动 Deno 进程时,显式注入了 --deny-net 参数。

最大的陷阱在于:即使你找到了插件目录并修改了 src/toolsProvider.ts 源码,甚至在 VS Code 中进行了全局搜索替换,依然不会生效。因为 VS Code 默认会屏蔽隐藏文件夹(如 .lmstudio),而 LM Studio 实际运行的是经过 esbuild 实时编译并存放在该隐藏文件夹下的 JavaScript 最终执行文件。

解决方案(修改编译输出文件)

  1. 进入该插件的本地安装根目录。
  2. 手动在文件管理器(或强制 VS Code 显式展示隐藏目录)中打开 .lmstudio 文件夹。
  3. 找到编译后的最终配置文件:production.js(或类似命名的编译后 JS 文件)。
  4. 使用文本编辑器打开该文件,通过搜索(Ctrl + F)定位到 "deny-net"
  5. --deny-net 修改为 --allow-net(或者注释掉前者并显式添加后者)。
  6. 保存文件(Ctrl + S)。
  7. 彻底关闭并重新启动 LM Studio 以清除内存缓存。

总结

完成上述两步后,lmstudio/js-code-sandbox 插件即可在本地环境中完全打通,大模型能够顺畅地编写并执行包含网络请求的 JavaScript 代码。