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
羽毛球分组比赛记分
小程序二维码

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

小夜