← 返回列表
未验证
在容器内运行代理的执行世界——这样它就能在启动它的框架消亡后继续存活。
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/18 · 已提供中文文档
DeepSeek Harness 的远程执行世界:在容器内运行智能体的 Bash、终端、LSP 和文件工具。零依赖。
综合分
29
GitHub 分
29
用户评分
—
★ Stars
3
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add frozo-ai/dsh-worlds该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-fs@deepseek-ai/dsh-subprocess@deepseek-ai/cordis用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-worlds
在容器内运行代理的执行世界——这样它就能在启动它的框架消亡后继续存活。
DeepSeek Harness 在 packages/terminal/terminal/README.md 中记录了这一限制:
“会话是进程本地的,在框架重启后不会被恢复。”
会话日志是持久的。但代理所操作的计算机不是——shell 会随框架一起消亡,同时带走你的 cwd、导出的变量和后台进程。
dsh-worlds 通过将执行世界移入 Docker 容器来解决这个问题。无需 CRIU,无需 microVM:容器只是比它的客户端活得更久。
harness process A harness process B (a different process)
| |
+------> [ container: dsh-world ] “现有的 dsh-bash-local、dsh-terminal-bash 和 dsh-lsp-stdio 无需任何分叉。它们将每一个执行世界操作都委托给 ctx.fs 和 ctx.subprocess。”
实现这两个接缝后,Bash、持久 PTY 终端、LSP 以及所有文件工具都会自动迁移到容器中。这是一份刻意的架构馈赠,而本项目正是你接受它之后所发生的事。
状态
| 能力 | 检查数 |
|---|---|
| Docker Engine API 客户端 + 流解复用 | 11 单元 + 12 实机 |
| ctx.fs — 全部 12 个方法 | 38 实机 |
| 有界收集缓冲区(基于偏移、非消耗性) | 11 单元 |
| ctx.subprocess — spawn、进程树终止、waitForExit | 22 实机 |
| PTY — spawnTerminal、resize、前台信号 | 17 实机 |
| 总计 | 111 |
零 npm 依赖。仅使用 node:http、node:net、node:crypto。
试一试
需要 Docker 以及一个已构建的 dsh 检出。
sh
git clone https://github.com/frozo-ai/dsh-worlds
cd dsh-worlds
npm test # unit suites, no Docker needed
npm run verify # live: Docker client
npm run verify:fs # live: filesystem provider
npm run verify:subprocess
npm run verify:terminal
然后将其安装到一个 dsh profile 中——它附带一个 dsh.bundle 清单,因此
可以按包名挂载,无需编辑路径:
sh
dsh plugin --profile headless add github:frozo-ai/dsh-worlds
将 dsh-worlds 添加到该 profile 的 dsh.profile.bundles 中,然后正常运
行——无需 --patch 标志:
sh
dsh --profile headless "use the terminal tool and run: tty; cat /etc/alpine-release"
-> /dev/pts/0
3.24.1
演示
sh
harness A: create state, start a background process, then exit
dsh --profile headless "bash: echo session-state-v1 > /srv/state.txt && (nohup sleep 900 &)"
harness B: a brand new process, same world
dsh --profile headless "bash: cat /srv/state.txt; ps -o args | grep '[s]leep 900'"
-> session-state-v1
sleep 900 <-- 由一个已不存在的测试框架启动
诚实的局限
- 容器是边界,而不是沙箱接缝。 该 overlay 禁用了 sandbox、bash-sandbox 和 permission-presets,并强制使用 danger-full-access。每次调用的沙箱模式(read-only / workspace-write)不再在 bash 层强制执行。主机隔离对于一个不在此内核上运行的进程毫无意义——但容器围住的是主机,而不是工作区,这更为粗糙。
- stdin: 'pipe'(持续的协议写入)尚未实现;它会大声报错而不是挂起。批量 stdin: { data } 可以正常工作。
- inputWaiting 是一种启发式判断——仅凭 /proc 无法区分被阻塞的 tty 读取和空闲休眠。
- 镜像必须提供 bash、ps 和 base64。 DockerWorld 在缺失时通过 apk 或 apt 安装 bash/procps,如果无法安装则会大声报错。
- 路径镜像: dsh 将主机工作区路径作为 cwd 传入,而 provider 会在容器内创建它。真正的工作区访问需要绑定挂载(WorldConfig 中的 binds)。
- dsh 本身是一个带有破坏性变更的开发者预览版;请固定版本。
SCOPE.md 包含完整的接口映射、大小基准测试,以及在此过程中发现的每一个 bug。
MIT。与 DeepSeek AI 无关联。同作者(frozo-ai)的其他插件
扫码进群