沙箱里“装 Fiber”实为注入上下文而非安装包,Fiber是Cordis内部调度原语,非独立npm模块;需通过插件effect scope、独立profile及配置对齐实现真正隔离。

沙箱里装 Fiber 不是“安装”,而是“注入上下文”
Fiber 不是传统 npm 包,它在 DeepSeek Harness(DSH)中是 Cordis 插件运行时的底层调度原语,不暴露为可 npm install 的独立依赖。你在沙箱里“装 Fiber”,实际是在隔离环境中复现 Cordis 的 effect scope 机制——即让插件的注册、副作用、卸载行为被严格绑定到某个 fiber 生命周期内。
为什么直接 npm install @deepseek-ai/fiber 会失败
因为根本不存在这个包。Fiber 是 Cordis 内部调度器的代称,不是公开发布的独立模块。你看到的 ctx.effect()、ctx.on() 等 API,背后调用的是 Cordis 自带的 fiber-aware 调度器,它随 @deepseek-ai/cordis 一起加载,且与 Node.js 版本强绑定(要求 Node.js ≥ 22.19.0)。
- 尝试
npm install fiber(小写)会装错包——那是旧版 Node.js 的 C++ Fiber 实现,与 DSH 完全不兼容 -
pnpm add @deepseek-ai/fiber返回 404:该 scope 下无此包 - 即使手动拷贝源码进沙箱,缺少 Cordis 的全局 fiber registry 和 context propagation,
ctx.effect也不会触发自动清理
正确做法:用 Cordis 插件边界天然实现沙箱隔离
DSH 的沙箱隔离不靠容器或进程,而靠插件 fiber 的 effect scope。每个插件(如 mcp-client)在 apply(ctx, config) 中注册的一切,都自动绑定到该插件的 fiber 上。fiber 卸载 → 所有 ctx.effect 回调执行 → 连接关闭、监听器移除、内存释放。
- 启动时指定独立 profile:
dsh web --profile my-sandbox,Cordis 会为该 profile 创建全新插件图,无共享状态 - 在插件内用
ctx.effect(() => { /* 初始化 */ }, 'my-sandbox.init'),标签名确保作用域可识别、可诊断 - 避免跨 fiber 引用:不要把
ctx保存到全局变量或闭包外,否则 fiber 卸载后仍持有引用,导致内存泄漏 - 验证是否隔离成功:修改插件配置后重启,观察
~/.dsh/logs/中对应 profile 的日志是否干净,无残留 connection 或 tool 注册记录
最容易被忽略的一点
沙箱隔离失效往往不出现在插件代码里,而出现在配置层——比如多个 profile 共用了同一个 serverName,导致 mcp-client 插件互相抢占命名空间;或者 .env 中的 DSH_MODEL_PROVIDER 是全局环境变量,绕过了 profile 配置隔离。真正的隔离,必须从 Cordis 的 inject 声明、effect 标签、profile 配置三者同时对齐开始。


















