dsh-plugin-terminal:为 DSH Web GUI 增加底部终端面板

前言

在 DSH Web GUI 里做智能体开发或 AI CLI 工作流时,经常会遇到一个需求:页面上已经打开对话界面,但还需要一个可用的 shell 来执行命令、查看日志、切换目录,或者继续操作 Codex、Claude Code 这类全屏终端程序。

dsh-plugin-terminal 是针对 DeepSeek Harness(DSH)Web GUI 的底部终端面板插件。它在页面底部提供一个多标签 shell 面板,底层使用 node-pty,Windows 上通过 ConPTY 工作,Linux/macOS 上使用 openpty。

这是什么

dsh-plugin-terminal 是一个 DSH Web GUI 插件,用于在视口底部增加一个可交互终端面板,并与会话列对齐。仓库地址指向 siberiah2o,许可证为 MIT。

它解决的核心问题是:让 DSH Web GUI 用户无需离开浏览器页面,就能在底部打开、切换、重启多个终端标签,并保持终端会话、工作目录和回滚记录。

核心能力

  • 底部终端面板固定在 DSH Web GUI 视口底部,并与会话列对齐。
  • 支持多标签 shell,可新建、关闭、重启标签;切换标签时进程继续运行;刷新页面或切换 workspace 后,活动会话可恢复。
  • 终端会记住工作目录:新标签从当前 DSH workspace 启动;dsh web 重启后,重启操作会回到该终端原来的目录,而不是服务启动目录。
  • 会话元数据和 scrollback 会持久化到 $DSH_HOME/plugin-data/terminal/dsh web 重启后,这些终端可以作为已退出的历史标签恢复。
  • 支持 xterm.js 6 特性,包括颜色、闪烁光标、alternate screen、Unicode v11 CJK 宽度表,以及 10000 行 scrollback。
  • 通过 WebSocket 双向通道连接 PTY,在浅色和深色主题下都提供深色终端表面。
  • 支持鼠标选择复制、右键粘贴、Ctrl+V 粘贴;当剪贴板 API 可用时,支持 Ctrl+Shift+C / Ctrl+Shift+V 复制粘贴。
  • 可配置面板切换快捷键,并支持拖拽调整面板高度,面板尺寸会被记住。
  • 针对 Codex、Claude Code 等全屏 AI coding CLI 做了适配,支持 truecolor 和 CJK 渲染。

安装与启用

官方安装命令是:

dsh plugin --profile web add dsh-plugin-terminal && dsh web

注意:这是一个 DSH 插件,需要通过 dsh plugin 安装并启用,不要直接使用普通的:

npm i dsh-plugin-terminal

典型用法

配置快捷键和 shell 命令

插件行为可以在 DSH 设置文档中配置,位置是 $DSH_HOME/settings.yamlterminal 部分;也可以在 GUI 中进入 Settings → Plugins 修改。

示例配置:

terminal:
  toggleShortcut: ctrl+j
  shellCommand: cmd.exe /k "C:\cmder\vendor\init.bat"

其中:

  • toggleShortcut 用于切换底部终端面板。
  • shellCommand 用于指定新终端会话启动时执行的命令行。

shellCommand 会按原样使用,不会注入额外 flags。命令行按空格拆分,并保留双引号,因此带引号的路径可以正常使用。

使用环境变量覆盖配置

以下环境变量可以覆盖设置文档中的配置,也适用于 headless compositions:

DSH_PLUGIN_TERMINAL_TOGGLE_SHORTCUT
DSH_PLUGIN_TERMINAL_SHELL_COMMAND

与 Codex、Claude Code 等全屏 CLI 配合

dsh-plugin-terminal 对 Codex、Claude Code 这类全屏 TUI 做了渲染适配,包括 truecolor 和 CJK 宽度处理。

如果 Claude Code 渲染出现闪烁,可以在会话中使用:

/tui fullscreen

或者用:

CLAUDE_CODE_NO_FLICKER=1 claude

切换到无闪烁的 fullscreen renderer。

在 tmux 内使用时,建议设置:

TERM=tmux-256color

并确认 tmux 版本为 3.4 或更新版本;必要时可以添加 terminal-overrides

适用场景与注意

适合以下使用场景:

  • 在 DSH Web GUI 中同时使用对话界面和 shell。
  • 在浏览器页面里运行 Codex、Claude Code 等全屏 AI coding CLI。
  • 需要在 Web GUI 中保留终端工作目录、会话历史和 scrollback。
  • 需要多个终端标签并行工作,并避免频繁切换到本地终端窗口。

使用前需要注意:

  • 插件会按当前 dsh 进程权限运行。安装前应检查源码和许可证。
  • 当 GUI 通过 remote http 打开,且不是 https、也不是 localhost 时,浏览器会禁用 navigator.clipboard。此时插件会回退到 execCommand 复制,并允许浏览器原生右键菜单粘贴。
  • 如果切换快捷键本身也会被终端消耗,例如某个快捷键在 shell 中有含义,那么在终端面板有焦点时,按键会先发给 shell,而不是切换面板。
  • shellCommand 不会被自动追加 flags,需要按实际命令行书写。

链接

  • 目录页链接来自提供的插件线索:https://www.skillhub.cn/plugins/siberiah2o/dsh-plugin-terminal
  • GitHub 仓库:https://github.com/siberiah2o/dsh-plugin-terminal
羽毛球分组比赛记分
小程序二维码

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

小夜