@blue-a11y/dsh-client-shortcuts:dsh web GUI 的全局快捷鍵插件

前言

在 DSH 的 web GUI 裏,部分常用操作原本需要反覆用鼠標點擊:聚焦輸入框、新建會話、切換側欄、切換詳情面板、滾動對話、切換主題等。@blue-a11y/dsh-client-shortcuts 把這些瀏覽器內的 UI 動作註冊成全局鍵盤快捷鍵,並提供一個設置頁用於查看、錄製、重置和校驗組合鍵。

下面介紹它的定位、核心功能、安裝方式、典型用法、開發構建和注意事項。

這是什麼

@blue-a11y/dsh-client-shortcuts 是 blue-a11y 維護的 DeepSeek Harness web GUI 插件,許可證爲 MIT。它是一個瀏覽器端 UI 插件,node half 刻意爲空,整個功能都運行在瀏覽器側。

它提供 ShortcutRegistry 服務,也就是 ctx.shortcuts。這個服務會在 window 上掛一個捕獲階段的 keydown 監聽,並分發已註冊的組合鍵。

它同時提供設置頁:

  • 註冊於 settings.section;
  • 基於 @deepseek-ai/dsh-client-ui-primitives 構建;
  • 列出全部可綁定動作;
  • 支持錄製組合鍵、重置改鍵、衝突檢測和保留組合鍵攔截。

該包聲明瞭 dsh.bundle,屬於組合包。package.json 中 dsh.bundle.patch 指向 ./cordis.patch.yml,安裝後會激活其配置層。

這個插件只把瀏覽器鍵盤手勢轉發爲 UI 動作,不觸及任何模型請求。

核心功能

全局快捷鍵註冊

核心服務是 ShortcutRegistry,即 ctx.shortcuts。它負責:

  • 在 window 上監聽捕獲階段 keydown;
  • 解析和匹配已註冊組合鍵;
  • 分發到對應 UI 動作;
  • 提供綁定註銷能力。

mod 在 macOS 上匹配 Cmd,在其他平臺匹配 Ctrl。文檔和 UI 以 cmd 友好形式書寫組合鍵,例如 cmd 與 mod 在組合鍵表達中按約定對應處理。

文本輸入框保護

默認情況下,焦點在文本輸入框內時會放行鍵盤事件,避免影響正常輸入。

如果某個綁定顯式聲明輸入框內可用,它纔會在輸入框內響應。

可綁定動作

插件列出全部可綁定動作,包括:

  • 聚焦輸入框;
  • 新建會話;
  • 切換側欄;
  • 切換詳情面板;
  • 上一個會話;
  • 下一個會話;
  • 切換淺色/深色主題;
  • 滾動到對話頂部;
  • 滾動到對話底部;
  • 分叉當前會話。

其中,沒有安全默認值的動作默認不綁定。用戶可以在設置頁錄製組合鍵啓用,也可以重置回未綁定狀態。

會話切換順序

會話切換鏡像側欄的完整顯示順序,會跳過「新建任務」空白條目和歸檔會話,並在兩端循環。也就是說,最後一個會話繼續切換時會回到第一個可用會話,第一個會話反向切換時會回到最後一個可用會話。

改鍵與衝突檢測

設置頁支持:

  • 錄製新的組合鍵;
  • 重置爲未綁定;
  • 校驗與現有綁定是否衝突;
  • 拒絕瀏覽器保留組合鍵;
  • 拒絕 macOS 的 Option/Alt 改寫組合。

瀏覽器保留組合鍵會在頁面監聽器執行 preventDefault 之前被瀏覽器消費,web 插件無法綁定。macOS 的 Option/Alt 改寫組合可能導致 event.key 與註冊鍵不再匹配,因此設置頁會拒絕這類組合。

改鍵生命週期

改鍵僅在插件 fiber 生命週期內有效。刷新頁面後會恢復默認狀態,當前不會持久化保存用戶改鍵結果。

安裝與啓用

前置條件

先安裝 dsh CLI:

npm i -g @deepseek-ai/dsh

然後確保運行環境滿足:

  • Node 22.19 或更高版本;
  • pnpm 可用。

從 npm 安裝

推薦從 npm 安裝:

dsh plugin --profile web add @blue-a11y/dsh-client-shortcuts

該包是組合包,安裝後會激活其配置層。

本地 checkout 安裝

開發期可以安裝本地目錄:

dsh plugin --profile web add ./dsh-client-shortcuts

打包產物安裝

如果有打包產物,也可以使用 tarball:

dsh plugin --profile web add ./dsh-client-shortcuts-0.1.0.tgz

重啓與驗證

新增插件行後,需要重啓一次 dsh web,因爲插件行發現在每次啓動時緩存。

先查看配置:

dsh --profile web --dump-config

配置中應能看到 id: shortcuts 行。

然後啓動 web GUI:

dsh web

瀏覽器打開後,進入「設置 → 快捷鍵」,應能看到快捷鍵設置頁。

更新與卸載

更新時重新執行安裝命令:

dsh plugin --profile web add @blue-a11y/dsh-client-shortcuts

如果需要鎖定版本,需指定版本號。

卸載命令:

dsh plugin --profile web remove @blue-a11y/dsh-client-shortcuts

卸載會同時移除相關依賴與配置層。

pnpm 構建授權

如果使用 pnpm 10 或更高版本,可能需要在 pnpm-workspace.yaml 的 allowBuilds 中一次性授權 profile。

典型用法

打開設置頁

啓動 dsh web 後,在瀏覽器中進入:

設置 → 快捷鍵

設置頁會列出全部可綁定動作,並展示當前組合鍵與觸發計數。

錄製組合鍵

對於默認未綁定的動作,可以在設置頁使用錄製控件按下想要綁定的組合鍵。

錄製控件會暫停註冊中心分發,按下的組合鍵會被捕獲而不是直接觸發。設置頁會校驗該組合鍵是否與現有綁定衝突,並拒絕非法或保留組合鍵。

重置組合鍵

如果某個動作不再需要自定義鍵位,可以重置,使其清回未綁定狀態。

會話切換

綁定會話切換動作後,快捷鍵會按側欄的完整顯示順序移動,跳過「新建任務」空白條目和歸檔會話,並在首尾之間循環。

不觸及模型請求

這些快捷鍵只用於瀏覽器內的 UI 操作。插件不會發起模型請求,也不會改變模型調用路徑。

開發與構建

克隆倉庫

git clone https://github.com/blue-a11y/dsh-client-shortcuts.git
cd dsh-client-shortcuts
pnpm install

常用命令

pnpm install
pnpm run build
pnpm test

pnpm run build 會生成構建產物,pnpm test 會運行測試。

本地熱更新

本地開發時,可以先安裝本地目錄:

dsh plugin --profile web add ./dsh-client-shortcuts

修改源碼並重新構建後,client HMR 鏈路可以自動換新模塊。只有新增或刪除插件行時,才需要重啓 dsh web。

依賴關係

該包的 peer dependencies 包含:

@deepseek-ai/cordis ^4.0.1
@deepseek-ai/dsh-invariants ^0.1.0-rc.6

適用場景與注意

適合誰使用

適合使用 dsh web 並希望減少鼠標操作的開發者,尤其是:

  • 需要頻繁聚焦輸入框;
  • 需要快速新建會話;
  • 需要頻繁切換側欄或詳情面板;
  • 需要在多個會話之間快速移動;
  • 需要快速滾動到對話頂部或底部;
  • 需要對瀏覽器 UI 動作做輕量自定義。

它適合放在 DSH 的插件化工作流中,作爲 web GUI 的鍵盤增強插件使用。這裏介紹的插件來自獨立社區目錄,不是 DeepSeek 或幻方官方應用商店。

安全注意

該插件會加入當前 dsh 的 web profile 配置層,並隨當前 dsh 進程加載運行。安裝前應檢查源碼、許可證和依賴關係。

該插件許可證爲 MIT。它只處理瀏覽器鍵盤事件和 UI 動作,不觸及模型請求,但任何第三方插件都應在使用前確認其來源和構建產物。

行爲邊界

需要注意以下邊界:

  • 改鍵不會持久化,刷新頁面後恢復默認;
  • 焦點在輸入框內時默認放行,除非綁定聲明輸入框內可用;
  • 瀏覽器保留組合鍵無法被 web 插件綁定;
  • macOS 的 Option/Alt 改寫組合會被設置頁拒絕;
  • 聚焦輸入框依賴 [data-phase] DOM 查詢,因爲當前沒有 composer 暴露聚焦服務;
  • 新增插件行後需要重啓一次 dsh web。

結尾

@blue-a11y/dsh-client-shortcuts 的價值比較集中:它爲 dsh web 提供一組可綁定的 UI 快捷鍵,並提供可錄製、可重置、可校驗的設置頁。它不改變模型請求鏈路,只優化瀏覽器內的操作路徑。

倉庫地址:

https://github.com/blue-a11y/dsh-client-shortcuts
羽毛球分组比赛记分
小程序二维码

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

小夜