前言¶
在 DeepSeek Harness(DSH)里做文献调研,常见做法是直接联网搜标题或 DOI,再让模型根据摘要作答。若你平时把文献管在 EndNote 里,且 PDF 已在本地,这套流程容易绕过已有馆藏:重复找链接、摘要对不上手头的全文、回答也难以和「你库里那篇」对齐。
下面介绍的 dsh-endnote(维护者 LHWKHYDO)把顺序反过来:先只读检索本机 EndNote 库,命中后在 DSH 右侧栏打开对应 PDF,再边读边问。插件分类为「记忆」,当前 GitHub 星标为 0;它属于社区插件生态,目录见 SkillHub 插件页,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-endnote 是 DSH 的文献调研插件,定位是「EndNote-first」:提问找文献时,模型在系统提示约束下优先调用 endnote_search,本地有结果就用标题、分组、摘要和本地 PDF 路径继续;需要全文时再经 endnote_open 交给宿主预览。EndNote 库全程只读,索引产物落在插件自己的 .data 目录,不向库目录写入。
核心功能¶
检索与阅读链路¶
工作方式可以概括为:
用户提问(找文献)
│
▼
系统提示(插件注入)──► 先调 endnote_search,不先联网
│
▼
endnote_search ── 命中 ──► 标题 + 分组 + 摘要 + 本地 PDF 路径
│
▼
endnote_open(path) ── 校验文件存在 ──► meta {plugin, path, open}
│
▼
客户端半边 ──► 右侧栏用宿主 PDF 预览打开该文件
要点如下:
- 只读:不修改 EndNote 库;索引脚本以 SQLite
mode=ro&immutable=1打开sdb/sdb.eni。 - 先本地、后联网:本地 0 命中时,才联网拿规范标题/DOI,再回本地二次关联;仍无结果再列网络候选。
- 命中即读:
endnote_open校验 PDF 真实存在后打开预览;自动打开仅对本次会话里新执行的endnote_open生效。 - 侧栏面板:库概览(统计、最近阅读/最近导入、一键刷新);标题与文件夹链接触发系统文件管理器。
工具一览¶
| 工具 | 作用 |
|---|---|
endnote_search |
多关键词 AND,检索标题/作者/年份/期刊/关键词/DOI 等;支持 group、read=read/unread |
endnote_open |
校验 PDF 并在侧栏打开(openInSidebar=false 时只回路径) |
endnote_recent |
最近阅读列表 |
endnote_status |
库路径、索引、条目数、带 PDF 数等 |
endnote_config |
写回配置,保存立即生效 |
endnote_rebuild |
调用 scripts/endnote_index.py 重建索引并对账磁盘 PDF |
纯 CLI 环境也可使用上述工具,只是没有右侧栏 PDF 预览。
环境要求¶
- DSH 桌面版或
dsh web(需右侧栏与侧栏插件页;纯 CLI 工具仍可用) - 本机安装 EndNote,且存在
…Data库目录 - Node.js 18+(运行插件与测试);仓库自带
vendor/,无 npm 依赖、不需要npm install - Python 3(仅执行
endnote_rebuild/ 手动建索引时需要)
安装与启用¶
仓库说明:克隆后自带 schemastery 等 vendored 依赖,面向离线或注册表不可达的新机器,避免安装时拉取 @deepseek-ai/schemastery 失败。
先在本地取得插件目录(README 示例为替换 <your-name> 后的 clone 地址,实际仓库为 https://github.com/LHWKHYDO/dsh-endnote)。然后在 DSH 侧栏「插件」页用插件管理器选择该目录安装(等价于 plugin_manager: install_bundle,target 传仓库路径)。装完后强刷浏览器(Ctrl+Shift+R)。侧栏「插件」页应出现 dsh-endnote 卡片,侧栏导航也有同名入口。
插件未声明 engines.dsh,不因 DSH 版本兼容检查被拦;只要宿主具备「插件管理器 + 侧栏」即可。
安全提示:插件以当前 DSH 进程权限访问本机 EndNote 库与 PDF 路径;安装前应阅读源码与 MIT 许可证,确认路径与隐私策略可接受。
首次使用与配置¶
- 侧栏进入
dsh-endnote→ 配置页 →「添加」选择你的My EndNote Library.Data目录 → 点「切换」。 - 执行一次
endnote_rebuild建索引;也可手动运行:
python scripts/endnote_index.py --lib "<库目录>.Data" --out "<插件目录>/.data/endnote_index.json"
- 调用
endnote_rebuild或endnote_status确认条目数、带 PDF 数。
配置写在插件行的 config(cordis.patch.yml),推荐用图形化配置页修改;字段为 volatile,保存后立即生效。
| 键 | 默认值 | 说明 |
|---|---|---|
libraryPath |
~/Documents/My EndNote Library.Data |
当前生效库根目录(只读) |
libraries |
[] |
已存库列表 {name, path} |
indexFile |
空 | 自定义索引路径;留空则按库自动生成 |
dataDir |
<插件目录>/.data |
索引、阅读日志与缓存 |
pythonPath |
python |
索引脚本解释器 |
openInSidebar |
true |
命中后是否自动在右侧栏打开 PDF |
limit |
8 |
单次检索默认条数 |
多库各自独立索引;某库首次切换若无索引,跑一次 endnote_rebuild 即可。库目录搬家后改 libraryPath,不必一定重建索引(路径按当前库根重新拼接)。
典型用法¶
在对话中向模型提出文献问题即可;插件注入的系统提示会要求先 endnote_search。例如:
- 让模型按关键词检索本地库(多词为 AND)。
- 对带 PDF 的命中条目调用
endnote_open,在右侧栏阅读。 - 用
endnote_recent回顾近期读过的文献;侧栏面板可查看统计与最近导入(新导入需先endnote_rebuild才进入统计)。
维护者提供的测试命令(开发/自测):
node test/core.test.mjs
node test/tools.test.mjs
node test/client.test.mjs
适用场景与注意¶
适合:已在 EndNote 中维护个人或课题组库、PDF 与条目已关联,希望在 DSH 里做「馆藏优先」的精读式调研的用户。
隐私(据 README):除正常对话外,插件不向外部发送数据;检索、打开、面板均在本地完成。.data/ 含绝对路径与元数据,已被 .gitignore 排除,勿提交版本库。
已知限制:
- 无
sidebarRight/sessions时客户端半边降级,工具仍可用。 - 同一 PDF 再次打开会聚焦已有标签页。
webServer/connection缺失时面板相关 HTTP 路由降级,六个工具不受影响。
结尾¶
dsh-endnote 把文献调研默认改成本地 EndNote 优先,并把命中 PDF 接到 DSH 右侧预览,适合「库里有、要先读原文再问」的习惯。进一步了解可看 SkillHub 目录页 与 GitHub 仓库。当前 package.json 版本为 0.1.2。