前言¶
DSH(DeepSeek Harness)以插件方式扩展能力,子进程环境处理也可以被插件改变。默认情况下,DSH 在创建子进程前会清洗父进程环境:变量名匹配 KEY、PASSWORD、SECRET 或 TOKEN,以及 ambient DSH_* 名称会被移除,然后才合并显式请求中的环境条目。
这能减少敏感变量流入子进程,但也可能让某些本地 CLI、脚本或 MCP server 拿不到当前 Harness 进程中的完整环境。zhangzujian/dsh-subprocess-inherit-environment 就是为这个场景准备的一个可移除 DSH 插件:它会刻意把 Harness 进程的完整环境通过 ctx.subprocess 服务传给子进程。
这是什么¶
- 维护者:
zhangzujian - 许可证:
MIT - 仓库名:
zhangzujian/dsh-subprocess-inherit-environment - npm 包名:
@zhangzujian/dsh-subprocess-inherit-environment - 核心价值:让经由
ctx.subprocess创建子进程的调用方继承完整process.env
它解决的是“子进程拿不到完整环境”的问题,不是通用的环境变量管理工具。它也不会影响绕过 ctx.subprocess、直接调用 Node.js process APIs、worker APIs 或 SDK-owned spawn 的代码。
核心功能¶
插件会包装 ctx.subprocess 的以下操作:
resolveExecutable(command, env, signal)
spawn(spec)
spawnTerminal(spec)
每次调用时,插件会先基于新的 process.env 展开,生成一个显式环境层,然后再合并调用方提供的环境变量条目。这样:
- 调用方的显式覆盖会保留。
undefinedtombstone 会保留原有含义。- 插件不会修改调用方拥有的请求对象。
与 DSH 默认的凭据清洗相比,这个插件会让使用被包装 subprocess 服务的调用方能够把 Harness 进程中的 API keys、tokens、passwords、secrets、cookies、proxy credentials 以及其他环境值传给子进程。
安装与移除¶
仓库提供的方式是先克隆仓库,再把本地目录加入 DSH profile。下面是 web profile 的安装步骤:
git clone https://github.com/zhangzujian/dsh-subprocess-inherit-environment.git
cd dsh-subprocess-inherit-environment
npx @deepseek-ai/dsh@0.1.0-rc.6 plugin --profile web add "$PWD"
如果当前 profile 不热加载插件,需要在添加后重启 DSH。
移除插件并恢复 DSH 默认的凭据清洗:
npx @deepseek-ai/dsh@0.1.0-rc.6 plugin --profile web remove @zhangzujian/dsh-subprocess-inherit-environment
也可以配置本地文件 URL overlay:
- insert:
- id: subprocess-inherit-environment
name: file:///absolute/path/to/dsh-subprocess-inherit-environment/index.mjs
测试¶
单元测试要求 Node.js 22 或更高版本:
npm test
集成测试会针对已安装的 DSH 树运行,用于验证原始 scrub、环境继承和卸载恢复,并且不打印任何 secret value:
DSH_INSTALL_DIR=/path/to/dsh/install npm run test:integration
其中 DSH_INSTALL_DIR 是包含 node_modules/@deepseek-ai 的目录。
适用场景与注意事项¶
适合:
- 在专用、可信的本地 DSH 部署中,明确需要子进程继承当前 Harness 完整环境。
- 某些本地 CLI、仓库脚本、包安装器或 MCP server 需要读取当前进程中的环境值。
- 安装前已经检查过源码、许可证,并能控制该 DSH 进程可访问的环境变量范围。
不适合:
- 共享或不可信 Harness 部署。
- 需要保留 DSH 默认凭据隔离的场景。
- 只希望放行少量精确变量,而不是完整继承
process.env的场景。
使用时先明确风险:
- 插件会禁用 DSH 的 subprocess credential isolation。
- 插件本身不会记录环境名或值,但不会阻止子进程打印或传输这些值。
- 模型生成命令、仓库脚本、包安装器、CLIs、MCP servers 和终端程序都可能读取或外泄这些环境值。
- 能使用 dedicated tool 或 exact variable allowlist 时,优先使用这些更窄的方式。
- 插件以当前
dsh进程权限运行,安装前应检查源码与MIT许可证。
卸载行为¶
插件被移除后,会先让已安装的 wrappers 失效;如果插件仍拥有相应的 method descriptors,会恢复先前的 method descriptors。同一 subprocess runtime 上只允许一个 active installation;如果已有 active installation,新的安装会被拒绝,以避免卸载顺序不明确。
结尾¶
这个插件的价值很具体:当 DSH 默认的环境清洗阻断了某些本地工具时,可以用它把完整 Harness 环境透传给子进程;代价是降低 subprocess 凭据隔离,因此更适合专用部署和受控环境。
仓库地址:
https://github.com/zhangzujian/dsh-subprocess-inherit-environment
目录页(独立站点):
https://www.skillhub.cn/plugins/zhangzujian/dsh-subprocess-inherit-environment