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 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Hongcheng-LI/dsh-zotero
DeepSeek Harness 的 Zotero 工具插件:让智能体直接检索你的 Zotero…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目