dsh-open-with:在 DSH 内按扩展名指定打开方式,不改 macOS 系统默认

前言

在 DeepSeek Harness(DSH)里点「打开」文件时,宿主最终会把路径交给 macOS 的 open,因此用的总是系统默认应用。交付卡片、右侧预览、变更审查里若希望 .md 进 Obsidian、.docx 进 Pages,而 Finder 双击仍保持原来的默认,单靠改 LaunchServices(例如 SwiftDefaultApps、duti)做不到「只对 DSH 生效」——改的是全局,Finder 也会跟着变。

下面介绍社区插件 dsh-open-with(维护者 HildebrandYu,分类:客户端):为 DSH 维护一份「扩展名 → 应用」映射,只改写 DSH 自己的打开动作,不动系统默认。

这是什么

dsh-open-with 是 DSH 的宿主插件,附带 Web 端设置页。规则保存在 ~/.dsh/open-with.json;未列出的扩展名仍走系统默认。「显示文件位置」仍在 Finder 中定位,不受本插件影响。仅支持 macOS(通过 /usr/bin/open 启动应用)。当前包版本 0.2.1,许可证 MIT。

核心功能

按扩展名映射应用

规则文件示例:

{
  "apps": {
    "docx": "/Applications/Pages.app",
    "md": "Obsidian",
    "pdf": "/System/Applications/Preview.app"
  }
}
  • key:扩展名;docx、.docx、*.docx、DOCX 会规范为小写形式处理。
  • value:应用的绝对路径、显示名称,或 bundle id(如 com.apple.Preview)。
  • 空字符串 "":保留该行,但对该扩展名使用系统默认。
  • 未配置的扩展名:与未装插件时相同。
  • 不支持 * 通配键,避免误绑全部类型。
  • 保存后按文件 mtime 重载,一般无需重启 DSH。

设置页

DSH 设置(⌘,)→ 左侧 「檔案開啟方式」(README 英文侧为 Settings → File opening):

  • 列出「扩展名 → 应用」,下拉修改后立即写回。
  • 「— 用系統預設 —」保留行、行为等同系统默认(文件中记为 "");整行删除用「移除」。
  • 底部可新增扩展名与应用;页面显示规则条数与规则文件路径。

配置经宿主路由 GET/POST /local/open-with/config 读写,写入时保留 _readme 等其它字段,采用原子写入。

在 DSH 内的行为

  1. 将 sessionController.openPath() 从 open <path> 改为在命中规则时使用 open -a <指定 app> <path>。
  2. sessionController.fileApplications() 展示的默认项与规则一致,规则指定的应用排在最前并标为 (default)。
  3. 菜单里「这次改用别的 app」:仅当选到规则指定的那一项时由插件接管,其余走原流程;单次选择不会改规则文件。

插件不修改 LaunchServices、duti 或 defaults write;移除插件即恢复 DSH 原有打开逻辑。

安装与启用

插件市场(README 推荐)

DSH → 設定 → Plugin Market → 搜尋 dsh-open-with → 安裝 → 重載頁面。

(市场收录需仓库满足上架条件,状态以仓库说明为准。)

从 GitHub 安装(web profile)

dsh plugin --profile web add github:HildebrandYu/dsh-open-with

安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行。

本机直挂(开发或自建路径)

在 ~/.dsh/cordis.patch.yml 中插入指向 plugin/index.mjs 的 bundle 项(完整示例见仓库 README「安裝」一节)。仅改规则文件时不必改 HMR 配置。

典型用法

编辑规则

直接编辑 ~/.dsh/open-with.json,或在设置页「檔案開啟方式」中维护映射。

诊断与探测

确认插件是否接管 openPath、当前规则、以及某路径将用哪个应用(干跑,不真正打开文件):

curl -s http://127.0.0.1:51714/local/open-with | python3 -m json.tool

带路径与关联应用列表:

curl -s "http://127.0.0.1:51714/local/open-with?path=/Volumes/BrainVault/x.docx&apps=1" | python3 -m json.tool

仓库还提供 node scripts/verify.mjs "/path/to/file" 一键检查。响应中的 status.installed、rules、probe.spec、probe.apps 等字段含义见 README「驗證」表格。

适用场景与注意

适合谁:主要在 macOS 上用 DSH 处理多类型文件,希望预览与审查用固定工具链,又不想动 Finder 双击默认的用户。

限制(摘自 README):

  • 只影响 DSH 的「打开」,不影响「显示文件位置」。
  • 路径须存在且能被 Host 解析;工作区外文件同样可用绝对路径。
  • 菜单中可能出现同一应用的重复条目(来自 macOS 关联列表);插件将第一个匹配项标为默认。
  • DSH 升级若变更 sessionController 接口,status.installed 可能为 false 并给出 status.error,此时回退为系统默认打开,不会破坏文件。

移除方式:市场「已安裝」中卸载,或删除直挂 patch 段后重启 DSH。~/.dsh/open-with.json 可保留或删除;删除后 DSH 内也完全使用系统默认。

结尾

dsh-open-with 把「按扩展名选应用」收窄在 DSH 的打开路径上,与全局默认应用工具互补而非替代。需要细节、默认规则表与测试说明时,以仓库 README 为准。

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

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

Xiaoye