dsh-zotero-workspace
DSH(DeepSeek Harness)右侧栏的 Zotero 文献工作台:不离开对话就能按 Zotero 集合浏览文库、读渲染版 PDF 与解析后的 Markdown,并一键把文献引用与文件路径写进当前会话草稿。
功能
- Zotero tab:右侧栏新增「Zotero 文献工作台」页 —— 集合树 + 条目列表 + 详情;支持 Zotero 服务端检索(标题/摘要/全文)、总数与分页;
- 分区可拖动:集合树 / 文献列表 / 详情三块之间的边界可拖动调整,双击边界恢复默认;布局按用户持久化;
- 侧栏阅读:选中条目直接打开渲染版 PDF 或解析后的 Markdown(
text/markdown附件),走 DSH 原生文件预览; - 带入对话:一键把
[Zotero] 标题 — 作者 (年份) | itemKey=… | PDF: … | MD: …写入当前草稿;模型可直接read文件,也可用 zotero MCP 按 itemKey 取正文。
只读:仅调用 Zotero 本地 API(127.0.0.1:23119),不写文库、不碰 SQLite、不依赖任何 MCP,不会与现有 zotero MCP 冲突。
安装
从 GitHub Release 安装(推荐):
cd ~/.dsh && dsh plugin --profile desktop add "github:hudsonhou/dsh-zotero-workspace#v0.1.0"
Web profile 把 --profile desktop 换成 --profile web。安装后重启 DSH(客户端 bundle 在启动时装配),右侧栏出现「Zotero 文献工作台」。
也可以让插件管理器直接以本地目录安装(开发模式,依赖以 junction/链接指向源码)。
卸载:cd ~/.dsh && dsh plugin --profile desktop remove dsh-zotero-workspace(或在插件页停用)。
本插件注册的是 DSH 原生右侧栏 Tab,与
dsh-better-sidebar并存;装了 better-sidebar 时,打开 PDF/Markdown 优先复用它的文件预览(openFile),否则回退到 DSH 原生 Session 文件地址。上游 better-sidebar 的「添加 Tab 插件」目录条目见文末。
前提
- Zotero 桌面版运行中,且 设置 → 高级 → 允许此计算机上的其他应用程序与 Zotero 通信 已勾选;
- 条目下挂有 PDF 附件;解析后的 Markdown 建议以
text/markdown附件挂回条目(例如由 PDF 解析流程生成的 MD;子笔记也会在详情里列出)。
自测本地 API:
curl --noproxy "*" http://127.0.0.1:23119/api/
应返回 Nothing to see here.,响应头含 Zotero-API-Version: 3。
配置
插件行自带默认值;需要覆盖时在 profile 的 cordis.patch.yml 里按 id zotero-workspace 覆盖 config:
- id: zotero-workspace
config:
zoteroBaseUrl: http://127.0.0.1:23119
storageRoot: '' # 空 = ~/Zotero/storage
pageSize: 50
requestTimeoutMs: 8000
结构
index.js Host 入口:注册只读路由,写 ~/.dsh/zotero-workspace/status.json
lib/core.js Zotero API 客户端、集合/条目/子项映射、PDF/MD 路径解析、storage 边界
lib/handler.js 只读 HTTP 路由(health/tree/items/tags/item/file/mdtext,回环栅栏、GET-only)
client.js Client 半:原生右栏 tab + 面板 UI + 带入对话(lazy-CJS factory)
cordis.patch.yml bundle patch 行(含默认 config)
locale/ meta.title / meta.description(插件页展示)
icon.svg 插件图标
test/ 离线自检(真实 Zotero 库 + 假 React 接线/首屏)
测试
node test/selftest.mjs # 真实 Zotero 本地 API + HTTP 路由
node test/client-wiring.mjs # 客户端插件接线(tab/slot/locale 注册)
node test/client-render.mjs # 首屏渲染冒烟(假 React hooks)
selftest.mjs 需要 Zotero 正在运行;其余两个测试不需要浏览器。
已知限制(v0.1)
- 无标签面板 / 标注浏览 / 整分类引用 / 摘录(
/tags接口已就绪,留给 v0.2); - 一个条目默认打开第一个 PDF 与第一个 Markdown 附件;
- PDF 与 MD 各开一个 DSH 原生预览 tab(可切换);并排分屏未做;
- 引用以纯文本写入草稿(含 itemKey 与两个绝对路径),不是结构化引用 chip;
- 改
client.js后需要重载页面(dsh-unlag 刷新按钮)或重启 DSH。
故障排查
- 面板显示「Zotero 未连接」:确认 Zotero 在运行、本地 API 已勾选,用上面的 curl 自测;
- Host 是否加载:读
~/.dsh/zotero-workspace/status.json(每次 apply 写入); - Host 路由自测:
curl --noproxy "*" http://127.0.0.1:<GUI端口>/dsh-zotero-workspace/api/health; - tab 不出现:确认插件页
dsh-zotero-workspace已启用,并重启过 DSH。
在 dsh-better-sidebar 的插件列表里找到它
dsh-better-sidebar 设置页的「添加 Tab 插件」列表由上游仓库的 src/client/plugins-tabs.ts 维护。本插件已向上游提交目录条目 PR:
- Upstream PR: https://github.com/omdsh-dev/DSH-better-sidebar/pull/1140
- Upstream repo: https://github.com/omdsh-dev/DSH-better-sidebar
PR 合并并随 better-sidebar 发版后,在目录搜索框里搜 Zotero 或 dsh-zotero-workspace 即可定位;在此之前可直接用上方 GitHub Release 命令安装,或通过 GitHub topic 浏览。
No comments yet. Be the first to write one.