Back to home@Neutron3529

dsh-plugin-tool-gaming-host

一个允许agent借助gaming程序直接访问宿主机的插件。日后或许会搞个网页版,把gaming改成bwrap然后允许传参什么的,但现在,这个库只有最基础的功能

Stars
0
Language
Rust
Created
Sep 10, 2026
Updated
Sep 10, 2026

Introduction

gaming-runner + host_exec —— 让 DSH 沙箱 agent 调用宿主机程序

DSH 把 agent 的 bash 关在 Landlock 沙箱里,沙箱里的 agent 调不动需要宿主 资源的程序(GPU / 图形 / 宿主配置)。本仓库提供一个完整的桥:

┌───────────────────── DSH agent (sandbox, Landlock) ─────────────────────┐
│ bash:  hrexec ./x.sh       或   原生工具 host_exec {script|path, ...}   │
└───────────────────────────────┬──────────────────────────────────────────┘
                                │ HTTP+JSON, 127.0.0.1:9955 (token 可选)
┌───────────────────────────────▼────────────── 宿主侧(无 Landlock)─────┐
│ gaming-runner (Rust daemon, systemd 常驻)                                │
│   1. 收脚本 → 写 /tmp/hrexec-*/run.sh + wrap.sh                          │
│   2. cd 工作目录 → /usr/bin/gaming ./wrap.sh <args>   (bubblewrap 隔离)  │
│   3. 真实退出码经 wrap.sh 写回 rc 文件;stdout/stderr 捕获、超时强杀      │
└──────────────────────────────────────────────────────────────────────────┘

gaming 负责「隔离宿主敏感文件」的边界;runner 只是把沙箱 agent 的请求安全 地转成宿主侧的 gaming 调用,从而能用上宿主为 gaming 开放的能力(例如 gaming-gpu 提供的显卡访问)。

目录

路径内容
gaming-runner/Rust 守护进程(nightly + edition 2024):源码、deploy/(systemd unit + install.sh)、README
bin/hrexecPython 客户端:沙箱 agent 一行命令执行宿主脚本;零依赖(标准库)
dsh-plugin-tool-gaming-host/DSH 原生工具插件host_exec):src/ 源码、预构建 lib/INSTALL.md
install-to-dsh.sh安装器:把插件装进 $DSH_HOME 运行时树并在 preset 挂载(幂等,支持 --uninstall
README.md本文件

快速开始

# 1. 构建 runner(本机 nightly/2024;依赖 serde_json)
cd gaming-runner && cargo build --release

# 2. 宿主机上启动(示例,正式用 systemd:sudo ./deploy/install.sh)
./target/release/gaming-runner --listen 127.0.0.1:9955 &

# 3. 冒烟测试
curl -s http://127.0.0.1:9955/health
printf '#!/bin/bash\necho 123\nexit 7\n' > /tmp/t.sh
../bin/hrexec -- /tmp/t.sh; echo "exit=$?"     # stdout=123, exit=7

# 4. 在 agent 会话里(任意任务)用客户端跑需要宿主能力的脚本:
/me/caller/bin/hrexec --env DISPLAY=:0 -- ./gpu-tool.sh --frames 100

三种 agent 集成方式对比

方式改动生效时机适用
bin/hrexec(bash 调)无(脚本放 PATH/workspace)立即,任意会话生产打包部署、验证阶段
原生工具 host_exec./install-to-dsh.sh写入 $DSH_HOME 运行时树 + preset 行重启 host 后新会话想让模型原生可见
自写 HTTP 客户端立即gaming-runner/README.md 协议自接

install-to-dsh.sh 把插件装进 $DSH_HOME/profiles/node_modules/@deepseek-ai/ (host 解析 preset 插件名的运行时树),不改动 deepseek-harness 源码仓库。

安全模型(务必读)

  • 信任链:runner(宿主用户)+ gaming 隔离 ≈ 一个「宿主机上的 gaming 执行入口」。能连上端口的 agent 等于被授予该权限;gaming 不暴露的敏感 文件,agent 依旧看不到。
  • runner 默认只绑 127.0.0.1--token 可拦同机其他用户;并发/超时/体积 都有上限(--concurrency--timeout--max-body/out)。
  • wrapper(gaming / gaming-gpu)是部署决策,调用方不能覆盖;需要 显卡就给 GPU 单独起实例、单独端口/信任层。
  • agent 沙箱的 /tmp 每次调用私有:写临时文件请用 workspace(/me/... 等 与宿主共享的路径),这也是 path 模式能直接跑 workspace 脚本的原因。

测试与验证状态

在本机已完成端到端验证:健康检查、内容/路径模式、args/env/cwd、真实退出码 透传、超时强杀、参数冲突校验、hrexec 文件/--stdin/--run-path、ANSI 输出 剥离。gaming 的真实退出码语义(自身恒 0、子进程状态打在 stderr)已通过 wrap.sh + rc 文件绕开,不依赖解析它的文本输出。

关于本机环境的适配说明

  • 本会话的 $HOME/.cargo/usr/lib/rustup 只读:用 CARGO_HOME/RUSTUP_HOME 指向可写目录构建(rustup toolchain install stable 一次即可),工程按宿主配置用 nightly + edition 2024。
  • 在真正的宿主机上把 deploy/install.sh 跑一遍即可常驻,供此后所有任务复用。