前言¶
在 DeepSeek Harness(DSH)里跑智能体时,shell 工具往往要和宿主的 sandbox、审批、输出溢出(spill)以及后台 job 对齐。完整运维套件 dsh-ops 会带上 file、PTC、discovery 等一整条组件链;若你只想在 Windows 或 POSIX 上稳定发布 ops_bash,又不想引入 @deepseek-ai/* 运行时依赖,就需要一条更窄的插件路径。下面介绍社区插件 dsh-bash(维护者 null0xfff,分类 admin-security):从 dsh-ops 0.4.1(commit dfafddc)抽出的 bash 组件,只做 shell 这一条线。
这是什么¶
dsh-bash 是标准 DSH 插件形态(dsh-plugin.json manifest v0.15 + cordis.patch.yml 中的 dsh-bash-shell 行 + ./shell 组件导出)。它把 ops_bash 发布成具备宿主管辖语义的 shell 工具,通过 ctx.get('subprocess')、ctx.get('sandboxPolicy')、ctx.get('sandbox')、ctx.get('jobs') 借用宿主服务,加载期不导入任何 @deepseek-ai/* 的运行时值(仅类型导入)。
与宿主原生 bash 工具相比:多一个 script_path 参数、更严格的参数校验,以及带 failure.code / effectState / retry 的结构化失败信息。file、PTC、discovery、panel、TUI、hide-official 等 dsh-ops 其余组件行均未移植;不再托管 PowerShell,宿主 pwsh 保持原样,仅在路由提示词中提及。
- 目录页:https://www.skillhub.cn/plugins/null0xfff/dsh-bash
- 源码:https://github.com/null0xfff/dsh-bash
- npm 包名:
dsh-bash,当前资料中版本 0.1.0,许可证 MIT
核心功能¶
ops_bash 与解析链¶
插件按 session / agent 维度发布与撤销工具,并跟随 sandboxPolicy 变化。bash 可执行文件解析顺序(src/shells/resolve.ts)为:
- 配置项
bashPath(不可用则报错,不会静默换 shell) <DSH_HOME>/dsh-bash/shells/bash/<version>/bin/bash.exe- 包内
vendor/bash/<platform>-<arch>/或@dsh-bash/bash-<platform>-<arch>平台包 - 仅当
allowSystemShellFallback: true时回落 PATH 与常见安装位置(Windows 会排除 WSL 的System32\bash.exe)
POSIX 上可直接使用发行版自带的 bash,同样支持 bashPath 覆盖。
Windows bash 载荷与受限模式¶
Windows 无内置 POSIX bash 时,可用运维命令下载并校验钉住的上游发行版(PortableGit 2.56.0.2):
node bin/dsh-bash.mjs provision
node bin/dsh-bash.mjs status
danger-full-access 下任意解析到的 bash 均可执行。在 read-only / workspace-write 等受限模式下,Windows 仅运行固定版本的 MSYS:需存在 runtime/win32-x64/bash-ipc/provenance.json,并对 msys-2.0.dll 与 IPC 代理 DLL 做摘要校验。构建 IPC 代理需要 MSVC 工具链:
$env:DSH_OPS_VCVARS64 = "C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
node bin/dsh-bash.mjs build-ipc
无回执时受限模式会明确拒绝并给出修复路径,不会退化为不受限执行。
配置(cordis.patch.yml 中的 dsh-bash-shell 行)¶
| 键 | 默认 | 说明 |
|---|---|---|
bashPath |
— | 绝对路径;设置后以它为准 |
publishBashTool |
true |
是否发布 ops_bash |
shellPolicy |
advise |
deny-host-shell 会隐藏并拒绝宿主 bash / pwsh / pwsh_persistent |
deniedHostTools |
上述三个 | deny-host-shell 的拒绝清单 |
promptPolicy |
true |
是否发布 shell 路由提示词段 |
extraGuidance |
"" |
追加到提示词段的说明 |
allowSystemShellFallback |
false |
是否允许回落系统 bash(Windows 需显式打开) |
serverName、enableShellTools、toolCallTimeoutMs 为自 dsh-ops 迁移时的遗留键:接受并忽略,便于复制旧配置。
与 dsh-ops 并存¶
包名、配置段名、DSH_HOME 子目录均为 dsh-bash,与 dsh-ops 互不读取对方 store。无 file 工具凭据围栏、结果引用或 PTC SDK,因此不需要 ctx.get('result') 等服务。
安装与启用¶
仓库 lib/ 已提交,从 git 安装无需本地 TypeScript 编译。桌面端须使用应用自带的 CLI:
# 从 GitHub 安装
& "<安装目录>\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:null0xfff/dsh-bash
# 或使用 npm 包(发布后)
& "<安装目录>\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add dsh-bash
安装后在插件包目录或克隆路径中执行一次 bash 载荷 provision,并重启应用或重载 profile:
node bin/dsh-bash.mjs provision
node bin/dsh-bash.mjs status
只读检查某个 profile 的安装状态(不启动应用):
node scripts/verify-install.mjs desktop
README 记载:在临时 profile 上 dsh plugin --profile <new> add github:null0xfff/dsh-bash 后启动 web 应用,--dump-config 中应出现 # == dsh-bash → dsh-bash-shell 行,stderr 无 did not activate 警告,表示 Loader 成功激活该行。
典型用法¶
智能体侧调用的是插件发布的 ops_bash,而非直接绑定宿主默认 bash。相对宿主工具,常见参数差异包括 script_path(执行指定脚本路径)。具体参数表与输出 schema 与仓库内 tool-contract 测试及 manifest 声明一致;开发者在启用 deny-host-shell 后应通过 ops_bash 完成 shell 类操作,避免误调已被拒绝的宿主 shell 工具。
运维侧日常三步:
plugin add装入 profile 的 bundlesnode bin/dsh-bash.mjs provision(Windows 尤其需要)- 重启 DSH 应用,确认工具表中出现
ops_bash
适用场景与注意¶
适合:只需要 dsh-ops 里 bash / sandbox / spill / job 语义、希望与 dsh-ops 并行安装、或希望减小插件依赖面(不拉 file 与 PTC 组件)的 DSH 用户与插件作者。
注意:
- 插件以当前 DSH 进程权限运行;安装前请阅读源码、
LICENSE、NOTICE与docs/PROVENANCE.md,确认二次开发来源(dsh-ops 0.4.1 MIT;部分文件改编自@deepseek-ai/dsh-tool-bash0.2.0-rc.2 MIT)符合你的合规要求。 - Windows 受限模式依赖自构建的 bash-ipc;无 MSVC 时
status可能显示restricted modes: unavailable,属文档描述的预期行为。 - SkillHub 目录为社区站点,与 DeepSeek / 幻方无官方从属关系;星标等元数据以目录页与 GitHub 为准(资料中 GitHub 星标为 0)。
结尾¶
dsh-bash 把 dsh-ops 的 bash 能力收成单组件插件:固定 manifest、可验证的 bash 解析与 Windows 载荷、以及与宿主 sandbox 对齐的 ops_bash。若你的场景是「只要 shell 工具、不要整包 ops」,可以从目录页了解卡片信息,并在 GitHub 查看完整 README、CI(ubuntu 上 10 个测试套件)与安装说明。