zhangzujian/dsh-subprocess-inherit-environment:讓 DSH 子進程繼承完整 Harness 環境

前言

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 展開,生成一個顯式環境層,然後再合併調用方提供的環境變量條目。這樣:

  • 調用方的顯式覆蓋會保留。
  • 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
羽毛球分组比赛记分
小程序二维码

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

小夜