dsh-obsidian-file-opener:在 Harness Web GUI 里一键用 Obsidian 打开库内笔记

前言

DeepSeek Harness(DSH)的 Web GUI 自带文档预览,对话里的 Markdown 链接、工具输出路径、@file 引用和文件树里的条目,默认都会在应用内打开。若你的笔记库本身就是 Obsidian vault,预览页缺少反向链接、图谱和插件环境,和日常写作流程是两套界面。

社区插件 dsh-obsidian-file-opener(维护者 Wang-Chuming,GitHub:Wang-Chuming/dsh-obsidian-file-opener)在「普通单击」时把库内文件路由到 Obsidian(或你在配置里指定的其他应用),Cmd/Ctrl + 单击 仍走 Harness 原有预览,行为与官方未改时一致。

这是什么

一句话:面向 DSH Web GUI 的 vault 文件打开器——单击库内引用时在 Obsidian 中打开笔记,可按规则把例如 .tex 交给 VS Code 并带上项目根目录。

插件在 DSH 生态里属于 客户端 类 bundle:Host 半部(index.js)注册 HTTP 路由与模型工具,Client 半部(client.js)包装 Web GUI 的统一导航入口 ctx.sidebarRight.openResource。许可证 MIT,运行时仅依赖 Node 内置模块;开发测例要求 Node.js ≥ 20。作者在 macOS 上开发与测试,Windows、Linux 打开逻辑已实现但练习较少。

核心功能

下面表格概括手势与结果(与 README 一致):

手势 结果
对库内文件引用的 普通单击(对话 Markdown 链接、工具行路径、行内 file mention、@file、文件树中的 vault 文件) 经 obsidian://open 在 Obsidian 中打开,Obsidian 置前
命中 openers 规则的 vault 文件(例如 .tex) 在规则指定应用中打开;VS Code 规则会以 root 文件夹为工作区
Cmd/Ctrl + 单击 Harness 应用内文档预览(不变)
不在 vaultRoot 内、扩展名不在 extensions 内、程序化或恢复时打开 应用内预览(不变)
模型侧「帮我打开这个文件」 open_vault_file 工具,路由与普通单击相同

Host 侧对每次打开做 realpath containment:路径必须在 vaultRoot 内,.. 与逃出 vault 的符号链接会被拒绝。三条路由均先走 ctx.connection.requestRejection(req)(Harness Host/Origin 防护与登录 cookie);连接服务缺失时返回 503,不裸奔提供服务。任意环节失败时 Client 回退到官方内置预览。

Host 暴露的路由:

路由 方法 用途
/obsidian-file-opener/config GET 向 Client 提供 vault 配置
/obsidian-file-opener/open POST { path, source? } 打开单个 vault 文件
/obsidian-file-opener/diag POST 追加浏览器诊断行

配置在 Host 启动时按顺序解析:bundle 行内 config: → ~/.dsh/obsidian-file-opener.config.json → 内置默认。两处都拿不到有效 vaultRoot 时插件加载但 不生效(config 路由 ok: false,界面仍全部走预览)。

安装与启用

1. 加入 profile

dsh plugin --profile <profile> add github:Wang-Chuming/dsh-obsidian-file-opener

<profile> 为 desktop、web 或 headless。命令会安装包并因包声明 dsh.bundle 自动写入 dsh.profile.bundles。Desktop 也可在 Settings → Plugins(或插件市场上架后)安装,由 Desktop profile 管理。

2. 指向你的 vault

推荐在用户目录写入配置文件(仅 vaultRoot 必填;路径中的 ~ 会展开,openers[].root 若为相对路径则相对 vaultRoot 解析):

cat > ~/.dsh/obsidian-file-opener.config.json <<'JSON'
{
  "vaultRoot": "/Users/you/Research/Research-Vault",
  "vaultName": "Research-Vault",
  "extensions": [".md", ".canvas", ".base"],
  "openers": [
    {
      "app": "vscode",
      "extensions": [".tex"],
      "root": "physics/lshape-pt-symmetry/paper/manuscript"
    }
  ]
}
JSON

文件缺失或格式错误视为「无覆盖项」,插件保持 inert,不会猜测路径。

3. 重启并确认

必须 重启 Harness(仅刷新 Client 不够:Host 在启动时读配置并注册路由与工具)。首次加载页面后,可查看 ~/.dsh/obsidian-file-opener.diag.jsonl,其中应出现 host-activate、client-activate、client-config、selftest-trigger、open 等事件行;README 给出了示例 JSON 结构。

环境要求:已安装 Obsidian 及要对齐的 vault;DSH 需具备 Web GUI 与 plugin-bundle 支持。

典型用法

  1. 完成安装与 vaultRoot 配置并重启后,在对话里 普通单击 任意库内笔记链接,应在 Obsidian 中打开该笔记。
  2. 对同一链接 Cmd/Ctrl + 单击,应仍在 Harness 内预览。
  3. 若配置了 openers,单击 vault 内匹配扩展名的文件(如 .tex)应在 VS Code 中打开,且 LaTeX 等工作区以配置的 root 为项目根。
  4. 需要模型代开文件时,Harness 侧提供的 open_vault_file 与单击走路由一致。

Client 在首次加载会跑一遍自测链并写入上述 JSONL 日志,便于确认 Host/Client 与打开通道是否正常。

适用场景与注意

适合谁: 日常把 DSH 工作区与 Obsidian vault 叠在同一份 Markdown 库上的开发者或研究者;希望在 Harness 里点链接就回到 Obsidian 编辑、图谱与插件环境,而不是在 Web 预览里「第二份只读副本」。

生态背景: DSH 强调「一切皆插件」;SkillHub 目录页 等社区站点独立于 DeepSeek / 幻方,并非官方应用商店。

安全与权限: 插件以当前 DSH 进程权限在本地调用系统打开器(macOS open、Linux xdg-open、Windows cmd /c start),安装前请自行审阅 源码与 MIT 许可证。仅将 vaultRoot 指向你信任的路径;Host 会拒绝逃出 vault 的路径,但错误配置仍可能指向你不希望暴露给浏览器的目录——配置责任在用户侧。

平台: 非 macOS 用户若遇打开异常,可向仓库 Issues 反馈或提交补丁。

结尾

dsh-obsidian-file-opener 把 Web GUI 里「点 vault 文件」的默认目的地从内置预览改成 Obsidian(及可选的 VS Code 规则),同时保留修饰键预览与非 vault 文件的原有行为。需要详情、中文 README 与 issue 入口见 GitHub 仓库;插件索引见 SkillHub 目录页。

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

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

Xiaoye