前言¶
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 的隔離環境,配合資源限制和鉤子保留機制,適合需要在工作流中執行不受信任腳本的場景。