前言¶
在 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。
- 目录页:https://www.skillhub.cn/plugins/HildebrandYu/dsh-open-with
- 源码:https://github.com/HildebrandYu/dsh-open-with
核心功能¶
按扩展名映射应用¶
规则文件示例:
{
"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 内的行为¶
- 将
sessionController.openPath()从open <path>改为在命中规则时使用open -a <指定 app> <path>。 sessionController.fileApplications()展示的默认项与规则一致,规则指定的应用排在最前并标为(default)。- 菜单里「这次改用别的 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 为准。