편집자 노트

runseal-labs/dsh-tool-runseal

RunSeal sandbox provider for DeepSeek Harness — OS-native policy-enforced command execution

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

dsh-tool-runseal

English | 中文

一个独立的 DeepSeek Harness 插件:用 RunSeal 替换内置沙箱 —— 一个 OS 原生、策略驱动的执行环境,具备可强制执行的 filesystem / process / resource / network 边界,以及结构化审计事件和环境凭据擦除。

完全独立于仓库(out-of-tree):只依赖已发布的 dsh 基础包。注册为 ctx.sandbox,因此所有现有沙箱消费者(bash、jobs、fs)都会自动通过 RunSeal 执行受限命令。

功能

说明
ctx.sandbox provider继承 SandboxProviderconfine() 通过一个薄 Node wrapper 把 argv 包到 runseal rpc 下执行
策略映射dsh 的 read-only / workspace-write / danger-full-access → 同名的 RunSeal sandbox 级别
网络模式unmanaged(默认)、disabledproxy(企业路由 + 凭据编辑)
流式输出execution.stdout / execution.stderr RPC 事件转发到消费者的 stdio;退出码正确传播
Fail closedsetup 缺失或后端不可用时,stderr 输出 runseal: <原因> 并以非零码退出,绝不静默无沙箱透传
审计每次执行产生 execution.requestedpolicy.resolvedexecution.finished 事件和 JSONL 审计记录

安装

前置:PATH 上有 runseal 二进制(或在 command 配置里给绝对路径)。Windows / macOS / Linux 的预构建二进制发布在 runseal releases 页面。

Windows 上受限模式(read-onlyworkspace-write)需要先执行一次沙箱 setup:

runseal setup windows-sandbox --cwd <workspace> --elevate

然后把插件装进 dsh profile:

cd ~/.dsh/profiles/web && pnpm add dsh-tool-runseal
# 或从源码:
#   git clone https://github.com/runseal-labs/dsh-tool-runseal && cd dsh-tool-runseal && pnpm install && pnpm build

挂载到 dsh

RunSeal 接管 ctx.sandbox。把 base bundle 的 sandbox-local 行禁用,插入本插件:

# cordis.patch.yml —— 用 RunSeal 替换内置本地沙箱
- id: sandbox-local
  disabled: true

- insert:
    - id: sandbox-runseal
      name: 'dsh-tool-runseal'
      inject: [sandbox]
      config:
        # runseal 可执行文件:绝对路径,或 PATH 上的名称
        command: 'runseal'
        # 网络模式:unmanaged(默认)、disabled 或 proxy
        networkMode: 'unmanaged'
        # 单次执行默认超时(毫秒)
        timeoutMs: 600000

注意:ctx.sandbox 是单服务键。必须禁用 base bundle 的 sandbox-local 行(或替换),RunSeal provider 才能注册。切换前请备份 patch。

配置

字段默认含义
command—(必填)runseal 可执行文件:绝对路径或 PATH 上的名称。
args[]rpc 子命令前的额外参数(不走 shell)。
networkModeunmanaged网络策略:unmanageddisabledproxy
maxStdinBytes65536bytes 模式的 stdin 上限(runseal 限制)。
timeoutMs600000单次执行默认超时(毫秒)。
autoSetuptrueWindows 上,受限执行因缺少 setup 失败时,自动为该 workspace 执行 runseal setup windows-sandbox --elevate(弹一次 UAC 让用户确认)并重试一次。

工作原理

confine() 按契约是同步的,因此立即返回 wrapper argv:

[node, wrapper.cjs, {"argv": [...], "cwd": ..., "policy": ..., "network": ..., "timeoutMs": ...}]

消费者 spawn 它时,wrapper 启动 runseal rpc --stdio,发一个 execute 请求,把 execution.stdout / execution.stderr 事件负载转发到自己的 stdio,并以命令的退出码退出。消费者看到的是普通子进程生命周期 —— 无需改动 dsh 核心。

已知限制与待办

  • stdin 不流式 —— RunSeal 的 execute 接受 stdin: { mode: 'bytes' | 'file' },不支持交互式流。wrapper 会排空消费者 stdin;长期交互命令(REPL)暂不支持。
  • Windows 受限模式的 setup 是自动的 —— autoSetup(默认开启)会在某个 workspace 的第一次受限执行时自动触发 runseal setup windows-sandbox --elevate(弹一次 UAC 让用户确认)并重试,无需手动敲命令。如想自己管理 setup,关闭该选项即可。
  • 同一时刻一个 provider —— ctx.sandbox 只接受一个 provider;从 sandbox-local 切换需要禁用它的行(上面的 patch 已做)。
  • 无回退链 —— 与 sandbox-local(bwrap→Landlock→Seatbelt→ACL)不同,本 provider 不链接其他 runner;runseal 不可用时调用直接 fail closed。

开发

pnpm typecheck   # tsc --noEmit
pnpm test        # vitest(协议 + confine 单元测试)
pnpm lint        # oxlint
pnpm build       # tsc + 复制 wrapper.cjs 到 lib/

License

MIT

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.