dsh-paper-search 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/CHANGELOG.md +107 -0
- package/LICENSE +21 -0
- package/NOTICE.md +50 -0
- package/README.md +151 -0
- package/cordis.patch.yml +17 -0
- package/lib/index.js +381 -0
- package/lib/sources.js +576 -0
- package/package.json +50 -0
- package/skills/paper-search/SKILL.md +148 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: paper-search
|
|
3
|
+
description: "Cari literatur ilmiah dari 13 sumber internasional (Crossref, OpenAlex, DOAJ, Europe PMC, PubMed, PubMed Central, arXiv, Semantic Scholar, CORE, Zenodo, HAL, IACR ePrint, Unpaywall) dan 3 portal jurnal Indonesia (Garuda, Sinta, IOS OneSearch) lewat tool paper_search — semuanya native, tanpa CLI atau paket luar. Pakai untuk mencari paper, jurnal, penelitian terdahulu, literatur Indonesia, atau melacak DOI."
|
|
4
|
+
whenToUse: "Saat tugas menyangkut artikel atau karya ilmiah: mencari paper/jurnal/artikel penelitian, mencari penelitian terdahulu, mencari jurnal nasional Indonesia, mencari jurnal internasional, melacak DOI, atau saat pencarian literatur kosong dan perlu tahu sumber mana yang gagal. Bukan untuk berita, docs, atau riset web umum — itu tugas search-cascade."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Paper Search — literatur internasional + jurnal Indonesia (DSH)
|
|
8
|
+
|
|
9
|
+
Semua lewat **satu tool: `paper_search`**. Tidak ada CLI yang perlu dipasang,
|
|
10
|
+
tidak ada paket Python yang perlu diinstal — 16 sumbernya native lewat HTTP.
|
|
11
|
+
|
|
12
|
+
## Cara pakai
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
paper_search({ query: "machine learning" }) # semua sumber
|
|
16
|
+
paper_search({ query: "pendidikan karakter", sources: "indonesia" })
|
|
17
|
+
paper_search({ query: "CRISPR", sources: "pubmed,europepmc,doaj", max_results: 10 })
|
|
18
|
+
paper_search({ query: "digital literacy", open_access_only: true, year_from: 2020 })
|
|
19
|
+
paper_search({ query: "transformer", sources: "crossref,openalex,arxiv" })
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Opsi:
|
|
23
|
+
|
|
24
|
+
| Opsi | Isi |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `query` | kata kunci (wajib) |
|
|
27
|
+
| `sources` | `all` · `international` · `indonesia` · atau id dipisah koma |
|
|
28
|
+
| `max_results` | hasil **per sumber** (1-50, bawaan 5) |
|
|
29
|
+
| `open_access_only` | hanya paper akses-terbuka |
|
|
30
|
+
| `year_from` | hanya tahun >= nilai ini |
|
|
31
|
+
|
|
32
|
+
## 16 sumbernya
|
|
33
|
+
|
|
34
|
+
**Internasional (13)** — API JSON resmi, kecuali IACR yang diurai dari HTML:
|
|
35
|
+
|
|
36
|
+
| Sumber | Catatan |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `crossref` | metadata DOI lintas penerbit; terluas |
|
|
39
|
+
| `openalex` | metadata + abstrak; email menaikkan batas laju |
|
|
40
|
+
| `doaj` | jurnal akses-terbuka — **termasuk banyak jurnal Indonesia** |
|
|
41
|
+
| `europepmc` | biomedis, teks penuh untuk OA |
|
|
42
|
+
| `pubmed` | biomedis (dua panggilan: esearch + esummary) |
|
|
43
|
+
| `pmc` | PubMed Central — teks penuh akses-terbuka (dua panggilan juga) |
|
|
44
|
+
| `arxiv` | preprint; plugin membatasi sendiri 1 permintaan / 3 detik sesuai TOU mereka |
|
|
45
|
+
| `semantic` | Semantic Scholar; kunci gratis menaikkan batas laju |
|
|
46
|
+
| `core` | agregator repositori akses-terbuka — **wajib kunci** |
|
|
47
|
+
| `zenodo` | repositori umum: data, perangkat lunak, preprint |
|
|
48
|
+
| `hal` | repositori akses-terbuka Prancis |
|
|
49
|
+
| `iacr` | IACR Cryptology ePrint Archive — pra-cetak kriptologi |
|
|
50
|
+
| `unpaywall` | **input DOI, bukan kata kunci** — mencari salinan akses-terbuka dari sebuah DOI; **wajib email** |
|
|
51
|
+
|
|
52
|
+
**Indonesia (3)** — penguraian halaman publik:
|
|
53
|
+
|
|
54
|
+
| Sumber | Catatan |
|
|
55
|
+
|---|---|
|
|
56
|
+
| `garuda` | artikel jurnal Indonesia (Kemdiktisaintek) |
|
|
57
|
+
| `sinta` | **daftar JURNAL** terakreditasi — bukan artikel |
|
|
58
|
+
| `ios` | IOS OneSearch, agregator repositori Indonesia (Perpusnas) |
|
|
59
|
+
|
|
60
|
+
> **Untuk topik Indonesia, pakai kata kunci BAHASA INDONESIA.** Terukur:
|
|
61
|
+
> `"pendidikan karakter"` mengembalikan jurnal Indonesia nyata; padanan
|
|
62
|
+
> Inggrisnya mengembalikan hasil internasional yang tidak relevan.
|
|
63
|
+
|
|
64
|
+
> **Yang SENGAJA tidak didaftarkan, dan alasannya terukur (28 Sep 2026):**
|
|
65
|
+
>
|
|
66
|
+
> | Sumber | Alasan |
|
|
67
|
+
> |---|---|
|
|
68
|
+
> | `moraref` | halamannya hanya halaman pendarat, tanpa markup hasil (3.964 huruf) |
|
|
69
|
+
> | `dblp` | API-nya di balik proteksi bot — mengembalikan halaman "Making sure you're not a bot!", bukan JSON |
|
|
70
|
+
> | `openaire` | permintaan uji **timeout 30 detik dan 40 detik** |
|
|
71
|
+
> | `biorxiv` / `medrxiv` | API-nya berbasis RENTANG TANGGAL, bukan kata kunci — tidak bisa dipakai mencari |
|
|
72
|
+
> | `base` | menolak: `Access denied for IP address …` — butuh pendaftaran IP institusi |
|
|
73
|
+
> | `citeseerx` | HTTP 404, lalu **menggantung** sampai permintaannya dibunuh |
|
|
74
|
+
> | `ssrn` | menolak permintaan biasa dengan HTTP 403 |
|
|
75
|
+
> | `google_scholar` | deteksi bot aktif; butuh proxy |
|
|
76
|
+
>
|
|
77
|
+
> Sumber yang selalu kosong lebih buruk daripada sumber yang tidak ada — jadi
|
|
78
|
+
> yang gagal dibuang dan **alasannya dicatat**, bukan didaftarkan supaya
|
|
79
|
+
> jumlahnya terlihat banyak.
|
|
80
|
+
>
|
|
81
|
+
> **`unpaywall` TIDAK ada di daftar ini** — ia sempat saya masukkan keliru,
|
|
82
|
+
> lalu dikeluarkan setelah diuji ulang: ia **bekerja**, hanya butuh **DOI**.
|
|
83
|
+
> "Bukan pencari kata kunci" ≠ "mati".
|
|
84
|
+
|
|
85
|
+
## ⚠️ ATURAN UTAMA — "0 hasil" dari satu sumber BUKAN "tidak ada literatur"
|
|
86
|
+
|
|
87
|
+
Tool ini **memisahkan** sumber yang gagal dari yang menjawab. Keluarannya selalu
|
|
88
|
+
menampilkan baris per sumber:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
v Crossref 3 hasil (2316 ms)
|
|
92
|
+
x Semantic Scholar GAGAL — HTTP 429 (HTTP 429) — {"message": "Too Many Requests...
|
|
93
|
+
v Garuda 3 hasil (1428 ms)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Aturannya:**
|
|
97
|
+
|
|
98
|
+
1. Sumber bertanda **`x`** artinya GAGAL — bukan kosong. **Sebutkan** itu saat
|
|
99
|
+
melaporkan hasil ke Rasyid. Jangan pernah menulis "tidak ada literatur" dari
|
|
100
|
+
sumber yang gagal.
|
|
101
|
+
2. Kalau semua sumber balas 0 → ulangi **sekali** (batas laju sering transien),
|
|
102
|
+
lalu coba `sources` yang lain.
|
|
103
|
+
3. Kalau ragu, jalankan **`paper_status`** lebih dulu — ia membuktikan sumber
|
|
104
|
+
mana yang benar-benar hidup **sekarang**, bukan sekadar terdaftar.
|
|
105
|
+
|
|
106
|
+
## Kalau pencarian kosong atau terasa aneh
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
paper_status() # kirim satu permintaan kecil ke tiap sumber
|
|
110
|
+
paper_status({ probe: false }) # hanya periksa konfigurasi, tanpa jaringan
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Keluarannya menyebut: kredensial mana yang terbaca **dan dari mana asalnya**
|
|
114
|
+
(config plugin / variabel lingkungan / `.env` milik CLI upstream), plus status
|
|
115
|
+
hidup tiap sumber. Ini jawaban pertama untuk pertanyaan *"kenapa kosong?"*.
|
|
116
|
+
|
|
117
|
+
## Kredensial (opsional — semua sumber tetap jalan tanpanya)
|
|
118
|
+
|
|
119
|
+
Tidak ada kunci yang dibawa paket ini. Urutan pembacaan:
|
|
120
|
+
|
|
121
|
+
1. config plugin di profil DSH,
|
|
122
|
+
2. variabel lingkungan `PAPER_SEARCH_MCP_<NAMA>` lalu `<NAMA>`,
|
|
123
|
+
3. berkas `~/.config/paper-search-mcp/.env` (milik CLI upstream).
|
|
124
|
+
|
|
125
|
+
| Nama | Gunanya |
|
|
126
|
+
|---|---|
|
|
127
|
+
| `UNPAYWALL_EMAIL` | email apa pun — dipakai sebagai "polite pool" Crossref/OpenAlex |
|
|
128
|
+
| `OPENALEX_EMAIL` | sama, khusus OpenAlex |
|
|
129
|
+
| `SEMANTIC_SCHOLAR_API_KEY` | menaikkan batas laju Semantic Scholar |
|
|
130
|
+
| `DOAJ_API_KEY` | menaikkan batas per jam DOAJ |
|
|
131
|
+
| `CORE_API_KEY` | **wajib untuk sumber `core`** — tanpa kunci ia balas 429 tanpa pesan |
|
|
132
|
+
|
|
133
|
+
**Jangan** isi kunci IEEE atau ACM — di upstream konektornya masih kerangka dan
|
|
134
|
+
`search()` selalu melempar `NotImplementedError`. Plugin ini tidak memakainya.
|
|
135
|
+
|
|
136
|
+
## CLI `paper-search-mcp` — opsional, bukan syarat
|
|
137
|
+
|
|
138
|
+
Kalau kebetulan terpasang (`uv tool install --force "git+https://github.com/openags/paper-search-mcp"`),
|
|
139
|
+
CLI itu menambah sumber lain: CORE, Zenodo, HAL, SSRN, Unpaywall, OpenAIRE,
|
|
140
|
+
CiteSeerX, BASE, dan tombol unduh PDF dengan rantai cadangan. **Plugin ini tidak
|
|
141
|
+
memerlukannya** — 16 sumber di atas sudah native.
|
|
142
|
+
|
|
143
|
+
## Cara melaporkan hasil ke Rasyid
|
|
144
|
+
|
|
145
|
+
Sajikan tabel: **judul, penulis, tahun, sumber (jurnal), DOI/URL**. Keluaran
|
|
146
|
+
tool sudah memuat semuanya, termasuk kolom `sumber:` yang menyebut **semua**
|
|
147
|
+
basis data yang menemukan paper itu (hasil dedup). Sebutkan juga kalau ada
|
|
148
|
+
sumber yang gagal pada pencarian itu.
|