dsh-terminal-shell:在 Windows 上为智能体选择终端 Shell

前言

DeepSeek Harness(DSH)在 Windows 上默认只向智能体暴露 PowerShell 终端工具;平台矩阵里 bash 家族被平台断言关闭,全局 ctx.shell 又是单实例服务,因此无法在不动第一方组合的前提下直接调用 Git Bash。若你希望模型在 Windows 上通过 git、grep、make 等 POSIX 工具链执行命令,或只想用系统自带的 cmd.exe 批处理语义,就需要在会话创建阶段把终端工具换成对应 shell。社区插件 dsh-terminal-shell(维护者 road-kid)在官方尚未提供内置「终端 / shell 选择」能力前,用会话级隔离替换实现上述切换;DSH 一旦提供等价能力,可从 profile 依赖中移除插件并重启即可回到官方行为。

这是什么

dsh-terminal-shell 是 DSH 的客户端类插件(当前版本 0.2.1,MIT 许可)。它在 Windows 的 DSH Desktop / Web shell 上增加一行设置:在 PowerShell(pwsh)、本机 Git Bash(bash) 与 cmd.exe(cmd) 之间选择智能体工具调用所使用的 shell。默认 dialect: 'pwsh' 与未装插件时一致;改为 bash 或 cmd 后,仅新会话的工具目录会出现对应工具并隐藏被替换的 shell 工具,已打开的会话不变。配置写入当前 profile 的 patch 层,不修改 DSH 安装目录、不改动 preset 文件、不接管全局 ctx.shell。

插件目录页:skillhub.cn/plugins/road-kid/dsh-terminal-shell(社区站点,与 DeepSeek / 幻方无官方从属关系)。源码:github.com/road-kid/dsh-terminal-shell。

核心功能

三种方言共用同一套设置,差别在于工具名、执行器与命令传输方式:

方言 工具 典型用途
pwsh(默认) 官方 pwsh 安装插件但不改变行为
bash 官方 @deepseek-ai/dsh-tool-bash + GitBashExecutor POSIX 工具链(git / ls / grep / sed / make / gcc 等)
cmd 插件内移植的 cmd 工具 + CmdExecutor 仅依赖系统 cmd.exe,无需 Git Bash

工作原理可概括为:在新会话的 agent/created 钩子里,于 agentCtx.isolate('shell') 子树注册对应执行器与工具,对继承层 restrict 隐藏 pwsh(cmd 方言还会隐藏继承的 bash),并清空 tool:pwsh 提示词段。超时、输出收集、沙箱权限升级等行为主要复用官方实现。

安装与启用

前置条件

  1. Windows:cordis.patch.yml 在非 Windows 上整行不加载。
  2. DSH Desktop 版本满足 engines.dsh:>=0.2.1-rc.2 <0.3.0;Node >=22。
  3. 使用 bash 方言:本机已安装 Git for Windows(或 MSYS2 / Cygwin)。
  4. 使用 cmd 方言:系统自带 %ComSpec% 即可。

安装步骤

下面步骤摘自插件 README,在已取得源码的仓库目录中构建并装入 profile(示例 profile 名为 desktop):

# 1. 构建(产物在 lib/)
cd dsh-terminal-shell
npm install
npm run check

# 2. 装进 profile
#    用插件管理器从本地目录安装:
#    plugin_manager install_bundle → target = 本仓库的绝对路径
npm pack
# 或把 tarball / 目录放进 profile 的依赖里,例如
#   C:\Users\<you>\.dsh\profiles\desktop\package.json

profile 组合层会读取包内的 cordis.patch.yml,插入 terminal-shell 插件行。安装或升级后必须重启 DSH;仅装插件、保持默认 pwsh 时,会话行为与官方一致。

在界面中启用

重启后打开 设置 → 通用,底部会出现 终端 Shell 行(id terminal-shell)。在「终端类型」下拉中选择 powershell / bash / cmd(写入字段 dialect)。说明文案为:选择智能体工具调用终端使用的 shell,改动后仅在新会话生效。切换到 bash 或 cmd 时会触发本机路径扫描;也可手动填写 bashPath 或 cmdPath。

典型用法

  1. 完成安装并重启 DSH。
  2. 在 设置 → 通用 → 终端 Shell 中,将方言改为 bash(或 cmd)。
  3. 若选 bash:确认 Git Bash 路径 指向有效的 bash.exe;按需调整 沙箱策略(unconfined 绕过沙箱 / escalate 申请权限,默认 unconfined)。
  4. 若选 cmd:可留空 cmd.exe 路径 以使用 %ComSpec%;默认沙箱策略为 escalate;可选 控制台代码页(默认 65001)。
  5. 新建会话(不要指望在已打开的会话里即时切换工具目录)。

需要直接写 profile patch 时,核心字段包括 dialect、路径类字段及各方言的沙箱策略;完整列表见仓库 README「配置字段表」(与 src/config.ts 对应),所有字段均为 volatile,在会话创建时快照一次。

诊断日志默认位于 %TEMP%\dsh-terminal-shell.log,可用环境变量 DSH_TERMINAL_TOOL_DIAG_FILE 覆盖路径。

适用场景与注意

适合谁

  • 在 Windows 上开发、希望智能体调用 bash 工具而非 pwsh 的 DSH 用户。
  • 未安装 Git Bash、但希望智能体通过 cmd.exe 执行批处理命令的场景。
  • 需要临时替代方案、且接受「官方能力落地后可从 profile 移除本插件」的维护方式。

务必知晓

  • 插件与 DSH 宿主在同一进程权限下运行;安装前应阅读源码与 MIT 许可证,确认可接受其行为(尤其 bash 在 unconfined 下模型命令不受文件沙箱约束)。
  • 非 Windows 平台不会加载此插件。
  • 卸载:从 profile 依赖移除 dsh-terminal-shell,重启 DSH;已按 bash / cmd 装配的旧会话不会自动切回 pwsh。
  • 本介绍中的版本号、引擎约束与命令均来自插件 GitHub README(0.2.1);星标等目录页元数据以 skillhub 展示为准。

结尾

dsh-terminal-shell 用「一个设置开关、会话级隔离、不动全局 shell 服务」的方式,在 Windows 上把新会话的终端工具从默认 pwsh 换成 Git Bash 或 cmd,同时保留默认 pwsh 与官方一致的行为。需要进一步了解实现细节、CMD 方言限制或极简模式(minimalMode)时,请直接查阅仓库中文 README。

  • 目录页:https://www.skillhub.cn/plugins/road-kid/dsh-terminal-shell
  • GitHub:https://github.com/road-kid/dsh-terminal-shell
羽毛球分组比赛记分
小程序二维码

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

Xiaoye