dsh-plugin-terminal-panel:在 DSH 网页里开终端

前言

DeepSeek Harness (DSH) 是一个基于插件扩展的系统。在进行智能体开发或调试时,在网页界面内直接执行命令是刚需。现有的方案往往依赖外部窗口弹窗,或者只是模拟输出的文本框,无法满足实时交互的需求。

dsh-plugin-terminal-panel 解决了这个问题。它通过侧栏入口在 DSH 网页中增加一个终端面板。与「对话」面板同级,内部使用真实的 PTY(伪终端)技术,支持回放最近 256K 字符输出,且终端进程跑在 DSH 宿主进程中,刷新页面不会断开连接。

核心能力

侧栏入口与活跃计数

插件加载后,侧栏面板图标区会出现终端图标。图标右上角实时显示运行中的终端数量,数量为 0 时自动隐藏。

真实 PTY 与回放

面板内运行的是真实的 PTY(node-pty / ConPTY),不是假的输出框。终端输出通过 SSE 实时推送给页面。由于终端在宿主进程,刷新页面后 PTY 依然存活,并回放最近 256K 字符的输出。

按设备认终端类型

插件不写死终端列表,而是根据当前设备实测可用的 shell。Windows 上列出 PowerShell 7 / cmd / Git Bash / WSL 各发行版;macOS 列出登录 shell / zsh / bash / fish 等;Linux 列出 /etc/shells 中的类型。未安装的类型会显示在「未安装」区块。

选择 shell 与默认工作目录

新建终端时,可以选择 shell 类型和工作目录(支持 ~ 和相对路径)。默认工作目录为用户主目录(~)。设置面板可以指定默认终端类型和注入 Agent 工具的开关。

多标签、重命名与交互

面板支持多标签(上限 12 个)。双击标签名或点击 ✎ 图标可重命名(支持中文和 emoji)。双击标签上的 ✕ 可关闭终端(进程树终止)。面板宽度变化会自动 resize PTY。

自绘终端、主题跟随与输入

内置小型 VT 引擎,支持 ANSI 颜色(16/256/真彩)、光标定位、宽字符。支持亮/暗两套 ANSI 调色板,跟随 DSH 主题。支持文本选择模式和中文输入(IME 组合输入)。

Agent 工具

插件向 DSH 工具注册表注册了 9 个 terminal_* 工具(如 terminal_create, terminal_exec, terminal_read 等),模型和用户共用同一批终端。可在设置面板中一键关闭注入。

热重载

修改 impl.js 后,通过 POST /__reload 即可生效,工具定义随之更新,无需重启 DSH。已经开着的终端不会被替换。

安装与启用

环境要求:DSH >= 0.2.0-rc.2,Node ^22.19.0 || >=24.0.0。

执行以下命令安装:

dsh plugin --profile web add dsh-terminal-panel

安装后刷新页面,侧栏面板图标区会出现终端图标。

使用步骤

  1. 点击左栏的终端图标,主区域打开终端面板。
  2. 点击 + 新建终端,默认在主目录开启一个 PTY;点击右侧 ▾ 可展开菜单,选择 shell 或修改工作目录。
  3. 在面板内直接输入命令,支持中文输入。
  4. 重命名:双击标签名或点击标签上的 ✎。
  5. 关闭:双击标签上的 ✕,进程树终止。
  6. 调整:面板随窗口变化自动 resize。

Agent 工具说明

插件加载后注册的工具列表:

  • terminal_shells:探测本机可用 shell 及未安装类型。
  • terminal_list:列出当前所有终端。
  • terminal_create:新建终端,可指定 shell、cwd、尺寸。
  • terminal_read:读取终端输出(按 offset 增量读)。
  • terminal_write:往终端发送原始按键。
  • terminal_exec:执行命令并等待跑完。
  • terminal_resize:改变终端行列数。
  • terminal_rename:重命名终端。
  • terminal_close:关闭终端。

技术架构与安全

插件为纯 JS 实现,无构建步骤与运行时依赖。文件结构包含 host.js(宿主入口)、impl.js(PTY 生命周期、工具定义)、client.js(终端面板、侧栏图标)。

写操作(POST 请求)必须带 x-dsh-terminal: 1 请求头。这是因为跨站页面无法自定义请求头,以此作为安全底线,防止第三方页面驱动你的终端。

结语

这个插件为 DSH 增加了原生的终端能力,让网页操作和命令行交互在同一界面无缝结合。适合需要在网页中直接调试、运行脚本或进行智能体开发场景。

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

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

小夜