dsh-plugin-agent-terminal:按会话选择 Agent 命令终端

前言

在 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 里生成惯用语法。

核心功能

与会话绑定的终端选择

选择器出现在两处,同一组件:

位置 槽位 作用域
会话头部右侧工具区 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: []

典型用法

  1. 安装 bundle 并刷新 DSH Web 客户端。
  2. 在已有会话的头部工具区点开终端按钮,从探测列表中选择 cmd、PowerShell、Git Bash 或某一 WSL 发行版;或选「跟随默认」放弃本会话接管。
  3. 在新会话落地页同一行控件中设置「新会话默认」,与旁边的模式选择器独立——可先定 preset,再定默认 shell。
  4. 需要自带 bash 的可执行文件时:先通过验证入口确认启动成功(README 示例 D:\App\Niubash\Bash\niu.exe),再在列表中选中;必要时用 GET /agent-shell/api/shells?refresh=1 刷新发现列表。
  5. 调试方言注入: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 为准。

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

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

Xiaoye