前言¶
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