zhangzujian/dsh-subprocess-inherit-environment:让 DSH 子进程继承完整 Harness 环境

前言

DSH(DeepSeek Harness)以插件方式扩展能力,子进程环境处理也可以被插件改变。默认情况下,DSH 在创建子进程前会清洗父进程环境:变量名匹配 KEYPASSWORDSECRETTOKEN,以及 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 展开,生成一个显式环境层,然后再合并调用方提供的环境变量条目。这样:

  • 调用方的显式覆盖会保留。
  • undefined tombstone 会保留原有含义。
  • 插件不会修改调用方拥有的请求对象。

与 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 的场景。

使用时先明确风险:

  1. 插件会禁用 DSH 的 subprocess credential isolation。
  2. 插件本身不会记录环境名或值,但不会阻止子进程打印或传输这些值。
  3. 模型生成命令、仓库脚本、包安装器、CLIs、MCP servers 和终端程序都可能读取或外泄这些环境值。
  4. 能使用 dedicated tool 或 exact variable allowlist 时,优先使用这些更窄的方式。
  5. 插件以当前 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye