🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

Zotero 文献库 Hongcheng-LI/dsh-zotero

DeepSeek 客户端v0.3.1
Hongcheng-LI7 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

DeepSeek Harness 的 Zotero 工具插件:让智能体直接检索你的 Zotero…

43.3/100
综合分
21
GitHub 星标
801
npm 周下载
—/5
用户评分

数据截至 2026/10/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/Hongcheng-LI/dsh-zotero.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-zotero-local @ 0.3.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 02:19:23

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 48 处,展示前 40 条)
  • 读取本地文件
    lib/index.js:278
    if (existsSync(filePath)) {
  • 读取本地文件
    lib/index.js:279
    const { size } = await stat(filePath);
  • 写入本地文件
    lib/index.js:286
    await writeFile(join(dirname(filePath), '.zotero-ft-cache'), extracted, 'utf8').catch(() => { });
  • 读取本地文件
    lib/index.js:613
    return { itemKey, attachmentKey, path: resolvedPath, exists: existsSync(resolvedPath) };
  • 读取本地文件
    lib/index.js:621
    return { itemKey, attachmentKey, path: resolvedPath, exists: existsSync(resolvedPath) };
  • 发起网络请求
    lib/zotero-client.js:52
    response = await fetch(url, {
  • 发起网络请求
    lib/zotero-client.js:106
    const response = await this.request(path, { headers: { Accept: 'application/json' } });
  • 发起网络请求
    lib/zotero-client.js:111
    const response = await this.request('/items?limit=1&format=json');
  • 发起网络请求
    lib/zotero-client.js:143
    const response = await this.request(`${base}?${qs(params)}`, { headers: { Accept: 'application/json' } });
  • 发起网络请求
    lib/zotero-client.js:268
    await this.request(`/items/${encodeURIComponent(noteKey)}`, {
  • 发起网络请求
    lib/zotero-client.js:284
    await this.request(`/items/${encodeURIComponent(noteKey)}`, {
  • 读取本地文件
    lib/zotero-client.js:430
    const info = await stat(path).catch(() => null);
  • 读取本地文件
    lib/zotero-client.js:435
    const bytes = new Uint8Array(await readFile(path));
  • 读取本地文件
    lib/storage.js:53
    const ini = readFileSync(join(dataDir, 'profiles.ini'), 'utf8');
  • 读取本地文件
    lib/storage.js:58
    return existsSync(storage) ? storage : null;
  • 读取本地文件
    lib/storage.js:67
    const text = await readFile(cachePath, 'utf8');
  • 写入本地文件
    lib/files.js:17
    await mkdir(dir, { recursive: true });
  • 写入本地文件
    lib/files.js:24
    await writeFile(target, bytes, { flag: 'wx' });
  • 读取本地文件
    lib/pdf.js:25
    const data = new Uint8Array(await readFile(path));
  • 读取本地文件
    lib/pdf.js:67
    const data = new Uint8Array(await readFile(path));
  • 写入本地文件
    src/files.ts:22
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    src/files.ts:29
    await writeFile(target, bytes, { flag: 'wx' })
  • 读取本地文件
    src/index.ts:333
    if (existsSync(filePath)) {
  • 读取本地文件
    src/index.ts:334
    const { size } = await stat(filePath)
  • 写入本地文件
    src/index.ts:341
    await writeFile(join(dirname(filePath), '.zotero-ft-cache'), extracted, 'utf8').catch(() => {})
  • 读取本地文件
    src/index.ts:685
    return { itemKey, attachmentKey, path: resolvedPath, exists: existsSync(resolvedPath) }
  • 读取本地文件
    src/index.ts:693
    return { itemKey, attachmentKey, path: resolvedPath, exists: existsSync(resolvedPath) }
  • 读取本地文件
    src/pdf.ts:27
    const data = new Uint8Array(await readFile(path))
  • 读取本地文件
    src/pdf.ts:68
    const data = new Uint8Array(await readFile(path))
  • 读取本地文件
    src/storage.ts:51
    const ini = readFileSync(join(dataDir, 'profiles.ini'), 'utf8')
  • 读取本地文件
    src/storage.ts:55
    return existsSync(storage) ? storage : null
  • 读取本地文件
    src/storage.ts:64
    const text = await readFile(cachePath, 'utf8')
  • 发起网络请求
    src/zotero-client.ts:84
    response = await fetch(url, {
  • 发起网络请求
    src/zotero-client.ts:156
    const response = await this.request(path, { headers: { Accept: 'application/json' } })
  • 发起网络请求
    src/zotero-client.ts:162
    const response = await this.request('/items?limit=1&format=json')
  • 发起网络请求
    src/zotero-client.ts:201
    const response = await this.request(`${base}?${qs(params)}`, { headers: { Accept: 'application/json' } })
  • 发起网络请求
    src/zotero-client.ts:328
    await this.request(`/items/${encodeURIComponent(noteKey)}`, {
  • 发起网络请求
    src/zotero-client.ts:345
    await this.request(`/items/${encodeURIComponent(noteKey)}`, {
  • 读取本地文件
    src/zotero-client.ts:508
    const info = await stat(path).catch(() => null)
  • 读取本地文件
    src/zotero-client.ts:513
    const bytes = new Uint8Array(await readFile(path))
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 检索Zotero文库
  • 读取元数据与全文
  • 列出附件并下载PDF

DeepSeek Harness 的 Zotero 工具:搜索文库、读取元数据/全文、列出附件、下载 PDF、通过 Zotero 本地 API 管理笔记

README

由 DeepSeek 最新模型翻译生成
dsh-zotero DeepSeek Harness 的 Zotero 工具插件:让智能体直接检索你的 Zotero 文献库、阅读条目元数据与摘要、列出分类和 PDF 附件、读 PDF 全文、代写读书笔记。通过 Zotero 本地 API(7 代及以上可用,实测 9.x;http://127.0.0.1:23119)访问,无需 API Key,纯 Node 实现,零核心改动。 兼容版本:按 DSH 运行时 0.2.0-rc.x(桌面版 44.x 内核)的插件规范更新——schemastery Config 配置校验与设置表单、locale/ 插件管理器元信息、预构建 lib/ 直装、dsh.plugin.json 已按新规范移除(新运行时不读取该文件)。插件本体不声明任何 @deepseek-ai/dsh- peer,能通过所有版本的兼容门禁;并用真实 @deepseek-ai/dsh-tools 注册表做契约测试(见「开发」)。 前置条件 1. 本机安装并运行 Zotero 7 及以上(本地 API 自 7 代引入;本项目在 Zotero 9.0.6 / Windows 上实测通过); 2. 打开 Zotero:设置 → 高级 → 通用 → 勾选「允许本机上的其他应用程序与 Zotero 通信」。
展开完整文档(README 剩余 1 节)
dsh-zotero

DeepSeek Harness 的 Zotero 工具插件:让智能体直接检索你的 Zotero 文献库、阅读条目元数据与摘要、列出分类和 PDF 附件、读 PDF 全文、代写读书笔记。通过 Zotero 本地 API(7 代及以上可用,实测 9.x;http://127.0.0.1:23119)访问,无需 API Key,纯 Node 实现,零核心改动。

兼容版本:按 DSH 运行时 0.2.0-rc.x(桌面版 44.x 内核)的插件规范更新——schemastery Config 配置校验与设置表单、locale/ 插件管理器元信息、预构建 lib/ 直装、dsh.plugin.json 已按新规范移除(新运行时不读取该文件)。插件本体不声明任何 @deepseek-ai/dsh- peer,能通过所有版本的兼容门禁;并用真实 @deepseek-ai/dsh-tools 注册表做契约测试(见「开发」)。

前置条件

1. 本机安装并运行 Zotero 7 及以上(本地 API 自 7 代引入;本项目在 Zotero 9.0.6 / Windows 上实测通过);
2. 打开 Zotero:设置 → 高级 → 通用 → 勾选「允许本机上的其他应用程序与 Zotero 通信」。

兼容性说明:读取类工具(检索/条目/全文/附件路径/笔记读取)在 Zotero 9 上全部实测通过。笔记写入(create/append/update/delete)受本地 API 只读限制不可用(见工具表说明)。

工具一览

| 工具 | 作用 |
| zotero_collections | 列出文献库的所有分类(collectionKey + 条目数),用于限定检索范围 |
| zotero_search | 按关键词检索文献库(标题/作者/年份),支持条目类型、分类、标签、年份区间(sinceYear/beforeYear)、排序、分页;mode 控制返回粒度省 token |
| zotero_recent | 列出最近添加的条目("我刚导入的文献"场景) |
| zotero_item | 按 key 读取条目详情:作者、期刊、DOI、摘要、标签、附件列表 |
| zotero_fulltext | 读条目全文纯文本:优先读 Zotero 全文缓存(.zotero-ft-cache,零下载),无缓存时现场解析本地 PDF(pdfjs-dist,约 0.3s)并写缓存;仅远程链接附件才下载到工作区 |
| zotero_attachment_path | 返回附件在 storage 的原始绝对路径,让 read 工具零拷贝直读 |
| zotero_download | 把条目的 PDF 附件下载到会话工作区(默认),供模型用 read 工具阅读 |
| zotero_notes | 列出某条目的子笔记,或全库按关键词搜笔记正文 |
| zotero_note | 笔记写入:create 新增 / append 追加 / update 更新 / delete 删除。⚠️ 部分版本本地 API 为只读或要求额外握手(428 Zotero-Server-ID),写操作会返回明确提示 |
| zotero_export | 把条目导出为引用格式:BibTeX / RIS / CSL JSON(逐 key 抓取后拼接,最多 25 条/次),可直接贴进 .bib/.ris 或引用管理器 |
| zotero_annotations | 读取条目附件上的 PDF 批注(高亮、批注笔记),带 PDF 页码、文中页码标签、引文和你的评论;自动翻页拉全(实测有附件挂 1000+ 条批注) |
| zotero_browse | 列出库内用户标签(可喂给 zotero_search 的 tag 参数)和保存的智能搜索 |
| zotero_retrieve | 段落级检索:在条目的全文+笔记+批注里按 query 打分(BM25 风格 tf-idf,中英文分词),返回 Top-K 最相关段落,带页码锚点,适合精确引用和"这篇哪里说了 X" |
| zotero_digest | 一次打包条目简报:完整元数据 + 摘要 + BibTeX 引用 + 附件列表 + 与 query 最相关的段落(缺省用标题词),"总结这篇论文"的首选入口 |

示例对话:

在我的 Zotero 里搜一下 transformer 相关的论文,挑 2020 年以后的,把第一篇的全文读一遍,给我写个摘要存进笔记。

安装

方式一:GUI 插件管理器(桌面版 44.x)——设置 → 插件 → 安装,填入仓库地址:

github:Hongcheng-LI/dsh-zotero

方式二:CLI(web / desktop profile 均可):

dsh plugin add github:Hongcheng-LI/dsh-zotero # 当前 profile
dsh plugin --profile web add github:Hongcheng-LI/dsh-zotero

装好后重启 DSH。仓库自带预构建的 lib/,且不声明任何生命周期脚本——pnpm 10 对声明 prepare 的 git 依赖会直接拒装(ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED),本插件零脚本、免白名单直装;插件自带空配置,不会弄崩启动;Zotero 未运行时工具会返回明确的连接提示。

配置(可选)

默认配置即可用(本地库、端口 23119)。插件导出了 schemastery Config schema:

- GUI:插件管理器 → dsh-zotero → 配置,直接用表单改(中英双语描述);
- cordis.patch.yml:在你的 profile($DSH_HOME/profiles/<name>/)里覆盖 tool-zotero 行,然后重启:

- id: tool-zotero
config:
baseUrl: http://127.0.0.1:23119 # Zotero 本地 API 地址 library: user # user(我的文献库)或 group:<群组ID> downloadDir: D:/papers # 附件下载目录,缺省存到会话工作区 dataDir: D:/ZoteroData # Zotero 数据目录(含 profiles.ini),默认自动探测 storageDir: .../zotero/storage # 直接指定 storage 目录(zotero_fulltext / attachment_path 用) maxAttachmentBytes: 67108864 # 单附件下载上限,默认 64MB maxFulltextChars: 80000 # zotero_fulltext 返回的最大字符数,默认 80000 maxLimit: 50 # 检索结果条数上限,默认 50 timeoutMs: 15000 # 本地 API 超时(毫秒)

非法配置(比如 library: abc)会在加载期被 Config schema 拒绝并明确报错,而不是等到调用才失败。

全文与附件路径:插件通过本地 API /file 端点的 302 重定向拿到附件的真实磁盘路径(自定义数据目录也能自动识别,无需配置),全文优先读 Zotero 自己维护的 .zotero-ft-cache 缓存(与附件同目录)。dataDir/storageDir 配置仅在重定向不可用时作为兜底。

开发

npm install
npm test # 构建单元测试(离线,不需要 Zotero)
npm run audit # 运行时审计:清单 / patch / 构建产物 / locale / 兼容门禁
npm run test:smoke # 真实环境冒烟测试:对本机 Zotero 完整跑一遍工具链

运行时契约测试(可选但推荐):test/registry-contract.test.mjs 会用真实的 DSH 工具注册表注册全部 9 个工具,并跑一遍 execute → output schema 校验 → render 管线(mock 的 Zotero 本地 API,离线可跑)。@deepseek-ai/dsh-tools 刻意不出现在 package.json(插件对 DSH 零运行时依赖),想跑契约测试时装一份与目标运行时一致的版本即可,不装则自动跳过:

npm install --no-save @deepseek-ai/dsh-tools@0.2.0-rc.2
npm test

lib/ 是入库的,且没有 prepare 脚本:DSH 的插件安装走 pnpm,pnpm 10 对声明了 prepare 的 git 依赖会硬性拒装(不是静默跳过),所以构建产物必须入库、生命周期脚本必须为空。改动 src/ 后先 npm run build,把刷新后的 lib/ 一起提交。

结构遵循 DSH 插件规范(0.2.0-rc.x):package.json 的 dsh.bundle.patch 声明、cordis.patch.yml 运行时注入行、schemastery Config 配置 schema、locale/ 插件管理器元信息、src/ 源码、lib/ 构建产物。

Zotero tools for DeepSeek Harness:检索你的文库,读取条目元数据与摘要,列出合集与 PDF 附件,读取全文,把 PDF 下载到会话工作区,还能附加笔记——全部通过 Zotero 本地 API 完成,无需 API key。

兼容性:已适配 DSH 0.2.0-rc.x 插件规范(desktop 44.x 内核)——schemastery Config(带校验的配置 + 设置表单)、供插件管理器使用的 locale/ 元信息、随仓库入库的预构建 lib/(pnpm 10 会拦截依赖构建脚本)、按现行规范移除 dsh.plugin.json。插件不声明任何 @deepseek-ai/dsh- peer,因此每个 DSH 版本都能通过版本兼容门禁;契约测试会让每个工具走一遍真实的 @deepseek-ai/dsh-tools 注册表。

需要 Zotero 7+(已在 9.0.6 / Windows 上测试)在本机运行,并在「设置 → 高级」中勾选「允许此计算机上的其他应用程序」。

| 工具 | 作用 |
| zotero_collections | 列出文库合集,含 key 与条目数 |
| zotero_search | 快速检索条目;可按类型、合集、标签、年份范围过滤;支持排序与分页;mode 控制详细程度 |
| zotero_recent | 最近添加的条目 |
| zotero_item | 单个条目的完整元数据,外加附件 key |
| zotero_fulltext | 以纯文本返回全文(优先读 Zotero 全文缓存,回退到下载 PDF) |
| zotero_attachment_path | 已存附件的磁盘路径(零拷贝读取) |
| zotero_download | 下载附件(PDF)到工作区 |
| zotero_notes | 列出条目的子笔记,或在笔记库范围内搜索笔记 |
| zotero_note | 创建 / 追加 / 更新 / 删除笔记 |
| zotero_export | 把条目导出为 BibTeX / RIS / CSL JSON(key 逐个获取,每次调用最多 25 个) |
| zotero_annotations | 读取条目附件上的 PDF 标注:高亮文本、你的评论、PDF 页码和印刷页码标签(超过 100 条自动翻页) |
| zotero_browse | 列出用户标签(可传给 zotero_search 的 tag)和已保存的搜索 |
| zotero_retrieve | 段落级检索:按查询给条目的全文 + 笔记 + 标注排序(tf-idf,混合拉丁文/中日韩文字),返回 top-K 段落并附页码锚点 |
| zotero_digest | 一次性简报:元数据 + 摘要 + BibTeX 引用 + 附件 + 与查询最相关的段落(默认用标题生成查询) |

安装:dsh plugin add github:Hongcheng-LI/dsh-zotero(或通过桌面插件管理器安装),然后重启 DSH。可选配置(baseUrl、library、downloadDir、maxAttachmentBytes、maxLimit、timeoutMs 等)既可以在设置表单里填(schemastery Config),也可以写在配置档 cordis.patch.yml 的 tool-zotero 行下。

开发:npm install && npm test(离线单元测试)、npm run audit(运行时审计)、npm run test:smoke(连接真实 Zotero)。针对真实 DSH registry 的可选契约测试:npm install --no-save @deepseek-ai/dsh-tools@0.2.0-rc.2 && npm test。lib/ 是特意提交的,包也没有声明任何生命周期脚本 —— pnpm 10 会硬性拒绝安装声明了 prepare 的 git 包(ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED)。

License

MIT
预览分享卡片长什么样 ↓Hongcheng-LI/dsh-zotero
分享 · DeepSeek Harness Hub
Hongcheng-LI/dsh-zotero

DeepSeek Harness 的 Zotero 工具插件:让智能体直接检索你的 Zotero…

这是你的仓库?认领条目

回到顶部