dsh-envsel:在 DSH 会话里选择 Python、R 与 CLI 环境

前言

在 DeepSeek Harness(DSH)的 web 会话里,模型可能会调用 shell 执行 Python、R 或命令行工具。不同任务常需要不同环境:一个 conda 环境、某个 standalone R 安装、某个 WSL 发行版,或者一个手动指定的解释器路径。

dsh-envsel 做的事情比较具体:给 DSH 会话提供 Python、R 和 CLI tools 三个环境槽位,允许从 conda、standalone R、WSL 或用户固定的自定义路径中选择,并把选择持久化到重启之后。

这是什么

dsh-envsel 是 beihzb 维护的独立 DSH 插件,包名是 @beihaizb/dsh-envsel,许可证为 MIT。它通过 --profile web 安装,属于 npm-installable 插件。

它解决的问题是:同一个 DSH 实例里,不同会话可以绑定不同的语言环境,并且模型在 shell 调用里能看到这些选择。

核心功能

下面列出插件提供的能力:

  • 按会话保存环境选择,重启后仍然保留。
  • 为 Python、R 和 CLI tools 分别提供环境槽位。
  • 环境来源包括 conda、standalone R 安装、WSL 发行版,以及用户固定的自定义路径。
  • 在聊天中使用 /env 命令读取、分配、清除和列出环境。
  • 提供 session_env 模型工具,让模型可以列出、选择、固定和取消固定环境。
  • 为 shell 调用暴露 DSH_ENV_PYTHONDSH_ENV_RSCRIPTDSH_ENV_CLI_PREFIX 这几个 shell facts。
  • 在会话页头部提供 Env 下拉菜单,可按语言选择,并用 Add path 表单固定解释器或安装目录。
  • 界面文案跟随 DSH 的语言设置,即 bilingual UI。

安装与启用

插件要求 DSH 版本为 0.1.0-rc.7,或兼容的 0.1.0-rc.x web profile。它还要求 PATH 中存在 pnpm,因为 dsh plugin 会用到。

先确认 DSH 和 pnpm 可用,然后执行:

dsh plugin --profile web add @beihaizb/dsh-envsel

如果你使用本地源码仓库,也可以用本地路径安装:

dsh plugin --profile web add "file:/absolute/path/to/this/repo"

经过上面的步骤后,插件会作为 web profile 的独立插件接入。随后可以用 /envsession_env 管理当前会话的环境选择。

典型用法

使用 /env 命令

/env 是面向聊天窗口的主入口。常用形式如下:

/env
/env python=mycondaenv
/env r=R-latest
/env cli=base
/env list [filter]
/env add <path>
/env unpin custom:<name>
/env clear
/env wsl

各条命令的作用:

1、/env:查看当前选择。

2、/env python=mycondaenv:把 Python 槽位设置为指定环境名。

3、/env r=R-latest:把 R 槽位设置为指定环境名。

4、/env cli=base:把 CLI 槽位设置为 PATH prefix。

5、/env list [filter]:列出可发现的环境,可按 filter 过滤。

6、/env add <path>:记住本机上的一个解释器或安装目录。

7、/env unpin custom:<name>:忘记一个已固定的路径。

8、/env clear:清空所有槽位。

9、/env wsl:在 Windows 上重新扫描 WSL 发行版;非 Windows 主机会跳过 WSL 扫描。

使用 session_env 工具

模型也可以自己管理环境。session_env 支持列出、选择、固定和取消固定环境。适合在对话中让模型根据任务选择环境,而不是每次手动输入 /env

使用会话头部 Env 菜单

会话头部会提供 Env 下拉菜单。它可以按 Python、R、CLI tools 分开选择,也提供 Add path 表单,用于固定一个绝对路径的解释器或安装目录。

选择如何生效

这里有一个容易误解的点:dsh-envsel 的选择不会以 runtime-context 文本渲染进模型 system prompt。模型看到当前选择的方式主要有两条:

  • 每次 shell 调用都会看到 DSH_ENV_PYTHONDSH_ENV_RSCRIPTDSH_ENV_CLI_PREFIX
  • 模型可以通过 /envsession_env 查询当前状态。

选择保存在本机 JSON store:

$DSH_HOME/envsel-state.json

该文件按 session id 作为键。选择不写入 session event log。

可选配置

插件可以无配置使用。如果你的 profile 使用 cordis.patch.yml,可以在 envsel 行下配置可选项。已核实的配置键包括:

  • listTtlMs
  • condaCommand
  • standaloneRRoots
  • wslEnabled
  • registerTool
  • probeTimeoutMs

例如,可以在 envsel 行的 config 下设置:

config:
  wslEnabled: false
  registerTool: true

适用场景与注意

适合:

  • 需要多个 DSH 会话使用不同 Python、R 或 CLI 环境。
  • 环境来源是 conda、standalone R、WSL 或自定义路径。
  • 希望模型在 shell 调用中通过 DSH_ENV_* 看到当前选择。
  • 希望用 /envsession_env 在会话中管理环境。

注意:

  • 插件以当前 dsh 进程权限运行。安装前应检查源码和许可证。本插件声明 MIT 许可证。
  • 插件 peer-bound 到 @deepseek-ai/dsh-*@^0.1.0-rc.7,使用前应确认 DSH 版本在要求范围内。
  • WSL 扫描只在 Windows 上启用,非 Windows 主机自动跳过。
  • 选择不会写入模型 system prompt,而是通过 shell facts 和 /env / session_env 暴露。
  • DSH 插件目录是独立站点,不等同于官方应用商店。已核实资料未提供星标数量或目录页 URL,本文不拼接不可核实的链接。

结尾

dsh-envsel 的价值在于把“这个会话用哪个 Python / R / CLI 环境”变成会话级、可持久化、可被模型查询的状态。适合在 DSH web profile 中处理多语言环境切换的开发者。

GitHub 仓库:

https://github.com/beihzb/dsh-envsel

目录页链接:已核实资料未提供 URL,本文不给出;如需检索,可搜索包名 @beihaizb/dsh-envsel

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

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

小夜