paper-search-cli 0.1.0
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/.env.example +165 -0
- package/LICENSE +21 -0
- package/README-sc.md +642 -0
- package/README.md +642 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +637 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/ConfigService.d.ts +26 -0
- package/dist/config/ConfigService.d.ts.map +1 -0
- package/dist/config/ConfigService.js +145 -0
- package/dist/config/ConfigService.js.map +1 -0
- package/dist/config/constants.d.ts +140 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +93 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/core/diagnostics.d.ts +43 -0
- package/dist/core/diagnostics.d.ts.map +1 -0
- package/dist/core/diagnostics.js +544 -0
- package/dist/core/diagnostics.js.map +1 -0
- package/dist/core/handleToolCall.d.ts +8 -0
- package/dist/core/handleToolCall.d.ts.map +1 -0
- package/dist/core/handleToolCall.js +440 -0
- package/dist/core/handleToolCall.js.map +1 -0
- package/dist/core/schemas.d.ts +454 -0
- package/dist/core/schemas.d.ts.map +1 -0
- package/dist/core/schemas.js +322 -0
- package/dist/core/schemas.js.map +1 -0
- package/dist/core/searchers.d.ts +45 -0
- package/dist/core/searchers.d.ts.map +1 -0
- package/dist/core/searchers.js +73 -0
- package/dist/core/searchers.js.map +1 -0
- package/dist/core/tools.d.ts +7 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +640 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/models/Paper.d.ts +64 -0
- package/dist/models/Paper.d.ts.map +1 -0
- package/dist/models/Paper.js +70 -0
- package/dist/models/Paper.js.map +1 -0
- package/dist/platforms/ArxivSearcher.d.ts +64 -0
- package/dist/platforms/ArxivSearcher.d.ts.map +1 -0
- package/dist/platforms/ArxivSearcher.js +531 -0
- package/dist/platforms/ArxivSearcher.js.map +1 -0
- package/dist/platforms/BioRxivSearcher.d.ts +47 -0
- package/dist/platforms/BioRxivSearcher.d.ts.map +1 -0
- package/dist/platforms/BioRxivSearcher.js +196 -0
- package/dist/platforms/BioRxivSearcher.js.map +1 -0
- package/dist/platforms/CORESearcher.d.ts +16 -0
- package/dist/platforms/CORESearcher.d.ts.map +1 -0
- package/dist/platforms/CORESearcher.js +148 -0
- package/dist/platforms/CORESearcher.js.map +1 -0
- package/dist/platforms/CrossrefSearcher.d.ts +34 -0
- package/dist/platforms/CrossrefSearcher.d.ts.map +1 -0
- package/dist/platforms/CrossrefSearcher.js +339 -0
- package/dist/platforms/CrossrefSearcher.js.map +1 -0
- package/dist/platforms/EuropePMCSearcher.d.ts +20 -0
- package/dist/platforms/EuropePMCSearcher.d.ts.map +1 -0
- package/dist/platforms/EuropePMCSearcher.js +173 -0
- package/dist/platforms/EuropePMCSearcher.js.map +1 -0
- package/dist/platforms/GoogleScholarSearcher.d.ts +77 -0
- package/dist/platforms/GoogleScholarSearcher.d.ts.map +1 -0
- package/dist/platforms/GoogleScholarSearcher.js +262 -0
- package/dist/platforms/GoogleScholarSearcher.js.map +1 -0
- package/dist/platforms/IACRSearcher.d.ts +51 -0
- package/dist/platforms/IACRSearcher.d.ts.map +1 -0
- package/dist/platforms/IACRSearcher.js +339 -0
- package/dist/platforms/IACRSearcher.js.map +1 -0
- package/dist/platforms/OpenAIRESearcher.d.ts +22 -0
- package/dist/platforms/OpenAIRESearcher.d.ts.map +1 -0
- package/dist/platforms/OpenAIRESearcher.js +223 -0
- package/dist/platforms/OpenAIRESearcher.js.map +1 -0
- package/dist/platforms/OpenAlexSearcher.d.ts +14 -0
- package/dist/platforms/OpenAlexSearcher.d.ts.map +1 -0
- package/dist/platforms/OpenAlexSearcher.js +114 -0
- package/dist/platforms/OpenAlexSearcher.js.map +1 -0
- package/dist/platforms/PMCSearcher.d.ts +20 -0
- package/dist/platforms/PMCSearcher.d.ts.map +1 -0
- package/dist/platforms/PMCSearcher.js +177 -0
- package/dist/platforms/PMCSearcher.js.map +1 -0
- package/dist/platforms/PaperSource.d.ts +143 -0
- package/dist/platforms/PaperSource.d.ts.map +1 -0
- package/dist/platforms/PaperSource.js +125 -0
- package/dist/platforms/PaperSource.js.map +1 -0
- package/dist/platforms/PubMedSearcher.d.ts +104 -0
- package/dist/platforms/PubMedSearcher.d.ts.map +1 -0
- package/dist/platforms/PubMedSearcher.js +422 -0
- package/dist/platforms/PubMedSearcher.js.map +1 -0
- package/dist/platforms/SciHubSearcher.d.ts +66 -0
- package/dist/platforms/SciHubSearcher.d.ts.map +1 -0
- package/dist/platforms/SciHubSearcher.js +398 -0
- package/dist/platforms/SciHubSearcher.js.map +1 -0
- package/dist/platforms/ScienceDirectSearcher.d.ts +42 -0
- package/dist/platforms/ScienceDirectSearcher.d.ts.map +1 -0
- package/dist/platforms/ScienceDirectSearcher.js +326 -0
- package/dist/platforms/ScienceDirectSearcher.js.map +1 -0
- package/dist/platforms/ScopusSearcher.d.ts +43 -0
- package/dist/platforms/ScopusSearcher.d.ts.map +1 -0
- package/dist/platforms/ScopusSearcher.js +364 -0
- package/dist/platforms/ScopusSearcher.js.map +1 -0
- package/dist/platforms/SemanticScholarSearcher.d.ts +96 -0
- package/dist/platforms/SemanticScholarSearcher.d.ts.map +1 -0
- package/dist/platforms/SemanticScholarSearcher.js +419 -0
- package/dist/platforms/SemanticScholarSearcher.js.map +1 -0
- package/dist/platforms/SpringerSearcher.d.ts +54 -0
- package/dist/platforms/SpringerSearcher.d.ts.map +1 -0
- package/dist/platforms/SpringerSearcher.js +407 -0
- package/dist/platforms/SpringerSearcher.js.map +1 -0
- package/dist/platforms/UnpaywallSearcher.d.ts +18 -0
- package/dist/platforms/UnpaywallSearcher.d.ts.map +1 -0
- package/dist/platforms/UnpaywallSearcher.js +115 -0
- package/dist/platforms/UnpaywallSearcher.js.map +1 -0
- package/dist/platforms/WebOfScienceSearcher.d.ts +111 -0
- package/dist/platforms/WebOfScienceSearcher.d.ts.map +1 -0
- package/dist/platforms/WebOfScienceSearcher.js +500 -0
- package/dist/platforms/WebOfScienceSearcher.js.map +1 -0
- package/dist/platforms/WileySearcher.d.ts +44 -0
- package/dist/platforms/WileySearcher.d.ts.map +1 -0
- package/dist/platforms/WileySearcher.js +148 -0
- package/dist/platforms/WileySearcher.js.map +1 -0
- package/dist/services/CitationService.d.ts +66 -0
- package/dist/services/CitationService.d.ts.map +1 -0
- package/dist/services/CitationService.js +237 -0
- package/dist/services/CitationService.js.map +1 -0
- package/dist/services/MultiSourceSearchService.d.ts +19 -0
- package/dist/services/MultiSourceSearchService.d.ts.map +1 -0
- package/dist/services/MultiSourceSearchService.js +96 -0
- package/dist/services/MultiSourceSearchService.js.map +1 -0
- package/dist/services/OpenAccessFallbackService.d.ts +20 -0
- package/dist/services/OpenAccessFallbackService.d.ts.map +1 -0
- package/dist/services/OpenAccessFallbackService.js +124 -0
- package/dist/services/OpenAccessFallbackService.js.map +1 -0
- package/dist/utils/ErrorHandler.d.ts +99 -0
- package/dist/utils/ErrorHandler.d.ts.map +1 -0
- package/dist/utils/ErrorHandler.js +266 -0
- package/dist/utils/ErrorHandler.js.map +1 -0
- package/dist/utils/Logger.d.ts +6 -0
- package/dist/utils/Logger.d.ts.map +1 -0
- package/dist/utils/Logger.js +26 -0
- package/dist/utils/Logger.js.map +1 -0
- package/dist/utils/PDFExtractor.d.ts +34 -0
- package/dist/utils/PDFExtractor.d.ts.map +1 -0
- package/dist/utils/PDFExtractor.js +130 -0
- package/dist/utils/PDFExtractor.js.map +1 -0
- package/dist/utils/PdfDownload.d.ts +7 -0
- package/dist/utils/PdfDownload.d.ts.map +1 -0
- package/dist/utils/PdfDownload.js +52 -0
- package/dist/utils/PdfDownload.js.map +1 -0
- package/dist/utils/QuotaManager.d.ts +32 -0
- package/dist/utils/QuotaManager.d.ts.map +1 -0
- package/dist/utils/QuotaManager.js +95 -0
- package/dist/utils/QuotaManager.js.map +1 -0
- package/dist/utils/RateLimiter.d.ts +50 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -0
- package/dist/utils/RateLimiter.js +121 -0
- package/dist/utils/RateLimiter.js.map +1 -0
- package/dist/utils/RequestCache.d.ts +26 -0
- package/dist/utils/RequestCache.d.ts.map +1 -0
- package/dist/utils/RequestCache.js +66 -0
- package/dist/utils/RequestCache.js.map +1 -0
- package/dist/utils/SecurityUtils.d.ts +80 -0
- package/dist/utils/SecurityUtils.d.ts.map +1 -0
- package/dist/utils/SecurityUtils.js +357 -0
- package/dist/utils/SecurityUtils.js.map +1 -0
- package/package.json +111 -0
- package/skills/paper-search/SKILL.md +192 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: paper-search
|
|
3
|
+
description: |
|
|
4
|
+
学术文献检索与论文获取调度器,基于 paper-search CLI,而不是 MCP server。
|
|
5
|
+
用于:搜索论文、查找相似研究、做文献综述初筛、验证 PMID/DOI、下载论文 PDF、
|
|
6
|
+
调用 Crossref/OpenAlex/PubMed/PMC/Europe PMC/arXiv/bioRxiv/medRxiv/Semantic Scholar/CORE/OpenAIRE/IACR 等来源,
|
|
7
|
+
以及使用 Semantic Scholar Open Access snippet 索引检索论文正文片段中的方法学细节。
|
|
8
|
+
当用户提到“搜文献”“找论文”“文献检索”“search papers”“find papers”“literature search”
|
|
9
|
+
“查一下有没有相关研究”“帮我找几篇参考文献”“看看别人怎么做的”“下载论文 PDF”
|
|
10
|
+
“验证 PMID”“验证 DOI”“正文片段检索”“snippet search”“Methods 里怎么做的”
|
|
11
|
+
“方法学细节检索”等任务时使用。
|
|
12
|
+
此 skill 只负责指导 agent 调用 paper-search CLI;API key 必须通过 paper-search setup、
|
|
13
|
+
paper-search config、.env 或环境变量配置,绝不要写入 Skill 文件。
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Paper Search CLI
|
|
17
|
+
|
|
18
|
+
你是学术文献检索调度器。所有检索、验证和下载动作优先通过 `paper-search` CLI 完成。Skill 只说明如何调用 CLI,不保存 API key,也不替用户生成或暴露密钥。
|
|
19
|
+
|
|
20
|
+
## 先做配置检查
|
|
21
|
+
|
|
22
|
+
处理检索任务前,先确认 CLI 可用:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
command -v paper-search
|
|
26
|
+
paper-search status --pretty
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
如果涉及 Semantic Scholar 正文片段、CORE、Unpaywall、Web of Science、Scopus、ScienceDirect、Springer 或 Wiley 等需要 key/邮箱的能力,再运行:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
paper-search config doctor --pretty
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
缺少 key 时,不要让用户把 key 发给 agent。提示用户在本机运行:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
paper-search setup
|
|
39
|
+
paper-search config set SEMANTIC_SCHOLAR_API_KEY your_key
|
|
40
|
+
paper-search config doctor --pretty
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
CLI 的配置优先级:
|
|
44
|
+
|
|
45
|
+
1. shell 环境变量
|
|
46
|
+
2. 当前目录 `.env`
|
|
47
|
+
3. 用户级配置 `~/.config/paper-search-cli/config.json`
|
|
48
|
+
4. 免费来源的内置默认值
|
|
49
|
+
|
|
50
|
+
## 安装缺失时
|
|
51
|
+
|
|
52
|
+
如果 `paper-search` 不存在,先告知用户需要安装。用户要求你安装时再执行:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g github:dr-dumpling/paper-search-cli
|
|
56
|
+
paper-search setup
|
|
57
|
+
paper-search status --pretty
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 常用命令
|
|
61
|
+
|
|
62
|
+
### 快速检索
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
paper-search search "machine learning" --platform crossref --max-results 5 --pretty
|
|
66
|
+
paper-search search "osteoarthritis occupational exposure" --platform pubmed --max-results 10 --pretty
|
|
67
|
+
paper-search search "transformer attention mechanism" --sources arxiv,semantic,crossref --max-results 5 --pretty
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
`--platform all` 或 `--sources all` 只用于需要广覆盖召回时。精确任务优先指定平台或 `--sources`。
|
|
71
|
+
|
|
72
|
+
### 精确工具调用
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
paper-search run search_pubmed --arg query="osteoarthritis occupational exposure" --arg maxResults=10 --pretty
|
|
76
|
+
paper-search run search_openalex --arg query="causal inference target trial emulation" --arg maxResults=5 --pretty
|
|
77
|
+
paper-search run get_paper_by_doi --arg doi="10.xxxx/xxxxx" --pretty
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
复杂参数使用 JSON:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
paper-search run search_semantic_scholar --json-args '{"query":"graph neural network medicine","maxResults":5,"year":"2020-2025"}' --pretty
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 下载 PDF
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
paper-search download 2301.12345 --platform arxiv --save-path ./downloads --pretty
|
|
90
|
+
paper-search run download_paper --arg paperId="10.xxxx/xxxxx" --arg platform=springer --arg savePath="./downloads" --pretty
|
|
91
|
+
paper-search run download_with_fallback --json-args '{"doi":"10.xxxx/xxxxx","title":"Paper title","savePath":"./downloads","useSciHub":false}' --pretty
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
默认不要启用 Sci-Hub;只有用户明确要求并承担相应访问边界时,才把 `useSciHub` 设为 `true`。
|
|
95
|
+
|
|
96
|
+
## 平台选择
|
|
97
|
+
|
|
98
|
+
| 任务 | 首选 | 补充 |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| 生物医学、临床、药学、公卫 | `pubmed` | `pmc`, `europepmc`, `semantic`, `crossref` |
|
|
101
|
+
| 正文方法学片段 | `search_semantic_snippets` | 先用 `pubmed`/`semantic` 找题名和同义词 |
|
|
102
|
+
| 计算机、AI、数学、物理 | `arxiv` | `semantic`, `crossref`, `openalex` |
|
|
103
|
+
| 跨学科广覆盖 | `crossref` | `openalex`, `semantic` |
|
|
104
|
+
| 开放获取全文发现 | `pmc`, `europepmc`, `core`, `openaire`, `unpaywall` | `download_with_fallback` |
|
|
105
|
+
| 密码学 | `iacr` | `arxiv` |
|
|
106
|
+
| 引用统计排序 | `semantic`, `crossref`, `openalex` | `webofscience`, `scopus` 需要 key |
|
|
107
|
+
| 出版商/付费数据库 | `webofscience`, `scopus`, `sciencedirect`, `springer`, `wiley` | 仅在 key 已配置时使用 |
|
|
108
|
+
|
|
109
|
+
查询构建规则:
|
|
110
|
+
|
|
111
|
+
- 默认把中文问题转为英文关键词。
|
|
112
|
+
- 用 3-8 个核心概念词,不要写成长句。
|
|
113
|
+
- 医学主题可加入 MeSH 或标准术语。
|
|
114
|
+
- 找方法细节时加入软件名、参数名、模型名、章节词,例如 `methods`, `statistical analysis`, `adjusted for`, `bootstrap`, `sensitivity analysis`。
|
|
115
|
+
|
|
116
|
+
## 正文片段检索
|
|
117
|
+
|
|
118
|
+
PubMed 只提供题名、作者、摘要、PMID、DOI、期刊和年份等元数据,不提供论文正文抓取。
|
|
119
|
+
|
|
120
|
+
正文片段检索使用:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
paper-search run search_semantic_snippets --arg query="CMAverse mediation bootstrap confidence interval" --arg limit=5 --arg fieldsOfStudy=Medicine --pretty
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
使用规则:
|
|
127
|
+
|
|
128
|
+
1. 该工具需要 `SEMANTIC_SCHOLAR_API_KEY`。
|
|
129
|
+
2. 它检索 Semantic Scholar Open Access snippet 索引,不等于完整全文解析。
|
|
130
|
+
3. 只有 `snippetKind="body"` 的结果才能作为正文片段证据;`title` 或 `abstract` 只能作为线索。
|
|
131
|
+
4. 输出正文片段前,必须补齐和核验标题、作者、年份、期刊、DOI 或 PMID。
|
|
132
|
+
5. 如果 snippet 无结果,不代表研究不存在;回退到 `search_pubmed`、`search_semantic_scholar` 或 `search_crossref` 做摘要级检索。
|
|
133
|
+
|
|
134
|
+
## 验证规范
|
|
135
|
+
|
|
136
|
+
输出给用户前,关键论文必须尽量验证:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
paper-search run search_pubmed --arg query="37654321[PMID]" --arg maxResults=1 --pretty
|
|
140
|
+
paper-search run get_paper_by_doi --arg doi="10.xxxx/xxxxx" --pretty
|
|
141
|
+
paper-search run search_crossref --arg query="full paper title" --arg maxResults=3 --pretty
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
规则:
|
|
145
|
+
|
|
146
|
+
- 不凭模型记忆编造 PMID、DOI、期刊、年份或作者。
|
|
147
|
+
- PMID 必须能被 PubMed 查询确认。
|
|
148
|
+
- DOI 必须能被 DOI 查询或 Crossref/OpenAlex/Semantic Scholar 结果支持。
|
|
149
|
+
- 同一论文的 PMID、DOI、题名、第一作者和年份应一致;不一致时标记为可疑。
|
|
150
|
+
- snippet 结果缺少元数据时,先用完整标题二次检索补齐。
|
|
151
|
+
|
|
152
|
+
## 输出格式
|
|
153
|
+
|
|
154
|
+
### 文献列表
|
|
155
|
+
|
|
156
|
+
```markdown
|
|
157
|
+
| # | 标题 | 作者 | 年份 | 期刊/来源 | DOI | PMID | 验证 |
|
|
158
|
+
|---|---|---|---:|---|---|---|---|
|
|
159
|
+
| 1 | [Title](URL) | First Author et al. | 2024 | Journal | 10.xxxx/xxxxx | 12345678 | 已验证 |
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 正文片段结果
|
|
163
|
+
|
|
164
|
+
```markdown
|
|
165
|
+
### 发现 1
|
|
166
|
+
|
|
167
|
+
**论文:** Full paper title
|
|
168
|
+
**引用:** Author et al. Journal. Year. DOI/PMID.
|
|
169
|
+
**片段类型:** body
|
|
170
|
+
**章节:** Methods / Statistical Analysis
|
|
171
|
+
**来源:** Semantic Scholar URL
|
|
172
|
+
|
|
173
|
+
> snippet text
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 错误处理
|
|
177
|
+
|
|
178
|
+
| 场景 | 处理 |
|
|
179
|
+
|---|---|
|
|
180
|
+
| CLI 不存在 | 提示安装 `npm install -g github:dr-dumpling/paper-search-cli` |
|
|
181
|
+
| API key 缺失 | 提示运行 `paper-search setup`;不要索要或保存 key |
|
|
182
|
+
| 429 限流 | 降低 `--max-results`,换平台,或提示配置可选 key |
|
|
183
|
+
| 0 结果 | 放宽关键词,换英文同义词,换平台,或用 `--sources` 扩展 |
|
|
184
|
+
| 下载失败 | 优先开放获取来源和 `download_with_fallback`,报告失败原因 |
|
|
185
|
+
| 用户要求完整正文 | 先下载 PDF;再交给当前环境可用的 PDF/MinerU 解析流程 |
|
|
186
|
+
|
|
187
|
+
## 不属于本 Skill 的事
|
|
188
|
+
|
|
189
|
+
- 不管理 Zotero、Obsidian 或其他文献库。
|
|
190
|
+
- 不写论文正文,不做语言润色。
|
|
191
|
+
- 不把 API key、token、cookie 写入 Skill、README 或回复。
|
|
192
|
+
- 当前公开 CLI 不提供期刊 IF、JCR 分区或中科院分区查询;遇到这类请求时说明能力边界,除非用户另行指定本地私有工具。
|