DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

siluwr /

siluwr/dsh-paper-reader

Verified

Local paper reading for DeepSeek Harness: a sidebar reader panel plus paper_read/paper_list/paper_scan tools, with a from-scratch pure-Node PDF text extractor (no third-party deps, no network).

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@1790ea9b

论文阅读 Paper Reader

A DeepSeek Harness plugin bundle that reads local papers (PDF / Markdown / plain text): a full-page reader panel in the sidebar, plus paper_read / paper_list / paper_scan tools so the assistant can read the same library section by section. The PDF text extractor is written from scratch in pure Node — no third-party PDF dependency, no network access.

在 DeepSeek Harness 里阅读本地论文(PDF / Markdown / 纯文本):左侧边栏新增一个整页「论文阅读」面板, 并提供 paper_read / paper_list / paper_scan 三个工具,让助手能按章节读取同一批论文。

设计取舍:本插件不做在线抓取,只处理本机文件。抓取 arXiv 等在线来源需要 ctx.web.fetch 的 provider 配置与网络,超出本插件范围。

功能

能力 说明
论文库 解析结果缓存在 $DSH_HOME/paper-reader/,跨会话、跨工作区保留;支持收藏、移除、筛选
面板阅读 标题/作者/元信息、摘要、可点击目录、正文分节渲染、字号调节、篇内搜索(命中高亮 + 上/下一处)
导入 粘贴文件路径添加单个文件;「浏览…」在面板内浏览目录;「扫描文件夹」批量导入一个目录
交给助手 一键把「总结全文 / 翻译摘要 / 讲解选中段落」的提示词复制到剪贴板,粘贴到对话框即可(附带论文 key,助手会用 paper_read 读同一篇)
助手工具 paper_read 按章节/字符预算返回正文;paper_list 浏览论文库;paper_scan 批量导入目录

安装

插件被打包成一个 DSH bundle(Host 半 + Client 半):

# 在 Harness 会话里让 Agent 执行(或经 Plugins 页面安装同一个目录)
plugin_manager install_bundle <本目录绝对路径>

安装后:左侧边栏底部区域出现「论文阅读」图标;插件启用状态与开关在 设置 → 插件 中管理。

结构

package.json        bundle 清单:dsh.bundle.patch + dsh.client + icon/locale
cordis.patch.yml    插入 Host 行 `@local/dsh-paper-reader`
index.js            Host 入口:注册工具与本地 HTTP 接口
client.js           Client 半:main 面板 + sidebar.panellist 图标(纯 JS,无构建)
lib/pdf.js          纯 Node 的 PDF 文本抽取(对象流、ToUnicode、双栏阅读顺序)
lib/document.js     PDF/Markdown/文本 → 结构化文档(章节、摘要、标题作者启发式)
lib/read.js         章节选择与面向模型的格式化输出
lib/service.js      抽取/缓存/浏览/扫描的统一服务
lib/store.js        $DSH_HOME/paper-reader 下的论文库(原子写)
lib/api.js          /paper-reader/api/* 本地接口(面板使用)
lib/tools.js        paper_read / paper_list / paper_scan

数据与接口

  • 论文库:$DSH_HOME/paper-reader/library.json(索引)、papers/<key>.json(结构化正文)、papers/<key>.md(可读导出,可直接用 read 工具读)。设置环境变量 DSH_PAPER_READER_DIR 可把整个库挪到其他位置(离线测试也用这个开关)。
  • 本地接口(仅回环、仅本插件端点):GET /paper-reader/api/{status,library,paper,browse,markdown,search},POST /paper-reader/api/{ingest,scan,favorite,remove}。
  • ctx.webServer 注册的路由本身不带认证(DSH 的既定设计:路由所有者自行负责策略),因此本插件只应答 Host 头为回环地址的请求,并且只接受上表中的端点。

测试

全部测试都是普通 Node ESM 脚本,直接运行即可(Node ≥ 22;开发时用的是 DSH 自带的 Node 24):

node test/layout.test.mjs            # 合成文字块 → 分栏/阅读顺序/词距,14 项断言,无外部依赖
node test/host-offline.test.mjs      # 用假 Cordis ctx 抓取真实 ToolDefinition 与 WebRoute 并驱动它们,
                                     # 27 项断言;论文库被重定向到临时目录,不会碰真实库
node test/pipeline.test.mjs <a.pdf> [more.pdf ...]
                                     # 真实 PDF → 结构化文档,打印标题/作者/页数/字符数/章节树
node test/live-http.test.mjs [a.pdf ...]
                                     # 对已安装插件的本地 HTTP 接口做端到端检查;带 PDF 参数时会强制重抽取
                                     # 并检查正文量与“跨栏粘连”启发式

其中 host-offline.test.mjs 覆盖的是最容易回归的几处:output.schema/render 形状、paper_read 的元信息 表头只出现一次、章节 id 可再次读取、路由对未知端点返回 404、对非回环 Host 返回 403。

实测数据(本机 RTX 4070 SUPER / i5-14600KF):一篇 8 页 IEEE 双栏论文 43,222 字符、14 个章节,208 ms 完成抽取; Elsevier 30 页论文 89,647 字符、30 个章节,13 s(含大量图片流跳过)。测试套件全部通过。

许可证

MIT,见 LICENSE。

已知限制

  • PDF 文本抽取是纯 JS 实现,没有第三方 PDF 库可用。带文本层的论文通常能正确抽出标题/摘要/章节;扫描件(图片型 PDF)与部分嵌入子集字体、复杂公式的 PDF 会得到较少或较乱的文本,插件会在面板与工具输出里明确提示。
  • 双栏排版按 x 聚类重排,跨栏的整宽元素(标题、图注)按纵向位置归位;极端版式可能顺序不理想。
  • 论文库目录写在 $DSH_HOME 下(工作区沙箱之外),因此 store 使用 node:fs 直接读写并自行保证原子写;源文件只读,不会被修改或删除。
  • 面板的「交给助手」通过剪贴板完成:插件不能写入其他插件的输入框(DSH 明确要求不触碰其他插件的 DOM)。
—/ 5

No ratings yet

Verified DSH bundle

Commit 1790ea9bc2e1

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout