dsh-ai-library
Manifest valid★ 8资料馆:把本地多源资料库渲染成 DeepSeek Harness 原生面板,11 种预览器 + 论文检索 + 一键安装
dsh-ai-library · 资料馆
仓库:https://github.com/Instant-KING/dsh-ai-library · npm:
dsh-ai-library
把本地多源资料库渲染成 DeepSeek Harness 的原生面板:左侧三级分类树、中间卡片网格、右侧预览(自带 pdf.js 阅读器),支持条目编辑与拖拽分组。
- 自带 pdf.js 4.10.38,不需要外网 CDN
- Markdown 现场渲染、Office 文件转 PDF 预览
- 拖拽卡片改分组、批量打标签、新建/编辑/删除条目
- 数据全部留在本地;除你主动检索 / 手动同步市场外不联网(论文检索会请求公开 API,AnySearch 匿名请求,见下文 key 配置)
大肥鱼会替你做这些
- 像妈妈一样的大肥鱼:你把东西弄得到处都是,它会把东西收好 —— 本机产物自动入库、自动分类、随时能搜。
- 要搜好用的插件? 大肥鱼自己去插件市场翻,卡片上直接写清 star、版本、兼不兼容。
- 要写漂亮的前端组件? 把 react-bits 这类仓库丢进来建库,大肥鱼就在馆藏里搜现成组件来做页面 UI —— 不用从零抄。
- 要搜真实存在的论文? 大肥鱼自己调十个源的 API(arXiv / OpenAlex / Crossref / DOAJ / Europe PMC / INSPIRE / Zenodo / HAL / DataCite / OpenAIRE),带 DOI 和 PDF 链接,不会编文献。
安装
三种方式,选一种(装完重启 DSH):
# ① npm(推荐)
dsh plugin --profile desktop add dsh-ai-library
# ② 直接从 GitHub
dsh plugin --profile desktop add github:Instant-KING/dsh-ai-library
# ③ 本地目录(开发用,不装包)
# clone 后在 profile 的 cordis.patch.yml 里用绝对路径 insert:
# - insert:
# - id: dsh-ai-library
# name: E:/path/to/dsh-ai-library/lib/index.js
装完第一次打开面板会自动建空库;把文件丢进 <下载目录>/ai-library/items/ 就能看到。
论文检索需要配哪些 key
十个学术源(arXiv / OpenAlex / Crossref / DOAJ / Europe PMC / INSPIRE / Zenodo / HAL / DataCite / OpenAIRE)免 key 直接用。 下面几个是可选的付费/受限源,不配只是查不到它的结果,不会报错:
| 平台 | 配置项 | 去哪申请 | 用途 |
|---|---|---|---|
| Sciverse | paperKeys.sciverse(sv- 开头) | https://sciverse.space/ → 开发者控制台 | 元数据 + 语义检索(RAG) + 读原文 |
| IEEE Xplore | paperKeys.ieee | https://developer.ieee.org/ | IEEE 论文 |
| ScienceDirect | paperKeys.elsevier | https://dev.elsevier.com/ | Elsevier 期刊 |
| Springer | paperKeys.springer | https://dev.springernature.com/ | Springer 论文 |
| AnySearch(可选) | paperKeys.anysearch | https://www.anysearch.com/console/api-keys | 网页检索;留空也能用(匿名免费配额) |
两种填法(任选)
- 面板里填:工具栏「论文检索」→ 右上角「配置 key」→ 粘贴 → 保存(立即生效,不用重启)
- 改文件:插件目录
config.json
{
"paperKeys": {
"sciverse": "sv-你的token",
"ieee": "",
"elsevier": "",
"springer": "",
"anysearch": ""
}
}
⚠️ 语义检索(RAG)只支持 Sciverse:没配
sciverse时面板提示「需要 sciverse key」, 接口返回 400 并说明原因,不会静默失败。
配置
插件目录下的 config.json(可不建,全部字段都有默认值)。参考 config.example.json。
| 字段 | 默认 | 说明 |
|---|---|---|
root | <下载目录>/ai-library | 数据根目录,其余路径从它推出 |
libraryFile | <root>/library.js | 手写条目 |
projectFile | <root>/project-items.js | 批量导入条目(可选) |
marketFile | <root>/market-items.js | 市场同步产物(可选) |
githubFile | <root>/github-items.js | GitHub 项目同步产物(可选) |
userItemsFile | <root>/user-items.json | 面板编辑器写入的条目 |
itemsDir | <root>/items | 文件根目录(只允许读这里) |
cacheDir | <root>/.cache | 缓存 |
translateCache | <cache>/translate | 翻译产物 |
marketCache | <cache>/market.json | 市场原始目录缓存 |
vendorDir | <插件>/vendor | 内置 pdf.js / three.js |
soffice | 自动探测 | LibreOffice 可执行文件(Office 转 PDF) |
motionDir | 空(关闭) | 外部只读挂载的提示词库 |
translateUrl | http://127.0.0.1:11008 | PDFMathTranslate 服务 |
workspaceDir | 空 | 自动入库扫描的根目录 |
watchDirs | [] | 自动入库监听的目录 |
autoCaptureOnBoot | false | 启动后自动扫一次 watchDirs |
autoCaptureProject | 自动入库 | 自动入库的分组名 |
autoCaptureDepth | 2 | 自动入库递归深度 |
toolsEnabled | true | 是否注册 14 个 AI 工具 |
marketUrl | https://api.dshmk.com/ | 插件市场源 |
marketEnabled | false | 是否自动同步市场(默认关,开了启动后自动拉) |
marketLimit | 300 | 市场最多收录条数 |
marketTtlMs | 6 小时 | 市场缓存有效期 |
paperKeys | {} | { ieee, elsevier, springer },论文检索用 |
所有路径字段都支持 ~(会展开成用户主目录)。环境变量(优先级高于 config.json):
AILIB_ROOT AILIB_MOTION_DIR AILIB_WORKSPACE SOFFICE PDFMATHTRANSLATE_URL
论文检索已内置(
lib/paper.js,纯 Node),不需要 Python,也不需要外部项目。
🔐 密钥说明:
config.json里的paperKeys(Sciverse / IEEE / Elsevier / Springer / AnySearch) 以明文保存在插件目录,同名项目通常都是这样。请确保该目录权限不被他人读取; 如果插件装在共享盘或多用户机器上,建议改用环境变量SCIVERSE_API_TOKEN等方式,或只填需要的 key。
主色(主题)
面板的主色(高亮、选中态、极光背景)来自 CSS 变量 --ailib-accent,解析顺序:
config.json 的 accent(或环境变量 AILIB_ACCENT)
↓ 没填
DSH 主题变量 --dsw-alias-brand-primary / --dsw-static-deepseek-500(DSH 若暴露了就用它)
↓ 都没有
插件默认金色 #e6c16f(视觉与旧版完全一致)
想让插件跟 DSH 品牌色一致,在 config.json 里写:
{ "accent": "#4176E6" }
按钮尺寸、圆角、动效都不变,只换主色;极光背景的主色也会跟着变。
表情包图集(与 dsh-meme 联动)
左侧「表情包图集」直接列出 dsh-meme 的图集(内置包 + ~/.dsh/meme-packs 下你导入的):
- 选一个图集 → 主区显示封面、张数、图片网格
- 点「启用这个图集」→ 写
~/.dsh/dsh-expression.json的enabledPacks,表情包插件立即生效 - 「导入图集…」填一个解压好的目录路径(需含
index.db),会复制进~/.dsh/meme-packs/<id> - 「删除」只删用户导入的包,内置包删不掉
数据格式
library.js 是普通 JS:
window.LIBRARY = {
title: '我的资料库',
items: [
{
id: 'k-1', // 唯一,必填
kind: 'paper', // paper / plugin / doc / note …
status: 'available',
title: '一维谐振子',
summary: '升降算符解法',
source: 'arXiv',
tags: ['量子力学'],
notes: ['摘自2026-03讲座'],
files: ['items/papers/harmonic.pdf'], // 相对 items/
preview: {
variants: [
{ label: '原文', src: 'papers/harmonic.pdf' },
{ label: '笔记', src: 'notes/harmonic.md' },
],
},
},
],
groups: {
'k-1': '力学', // id → 子分类,不写就落到「未分类」
},
}
把文件丢进 <root>/items/,条目里写相对路径即可。
合并优先级
多个数据源按顺序合并,后写的覆盖先写的:
外部挂载源 < 批量导入 < 市场同步 < GitHub < library.js < user-items.json
user-items.json 优先级最高,所以编辑器改的东西永远生效,但不会动你的 library.js。
编辑
| 操作 | 入口 |
|---|---|
| 新建 | 面板右上「+ 新建」 |
| 编辑 | 卡片右上 ✎ |
| 删除 | 卡片右上 🗑(手写条目会被隐藏,源文件不动) |
| 改分组 | 把卡片拖到左栏分组行 |
| 多选 | 卡片右上 +,或 Ctrl + 点击卡片 |
| 批量 | 选中后顶部出现:改分组 / 加标签 / 删除 |
删
user-items.json即可回到「只有 library.js」的原始状态。
系统提示词
装载后本插件会往宿主注册一个 ai-library 提示词片段(ctx.inject(['systemPrompt'], …),order 160),
告诉 AI:本机新建/修改的文件要在回话前入库,并给出各场景该用哪个工具(library_import / library_autocapture / library_repo_build / library_save_url / library_paper_add),以及先 library_search 查重、不要把密钥写进库。
片段文本是函数,数据根变化后下一个请求立即生效;服务不存在时不会影响插件加载。
给 AI 的工具
资料馆把这些能力注册成工具,AI 可以直接调用(不用翻文件)。共 14 个:
| 工具 | 类型 | 作用 |
|---|---|---|
library_search | 只读 | 搜条目。meta 搜标题/摘要/标签/备注;fulltext 深入文件内容(md/代码/PDF),返回命中片段;支持 group / project / format 限定(缩小范围省 token) |
library_get | 只读 | 取一条的完整信息 + 文件是否存在 |
library_read | 只读 | 抽文本:md/txt 直读,PDF 用自带 pdf.js(可按页) |
library_stats | 只读 | 按类型/分组统计、有文件数、文本缓存状态 |
library_add | 写入 | 新建条目(只写 user-items.json) |
library_update | 写入 | 改字段(手写条目也能改,存为覆盖副本) |
library_save_url | 写入 | 抓网页 → 存本地 md 快照 → 建条目 |
library_import | 写入 | 把目录里的产物(pptx/docx/pdf/md/png/mp4…)批量入馆 |
library_autocapture | 写入 | 增量入库:只收上次扫描后新增/变化的文件 |
library_repo_build | 写入 | 从仓库建库:clone GitHub 或扫本地目录,README + docs 建条目 |
library_paper_search | 检索 | 十源论文检索 + Sciverse(需 key),内置实现,无需 Python |
library_web_search | 检索 | AnySearch 网页检索(匿名可用),找页面/PDF 落地页 |
library_paper_add | 写入 | 把检索结果存成 kind: paper 条目 |
library_translate | 长任务 | 提交 PDF 给 PDFMathTranslate,立刻返回 jobId |
library_job | 长任务 | 查任务进度 / 产物 |
路由
宿主注册的全部 HTTP 路由(前缀 /api/ai-library):
| 路由 | 方法 | 作用 |
|---|---|---|
/api/ai-library | GET | 全量条目 + 大类 + 分组表 |
/file | GET | 取 items/ 下的文件(?name=) |
/vendor | GET | 内置 pdf.js / three.js |
/log | POST | 渲染进程错误上报 |
/item | POST/PATCH/DELETE | 条目增改删 |
/bucket | POST/PATCH/DELETE | 大类增改删 |
/install | POST | 一键安装插件(dsh plugin add) |
/update | POST | 自更新:本地 git 目录 pull,npm 安装则重装最新版 |
/repo | GET | GitHub 仓库元信息 |
/compat | GET | 包与当前 DSH 的兼容性 |
/og | GET | GitHub 社交预览图(代理) |
/avatar | GET | GitHub 头像(代理) |
/archive | GET | 压缩包内容列表 |
/paper | GET | 论文检索(十源 + Sciverse;mode=semantic 走语义检索) |
/paper/read | GET | 读 Sciverse 原文切片(doc / offset / limit) |
/keys | GET/POST | 论文平台 key 配置 |
/translate | GET/POST | PDFMathTranslate 代理 |
/market | POST | 同步插件市场 |
/motion | GET | 外部提示词库资源 |
可选环境
插件开箱即用,下面这些都是可选的增强,没有也能正常跑。
| 能力 | 依赖 | 装法 | 什么时候才需要 |
|---|---|---|---|
| 论文翻译(保留排版) | Docker + PDFMathTranslate | 见下 | 要读英文论文、需要双语对照的 PDF 时 |
| Office → PDF 预览 | 本机 LibreOffice | 正常安装即可 | 要预览 pptx / docx / xlsx 时 |
| 插件市场同步 | 外网 | 默认关闭,config.json 里开 marketEnabled | 想同步市场目录时 |
| 外部提示词挂载 | 本地目录 | 配 motionDir | 你有别的提示词库想只读挂进来时 |
论文翻译(可选)
翻译成 PDF 是本插件最有价值的能力之一:它不是把文字抽出来翻,而是保留原文档排版,生成中文/双语 PDF,公式、图表、目录位置都不动。
但它依赖 Docker,体积不小(镜像几 GB),所以不是必装项:
# 1. 装 Docker Desktop 并确保正在运行
# 2. 拉 PDFMathTranslate
git clone https://github.com/PDFMathTranslate/PDFMathTranslate
cd PDFMathTranslate
# 3. 起服务(默认监听 11008)
docker compose up -d
起好之后,在面板里打开任意 PDF,右上角「译中文」按钮就会工作。
没装也能用:按钮会提示「翻译服务不可用」,其余功能完全不受影响。
服务地址可改:
config.json的translateUrl,或环境变量PDFMATHTRANSLATE_URL。
译文缓存在 <root>/.cache/translate/,同一篇论文不会重复翻译。
给插件作者
资料馆是「收纳 + 检索」的底座:任何插件只要能往 POST /api/ai-library/item 写一条数据,就自动获得分类树、卡片、预览、全文搜索和 AI 工具检索。
字段契约、预览变体、工具注册写法、约定 —— 见 INTEGRATION.md。产品定位见 PRODUCT.md。
开发自检
改完代码、重启之前,先跑一遍预检(模拟 DSH 启动流程,逐项断言):
node scripts/preflight.mjs
# 或者
npm run preflight
它会检查:
- 关键文件是否齐全
package.json合法、name正确cordis.patch.yml的 insert id 是否等于包名(不一致会导致面板静默消失)- profile 的
package.json合法 - 宿主插件 import + apply(路由数、工具数、工具契约)
- 客户端 bundle 被求值两次不炸、只注册一次、注册 id 正确、能注册主面板
任何一项 ❌ 就别重启——省得触发 DSH 的「自动修复」把 profile 配置抹掉。
已知问题 / 踩过的坑
1. 桌面版插件不能用 import() 加载相对路径
渲染进程的源是 dsh-app://,import('/api/...') 会失败(Failed to fetch dynamically imported module);但 fetch() 能用。所以加载 pdf.js 走的是 fetch → Blob → import(blobUrl)。
2. pdf.js 只能用 4.x
pdf.js 6 依赖 Uint8Array.prototype.toHex、Map.prototype.getOrInsertComputed(ES2025),Node 24 与常见 Electron 都没有 → 编译期就废。本插件锁定 4.10.38。
3. 客户端插件必须自己声明 module / exports
window.__ModuleLoader__.load({ factory }) 里 loader 不注入这两个变量,必须自己写:
var module = { exports: {} };
var exports = module.exports;
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
漏了会在模块求值阶段抛 ReferenceError,整个界面起不来。
4. ctx.config 要声明 inject: ['config'] 才能读
未声明时访问会抛 cannot get property "config" without inject。
5. Office 预览依赖本机 LibreOffice
首次转 PDF 约 2 秒,之后命中缓存几十毫秒。没装 LibreOffice 时不返回错误:面板显示「用系统程序打开 / 下载」,接口直接回原始文件(附件)。
6. 内嵌网页可能被对方拒绝
带 X-Frame-Options / CSP 的站点(GitHub、知乎、DOI 等)在 iframe 里会空白,点击 ↗ 用新窗口打开。
开发
lib/
├─ index.js 宿主:8 条路由 + 数据合并 + 文件服务
├─ client.js 客户端:面板 UI + pdf.js 查看器 + 编辑器
└─ config.js 配置解析(路径全部从这里出)
vendor/ pdf.js 4.10.38 + 标准字体 + cmaps
改动生效方式:
| 改了什么 | 怎么生效 |
|---|---|
library.js / user-items.json | 面板「刷新」 |
lib/client.js / 样式 | 刷新页面 |
lib/index.js / 新增路由 | 重启 DSH |
config.json | 重启 DSH |
本地自检(不用开 DSH):
node .boot-check.mjs # 客户端模块 boot + 面板渲染
许可
MIT(见 LICENSE)。
vendor/ 下的 pdf.js 是 Apache-2.0,字体另有许可,详见 NOTICE.md。
Compatibility
Versions
| Latest version | Published | Size |
|---|---|---|
| 0.0.0-stage | — | — |
| 0.3.22 | — | — |
| 0.3.25 | — | — |
| 0.3.26 | — | — |
| 0.3.29 | — | — |
| 0.3.30 | — | — |
| 0.3.35 | — | — |
Comments
Loading…
Similar plugins
by Aik358
DSH Literature 文献侧窗插件:在 DeepSeek Harness 侧边栏识别 DOI/arXiv/标题、抓取元数据与全文、写入本地文献库或导出目录,内置 PDF 阅读器。
★ 8
↓ 396/wk
MIT
JavaScript
Sep 16, 2026
dsh plugin --profile web add @a9i5k4/dsh-literatureby nanbbb
DeepSeek Harness 增强插件:视觉/记忆设置面板 + 插件市场 + 本地模型 + 一键重启引擎
★ 0
MIT
JavaScript
Aug 15, 2026
dsh plugin --profile web add dsh-plusby koji-xiaoer
DSH(DeepSeek Harness)插件仓库:增强主页、模型选择器增强、费用预估等插件与一键安装脚本
★ 0
MIT
JavaScript
Aug 21, 2026
dsh plugin --profile web add dsh-mods-enhancedby Anduin9527
Project PDF library with background indexing and cited page highlights for DeepSeek Harness Web
★ 0
AGPL-3.0
JavaScript
Sep 8, 2026
dsh plugin --profile web add dsh-document-evidenceby KeynoWu
DeepSeek Harness AI 新闻插件:多源聚合(HN/ArXiv/官方博客/中文媒体)+ 侧边栏大弹窗新闻流 + 面板内 LLM 总结
★ 0
MIT
JavaScript
Sep 15, 2026
dsh plugin --profile web add dsh-ai-newsby EricWang1358
StudyHub: a DeepSeek Harness (DSH) plugin that turns your own material into questions and spaced review · 把自己的资料变成题目与间隔复习的 DSH 学习插件
★ 124
MIT
JavaScript
Oct 19, 2026
dsh plugin --profile web add @ericwang1358/dsh-daily-flashcard