前言¶
DeepSeek Harness 的官方 workflow-worker-thread 引擎使用 node:vm 作为 API 形状机制。其文档指出这不是安全边界,当脚本不可信时,需要使用不同的引擎。dsh-workflow-isolate 探索了这一接口,同时不改变面向模型的 workflow 工具。
核心功能¶
该插件是一个 QuickJS/WASM 隔离工作流引擎,主要解决模型编写的工作流脚本需要 JavaScript 能力,但又不应继承 Node.js 权限的问题。它提供以下能力:
- 提供 WorkflowEngine 服务提供者。
- 运行 QuickJS/WASM 脚本。
- 限制资源(内存、堆栈、中断燃料、时间)。
- 阻止 Node.js API(process、require、文件系统、网络、计时器)。
- 保留 DSH 工作流钩子和生命周期事件。
- 独立的 JavaScript 运行时和 realm。
- 限制并发和子代理预算。
安装与配置¶
安装插件需要将生成的 tarball 添加到 DSH profile 中。
dsh plugin --profile web add ./dsh-workflow-isolate-0.1.0.tgz
插件通过 cordis.patch.yml 配置生效。该配置会禁用默认的 workflow-worker-thread 并插入 workflow-isolate。DSH 允许每个上下文只有一个 ctx.workflowEngine 服务提供者,因此这两个引擎不能同时挂载。
若需本地源码迭代,可以使用以下命令:
dsh plugin --profile web add .
使用注意事项¶
在部署和使用时,需注意以下事实:
- 语言边界:QuickJS/WASM 是比
node:vm更强的语言边界,但并非完美的隔离。 - 主机信任:主机子代理提供者仍然受信任,可以使用配置的模型、工具、网络和凭证。
- 脚本编写:工作流正文必须使用可移植的 JavaScript,不能依赖 Node.js API、V8 特有行为或动态模块加载。
- 通信机制:子代理通过 RPC 桥连接到主机。
- 安全风险:运行时漏洞、侧信道和供应链妥协仍然相关。
- 提供者限制:
ctx.workflowEngine提供者每上下文只能有一个。
总结¶
dsh-workflow-isolate 为 DeepSeek Harness 提供了一个基于 QuickJS/WASM 的隔离环境,配合资源限制和钩子保留机制,适合需要在工作流中执行不受信任脚本的场景。