@a9i5k4/dsh-literature 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,54 +1,59 @@
1
1
  # DSH Literature · 文献侧窗
2
2
 
3
+ [![中文](https://img.shields.io/badge/语言-中文-blue)](#) · [English](./README_EN.md)
4
+
3
5
  > 在 DeepSeek Harness 侧边栏里识别、下载、阅读并归档学术文献。
4
6
  > 对话中出现的 DOI / arXiv ID / 标题,一键落入本地文献库,全文随取随读。
5
7
 
8
+ ---
9
+
10
+ ## 📥 安装与下载(npm)
11
+
6
12
  [![npm version](https://img.shields.io/npm/v/@a9i5k4/dsh-literature)](https://www.npmjs.com/package/@a9i5k4/dsh-literature)
7
13
  [![npm downloads](https://img.shields.io/npm/dt/@a9i5k4/dsh-literature)](https://www.npmjs.com/package/@a9i5k4/dsh-literature)
8
14
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
9
15
  [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)]()
10
16
 
11
- ---
12
-
13
- ## 特性
14
-
15
- - **自动识别** —— 从模型回复或粘贴文本中解析 `DOI`、`arXiv`、`PMID`、`ISBN` 与标题引用,去重后生成侧窗条目
16
- - **元数据抓取** —— 内置 Crossref / arXiv / OpenAlex 解析,自动补全标题、作者、期刊、年份与摘要
17
- - **全文下载** —— 按 OA 来源(arXiv、OpenAlex OA、Unpaywall、出版商 `citation_pdf_url`)抓取 PDF,失败时给出明确原因并支持重试
18
- - **内置文献库** —— 识别、下载、阅读、笔记全部自给自足,**不依赖任何外部软件**;可选把条目导出到本地文献库(Zotero 生态,走官方 Connector 协议)或导出为 `PDF + .csl.json + .ris` 到任意目录
19
- - **侧窗阅读** —— 内置 PDF 阅读器:缩放、翻页、目录跳转、全文搜索、高亮与笔记
20
- - **冲突预览** —— 库中已有相似条目时,先展示字段级差异再决定保留 / 覆盖 / 合并
21
- - **完全本地** —— 所有请求经本机回环接口转发,无遥测、无云端中转、无账号依赖
22
-
23
- ## 安装
24
-
25
- 要求:DeepSeek Harness(`dsh` CLI)已安装,Node ≥ 20。
17
+ **npm 包:** [`@a9i5k4/dsh-literature`](https://www.npmjs.com/package/@a9i5k4/dsh-literature)
26
18
 
27
19
  ```bash
28
20
  dsh plugin --profile web add @a9i5k4/dsh-literature
29
21
  ```
30
22
 
31
- > 本地开发时可改用 `dsh plugin --profile web add D:/path/to/dsh-literature`(`link:` 协议)。
23
+ - 源码与发布版:[GitHub Releases](https://github.com/Aik358/dsh-literature/releases)
24
+ - 本地开发:`dsh plugin --profile web add D:/path/to/dsh-literature`(`link:` 协议)
25
+ - 安装后重启 `dsh web`,侧边栏出现「文献」入口(若装有右侧栏工作台则并入其 tab)
32
26
 
33
- 安装后重启 `dsh web`,左侧边栏底部会出现「文献」入口。
27
+ ---
34
28
 
35
- ## 快速开始
29
+ ## ✨ 特性
36
30
 
37
- 1. 点击侧边栏「文献」打开侧窗
38
- 2. 直接粘贴一段含文献的文本,或让模型在回复中调用 `zotero_lookup` 工具
39
- 3. 条目进入侧窗后:**下载全文 阅读 保存**
31
+ - **内置文献库** —— 识别、下载、保存、阅读、笔记全程自给自足,**不依赖任何外部软件**;可选导出到本地文献库(Zotero 生态)或目录
32
+ - **自动识别** —— 从模型回复或粘贴文本解析 `DOI` / `arXiv` / `PMID` / `ISBN` / 标题,自动去重
33
+ - **元数据抓取** —— Crossref / arXiv / OpenAlex,自动补全标题、作者、期刊、年份、摘要
34
+ - **全文下载** —— OA 多源(arXiv → OpenAlex OA → Unpaywall → DOI → 出版商链接),失败明确分类并支持重试;可配置自定义下载源
35
+ - **引用生成器** —— Scribbr 风格:参考文献 / 文内引用 / 直接引用(带页码)× APA 7 / GB/T 7714 / MLA 9 / Chicago 17,一键复制
36
+ - **库管理** —— 扫描导入文件夹(文件名自动识别 DOI/arXiv/标题)、从本地文献库批量导入、自动监控新 PDF、条目增删
37
+ - **侧窗阅读** —— 内置 PDF 阅读器:缩放、翻页、目录跳转、全文搜索、高亮与笔记
38
+ - **全网入口** —— 每条文献直达 Google Scholar / 百度学术 / 知网 / 来源页
39
+ - **冲突预览** —— 库中已有相似条目时,先展示字段级差异再决定保留 / 覆盖 / 合并
40
+ - **完全本地** —— 所有请求经本机回环接口转发,无遥测、无云端中转、无账号依赖
41
+
42
+ ## 🚀 快速开始
43
+
44
+ 1. 点击「文献」打开侧窗(或粘贴文本识别)
45
+ 2. 让模型调用 `zotero_lookup`,或直接粘贴含 DOI / arXiv ID 的文本
46
+ 3. 条目入窗后:**下载全文 → 阅读 → 保存**(默认存内置文献库)
40
47
 
41
48
  ```
42
- 对话回复 侧窗动作
43
- ───────────────────────────── ─────────────────────────────
44
49
  "参考 DOI: 10.1038/xxxx" → 条目出现,自动解析元数据
45
50
  "arXiv:1706.03762" → 一键下载全文 PDF
46
- 点击「保存」 → 存入内置文献库(无需外部软件,可随时导出)
51
+ 点击「保存」 → 存入内置文献库(可随时导出)
47
52
  ```
48
53
 
49
- ## 配置
54
+ ## ⚙️ 配置
50
55
 
51
- 侧窗右上角齿轮进入设置(分类:保存与导出 / 识别与下载 / 行为与界面 / 本地文献库):
56
+ 侧窗右上角齿轮进入设置(分类:保存与导出 / 识别与下载 / 行为与界面 / 导入管理 / 自定义下载源 / 高级):
52
57
 
53
58
  | 项 | 说明 | 默认 |
54
59
  |---|---|---|
@@ -58,84 +63,101 @@ dsh plugin --profile web add @a9i5k4/dsh-literature
58
63
  | 自动解析 / 标题识别 / 自动扫描回复 | 识别策略与误报控制 | 开 / 开 / 关 |
59
64
  | 重试次数 / 下载超时 | 网络重试与超时控制 | 3 次 / 30s |
60
65
  | 重复条目策略 | 询问 / 保留库中 / 覆盖为新版本 | 询问 |
66
+ | 入口位置 | 自动(优先右侧栏 tab)/ 固定左侧栏 / 隐藏 | 自动 |
61
67
  | 面板宽度 / 阅读器默认缩放 | 浮窗尺寸与阅读初始视图 | 380px / 适应宽度 |
62
- | Unpaywall 邮箱 | 开放获取查询的请求方标识(建议填写) | 空 |
63
- | 文献库端口 / 数据目录 | 连接参数,可手动覆盖 | 23119 / 自动 |
68
+ | 导入文件夹 / 自动扫描 | 本机 PDF 入库(手动或每 30s 自动) | 空 / 关 |
69
+ | 自定义下载源 | 自建镜像 / 机构代理 / 专属端点(含请求头) | 空 |
70
+
71
+ ## 🧩 与 dsh-better-sidebar 集成
72
+
73
+ 安装了 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) 时,插件自动把「文献」注册为**右侧栏 tab**(`ctx.get('betterSidebar').registerTab`),不再占用左侧栏按钮位;未安装则回退为左侧栏入口 + 浮窗,并持续探测,检测到后自动迁移。
74
+
75
+ ## 📚 引用生成
76
+
77
+ 每条文献卡片的「引用」菜单:
78
+
79
+ | 模式 | 说明 |
80
+ |---|---|
81
+ | 参考文献 | APA 7 / GB/T 7714-2015 / MLA 9 / Chicago 17 完整条目 |
82
+ | 文内引用 | `(Vaswani et al., 2017)` / `(Vaswani等,2017)` |
83
+ | 直接引用 | 输入页码后生成 `(Vaswani et al., 2017, p. 7)` 等 |
84
+
85
+ ## 🔌 自定义下载源
64
86
 
65
- ## dsh-better-sidebar 集成
87
+ 合规前提下,你可以在设置里添加**自己信任**的镜像 / 机构代理 / 专属端点:
66
88
 
67
- 若安装了 [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar)(右侧栏工作台),插件会自动检测并**把「文献」作为右侧栏的一个 tab** 注册(`ctx.betterSidebar.registerTab`),不再占用 DSH 左侧栏底部的按钮位,避免与其它插件入口挤兑。未安装时则回退为左侧栏入口 + 浮窗。
89
+ - URL 模板变量:`{doi}` `{arxiv}` `{isbn}` `{title}` `{url}`
90
+ - 自定义请求头(每行 `名称: 值`),适配带 token / cookie 的端点
91
+ - 作为官方 OA 链之后的兜底;缺变量或非法模板自动跳过
68
92
 
69
- ## 付费墙与需要登录的文献
93
+ > 合规提醒:这些源由你自行配置并对其合法性负责,插件不内置任何破解或侵权来源。
70
94
 
71
- 全文抓取仅使用出版商公开的开放获取来源。当文献需要**登录或机构订阅**时:
95
+ ## 🔒 付费墙与需要登录的文献
72
96
 
73
- 1. 条目会明确标记为「需要登录」,并给出原因
74
- 2. 点击「打开登录页」在浏览器中完成登录 / 机构访问
75
- 3. 下载 PDF 后回到侧窗点「导入本地 PDF」选择文件
76
- 4. 插件校验文件、写入影子库并自动执行保存流程(入库或导出目录)
97
+ 全文抓取仅使用公开的开放获取来源。当文献需要**登录或机构订阅**时:
77
98
 
78
- > 出于版权与合规考虑,插件不接入任何破解 / 镜像来源,也不代为保存账号密码。
99
+ 1. 条目标记「需要登录」并给出原因
100
+ 2. 「打开登录页」在浏览器完成登录 / 机构访问
101
+ 3. 下载 PDF 后点「导入本地 PDF」,插件校验并自动执行保存流程
79
102
 
80
- ## 工作原理
103
+ ## 🧠 工作原理
81
104
 
82
105
  ```
83
- 浏览器侧窗 ── fetch / SSE ──▶ DSH 宿主进程 ── HTTP :23119 ──▶ 本地文献库
84
- · 识别/状态/进度 · 解析与下载 · 只读查询 / 写入
85
- · PDF 阅读器 · 影子索引与笔记
106
+ 浏览器侧窗 ── fetch / SSE ──▶ DSH 宿主进程 ──▶ 本地文献库(可选)/ 自定义源
107
+ · 识别/状态/进度 · 解析与下载 · 内置库 / OA 链
108
+ · PDF 阅读器 · 影子索引与笔记
86
109
  ```
87
110
 
88
- - 默认模式(内置文献库)把条目与全文存放在插件自己的本地存储里,**不依赖任何外部软件**
89
- - 需要时可将条目导出到本地文献库(Zotero 生态):浏览器无法直连(CORS 仅放行特定来源),因此**读写都经 DSH 宿主转发**,写入走官方 Connector 协议两步提交
90
- - 高亮与笔记保存在插件自己的影子存储中,不侵入文献库数据
91
- - 保存目标为文献库当前选中位置;如需归类集合,先在文献库中选择对应集合
111
+ - 默认(内置文献库)把条目与全文存放在插件自己的本地存储,**不依赖任何外部软件**
112
+ - 导出到本地文献库(Zotero 生态)时:浏览器无法直连(CORS 仅放行特定来源),读写经 DSH 宿主转发,写入走官方 Connector 协议两步提交
92
113
 
93
- ## 数据与隐私
114
+ ## 🔐 数据与隐私
94
115
 
95
- - 元数据与全文下载请求直连公开学术 API(Crossref / arXiv / OpenAlex / Unpaywall),**不经过任何第三方中转**
96
- - 插件仅监听 `127.0.0.1` 回环路由,非本机请求一律返回 403
116
+ - 元数据与全文请求直连公开学术 API(Crossref / arXiv / OpenAlex / Unpaywall),**不经任何第三方中转**
117
+ - 插件仅监听 `127.0.0.1` 回环路由,非本机请求一律 403
97
118
  - 无遥测、无统计、不上传任何本地数据
98
119
 
99
- ## 兼容性
120
+ ## 🖥️ 兼容性
100
121
 
101
122
  | 组件 | 版本 |
102
123
  |---|---|
103
124
  | DeepSeek Harness | ≥ 0.1.1-rc.2(Cordis v4) |
104
- | 本地文献库 | 8.x(Zotero 生态,本地 HTTP API v3 / Connector API) |
125
+ | 本地文献库(可选) | 8.x(Zotero 生态,Local API v3 / Connector API) |
105
126
  | Node | ≥ 20 |
106
127
 
107
128
  > 本插件与文献库官方无任何附属关系,为独立的开源兼容实现。
108
129
 
109
- ## 常见问题
130
+ ## 常见问题
110
131
 
111
- **保存后文献库没出现条目?**
112
- 确认文献库已启动、保存目标(当前选中集合)可写;侧窗顶部会显示连接状态。
132
+ **保存后没看到条目?**
133
+ 确认保存方式;内置库模式完全离线,无需任何应用运行。
113
134
 
114
135
  **付费文献下载失败?**
115
- 条目会标记为"需要登录/付费墙":先点「打开登录页」完成登录,下载 PDF 后点「导入本地 PDF」即可入库,无需手动建条目。
136
+ 条目标记「需要登录/付费墙」:先「打开登录页」完成登录,下载后「导入本地 PDF」即可入库;或配置自定义下载源。
116
137
 
117
138
  **修改设置后没生效?**
118
- 设置即时落盘;修改端口后需重启文献库使其生效。
139
+ 设置即时落盘;修改端口后需重启文献库应用使其生效。
119
140
 
120
- ## 开发
141
+ ## 🛠️ 开发
121
142
 
122
143
  ```bash
123
144
  npm install
124
145
  npm run build # 产物输出到 lib/
125
146
  npm run smoke # 逻辑冒烟
126
- npm run test # 宿主侧端到端(模拟请求)
147
+ npm run check:client # 前端 bundle 结构 + apply 矩阵
148
+ npm run test # 宿主侧端到端
127
149
  ```
128
150
 
129
151
  ```
130
152
  src/
131
- ├── node/ # 宿主侧:路由 / 识别 / 元数据 / 下载 / 写入 / 影子库
153
+ ├── node/ # 宿主侧:路由 / 识别 / 元数据 / 下载 / 引用 / 导入 / 影子库
132
154
  │ ├── zotero/ # 与本地文献库交互(只读查询 + Connector 写入)
133
155
  │ ├── metadata/ # Crossref · arXiv · OpenAlex
134
- │ └── fetch/ # OA 全文获取与重试
135
- └── client/ # 浏览器侧:侧窗 UI / PDF 阅读器(pdf.js 自捆)
156
+ │ └── fetch/ # OA 全文获取 / 自定义源 / 重试
157
+ └── client/ # 浏览器侧:侧窗 UI / 引用菜单 / PDF 阅读器(pdf.js 自捆)
136
158
  ```
137
159
 
138
- ## License
160
+ ## 📄 License
139
161
 
140
162
  [MIT](LICENSE)
141
163
 
package/README_EN.md ADDED
@@ -0,0 +1,159 @@
1
+ # DSH Literature · Side Panel
2
+
3
+ [![English](https://img.shields.io/badge/Language-English-blue)](README_EN.md) · [中文](./README.md)
4
+
5
+ > Detect, download, read and archive academic papers from the DeepSeek Harness
6
+ > side panel. DOIs / arXiv IDs / titles from the conversation drop straight
7
+ > into your local library with full text at hand.
8
+
9
+ ---
10
+
11
+ ## 📥 Install & Download (npm)
12
+
13
+ [![npm version](https://img.shields.io/npm/v/@a9i5k4/dsh-literature)](https://www.npmjs.com/package/@a9i5k4/dsh-literature)
14
+ [![npm downloads](https://img.shields.io/npm/dt/@a9i5k4/dsh-literature)](https://www.npmjs.com/package/@a9i5k4/dsh-literature)
15
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
16
+ [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey)]()
17
+
18
+ **npm package:** [`@a9i5k4/dsh-literature`](https://www.npmjs.com/package/@a9i5k4/dsh-literature)
19
+
20
+ ```bash
21
+ dsh plugin --profile web add @a9i5k4/dsh-literature
22
+ ```
23
+
24
+ - Source & releases: [GitHub Releases](https://github.com/Aik358/dsh-literature/releases)
25
+ - Local development: `dsh plugin --profile web add D:/path/to/dsh-literature` (`link:` protocol)
26
+ - Restart `dsh web` after installing; a 「Papers」 entry appears in the sidebar
27
+ (or merges into the right-sidebar workbench tab when present).
28
+
29
+ ---
30
+
31
+ ## ✨ Features
32
+
33
+ - **Built-in library** — detect, download, save, read and annotate with **zero
34
+ external dependencies**; optionally export to a Zotero-ecosystem library or a folder
35
+ - **Auto-detection** — parse `DOI` / `arXiv` / `PMID` / `ISBN` / titles from replies or pasted text, deduped
36
+ - **Metadata** — Crossref / arXiv / OpenAlex fill in title, authors, journal, year, abstract
37
+ - **Full-text download** — OA multi-source chain (arXiv → OpenAlex OA → Unpaywall → DOI → publisher link), classified failures with retry; user-configured custom sources
38
+ - **Citation generator** — Scribbr-style: reference list / in-text / direct quote (with page) × APA 7 / GB/T 7714 / MLA 9 / Chicago 17, one-click copy
39
+ - **Library management** — scan an import folder (DOI/arXiv/title inferred from file names), batch-import from a Zotero-ecosystem library, optional folder watch, add/remove entries
40
+ - **Side-panel reader** — built-in PDF viewer: zoom, pages, outline, full-text search, highlights and notes
41
+ - **Search portals** — every item links to Google Scholar / Baidu Xueshu / CNKI / source page
42
+ - **Conflict preview** — field-level diff against existing entries before saving
43
+ - **Fully local** — loopback-only routes, no telemetry, no cloud relay, no account
44
+
45
+ ## 🚀 Quick Start
46
+
47
+ 1. Open the 「Papers」 panel (or paste text to detect)
48
+ 2. Ask the model to call `zotero_lookup`, or paste text containing DOIs / arXiv IDs
49
+ 3. Per entry: **download full text → read → save** (built-in library by default)
50
+
51
+ ## ⚙️ Configuration
52
+
53
+ Gear icon in the panel header (sections: Saving & export / Detection & download / Behaviour & UI / Import / Custom sources / Advanced):
54
+
55
+ | Setting | Description | Default |
56
+ |---|---|---|
57
+ | Save target | `Built-in library` (no external app) / `Local library` (app required) / `Folder` | Built-in library |
58
+ | Export dir / Naming / Sidecars | folder target, name template, CSL-JSON/RIS choice | `{author}_{year}_{title}` |
59
+ | Default tags | comma separated, attached on save | empty |
60
+ | Auto-resolve / quoted titles / scan replies | detection & false-positive control | on / on / off |
61
+ | Retries / timeout | network retry & timeout control | 3 / 30s |
62
+ | Duplicate strategy | ask / keep / replace | ask |
63
+ | Entry placement | auto (right-sidebar tab first) / footer / hidden | auto |
64
+ | Panel width / reader fit | floating size & initial reader view | 380px / fit-width |
65
+ | Import folder / watch | bring local PDFs into the library (manual or every 30s) | empty / off |
66
+ | Custom download sources | your mirrors / proxies / endpoints (with headers) | empty |
67
+
68
+ ## 🧩 dsh-better-sidebar integration
69
+
70
+ When [dsh-better-sidebar](https://github.com/omdsh-dev/DSH-better-sidebar) is installed, the plugin registers a **right-sidebar tab** via `ctx.get('betterSidebar').registerTab` and stops using the sidebar footer; otherwise it falls back to the footer entry + floating panel, probing continuously and migrating automatically.
71
+
72
+ ## 📚 Citations
73
+
74
+ The 「Cite」 menu on every card:
75
+
76
+ | Mode | Description |
77
+ |---|---|
78
+ | Reference list | APA 7 / GB/T 7714-2015 / MLA 9 / Chicago 17 entries |
79
+ | In-text | `(Vaswani et al., 2017)` |
80
+ | Direct quote | page prompt → `(Vaswani et al., 2017, p. 7)` |
81
+
82
+ ## 🔌 Custom download sources
83
+
84
+ Within compliance bounds, add mirrors / institutional proxies / private endpoints you trust in Settings:
85
+
86
+ - URL placeholders: `{doi}` `{arxiv}` `{isbn}` `{title}` `{url}`
87
+ - Extra headers (one `Name: Value` per line) for token/cookie-gated endpoints
88
+ - Appended after the official OA chain as fallbacks; malformed templates are skipped
89
+
90
+ > Compliance: these sources are your own configuration and your responsibility; the plugin ships no pirated or infringing source.
91
+
92
+ ## 🔒 Paywalled & login-gated papers
93
+
94
+ Only public open-access sources are fetched automatically. For login-gated papers:
95
+
96
+ 1. The entry is marked 「Login required」 with a reason
97
+ 2. 「Open login page」 lets you sign in / access via your institution
98
+ 3. After downloading, 「Import local PDF」 validates and saves the file automatically
99
+
100
+ ## 🧠 How it works
101
+
102
+ ```
103
+ Browser panel ── fetch / SSE ──▶ DSH host ──▶ local library (optional) / custom sources
104
+ ```
105
+
106
+ - Default (built-in library) keeps entries + PDFs in the plugin's own local storage — no external app
107
+ - Exporting to a Zotero-ecosystem library: browsers cannot reach it directly (CORS), so reads/writes go through the DSH host using the official Connector protocol
108
+
109
+ ## 🔐 Privacy
110
+
111
+ - Metadata & full-text requests go straight to public scholarly APIs — no third-party relay
112
+ - Loopback-only (`127.0.0.1`); non-loopback requests get 403
113
+ - No telemetry, no analytics, nothing uploaded
114
+
115
+ ## 🖥️ Compatibility
116
+
117
+ | Component | Version |
118
+ |---|---|
119
+ | DeepSeek Harness | ≥ 0.1.1-rc.2 (Cordis v4) |
120
+ | Local library (optional) | 8.x (Zotero ecosystem, Local API v3 / Connector API) |
121
+ | Node | ≥ 20 |
122
+
123
+ > Independent open-source implementation, not affiliated with any library vendor.
124
+
125
+ ## ❓ FAQ
126
+
127
+ **Nothing appears after saving?**
128
+ Check the save target; built-in mode is fully offline and needs no app running.
129
+
130
+ **Paywalled paper won't download?**
131
+ Marked 「Login required / paywall」: sign in via 「Open login page」, download, then 「Import local PDF」; or configure custom sources.
132
+
133
+ **Settings not applied?**
134
+ Settings persist instantly; changing the port requires restarting the library app.
135
+
136
+ ## 🛠️ Development
137
+
138
+ ```bash
139
+ npm install
140
+ npm run build # outputs lib/
141
+ npm run smoke # logic smoke tests
142
+ npm run check:client # client bundle shape + apply matrix
143
+ npm run test # host end-to-end
144
+ ```
145
+
146
+ ```
147
+ src/
148
+ ├── node/ # host: routes / detection / metadata / download / cite / import / shadow store
149
+ │ ├── zotero/ # local-library interaction (read-only queries + Connector writes)
150
+ │ ├── metadata/ # Crossref · arXiv · OpenAlex
151
+ │ └── fetch/ # OA chain / custom sources / retry
152
+ └── client/ # browser: panel UI / cite menus / pdf.js reader (self-bundled)
153
+ ```
154
+
155
+ ## 📄 License
156
+
157
+ [MIT](LICENSE)
158
+
159
+ Trademark notice: not affiliated with Zotero; "Zotero" is a trademark of its owner, used here only to describe compatibility.