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 增加了原生的終端能力,讓網頁操作和命令行交互在同一界面無縫結合。適合需要在網頁中直接調試、運行腳本或進行智能體開發場景。

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

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

小夜