前言¶
DSH Desktop 的 Web 壳里本身就有设置对话框,但在 macOS 上缺少与系统习惯一致的快捷键:许多 macOS 应用用 Cmd+, 打开偏好设置,而默认壳层没有把这个手势接到现有 UI 上。若每次都要点账户菜单或设置按钮,在频繁改配置、调试智能体工作流时会多一步操作。
下面介绍社区维护的 profile 层插件 dsh-macos-settings-shortcut(维护者 Qulierm)。它不改签名应用包内的文件,只在 desktop profile 里注入一段浏览器端逻辑,让 Cmd+, 打开壳层已经渲染的设置入口。
这是什么¶
dsh-macos-settings-shortcut 是一个面向 DSH Desktop desktop profile 的小型 bundle(bundle id:dsh-macos-settings-shortcut),目标目录为 $DSH_HOME/profiles/desktop(默认 ~/.dsh/profiles/desktop)。
插件在文档页 SkillHub 目录 与 GitHub 仓库 发布;SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。当前 package 版本为 0.1.0,许可证 MIT。
核心功能¶
快捷键行为¶
在 macOS 上,插件在 document 上注册 capture 阶段的 keydown 监听,只识别一种组合:
- metaKey 按下,ctrl / alt / shift 均未按下;
- 键位为
event.key === ","或event.code === "Comma"(与键盘布局无关); - 忽略按键连发与 IME 组合输入。
识别成功后会对事件 preventDefault() 并 stopPropagation(),避免浏览器或编辑器里其它 Cmd+, 处理程序同时响应。
如何打开设置(两种壳层)¶
插件不 patch 壳层源码,只读取当前 DOM:
- DSH Desktop 2.0.14 及更新(账户菜单):壳层在
settings.launcher槽位放账户按钮,设置项为该菜单第一行。插件会先快照已挂载菜单,点击折叠的 launcher,再点击新出现且可见菜单的第一行(支持 React 同步或异步挂载,必要时用短时MutationObserver,上限 1000 ms)。 - 较旧壳层(对话框按钮):若 launcher 回退为内置对话框按钮,则直接点击该按钮,且仅当按钮内包含
settings.trigger槽位锚点时才视为有效(避免误点上下文计量、用量统计等同样带aria-haspopup="dialog"的控件)。
安全与边界¶
文档中强调的几条行为 worth knowing:
- 若设置对话框已打开(含
settings.header的[role="dialog"][aria-modal="true"]),Cmd+, 只会占用手势,不会关闭对话框;launcher / trigger 在aria-expanded不为"false"时也不会被点成关闭。 - 账户菜单路径在「恰好出现一个可见新菜单、launcher 仍展开、首行是普通可用可见非子菜单行」等条件不满足时不点击(fail closed)。
- 浏览器端无运行时依赖,不读按钮文案、React 内部、Electron API 或应用文件;无网络、无文件系统、无额外权限声明。
接入方式(profile / Cordis)¶
| 组件 | 作用 |
|---|---|
cordis.patch.yml |
在 profile 的 Cordis 树插入一行(id/name:dsh-macos-settings-shortcut) |
lib/index.js |
Cordis host 侧占位插件,使该行处于 active |
lib/client.js |
浏览器 bundle,经 window.__ModuleLoader__.load 注册 |
package.json → dsh.bundle.patch |
指示 DSH 应用 bundle 层 patch |
dsh.client.platform: "web" |
标记为 Web 客户端包,由 @deepseek-ai/dsh-client-modules 扫描并注入页面 |
环境与兼容¶
| 项 | 说明 |
|---|---|
| 操作系统 | 仅 macOS;其它平台插件不生效 |
| DSH Desktop | 支持账户菜单壳(2.0.14+)与旧版对话框 trigger 壳;package.json 中 dsh.compatibility.dshReleases 目前仅记录 0.1.5-rc.2 为 compatible,2.0.14 账户菜单路径由测试套件对照已安装客户端产物验证(见仓库 README Release status) |
| Node.js | ≥ 20(构建、测试与 profile 安装脚本用,非运行时) |
| 包管理 | 构建与安装流程使用 pnpm(packageManager: pnpm@11.8.0) |
| 运行依赖 | 无;浏览器 bundle 自包含 |
安装与启用¶
前提:已安装 DSH Desktop、本机有 Node ≥ 20 与 pnpm,并已知 DSH 主目录($DSH_HOME 或默认 ~/.dsh)。安装脚本假定你在该插件仓库根目录下执行(README 中的 checkout 指本地已有该仓库副本)。
先做 dry-run,确认将要写入的内容:
node scripts/install.mjs --dry-run --profile desktop
确认无误后再安装到 desktop profile:
node scripts/install.mjs --profile desktop
常用选项(摘自 README):
| 参数 | 含义 |
|---|---|
--profile <name> |
注册 bundle 的 profile,默认 desktop |
--dsh-home <path> |
DSH 主目录,默认 $DSH_HOME 或 ~/.dsh,须为绝对路径 |
--dry-run |
只打印计划变更,不写盘 |
--pnpm <path> |
指定 pnpm 可执行文件,默认 PATH 上的 pnpm |
仓库还提供 pnpm run build、pnpm test 用于从 src/ 生成 lib/ 并跑测试;测试不修改本机 live DSH 安装。
典型用法¶
安装并完成 desktop profile 加载后,在 macOS 上打开 DSH Desktop Web 客户端:
- 聚焦应用窗口(确保快捷键落在壳层页面而非其它原生控件)。
- 按下 Cmd+,。
- 若设置未打开,应弹出已有设置对话框,或通过账户菜单打开设置首项;若设置已打开,快捷键被消费且界面保持不变。
无需额外配置文件或 CLI;行为完全由 profile 中的 client bundle 与当前壳层 DOM 结构决定。
适用场景与注意¶
适合谁:长期在 macOS 上使用 DSH Desktop、希望与 macOS 应用习惯一致的 Cmd+, 打开设置,且接受通过 profile 层扩展而非改应用包的开发者。
权限与安全:插件以当前 DSH 进程及浏览器页面的权限运行;host 侧为 no-op Cordis 行,browser 侧仅 DOM 查询与点击,文档声明无 host capability。安装前建议阅读 源码与 LICENSE,并用 --dry-run 看清 install 脚本将改动的 profile 路径。
局限:非 macOS 无效果;壳层 markup 变更可能导致选择器失效(仓库含只读读取 /Applications 下已安装 client bundle 的对照测试,无 DSH Desktop 时会 skip)。dsh.compatibility 元数据与最新壳层发布节奏可能不同步,升级 DSH Desktop 后若快捷键无响应,应对照 README 兼容表与 issue 跟踪。
结尾¶
dsh-macos-settings-shortcut 用 profile 注入的方式补上 macOS Cmd+, 与 DSH Desktop 现有设置 UI 之间的缺口,不修改签名应用、不申请额外权限。需要详情、构建与测试说明时,见 GitHub README;在 SkillHub 浏览条目见 目录页。