前言¶
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