dsh-fast-term:DSH 右侧栏低延迟终端插件

前言

在 DeepSeek Harness(DSH)里跑命令、看 Agent 输出,往往离不开右侧边栏的终端。自带终端走共享网关与帧确认,冷启动、大量输出或主线程繁忙时,按键回显和滚动容易变慢。若你希望终端更像本机 shell、切换标签或刷新页面后会话仍在,就需要一条独立的 PTY 通道。下面介绍社区插件 dsh-fast-term(维护者 cyberElar),它占用与自带终端相同的右侧栏标签槽位,用专用 WebSocket 直连 PTY,并可选择完全替代自带终端 UI。

这是什么

dsh-fast-term 是 DSH 的客户端类插件:在右侧边栏提供真实 PTY 终端,输出经专用 WebSocket 传输,不经过共享网关与帧确认。插件支持会话保持(切换标签、刷新后自动重连并回放,PTY 不退出)、每标签独立 PTY、shell 可选并记忆,配色与字体跟随 DSH 主题,界面支持中英双语。当前在 SkillHub 插件目录 归类为「客户端」;源码与说明见 GitHub 仓库,许可证为 MIT。

核心功能

传输与会话

  • 专用 PTY WebSocket:按键回显不排队、不等帧确认。
  • 右侧栏标签,与自带终端同一槽位;Ctrl + ` 可新建终端。
  • 会话保持:切换标签或刷新页面后自动重连并回放,PTY 进程不退出。
  • 每个标签独立 PTY;shell 可通过下拉选择,选择会被记忆。

界面与操作

  • 复制粘贴、右键菜单、原生粘贴回退(Ctrl+Shift+V)。
  • 桌面版(Windows/macOS):终端聚焦时,单 Ctrl 组合键(如 tmux 的 Ctrl+B)优先发给终端;点击页面其它区域后恢复 DSH 快捷键。
  • 新终端会从注册表重读系统 Path,安装新的命令行工具后无需重启 DSH。

输入权限与对外接口

  • 默认只读:仅终端界面自身可输入;点击右上角「只读」胶囊可解锁,允许其它 WebSocket 客户端(含 Agent)写入。
  • 可配置命令白名单:按整行前缀匹配(大小写不敏感),白名单外输入会被丢弃;配置保存在 ~/.dsh/fast-term.json。
  • 只读 HTTP API(仅回环地址并校验 Origin):列出终端、读缓冲、按行列重放画面、读写输入权限配置。
  • 宿主注册 Agent 工具 dsh_fast_term_read:任意沙箱权限档下可读边栏终端,工具本身不写 PTY。

可选替代自带终端

通过在 profile 补丁层禁用 @deepseek-ai/dsh-client-ui-sidebar-terminal 后,「新建终端」入口与终端 UI 由本插件接管;终端服务仍在,其它依赖终端的插件不受影响。

性能(README 实测)

维护者在 Windows、隔离 profile 下对比自带终端与 dsh-fast-term,摘录如下(完整表格见仓库 README):

场景 自带终端 dsh-fast-term
冷启动到提示符(复用已存在 PTY) 3.1–3.2 s ~0.12 s
2.99 MB 输出洪水 12.8 s 2.9 s

其余场景(空闲按键回显、主线程高负载)见官方文档,数值因环境而异,不宜外推为普遍结论。

安装与启用

要求 DSH 0.2.1-rc.2+(桌面版或 Web)。安装或更新后需重启 DSH 宿主。

桌面 profile 安装:

dsh plugin --profile desktop add dsh-fast-term

也可在 DSH「设置 → 插件市场」中搜索 dsh-fast-term。本地开发可将插件目录以 file: 形式加入:

dsh plugin --profile desktop add "file:<path>"

file: 安装是拷贝而非软链;修改 lib/ 后需重新执行 add,或手动覆盖 profile 下 node_modules/dsh-fast-term/lib/。

典型用法

  1. 打开右侧边栏,点「新建终端」或按 Ctrl + `。
  2. 点标题旁箭头选择 shell;双击标签名可重命名。
  3. 关闭标签会结束对应 PTY。
  4. 点右上角「只读」胶囊切换输入权限。
  5. 选中文本后复制;右键打开操作菜单。

Shell 默认值

默认 shell 回退顺序为 PowerShell(pwsh → Windows PowerShell → ComSpec)。可用环境变量 DSH_FAST_TERM_SHELL 覆盖,或在新建时通过下拉菜单选择。

快捷键(节选)

操作 快捷键
新建终端 Ctrl + `
复制选中 Ctrl+C / Ctrl+Shift+C
粘贴 Ctrl+V
发送 SIGINT Ctrl+C(无选中时)

完全替代自带终端 UI

在 profile 补丁文件(例如 ~/.dsh/profiles/desktop/cordis.patch.yml)中加入:

- id: ui-sidebar-terminal
  name: "@deepseek-ai/dsh-client-ui-sidebar-terminal"
  disabled: true

重启后由本插件接管终端入口;删除该条目可恢复并存。

脚本读取终端输出

宿主端口以实际为准,示例:

curl "http://127.0.0.1:PORT/api/dsh-fast-term/list"
curl "http://127.0.0.1:PORT/api/dsh-fast-term/screen?id=<id>&cols=120&rows=40"

buffer 接口适合看尾部日志;全屏 TUI 宜用 screen。缓冲超过 4 MiB 后最旧输出会被丢弃,响应中 truncated 会标记。

适用场景与注意

适合谁:长期在 DSH 右侧栏跑 shell、需要低延迟回显、希望刷新页面后终端仍在,或要让 Agent/脚本只读抓取终端画面的开发者。

权限与安全:PTY 以当前 DSH 进程对应用户身份运行,无额外沙箱,与在本机开系统终端相当。安装前请自行审阅 源码 与 MIT 许可证。HTTP API 仅接受回环地址并校验 Origin;不要在不可信页面同源环境中暴露宿主端口。需要 Agent 向终端输入时,须在界面中先解锁「可输入」。

兼容性:在 DSH 0.2.1-rc.2 上验证,依赖 sidebarRightTabs 与右侧栏标签槽位;Windows 优先支持,POSIX 使用 $SHELL -l。标签重命名保存在宿主内存,重启 DSH 后恢复为 shell 名。替代自带终端依赖 bundle id ui-sidebar-terminal,DSH 升级若改名则补丁需跟进。

生态说明:DSH 采用「一切皆插件」的扩展方式;SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-fast-term 把右侧栏终端从共享网关路径拆到专用 PTY WebSocket,并补上会话保持、输入权限与只读 API,适合作为自带终端的并行或替代方案。问题与建议可走 GitHub Issues;版本与更新见 Releases。

  • 目录页:https://www.skillhub.cn/plugins/cyberElar/dsh-fast-term
  • 仓库:https://github.com/cyberElar/dsh-fast-term
羽毛球分组比赛记分
小程序二维码

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

Xiaoye