dsh-open-obsidian:会话在 Obsidian 库里工作时自动打开库并协调写入

前言

用 DeepSeek Harness(DSH)在 Obsidian 知识库里让 AI 改笔记时,常见有两类麻烦:Obsidian 没开着,坚果云同步、Obsidian Sync、Git 插件等不会跑,改动要等你自己打开客户端才出去;多个会话同时往同一个库写,同步客户端可能把两边改动拼在一起,出现段落重复、标题粘连。下面介绍社区插件 dsh-open-obsidian(维护者 NOOBnoob163),它挂在 DSH 进程里,在合适时机打开目标库,并对同一库的并发写入做写锁。需要强调:这是 DSH 插件,不是 Obsidian 插件——装进 Obsidian 里没有任何作用。

这是什么

dsh-open-obsidian 是面向 DeepSeek Harness 的客户端侧插件,当前 package 版本为 0.14.0,许可证 MIT,仓库 NOOBnoob163/dsh-open-obsidian。DeepSeek Harness 的生态思路是「一切皆插件」;插件目录页在 SkillHub,与 DeepSeek / 幻方无官方从属关系,也不是官方应用商店。

插件做两件事,目标一致:让 AI 写进库里的内容真正落盘并参与同步。

核心功能

自动打开 Obsidian 库

当某个 DSH 会话的工作目录位于已启用的 Obsidian 库文件夹内,你在该会话里发出第一条真人消息时,插件会在 Obsidian 中打开这个库。同步类插件只有在 Obsidian 运行时才会工作,因此对话一开始就打开库,同步可以从那一刻起进行。

打扰尽量小:

  • 库已经开着 → 不新开窗口、不抢焦点;
  • Obsidian 已在运行 → 新窗口压到后面,焦点还给你;
  • Obsidian 未运行 → 正常启动(此时窗口出现是预期行为)。

另有一种写入时兜底:已启用库里有文件变动,且代理最近确实在该库干活、同时 Obsidian 没在运行时,也会尝试打开。会话创建、断线重连等生命周期事件不会作为打开条件(0.7.0 起已移除对 session/created 的依赖,避免误弹窗)。

写锁:同一库同一时刻只允许一个对话写入

两个对话同时往同一库写时,网盘或 Obsidian Sync 等可能把改动拼坏(同段重复、标题合并等)。插件默认开启写锁:锁按一整轮对话持有;其他对话的写入会在工具执行前被硬拦(不写字节),并排队等待。前一个放锁后会通知队列中最前的会话;通知可能过时,文档建议先核对工作区是否已有改动再重试。

写锁仅在 AI 正在该库内发生写入时生效;只读、搜索、未写文件的会话不受影响。子代理不参与单独加锁。对话超过 30 分钟无活动时可被判定 stale 并释放锁(可在设置里改 writeLockStaleMinutes,设为 0 表示永不自动接管)。无法识别的工具或内部错误时一律放行,避免误卡正常操作。

上述逻辑在 DSH 进程内完成,文档说明为零 token、零轮询。

运行要求

项目 说明
系统 仅 Windows。依赖 Windows 进程/窗口接口、%APPDATA%\obsidian 与 Obsidian 注册的 URL 协议。
DSH 需暴露插件使用的内部接口;写锁还要求宿主提供 tools/pre-execute 钩子。DSH 升级后插件可能需跟进更新。
Obsidian 桌面版 1.x;开发与实测版本 1.14.4。

安装与启用

安装前请自行查看仓库源码与 MIT 许可证;插件以当前 dsh 进程权限运行,只安装你信任的来源。

官方一条命令安装(--profile 必填,默认 profile 名多为 desktop):

dsh plugin --profile desktop add github:NOOBnoob163/dsh-open-obsidian

若 dsh 不在 PATH,可在 DSH 标题栏 应用 → 管理 dsh 命令… → 安装,在桌面创建指向 DSH 自带 CLI 的快捷方式。

包声明了 dsh.bundle,安装后 DSH 会自动启用,无需手改 bundle 配置。装好后冷启动一次 DSH(仅刷新页面不够),再到 设置 → Obsidian 助手 勾选要管理的库;一个都不勾则完全不触发。

典型用法与设置

  1. 按上文命令安装并冷启动 DSH。
  2. 打开 设置 → Obsidian 助手,在「检测到的知识库」中勾选目标库;面板会结合正在运行的 Obsidian 显示库是否已打开。
  3. 在对应库目录下新建或打开会话,发送第一条消息,观察 Obsidian 是否按预期打开(已开库应跳过)。
  4. 多会话同时写同一库时,若写入被拦,可查看 %USERPROFILE%\.dsh\logs\dsh-open-obsidian\decisions.log(面板上有入口);写锁相关行以 writelock 开头。

常用设置项(改动即保存,无单独保存按钮):

设置项 默认 作用
自动打开 Obsidian 开 总开关
检测到的知识库(逐库) 全不勾 勾选才参与自动打开与写锁
目标库已打开时跳过 开 已开库不操作
静默打开新窗口 开 新窗口不抢焦点;关则正常跳到前台
写锁:一次只让一个对话写 开 关闭则不做并发写入协调
高级选项 — 自定义启动命令,{vault} 替换为库路径;留空则用 obsidian:// 协议

设置持久化在 %USERPROFILE%\.dsh\storages\dsh-open-obsidian.json。设置面板为中文界面。

适用场景与注意

适合谁: 在 Windows 上用 DSH 直接改 Obsidian 库、并依赖 Obsidian 内同步插件(坚果云、Obsidian Sync、Git 等)的用户;需要减少「AI 已写但客户端未开、同步滞后」以及「多会话同时写同一库」风险的场景。

务必注意:

  • 不是 Obsidian 插件,不要把它装进 Obsidian 社区插件目录 expecting 生效。
  • 仅 win32;macOS / Linux 无法工作。
  • 依赖 DSH 内部接口,宿主版本变化可能导致失效,可关注仓库 issue。
  • Obsidian 新建窗口本身会抢焦点,插件通过「新窗口压后 + 抢回焦点」尽量静默;约仍有短暂闪窗,接受不了可关「静默打开新窗口」。
  • 静默打开依赖随包提供的 bin/dsh-open-obsidian-silent.exe(Windows 助手程序)。

结尾

dsh-open-obsidian 把「库要开着同步才跑」和「同一库别多对话同时写」收进 DSH 会话流程:第一条消息触发打开、写锁硬拦并发写入,并留决策日志便于排查。安装与细节以仓库 README 为准。

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

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

小夜