papersearch 0.0.0-stage → 0.4.2

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.
Files changed (686) hide show
  1. package/.env.example +208 -0
  2. package/LICENSE +21 -0
  3. package/README.md +213 -2
  4. package/README.zh.md +214 -0
  5. package/carsi/LICENSE +21 -0
  6. package/carsi/NOTICE +5 -0
  7. package/carsi/README.md +75 -0
  8. package/carsi/paper_search_carsi/__init__.py +6 -0
  9. package/carsi/paper_search_carsi/_core/__init__.py +26 -0
  10. package/carsi/paper_search_carsi/_core/racing.pyx +280 -0
  11. package/carsi/paper_search_carsi/adapters/__init__.py +26 -0
  12. package/carsi/paper_search_carsi/adapters/acm/__init__.py +13 -0
  13. package/carsi/paper_search_carsi/adapters/acs/__init__.py +47 -0
  14. package/carsi/paper_search_carsi/adapters/aha_journals/__init__.py +13 -0
  15. package/carsi/paper_search_carsi/adapters/ams/__init__.py +19 -0
  16. package/carsi/paper_search_carsi/adapters/annual_reviews/__init__.py +154 -0
  17. package/carsi/paper_search_carsi/adapters/aps/__init__.py +127 -0
  18. package/carsi/paper_search_carsi/adapters/asce/__init__.py +13 -0
  19. package/carsi/paper_search_carsi/adapters/base.py +320 -0
  20. package/carsi/paper_search_carsi/adapters/bmj/__init__.py +32 -0
  21. package/carsi/paper_search_carsi/adapters/copernicus/__init__.py +20 -0
  22. package/carsi/paper_search_carsi/adapters/dovepress/__init__.py +43 -0
  23. package/carsi/paper_search_carsi/adapters/elsevier/__init__.py +302 -0
  24. package/carsi/paper_search_carsi/adapters/elsevier/journal_site.py +237 -0
  25. package/carsi/paper_search_carsi/adapters/elsevier/sciencedirect.py +138 -0
  26. package/carsi/paper_search_carsi/adapters/ieee/__init__.py +184 -0
  27. package/carsi/paper_search_carsi/adapters/iop/__init__.py +41 -0
  28. package/carsi/paper_search_carsi/adapters/jama/__init__.py +54 -0
  29. package/carsi/paper_search_carsi/adapters/karger/__init__.py +75 -0
  30. package/carsi/paper_search_carsi/adapters/lww/__init__.py +103 -0
  31. package/carsi/paper_search_carsi/adapters/lww/journals_lww.py +36 -0
  32. package/carsi/paper_search_carsi/adapters/lww/ovid.py +72 -0
  33. package/carsi/paper_search_carsi/adapters/mdpi/__init__.py +20 -0
  34. package/carsi/paper_search_carsi/adapters/nejm/__init__.py +18 -0
  35. package/carsi/paper_search_carsi/adapters/neurology/__init__.py +13 -0
  36. package/carsi/paper_search_carsi/adapters/optica/__init__.py +33 -0
  37. package/carsi/paper_search_carsi/adapters/oup/__init__.py +366 -0
  38. package/carsi/paper_search_carsi/adapters/platforms/__init__.py +5 -0
  39. package/carsi/paper_search_carsi/adapters/platforms/atypon/__init__.py +149 -0
  40. package/carsi/paper_search_carsi/adapters/platforms/silverchair/__init__.py +83 -0
  41. package/carsi/paper_search_carsi/adapters/plos/__init__.py +20 -0
  42. package/carsi/paper_search_carsi/adapters/pnas/__init__.py +13 -0
  43. package/carsi/paper_search_carsi/adapters/rsc/__init__.py +74 -0
  44. package/carsi/paper_search_carsi/adapters/sage/__init__.py +154 -0
  45. package/carsi/paper_search_carsi/adapters/science/__init__.py +13 -0
  46. package/carsi/paper_search_carsi/adapters/springer/__init__.py +62 -0
  47. package/carsi/paper_search_carsi/adapters/taylor_francis/__init__.py +46 -0
  48. package/carsi/paper_search_carsi/adapters/thieme/__init__.py +164 -0
  49. package/carsi/paper_search_carsi/adapters/wiley/__init__.py +145 -0
  50. package/carsi/paper_search_carsi/adapters/world_scientific/__init__.py +27 -0
  51. package/carsi/paper_search_carsi/assets/icon-32.png +0 -0
  52. package/carsi/paper_search_carsi/assets/icon-512.png +0 -0
  53. package/carsi/paper_search_carsi/assets/icon-64.png +0 -0
  54. package/carsi/paper_search_carsi/assets/icon.svg +43 -0
  55. package/carsi/paper_search_carsi/blocked_journals.py +63 -0
  56. package/carsi/paper_search_carsi/browser/__init__.py +1 -0
  57. package/carsi/paper_search_carsi/browser/backend.py +823 -0
  58. package/carsi/paper_search_carsi/browser/cookies.py +386 -0
  59. package/carsi/paper_search_carsi/browser/ego_relay.py +152 -0
  60. package/carsi/paper_search_carsi/browser/engine.py +927 -0
  61. package/carsi/paper_search_carsi/browser/login.py +336 -0
  62. package/carsi/paper_search_carsi/browser/preview.py +379 -0
  63. package/carsi/paper_search_carsi/browser/watchdog.py +193 -0
  64. package/carsi/paper_search_carsi/cache.py +62 -0
  65. package/carsi/paper_search_carsi/carsi_schools.py +109 -0
  66. package/carsi/paper_search_carsi/cli.py +479 -0
  67. package/carsi/paper_search_carsi/cold_start.py +251 -0
  68. package/carsi/paper_search_carsi/config.py +301 -0
  69. package/carsi/paper_search_carsi/data/institutional_identity_policy.json +165 -0
  70. package/carsi/paper_search_carsi/data/publisher_access_catalog.json +969 -0
  71. package/carsi/paper_search_carsi/data/publisher_browser_verification_matrix.json +625 -0
  72. package/carsi/paper_search_carsi/download_diagnostics.py +228 -0
  73. package/carsi/paper_search_carsi/engine/__init__.py +1 -0
  74. package/carsi/paper_search_carsi/engine/access_rules.py +345 -0
  75. package/carsi/paper_search_carsi/engine/batch.py +702 -0
  76. package/carsi/paper_search_carsi/engine/batch_access.py +483 -0
  77. package/carsi/paper_search_carsi/engine/batch_capture.py +1531 -0
  78. package/carsi/paper_search_carsi/engine/batch_common.py +427 -0
  79. package/carsi/paper_search_carsi/engine/batch_diagnostics.py +307 -0
  80. package/carsi/paper_search_carsi/engine/batch_institution.py +981 -0
  81. package/carsi/paper_search_carsi/engine/batch_login.py +1605 -0
  82. package/carsi/paper_search_carsi/engine/batch_pdf_urls.py +274 -0
  83. package/carsi/paper_search_carsi/engine/batch_runs.py +711 -0
  84. package/carsi/paper_search_carsi/engine/batch_user.py +173 -0
  85. package/carsi/paper_search_carsi/engine/batch_waits.py +441 -0
  86. package/carsi/paper_search_carsi/engine/bridge.py +666 -0
  87. package/carsi/paper_search_carsi/engine/pdf_guard.py +310 -0
  88. package/carsi/paper_search_carsi/engine/router.py +514 -0
  89. package/carsi/paper_search_carsi/engine/supplements.py +148 -0
  90. package/carsi/paper_search_carsi/entitlements.py +233 -0
  91. package/carsi/paper_search_carsi/extractors/__init__.py +0 -0
  92. package/carsi/paper_search_carsi/extractors/pdf_extractor.py +149 -0
  93. package/carsi/paper_search_carsi/identifiers.py +121 -0
  94. package/carsi/paper_search_carsi/issues.py +227 -0
  95. package/carsi/paper_search_carsi/log.py +84 -0
  96. package/carsi/paper_search_carsi/mcp_progress.py +82 -0
  97. package/carsi/paper_search_carsi/network.py +359 -0
  98. package/carsi/paper_search_carsi/orchestrator.py +130 -0
  99. package/carsi/paper_search_carsi/pdf_utils.py +279 -0
  100. package/carsi/paper_search_carsi/progress_bar.py +778 -0
  101. package/carsi/paper_search_carsi/progress_reporter.py +530 -0
  102. package/carsi/paper_search_carsi/progress_status.py +212 -0
  103. package/carsi/paper_search_carsi/publishers/__init__.py +10 -0
  104. package/carsi/paper_search_carsi/publishers/builtin/acm.json +65 -0
  105. package/carsi/paper_search_carsi/publishers/builtin/acs.json +73 -0
  106. package/carsi/paper_search_carsi/publishers/builtin/aha-journals.json +47 -0
  107. package/carsi/paper_search_carsi/publishers/builtin/aip.json +66 -0
  108. package/carsi/paper_search_carsi/publishers/builtin/ams.json +66 -0
  109. package/carsi/paper_search_carsi/publishers/builtin/annual-reviews.json +64 -0
  110. package/carsi/paper_search_carsi/publishers/builtin/aps.json +70 -0
  111. package/carsi/paper_search_carsi/publishers/builtin/asce.json +46 -0
  112. package/carsi/paper_search_carsi/publishers/builtin/bmj.json +46 -0
  113. package/carsi/paper_search_carsi/publishers/builtin/copernicus.json +45 -0
  114. package/carsi/paper_search_carsi/publishers/builtin/dovepress.json +35 -0
  115. package/carsi/paper_search_carsi/publishers/builtin/elsevier.json +77 -0
  116. package/carsi/paper_search_carsi/publishers/builtin/frontiers.json +62 -0
  117. package/carsi/paper_search_carsi/publishers/builtin/ieee.json +68 -0
  118. package/carsi/paper_search_carsi/publishers/builtin/iop.json +69 -0
  119. package/carsi/paper_search_carsi/publishers/builtin/jama.json +48 -0
  120. package/carsi/paper_search_carsi/publishers/builtin/karger.json +48 -0
  121. package/carsi/paper_search_carsi/publishers/builtin/lww.json +57 -0
  122. package/carsi/paper_search_carsi/publishers/builtin/mdpi.json +46 -0
  123. package/carsi/paper_search_carsi/publishers/builtin/nejm.json +46 -0
  124. package/carsi/paper_search_carsi/publishers/builtin/neurology.json +45 -0
  125. package/carsi/paper_search_carsi/publishers/builtin/optica.json +77 -0
  126. package/carsi/paper_search_carsi/publishers/builtin/oxfordacademic.json +64 -0
  127. package/carsi/paper_search_carsi/publishers/builtin/plos.json +46 -0
  128. package/carsi/paper_search_carsi/publishers/builtin/pnas.json +67 -0
  129. package/carsi/paper_search_carsi/publishers/builtin/royalsocietypublishing.json +62 -0
  130. package/carsi/paper_search_carsi/publishers/builtin/rsc.json +71 -0
  131. package/carsi/paper_search_carsi/publishers/builtin/sage.json +48 -0
  132. package/carsi/paper_search_carsi/publishers/builtin/science.json +68 -0
  133. package/carsi/paper_search_carsi/publishers/builtin/springer.json +92 -0
  134. package/carsi/paper_search_carsi/publishers/builtin/taylor-francis.json +52 -0
  135. package/carsi/paper_search_carsi/publishers/builtin/thieme.json +50 -0
  136. package/carsi/paper_search_carsi/publishers/builtin/wiley.json +77 -0
  137. package/carsi/paper_search_carsi/publishers/builtin/world-scientific.json +68 -0
  138. package/carsi/paper_search_carsi/publishers/extensions.py +241 -0
  139. package/carsi/paper_search_carsi/publishers/loader.py +93 -0
  140. package/carsi/paper_search_carsi/publishers/model.py +90 -0
  141. package/carsi/paper_search_carsi/publishers/profiles.py +127 -0
  142. package/carsi/paper_search_carsi/publishers/schema.json +129 -0
  143. package/carsi/paper_search_carsi/publishers/site.py +86 -0
  144. package/carsi/paper_search_carsi/rate_limit.py +51 -0
  145. package/carsi/paper_search_carsi/server.py +197 -0
  146. package/carsi/paper_search_carsi/session_broker.py +163 -0
  147. package/carsi/paper_search_carsi/tor.py +9 -0
  148. package/carsi/paper_search_carsi/user_settings.py +55 -0
  149. package/carsi/pyproject.toml +41 -0
  150. package/dist/capabilities/body-snippet-search/handler.d.ts +9 -0
  151. package/dist/capabilities/body-snippet-search/handler.d.ts.map +1 -0
  152. package/dist/capabilities/body-snippet-search/handler.js +17 -0
  153. package/dist/capabilities/body-snippet-search/handler.js.map +1 -0
  154. package/dist/capabilities/body-snippet-search/index.d.ts +7 -0
  155. package/dist/capabilities/body-snippet-search/index.d.ts.map +1 -0
  156. package/dist/capabilities/body-snippet-search/index.js +6 -0
  157. package/dist/capabilities/body-snippet-search/index.js.map +1 -0
  158. package/dist/capabilities/body-snippet-search/schemas.d.ts +36 -0
  159. package/dist/capabilities/body-snippet-search/schemas.d.ts.map +1 -0
  160. package/dist/capabilities/body-snippet-search/schemas.js +16 -0
  161. package/dist/capabilities/body-snippet-search/schemas.js.map +1 -0
  162. package/dist/capabilities/body-snippet-search/service.d.ts +4 -0
  163. package/dist/capabilities/body-snippet-search/service.d.ts.map +1 -0
  164. package/dist/capabilities/body-snippet-search/service.js +4 -0
  165. package/dist/capabilities/body-snippet-search/service.js.map +1 -0
  166. package/dist/capabilities/body-snippet-search/tools.d.ts +187 -0
  167. package/dist/capabilities/body-snippet-search/tools.d.ts.map +1 -0
  168. package/dist/capabilities/body-snippet-search/tools.js +49 -0
  169. package/dist/capabilities/body-snippet-search/tools.js.map +1 -0
  170. package/dist/capabilities/body-snippet-search/types.d.ts +14 -0
  171. package/dist/capabilities/body-snippet-search/types.d.ts.map +1 -0
  172. package/dist/capabilities/body-snippet-search/types.js +2 -0
  173. package/dist/capabilities/body-snippet-search/types.js.map +1 -0
  174. package/dist/capabilities/citation-expansion/CitationService.d.ts +47 -0
  175. package/dist/capabilities/citation-expansion/CitationService.d.ts.map +1 -0
  176. package/dist/capabilities/citation-expansion/CitationService.js +243 -0
  177. package/dist/capabilities/citation-expansion/CitationService.js.map +1 -0
  178. package/dist/capabilities/citation-expansion/handler.d.ts +36 -0
  179. package/dist/capabilities/citation-expansion/handler.d.ts.map +1 -0
  180. package/dist/capabilities/citation-expansion/handler.js +44 -0
  181. package/dist/capabilities/citation-expansion/handler.js.map +1 -0
  182. package/dist/capabilities/citation-expansion/index.d.ts +6 -0
  183. package/dist/capabilities/citation-expansion/index.d.ts.map +1 -0
  184. package/dist/capabilities/citation-expansion/index.js +5 -0
  185. package/dist/capabilities/citation-expansion/index.js.map +1 -0
  186. package/dist/capabilities/citation-expansion/schemas.d.ts +28 -0
  187. package/dist/capabilities/citation-expansion/schemas.d.ts.map +1 -0
  188. package/dist/capabilities/citation-expansion/schemas.js +13 -0
  189. package/dist/capabilities/citation-expansion/schemas.js.map +1 -0
  190. package/dist/capabilities/citation-expansion/tools.d.ts +82 -0
  191. package/dist/capabilities/citation-expansion/tools.d.ts.map +1 -0
  192. package/dist/capabilities/citation-expansion/tools.js +48 -0
  193. package/dist/capabilities/citation-expansion/tools.js.map +1 -0
  194. package/dist/capabilities/citation-expansion/types.d.ts +22 -0
  195. package/dist/capabilities/citation-expansion/types.d.ts.map +1 -0
  196. package/dist/capabilities/citation-expansion/types.js +2 -0
  197. package/dist/capabilities/citation-expansion/types.js.map +1 -0
  198. package/dist/capabilities/journal-metrics/JournalMetricsService.d.ts +3 -0
  199. package/dist/capabilities/journal-metrics/JournalMetricsService.d.ts.map +1 -0
  200. package/dist/capabilities/journal-metrics/JournalMetricsService.js +142 -0
  201. package/dist/capabilities/journal-metrics/JournalMetricsService.js.map +1 -0
  202. package/dist/capabilities/journal-metrics/handler.d.ts +12 -0
  203. package/dist/capabilities/journal-metrics/handler.d.ts.map +1 -0
  204. package/dist/capabilities/journal-metrics/handler.js +38 -0
  205. package/dist/capabilities/journal-metrics/handler.js.map +1 -0
  206. package/dist/capabilities/journal-metrics/index.d.ts +6 -0
  207. package/dist/capabilities/journal-metrics/index.d.ts.map +1 -0
  208. package/dist/capabilities/journal-metrics/index.js +5 -0
  209. package/dist/capabilities/journal-metrics/index.js.map +1 -0
  210. package/dist/capabilities/journal-metrics/schemas.d.ts +28 -0
  211. package/dist/capabilities/journal-metrics/schemas.d.ts.map +1 -0
  212. package/dist/capabilities/journal-metrics/schemas.js +13 -0
  213. package/dist/capabilities/journal-metrics/schemas.js.map +1 -0
  214. package/dist/capabilities/journal-metrics/tools.d.ts +67 -0
  215. package/dist/capabilities/journal-metrics/tools.d.ts.map +1 -0
  216. package/dist/capabilities/journal-metrics/tools.js +27 -0
  217. package/dist/capabilities/journal-metrics/tools.js.map +1 -0
  218. package/dist/capabilities/journal-metrics/types.d.ts +36 -0
  219. package/dist/capabilities/journal-metrics/types.d.ts.map +1 -0
  220. package/dist/capabilities/journal-metrics/types.js +2 -0
  221. package/dist/capabilities/journal-metrics/types.js.map +1 -0
  222. package/dist/capabilities/metadata-search/MultiSourceSearchService.d.ts +9 -0
  223. package/dist/capabilities/metadata-search/MultiSourceSearchService.d.ts.map +1 -0
  224. package/dist/capabilities/metadata-search/MultiSourceSearchService.js +81 -0
  225. package/dist/capabilities/metadata-search/MultiSourceSearchService.js.map +1 -0
  226. package/dist/capabilities/metadata-search/handler.d.ts +23 -0
  227. package/dist/capabilities/metadata-search/handler.d.ts.map +1 -0
  228. package/dist/capabilities/metadata-search/handler.js +153 -0
  229. package/dist/capabilities/metadata-search/handler.js.map +1 -0
  230. package/dist/capabilities/metadata-search/index.d.ts +6 -0
  231. package/dist/capabilities/metadata-search/index.d.ts.map +1 -0
  232. package/dist/capabilities/metadata-search/index.js +5 -0
  233. package/dist/capabilities/metadata-search/index.js.map +1 -0
  234. package/dist/capabilities/metadata-search/schemas.d.ts +83 -0
  235. package/dist/capabilities/metadata-search/schemas.d.ts.map +1 -0
  236. package/dist/capabilities/metadata-search/schemas.js +80 -0
  237. package/dist/capabilities/metadata-search/schemas.js.map +1 -0
  238. package/dist/capabilities/metadata-search/tools.d.ts +178 -0
  239. package/dist/capabilities/metadata-search/tools.d.ts.map +1 -0
  240. package/dist/capabilities/metadata-search/tools.js +75 -0
  241. package/dist/capabilities/metadata-search/tools.js.map +1 -0
  242. package/dist/capabilities/metadata-search/types.d.ts +13 -0
  243. package/dist/capabilities/metadata-search/types.d.ts.map +1 -0
  244. package/dist/capabilities/metadata-search/types.js +2 -0
  245. package/dist/capabilities/metadata-search/types.js.map +1 -0
  246. package/dist/capabilities/pdf-discovery/DownloadTier.d.ts +43 -0
  247. package/dist/capabilities/pdf-discovery/DownloadTier.d.ts.map +1 -0
  248. package/dist/capabilities/pdf-discovery/DownloadTier.js +2 -0
  249. package/dist/capabilities/pdf-discovery/DownloadTier.js.map +1 -0
  250. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.d.ts +16 -0
  251. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.d.ts.map +1 -0
  252. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.js +202 -0
  253. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.js.map +1 -0
  254. package/dist/capabilities/pdf-discovery/batch.d.ts +74 -0
  255. package/dist/capabilities/pdf-discovery/batch.d.ts.map +1 -0
  256. package/dist/capabilities/pdf-discovery/batch.js +370 -0
  257. package/dist/capabilities/pdf-discovery/batch.js.map +1 -0
  258. package/dist/capabilities/pdf-discovery/carsi/CarsiAttempt.d.ts +7 -0
  259. package/dist/capabilities/pdf-discovery/carsi/CarsiAttempt.d.ts.map +1 -0
  260. package/dist/capabilities/pdf-discovery/carsi/CarsiAttempt.js +46 -0
  261. package/dist/capabilities/pdf-discovery/carsi/CarsiAttempt.js.map +1 -0
  262. package/dist/capabilities/pdf-discovery/carsi/CarsiMcpClient.d.ts +35 -0
  263. package/dist/capabilities/pdf-discovery/carsi/CarsiMcpClient.d.ts.map +1 -0
  264. package/dist/capabilities/pdf-discovery/carsi/CarsiMcpClient.js +689 -0
  265. package/dist/capabilities/pdf-discovery/carsi/CarsiMcpClient.js.map +1 -0
  266. package/dist/capabilities/pdf-discovery/carsi/CarsiProgress.d.ts +23 -0
  267. package/dist/capabilities/pdf-discovery/carsi/CarsiProgress.d.ts.map +1 -0
  268. package/dist/capabilities/pdf-discovery/carsi/CarsiProgress.js +30 -0
  269. package/dist/capabilities/pdf-discovery/carsi/CarsiProgress.js.map +1 -0
  270. package/dist/capabilities/pdf-discovery/carsi/CarsiReadiness.d.ts +29 -0
  271. package/dist/capabilities/pdf-discovery/carsi/CarsiReadiness.d.ts.map +1 -0
  272. package/dist/capabilities/pdf-discovery/carsi/CarsiReadiness.js +176 -0
  273. package/dist/capabilities/pdf-discovery/carsi/CarsiReadiness.js.map +1 -0
  274. package/dist/capabilities/pdf-discovery/carsi/CarsiResultNormalizer.d.ts +8 -0
  275. package/dist/capabilities/pdf-discovery/carsi/CarsiResultNormalizer.d.ts.map +1 -0
  276. package/dist/capabilities/pdf-discovery/carsi/CarsiResultNormalizer.js +225 -0
  277. package/dist/capabilities/pdf-discovery/carsi/CarsiResultNormalizer.js.map +1 -0
  278. package/dist/capabilities/pdf-discovery/carsi/index.d.ts +8 -0
  279. package/dist/capabilities/pdf-discovery/carsi/index.d.ts.map +1 -0
  280. package/dist/capabilities/pdf-discovery/carsi/index.js +11 -0
  281. package/dist/capabilities/pdf-discovery/carsi/index.js.map +1 -0
  282. package/dist/capabilities/pdf-discovery/carsi/types.d.ts +118 -0
  283. package/dist/capabilities/pdf-discovery/carsi/types.d.ts.map +1 -0
  284. package/dist/capabilities/pdf-discovery/carsi/types.js +2 -0
  285. package/dist/capabilities/pdf-discovery/carsi/types.js.map +1 -0
  286. package/dist/capabilities/pdf-discovery/handler.d.ts +28 -0
  287. package/dist/capabilities/pdf-discovery/handler.d.ts.map +1 -0
  288. package/dist/capabilities/pdf-discovery/handler.js +72 -0
  289. package/dist/capabilities/pdf-discovery/handler.js.map +1 -0
  290. package/dist/capabilities/pdf-discovery/identity.d.ts +8 -0
  291. package/dist/capabilities/pdf-discovery/identity.d.ts.map +1 -0
  292. package/dist/capabilities/pdf-discovery/identity.js +24 -0
  293. package/dist/capabilities/pdf-discovery/identity.js.map +1 -0
  294. package/dist/capabilities/pdf-discovery/index.d.ts +8 -0
  295. package/dist/capabilities/pdf-discovery/index.d.ts.map +1 -0
  296. package/dist/capabilities/pdf-discovery/index.js +6 -0
  297. package/dist/capabilities/pdf-discovery/index.js.map +1 -0
  298. package/dist/capabilities/pdf-discovery/oaHosts.d.ts +3 -0
  299. package/dist/capabilities/pdf-discovery/oaHosts.d.ts.map +1 -0
  300. package/dist/capabilities/pdf-discovery/oaHosts.js +37 -0
  301. package/dist/capabilities/pdf-discovery/oaHosts.js.map +1 -0
  302. package/dist/capabilities/pdf-discovery/pmcCloud.d.ts +6 -0
  303. package/dist/capabilities/pdf-discovery/pmcCloud.d.ts.map +1 -0
  304. package/dist/capabilities/pdf-discovery/pmcCloud.js +95 -0
  305. package/dist/capabilities/pdf-discovery/pmcCloud.js.map +1 -0
  306. package/dist/capabilities/pdf-discovery/publisherApi/elsevier.d.ts +4 -0
  307. package/dist/capabilities/pdf-discovery/publisherApi/elsevier.d.ts.map +1 -0
  308. package/dist/capabilities/pdf-discovery/publisherApi/elsevier.js +122 -0
  309. package/dist/capabilities/pdf-discovery/publisherApi/elsevier.js.map +1 -0
  310. package/dist/capabilities/pdf-discovery/publisherApi/index.d.ts +31 -0
  311. package/dist/capabilities/pdf-discovery/publisherApi/index.d.ts.map +1 -0
  312. package/dist/capabilities/pdf-discovery/publisherApi/index.js +20 -0
  313. package/dist/capabilities/pdf-discovery/publisherApi/index.js.map +1 -0
  314. package/dist/capabilities/pdf-discovery/publisherApi/springer.d.ts +4 -0
  315. package/dist/capabilities/pdf-discovery/publisherApi/springer.d.ts.map +1 -0
  316. package/dist/capabilities/pdf-discovery/publisherApi/springer.js +114 -0
  317. package/dist/capabilities/pdf-discovery/publisherApi/springer.js.map +1 -0
  318. package/dist/capabilities/pdf-discovery/schemas.d.ts +176 -0
  319. package/dist/capabilities/pdf-discovery/schemas.d.ts.map +1 -0
  320. package/dist/capabilities/pdf-discovery/schemas.js +72 -0
  321. package/dist/capabilities/pdf-discovery/schemas.js.map +1 -0
  322. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.d.ts +5 -0
  323. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.d.ts.map +1 -0
  324. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.js +40 -0
  325. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.js.map +1 -0
  326. package/dist/capabilities/pdf-discovery/tiers/entitledAccess.d.ts +13 -0
  327. package/dist/capabilities/pdf-discovery/tiers/entitledAccess.d.ts.map +1 -0
  328. package/dist/capabilities/pdf-discovery/tiers/entitledAccess.js +123 -0
  329. package/dist/capabilities/pdf-discovery/tiers/entitledAccess.js.map +1 -0
  330. package/dist/capabilities/pdf-discovery/tiers/primary.d.ts +3 -0
  331. package/dist/capabilities/pdf-discovery/tiers/primary.d.ts.map +1 -0
  332. package/dist/capabilities/pdf-discovery/tiers/primary.js +21 -0
  333. package/dist/capabilities/pdf-discovery/tiers/primary.js.map +1 -0
  334. package/dist/capabilities/pdf-discovery/tiers/publisherApi.d.ts +12 -0
  335. package/dist/capabilities/pdf-discovery/tiers/publisherApi.d.ts.map +1 -0
  336. package/dist/capabilities/pdf-discovery/tiers/publisherApi.js +109 -0
  337. package/dist/capabilities/pdf-discovery/tiers/publisherApi.js.map +1 -0
  338. package/dist/capabilities/pdf-discovery/tiers/repositories.d.ts +10 -0
  339. package/dist/capabilities/pdf-discovery/tiers/repositories.d.ts.map +1 -0
  340. package/dist/capabilities/pdf-discovery/tiers/repositories.js +37 -0
  341. package/dist/capabilities/pdf-discovery/tiers/repositories.js.map +1 -0
  342. package/dist/capabilities/pdf-discovery/tiers/scihub.d.ts +3 -0
  343. package/dist/capabilities/pdf-discovery/tiers/scihub.d.ts.map +1 -0
  344. package/dist/capabilities/pdf-discovery/tiers/scihub.js +21 -0
  345. package/dist/capabilities/pdf-discovery/tiers/scihub.js.map +1 -0
  346. package/dist/capabilities/pdf-discovery/tiers/unpaywall.d.ts +3 -0
  347. package/dist/capabilities/pdf-discovery/tiers/unpaywall.d.ts.map +1 -0
  348. package/dist/capabilities/pdf-discovery/tiers/unpaywall.js +76 -0
  349. package/dist/capabilities/pdf-discovery/tiers/unpaywall.js.map +1 -0
  350. package/dist/capabilities/pdf-discovery/tools.d.ts +337 -0
  351. package/dist/capabilities/pdf-discovery/tools.d.ts.map +1 -0
  352. package/dist/capabilities/pdf-discovery/tools.js +144 -0
  353. package/dist/capabilities/pdf-discovery/tools.js.map +1 -0
  354. package/dist/capabilities/pdf-discovery/types.d.ts +86 -0
  355. package/dist/capabilities/pdf-discovery/types.d.ts.map +1 -0
  356. package/dist/capabilities/pdf-discovery/types.js +2 -0
  357. package/dist/capabilities/pdf-discovery/types.js.map +1 -0
  358. package/dist/cli.d.ts +3 -0
  359. package/dist/cli.d.ts.map +1 -0
  360. package/dist/cli.js +1196 -0
  361. package/dist/cli.js.map +1 -0
  362. package/dist/config/ConfigService.d.ts +28 -0
  363. package/dist/config/ConfigService.d.ts.map +1 -0
  364. package/dist/config/ConfigService.js +204 -0
  365. package/dist/config/ConfigService.js.map +1 -0
  366. package/dist/config/ResultCaps.d.ts +4 -0
  367. package/dist/config/ResultCaps.d.ts.map +1 -0
  368. package/dist/config/ResultCaps.js +10 -0
  369. package/dist/config/ResultCaps.js.map +1 -0
  370. package/dist/config/constants.d.ts +158 -0
  371. package/dist/config/constants.d.ts.map +1 -0
  372. package/dist/config/constants.js +102 -0
  373. package/dist/config/constants.js.map +1 -0
  374. package/dist/core/capabilityProfile.d.ts +2 -0
  375. package/dist/core/capabilityProfile.d.ts.map +1 -0
  376. package/dist/core/capabilityProfile.js +2 -0
  377. package/dist/core/capabilityProfile.js.map +1 -0
  378. package/dist/core/diagnostics.d.ts +2 -0
  379. package/dist/core/diagnostics.d.ts.map +1 -0
  380. package/dist/core/diagnostics.js +2 -0
  381. package/dist/core/diagnostics.js.map +1 -0
  382. package/dist/core/handleToolCall.d.ts +13 -0
  383. package/dist/core/handleToolCall.d.ts.map +1 -0
  384. package/dist/core/handleToolCall.js +304 -0
  385. package/dist/core/handleToolCall.js.map +1 -0
  386. package/dist/core/httpPolicies.d.ts +2 -0
  387. package/dist/core/httpPolicies.d.ts.map +1 -0
  388. package/dist/core/httpPolicies.js +2 -0
  389. package/dist/core/httpPolicies.js.map +1 -0
  390. package/dist/core/liveSmoke.d.ts +2 -0
  391. package/dist/core/liveSmoke.d.ts.map +1 -0
  392. package/dist/core/liveSmoke.js +2 -0
  393. package/dist/core/liveSmoke.js.map +1 -0
  394. package/dist/core/platformFactories.d.ts +2 -0
  395. package/dist/core/platformFactories.d.ts.map +1 -0
  396. package/dist/core/platformFactories.js +2 -0
  397. package/dist/core/platformFactories.js.map +1 -0
  398. package/dist/core/platformMetadata.d.ts +2 -0
  399. package/dist/core/platformMetadata.d.ts.map +1 -0
  400. package/dist/core/platformMetadata.js +2 -0
  401. package/dist/core/platformMetadata.js.map +1 -0
  402. package/dist/core/schemas.d.ts +365 -0
  403. package/dist/core/schemas.d.ts.map +1 -0
  404. package/dist/core/schemas.js +256 -0
  405. package/dist/core/schemas.js.map +1 -0
  406. package/dist/core/searchers.d.ts +41 -0
  407. package/dist/core/searchers.d.ts.map +1 -0
  408. package/dist/core/searchers.js +24 -0
  409. package/dist/core/searchers.js.map +1 -0
  410. package/dist/core/textReports.d.ts +2 -0
  411. package/dist/core/textReports.d.ts.map +1 -0
  412. package/dist/core/textReports.js +2 -0
  413. package/dist/core/textReports.js.map +1 -0
  414. package/dist/core/tools.d.ts +7 -0
  415. package/dist/core/tools.d.ts.map +1 -0
  416. package/dist/core/tools.js +489 -0
  417. package/dist/core/tools.js.map +1 -0
  418. package/dist/infrastructure/cache/RequestCache.d.ts +26 -0
  419. package/dist/infrastructure/cache/RequestCache.d.ts.map +1 -0
  420. package/dist/infrastructure/cache/RequestCache.js +66 -0
  421. package/dist/infrastructure/cache/RequestCache.js.map +1 -0
  422. package/dist/infrastructure/http/ErrorHandler.d.ts +101 -0
  423. package/dist/infrastructure/http/ErrorHandler.d.ts.map +1 -0
  424. package/dist/infrastructure/http/ErrorHandler.js +278 -0
  425. package/dist/infrastructure/http/ErrorHandler.js.map +1 -0
  426. package/dist/infrastructure/http/HttpClient.d.ts +31 -0
  427. package/dist/infrastructure/http/HttpClient.d.ts.map +1 -0
  428. package/dist/infrastructure/http/HttpClient.js +52 -0
  429. package/dist/infrastructure/http/HttpClient.js.map +1 -0
  430. package/dist/infrastructure/pdf/PDFExtractor.d.ts +34 -0
  431. package/dist/infrastructure/pdf/PDFExtractor.d.ts.map +1 -0
  432. package/dist/infrastructure/pdf/PDFExtractor.js +130 -0
  433. package/dist/infrastructure/pdf/PDFExtractor.js.map +1 -0
  434. package/dist/infrastructure/pdf/PdfDownload.d.ts +16 -0
  435. package/dist/infrastructure/pdf/PdfDownload.d.ts.map +1 -0
  436. package/dist/infrastructure/pdf/PdfDownload.js +242 -0
  437. package/dist/infrastructure/pdf/PdfDownload.js.map +1 -0
  438. package/dist/infrastructure/pdf/PdfFirstPage.cjs +70 -0
  439. package/dist/infrastructure/pdf/PdfFirstPage.cjs.map +1 -0
  440. package/dist/infrastructure/pdf/PdfFirstPage.d.cts +16 -0
  441. package/dist/infrastructure/pdf/PdfFirstPage.d.cts.map +1 -0
  442. package/dist/infrastructure/pdf/PdfIdentity.d.ts +29 -0
  443. package/dist/infrastructure/pdf/PdfIdentity.d.ts.map +1 -0
  444. package/dist/infrastructure/pdf/PdfIdentity.js +283 -0
  445. package/dist/infrastructure/pdf/PdfIdentity.js.map +1 -0
  446. package/dist/infrastructure/rate-limit/RateLimiter.d.ts +50 -0
  447. package/dist/infrastructure/rate-limit/RateLimiter.d.ts.map +1 -0
  448. package/dist/infrastructure/rate-limit/RateLimiter.js +128 -0
  449. package/dist/infrastructure/rate-limit/RateLimiter.js.map +1 -0
  450. package/dist/infrastructure/runlog/RunLedger.d.ts +61 -0
  451. package/dist/infrastructure/runlog/RunLedger.d.ts.map +1 -0
  452. package/dist/infrastructure/runlog/RunLedger.js +284 -0
  453. package/dist/infrastructure/runlog/RunLedger.js.map +1 -0
  454. package/dist/infrastructure/runlog/failureClass.d.ts +26 -0
  455. package/dist/infrastructure/runlog/failureClass.d.ts.map +1 -0
  456. package/dist/infrastructure/runlog/failureClass.js +125 -0
  457. package/dist/infrastructure/runlog/failureClass.js.map +1 -0
  458. package/dist/infrastructure/security/SecurityUtils.d.ts +80 -0
  459. package/dist/infrastructure/security/SecurityUtils.d.ts.map +1 -0
  460. package/dist/infrastructure/security/SecurityUtils.js +357 -0
  461. package/dist/infrastructure/security/SecurityUtils.js.map +1 -0
  462. package/dist/management/capability-profile/carsiReadiness.d.ts +10 -0
  463. package/dist/management/capability-profile/carsiReadiness.d.ts.map +1 -0
  464. package/dist/management/capability-profile/carsiReadiness.js +13 -0
  465. package/dist/management/capability-profile/carsiReadiness.js.map +1 -0
  466. package/dist/management/capability-profile/index.d.ts +26 -0
  467. package/dist/management/capability-profile/index.d.ts.map +1 -0
  468. package/dist/management/capability-profile/index.js +183 -0
  469. package/dist/management/capability-profile/index.js.map +1 -0
  470. package/dist/management/carsi/host.d.ts +4 -0
  471. package/dist/management/carsi/host.d.ts.map +1 -0
  472. package/dist/management/carsi/host.js +65 -0
  473. package/dist/management/carsi/host.js.map +1 -0
  474. package/dist/management/carsi/installer.d.ts +146 -0
  475. package/dist/management/carsi/installer.d.ts.map +1 -0
  476. package/dist/management/carsi/installer.js +527 -0
  477. package/dist/management/carsi/installer.js.map +1 -0
  478. package/dist/management/carsi/runtime.d.ts +31 -0
  479. package/dist/management/carsi/runtime.d.ts.map +1 -0
  480. package/dist/management/carsi/runtime.js +67 -0
  481. package/dist/management/carsi/runtime.js.map +1 -0
  482. package/dist/management/config/index.d.ts +2 -0
  483. package/dist/management/config/index.d.ts.map +1 -0
  484. package/dist/management/config/index.js +2 -0
  485. package/dist/management/config/index.js.map +1 -0
  486. package/dist/management/diagnostics/index.d.ts +43 -0
  487. package/dist/management/diagnostics/index.d.ts.map +1 -0
  488. package/dist/management/diagnostics/index.js +610 -0
  489. package/dist/management/diagnostics/index.js.map +1 -0
  490. package/dist/management/failures/index.d.ts +47 -0
  491. package/dist/management/failures/index.d.ts.map +1 -0
  492. package/dist/management/failures/index.js +134 -0
  493. package/dist/management/failures/index.js.map +1 -0
  494. package/dist/management/reports/index.d.ts +32 -0
  495. package/dist/management/reports/index.d.ts.map +1 -0
  496. package/dist/management/reports/index.js +123 -0
  497. package/dist/management/reports/index.js.map +1 -0
  498. package/dist/management/skills/autoSync.d.ts +41 -0
  499. package/dist/management/skills/autoSync.d.ts.map +1 -0
  500. package/dist/management/skills/autoSync.js +142 -0
  501. package/dist/management/skills/autoSync.js.map +1 -0
  502. package/dist/management/skills/index.d.ts +3 -0
  503. package/dist/management/skills/index.d.ts.map +1 -0
  504. package/dist/management/skills/index.js +3 -0
  505. package/dist/management/skills/index.js.map +1 -0
  506. package/dist/management/smoke/index.d.ts +44 -0
  507. package/dist/management/smoke/index.d.ts.map +1 -0
  508. package/dist/management/smoke/index.js +254 -0
  509. package/dist/management/smoke/index.js.map +1 -0
  510. package/dist/models/Paper.d.ts +64 -0
  511. package/dist/models/Paper.d.ts.map +1 -0
  512. package/dist/models/Paper.js +70 -0
  513. package/dist/models/Paper.js.map +1 -0
  514. package/dist/platforms/ACMSearcher.d.ts +16 -0
  515. package/dist/platforms/ACMSearcher.d.ts.map +1 -0
  516. package/dist/platforms/ACMSearcher.js +125 -0
  517. package/dist/platforms/ACMSearcher.js.map +1 -0
  518. package/dist/platforms/BioRxivSearcher.d.ts +47 -0
  519. package/dist/platforms/BioRxivSearcher.d.ts.map +1 -0
  520. package/dist/platforms/BioRxivSearcher.js +215 -0
  521. package/dist/platforms/BioRxivSearcher.js.map +1 -0
  522. package/dist/platforms/CORESearcher.d.ts +17 -0
  523. package/dist/platforms/CORESearcher.d.ts.map +1 -0
  524. package/dist/platforms/CORESearcher.js +185 -0
  525. package/dist/platforms/CORESearcher.js.map +1 -0
  526. package/dist/platforms/CrossrefSearcher.d.ts +34 -0
  527. package/dist/platforms/CrossrefSearcher.d.ts.map +1 -0
  528. package/dist/platforms/CrossrefSearcher.js +339 -0
  529. package/dist/platforms/CrossrefSearcher.js.map +1 -0
  530. package/dist/platforms/DBLPSearcher.d.ts +16 -0
  531. package/dist/platforms/DBLPSearcher.d.ts.map +1 -0
  532. package/dist/platforms/DBLPSearcher.js +116 -0
  533. package/dist/platforms/DBLPSearcher.js.map +1 -0
  534. package/dist/platforms/EuropePMCSearcher.d.ts +20 -0
  535. package/dist/platforms/EuropePMCSearcher.d.ts.map +1 -0
  536. package/dist/platforms/EuropePMCSearcher.js +173 -0
  537. package/dist/platforms/EuropePMCSearcher.js.map +1 -0
  538. package/dist/platforms/GoogleScholarSearcher.d.ts +142 -0
  539. package/dist/platforms/GoogleScholarSearcher.d.ts.map +1 -0
  540. package/dist/platforms/GoogleScholarSearcher.js +648 -0
  541. package/dist/platforms/GoogleScholarSearcher.js.map +1 -0
  542. package/dist/platforms/IACRSearcher.d.ts +51 -0
  543. package/dist/platforms/IACRSearcher.d.ts.map +1 -0
  544. package/dist/platforms/IACRSearcher.js +339 -0
  545. package/dist/platforms/IACRSearcher.js.map +1 -0
  546. package/dist/platforms/IEEESearcher.d.ts +15 -0
  547. package/dist/platforms/IEEESearcher.d.ts.map +1 -0
  548. package/dist/platforms/IEEESearcher.js +123 -0
  549. package/dist/platforms/IEEESearcher.js.map +1 -0
  550. package/dist/platforms/OpenAIRESearcher.d.ts +22 -0
  551. package/dist/platforms/OpenAIRESearcher.d.ts.map +1 -0
  552. package/dist/platforms/OpenAIRESearcher.js +235 -0
  553. package/dist/platforms/OpenAIRESearcher.js.map +1 -0
  554. package/dist/platforms/OpenAlexSearcher.d.ts +14 -0
  555. package/dist/platforms/OpenAlexSearcher.d.ts.map +1 -0
  556. package/dist/platforms/OpenAlexSearcher.js +114 -0
  557. package/dist/platforms/OpenAlexSearcher.js.map +1 -0
  558. package/dist/platforms/OpenReviewSearcher.d.ts +19 -0
  559. package/dist/platforms/OpenReviewSearcher.d.ts.map +1 -0
  560. package/dist/platforms/OpenReviewSearcher.js +141 -0
  561. package/dist/platforms/OpenReviewSearcher.js.map +1 -0
  562. package/dist/platforms/PMCSearcher.d.ts +20 -0
  563. package/dist/platforms/PMCSearcher.d.ts.map +1 -0
  564. package/dist/platforms/PMCSearcher.js +177 -0
  565. package/dist/platforms/PMCSearcher.js.map +1 -0
  566. package/dist/platforms/PaperSource.d.ts +149 -0
  567. package/dist/platforms/PaperSource.d.ts.map +1 -0
  568. package/dist/platforms/PaperSource.js +125 -0
  569. package/dist/platforms/PaperSource.js.map +1 -0
  570. package/dist/platforms/PubMedSearcher.d.ts +104 -0
  571. package/dist/platforms/PubMedSearcher.d.ts.map +1 -0
  572. package/dist/platforms/PubMedSearcher.js +430 -0
  573. package/dist/platforms/PubMedSearcher.js.map +1 -0
  574. package/dist/platforms/SciHubSearcher.d.ts +66 -0
  575. package/dist/platforms/SciHubSearcher.d.ts.map +1 -0
  576. package/dist/platforms/SciHubSearcher.js +398 -0
  577. package/dist/platforms/SciHubSearcher.js.map +1 -0
  578. package/dist/platforms/ScienceDirectSearcher.d.ts +42 -0
  579. package/dist/platforms/ScienceDirectSearcher.d.ts.map +1 -0
  580. package/dist/platforms/ScienceDirectSearcher.js +334 -0
  581. package/dist/platforms/ScienceDirectSearcher.js.map +1 -0
  582. package/dist/platforms/ScopusSearcher.d.ts +43 -0
  583. package/dist/platforms/ScopusSearcher.d.ts.map +1 -0
  584. package/dist/platforms/ScopusSearcher.js +377 -0
  585. package/dist/platforms/ScopusSearcher.js.map +1 -0
  586. package/dist/platforms/SemanticScholarSearcher.d.ts +96 -0
  587. package/dist/platforms/SemanticScholarSearcher.d.ts.map +1 -0
  588. package/dist/platforms/SemanticScholarSearcher.js +419 -0
  589. package/dist/platforms/SemanticScholarSearcher.js.map +1 -0
  590. package/dist/platforms/SpringerSearcher.d.ts +54 -0
  591. package/dist/platforms/SpringerSearcher.d.ts.map +1 -0
  592. package/dist/platforms/SpringerSearcher.js +387 -0
  593. package/dist/platforms/SpringerSearcher.js.map +1 -0
  594. package/dist/platforms/USENIXSearcher.d.ts +14 -0
  595. package/dist/platforms/USENIXSearcher.d.ts.map +1 -0
  596. package/dist/platforms/USENIXSearcher.js +75 -0
  597. package/dist/platforms/USENIXSearcher.js.map +1 -0
  598. package/dist/platforms/UnpaywallSearcher.d.ts +29 -0
  599. package/dist/platforms/UnpaywallSearcher.d.ts.map +1 -0
  600. package/dist/platforms/UnpaywallSearcher.js +135 -0
  601. package/dist/platforms/UnpaywallSearcher.js.map +1 -0
  602. package/dist/platforms/WebOfScienceSearcher.d.ts +111 -0
  603. package/dist/platforms/WebOfScienceSearcher.d.ts.map +1 -0
  604. package/dist/platforms/WebOfScienceSearcher.js +500 -0
  605. package/dist/platforms/WebOfScienceSearcher.js.map +1 -0
  606. package/dist/registry/aliases.d.ts +2 -0
  607. package/dist/registry/aliases.d.ts.map +1 -0
  608. package/dist/registry/aliases.js +2 -0
  609. package/dist/registry/aliases.js.map +1 -0
  610. package/dist/registry/httpPolicies.d.ts +3 -0
  611. package/dist/registry/httpPolicies.d.ts.map +1 -0
  612. package/dist/registry/httpPolicies.js +13 -0
  613. package/dist/registry/httpPolicies.js.map +1 -0
  614. package/dist/registry/platformFactories.d.ts +8 -0
  615. package/dist/registry/platformFactories.d.ts.map +1 -0
  616. package/dist/registry/platformFactories.js +51 -0
  617. package/dist/registry/platformFactories.js.map +1 -0
  618. package/dist/registry/platformMetadata.d.ts +55 -0
  619. package/dist/registry/platformMetadata.d.ts.map +1 -0
  620. package/dist/registry/platformMetadata.js +438 -0
  621. package/dist/registry/platformMetadata.js.map +1 -0
  622. package/dist/services/CitationService.d.ts +3 -0
  623. package/dist/services/CitationService.d.ts.map +1 -0
  624. package/dist/services/CitationService.js +2 -0
  625. package/dist/services/CitationService.js.map +1 -0
  626. package/dist/services/JournalMetricsService.d.ts +3 -0
  627. package/dist/services/JournalMetricsService.d.ts.map +1 -0
  628. package/dist/services/JournalMetricsService.js +2 -0
  629. package/dist/services/JournalMetricsService.js.map +1 -0
  630. package/dist/services/MultiSourceSearchService.d.ts +3 -0
  631. package/dist/services/MultiSourceSearchService.d.ts.map +1 -0
  632. package/dist/services/MultiSourceSearchService.js +2 -0
  633. package/dist/services/MultiSourceSearchService.js.map +1 -0
  634. package/dist/services/OpenAccessFallbackService.d.ts +4 -0
  635. package/dist/services/OpenAccessFallbackService.d.ts.map +1 -0
  636. package/dist/services/OpenAccessFallbackService.js +2 -0
  637. package/dist/services/OpenAccessFallbackService.js.map +1 -0
  638. package/dist/skills/SkillInstaller.d.ts +110 -0
  639. package/dist/skills/SkillInstaller.d.ts.map +1 -0
  640. package/dist/skills/SkillInstaller.js +393 -0
  641. package/dist/skills/SkillInstaller.js.map +1 -0
  642. package/dist/utils/ErrorHandler.d.ts +3 -0
  643. package/dist/utils/ErrorHandler.d.ts.map +1 -0
  644. package/dist/utils/ErrorHandler.js +3 -0
  645. package/dist/utils/ErrorHandler.js.map +1 -0
  646. package/dist/utils/HttpClient.d.ts +2 -0
  647. package/dist/utils/HttpClient.d.ts.map +1 -0
  648. package/dist/utils/HttpClient.js +2 -0
  649. package/dist/utils/HttpClient.js.map +1 -0
  650. package/dist/utils/Logger.d.ts +6 -0
  651. package/dist/utils/Logger.d.ts.map +1 -0
  652. package/dist/utils/Logger.js +26 -0
  653. package/dist/utils/Logger.js.map +1 -0
  654. package/dist/utils/PDFExtractor.d.ts +3 -0
  655. package/dist/utils/PDFExtractor.d.ts.map +1 -0
  656. package/dist/utils/PDFExtractor.js +3 -0
  657. package/dist/utils/PDFExtractor.js.map +1 -0
  658. package/dist/utils/PdfDownload.d.ts +2 -0
  659. package/dist/utils/PdfDownload.d.ts.map +1 -0
  660. package/dist/utils/PdfDownload.js +2 -0
  661. package/dist/utils/PdfDownload.js.map +1 -0
  662. package/dist/utils/QuotaManager.d.ts +32 -0
  663. package/dist/utils/QuotaManager.d.ts.map +1 -0
  664. package/dist/utils/QuotaManager.js +95 -0
  665. package/dist/utils/QuotaManager.js.map +1 -0
  666. package/dist/utils/RateLimiter.d.ts +2 -0
  667. package/dist/utils/RateLimiter.d.ts.map +1 -0
  668. package/dist/utils/RateLimiter.js +2 -0
  669. package/dist/utils/RateLimiter.js.map +1 -0
  670. package/dist/utils/RequestCache.d.ts +3 -0
  671. package/dist/utils/RequestCache.d.ts.map +1 -0
  672. package/dist/utils/RequestCache.js +3 -0
  673. package/dist/utils/RequestCache.js.map +1 -0
  674. package/dist/utils/SecurityUtils.d.ts +3 -0
  675. package/dist/utils/SecurityUtils.d.ts.map +1 -0
  676. package/dist/utils/SecurityUtils.js +3 -0
  677. package/dist/utils/SecurityUtils.js.map +1 -0
  678. package/package.json +118 -4
  679. package/skills/paper-search/SKILL.md +151 -0
  680. package/skills/paper-search/references/browser-download.md +101 -0
  681. package/skills/paper-search/references/capability-routing.md +174 -0
  682. package/skills/paper-search/references/carsi-setup.md +69 -0
  683. package/skills/paper-search/references/cli-contract.md +200 -0
  684. package/skills/paper-search/references/management-layer.md +149 -0
  685. package/skills/paper-search/references/publisher-support.md +72 -0
  686. package/skills/paper-search/references/troubleshooting.md +15 -0
package/.env.example ADDED
@@ -0,0 +1,208 @@
1
+ # ==============================================================================
2
+ # PaperSearch - Environment Variables
3
+ # ==============================================================================
4
+ # Supports 24 academic sources/platforms with a unified CLI interface,
5
+ # plus EasyScholar journal metrics lookup
6
+ # Platforms: Crossref, OpenAlex, PubMed, PubMed Central, Europe PMC, arXiv,
7
+ # bioRxiv, medRxiv, Semantic Scholar, CORE, OpenAIRE, Web of Science,
8
+ # Google Scholar, DBLP, ACM metadata, USENIX metadata, OpenReview,
9
+ # IACR ePrint, Sci-Hub, IEEE Xplore, ScienceDirect, Springer/SpringerLink,
10
+ # Scopus, Unpaywall
11
+ #
12
+ # For global installs, prefer:
13
+ # paper-search config set KEY VALUE
14
+ # The user-level config path is:
15
+ # ~/.config/paper-search-cli/config.json
16
+
17
+ # ==============================================================================
18
+ # API KEYS CONFIGURATION
19
+ # ==============================================================================
20
+
21
+ # ------------------------------------------------------------------------------
22
+ # Web of Science (Clarivate) - REQUIRED
23
+ # ------------------------------------------------------------------------------
24
+ # Premium citation database with high-quality journal indexing
25
+ # Get API key: https://developer.clarivate.com/apis
26
+ # Pricing: Paid subscription required
27
+ # Rate limit: Depends on subscription level
28
+ WOS_API_KEY=your_web_of_science_api_key_here
29
+ WOS_API_VERSION=v1
30
+
31
+ # ------------------------------------------------------------------------------
32
+ # IEEE Xplore Metadata API - REQUIRED for IEEE search
33
+ # ------------------------------------------------------------------------------
34
+ # Official metadata search API for IEEE Xplore
35
+ # Get API key: https://developer.ieee.org/
36
+ # Documentation: https://developer.ieee.org/docs/read/Searching_the_IEEE_Xplore_Metadata_API
37
+ # Pricing/access: Requires IEEE API access; entitlements may vary
38
+ IEEE_API_KEY=your_ieee_api_key_here
39
+
40
+ # ------------------------------------------------------------------------------
41
+ # PubMed/NCBI E-utilities - OPTIONAL (but recommended)
42
+ # ------------------------------------------------------------------------------
43
+ # Biomedical literature database
44
+ # Without API key: 3 requests/second limit
45
+ # With API key: 10 requests/second limit
46
+ # Get API key: https://ncbiinsights.ncbi.nlm.nih.gov/2017/11/02/new-api-keys-for-the-e-utilities/
47
+ # Pricing: Free
48
+ PUBMED_API_KEY=your_ncbi_api_key_here
49
+ NCBI_EMAIL=you@example.com
50
+ NCBI_TOOL=papersearch
51
+
52
+ # ------------------------------------------------------------------------------
53
+ # Semantic Scholar - OPTIONAL (increases rate limits)
54
+ # ------------------------------------------------------------------------------
55
+ # AI-powered academic search with semantic understanding
56
+ # Required for search_semantic_snippets; strongly recommended for normal search
57
+ # Without API key: ~20 requests/minute (free tier)
58
+ # With API key: ~180 requests/minute (partner tier)
59
+ # Get API key: https://www.semanticscholar.org/product/api
60
+ # Pricing: Free for academic use
61
+ SEMANTIC_SCHOLAR_API_KEY=your_semantic_scholar_api_key_here
62
+
63
+ # ------------------------------------------------------------------------------
64
+ # EasyScholar Journal Metrics API - REQUIRED for journal metrics
65
+ # ------------------------------------------------------------------------------
66
+ # Query journal-level metrics such as impact factor, JCR quartile, CAS zones,
67
+ # JCI, ESI, warning flags, and selected rank datasets.
68
+ # Configure through `paper-search setup EASYSCHOLAR_KEY` when possible so the
69
+ # SecretKey is entered through a hidden prompt instead of appearing in shell history.
70
+ EASYSCHOLAR_KEY=your_easyscholar_secret_key_here
71
+
72
+ # ------------------------------------------------------------------------------
73
+ # Unpaywall - REQUIRED for DOI-based open-access resolution
74
+ # ------------------------------------------------------------------------------
75
+ # Used by search_unpaywall and download_with_fallback
76
+ # Get details: https://unpaywall.org/products/api
77
+ # Pricing: Free, but requires a contact email
78
+ PAPER_SEARCH_UNPAYWALL_EMAIL=you@example.com
79
+ # Legacy-compatible fallback name
80
+ UNPAYWALL_EMAIL=you@example.com
81
+
82
+ # ------------------------------------------------------------------------------
83
+ # CORE - OPTIONAL (but recommended)
84
+ # ------------------------------------------------------------------------------
85
+ # Open repository metadata and PDF candidates
86
+ # Anonymous access can be heavily rate-limited
87
+ # Get API key: https://core.ac.uk/services/api
88
+ # Pricing: Free tier available
89
+ CORE_API_KEY=your_core_api_key_here
90
+ # CORE per-command result cap; default 100, hard maximum 500
91
+ CORE_MAX_RESULTS_CAP=100
92
+
93
+ # ------------------------------------------------------------------------------
94
+ # OpenAIRE - OPTIONAL
95
+ # ------------------------------------------------------------------------------
96
+ # Open repository discovery source; public search usually works without a key
97
+ # API docs: https://develop.openaire.eu/
98
+ OPENAIRE_API_KEY=your_openaire_api_key_here
99
+
100
+ # ------------------------------------------------------------------------------
101
+ # Elsevier API - REQUIRED for ScienceDirect and Scopus
102
+ # ------------------------------------------------------------------------------
103
+ # Single API key works for both platforms:
104
+ # - ScienceDirect: Search and article metadata
105
+ # - Scopus: Largest abstract and citation database
106
+ # Get API key: https://dev.elsevier.com/apikey/manage
107
+ # Pricing: Free tier available with usage limits
108
+ # Rate limit: 10 requests/second with key, 20 requests/minute without
109
+ ELSEVIER_API_KEY=your_elsevier_api_key_here
110
+ # Optional: Elsevier institution token for full-text retrieval when your request
111
+ # does not leave from an entitled campus network (publisher_api tier).
112
+ ELSEVIER_INSTTOKEN=
113
+
114
+ # ------------------------------------------------------------------------------
115
+ # Springer Nature API - REQUIRED for Springer
116
+ # ------------------------------------------------------------------------------
117
+ # Dual API system:
118
+ # - Metadata API v2: Search all Springer content (subscription + open access)
119
+ # Endpoint: https://api.springernature.com/meta/v2/json
120
+ # - OpenAccess API: Search and download open access papers only
121
+ # Endpoint: https://api.springernature.com/openaccess/json
122
+ # Note: OpenAccess API may require special permissions on your API key
123
+ #
124
+ # Get API key: https://dev.springernature.com/signup
125
+ # Documentation: https://dev.springernature.com/
126
+ # Pricing: Free with 5000 requests/day limit (shared between both APIs)
127
+ # Rate limit: ~200 requests/hour (conservative)
128
+ #
129
+ # Primary API key (required - works for Metadata API v2)
130
+ SPRINGER_API_KEY=your_springer_api_key_here
131
+ #
132
+ # Optional: Separate OpenAccess API key (if different from main key)
133
+ # Only set this if you have a separate key specifically for OpenAccess API
134
+ # SPRINGER_OPENACCESS_API_KEY=your_openaccess_api_key_here
135
+
136
+ # ------------------------------------------------------------------------------
137
+ # Authorized PDF retrieval
138
+ # ------------------------------------------------------------------------------
139
+ # Publisher- or institution-entitled PDF retrieval is delegated to the optional
140
+ # CARSI backend shipped in this package (carsi/), over its MCP stdio server.
141
+ # `paper-search carsi install` installs it and sets both values below; set this
142
+ # value to exactly `true` only once the backend is installed. PaperSearch's
143
+ # publisher API keys remain metadata/OA inputs and do not enable entitled PDF
144
+ # retrieval here.
145
+ PAPER_SEARCH_CARSI_ENABLED=false
146
+ # Optional exact executable (no shell arguments); empty uses paper-search-carsi on PATH.
147
+ PAPER_SEARCH_CARSI_EXECUTABLE=
148
+
149
+ # ==============================================================================
150
+ # PLATFORM STATUS SUMMARY
151
+ # ==============================================================================
152
+ #
153
+ # Platform | API Key | Features | Best For
154
+ # ------------------|------------|-------------------------------|------------------
155
+ # Crossref | ✅ Free | Broad metadata, citations | Default search
156
+ # OpenAlex | ✅ Free | Broad metadata, OA locations | Open discovery
157
+ # arXiv | ✅ Free | Preprints, PDF download | Physics, CS, Math
158
+ # Web of Science | 🔴 Required| Citation analysis, metrics | Impact research
159
+ # PubMed | 🟡 Optional| Medical literature | Biomedical
160
+ # PubMed Central | ✅ Free | Open full text, PDFs | Biomedical OA
161
+ # Europe PMC | ✅ Free | Open links, biomedical data | Biomedical OA
162
+ # Google Scholar | 🟡 HTML | Broad discovery (best-effort) | Explicit, low-volume search
163
+ # bioRxiv | ✅ Free | Biology preprints, PDF | Biology research
164
+ # medRxiv | ✅ Free | Medical preprints, PDF | Medical research
165
+ # Semantic Scholar | 🟡 Optional| AI-powered search, citations | CS, AI research
166
+ # EasyScholar | 🔴 Required| IF, JCR/CAS zones, JCI, ESI | Journal metrics
167
+ # CORE | 🟡 Optional| Repository PDFs | Open repositories
168
+ # OpenAIRE | 🟡 Optional| Repository discovery | Open repositories
169
+ # DBLP | ✅ Free | CS bibliography metadata | CS literature
170
+ # ACM metadata | ✅ Free | Crossref DOI-prefix metadata | ACM papers
171
+ # USENIX metadata | ✅ Free | DBLP-backed proceedings data | Systems/security
172
+ # OpenReview | ✅ Free | Notes/search metadata | ML conferences
173
+ # Unpaywall | 📧 Email | DOI OA resolution | Fallback downloads
174
+ # IACR ePrint | ✅ Free | Cryptography papers, PDF | Cryptography
175
+ # Sci-Hub | ✅ Free | Universal DOI access | Any paper by DOI
176
+ # IEEE Xplore | 🔴 Required| IEEE metadata | Engineering
177
+ # ScienceDirect | 🔴 Required| Elsevier metadata, OA links | Journal discovery
178
+ # Springer | 🔴 Required| Dual API (Meta+OpenAccess) | Books & journals
179
+ # Scopus | 🔴 Required| Citation database | Bibliometrics
180
+ #
181
+ # Legend: ✅ No key needed | 🟡 Optional key | 🔴 Key required | 📧 Email required
182
+
183
+ # ==============================================================================
184
+ # CLI RUNTIME CONFIGURATION
185
+ # ==============================================================================
186
+ NODE_ENV=production
187
+ LOG_LEVEL=info
188
+
189
+ # Google Scholar is a best-effort HTML source and is intentionally excluded
190
+ # from `--sources all`. Configure this only with an authorized proxy when the
191
+ # direct network is repeatedly challenged or rate-limited. Leave unset for
192
+ # normal direct requests.
193
+ # GOOGLE_SCHOLAR_PROXY_URL=socks5://127.0.0.1:1080
194
+
195
+ # Optional Scholar client tuning (adapted from bingshuoguo/google-scholar-mcp).
196
+ # The defaults are deliberately conservative: 0.5 requests/second, two retries,
197
+ # and a 15-second timeout. Do not raise these values for bulk harvesting.
198
+ # SCHOLAR_RATE_LIMIT_RPS=0.5
199
+ # SCHOLAR_MAX_RETRIES=2
200
+ # SCHOLAR_TIMEOUT_MS=15000
201
+
202
+ # Download Configuration
203
+ DEFAULT_DOWNLOAD_PATH=./downloads
204
+ MAX_FILE_SIZE_MB=100
205
+
206
+ # Rate Limiting
207
+ RATE_LIMIT_REQUESTS_PER_MINUTE=60
208
+ RATE_LIMIT_BURST=10
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Dianel555
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,214 @@
1
- # Temporary Holding Version
1
+ # PaperSearch
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [简体中文](README.zh.md) | English
4
+
5
+ PaperSearch is `paper-search`, an academic literature command for AI tools and the terminal, with a bundled Skill that teaches Claude Code, Codex, Cursor and other AI tools how to call it. It searches papers, verifies DOIs and PMIDs, expands citations and references, looks up journal impact factors and quartiles, finds Methods wording in body snippets, and downloads paper PDFs and supplementary files. Output is JSON by default, for AI tools and scripts.
6
+
7
+ It is the open version by default: once installed it searches and downloads open-access papers. To download through your school's subscriptions, add the optional institutional download extension.
8
+
9
+ ![Node.js](https://img.shields.io/badge/node.js->=18.0.0-green.svg)
10
+ ![License](https://img.shields.io/badge/license-MIT-blue.svg)
11
+ ![Version](https://img.shields.io/badge/version-0.4.2-blue.svg)
12
+ [![LinuxDo](https://img.shields.io/badge/LinuxDo-community-1f6feb)](https://linux.do)
13
+
14
+ [How it works](#how-it-works) | [Quick start](#quick-start) | [Two ways to download](#two-ways-to-download) | [Search sources](#search-sources) | [Configuration](#configuration) | [Agent Skill](#agent-skill) | [Commands](#commands) | [Troubleshooting](#troubleshooting)
15
+
16
+ ## How it works
17
+
18
+ ```text
19
+ A literature request
20
+ │
21
+ ├─ Find papers, verify DOI/PMID → paper-search search (Crossref, PubMed, OpenAlex, ...)
22
+ │ └─ Entries confirmed, full text needed → go to "Download" below
23
+ ├─ Citing papers, references → paper-search run get_paper_citations / get_paper_references
24
+ ├─ Impact factor, quartiles → paper-search journal-metrics (EasyScholar key)
25
+ ├─ Methods wording, parameters → paper-search run search_semantic_snippets (Semantic Scholar key)
26
+ │
27
+ └─ Download main text, supplementary files → paper-search download / run download_with_fallback / run download_batch
28
+ One download command, tried in order:
29
+ ├─ ① Open downloading (built in): the source's own download, PMC, Unpaywall, publisher APIs
30
+ ├─ ② Sci-Hub fallback (on by default, can be turned off)
31
+ ├─ ③ Institutional download (optional extension): a browser signs in to your school through CARSI and takes the PDF and supplementary files from the publisher's site
32
+ ├─ Every file is checked against the DOI and title on its first page; once one passes it is saved and the rest are not tried
33
+ └─ Nothing found → paper-search failures says why
34
+ ```
35
+
36
+ ## Quick start
37
+
38
+ Requires Node.js 18 or later and npm.
39
+
40
+ ```bash
41
+ npm install -g papersearch
42
+ paper-search setup
43
+ paper-search doctor --format text
44
+ ```
45
+
46
+ `paper-search setup` asks three things in turn: API keys and email; which AI tools to install the Skill into (Claude Code, Codex, Cursor, ...); and whether to install the institutional download extension. Each can be skipped. `doctor` shows what works now and what is still missing.
47
+
48
+ The Skill is the instruction file that teaches an AI tool to call `paper-search`; install it when you use an AI tool for literature work. If you skipped it, install it any time, with `--targets` set to your tool (`claude`, `codex`, `cursor`, `gemini`, `agents`, or `all`):
49
+
50
+ ```bash
51
+ paper-search skills update --targets claude
52
+ ```
53
+
54
+ You can also send this to your AI tool and let it do the install:
55
+
56
+ ```text
57
+ Please install PaperSearch for me: run npm install -g papersearch, then paper-search skills update --targets <your own target: claude for Claude Code, codex for Codex, cursor for Cursor>, then paper-search doctor --format text, and tell me which features work and which keys are missing. I will enter API keys myself with paper-search setup in a terminal; do not ask me to paste them into the chat.
58
+ ```
59
+
60
+ **Coming from the old package `paper-search-cli`**: run `npm uninstall -g paper-search-cli`, then `npm install -g papersearch`. Both provide the same `paper-search` command and cannot be installed together; your configuration, Skill, school login and download records stay.
61
+
62
+ **Later upgrades**: `npm install -g papersearch@latest`. The first `paper-search` run after an upgrade brings the Skill you installed up to the new version.
63
+
64
+ Try the features:
65
+
66
+ ```bash
67
+ paper-search search "machine learning clinical prediction" --platform crossref --max-results 3 --pretty
68
+ paper-search search "large language models" --sources no-key --max-results 5 --pretty
69
+ paper-search run get_paper_citations --arg doi="10.1038/nature12373" --arg limit=5 --pretty
70
+ paper-search journal-metrics "Nature" "BMJ" --pretty
71
+ paper-search download PMC11466435 --platform pmc --save-path ./downloads
72
+ paper-search run search_semantic_snippets --arg query="propensity score matching" --arg limit=3 --pretty
73
+ ```
74
+
75
+ ## Two ways to download
76
+
77
+ | | Open downloading (default) | Institutional download (optional extension) |
78
+ |---|---|---|
79
+ | Available | As soon as PaperSearch is installed | After `paper-search carsi install` |
80
+ | Gets | Open-access main text | Main text your school subscribes to; supplementary files from the publishers with rules for them |
81
+ | How | Direct downloads, usually seconds, no login: the source's own download, PDF links in the metadata, PubMed Central, Unpaywall, publisher APIs (your own Elsevier/Springer keys); last, the Sci-Hub fallback, on by default | A browser signs in to your school through CARSI and takes the PDF from the publisher's site |
82
+ | What you do | Nothing | The first time, type your school account and password in the browser and click any human check; the program picks the school |
83
+
84
+ Both use the same download command: open downloading first, and when it finds nothing, the institutional download if it is installed.
85
+
86
+ ```bash
87
+ paper-search download "<DOI>" --platform crossref --save-path ./downloads
88
+ paper-search run download_batch --json-args '{"items":[{"doi":"<DOI-1>"},{"doi":"<DOI-2>"}],"savePath":"./downloads"}'
89
+ paper-search failures --format text
90
+ ```
91
+
92
+ - For dozens to hundreds of papers, use one `download_batch`; afterwards `paper-search failures` sorts the papers not downloaded into four classes: no access (with the evidence, such as the page's own words), needs you (login, human check, waiting), site not supported yet, and cause unknown.
93
+ - To leave out Sci-Hub, set `"useSciHub": false` in `download_with_fallback` / `download_batch`.
94
+ - Every saved PDF is checked against the DOI and title on its first page; a file of another article is not kept.
95
+
96
+ ### Institutional download extension
97
+
98
+ ```bash
99
+ paper-search carsi install
100
+ paper-search carsi status --format text
101
+ ```
102
+
103
+ - Installing asks for your school (a CARSI member school, by Chinese name, English name or domain) and downloads the dedicated Camoufox browser, about 3 GB in all; on macOS, `--browser ego` uses ego lite instead, about 0.5 GB. `--skip-school` leaves the school for later.
104
+ - Schools sign in through CARSI (the Chinese university identity federation). When a publisher's institution list has no CARSI or no entry for your school, the program says so at once; download on campus or through your school's VPN instead.
105
+ - Downloads show a progress window: skip this paper, mark the journal or publisher as no access, stop the whole task, or change how long waits last (the gear at the top right). On the school's login page a paper waits up to 3 minutes by default; anywhere else (human checks, publisher pages, ...) it ends after 1 minute.
106
+ - `paper-search carsi update` updates the extension after a PaperSearch upgrade; `paper-search carsi uninstall` removes it (keeping the browser and the school settings by default).
107
+ - Windows: if PowerShell blocks `npm.ps1`, use `npm.cmd` or Command Prompt; downloads must run in a desktop session, as a browser window cannot open from SSH or a system service.
108
+
109
+ ### Supplementary files
110
+
111
+ `content` in `download_with_fallback` / `download_batch` picks what to download: `main` (default, main text only), `both` (main text and supplementary files), or `supplements` (supplementary files only). Supplementary files come only through the institutional download; they are saved under `<save path>/<DOI>_supplements/`, with a `manifest.json` giving each file's status.
112
+
113
+ What each publisher supports, main text and supplementary files, is in the [publisher support table](skills/paper-search/references/publisher-support.md) (Chinese). Main text and supplementary files have both been fetched from Elsevier, Wiley, Springer Nature, OUP, Wolters Kluwer, Taylor & Francis, Sage, ACS, NEJM, ASCE, Dove and others; IEEE, Thieme and others give the main text only for now; sites not in the table are tried with the shared rules.
114
+
115
+ ## Search sources
116
+
117
+ | Kind | Sources | Configuration |
118
+ |---|---|---|
119
+ | General academic metadata | Crossref, OpenAlex, Semantic Scholar, Google Scholar | None; Semantic Scholar body snippets need a key; Google Scholar must be asked for by name |
120
+ | Biomedicine | PubMed, PubMed Central, Europe PMC | Optional PubMed key |
121
+ | Preprints and conference papers | bioRxiv, medRxiv, OpenReview, IACR ePrint | None |
122
+ | Computer science and engineering | DBLP, ACM, USENIX, IEEE Xplore | IEEE needs a key |
123
+ | Open access and repositories | CORE, OpenAIRE, Unpaywall | Unpaywall needs an email; CORE key optional |
124
+ | Citation databases and publishers | Web of Science, Scopus, ScienceDirect, Springer Nature | Each needs its key; metadata only (Elsevier and Springer keys also serve the publisher API for full text) |
125
+ | Journal metrics | EasyScholar | EasyScholar key |
126
+
127
+ - One source with `--platform`, several with `--sources a,b,c`; `--sources no-key` needs no keys at all (Crossref, PubMed, Europe PMC, OpenReview).
128
+ - Google Scholar is read from its web pages and often meets human checks, so it is not in `--sources all`; use `--platform googlescholar` when you need it.
129
+ - Sci-Hub is not a search source; it only serves as a DOI fallback when downloading.
130
+
131
+ ## Configuration
132
+
133
+ Most free sources need nothing. Run `paper-search setup` first to save keys in your user configuration:
134
+
135
+ ```bash
136
+ paper-search setup
137
+ paper-search config list --pretty
138
+ paper-search config set SEMANTIC_SCHOLAR_API_KEY <your key>
139
+ ```
140
+
141
+ The configuration file is `~/.config/paper-search-cli/config.json` (mode `0600`; the folder keeps its old name, so upgrades keep your settings). `config list` and `doctor` show keys masked.
142
+
143
+ | Key | Use | When |
144
+ |---|---|---|
145
+ | `SEMANTIC_SCHOLAR_API_KEY` | Body snippet search; steadier Semantic Scholar requests | For Methods details, or frequent Semantic Scholar use |
146
+ | `UNPAYWALL_EMAIL` | Open-access PDFs by DOI | Recommended; an email is enough |
147
+ | `CROSSREF_MAILTO` | Crossref's polite pool | Long or frequent searches |
148
+ | `CORE_API_KEY` | CORE repository search | Frequent CORE use, or rate limits |
149
+ | `EASYSCHOLAR_KEY` | Journal metrics | For impact factors and quartiles; `paper-search setup EASYSCHOLAR_KEY` hides the input |
150
+ | `PUBMED_API_KEY`, `NCBI_EMAIL` | Higher PubMed limits | Frequent PubMed use |
151
+ | `WOS_API_KEY`, `IEEE_API_KEY`, `ELSEVIER_API_KEY`, `SPRINGER_API_KEY` | Their metadata; Elsevier and Springer keys also serve the publisher API for full text (access follows your network or key) | When you use those sources |
152
+ | `ELSEVIER_INSTTOKEN` | Elsevier full text off campus through its API | Off campus; not needed on a campus network |
153
+ | `GOOGLE_SCHOLAR_PROXY_URL` | Egress proxy for Google Scholar | When direct requests keep being challenged; use a proxy you are allowed to use |
154
+ | `PAPER_SEARCH_CARSI_ENABLED` | Switch for the institutional download extension | Set by `paper-search carsi install` |
155
+ | `PAPER_SEARCH_SKILL_AUTO_UPDATE` | `false` stops upgrades from updating the installed Skill | On by default; set it to manage the Skill yourself |
156
+
157
+ Where to get keys: [EasyScholar](https://www.easyscholar.cc/console/user/open) · [Semantic Scholar](https://www.semanticscholar.org/product/api) · [Unpaywall](https://unpaywall.org/products/api) · [CORE](https://core.ac.uk/services/api) · [NCBI](https://ncbiinsights.ncbi.nlm.nih.gov/2017/11/02/new-api-keys-for-the-e-utilities/) · [Web of Science](https://developer.clarivate.com/apis) · [IEEE Xplore](https://developer.ieee.org/docs/read/Searching_the_IEEE_Xplore_Metadata_API) · [Elsevier](https://dev.elsevier.com/apikey/manage) · [Springer Nature](https://dev.springernature.com/) · [OpenAIRE](https://develop.openaire.eu/)
158
+
159
+ ## Agent Skill
160
+
161
+ The Skill ships in the npm package (`skills/paper-search/`). It is written in Chinese, opens with the same overall diagram, and points the AI to focused references as needed: routing and the open download channels, the command contract, installing and using the institutional download, the [publisher support table](skills/paper-search/references/publisher-support.md), and troubleshooting. It only tells the AI how to call `paper-search`; it keeps no keys, cookies or accounts.
162
+
163
+ ```bash
164
+ paper-search skills status --pretty
165
+ paper-search skills update --targets claude
166
+ ```
167
+
168
+ - Targets: `agents`, `codex`, `claude`, `cursor`, `gemini`, `antigravity`, `all`. Updating overwrites the files the package manages and keeps files you added to the Skill directory.
169
+ - **Auto-update after upgrades**: the first `paper-search` run after an upgrade (other than `skills` and `setup`) brings the Skill you installed up to the new version: only where it was installed; replaced files are backed up under `~/.local/share/paper-search-cli/skill-backups/`; one line on stderr says what changed. With no Skill installed anywhere, it says once how to install it. To turn it off: `paper-search config set PAPER_SEARCH_SKILL_AUTO_UPDATE false`.
170
+ - `paper-search doctor` shows where the Skill is installed and whether it is current.
171
+
172
+ ## Commands
173
+
174
+ | Command | Use |
175
+ |---|---|
176
+ | `paper-search search` | Search paper metadata |
177
+ | `paper-search journal-metrics` | Journal metrics (EasyScholar) |
178
+ | `paper-search download` | Download the PDF of a verified paper |
179
+ | `paper-search run <tool>` | Call one tool exactly, with `--arg` or `--json-args` |
180
+ | `paper-search failures` | Why downloads failed, summarized |
181
+ | `paper-search carsi` | Install, check, update or remove the institutional download extension |
182
+ | `paper-search setup` / `config` | Configure keys, the Skill and the extension |
183
+ | `paper-search doctor` | Health check: configuration, available features, Skill and extension status |
184
+ | `paper-search skills` | Skill status, differences and updates |
185
+ | `paper-search smoke` | Offline or live self-check |
186
+ | `paper-search tools` | All tool names and their arguments |
187
+
188
+ Commands print JSON by default; `--pretty` formats it and `--format text` prints a report for people. All commands: `paper-search tools --pretty`, or the [command contract](skills/paper-search/references/cli-contract.md) (Chinese).
189
+
190
+ ## Troubleshooting
191
+
192
+ | Problem | What to do |
193
+ |---|---|
194
+ | `paper-search` not found | Reinstall with `npm install -g papersearch` |
195
+ | `EEXIST` while installing | The old package is still there: `npm uninstall -g paper-search-cli` first |
196
+ | A feature does not work | `paper-search doctor --format text` shows what is missing; then `paper-search setup` |
197
+ | Subscribed articles do not download | `paper-search carsi status --format text` for the extension; `paper-search failures --format text` for each paper's reason |
198
+ | A source rate-limits | Lower `--max-results`, configure its key, or switch sources |
199
+ | Google Scholar shows a human check | Wait and retry, or use `--sources no-key` |
200
+ | The AI reads an old Skill | `paper-search skills status --pretty`, then `paper-search skills update --targets <tool>`; start a new AI session |
201
+
202
+ ## Use responsibly
203
+
204
+ Some sources are subject to platform terms, institutional subscriptions or local law; use them only where you have access. The institutional download uses your own school account and subscriptions; the source labels in results are for diagnosis and are not proof of entitlement.
205
+
206
+ ## Origins
207
+
208
+ - Thanks to the [LinuxDo](https://linux.do) community, where the command-plus-Skill approach and workflow improvements came from discussion and open sharing.
209
+ - [openags/paper-search-mcp](https://github.com/openags/paper-search-mcp): the project draws on its ideas, reworked into a standalone command.
210
+ - [Rimagination/scansci-pdf](https://github.com/Rimagination/scansci-pdf) (MIT): the institutional download backend (`carsi/`) was carved out of it, keeping only the institutional access part (CARSI and other federation sign-in, publisher site capture, session reuse, PDF capture), with publisher rules added one by one since; its copyright notice is kept in `carsi/NOTICE`.
211
+
212
+ ## License
213
+
214
+ MIT