🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

论文精读台 PhysicalAI-0/dsh-paperforge

DeepSeek 客户端
PhysicalAI-035 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

边读 PDF 边向 AI 追问,高亮截图自动存进笔记

31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/PhysicalAI-0/dsh-paperforge.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
静态安装检查有提示项,装前建议看一眼 README
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 35 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-paperforge(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 00:17:59

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 58 处,展示前 44 条)
  • 读取本地文件
    lib/index.js:39
    return JSON.parse(readFileSync(join(PLUGIN_DIR, "package.json"), "utf8")).version;
  • 读取本地文件
    lib/index.js:72
    return candidates.find((candidate) => existsSync(candidate)) || candidates[0] || "";
  • 读取本地文件
    lib/index.js:95
    return candidates.find((candidate) => candidate === "python" || candidate === "python3" || existsSync(candidate)) || "python";
  • 读取本地文件
    lib/index.js:145
    if (!existsSync(paths.highlights)) return [];
  • 读取本地文件
    lib/index.js:146
    const raw = readFileSync(paths.highlights, "utf8");
  • 写入本地文件
    lib/index.js:158
    mkdirSync(paths.dir, { recursive: true });
  • 写入本地文件
    lib/index.js:161
    writeFileSync(paths.highlights, JSON.stringify(list, null, 1), "utf8");
  • 执行外部命令来自配置/变量
    lib/index.js:171
    execFile(
  • 读取本地文件
    lib/index.js:195
    if (!existsSync(pdfPath) || !statSync(pdfPath).isFile()) {
  • 写入本地文件
    lib/index.js:293
    writeFileSync(join(paths.assets, name), buffer);
  • 写入本地文件
    lib/index.js:359
    mkdirSync(paths.dir, { recursive: true });
  • 写入本地文件
    lib/index.js:380
    writeFileSync(store, JSON.stringify(map, null, 2), "utf8");
  • 写入本地文件
    lib/index.js:385
    writeFileSync(store, JSON.stringify(map, null, 2), "utf8");
  • 写入本地文件
    lib/notes.js:152
    writeFileSync(temp, text, "utf8");
  • 写入本地文件
    lib/notes.js:153
    renameSync(temp, file);
  • 写入本地文件
    lib/notes.js:162
    mkdirSync(paths.assets, { recursive: true });
  • 读取本地文件
    lib/notes.js:163
    if (!existsSync(paths.note)) {
  • 读取本地文件
    lib/notes.js:168
    const current = readFileSync(paths.note, "utf8");
  • 读取本地文件
    lib/notes.js:172
    if (!existsSync(backup)) writeFileSync(backup, current, "utf8");
  • 写入本地文件
    lib/notes.js:172
    if (!existsSync(backup)) writeFileSync(backup, current, "utf8");
  • 读取本地文件
    lib/notes.js:179
    const current = readFileSync(paths.note, "utf8");
  • 读取本地文件
    lib/library.js:15
    if (!existsSync(file)) return 0;
  • 读取本地文件
    lib/library.js:16
    const list = JSON.parse(readFileSync(file, "utf8"));
  • 读取本地文件
    lib/library.js:37
    entries = readdirSync(dir, { withFileTypes: true });
  • 读取本地文件
    lib/library.js:63
    mtime = statSync(path).mtimeMs;
  • 读取本地文件
    lib/library.js:72
    hasNote: existsSync(paths.note),
  • 读取本地文件
    lib/markdown-file.js:52
    const stat = statSync(real);
  • 写入本地文件
    lib/markdown-file.js:61
    writeFileSync(temp, text, "utf8");
  • 写入本地文件
    lib/markdown-file.js:63
    chmodSync(temp, statSync(file).mode & 0o7777);
  • 读取本地文件
    lib/markdown-file.js:63
    chmodSync(temp, statSync(file).mode & 0o7777);
  • 写入本地文件
    lib/markdown-file.js:67
    renameSync(temp, file);
  • 读取本地文件
    lib/markdown-file.js:85
    const disk = readFileSync(guard.real, "utf8");
  • 写入本地文件
    lib/markdown-file.js:130
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    lib/markdown-file.js:136
    for (let n = 2; existsSync(file); n += 1) file = join(dir, `${base}-${n}.md`);
  • 写入本地文件
    lib/markdown-file.js:137
    writeFileSync(file, String(content ?? ""), { encoding: "utf8", flag: "wx" });
  • 读取本地文件
    lib/assets.js:25
    entries = readdirSync(dir, { withFileTypes: true });
  • 读取本地文件
    lib/assets.js:56
    text = readFileSync(file, "utf8");
  • 读取本地文件
    lib/assets.js:85
    if (!existsSync(notesRoot)) return result;
  • 读取本地文件
    lib/assets.js:89
    papers = readdirSync(notesRoot, { withFileTypes: true });
  • 读取本地文件
    lib/assets.js:98
    entries = readdirSync(assets, { withFileTypes: true });
  • 删除本地文件
    lib/assets.js:115
    unlinkSync(full);
  • 发起网络请求
    verify.mjs:100
    const response = await logRoute.fetch(
  • 发起网络请求
    verify.mjs:118
    const response = await clipRoute.fetch(
  • 发起网络请求
    verify.mjs:166
    const response = await route.fetch(
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 划词高亮
  • 划词提问
  • 框选截图记笔记

PaperForge — 在 DSH 里锻造你对论文的理解:划词高亮、划词提问(每篇论文一个专属会话)、框选截图记笔记并带反向链接。

README

由 DeepSeek 最新模型翻译生成
在 DSH 里读论文:边读、边问、边记 快速开始 ·亮点 · TODO ·开发手册 · License: MIT DSH Plugin DSH Repo 读懂一篇论文,留下自己的思考。 从论文库点开 PDF,原文、专属 AI 会话与 Markdown 笔记并排展开:选中难懂的段落,带着上下文向 AI 追问;划下重要的文字,框选值得留存的图表,高亮与截图自动收进本地笔记。下次打开,接着上次的思考往下读。 News - 2026-09-29 - 原生多栏阅读布局:左边会话列表,中间本篇论文的 AI 会话,右边 PDF|笔记。 - 新增会话 Summary 与复制路径;笔记目录改为 paperforge_notes,不再引用的图片自动清理。 - Markdown 块级编辑:所有 .md 都能原地编辑、自动保存。 - 阅读链路重做:论文库、笔记实时预览、每篇论文一个专属 AI 会话。 - 2026-09-28 — 首个版本发布;改为 DSH 原生 dsh plugin 安装。
展开完整文档(README 剩余 1 节)
在 DSH 里读论文:边读、边问、边记

快速开始 ·亮点 · TODO ·开发手册 ·

License: MIT DSH Plugin DSH Repo

读懂一篇论文,留下自己的思考。 从论文库点开 PDF,原文、专属 AI 会话与 Markdown 笔记并排展开:选中难懂的段落,带着上下文向 AI 追问;划下重要的文字,框选值得留存的图表,高亮与截图自动收进本地笔记。下次打开,接着上次的思考往下读。

News

- 2026-09-29
- 原生多栏阅读布局:左边会话列表,中间本篇论文的 AI 会话,右边 PDF|笔记。
- 新增会话 Summary 与复制路径;笔记目录改为 paperforge_notes,不再引用的图片自动清理。
- Markdown 块级编辑:所有 .md 都能原地编辑、自动保存。
- 阅读链路重做:论文库、笔记实时预览、每篇论文一个专属 AI 会话。
- 2026-09-28 — 首个版本发布;改为 DSH 原生 dsh plugin 安装。

亮点

阅读布局:左边会话列表,中间本篇论文的 AI 会话,右边 PDF 与笔记

论文库左侧栏「论文」列出工作区里的 PDF,点一篇进入阅读布局标注划词高亮(六色)与框选截图自动写进笔记;选段也可复制为原文或 Markdown 引用 Ask AI划词「Ask AI」或页头「AI」:问题带上 @论文、页码与选段,发进本篇论文的会话

Markdown 编辑所有 .md 都能原地编辑:点一块改源码,离开即渲染;自动保存,与插件、AI 的改动自动合并 Summary论文库「会话」页签勾选会话,生成一份 Summary(Markdown):每 3 个一批引用,最后综合复制路径任意文档页头的复制图标,一键复制文件路径

笔记:点一块改源码,其余保持渲染 Summary:勾选的会话由 AI 汇总成一份 Markdown

截图中的论文页面来自 Vaswani et al., Attention Is All You Need(arXiv:1706.03762),按 Google 的授权注明出处、用于学术用途。Logo 与章节图标由 AI 图像模型生成。

快速开始

前置条件:DSH 0.1.7+,PATH 上有 pnpm。

dsh plugin --profile web add github:PhysicalAI-0/dsh-paperforge
或克隆后本地安装(改代码后重启 dsh web 即生效):
git clone https://github.com/PhysicalAI-0/dsh-paperforge.git && cd dsh-paperforge
dsh plugin --profile web add .

在放论文的目录启动 dsh web(这个目录也要是 DSH 的工作区),左侧栏出现「论文」即安装成功。卸载:dsh plugin --profile web remove dsh-paperforge。

笔记放在哪

/paperforge_notes/
├─ /.md 笔记(标准 Markdown,可直接编辑) ├─ /assets/ 截图;不再被任何笔记引用的图片约 2 分钟后自动删除 ├─ /highlights.json、session.json 高亮位置、与论文会话的绑定 └─ Summary/ 会话 Summary

配置(可选)

在 ~/.dsh/profiles/web/cordis.patch.yml 里按 id 覆盖:

- id: paperforge
config:
workspaceRoot: # 缺省 = 启动 dsh web 的目录 notesDir: paperforge_notes # 笔记根目录名(旧版默认是 notes) model: # 论文会话用的模型;不写则沿用当前模型 provider: deepseek-official name: deepseek-flash reasoningEffort: high

不要写 - insert:(插件会被加载两次)。配置了 model 时,DSH 也会把它存为新会话的默认模型。

TODO

- [ ] Markdown 即时渲染(类似 Vditor):图片点击放大、块拖拽排序
- [ ] 富渲染:mermaid 流程图 / 时序图 / 甘特图、echarts 图表、脑图
- [ ] 为同一篇论文开多个会话(页头「AI」按钮)
- [ ] 按页、按图读论文的工具与读图 skill,降低读图的 token 消耗
- [ ] 问答要点自动写回笔记
- [ ] 统一为 JavaScript:用 mupdf 替换 Python 边车;论文库扫描改为异步

已知限制

- 右侧栏最多两栏(DSH 限制),更多窗口请拖成浮动。
- 论文会话在第一次提问前,左侧列表显示为「新会话」,DSH 的「新建会话」可能复用它。
- Markdown 按块编辑:撤销只在当前块内;跨块的引用式链接与脚注可能不生效;工作区外或超过 2 MB 的 .md 只能预览。
- Summary:DSH 每条消息最多引用 3 个会话,插件分批发送;内容由 AI 用写文件工具写入。
- 不同目录下的同名 PDF 共用一个笔记文件夹;笔记里的章节名固定为中文。

开发

pixi run test # 单元测试 pixi run verify # 契约与冒烟测试

插件分两半:浏览器半 lib/client.js,宿主半 lib/index.js 等(注册 /api/paper.* 路由)。另有可选的 Python 边车 py/,只用于把高亮写进 PDF 文件本身。开发前先读 AGENTS.md:DSH 插件的硬约束、关键 API、踩过的坑和路线图都在里面。

缘起与致谢

作者是 alphaXiv 的重度用户,本插件「划词即问、就地记笔记」的交互正是受它启发。但它的问答额度有限,模型也不能替换,于是把「划词 → 追问 → 落笔记」搬回自己掌控的 DSH:不重复造阅读器,复用 DSH 原生的预览、会话与模型配置。

PaperForge 与 alphaXiv 及其团队无任何隶属、赞助或背书关系,也不包含其任何代码或素材。

License

MIT © dsh-paperforge contributors
预览分享卡片长什么样 ↓PhysicalAI-0/dsh-paperforge
分享 · DeepSeek Harness Hub
PhysicalAI-0/dsh-paperforge

边读 PDF 边向 AI 追问,高亮截图自动存进笔记

这是你的仓库?认领条目

回到顶部