dsh-workspace-envrc:在 DSH 工作區中集成原生 direnv 環境

DeepSeek Harness (DSH) 採用插件化架構,在處理工作區環境配置時,開發者往往希望複用本地已配置的 .envrc 文件。DSH 的原生環境管理與 direnv 的行爲存在差異,直接在 DSH 進程中解析 .envrc 會帶來狀態管理的複雜性。dsh-workspace-envrc 插件旨在解決這個問題,它將 .envrc 的發現、求值、授權校驗等邏輯完全委託給宿主機已安裝的 direnv 可執行文件,從而在 DSH 中實現原生 direnv 的環境行爲。

這是一個由 TTTPOB 維護的 Out-of-tree DSH bundle。它的核心作用是將本機原生 direnv 環境應用到顯式歸屬於 Agent 或 workspace 的 Bash 執行,以及本地 stdio workspace MCP 行。插件不直接解析或 source .envrc,也不維護自身的授權數據庫,而是通過調用宿主 direnv 來完成所有環境變更。

核心功能

  1. Bash 環境集成:集成插件可逆裝飾 ctx.shell.resolve。當調用存在當前 initiator Agent,且該 Agent 映射到 canonical workspace 時,插件會將 request.command 替換爲通過 direnv exec 啓動的命令,確保環境變量由 direnv 管理。
  2. MCP 環境集成:集成插件可逆裝飾 ctx.workspaceMcp.activate。只有映射到 canonical workspace 的本地 stdio MCP 行會被包裝,使其在執行時應用 direnv 環境。
  3. 完全委託:插件將 .envrc 的發現、求值、授權 hash、allow/deny 邏輯及 stdlib 處理全部委託給已安裝的 direnv 可執行文件,插件自身不持有環境快照或授權數據。

安裝與啓用

安裝前請確保宿主機已安裝 direnv,並且系統已安裝依賴的 dsh-workspace-overlay。按照以下步驟操作:

  1. 先安裝 overlay bundle:
    dsh plugin --profile web add https://github.com/TTTPOB/dsh-workspace-overlay/releases/download/v0.1.1/dsh-workspace-overlay-0.1.1.tgz
  1. 再安裝 envrc bundle:
    dsh plugin --profile web add https://github.com/TTTPOB/dsh-workspace-envrc/releases/download/v0.1.1/dsh-workspace-envrc-0.1.1.tgz
  1. 導出配置以驗證安裝:
    dsh --profile web --dump-config

安裝完成後,請檢查模塊解析和最終組合。確保 dsh.profile.bundles 中 overlay 在 envrc 之前,並重啓 Host。

配置與使用

插件的配置通過 WorkspaceEnvrcConfig 接口定義,默認值如下:

executable: direnv
shimShell: /bin/bash
enableBash: true
enableWorkspaceMcp: true
versionCheckTimeoutMs: 5000

激活與預檢:
激活 preflight 時,插件會運行 direnv version 和一個受限的 shim 探針,以驗證 direnv 是否可用,但此時不會讀取 workspace 的 .envrc。

授權管理:
授權過程完全由宿主機的 direnv 處理。用戶必須在 DSH 外執行 direnv allow <exact .envrc>。插件不會向模型暴露 allow/deny 工具,也不會調用 direnv allow/permit/grant/edit。

工作原理:
對於 Bash,插件通過 exec direnv exec <canonical-workspace> <managed-env-shim> <original-command> 啓動新進程,原程序 cwd 保持調用方解析值。對於 MCP,插件只改寫 command/args,不改變 cwd 或顯式 env。

適用場景與注意

不支持的功能:
本 bundle 不支持 persistent shell 或 terminal creation。DSH 將 terminals 掛載在 preset 私有 isolated realm 中,而本插件作爲 Host profile layer,依賴尚未穩定的內部掛載 API 來實現該功能,因此目前受限。

安全與邊界:
1. 無狀態:插件不修改 Harness 的 process.env,不同 workspace 的執行按 Agent scope 解析,不共享 mutable workspace 狀態。
2. 隱私保護:插件不讀取、記錄或打印完整的 env snapshot、.envrc 內容、stdout/stderr 或 secret。
3. 沙箱限制:當前 overlay MCP stdio transport 沒有 sandbox/confine seam,因此 MCP 子進程和 .envrc 求值使用 transport 的宿主進程權限,不宣稱與 Bash sandbox 等價。

總結

dsh-workspace-envrc 插供了一種非侵入式的方式,讓 DSH 能夠利用宿主機原生的 direnv 能力來管理工作區環境。它通過委託機制避免了在 DSH 內部維護環境狀態,適合需要在 DSH 中無縫使用本地 .envrc 配置的開發場景。

羽毛球分组比赛记分
小程序二维码

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

小夜