dsh-hotkeys-platform

前言

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

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

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

小夜