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 配置的开发场景。

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

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

小夜