前言¶
DeepSeek Harness(DSH)Web 插件:快捷鍵設定平臺。
把“每個插件各自攔截鍵盤、各寫各的設置”升級爲一個註冊表服務 ctx.hotkeys。任何插件通過 ctx.hotkeys.registerAction(...) 註冊“動作 → 處理器”。動作的默認鍵、觸發範圍(scope)、描述由插件聲明。用戶的顯式改鍵統一持久化在平臺。設置頁與 /hotkeys 命令提供統一配置。
核心功能¶
- 註冊表服務
ctx.hotkeys。 - 通過
ctx.hotkeys.registerAction註冊動作。 - 動作描述符:id, title, description, group, scope, defaultKey, handler。
- Scope 支持:global, input, question-card, command-palette, custom。
- Handler 返回 false 放行。
- 用戶綁定持久化在
localStorage鍵dsh.hotkeys.v1。 - 設置頁統一配置(DSH 設置 → 快捷鍵)。
- 命令
/hotkeys。
安裝¶
dsh plugin --profile web add dsh-hotkeys-platform
安裝後重啓 dsh web。
典型用法¶
export const inject = ['hotkeys']
export function apply(ctx: Context): void {
ctx.effect(() =>
ctx.hotkeys.registerAction({
id: 'my-plugin:send-message',
title: () => t('發送'),
description: '發送當前消息',
group: '消息',
scope: 'input',
defaultKey: 'Control+Enter',
handler: (event, h) => {
h.dispatchEnter(h.target ?? event.target)
},
})
)
}
關鍵點說明¶
ctx.hotkeys可選:平臺是可選項,讀不到就跳過;不要用inject之外的ctx.hotkeys直接訪問。ctx.effect包裹:registerAction返回 disposer,fiber 卸載(HMR/禁用)時自動撤銷註冊,否則下次激活拋already registered。id包前綴:建議my-plugin:xxx,避免衝突。- Scope:
global任意處,input文本區,question-card提問卡,command-palette命令菜單,custom自定義判定。 - Handler 返回 false:表示不消費按鍵,放行給 DSH 原生行爲。
架構與 Host 能力¶
架構與 dsh-better-sidebar 同構:平臺 ctx.provide('hotkeys', service),業務動作由消費插件註冊(喫狗糧),能力對等。
平臺不承載 host 能力(讀寫文件等)。如果某個快捷鍵動作要觸發 host 側能力(如執行命令、歸檔會話),由你的插件自帶 host 路由,handler 裏 fetch 即可。
配置¶
- 設置頁:DSH 設置 → 快捷鍵。支持可視化編輯和錄製。
- 命令:輸入
/hotkeys。 - 鍵位三態:未改過(使用 defaultKey)/ 已錄製(用戶綁定)/ 已禁用(連默認也關掉)。
狀態¶
正在開發中,還不能使用。
鏈接¶
https://github.com/whitewatercn/dsh-hotkeys-platform