前言¶
在 DeepSeek Harness(DSH)里,agent 通过 shell 类工具执行命令。默认链路走 tool-pwsh → ctx.shell → executor,可执行文件在进程级是固定的,与「标准 / PTC / minimal」等模式选择绑在一起,却不能按会话单独换 cmd、Git Bash 或 WSL。同一台机器上混用 Windows 路径习惯与 POSIX 命令时,模型也容易在 bash 里写 dir、在 cmd 里写 ls。
下面介绍社区插件 dsh-plugin-agent-terminal(维护者 ZhaoHanshao,分类:客户端)。它为当前会话选择 agent 执行命令时使用的终端,与模式选择完全独立;标准模式配 cmd 可以共存,换终端不必换模式,也不必重建会话。
这是什么¶
一句话:Pick the terminal a DSH agent runs its commands in, per conversation, independently of the agent mode.
插件是标准 DSH bundle(dsh.bundle.patch),无构建步骤、无运行时依赖。内置 cmd、PowerShell 5.1/7、Git Bash、按发行版展开的 WSL 以及自定义 shell;每个候选会实际启动验证可用性并读取版本,同时向模型说明对应命令方言,避免在错误 shell 里生成惯用语法。
- 目录页:https://www.skillhub.cn/plugins/ZhaoHanshao/dsh-plugin-agent-terminal
- 源码:https://github.com/ZhaoHanshao/dsh-plugin-agent-terminal
- 许可证:MIT(见仓库
package.json) - 当前包版本:
0.1.0(资料来源:仓库package.json)
核心功能¶
与会话绑定的终端选择¶
选择器出现在两处,同一组件:
| 位置 | 槽位 | 作用域 |
|---|---|---|
| 会话头部右侧工具区 | conversation.session.header.utilities(order -8) |
当前会话 |
| 新会话落地页那一行 | conversation.hero.options(order 10) |
新会话默认 |
有会话时写入该会话;新会话页尚无可绑定会话时写入「新会话默认」。按钮显示当前终端名;未接管时显示「跟随默认」。不占用左侧栏,也没有独立终端页面。
工具层按会话遮蔽¶
ctx.shell 是进程级单例,profile 插件无法子类化 executor。本插件在 agent.ctx.tools 注册同名工具以遮蔽该会话的全局工具;选择 cmd / bash 时用 restrict({deny:['pwsh']}) 隐藏原生工具。执行走 ctx.subprocess + ctx.sandbox,preset(模式)决定能力集合,本插件只决定用哪个终端执行。
切换时先装新工具、成功后才撤销旧的;新终端校验失败则旧工具与原生工具保持原样,避免会话变「哑」。
探查与方言提示¶
按 PATH、PATHEXT 与已知安装位置解析,再启动一次确认可用(可配置 verify)。README 中记录了 Windows 上 Store 别名、wsl --list UTF-16LE、spawnSync 空输出、System32 下 WSL 启动器与 Git Bash 重复等处理方式。
对 bash 家族注入工具描述与 system prompt 段落 agent-terminal:dialect(禁止 cmd/PowerShell 惯用法并给出替代)。可用 GET /agent-shell/api/diagnostics?session= 核对 tool=、promptRegistered 与注入原文。
自定义终端¶
通过 UI 或 API:POST /agent-shell/api/verify 验证绝对路径并登记;POST /agent-shell/api/selection 写入选择(scope: session | default,shellId: null 表示不接管)。路径规范化,customPaths 与配置项 extraShells 在重启后仍会参与发现。
安装与启用¶
要求 DSH 客户端。README 写明 Windows 上已在 0.2.1-rc.3 验证;包内不声明 engines.dsh,以免预发布 semver 被版本闸门拒绝。
用 DSH 的 plugin_manager 安装,三种等价写法:
# 1) npm 注册表(发布到 npm 之后)
action: install_bundle
target: dsh-plugin-agent-terminal
# 2) git 规格(无需发布即可安装)
action: install_bundle
target: github:ZhaoHanshao/dsh-plugin-agent-terminal
# 3) 本地目录(开发时)
action: install_bundle
target: <克隆出来的绝对路径>
命令行等价形式:
npm install dsh-plugin-agent-terminal
npm install github:ZhaoHanshao/dsh-plugin-agent-terminal
安装后刷新页面,会话头部右侧会出现终端按钮。插件目录名须与包名一致为 dsh-plugin-agent-terminal,否则 clientModules 可能缓存错误结论直至重启。
可选配置(写入插件 config):
- id: agent-terminal
name: 'dsh-plugin-agent-terminal'
config:
timeoutMs: 120000
maxOutputBytes: 262144
verify: true
defaultShellId: null
extraShells: []
典型用法¶
- 安装 bundle 并刷新 DSH Web 客户端。
- 在已有会话的头部工具区点开终端按钮,从探测列表中选择 cmd、PowerShell、Git Bash 或某一 WSL 发行版;或选「跟随默认」放弃本会话接管。
- 在新会话落地页同一行控件中设置「新会话默认」,与旁边的模式选择器独立——可先定 preset,再定默认 shell。
- 需要自带 bash 的可执行文件时:先通过验证入口确认启动成功(README 示例
D:\App\Niubash\Bash\niu.exe),再在列表中选中;必要时用GET /agent-shell/api/shells?refresh=1刷新发现列表。 - 调试方言注入:
GET /agent-shell/api/diagnostics?session=,确认例如tool=bash、promptRegistered=True及 prompt 正文。
README「已验证」一节记录了本机五类终端启动验证、会话内 pwsh ↔ bash 往返、自定义终端跨重启、github: 规格安装等结果,可作为预期行为参考。
适用场景与注意¶
适合谁: 在同一 DSH 实例里按会话切换 cmd / PowerShell / Git Bash / WSL / 自定义 shell;希望模型按当前 shell 写命令(路径形态、禁止混用 dir 与 ls);且不想为了换终端改 agent 模式或重建会话。
运行与安全: Agent 命令在 DSH 当前进程权限与沙箱策略下执行(README 实测 enforcement: partial)。安装前请阅读源码与 MIT 许可证;API 除 GET /token 外需 x-agent-shell-token 与同源校验。
已知限制(资料原文):
- 每次调用起新进程,无 PTY——
vim、top等交互式程序不可用。 - 尚未开始的会话只能设置「新会话默认」;会话 id 取自
agent.id。 - 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文介绍的是社区维护的客户端插件。
结尾¶
dsh-plugin-agent-terminal 把「用哪个终端跑 agent 命令」从模式与全局 executor 里拆出来,按会话(或新会话默认)选择,并通过探查、验证与方言提示减少跨 shell 的命令误写。需要安装规格、API 与配置细节时,以 GitHub README 为准。