npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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 工作台支持并排编辑源码和预览编译结果,继续完成写作。

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 文献。

  1. 把 PDF 拖入窗口,或粘贴论文链接 / DOI,自动下载或复制、解析并保存。支持多文件顺序导入;「文献库」工具栏的「导入」可选择文件、输入本地路径,或导入 JSON、RIS、BibTeX。目录和元数据按每批 100 条继续处理,显示累计进度;每条记录保存检查点。
  2. 搜索标题、作者、年份、DOI、引用键、标签或摘要。侧栏卡片用于选文阅读;「文献库」或「展开表格」用于排序、分页和维护资料。点击目录表格的题名会直接进入阅读界面(无 PDF 的条目只显示资料,不产生 PDF 读取);行内的「编辑」等操作仍只做选择,不打扰表格浏览。PDF 连续滚动,只保留当前页附近最多三页的图像和文字;页码输入框可直接跳转。「全屏阅读」扩展阅读区域,Esc 返回。阅读工具栏提供缩放:默认「全宽」自适应窗宽,可用 −/+、直接输入 25–400 的百分比,或点「全宽」复位;放大后页面横向滚动,放大会按需提高渲染密度以免文字发虚。点击文中的批注标记会定位并高亮批注栏里对应的条目;点击批注栏条目则滚动到文中该批注并高亮闪示(选文优先:拖选文字仍走批注流程)。阅读与批注栏之间有一条分隔条,可拖动无级调整侧栏宽度(160–720 px,键盘方向键也可微调),PDF 随窗宽自动重新适配;宽度与缩放保存在主机,换浏览器或刷新后恢复。
  3. 在顶部「批注」工具栏选择高亮、下划线、删除线及颜色,然后拖选文字保存想法;「便笺」可点选页面位置。阅读侧栏用「文献库/批注」标签切换内容,可整体移到右侧;切换时保留检索、列表滚动与 PDF 阅读位置。Ctrl/Cmd + K 返回文献库检索。窄屏或全屏时可收起侧栏,恢复 PDF 空间。保存完成后,标准批注已写进管理副本 PDF。
  4. 顶部工具栏按当前操作切换。库和阅读工具栏中的「引用与导出」菜单提供 APA 7、BibLaTeX、批注 PDF 和批注文本导出,打开菜单保留当前视图和阅读位置;「资料」打开快速编辑侧栏。资料草稿保存在运行 DSH 的本机,关闭页面、切换论文或换浏览器后可恢复。APA 7 同时提供富文本和纯文本;「导出文献库」导出全库引用元数据。「构建引用库」在文献库 exports/ 目录写入规范 references.bib 与身份审计 bibliography.audit.json(引用键冲突、DOI 重复、缺失字段、受管 PDF 文件核对;缺 DOI 的条目按"有页面链接可补全/只能手工"分别列出);AI 会话也可用 library_bibliography 工具触发同一构建,并可显式分批核验 DOI 的公开登记信息——逐字段比较题名、年份、期刊与第一作者,冲突会同时保留目录值与登记值,只比较,不回写。
  5. 在「知识图谱」中添加方法、数据集、主张、证据、概念、作者或机构,并记录有方向的关系及依据。作者、机构和标签等元数据节点与读者记录的主张分别标示;图中关系不会自动成为学术证据。
  6. 打开论文时,插件自动建立或复用这篇论文的 DSH 对话。「对话」打开阅读中的可缩放浮窗,关闭后保留问题与引用并停止刷新历史。通过「新增与更新」「选择…」或「全部」建立本次引用集合,可混选新旧批注、增删条目,并附加临时选文。之后保存的批注会提示加入,不会改变已有选择。插件内与 DSH 主页面使用同一段历史。
  7. 点击「放入主输入框」将固定的批注集合以原生引用标签追加到论文主对话,由你编辑问题、发送。也可以「保存并放入主对话」。仅准备草稿不会调用模型;「发送」和可选的「实时伴学」会使用模型额度。新安装默认关闭自动回复,升级保留已有选择。
  8. 对带批注引用的提问,DSH 完成回复后会自动将 AI 原文保存到对应批注下面,折叠显示为「AI 回复」。涉及多条批注的回复会在各自下面显示关联;批注计数只统计原批注。PDF 保存标准回复关系以及会话、消息、当次引用快照标识,重复保存不会增加副本。保存失败可在对话中重试,DSH 原回复保留。没有明确批注引用的回复仍可手动保存,显示在「未关联回复」中。
  9. 选中文字后点击「直接翻译」或「优化表述」,在阅读浮窗中查看结果与表达说明。也可以从顶部「语言」输入自己的草稿。翻译默认译成中文,可切换英文;表述优化保留原文语言、含义和证据强度。两者沿用本篇论文当前的 DSH 模型;结果自动落盘,可复制或带入论文对话草稿。
  10. 「难词本」自动积累处理原文中出现的难词,保留原句、论文、已知页码与 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 上继续写画,保留原文、图表与笔迹的空间关系。进入手写时就显示固定的一行工具栏;落笔和自动保存不会再把页面往下推。

高亮后在原页圈画、写下 same data?,手写状态和操作合并在一行

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

已保存的批注卡片显示原文摘录与手写预览,PDF 保留对应笔迹

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

点击批注中的笔迹预览后,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 显式检查:写作期列警告, 投稿检查发现占位或检查范围不完整时返回未通过,保存与编译照常。 调用示例、双入口与忽略规则。

库标题行提供紧凑检索。表格题名和作者各占最多两行,完整题名可悬停或聚焦查看;更多列通过表格内部横向滚动浏览。

当前 LaTeX 工作台,左侧为合成稿件源码,右侧为实际编译后的 PDF

一个装着 .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 项浏览器流程;这些专项流程保留此前证据。模型输出采用确定性本地替身,没有外部模型请求。自动化测试、安装核验和此前容量测量的准确范围见验证记录。