@wentorai/research-plugins 1.4.2 → 1.4.4

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.en.md ADDED
@@ -0,0 +1,143 @@
1
+ <div align="center">
2
+
3
+ <img src="assets/logo.png" width="160" alt="Research-Claw · 科研龙虾" />
4
+
5
+ # The most comprehensive library of AI skills&plugins for academic research
6
+
7
+ **The brain of Research-Claw — 438 academic skills + 34 API tools**
8
+
9
+ Plug-and-play research capabilities for [Research-Claw](https://github.com/wentorai/Research-Claw) and 40+ AI agent frameworks
10
+
11
+ [![npm](https://img.shields.io/npm/v/@wentorai/research-plugins?style=flat-square&color=EF4444&logo=npm)](https://www.npmjs.com/package/@wentorai/research-plugins)
12
+ [![License](https://img.shields.io/badge/license-MIT-3B82F6?style=flat-square)](LICENSE)
13
+ [![Skills](https://img.shields.io/badge/skills-438-EF4444?style=flat-square)](https://www.npmjs.com/package/@wentorai/research-plugins)
14
+ [![Tools](https://img.shields.io/badge/API_tools-34-3B82F6?style=flat-square)](#agent-tools-34)
15
+
16
+ [🌐 wentor.ai](https://wentor.ai) · [🇨🇳 中文](README.md) · [🦞 Research-Claw](https://github.com/wentorai/Research-Claw) · [🪲 Issues](https://github.com/wentorai/research-plugins/issues)
17
+
18
+ </div>
19
+
20
+ ---
21
+
22
+ ## Quick Start
23
+
24
+ ### Install (Research-Claw / OpenClaw)
25
+
26
+ ```bash
27
+ openclaw plugins install @wentorai/research-plugins
28
+ ```
29
+
30
+ Installs to `~/.openclaw/extensions/`. Restart the gateway to auto-load all skills + tools.
31
+
32
+ ### Install (Claude Code / Cursor / Windsurf / OpenCode)
33
+
34
+ ```bash
35
+ npx skills add wentorai/research-plugins
36
+ ```
37
+
38
+ > This installs SKILL.md files only (no API tools). Compatible with 41 agent frameworks supporting the skills protocol.
39
+
40
+ ### Uninstall
41
+
42
+ ```bash
43
+ # OpenClaw / Research-Claw — manually remove plugin directory
44
+ rm -rf ~/.openclaw/extensions/research-plugins
45
+
46
+ # npx skills — manually remove skills directory
47
+ rm -rf .skills/wentorai/research-plugins
48
+ ```
49
+
50
+ > **pnpm projects:** Do not add this as a pnpm dependency and load from `node_modules` via `plugins.load.paths`. pnpm hardlinks are rejected by OpenClaw's security validator. Always use `openclaw plugins install`.
51
+
52
+ ---
53
+
54
+ ## What's Inside
55
+
56
+ ### Academic Skills (438)
57
+
58
+ Structured SKILL.md guides covering the full research lifecycle, loaded on demand:
59
+
60
+ | Category | Count | Coverage |
61
+ |:--|:--|:--|
62
+ | **Literature** | 87 | Multi-database search · Citation tracking · Full-text · Open access |
63
+ | **Methodology** | 79 | DID · RDD · IV · Meta-analysis · Systematic review · Grant writing |
64
+ | **Data Analysis** | 68 | Python · R · STATA · Visualization · Panel data · Econometrics |
65
+ | **Writing** | 74 | Paper sections · LaTeX · References · Rebuttal generation |
66
+ | **Domains** | 93 | 16 disciplines: CS · AI/ML · Biomedical · Economics · Law · Physics etc. |
67
+ | **Tools** | 51 | Diagrams · PDF parsing · Knowledge graphs · OCR · Scraping |
68
+
69
+ Skills use **progressive disclosure**: 6 category entries → 40 subcategory indexes → 438 concrete skills. Agents load on demand, never injecting everything at once.
70
+
71
+ ### Agent Tools (34)
72
+
73
+ TypeScript wrappers for 18 free academic database APIs, auto-registered as OpenClaw plugin tools:
74
+
75
+ | Module | Tools | Source |
76
+ |:--|:--|:--|
77
+ | `openalex` | `search_openalex` · `get_work` · `get_author_openalex` | OpenAlex (250M+ works) |
78
+ | `crossref` | `resolve_doi` · `search_crossref` | CrossRef (150M+ DOIs) |
79
+ | `arxiv` | `search_arxiv` · `get_arxiv_paper` | arXiv |
80
+ | `pubmed` | `search_pubmed` · `get_article` | PubMed / NCBI |
81
+ | `unpaywall` | `find_oa_version` | Unpaywall (open access) |
82
+ | `europe-pmc` | `search_europe_pmc` · `get_epmc_citations` · `get_epmc_references` | Europe PMC (33M+) |
83
+ | `opencitations` | `get_citations_open` · `get_references_open` · `get_citation_count` | OpenCitations (2B+ links) |
84
+ | `dblp` | `search_dblp` · `search_dblp_author` | DBLP (7M+ CS records) |
85
+ | `doaj` | `search_doaj` | DOAJ (9M+ OA articles) |
86
+ | `biorxiv` | `search_biorxiv` · `search_medrxiv` · `get_preprint_by_doi` | bioRxiv / medRxiv |
87
+ | `openaire` | `search_openaire` | OpenAIRE (170M+, EU funder filter) |
88
+ | `zenodo` | `search_zenodo` · `get_zenodo_record` | Zenodo |
89
+ | `orcid` | `search_orcid` · `get_orcid_works` | ORCID |
90
+ | `inspire-hep` | `search_inspire` · `get_inspire_paper` | INSPIRE-HEP (physics) |
91
+ | `hal` | `search_hal` | HAL (French open archive) |
92
+ | `osf-preprints` | `search_osf_preprints` | OSF Preprints |
93
+ | `datacite` | `search_datacite` · `resolve_datacite_doi` | DataCite (dataset DOIs) |
94
+ | `ror` | `search_ror` | ROR (research organizations) |
95
+
96
+ ### Curated Resources (6)
97
+
98
+ Hand-picked resource collections for each skill category. See `curated/` directory.
99
+
100
+ ---
101
+
102
+ ## Architecture
103
+
104
+ ```
105
+ @wentorai/research-plugins
106
+ ├── skills/ ← 438 SKILL.md (6 categories × 40 subcategories)
107
+ │ ├── literature/ ← Search, discovery, full-text, metadata
108
+ │ ├── writing/ ← Composition, citation, LaTeX, polish
109
+ │ ├── analysis/ ← Statistics, econometrics, dataviz
110
+ │ ├── research/ ← Methodology, reviews, grants
111
+ │ ├── domains/ ← 16 academic disciplines
112
+ │ └── tools/ ← Diagrams, documents, scraping, OCR
113
+ ├── src/tools/ ← 34 API tools (18 modules)
114
+ ├── curated/ ← 6 curated resource lists
115
+ ├── catalog.json ← Full index (462 entries)
116
+ ├── index.ts ← Plugin entry (OpenClaw Plugin SDK)
117
+ └── openclaw.plugin.json ← Plugin manifest
118
+ ```
119
+
120
+ **Loading modes:**
121
+ - **Research-Claw / OpenClaw**: Full plugin (skills + API tools) via `openclaw plugins install`
122
+ - **Other agent frameworks**: SKILL.md files only (no API tools) via `npx skills add`
123
+
124
+ ---
125
+
126
+ ## Community Attribution
127
+
128
+ This project curates, organizes, and enhances publicly available academic resources.
129
+
130
+ - **Skills** are authored guides based on established research methodologies, public API docs, and widely-used workflows. Where content derives from specific projects, the `source` field in each SKILL.md frontmatter links to the original.
131
+ - **Curated lists** aggregate community resource links for discovery purposes.
132
+
133
+ All original content is released under the [MIT License](LICENSE). Referenced third-party projects retain their own licenses.
134
+
135
+ ---
136
+
137
+ ## Contributing
138
+
139
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
140
+
141
+ ## License
142
+
143
+ [MIT](LICENSE) — Copyright (c) 2026 Wentor AI
package/README.md CHANGED
@@ -1,176 +1,143 @@
1
- # @wentorai/research-plugins
1
+ <div align="center">
2
2
 
3
- **[English](#english)** | **[中文](#中文)**
3
+ <img src="assets/logo.png" width="160" alt="科研龙虾 · Research-Claw" />
4
4
 
5
- ---
6
-
7
- <a id="english"></a>
8
-
9
- ## Research Plugins for Research-Claw
10
-
11
- An open-source collection of **438 academic research skills**, **34 agent tools** (18 API modules), and **6 curated resource lists** for [Research-Claw](https://wentor.ai) and other AI coding agents.
12
-
13
- Built by [Wentor AI](https://wentor.ai) for the global research community.
5
+ # 最全的学术科研领域技能插件库
14
6
 
15
- ### What's Inside
7
+ **科研龙虾的大脑 438 个学术技能 + 34 个 API 工具**
16
8
 
17
- | Component | Count | Description |
18
- |-----------|-------|-------------|
19
- | **Skills** | 438 | Practical SKILL.md guides covering literature search, academic writing, data analysis, research methods, 16 domain specialties, and productivity tools |
20
- | **Agent Tools** | 34 | TypeScript API wrappers for 18 academic databases: OpenAlex, CrossRef, arXiv, PubMed, Unpaywall, Europe PMC, OpenCitations, DOAJ, DBLP, bioRxiv/medRxiv, OpenAIRE, Zenodo, ORCID, INSPIRE-HEP, HAL, OSF, DataCite, ROR |
21
- | **Curated Lists** | 6 | Hand-picked resource collections for each skill category |
9
+ [Research-Claw (科研龙虾)](https://github.com/wentorai/Research-Claw) 40+ AI Agent 框架提供即插即用的科研能力
22
10
 
23
- > **Note:** 150 MCP server configs were archived in the v1.4.0 audit. See `archived/mcp-configs/` for reference.
11
+ [![npm](https://img.shields.io/npm/v/@wentorai/research-plugins?style=flat-square&color=EF4444&logo=npm)](https://www.npmjs.com/package/@wentorai/research-plugins)
12
+ [![License](https://img.shields.io/badge/license-MIT-3B82F6?style=flat-square)](LICENSE)
13
+ [![Skills](https://img.shields.io/badge/skills-438-EF4444?style=flat-square)](https://www.npmjs.com/package/@wentorai/research-plugins)
14
+ [![Tools](https://img.shields.io/badge/API_tools-34-3B82F6?style=flat-square)](#智能体工具34-个)
24
15
 
25
- ### Taxonomy
16
+ [🌐 wentor.ai](https://wentor.ai) · [🇬🇧 English](README.en.md) · [🦞 Research-Claw](https://github.com/wentorai/Research-Claw) · [🪲 Issues](https://github.com/wentorai/research-plugins/issues)
26
17
 
27
- Skills are organized into **6 categories** with **40 subcategories**:
18
+ </div>
28
19
 
29
- | Category | Subcategories | Skills | Description |
30
- |----------|---------------|--------|-------------|
31
- | **literature** | search, discovery, fulltext, metadata | 80 | Paper search, citation tracking, open access |
32
- | **writing** | composition, polish, latex, templates, citation | 64 | Academic writing, LaTeX, reference management |
33
- | **analysis** | statistics, econometrics, wrangling, dataviz | 46 | Statistical methods, data cleaning, visualization |
34
- | **research** | methodology, deep-research, paper-review, automation, funding | 53 | Research design, systematic reviews, grant writing |
35
- | **domains** | 16 disciplines (CS, AI/ML, biomedical, chemistry, economics, finance, law, physics, math, ecology, etc.) | 147 | Domain-specific research methods and tools |
36
- | **tools** | diagram, document, code-exec, scraping, knowledge-graph, ocr-translate | 48 | Diagrams, PDF parsing, reproducible code, OCR |
20
+ ---
37
21
 
38
- ### Install
22
+ ## 快速开始
39
23
 
40
- #### As OpenClaw Plugin (Recommended)
24
+ ### 安装(Research-Claw / OpenClaw 用户)
41
25
 
42
26
  ```bash
43
27
  openclaw plugins install @wentorai/research-plugins
44
28
  ```
45
29
 
46
- This installs the plugin to `~/.openclaw/extensions/` where OpenClaw auto-discovers it. Skills and agent tools are loaded automatically.
47
-
48
- > **Note for satellite/pnpm projects:** Do not add this package as a `pnpm` dependency and load it from `node_modules` via `plugins.load.paths`. pnpm's content-addressable store uses hardlinks, which OpenClaw's security validator rejects (`unsafe plugin manifest path`). Always use `openclaw plugins install` instead.
30
+ 插件安装到 `~/.openclaw/extensions/`,重启 gateway 后自动加载所有技能 + 工具。
49
31
 
50
- #### As Skills Collection (Claude Code, Cursor, Windsurf, OpenCode)
32
+ ### 安装(Claude Code / Cursor / Windsurf / OpenCode 用户)
51
33
 
52
34
  ```bash
53
35
  npx skills add wentorai/research-plugins
54
36
  ```
55
37
 
56
- #### Via npm
57
-
58
- ```bash
59
- npm install @wentorai/research-plugins
60
- ```
61
-
62
- ### Agent Tools
63
-
64
- 34 tool functions across 18 academic API modules, registered automatically when used as an OpenClaw plugin. All APIs are free and open:
65
-
66
- | Module | Tools | API |
67
- |--------|-------|-----|
68
- | `openalex` | `search_openalex`, `get_work`, `get_author_openalex` | OpenAlex (250M+ works) |
69
- | `crossref` | `resolve_doi`, `search_crossref` | CrossRef (150M+ DOIs) |
70
- | `arxiv` | `search_arxiv`, `get_arxiv_paper` | arXiv |
71
- | `pubmed` | `search_pubmed`, `get_article` | PubMed / NCBI |
72
- | `unpaywall` | `find_oa_version` | Unpaywall |
73
- | `europe-pmc` | `search_europe_pmc`, `get_epmc_citations`, `get_epmc_references` | Europe PMC (33M+) |
74
- | `opencitations` | `get_citations_open`, `get_references_open`, `get_citation_count` | OpenCitations (2B+ links) |
75
- | `doaj` | `search_doaj` | DOAJ (9M+ OA articles) |
76
- | `dblp` | `search_dblp`, `search_dblp_author` | DBLP (7M+ CS records) |
77
- | `biorxiv` | `search_biorxiv`, `search_medrxiv`, `get_preprint_by_doi` | bioRxiv / medRxiv |
78
- | `openaire` | `search_openaire` | OpenAIRE (170M+, EU funder filter) |
79
- | `zenodo` | `search_zenodo`, `get_zenodo_record` | Zenodo |
80
- | `orcid` | `search_orcid`, `get_orcid_works` | ORCID |
81
- | `inspire-hep` | `search_inspire`, `get_inspire_paper` | INSPIRE-HEP (physics) |
82
- | `hal` | `search_hal` | HAL (French open archive) |
83
- | `osf-preprints` | `search_osf_preprints` | OSF Preprints |
84
- | `datacite` | `search_datacite`, `resolve_datacite_doi` | DataCite (dataset DOIs) |
85
- | `ror` | `search_ror` | ROR (research organizations) |
86
-
87
- ### Community Attribution
88
-
89
- This project curates, organizes, and enhances publicly available academic resources from across the open-source ecosystem. We are grateful to the researchers, developers, and open-source communities whose work makes this collection possible.
90
-
91
- - **Skills** are authored guides based on established research methodologies, public API documentation, and widely-used academic workflows. Where content is derived from specific open-source projects, the `source` field in each SKILL.md frontmatter links to the original.
92
- - **Curated Lists** aggregate links to community resources and are provided for discovery purposes.
38
+ > 此方式仅安装 SKILL.md 技能文件(无 API 工具),适用于 41 个支持 skills 协议的 Agent 框架。
93
39
 
94
- All original content in this repository is released under the [MIT License](LICENSE). Third-party projects referenced retain their own licenses.
40
+ ### 卸载
95
41
 
96
- ### Contributing
97
-
98
- See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on adding skills and curated resources.
42
+ ```bash
43
+ # OpenClaw / Research-Claw — 手动删除插件目录
44
+ rm -rf ~/.openclaw/extensions/research-plugins
99
45
 
100
- ### License
46
+ # npx skills — 手动删除技能目录
47
+ rm -rf .skills/wentorai/research-plugins
48
+ ```
101
49
 
102
- [MIT](LICENSE) -- Copyright (c) 2026 Wentor AI
50
+ > **pnpm 项目注意**:请勿将本包作为 `pnpm` 依赖并通过 `plugins.load.paths` 从 `node_modules` 加载。pnpm 的硬链接机制会被 OpenClaw 安全校验拒绝 (`unsafe plugin manifest path`)。请始终使用 `openclaw plugins install`。
103
51
 
104
52
  ---
105
53
 
106
- <a id="中文"></a>
107
-
108
- ## Research-Claw 科研插件集
109
-
110
- 一个开源的学术科研资源集合,包含 **438 个科研技能**、**34 个智能体工具**(18 个 API 模块)和 **6 个精选资源列表**,为 [Research-Claw (科研龙虾)](https://wentor.ai) 及其他 AI 编程助手而构建。
111
-
112
- [Wentor AI](https://wentor.ai) 为全球科研社区打造。
113
-
114
- ### 包含内容
115
-
116
- | 组件 | 数量 | 说明 |
117
- |------|------|------|
118
- | **技能 (Skills)** | 438 | 涵盖文献检索、学术写作、数据分析、研究方法、16 个学科领域及生产力工具的实用指南 |
119
- | **智能体工具** | 34 | 封装 18 个学术数据库 API TypeScript 工具:OpenAlex、CrossRef、arXiv、PubMed、Unpaywall、Europe PMC、OpenCitations、DOAJ、DBLP、bioRxiv/medRxiv、OpenAIRE、Zenodo、ORCID、INSPIRE-HEP、HAL、OSF、DataCite、ROR |
120
- | **精选列表** | 6 | 按分类整理的优质资源推荐 |
121
-
122
- > **注意**:150 个 MCP 服务器配置已在 v1.4.0 审计中归档。参见 `archived/mcp-configs/`。
123
-
124
- ### 分类体系
54
+ ## 包含什么
55
+
56
+ ### 学术技能(438 个)
57
+
58
+ 覆盖科研全流程的结构化 SKILL.md 指南,按需自动加载:
59
+
60
+ | 类别 | 技能数 | 覆盖范围 |
61
+ |:--|:--|:--|
62
+ | **文献** (literature) | 87 | 多库联搜 · 引文追踪 · 全文获取 · 开放获取 |
63
+ | **研究方法** (research) | 79 | DID · RDD · IV · 元分析 · 系统综述 · 基金申请 |
64
+ | **数据分析** (analysis) | 68 | Python · R · STATA · 可视化 · 面板数据 · 计量经济 |
65
+ | **学术写作** (writing) | 74 | 论文各章节 · LaTeX · 参考文献 · 审稿意见回复 |
66
+ | **学科领域** (domains) | 93 | 16 个学科:CS · AI/ML · 生物医学 · 经济 · 法学 · 物理 等 |
67
+ | **效率工具** (tools) | 51 | 流程图 · PDF 解析 · 知识图谱 · OCR · 爬虫 |
68
+
69
+ 技能通过 **渐进式加载** 机制工作:6 个类别入口 → 40 个子分类索引 → 438 个具体技能。Agent 按需加载,不会一次性注入全部内容。
70
+
71
+ ### 智能体工具(34 个)
72
+
73
+ 直连 18 个免费学术数据库 API 的 TypeScript 工具,作为 OpenClaw 插件自动注册:
74
+
75
+ | 模块 | 工具 | 数据源 |
76
+ |:--|:--|:--|
77
+ | `openalex` | `search_openalex` · `get_work` · `get_author_openalex` | OpenAlex (250M+ 作品) |
78
+ | `crossref` | `resolve_doi` · `search_crossref` | CrossRef (150M+ DOI) |
79
+ | `arxiv` | `search_arxiv` · `get_arxiv_paper` | arXiv |
80
+ | `pubmed` | `search_pubmed` · `get_article` | PubMed / NCBI |
81
+ | `unpaywall` | `find_oa_version` | Unpaywall (开放获取) |
82
+ | `europe-pmc` | `search_europe_pmc` · `get_epmc_citations` · `get_epmc_references` | Europe PMC (33M+) |
83
+ | `opencitations` | `get_citations_open` · `get_references_open` · `get_citation_count` | OpenCitations (2B+ 引用) |
84
+ | `dblp` | `search_dblp` · `search_dblp_author` | DBLP (7M+ CS 文献) |
85
+ | `doaj` | `search_doaj` | DOAJ (9M+ OA 文章) |
86
+ | `biorxiv` | `search_biorxiv` · `search_medrxiv` · `get_preprint_by_doi` | bioRxiv / medRxiv |
87
+ | `openaire` | `search_openaire` | OpenAIRE (170M+, EU 资助筛选) |
88
+ | `zenodo` | `search_zenodo` · `get_zenodo_record` | Zenodo |
89
+ | `orcid` | `search_orcid` · `get_orcid_works` | ORCID |
90
+ | `inspire-hep` | `search_inspire` · `get_inspire_paper` | INSPIRE-HEP (高能物理) |
91
+ | `hal` | `search_hal` | HAL (法国开放档案) |
92
+ | `osf-preprints` | `search_osf_preprints` | OSF Preprints |
93
+ | `datacite` | `search_datacite` · `resolve_datacite_doi` | DataCite (数据集 DOI) |
94
+ | `ror` | `search_ror` | ROR (研究机构) |
125
95
 
126
- 技能按 **6 大类别** 和 **40 个子分类** 组织:
96
+ ### 精选资源(6 套)
127
97
 
128
- | 类别 | 子分类 | 技能数 | 覆盖范围 |
129
- |------|--------|--------|---------|
130
- | **文献 (literature)** | 检索、发现、全文获取、元数据 | 80 | 论文搜索、引文追踪、开放获取 |
131
- | **写作 (writing)** | 写作、润色、LaTeX、模板、引用 | 64 | 学术写作、LaTeX 排版、参考文献管理 |
132
- | **分析 (analysis)** | 统计、计量经济、数据处理、可视化 | 46 | 统计方法、数据清洗、图表制作 |
133
- | **研究 (research)** | 方法论、深度研究、论文评审、自动化、基金 | 53 | 研究设计、系统综述、基金申请 |
134
- | **学科 (domains)** | 16 个学科方向 | 147 | 各学科专属研究方法与工具 |
135
- | **工具 (tools)** | 图表、文档、代码执行、爬虫、知识图谱、OCR | 48 | 流程图、PDF 解析、可复现代码、OCR 翻译 |
98
+ 每个技能类别附带一套手工精选的优质资源列表,见 `curated/` 目录。
136
99
 
137
- ### 安装方式
100
+ ---
138
101
 
139
- #### 作为 OpenClaw 插件(推荐)
102
+ ## 架构
140
103
 
141
- ```bash
142
- openclaw plugins install @wentorai/research-plugins
143
104
  ```
144
-
145
- 插件会安装到 `~/.openclaw/extensions/`,OpenClaw 自动发现并加载所有技能和工具。
146
-
147
- > **pnpm 项目注意**:请勿将本包作为 `pnpm` 依赖并通过 `plugins.load.paths` 从 `node_modules` 加载。pnpm 的内容寻址存储使用硬链接 (nlink > 1),会被 OpenClaw 安全校验拒绝 (`unsafe plugin manifest path`)。请始终使用 `openclaw plugins install`。
148
-
149
- #### 作为技能集合 (Claude Code, Cursor, Windsurf, OpenCode)
150
-
151
- ```bash
152
- npx skills add wentorai/research-plugins
105
+ @wentorai/research-plugins
106
+ ├── skills/ 438 SKILL.md (6 类别 × 40 子分类)
107
+ │ ├── literature/ ← 文献检索/追踪/获取
108
+ │ ├── writing/ ← 学术写作/引用/LaTeX
109
+ │ ├── analysis/ ← 数据分析/统计/可视化
110
+ │ ├── research/ ← 研究方法/综述/基金
111
+ │ ├── domains/ ← 16 学科领域
112
+ │ └── tools/ ← 效率工具/图表/OCR
113
+ ├── src/tools/ ← 34 API 工具 (18 模块)
114
+ ├── curated/ ← 6 套精选资源列表
115
+ ├── catalog.json ← 全量索引 (462 entries)
116
+ ├── index.ts ← 插件入口 (OpenClaw Plugin SDK)
117
+ └── openclaw.plugin.json ← 插件清单
153
118
  ```
154
119
 
155
- #### 通过 npm
120
+ **加载方式**:
121
+ - **Research-Claw / OpenClaw**:作为完整插件加载(技能 + API 工具),通过 `openclaw plugins install`
122
+ - **其他 Agent 框架**:仅加载 SKILL.md 文件(无 API 工具),通过 `npx skills add`
156
123
 
157
- ```bash
158
- npm install @wentorai/research-plugins
159
- ```
124
+ ---
160
125
 
161
- ### 社区致谢与声明
126
+ ## 社区致谢
162
127
 
163
- 本项目对互联网上公开可用的学术资源进行了遴选、整理和增强。我们感谢所有使这个集合成为可能的研究者、开发者和开源社区。
128
+ 本项目对互联网上公开可用的学术资源进行了遴选、整理和增强。
164
129
 
165
- - **技能** 是基于成熟研究方法、公开 API 文档和广泛使用的学术工作流编写的实用指南。凡内容源自特定开源项目的,每个 SKILL.md frontmatter 中 `source` 字段均标注了原始链接。
166
- - **精选列表** 汇集社区资源链接,仅供发现和参考之用。
130
+ - **技能** 基于成熟研究方法、公开 API 文档和广泛使用的学术工作流编写。凡内容源自特定开源项目的,SKILL.md frontmatter 中 `source` 字段标注了原始链接。
131
+ - **精选列表** 汇集社区资源链接,仅供发现和参考。
167
132
 
168
- 本仓库中的所有原创内容均以 [MIT 许可证](LICENSE) 发布。引用的第三方项目保留其各自的许可证。
133
+ 所有原创内容以 [MIT 许可证](LICENSE) 发布。引用的第三方项目保留各自许可证。
134
+
135
+ ---
169
136
 
170
- ### 参与贡献
137
+ ## 贡献
171
138
 
172
- 请查阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解添加技能和精选资源的指南。
139
+ 请查阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解添加技能和资源的指南。
173
140
 
174
- ### 许可证
141
+ ## 许可证
175
142
 
176
- [MIT](LICENSE) -- Copyright (c) 2026 Wentor AI
143
+ [MIT](LICENSE) Copyright (c) 2026 Wentor AI
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "research-plugins",
3
- "version": "1.4.0",
3
+ "version": "1.4.3",
4
4
  "name": "Research Plugins",
5
5
  "description": "438 academic research skills, 34 agent tools across 18 API modules & 6 curated lists for Research-Claw",
6
6
  "skills": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wentorai/research-plugins",
3
- "version": "1.4.2",
3
+ "version": "1.4.4",
4
4
  "type": "module",
5
5
  "description": "438 academic research skills, 34 agent tools across 18 API modules, and 6 curated lists for Research-Claw and AI agents",
6
6
  "keywords": [
@@ -24,12 +24,21 @@ The API is free to use with no authentication required. It supports complex bool
24
24
 
25
25
  No authentication required. The arXiv API is fully open. However, users must respect the rate limit of 3 requests per second. Excessive usage may result in temporary IP-based blocking. Including a descriptive User-Agent header is considered good practice.
26
26
 
27
- ## Core Endpoints
27
+ ## Using the `search_arxiv` Tool
28
+
29
+ **IMPORTANT:** When calling the `search_arxiv` tool, use parameter name `query` (NOT
30
+ `search_query`). The raw API uses `search_query`, but the tool wrapper accepts `query`.
31
+
32
+ ```
33
+ search_arxiv({ query: "ti:transformer AND cat:cs.CL", sort_by: "submittedDate" })
34
+ ```
35
+
36
+ ## Core Endpoints (Raw API Reference)
28
37
 
29
38
  ### Query: Search for Articles
30
39
 
31
40
  - **URL**: `GET http://export.arxiv.org/api/query`
32
- - **Parameters**:
41
+ - **Parameters** (raw API — the `search_arxiv` tool wraps these automatically):
33
42
  | Param | Type | Required | Description |
34
43
  |-------|------|----------|-------------|
35
44
  | search_query | string | Yes | Query string using arXiv field prefixes (ti, au, abs, cat, id) |
@@ -1,6 +1,6 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import type { OpenClawPluginApi, OpenClawPluginToolContext } from "openclaw/plugin-sdk";
3
- import { toolResult, trackedFetch, isTrackedError } from "./util.js";
3
+ import { toolResult, trackedFetch, isTrackedError, validEnum, validParam } from "./util.js";
4
4
 
5
5
  const BASE = "https://export.arxiv.org/api/query";
6
6
 
@@ -103,17 +103,30 @@ export function createArxivTools(
103
103
  Type.String({ description: "Sort order: 'ascending' or 'descending'" }),
104
104
  ),
105
105
  }),
106
- execute: async (input: {
106
+ execute: async (_toolCallId: string, input: {
107
107
  query: string;
108
108
  max_results?: number;
109
109
  sort_by?: string;
110
110
  sort_order?: string;
111
111
  }) => {
112
+ const query = validParam(input?.query);
113
+ if (!query) {
114
+ return toolResult({
115
+ error:
116
+ "query parameter is required and must not be empty. " +
117
+ "Use the tool parameter 'query' (not 'search_query'). " +
118
+ "Example: search_arxiv({ query: \"ti:transformer AND cat:cs.CL\" })",
119
+ });
120
+ }
121
+
122
+ const SORT_BY = ["relevance", "lastUpdatedDate", "submittedDate"] as const;
123
+ const SORT_ORDER = ["ascending", "descending"] as const;
124
+
112
125
  const params = new URLSearchParams({
113
- search_query: input.query,
126
+ search_query: query,
114
127
  max_results: String(Math.min(input.max_results ?? 10, 50)),
115
- sortBy: input.sort_by ?? "relevance",
116
- sortOrder: input.sort_order ?? "descending",
128
+ sortBy: validEnum(input.sort_by, SORT_BY, "relevance"),
129
+ sortOrder: validEnum(input.sort_order, SORT_ORDER, "descending"),
117
130
  });
118
131
 
119
132
  const tracked = await trackedFetch("arxiv", `${BASE}?${params}`, undefined, 15_000);
@@ -150,7 +163,7 @@ export function createArxivTools(
150
163
  description: "arXiv paper ID, e.g. '2301.00001' or '2301.00001v2'",
151
164
  }),
152
165
  }),
153
- execute: async (input: { arxiv_id: string }) => {
166
+ execute: async (_toolCallId: string, input: { arxiv_id: string }) => {
154
167
  if (!input?.arxiv_id) {
155
168
  return toolResult({ error: 'arxiv_id parameter is required (e.g., "2301.00001" or "2301.00001v2")' });
156
169
  }
@@ -1,6 +1,6 @@
1
1
  import { Type } from "@sinclair/typebox";
2
2
  import type { OpenClawPluginApi, OpenClawPluginToolContext } from "openclaw/plugin-sdk";
3
- import { toolResult, trackedFetch, isTrackedError } from "./util.js";
3
+ import { toolResult, trackedFetch, isTrackedError, validEnum, validParam } from "./util.js";
4
4
 
5
5
  const BASE = "https://api.biorxiv.org";
6
6
 
@@ -23,16 +23,17 @@ export function createBiorxivTools(
23
23
  Type.Number({ description: "Pagination offset (default 0, each page returns up to 100)" }),
24
24
  ),
25
25
  }),
26
- execute: async (input: { interval: string; cursor?: number }) => {
27
- if (!input?.interval) {
26
+ execute: async (_toolCallId: string, input: { interval: string; cursor?: number }) => {
27
+ const interval = validParam(input?.interval);
28
+ if (!interval) {
28
29
  return toolResult({ error: 'interval parameter is required (date range in YYYY-MM-DD/YYYY-MM-DD format, e.g. "2026-03-01/2026-03-18")' });
29
30
  }
30
31
  // Validate date range format — bioRxiv API only accepts YYYY-MM-DD/YYYY-MM-DD
31
- if (!/^\d{4}-\d{2}-\d{2}\/\d{4}-\d{2}-\d{2}$/.test(input.interval)) {
32
- return toolResult({ error: `Invalid interval format "${input.interval}". Must be YYYY-MM-DD/YYYY-MM-DD (e.g. "2026-03-01/2026-03-18")` });
32
+ if (!/^\d{4}-\d{2}-\d{2}\/\d{4}-\d{2}-\d{2}$/.test(interval)) {
33
+ return toolResult({ error: `Invalid interval format "${interval}". Must be YYYY-MM-DD/YYYY-MM-DD (e.g. "2026-03-01/2026-03-18")` });
33
34
  }
34
- const cursor = input.cursor ?? 0;
35
- const tracked = await trackedFetch("biorxiv", `${BASE}/details/biorxiv/${input.interval}/${cursor}/json`, undefined, 30_000);
35
+ const cursor = input?.cursor ?? 0;
36
+ const tracked = await trackedFetch("biorxiv", `${BASE}/details/biorxiv/${interval}/${cursor}/json`, undefined, 30_000);
36
37
  if (isTrackedError(tracked)) return tracked;
37
38
  const data = await tracked.res.json();
38
39
 
@@ -76,15 +77,16 @@ export function createBiorxivTools(
76
77
  Type.Number({ description: "Pagination offset (default 0)" }),
77
78
  ),
78
79
  }),
79
- execute: async (input: { interval: string; cursor?: number }) => {
80
- if (!input?.interval) {
80
+ execute: async (_toolCallId: string, input: { interval: string; cursor?: number }) => {
81
+ const interval = validParam(input?.interval);
82
+ if (!interval) {
81
83
  return toolResult({ error: 'interval parameter is required (date range in YYYY-MM-DD/YYYY-MM-DD format, e.g. "2026-03-01/2026-03-18")' });
82
84
  }
83
- if (!/^\d{4}-\d{2}-\d{2}\/\d{4}-\d{2}-\d{2}$/.test(input.interval)) {
84
- return toolResult({ error: `Invalid interval format "${input.interval}". Must be YYYY-MM-DD/YYYY-MM-DD (e.g. "2026-03-01/2026-03-18")` });
85
+ if (!/^\d{4}-\d{2}-\d{2}\/\d{4}-\d{2}-\d{2}$/.test(interval)) {
86
+ return toolResult({ error: `Invalid interval format "${interval}". Must be YYYY-MM-DD/YYYY-MM-DD (e.g. "2026-03-01/2026-03-18")` });
85
87
  }
86
- const cursor = input.cursor ?? 0;
87
- const tracked = await trackedFetch("medrxiv", `${BASE}/details/medrxiv/${input.interval}/${cursor}/json`, undefined, 30_000);
88
+ const cursor = input?.cursor ?? 0;
89
+ const tracked = await trackedFetch("medrxiv", `${BASE}/details/medrxiv/${interval}/${cursor}/json`, undefined, 30_000);
88
90
  if (isTrackedError(tracked)) return tracked;
89
91
  const data = await tracked.res.json();
90
92
 
@@ -124,11 +126,11 @@ export function createBiorxivTools(
124
126
  Type.String({ description: "Server: 'biorxiv' or 'medrxiv' (default: biorxiv)" }),
125
127
  ),
126
128
  }),
127
- execute: async (input: { doi: string; server?: string }) => {
129
+ execute: async (_toolCallId: string, input: { doi: string; server?: string }) => {
128
130
  if (!input?.doi) {
129
131
  return toolResult({ error: 'doi parameter is required (e.g., "10.1101/2024.01.15.575123")' });
130
132
  }
131
- const server = input.server ?? "biorxiv";
133
+ const server = validEnum(input.server, ["biorxiv", "medrxiv"] as const, "biorxiv");
132
134
  const doi = input.doi.replace(/^https?:\/\/doi\.org\//, "");
133
135
  const tracked = await trackedFetch(server, `${BASE}/details/${server}/${doi}/na/json`, undefined, 15_000);
134
136
  if (isTrackedError(tracked)) return tracked;