@mappedinfo/dsh-paper-library
v0.2.5
Published
Independent literature library with portable PDF annotations for DeepSeek Harness
Readme
Paper Library
Paper Library 将文献收集、PDF 阅读与批注、知识整理和 LaTeX 写作放在同一个工作环境中,可以作为 DeepSeek Harness 插件使用,也可以独立运行。文献与数据集留在自己的资料库;DSH 对话沿用宿主模型配置,后台文献分析另支持显式配置的 GLM/Kimi/DeepSeek API,无需打开界面。
DSH 社区介绍与讨论包含合成演示截图与当前能力说明。
项目原创代码采用 MIT。默认 PDF 引擎 PyMuPDF 采用 AGPL/商业许可,CSL 等第三方组件保留原许可;完整安装的依赖栈并非仅受 MIT 约束。详见 第三方许可。
继续开发前先读 项目交接,其中记录当前能力、验证证据和待验证项。 版本变更见 CHANGELOG。
本地资料维护另提供基础元数据覆盖检查:先复用 Zotero 和采集清单中的资料,再列出需要补全的文件,避免为已有字段重复调用模型。另有独立模型 API 测试,用合成示例验证 GLM/Kimi 直连,无需运行 DSH。
无界面批量分析:独立后端使用说明提供命令行与程序调用入口,支持独立资料提取、23 个问题的逐题分批阅读和待审阅笔记。可编辑问题与提示词采用选择项、可选自由判断和原文证据,由程序生成图谱;全文分析不再提取书目资料与原始 Abstract。默认文本路径保持不变;可显式选择 Markdown,并由独立 GLM/Kimi/DeepSeek 后端按页接收有界图像,原生 DSH 明确拒绝图像请求。结果保存在同一资料库,之后可在 Paper Library 查看、审阅及明确写回。默认不自动修改 PDF 资料;模型次数与并发均有上限。与 Research Knowledge OS 的文献、证据、论断图谱已有 rkos-v3 导出适配,完整边界见兼容性说明。
从收集文献到阅读、整理与写作
- 收集、管理与引用:导入 PDF、论文链接、DOI 或 JSON/RIS/BibTeX,检索与维护元数据,复制 APA 7 引用、导出 BibLaTeX,并检查引用键与资料缺失。使用方法
- 阅读与原生 PDF 批注:连续滚动、缩放和正文选文;高亮、下划线、删除线、便笺以及关联手写保存在管理副本 PDF 中,导出后继续携带批注,导入原件保持不变;详情页的「⇱ 在新分栏打开」把当前论文放进第二个分栏标签页,多篇论文并排对照、各自记住阅读位置。Pencil 与手写
- DSH 对话、伴学与语言:每篇论文使用自己的 DSH 对话,把选文和批注带入提问,保存关联回复;可开启实时伴学,翻译、优化表述并积累难词。论文对话 · 实时伴学
- 阅读项目与文献画板:按主题组织文献,用节点和连线整理思路,把文献与知识图谱节点放到画板;画板可作为固定引用带入 DSH 对话,也支持 Mermaid/draw.io 互通。阅读项目 · 文献画板
- 数据集与知识记录:登记数据集、版本和论文使用关系,有限预览本地表格;从选定来源生成待审阅的关系与笔记草稿,保留出处和核对状态。数据集与知识工作流
- LaTeX 写作:在工作台中编辑源码、调用本机 TeX 编译并查看 PDF,比较版本;双击 PDF 精确定位源码,记录源码选段与 PDF 高亮/区域便笺,在统一自审列表复查和导出(单人自审);向 DSH 提问或审阅修改提案,接受后才写入文件。LaTeX 工作台
文献库、阅读与批注
从文献库检索、整理条目,打开 PDF 阅读,再将摘录与自己的问题保存在批注中。以下演示只使用通用的阅读、思考与写作练习。演示说明


文献画板把练习文档与阅读步骤放在一起,整理“阅读 → 思考 → 写作 → 返回阅读”的学习循环。

LaTeX 工作台支持并排编辑源码和预览编译结果,继续完成写作。

安装与开发说明当前源码与已发布 npm 版本的区别。
设置
插件右上角 设置,或 DSH 设置 → 插件 → 插件配置 → Paper Library,均可调整后台自动整理、整理后补齐空缺资料、实时伴学、阅读侧栏位置与 LaTeX 工作台选项。两个入口读写同一个 DSH paper-library 设置区,保存后同步;模型和外观继续使用 DSH 原有设置。
DSH 0.1.7 起,插件把偏好字段声明为 cordis Config 的 volatile 字段,DSH 据此自动生成上述表单,改动即时生效、无需重启;用户改动保存在当前 DSH profile 的插件配置里(旧版 DSH 的 $DSH_HOME/settings.yaml 会在升级时自动迁入)。首次接入时只迁移 DSH 中尚未明确设置的旧偏好,并保留旧记录与备份。并发修改会提示重新读取,恢复默认不会重新导入旧值。资料库路径、Python 和执行权限等部署项继续由安装配置管理。
DSH 设置 → 插件 → 插件列表 可查看已加载的 @mappedinfo/dsh-paper-library;全局插件可能默认折叠,也可按包名搜索。此列表表示本机已安装插件。社区展示见上述讨论链接。
npm 安装的包不含 Python 虚拟环境;首次执行文献操作时插件会自动安装(优先 uv sync,否则创建 venv 并安装 PyMuPDF、固定版本 pymupdf4llm==0.2.9、跨平台锁 filelock 与 XLSX 读取依赖 openpyxl),需要网络且只需一次。两者都不可用时按报错提示安装 uv 或 Python 3.11+ 后重试即可。既有插件环境会在首次操作前补齐核心锁依赖、首次导入 XLSX 时补齐表格依赖;显式指定 Python 时按提示自行安装到该环境。
独立预览服务(npm start)始终可以保存本地设置。旧版本曾把"库已交给 DSH 管理但 DSH 端入口缺失"误判为只读;现在只要 DSH 没有真正接管该命名空间,预览页就回退到本库存储继续读写,避免形成死锁。不同浏览器访问同一个 DSH 服务时共享主机设置。
使用
按下方步骤安装到 Harness profile 后,重启 Harness,在右侧面板的入口页选择 文献库 / Paper Library。启动时不会导入或扫描现有 Zotero 文献。
- 把 PDF 拖入窗口,或粘贴论文链接 / DOI,自动下载或复制、解析并保存。支持多文件顺序导入;「文献库」工具栏的「导入」可选择文件、输入本地路径,或导入 JSON、RIS、BibTeX。目录和元数据按每批 100 条继续处理,显示累计进度;每条记录保存检查点。
- 搜索标题、作者、年份、DOI、引用键、标签或摘要。侧栏卡片用于选文阅读;「文献库」或「展开表格」用于排序、分页和维护资料。点击目录表格的题名会直接进入阅读界面(无 PDF 的条目只显示资料,不产生 PDF 读取);行内的「编辑」等操作仍只做选择,不打扰表格浏览。PDF 连续滚动,只保留当前页附近最多三页的图像和文字;页码输入框可直接跳转。「全屏阅读」扩展阅读区域,Esc 返回。阅读工具栏提供缩放:默认「全宽」自适应窗宽,可用 −/+、直接输入 25–400 的百分比,或点「全宽」复位;放大后页面横向滚动,放大会按需提高渲染密度以免文字发虚。点击文中的批注标记会定位并高亮批注栏里对应的条目;点击批注栏条目则滚动到文中该批注并高亮闪示(选文优先:拖选文字仍走批注流程)。阅读与批注栏之间有一条分隔条,可拖动无级调整侧栏宽度(160–720 px,键盘方向键也可微调),PDF 随窗宽自动重新适配;宽度与缩放保存在主机,换浏览器或刷新后恢复。
- 在顶部「批注」工具栏选择高亮、下划线、删除线及颜色,然后拖选文字保存想法;「便笺」可点选页面位置。阅读侧栏用「文献库/批注」标签切换内容,可整体移到右侧;切换时保留检索、列表滚动与 PDF 阅读位置。Ctrl/Cmd + K 返回文献库检索。窄屏或全屏时可收起侧栏,恢复 PDF 空间。保存完成后,标准批注已写进管理副本 PDF。
- 顶部工具栏按当前操作切换。库和阅读工具栏中的「引用与导出」菜单提供 APA 7、BibLaTeX、批注 PDF 和批注文本导出,打开菜单保留当前视图和阅读位置;「资料」打开快速编辑侧栏。资料草稿保存在运行 DSH 的本机,关闭页面、切换论文或换浏览器后可恢复。APA 7 同时提供富文本和纯文本;「导出文献库」导出全库引用元数据。「构建引用库」在文献库
exports/目录写入规范references.bib与身份审计bibliography.audit.json(引用键冲突、DOI 重复、缺失字段、受管 PDF 文件核对;缺 DOI 的条目按"有页面链接可补全/只能手工"分别列出);AI 会话也可用library_bibliography工具触发同一构建,并可显式分批核验 DOI 的公开登记信息——逐字段比较题名、年份、期刊与第一作者,冲突会同时保留目录值与登记值,只比较,不回写。 - 在「知识图谱」中添加方法、数据集、主张、证据、概念、作者或机构,并记录有方向的关系及依据。作者、机构和标签等元数据节点与读者记录的主张分别标示;图中关系不会自动成为学术证据。
- 打开论文时,插件自动建立或复用这篇论文的 DSH 对话。「对话」打开阅读中的可缩放浮窗,关闭后保留问题与引用并停止刷新历史。通过「新增与更新」「选择…」或「全部」建立本次引用集合,可混选新旧批注、增删条目,并附加临时选文。之后保存的批注会提示加入,不会改变已有选择。插件内与 DSH 主页面使用同一段历史。
- 点击「放入主输入框」将固定的批注集合以原生引用标签追加到论文主对话,由你编辑问题、发送。也可以「保存并放入主对话」。仅准备草稿不会调用模型;「发送」和可选的「实时伴学」会使用模型额度。新安装默认关闭自动回复,升级保留已有选择。
- 对带批注引用的提问,DSH 完成回复后会自动将 AI 原文保存到对应批注下面,折叠显示为「AI 回复」。涉及多条批注的回复会在各自下面显示关联;批注计数只统计原批注。PDF 保存标准回复关系以及会话、消息、当次引用快照标识,重复保存不会增加副本。保存失败可在对话中重试,DSH 原回复保留。没有明确批注引用的回复仍可手动保存,显示在「未关联回复」中。
- 选中文字后点击「直接翻译」或「优化表述」,在阅读浮窗中查看结果与表达说明。也可以从顶部「语言」输入自己的草稿。翻译默认译成中文,可切换英文;表述优化保留原文语言、含义和证据强度。两者沿用本篇论文当前的 DSH 模型;结果自动落盘,可复制或带入论文对话草稿。
- 「难词本」自动积累处理原文中出现的难词,保留原句、论文、已知页码与 AI 释义。可以检索、核对和编辑释义、标记已掌握、删除或导出 JSON / CSV。AI 推荐的难词初始为「待学习」,不代表已经学会。
草稿、引用选择、阅读位置、旧版偏好、语言记录与难词本存入 $DSH_HOME/paper-library/<文献库哈希>/state;未设置 DSH_HOME 时使用 ~/.dsh。不同浏览器连接同一个 DSH 服务时共享这些文件。文献与 PDF 继续放在配置的文献库目录,主对话继续使用 DSH 原生会话文件。浏览器只保留当前操作所需的内存数据,不把内容写入 localStorage 或浏览器缓存。旧版浏览器草稿会在首次打开时迁移并核对;冲突版本另存为本机备份,可从「导出旧草稿」取回。同时编辑发生冲突时,界面保留当前未保存文字并提供导出,不会覆盖另一窗口的版本。
资料库默认在 ~/.local/share/dsh-paper-library。PDF 导入时复制到该目录;原件不修改。关闭 Zotero 后可以继续使用全部本地功能。模型功能需要连接经过身份验证的 DSH 服务;同一服务可从不同浏览器访问。独立预览服务可以管理和阅读资料,但没有单独连接 DSH 模型的代理。
界面沿用 DSH 的中性色、系统无衬线字体、按钮与侧栏样式。在 DSH 中打开时,浅色/深色主题和内容字号随主应用实时更新,不需要刷新阅读页;独立网页跟随系统的浅色/深色设置。主题变化只调整阅读工具、面板和表单,PDF 原文及所选批注颜色保持原样。插件不另存一套主题偏好。
Pencil 文字标注与关联手写
读到值得追问的地方,先高亮,再点这条批注的 手写。直接在原页写字、圈出图表、画箭头,笔迹会关联到这条批注。需要整页自由写画时,也可以使用顶部的 手写 工具。
1. 标准高亮,原页写画:高亮、下划线与删除线绑定正文文字。选好批注后,在 PDF 上继续写画,保留原文、图表与笔迹的空间关系。进入手写时就显示固定的一行工具栏;落笔和自动保存不会再把页面往下推。

2. 收笔继续读,批注里看原笔迹:关联手写时,停笔约 1.5 秒后自动暂存;点击 完成手写 立即回到之前的标注工具,保存继续在后台进行。批注卡片展示原笔迹预览,原文摘录和手写想法一起保留。接入 DSH 视觉模型后,还可以自动转文字并校对,原笔迹继续保留。

3. 点笔迹,回到写下它的地方:点卡片摘录回到原文,点笔迹预览回到手写位置。目标区域会短暂描亮;查看后点 返回刚才位置 继续阅读。笔迹写入标准 PDF,导出再导入也能恢复关联。

以上三图为当前 main 的实际 Chromium 界面,使用合成文档和程序输入的演示笔画,无真实论文或模型生成内容。复现演示 · 安装当前源码
面向 Apple Pencil 随航阅读场景开发,目前以 Chrome 验证。笔与手指能否分开识别取决于系统和浏览器传入的事件;物理 Pencil/随航、Safari 和 Electron 仍需设备验证,当前没有压感笔宽或双击、挤压切换工具。
结束、保存、笔迹预览与定位已按 交互设计 接入插件;合成 Chrome 验证与真机待验范围见下文。
在 Mac 上打开文献库,将窗口移到随航的 iPad。在 批注 工具栏选择 高亮、下划线或删除线,用 Pencil 拖过正文:标注绑定选中的文字,保存为标准 PDF 批注。支持跨行与部分词语选择;同一次选文限定在一页内。没有文字层的扫描页可先添加「便笺」。Apple 随航说明
- 高亮后直接写画:点侧栏对应批注的整行「手写」按钮,直接在这一页 PDF 上写字、圈画。手写开关和顶部「完成手写」的点击高度至少为 44 px。笔迹自动关联该批注;再次点击会冻结笔迹并立即回到之前的高亮、下划线等工具,保存随后继续。「保存并手写」也进入同一流程。
- 停笔自动保存:停笔约 1.5 秒后暂存一批新笔迹。页码、手写状态和返回/撤销/清除/完成操作合并在固定一行;进入手写就显示,首笔与自动保存不再推移 PDF。主机确认接收后,即使阅读窗口被收起或重建,也继续写入 PDF。只有写入确认才显示「已保存到 PDF」。尚未暂存时可继续阅读,暂停新增手写;保存待确认时可按原身份重试,原笔迹保留。顶部「笔迹」可查看进度、重试或导出待存笔迹。
- 原文与笔迹各自定位:卡片内显示原笔迹 SVG 预览;点击摘录定位原文,点击预览定位笔迹。相距较远的笔迹分区显示。目标仅描亮 1.8 秒,不修改 PDF;「返回刚才位置」恢复查阅前的位置。后台页面更新避开正在进行的书写和选文。
- 结束后自动转文字:在 DSH 配有视觉模型时,结束手写后识别已保存的笔迹,结果显示在该批注下并标为 AI 识别。可展开校对;校对文字不会被后续自动识别覆盖。原笔迹始终保留,新增笔迹会提示文字待更新。失败可重试原请求,或明确点「重新识别」发起新请求;纯文本模型不影响笔迹保存。
- 写进标准 PDF:页面笔迹保存为原生
/Ink,以/IRT回复关系关联高亮;识别文字单独保存为带来源标记的回复。导出后重新导入可恢复,不依赖原目录数据库。旧的 SVG 手写便签通过「打开原便签」继续编辑,导入原件不修改。 - 自由手写继续保留:顶部工具栏「手写」可不关联高亮地写画,以「完成手写」冻结一批并恢复阅读。单批最多 64 笔/4,096 点/128 KiB;单论文最多 8 个待存批次/256 KiB,全队列最多 4 篇论文/16 批/1 MiB,达到任一限制会保留原稿并提示。每条批注合计最多 64 组、128 笔/8,192 点/256 KiB 几何。主机暂存确认前的崩溃和未完成笔画仍不保证恢复;父窗口交接只保留尚未确认的笔迹及队列引用。
笔与手指分工:在手写、高亮、下划线和删除线工具中,浏览器报告的笔输入负责标注,手指拖动负责滚动;放大后也可左右拖动。书写中的额外触控不会移动页面或取消笔画。默认保留鼠标兼容书写;打开 笔输入 可查看实际识别类型,确认 Pencil 显示「手写笔」后,可开启 仅用笔标注。若显示「鼠标兼容输入」,应保持关闭。该开关只限制上述标注工具,普通选择和便笺继续支持鼠标。
浏览器中断输入、失去指针捕获或笔移出未捕获区域时,已采集的笔画部分会保留,并提示继续书写;明确点「撤销」或「清除」才删除草稿。若再次出现笔画消失,打开 笔输入 → 导出手写诊断:本机最多保留最近 256 条输入、保存与重绘事件,仅含时间、内部标识、笔数和状态,不含正文、图片或笔迹坐标。诊断在后台分批记录,不能追溯升级前或尚未传回主机的事件。
当前先适配 Chrome,后续验证 Electron。macOS 27 与 iPadOS 27 的随航支持更完整的触控,但框架可能只转发兼容鼠标/滚动事件,不能仅凭系统版本保证网页能辨认笔与手指。Apple 开发说明 接收浏览器提供的捕获、中断取消与合并采样,使用固定笔宽;当前没有压感笔宽、Pencil 双击或挤压切换工具。待保存笔迹可逐笔撤销。
验证包括结束、预览与定位、笔与触控分工、关联页面手写、识别和旧便签兼容、标准文字标注及真实 Harness 图片接口,均使用合成文档,涉及模型时使用确定性替身。各回执保留实际日期;物理 Pencil/随航手感和真实识别准确率仍需实际试用。
阅读项目
文献库顶部的「阅读项目」把文献组织成可复用的主题清单:选一个项目,文献库就只列它的成员;选「全部文献」回到整库。
- 新建、编辑与归档:项目栏的「+ 新建」填写标题、说明与标签(逗号分隔);选中一个项目后才能「编辑」或「归档」。归档只把项目从列表移出,文献本身完全不受影响,需要时可以恢复。项目存在文献库目录的目录数据库里,因此与文献一起备份、检索,AI 会话也能读写。
- 一篇文献属于多个项目:论文工具栏的「项目 N」按钮打开勾选列表,勾选即加入、取消勾选即移出;列表底部可以直接输入标题并回车「新建项目并加入」。N 是这篇文献当前所属的项目数,列表里的「N 篇」是该项目的成员数。
- 多对多、不复制:关联只是目录里的一条边。移出项目不会删除或归档文献;归档项目也不会动文献,原来的成员关系在恢复后仍然成立。
- 画板可以属于项目:画板工具栏的「项目 ▾」菜单里选择阅读项目并「关联项目」(多对多,只写关联,不复制内容),与画板自身的论文关联互不影响。
- AI 也能整理项目:DSH 会话可用
library_projects工具列出、新建、改名、归档、恢复项目,关联或移出文献,并查询一篇文献所属的项目(for_paper)。它读写的就是同一个目录数据库,不复制文献。
验证记录见 9 项真实 Chromium 回执(PLAYWRIGHT_MODULE=/path/to/playwright/index.mjs node scripts/project-ui-fixture.mjs,合成文献库、零外部请求)。
文献画板
顶部「画板」打开一张自由画布:拖拽平移、滚轮滚动、Ctrl/⌘ + 滚轮缩放,工具条提供文本、便签、矩形、椭圆、菱形节点;拖动节点移动,右下角手柄改尺寸,右侧圆点拖到另一个节点即建立有向连线。多选(框选或 Shift 点击)后可删除、复制、方向键微调,Ctrl/⌘ + Z 撤销、Shift + Ctrl/⌘ + Z 重做。窄侧栏里可以点「全屏 ⤢」用整块屏幕画,Esc 或再点一次退出。
- 在 DSH 里是独立入口:DSH 右侧栏的「开始页面」列出本插件提供的三个入口 —— 文献库(检索、引用、批注与论文对话)、画板(自由画布、连线与自动排版)与 LaTeX 工作台(源码与编译预览)。三者是同一个插件的三个标签类型:各自有入口卡片、各自开一个标签页,可以并排打开;画板标签只显示画布(文献库、阅读与批注都不出现),需要看库时切回文献库标签即可。这也是「画板与库解耦」在界面层的体现:画布是同一份
web/board.js,页面通过?view=board以画板模式打开,并且先判定入口再加载,不会先闪一下文献库。 - 工具栏只留常用的,其余进菜单:画板顶部只有两行——第一行是工具与「画板 ▾」(文件列表),第二行是撤销/重做、缩放、视图组(适应 · 全屏 · 专注)、放入对话,右侧是「排版 ▾」「项目 ▾」和「☰」。节点/连线样式(形状、描边、关系、标签、线型、箭头、虚线、夹角)只在你选中东西时才出现;排版(含「整理成树」)在自己的可展开面板里;绑定文献(+文献/关联本篇/解除本篇)、源文件、Mermaid、接受 AI 改动、返回文献库与删除画板都在 ☰ 里。菜单是浮层:打开不挤压画布,Esc 或点空白处关闭。窄栏下工具栏仍是两三行(工具行可横滑),画布拿走其余全部高度。
- 与库解耦:画板是独立文件(私有状态记录),不绑定任何论文;但一张画板可以同时关联多篇论文,也可以关联一个或多个阅读项目(见上,多对多、只写关联)。文献库左侧新增「画板」列表:可直接打开、对当前论文一键「关联本篇/解除」,论文工具栏也有「+ 画板」(新建即关联)与「这张论文的画板 N」。
- 纯画板专注模式:画板工具栏的「专注 ⤢」会隐藏顶栏、文献库、阅读与批注,只留画布(Esc 或再点一次退出);不需要浏览器全屏权限,因此在 DSH 侧栏里也能用。全屏本身也只看得到画板。
- 形状各有其形:矩形是直角、便签是暖色纸片(方角 + 折角 + 轻微投影)、概念与文献是圆角容器、椭圆与菱形各是其形;给形状起名时输入框是半透明虚线框,不会把菱形暂时盖成一个圆角矩形。
- 空形状也会保留:形状工具点一下画布会出现形状并打开输入框;即使没有填写文字,按 Esc 或点别处后,形状与已有连线仍会保存。画布显示「(空)」,大纲按类型显示「(空矩形)」等名称,之后可以继续填写。正在输入时保存会等编辑结束。
- 连线:选「连线」工具后点起点再点终点即可连边(也可拖节点右侧圆点);选中连线后,画布右上会出现连线样式面板:线型(箭头/直线/折线)、箭头(单向/无/双向)、虚线、夹角,并填写关系与标签。拖动线段中段会插入拐点,拖动拐点调整走向,Alt 点击或双击拐点可删除;刚画好的线会自动成为选中项。
- 连线与节点边的夹角:连线不会贴着节点边扎进去。它和所连那条边始终有夹角:默认垂直于边,选中连线后可在「夹角」里调到 75°/60°/45°/30°,最小 30°(更小的值按 30° 处理),所以箭头总会稳稳落在边上而不是沿着边滑过去;新画的线沿用你最近一次选择的夹角。
- 自动排版:「排版 ▾」里可选择分层树(保留你排的上下顺序,支持左右/上下/反向)、放射思维导图、分层图 DAG,并可调水平/垂直间距后点「应用排版」(已选中多个节点时只排这些)。排版是确定性的:重复应用不会漂移。把特殊位置的节点「钉住选中」后,它们永远不参与自动排版。
- Mermaid 进/出:☰ 菜单里的「Mermaid」打开源文件对话框中的同一个输入框:粘贴
flowchart/graph(带 TB/TD/BT/LR/RL 方向)后点「解析为源文件」,它会解析成画板自己的源文件(节点形状、连线箭头/虚线、边标签、&分支、<br/>换行与实体都认),并自动按图示方向排版;随后仍用同一个「校验并应用」写入画板。反向的「画板导为 Mermaid」把当前画布写成可直接粘进 README 的文本。不引入 mermaid 依赖:只实现我们内部结构能表达的子集,看不懂的(classDef/style/linkStyle/click)会被忽略,subgraph会展开,~~~与粗线等近似都会在状态栏里按行号说明,不会猜。 - 可读源文件 + 样式辅助文件:点「源文件」可以生成、编辑、校验并应用一对文件——
board.json(标题、节点、连线;短标识、稳定键序、不含像素坐标)与board.style.json(配色、尺寸、字号、按关系的连线样式、排版方式与间距、固定坐标)。 两个文件都可手改或交给 AI 生成,也可以下载/导入;独立站还能直接用 URL 加载仓库里的源文件(见下)。 - 文献就是节点:把左侧文献库里的论文拖到画布上即成为文献节点(记录当时的题名、年份与引用键,缺失字段留空而不臆造),双击节点直接回到那篇论文的阅读器。也可以点「+ 文献」用键盘可达的选择器勾选一篇或多篇加入。
- 图谱节点也能进画板:在「知识图谱」里选中一个节点后点「加入画板」,它就会出现在当前画板里(文献类型节点保留论文绑定,其余按显示的名称成为概念节点)。画板与图谱占用同一栏、无法同时可见,所以这里用按钮而不是拖拽。
- 整理成树:选中若干节点(不选则整张画板)后点「整理成树」,按连线排成从左到右的层级:根在最左,子节点各占一列,父节点居中于首末子节点之间;同一张画板重复整理结果不变。没有连线的节点作为独立根排在下方,已有摆放不会被破坏。在「+ 文献」里勾选多篇并填一个主题,点「用勾选的文献新建画板」,就会得到一张已经排好的思维导图(主题根节点 + 每篇一个文献节点)。
- 放进对话:「放入对话」先把当前画板冻结成一份不可变快照,再把一个画板引用标签放进 DSH 主输入框;你可以先补问题再发送,只准备草稿不会调用模型。发送时 DSH 收到的是冻结那一刻的大纲(此后编辑或删除画板都不会改变已发出的材料),输入框里显示为「〔引用画板 …〕」标记。格式损坏、快照缺失或身份不一致会让这次提问明确失败,而不是改发别的内容。与批注引用共用预算(一次最多 4 组、默认 24,000 字符)。
- AI 也能读写画板:DSH 会话可用
library_board工具列出、读取、创建与修改画板。模型新增或改动的节点与连线会标为「AI 提议」(虚线边框)等待你确认,未改动的内容保留你的署名,只有你能「接受 AI 改动」;AI 新建的画板在你保存前一直是待核对状态。 - 保存与冲突:画板改动自动保存到运行 DSH 的本机(与批注草稿同一私有状态目录),关闭画板、切换画板或离开页面都会先写入。若同一张画板在另一个窗口被修改,界面会提示冲突,并提供「载入已保存版本」或「另存为新画板」,两边都不会被覆盖。删除画板只置墓碑,记录仍留在本机状态目录,可由人工恢复。
画板只在打开时存在于浏览器内存:没有常驻渲染进程、没有后台任务,打开、列表与绘制都不调用模型。验证记录见 34 项真实 Chromium 回执(含按 DOM 变更量而非耗时衡量的绘制代价守卫)(含画板入口以纯画布打开、420px 窄栏下工具栏收纳与画布占满整栏、按实测路径量出的连线夹角下限、粘贴 Mermaid 后写入画板并再导出、打开 draw.io 文件(含 draw.io 自己保存的压缩页)后写入画板并再导出为 .drawio,以及空形状不阻塞保存)与 7 项原生 DSH 回执,设计与边界见 docs/whiteboard-design.md。
画板与 draw.io 双向互通:.drawio/mxGraph XML(未压缩与他们保存的压缩形式都读)可以从「☰ → 源文件与来源 → draw.io」导入并走同一条「校验并应用」,也能把画板导出成 draw.io 与官方 draw.io MCP 都能打开的文件;无法表达的部分逐条带行号报告。同一份格式之上还有本仓库自己的 MCP 服务器 mcp/server.mjs(stdio、零依赖、默认只读、画板路径限定在 --root 内):读写可读源文件与 .drawio,加 --library <文献库> 后另外提供三个只读文献工具(检索、元数据、批注),node scripts/mcp-probe.mjs mcp/server.mjs --root <目录> 可直接查看它的工具面。许可证核查、实测的格式契约与边界见 draw.io 互通与 MCP。
独立画板(GitHub Pages)
同一份画布代码也作为一个独立静态画板发布在 GitHub Pages 上,不需要 DSH、不需要服务器:
https://mappedinfo.github.io/dsh-paper-library/
(用 URL 渲染仓库里的源文件:?src=boards/example.json)
(2026-09-18 已用真实浏览器在线核对:资源可访问、可绘制、刷新后恢复、自动排版、连线与折线、导出 PNG、并用 URL 渲染仓库源文件,零第三方请求,见 线上回执)。它由 .github/workflows/pages.yml 在 main 上自动构建部署;
页面里的文献库、阅读器、对话引用控件在独立模式下隐藏而不是假装可用。存储用的是浏览器
localStorage(按来源与浏览器各自独立,容量约 5 MB,上限 40 张画板 / 4 MiB,界面会报告用量),
因此**「导出 JSON」才是长期备份**;导入同标识的文件不会覆盖,而是另存为新画板。独立站支持 PNG 导出
(按模型绘制,不依赖页面样式与字体)。构建与边界见 docs/board-pages.md,
本地回执见 docs/validation/board-standalone.json(15 项,含粘贴 Mermaid 成图),线上回执见 docs/validation/board-pages-live.json(node scripts/verify-pages.mjs 可随时复核,其中也验证 Mermaid 入口可用)。所有回执的「回执 ← 复现命令」索引见 docs/validation/README.md。
实时伴学
在连接 DSH 的阅读页打开工具栏「实时伴学」,此后保存或修改带文字评论的批注会自动排队,使用本篇论文当前的 DSH 模型回应。连续约 1.8 秒内修改同一条待处理批注会合并;不同批注依次回应。单纯高亮、历史批注和 AI 回复不会自动重发。「保存并放入主对话」仍只准备草稿。
AI 按连续阅读方式回应释义、复述、追问、批判或联想,区分原文依据、读者理解和 AI 推断。需要时留下可稍后验证的问题,不强制当场考试,也不把解释过等同于已经掌握。每次只发送当前批注与所在物理页最多 7,000 字符的文字;不是全文、图表或 OCR 解读。复杂问题可以继续在同一篇论文的对话中补充材料。
任务和状态保存在 DSH 主机,关掉阅读页后继续;完成后回复写进 PDF,显示在来源批注下面。未开始的任务重启可恢复;不确定的生成不会默默重试。批注下显示等待、已保存或失败,PDF 写回失败可只重试保存已有回答。停止生成仍使用 DSH 主对话的停止按钮。关闭伴学会暂停未提交的任务,已交给 DSH 的任务继续完成。
这一版由插件内保存事件触发,不监听 WPS 或其他阅读器中的文件修改。也不自动更新私有伴学档案、数学基础库或领域知识库;这些知识沉淀仍属于明确选择材料后的工作流。实现与恢复规则见 API。
数据集与知识工作流
「库」支持按全部/文献/数据集检索和筛选。点击「添加数据集」登记名称、创建者、发布者、入口、许可与覆盖范围;无需 PDF 或介绍论文。数据集可以有多个版本,每个版本保留独立的 DOI、引用键和引用信息。未知版本保持为空。
在数据集页面「关联论文」,或在论文工具栏「数据集」,记录提及、引用、实际使用、发布或介绍关系。用途、使用范围、实际版本、原文、已知页码及核对状态分别保存;两边都能查询关系。名字相同不会自动合并,AI 提议始终待审阅。
「连接文件」登记运行 DSH 的主机上的文件绝对路径,或只保存远程入口。点击预览才读取本地 CSV/TSV/JSONL:最多 100 行、50 列、512 KiB 响应;另有 4 MiB 输入、64 KiB 单行和 2 秒解析预算。遇到预算或编码问题明确显示部分结果与原因。这里不会下载整个数据包、复制大文件、统计全量或为整个目录建立内容索引。
从论文、数据集或版本打开「知识工作流」:保存摘录或选择已保存批注,勾选本次材料,再生成关系草稿或知识笔记草稿。调用当前条目的 DSH 原生模型,一次最多 40 条来源、合计 24,000 字符;不会扫描全库。原文快照固定在主机目录,已有批注后来改变时可显式检查,新旧版本分开保留。模型建议先待审阅;接受笔记草稿后,还可以编辑并保存为 Markdown。审阅草稿时可点「结构检查」做只读体检:无支撑主张、孤立节点、未被引用的证据、重复关系与悬空端点会逐条列出,不自动修改草稿。
插件内置三个项目技能:paper-library-knowledge 负责 Evidence/Observation/Claim、Edge/Assertion 的有来源编码;paper-library-notes 负责可读笔记;paper-library-review 负责论文证据图谱评审(案例拆分、八维编码、归因三态、联合覆盖反拼接、逐项状态机),并在后台整理时自动生成一份「证据图谱评审」待审草稿。它们使用插件工具和当前 DSH 模型,不安装原技能的私有专家库、Wiki 自动发现或 Zotero 依赖;个人阶段标准与投稿侧重放在使用方自己的私有仓库,通过 reviewProfile 配置注入,不随插件发布。
数据集、版本、关联、固定来源和结构化草稿位于资料库 SQLite;笔记正文在 knowledge/notes/*.md,草稿和生成请求记录使用 DSH-home 文件存储。支持 CAS 冲突提示、显式核对和中断后的笔记恢复。浏览器缓存不承担持久化。
导出范围有明确区别:APA/BibLaTeX/CSL JSON 是引用元数据;CSL JSON 还保留数据集与版本的身份映射。「导出知识记录」包含当前范围的已审核图、笔记及它们引用的来源。「RKOS」是带映射和损失报告的兼容子集;原版不支持的数据集原生来源仍保留在知识 JSON 中。以上均不等同于包含原始文件、全部草稿与会话的整库备份。详见实施与存储约定和验证记录。
文献工作台
LaTeX 工作台现在使用本地打包的 CodeMirror:支持语法高亮、常用命令建议、撤销/重做及当前文件查找/替换。标题和操作合并为单行,导航可收起,并可选择并排、仅源码或仅 PDF。低频的「编译主文件」切换位于「项目与设置」菜单;同处可选择全局编译引擎(默认 XeLaTeX,另支持 pdfLaTeX/LuaLaTeX)。编译结果旁可展开诊断与日志,已确认的项目内错误位置支持点击定位。详见使用与边界及设计审查。
LaTeX 未完成内容用 todo 或 xxxx 标记,草稿和正式稿写作期间都允许。
PDF 预览支持全篇连续滚动,当前位置与相邻页按需渲染;高亮、下划线和删除线可直接保存,选文也可直接写批注。每次成功手动编译保存一个含源码、PDF 与批注副本的版本,工作台「版本」和阅读项目「写作版本」共用记录,可就地查看历史稿。旧批注保留原编译位置,不自动迁移到新排版。批注与版本说明
源码栏「插入」可导入图片、编辑表格和提取检查公式。⌘/Ctrl+Shift+I 插入图片模板,⌘/Ctrl+Shift+T 打开表格编辑;图片拖放或截图粘贴会保存到当前项目 figures/,表格支持 Markdown、Excel 复制选区与 .xlsx 文件。公式检查覆盖保存源码中的常见数学环境、括号和标签问题,仍需人工核对数学含义。批注保存只更新标记层,连续阅读提前准备下一页;文件路径字体在写作设置或 DSH 插件设置中自选。写作工具与限制
现可通过 library_latex 的 lint 或 JSON action latex_lint 显式检查:写作期列警告,
投稿检查发现占位或检查范围不完整时返回未通过,保存与编译照常。
调用示例、双入口与忽略规则。
库标题行提供紧凑检索。表格题名和作者各占最多两行,完整题名可悬停或聚焦查看;更多列通过表格内部横向滚动浏览。

一个装着 .tex 和对应 PDF 的文件夹可以登记为 LaTeX 项目:源码、参考文献与编译产物留在原处,插件只索引主文件与页面。顶栏「LaTeX」把整页切成独立的 LaTeX 工作台(和画板一样,也可用 ?view=latex 作为单独入口,DSH 开始页面的「LaTeX 工作台」卡片则以独立标签页打开,写作可与文献库、画板并排;工具栏「返回文献库」返回),深浅色都跟随主题。插件自己维护论文目录(默认 ~/.dsh/manuscripts,部署配置 latexRoot 可覆盖),☰ 菜单里新建项目、写入最小 main.tex、登记已有文件夹、与其他项目对比与写作设置;该目录默认作为独立源加入数据同步服务(先备份、只新增、不删改其他源)。工作台本身是源码在左、PDF 在右、中间可拖拽分栏(比例落库);「修改提案」(逐字替换的提案先审后写,接受时走同一套 CAS 写入并记为 ai:<model>)与「问 DSH」(选区或整篇作为有界上下文,就地回答、不改文件)放在阅读侧栏里——和「批注」共用同一套侧栏(左右切换、宽度拖拽、标题栏),打开工作台时自动展开,工具栏的「DSH 写作」可随时收起。原生工具 library_latex 读、library_latex_edit 写:列出项目内文件、带修订号地读写 .tex、调用你本机的 latexmk 编译(xelatex / pdflatex / lualatex,可设超时,失败时给出错误行与日志尾部)、渲染项目 PDF,并在同一文件的历史版本之间或两个项目之间做 unified diff。写入是原子且带 CAS 的,路径始终被限制在项目目录内,clean 只删构建副产物。设计与边界见 LaTeX 项目。
数据同步服务(例如 Vault Sync)同步来的 PDF 目录可以按符号链接纳入同一个访问地址:在插件设置里填同步服务配置文件路径,再写上选中哪些目录(或 [{"select":"all"}]),书库下会出现 external/<source>/… 的虚拟文件夹,几千个 PDF 不复制、不移动、不删除,扫描按大小/修改时间增量进行。第一次给其中一篇写批注时才复制进 pdfs/,同步目录始终只读。配置、扫描预算、重命名与文件消失的处理见**外部文献源**。不配置时插件与从前完全一致,两个插件都可以独立安装。
带 PDF 的文献默认阅读全文并自动整理。通过 DSH 导入或关联 PDF 后,文献进入主机队列;选中尚无整理记录的论文也会排队。读取范围留空表示全部,也可填写 1-5,8。使用本篇论文的 DSH 模型构建有出处的图谱并提出基础资料建议,不向主对话发送消息。
从导入到草稿的完整链路、每阶段写下的数据与存放位置见落库后的自动解析流程(含 Mermaid 图与数据产出对照表)。
「新增或选中文献后自动整理」和「完成后补齐空缺资料」默认开启,可在插件或 DSH 设置中关闭。关闭自动整理会暂停待处理队列,当前任务可单独取消。已有、失败、取消或中断的整理记录不会自动重跑,可点击「重新整理」。补缺只采用有原文依据的建议,保留已有值、DOI、引用键和 JCR;AI 填入内容仍待核对,并发修改时停止补写。升级保留已保存的开关选择。
全文按小批次连续读取:一次最多访问 8 页、8 段文字、24,000 字符;长页按文字位置继续读取,整篇不受 8 页限制。不同论文可有界并行整理(部署项 analysisConcurrency,1–4,默认 2),同一篇论文内部仍逐批串行,逐批保存来源和图谱;界面显示已完成页数,可切换批次审阅。扫描页和图像暂不做 OCR,未读取内容不纳入结论。整理完成后会基于已落盘的批次图谱再生成一份精读笔记草稿(一句话概括、研究问题、核心主张附页码、方法与数据、主要结果、局限与疑点、证据等级、待核实与未覆盖),同样待核对;笔记生成失败不影响已保存的图谱与资料。
在所需批次勾选节点并点击「选中材料加入论文对话」,只把选中节点及其关系加入草稿。关闭页面后队列继续运行,重启后恢复尚未开始的排队项;结果不确定的模型调用不会自动重发。取消或后续批次失败时,已完成批次仍可查看。分批图谱分别保留来源,当前不会自动合并跨批次同名节点。所有记录位于主机磁盘,不扫描现有全库寻找待处理项。
侧栏卡片以两行 12 px 题名、一行作者/年份,以及紧凑的期刊/引用键/PDF 行展示文献。完整信息可通过卡片提示或打开文献查看;标签与分区保留在表格和详情中。展开表格后,可新建元数据条目、编辑资料,按标题、第一作者、年份、期刊、引用键、导入/修改时间或 JCR 排序。检索、排序和分页由磁盘目录完成,不会打开全库 PDF。JCR 排序使用已提供记录中最新年份的最差学科分区,详情仍显示各条分区及来源。
「移入回收站」保留论文身份、管理副本 PDF、批注和图谱记录;在文献范围中选择「回收站」,点击「恢复」即可返回文献库。回收站中的文献不能直接阅读或编辑,先恢复后继续使用。
资料表单支持作者对应机构及发表、在线发表、印刷发表、收稿和接收日期。日期可以只填已知的年或年月。「补全资料」按已保存的 DOI 或论文链接获取公开元数据,身份匹配后仅补缺,打开可核对的编辑草稿;保存前不会改动目录或 PDF。已有手工资料与 JCR 记录保留。JCR 每条记录须有年份、学科、Q1–Q4 分区及来源;插件不依据引用次数或影响因子猜测分区,也不会把 Crossref 注册日期、更新日期或 arXiv 提交日期当作期刊收稿/发表日期。
图谱按论文保存读者添加的节点、方向关系、原文、解释、来源和已知页码。元数据节点只读,需通过资料编辑改变;读者节点和关系可编辑、删除,删除节点会同时删除其读者关系。每次最多显示 200 个节点、400 条关系,超出时提示缩小范围。未知页码留空,相同姓名不会自动合并为同一个人。交互与边界见工作台设计约定,调用方式见 API。
论文对话
首次建立论文对话时,沿用当时 DSH 会话可读取的模型选择和推理强度;没有来源选择时采用 Harness 默认。之后由这篇论文的主对话管理模型,插件显示其实际选择。模型服务、对话历史、工具执行和权限处理均由 Harness 提供。需要查看完整历史、处理工具权限或停止回复时,点击「打开主对话」。
尚未发送消息时,对话已经保存,但 DSH 侧栏会隐藏非当前的空对话,当前空对话则显示「新会话」并收起主页面标题栏。可以从论文的「打开主对话」进入;首次发送后,侧栏会正常显示论文标题。
「查看/调整」支持检索、按页筛选和多选,每页显示 20 条。目录最多读取 1,000 条用户批注,原文和评论各显示 240 字符摘要;发送前会核对所选版本并读取完整正文。已编辑的选中项需显式采用当前版本,已删除项需移除。「全部」只在目录完整且身份可区分时可用,排除 AI 回复。
默认一次来源预算为批注原文、评论与选文合计 24,000 字符,超过时提示减少选择、分次提问,不会静默截断。部署方可用 maxAnnotationCharacters 调整至 1,000–96,000;这不是模型的上下文长度保证。尚未实现自动分批汇总。选文上限为 8,000 字符,问题上限为 4,000 字符。
准备引用会保存不可变的私有快照。之后编辑 PDF 不会改变已经放入主输入框的材料,失败重试继续使用同一快照。保存、选择和排队都不单独计作「已发送」;只有原生会话实际记录来源正文并确认持久化,才更新「未发送/发送后已更新/已发送」状态。长期对话压缩后可以重新选择旧批注,「已发送」不代表模型始终记得。
插件内只显示最近最多 20 条已提交的用户/AI 文本,每条最多 6,000 字符,总计最多 48,000 字符。点击历史中的「查看当次引用」可读取固定材料并返回 PDF 页码。主对话使用 DSH 原生 Paper Library 上下文显示来源正文;输入标签可打开快照检查器。刷新后标签暂时恢复为普通引用 token,仍可发送和查看,尚不自动重建标签。批注带上题名、引用键、真实页码及标识,与问题分别记录;AI 回复仍需由读者判断。
对话历史保存在 Harness,标准批注和已保存的 AI 回复保存在 PDF,引用快照保存在文献库的私有 .paper-library/ 目录。快照用于复现当次发送材料,PDF 仍是可编辑批注的权威来源。引用与问题草稿按论文保存到本机,每条记录上限 256 KiB;内存工作集受限,旧草稿不会因切换论文而被淘汰。发送版本投影最多保留 5,000 个身份,超出时返回不完整标识。回复关联只采用本轮已实际写入 DSH 日志、且与固定快照一致的批注引用,不根据 AI 措辞猜测,也不把上一轮引用自动沿用到无引用的追问。旧的未关联回复若仍能在当前历史窗口找到可靠引用,会补上关联并保留原文;否则保持未关联状态。归档的论文对话会显示状态;当前 Harness 没有供插件调用的恢复归档接口,插件不会自动复制对话。移动文献库目录后,目前不会自动迁移原来的论文会话对应关系。详见持续批注与对话引用。
自动获取与命名
支持公开 PDF 直链、DOI、arXiv 链接,以及带论文下载元数据的页面。文件按流写入磁盘,再用 PDF 解析器检查可读性。默认读取最多前三页和文件内元数据;检测到 DOI 时,在线题名必须与 PDF 解析标题匹配,才补全作者、年份等字段。不会因正文出现了另一篇论文的 DOI 就替换当前资料。
管理副本命名为 作者-年份-标题--稳定标识.pdf;缺失作者或年份使用 unknown-author / undated,显示“资料待核对”。编辑资料后文件名随之更新。来源链接、获取记录和解析依据保留在条目及 PDF 内。仅取得元数据时明确显示“尚未取得 PDF”,可以稍后补入已有文件。
插件内置 paper-fetch-skill 的独立文献库版本:paper-library-fetch,通过 Harness 技能目录提供给当前会话。可以在 DSH 中要求“用 paper-library-fetch 把这个 DOI / 链接的论文保存到文献库”,技能调用插件的 library_import,继续使用会话现有模型。内置公开下载流程,不需要额外安装 Zotero、MCP 服务或浏览器抓取运行时。改编来源见 出处记录。
导入队列最多 50 项,PDF 上限 250 MiB。一次失败不会阻断后续文件,结果面板提供重试或重新拖入提示。扫描件暂不自动 OCR;需要登录、验证码或付费的页面可能只能取得元数据,此时使用已有合法 PDF 继续导入。
从 Zotero 迁移
支持 CSL JSON、Zotero/Better BibTeX 风格 JSON 的 items 数组、RIS 和 BibTeX。带 attachments[].path 的 JSON 可保留相对目录结构并一并复制 PDF;保留 citationKey / citation-key / Citation Key:。BibTeX、RIS、CSL JSON 主要用于文献元数据,不能保证携带附件和原生批注。
只有 Zotero 数据库中存在的批注,需要先导出到 PDF,或提供带位置数据的 JSON。 原样复制 Zotero 存储目录中的 PDF 不一定带有这些批注;Zotero 官方说明对此有明确区分。插件可读取已嵌入的外部批注,也可导入 JSON 中带 annotationPosition 的高亮和文字批注;缺少坐标会显示警告。
导入前保留 Zotero 原库及导出副本。重复 DOI、同来源引用键、相同 PDF 哈希会去重;引用键与不同论文发生冲突时明确跳过并报告,避免误合并。当前不迁移 Zotero 收藏夹层级、独立笔记、快照附件或文字处理器中的动态引用字段。
批注跟随 PDF 的方式
- 标准 PDF
/Highlight、/Text对象保存高亮和评论,/Contents是普通可读评论;包含作者、日期、标识与坐标。 - CSL 元数据作为
paper-library.csl.json内嵌附件保存,复制 PDF 后重新导入可恢复标题和引用键。 - 支持导出 XFDF、JSON 和 Markdown。PDF 中的批注为权威数据,检索目录不会替代它。
- 写入前保留上一版 PDF 到资料库
backups/,验证新文件后原子替换;每篇仅保留一个上一版备份。恢复时关闭该文件,复制对应备份覆盖管理副本后刷新。 - 加密、带签名及需修复的 PDF 拒绝写入。外部阅读器可能改写或删除自定义元数据,原生高亮和评论仍按标准对象读取。
已通过 PDF 复制至新位置、导入全新资料库后的批注恢复测试。WPS 的实际保存往返尚未验证;本机原生应用自动化未成功完成打开副本,因此没有将格式测试宣称为 WPS 兼容性认证。当前没有 WPS 动态引用插件。
需要分辨同一页面的不同批注版本时,可按需运行本地 PDF 批注版本检查:分别比较页面、批注内容、笔迹与附件,输出私有分组报告,不修改或合并文件。
内存设计与验证
按约 2,000 条记录、1,000 个 PDF 设计验证规模。SQLite FTS5 trigram 索引在磁盘,缓存预算 2 MiB;短于 3 字符的查询使用字面检索回退。检索不会打开 PDF。PDF 渲染、修改和 CSL 引用格式化均使用短时进程,完成后退出;界面只保留当前页,隐藏 Harness 阅读面板时卸载 iframe。
PDF 上传和下载均使用流式处理,不做整份 Base64 拷贝。服务器限制同时接收的 PDF / JSON 请求,导入队列还设有独立载荷预算,避免大量排队的元数据文件持续占用内存。下载只在导入时触发;资料补全仅在导入或点击「补全资料」时按需请求。
打开论文时只保存一个轻量的原生对话记录,不启动 Agent 或调用模型;不会在批量导入时为所有文献启动对话。批注目录只在当前论文打开、保存或明确刷新时按需解析,快照检查器只保留当前预览。插件只在当前对话视图可见时刷新有限历史,隐藏后停止刷新。真正打开 DSH 主对话或发送消息后,Agent 的驻留与释放由 Harness 管理;当前未测量大量已激活对话长期阅读后的总内存。
没有常驻向量模型、后台 OCR 或全库 PDF 预解析。目前快速检索覆盖元数据和摘要,不包含全文检索。这是当前版本的功能边界,不能据此判断 Zotero 的高内存原因。
本轮合成 2,000 条记录/1,000 个 PDF 的检查中,读取一篇 45 条批注的论文、打开另外 20 篇冷会话并刷新历史 30 次后,Harness 主进程闲置 RSS 为 569.88 MiB,采样最大值为 602.17 MiB;精确批注读取的短时 PDF worker 峰值为 58.14 MiB。历史刷新没有打开 PDF,闲置时没有 PDF worker 或活跃 Agent。上述数字不包含浏览器,不能相加当作应用总峰值,也不能与较早的独立运行直接比较性能改进。详细方法见验证记录。合成文件是小型文字 PDF,不能代替真实扫描件/大图 PDF 的容量验证。
安装与开发
当前源码版本为 v0.2.5,包含 Windows 启动与 PDF 保存兼容修复。 npm 的 latest 可用 npm view @mappedinfo/dsh-paper-library version 核对;也可按下方步骤安装当前 main 源码。
Node ^22.19 || >=24、Python >=3.11、uv 和已构建的本地 DeepSeek Harness。
原生 Windows、macOS 和 Linux 均为基础文献管理、PDF 批注和本地状态存储的维护目标。Windows 基础路径不要求 WSL;仓库提供 Windows/Linux 原生回归,覆盖实际 CLI、中文路径、跨进程写锁、PDF 保存与恢复。该检查不代表完整桌面 GUI、Pencil 或 Windows TeX 工具链均已验收;LaTeX 编译仍需自行安装 latexmk 与 TeX 引擎。
文件写入在各平台保留文件同步和同目录原子替换。POSIX 另同步目录;Windows 跳过普通文件 API 不支持的目录同步,因此不承诺相同的断电持久性。0700/0600 权限仅适用于 POSIX;Windows 沿用所在目录的文件系统 ACL。符号链接功能可能需要 Windows 开发者模式或相应权限。Windows 用户应使用 0.2.5 或之后版本;0.2.4 及更早 npm 包不包含这次修复。源码安装请运行 uv sync --locked 补齐依赖。
git clone https://github.com/mappedinfo/dsh-paper-library.git
cd dsh-paper-library
npm ci --ignore-scripts --legacy-peer-deps
uv sync --locked
npm run build
node scripts/install-harness.mjs --harness /absolute/deepseek-harness --home /absolute/dsh-home --profile web将示例中的路径替换为本地已构建的 Harness checkout 和目标 DSH 配置目录。不传 --home 时安装脚本使用项目内隔离 profile;不会默默修改用户全局配置。脚本仅链接声明的 Harness 运行时依赖,并调用官方插件命令注册。重装依赖后可重新运行它恢复本地依赖链接。源码更新与 npm 发版分别进行;升级时请核对所安装版本的 变更记录。
独立本地界面与 JSON CLI:
npm start -- --library /absolute/library --port 43121
node src/cli.mjs --library /absolute/library < request.json默认服务仅监听 127.0.0.1,拒绝跨来源写入;Harness 内使用其现有认证服务。论文对话不读取其他应用的密钥,不创建第二套服务配置。部署配置支持绝对路径 library、python;localStateHome 可覆盖状态文件所在的 DSH home。provider、model、maxOutputTokens 保留给原有独立反馈 API,论文对话和语言工具使用 Harness 自身的论文会话配置。语言生成独立使用 maxLanguageOutputTokens,默认 8,192,以容纳完整译文和词汇释义。analysisConcurrency 控制同时自动整理论文的上限,默认 2,可调 1–4。translationServer 可指向一个自部署的本机 Zotero translation-server(仅回环 http,如 http://127.0.0.1:1969):「补全资料」在主路径(Crossref/页面元数据)取不到结果时,把同一 DOI/arXiv/页面链接交给侧车的 translators 再试一次;候选条目仍须通过既有的 DOI/题名人身份核对才生成可核对草稿,不会写目录。插件不打包、安装或启动该服务(其许可证为 AGPL-3.0,见 第三方许可),也绝不向它发送 PDF 正文、批注或草稿。详见 API 与 cordis.patch.yml。
验证命令:
node scripts/validate.mjs
npm run test:harness
uv run python scripts/benchmark.py --output artifacts/capacity-new
node --expose-gc scripts/benchmark-node.mjs artifacts/capacity-new/library artifacts/capacity-new/node-report.json测试使用合成数据,产物与文献目录不进入 Git。CSL 使用官方 APA 样式与 citeproc-js,BibLaTeX 使用 Citation.js;出处、版权声明及依赖的许可义务见 THIRD_PARTY.md。
当前共享侧栏更新通过 297 项 JavaScript、105 项 Python 测试,以及 13 项侧栏浏览器流程;另重跑通过 12 项主题和 18 项阅读流程。浅色/深色下验证了紧凑卡片、文献与批注切换、左右移动、阅读位置保持、批注编辑、表格和窄屏/全屏恢复;合成卡片最大高度约 84.06 px,低于测试上限 90 px。侧栏检查没有调用模型、外部请求或浏览器存储写入。
主题专项的 12 项浏览器检查覆盖浅色/深色、430/741/1400 px 布局、键盘焦点、抽样文字对比度和不刷新页面的主题/字号同步。同步检查使用真实 DSH 样式和插件桥接代码,主题事件来自隔离测试环境;验证范围见对应回执。
此前语言学习与本机保存通过两套独立浏览器上下文的 12 项流程,以及真实 DSH 的 6 项集成检查:覆盖翻译、优化、难词积累、跨浏览器草稿、冲突恢复和重启后的幂等重试。该里程碑也验证了阅读、目录工作台、主对话引用的 17、13、11 项浏览器流程;这些专项流程保留此前证据。模型输出采用确定性本地替身,没有外部模型请求。自动化测试、安装核验和此前容量测量的准确范围见验证记录。
