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
@@ -0,0 +1,13 @@
1
+ """On the Atypon platform (``platforms/atypon``): only its hosts are its own."""
2
+ from __future__ import annotations
3
+
4
+ from ..base import register
5
+ from ..platforms.atypon import AtyponAdapter
6
+
7
+
8
+ @register
9
+ class ACMAdapter(AtyponAdapter):
10
+ """The ACM Digital Library on dl.acm.org: on Atypon's Literatum since 2017 (ACM, 2017-10-03)."""
11
+
12
+ publisher = "acm"
13
+ site_hosts = frozenset({"dl.acm.org"})
@@ -0,0 +1,47 @@
1
+ """ACS Publications: journals on pubs.acs.org.
2
+
3
+ Article pages are ``/<journal>/article(-abstract)/<four numbers>(/<name>)``;
4
+ an ``/article-abstract/`` page is the article without access and "Subscribed"
5
+ by the title means access. Signed in, the header's institution dropdown
6
+ (``button.at-institution``) names the school, without the older "access
7
+ provided by" text: all three are the shared access rule's
8
+ (engine/access_rules.py). The article PDF endpoint (``/article-pdf/``,
9
+ ``metadata_pdf_patterns``) is the page's ``citation_pdf_url`` when its
10
+ ``citation_doi`` is this DOI (the engine's one rule, batch_pdf_urls.py); once
11
+ known, every other PDF response is refused.
12
+ """
13
+ from __future__ import annotations
14
+
15
+ import re
16
+ from typing import Any
17
+ from urllib.parse import urlparse
18
+
19
+ from ..base import PublisherAdapter, SupplementLink, register
20
+ from ..platforms import silverchair
21
+
22
+
23
+ @register
24
+ class ACSAdapter(PublisherAdapter):
25
+ publisher = "acs"
26
+ keeps_pdf_out_of_downloads = True
27
+ metadata_pdf_patterns = ("https://pubs.acs.org/*/article-pdf/*",)
28
+ # ACS's IP-block page names its contact mailbox (moved from the engine, review 2026-11-02).
29
+ block_page_markers = ("ipblock@acs.org",)
30
+
31
+ def login_url(self) -> str | None:
32
+ return "https://pubs.acs.org/"
33
+
34
+ def supplement_links(self, page: Any, doi: str) -> list[SupplementLink] | None:
35
+ # The Supporting Information: the Silverchair platform's rule (ACS's site is
36
+ # Silverchair's since 2026; its PDF rules stay its own above).
37
+ return silverchair.supplement_links(page, doi, frozenset({"pubs.acs.org"}))
38
+
39
+ def is_success_article_url(self, url: str) -> bool | None:
40
+ parsed = urlparse(url.lower())
41
+ if parsed.hostname != "pubs.acs.org":
42
+ return False
43
+ # Volume/issue/page article ids, or the DOI form of the 2026 pages
44
+ # ("/jacsat/article-abstract/doi/10.1021/jacs.6c12304/5461066/Investigation-…", 2026-11-02).
45
+ if re.fullmatch(r"/[^/]+/article(?:-abstract)?/(?:(?:\d+/){3}\d+|doi/10\.\d{4,9}/[^/]+/\d+)(?:/[^/]+)?/?", parsed.path):
46
+ return True
47
+ return None
@@ -0,0 +1,13 @@
1
+ """On the Atypon platform (``platforms/atypon``): only its hosts are its own."""
2
+ from __future__ import annotations
3
+
4
+ from ..base import register
5
+ from ..platforms.atypon import AtyponAdapter
6
+
7
+
8
+ @register
9
+ class AHAJournalsAdapter(AtyponAdapter):
10
+ """AHA journals (Circulation, Stroke, ...) on ahajournals.org."""
11
+
12
+ publisher = "aha journals"
13
+ site_hosts = frozenset({"ahajournals.org", "www.ahajournals.org"})
@@ -0,0 +1,19 @@
1
+ """American Meteorological Society: journals on journals.ametsoc.org.
2
+
3
+ The PDF of an article page ``/view/<path>.xml`` is ``/downloadpdf/view/<path>.pdf``.
4
+ """
5
+ from __future__ import annotations
6
+
7
+ from ...engine.router import _append_ams_candidates
8
+ from ..base import PublisherAdapter, register
9
+
10
+
11
+ @register
12
+ class AMSAdapter(PublisherAdapter):
13
+ publisher = "ams"
14
+
15
+ @classmethod
16
+ def profile_pdf_candidates(cls, doi: str, source_url: str) -> list[str]:
17
+ urls: list[str] = []
18
+ _append_ams_candidates(urls, source_url)
19
+ return urls
@@ -0,0 +1,154 @@
1
+ """Annual Reviews: journals on annualreviews.org.
2
+
3
+ Outside CARSI its institution login is on its own pages: ``/session/ext/shib``
4
+ (Shibboleth) and ``/session/ext/athens`` ("Option 2: Sign-in with OpenAthens").
5
+ The OpenAthens page is taken: from the Shibboleth page its address is opened
6
+ with the configured school as the search (``openathens_entry``), and there the
7
+ school is typed into the organisation search and chosen
8
+ (``fill_institution_search``). Moved from the engine (review 2026-11-02); the
9
+ steps are as before, and a browser error on them is recorded instead of passed
10
+ over in silence.
11
+ """
12
+ from __future__ import annotations
13
+
14
+ import json
15
+ from typing import Any
16
+ from urllib.parse import parse_qs, urlencode, urlparse
17
+
18
+ from ...engine.batch_common import _is_browser_error, open_page, pump_until
19
+ from ..base import PublisherAdapter, register
20
+
21
+ _OPENATHENS_BOX = ("xpath=(//*[contains(normalize-space(.), 'Option 2: Sign-in with OpenAthens')]"
22
+ "/following::input[contains(@placeholder, 'organization')])[1]")
23
+ # The page's own controls, by their words: the school's result, "Go To Sign-in",
24
+ # else the organisation search and "Find Your Organization".
25
+ _OPENATHENS_STEP_JS = """
26
+ (query) => {
27
+ const needle = (query || '').toLowerCase();
28
+ if (!needle) return null;
29
+ const visible = (el) => {
30
+ const rect = el.getBoundingClientRect();
31
+ const style = window.getComputedStyle(el);
32
+ return rect.width > 0 && rect.height > 0 && style.visibility !== 'hidden' && style.display !== 'none';
33
+ };
34
+ const textOf = (el) => [
35
+ el.innerText || '',
36
+ el.textContent || '',
37
+ el.value || '',
38
+ el.getAttribute('aria-label') || '',
39
+ el.getAttribute('title') || ''
40
+ ].join(' ').trim();
41
+ const controls = [...document.querySelectorAll('a,button,input[type="button"],input[type="submit"]')].filter(visible);
42
+ const goButtons = controls.filter((el) => textOf(el).toLowerCase().includes('go to sign-in'));
43
+ const resultEls = [...document.querySelectorAll('a,button,li,div,span,option')]
44
+ .filter(visible)
45
+ .filter((el) => textOf(el).toLowerCase().includes(needle));
46
+ if (resultEls.length) {
47
+ resultEls[resultEls.length - 1].click();
48
+ if (goButtons.length) {
49
+ goButtons[goButtons.length - 1].click();
50
+ return {action: 'openathens_go', result: textOf(resultEls[resultEls.length - 1]).slice(0, 160)};
51
+ }
52
+ return {action: 'openathens_result', result: textOf(resultEls[resultEls.length - 1]).slice(0, 160)};
53
+ }
54
+ const inputs = [...document.querySelectorAll('input')]
55
+ .filter(visible)
56
+ .filter((el) => {
57
+ const haystack = [el.placeholder || '', el.name || '', el.id || '', el.getAttribute('aria-label') || ''].join(' ').toLowerCase();
58
+ return haystack.includes('organization') || haystack.includes('institution');
59
+ });
60
+ if (inputs.length) {
61
+ const input = inputs[inputs.length - 1];
62
+ input.focus();
63
+ input.value = query;
64
+ input.dispatchEvent(new Event('input', {bubbles: true}));
65
+ input.dispatchEvent(new Event('change', {bubbles: true}));
66
+ const findButtons = controls.filter((el) => textOf(el).toLowerCase().includes('find your organization'));
67
+ if (findButtons.length) {
68
+ findButtons[findButtons.length - 1].click();
69
+ }
70
+ return {action: 'openathens_search', query};
71
+ }
72
+ if (goButtons.length) {
73
+ goButtons[goButtons.length - 1].click();
74
+ return {action: 'openathens_go'};
75
+ }
76
+ return null;
77
+ }
78
+ """
79
+
80
+
81
+ def _error(exc: Exception) -> str:
82
+ return f"{type(exc).__name__}: {str(exc).splitlines()[0][:160] if str(exc) else ''}"
83
+
84
+
85
+ @register
86
+ class AnnualReviewsAdapter(PublisherAdapter):
87
+ publisher = "annual reviews"
88
+
89
+ def openathens_entry(self, page: Any, result: Any) -> bool | None:
90
+ """From the Shibboleth page, its OpenAthens page with the school as the
91
+ search; on the OpenAthens page nothing more (the school is chosen there)."""
92
+ d = self.d
93
+ parsed = urlparse(str(getattr(page, "url", "") or ""))
94
+ if not parsed.netloc.endswith("annualreviews.org"):
95
+ return None
96
+ path = parsed.path.lower()
97
+ if path.startswith("/session/ext/athens"):
98
+ return False
99
+ if not path.startswith("/session/ext/shib"):
100
+ return None
101
+ target_url = parse_qs(parsed.query).get("url", ["/"])[0] or "/"
102
+ openathens_url = (f"{parsed.scheme or 'https'}://{parsed.netloc}/session/ext/athens?"
103
+ f"{urlencode({'url': target_url, 'athensWayfSearch': d.institution_query})}")
104
+ try:
105
+ open_page(page, openathens_url, timeout_ms=30_000)
106
+ except Exception as exc:
107
+ if not _is_browser_error(exc):
108
+ raise
109
+ d._event(result, "openathens_entry_error", _error(exc))
110
+ return False
111
+ d._event(result, "openathens_entry", openathens_url)
112
+ return True
113
+
114
+ def fill_institution_search(self, page: Any, result: Any) -> bool:
115
+ """On the OpenAthens page: the school in "Option 2"'s organisation search,
116
+ its result, then "Go To Sign-in"; else the page's own controls by their words."""
117
+ d = self.d
118
+ if "annualreviews.org/session/ext/athens" not in str(getattr(page, "url", "") or "").lower():
119
+ return False
120
+ try:
121
+ input_box = page.locator(_OPENATHENS_BOX).first
122
+ if input_box.is_visible(timeout=1_500):
123
+ input_box.fill(d.institution_query)
124
+ page.locator("text=Find Your Organization").last.click(timeout=5_000, no_wait_after=True)
125
+ d._event(result, "institution_search", f"OpenAthens: {d.institution_query}")
126
+ pump_until(page, lambda: d._any_visible(page, d._institution_result_selectors()), 2_000)
127
+ for selector in d._institution_result_selectors():
128
+ try:
129
+ option = page.locator(selector).last
130
+ if option.is_visible(timeout=1_500):
131
+ option.click(timeout=5_000, no_wait_after=True)
132
+ page.locator("text=Go To Sign-in").last.click(timeout=5_000, no_wait_after=True)
133
+ d._event(result, "institution_selected", selector)
134
+ break
135
+ except Exception as exc:
136
+ if not _is_browser_error(exc):
137
+ raise
138
+ continue # the next result selector
139
+ return True
140
+ except Exception as exc:
141
+ if not _is_browser_error(exc):
142
+ raise
143
+ d._event(result, "institution_search_error", f"OpenAthens organisation search: {_error(exc)}")
144
+ try:
145
+ action = page.evaluate(_OPENATHENS_STEP_JS, d.institution_query)
146
+ except Exception as exc:
147
+ if not _is_browser_error(exc):
148
+ raise
149
+ d._event(result, "institution_select_error", _error(exc))
150
+ return False
151
+ if action:
152
+ d._event(result, "institution_selected", json.dumps(action, ensure_ascii=False))
153
+ return True
154
+ return False
@@ -0,0 +1,127 @@
1
+ """American Physical Society: journals on journals.aps.org (and link.aps.org DOIs).
2
+
3
+ Article pages are ``/<journal>/abstract/<DOI>`` and ``/pdf/<DOI>``, and
4
+ link.aps.org's ``/doi/`` addresses. Without access the article shows an
5
+ access box (``#inline-unauthorized-page``, a paywall box of the shared access
6
+ rule) offering APS member, APS account and institution-provided logins. The institution's own login is "Sign in via
7
+ your Institution" in the header's Sign-in menu (OpenAthens). A login that
8
+ ends on another APS page goes back to this record's article.
9
+ """
10
+ from __future__ import annotations
11
+
12
+ import json
13
+ from typing import Any
14
+ from urllib.parse import urlparse
15
+
16
+ from ...engine.router import _append_aps_candidates
17
+ from ...engine.batch_common import open_page
18
+ from ..base import PublisherAdapter, register
19
+
20
+
21
+ # APS resolves article pages per journal code; the DOI suffix carries the journal.
22
+ def aps_article_url(doi: str) -> str:
23
+ suffix = doi.split("/", 1)[-1] if "/" in doi else doi
24
+ journal_codes = (
25
+ ("PhysRevLett.", "prl"),
26
+ ("PhysRevA.", "pra"),
27
+ ("PhysRevB.", "prb"),
28
+ ("PhysRevC.", "prc"),
29
+ ("PhysRevD.", "prd"),
30
+ ("PhysRevE.", "pre"),
31
+ ("PhysRevX.", "prx"),
32
+ ("PhysRevApplied.", "prapplied"),
33
+ ("PhysRevResearch.", "prresearch"),
34
+ ("RevModPhys.", "rmp"),
35
+ ("PRXQuantum.", "prxquantum"),
36
+ )
37
+ for prefix, journal_code in journal_codes:
38
+ if suffix.startswith(prefix):
39
+ return f"https://journals.aps.org/{journal_code}/abstract/{doi}"
40
+ return ""
41
+
42
+
43
+ @register
44
+ class APSAdapter(PublisherAdapter):
45
+ publisher = "aps"
46
+ returns_to_record_article = True
47
+
48
+ def article_url(self, doi: str) -> str | None:
49
+ return aps_article_url(doi) or None
50
+
51
+ @classmethod
52
+ def profile_pdf_candidates(cls, doi: str, source_url: str) -> list[str]:
53
+ urls: list[str] = []
54
+ _append_aps_candidates(urls, source_url)
55
+ return urls
56
+
57
+ @classmethod
58
+ def belongs_to_article(cls, url: str, doi: str, source_url: str) -> bool | None:
59
+ lower = url.lower()
60
+ host = (urlparse(url).hostname or "").lower()
61
+ if host.endswith("journals.aps.org") or host.endswith("link.aps.org"):
62
+ if "/accepted" in lower:
63
+ return False
64
+ doi_lower = doi.lower()
65
+ doi_escaped = doi_lower.replace("/", "%2f")
66
+ if "/pdf/" in lower or "/doi/" in lower:
67
+ return doi_lower in lower or doi_escaped in lower
68
+ return True
69
+
70
+ def is_success_article_url(self, url: str) -> bool | None:
71
+ parsed = urlparse(url.lower())
72
+ host = parsed.netloc
73
+ path = parsed.path
74
+ if host.endswith("link.aps.org") and path.startswith("/doi/"):
75
+ return True
76
+ return host.endswith("journals.aps.org") and ("/abstract/" in path or "/pdf/" in path)
77
+
78
+ def open_institution_entry(self, page: Any, result: Any) -> bool | None:
79
+ host = (urlparse(str(getattr(page, "url", "") or "")).hostname or "").lower()
80
+ if host == "openathens.net" or host.endswith(".openathens.net"):
81
+ return None # a federation page: the engine clicks nothing there
82
+ if self.institution_sign_in(page, result):
83
+ return True
84
+ if result is not None:
85
+ self.d._event(result, "aps_institution_entry_missing", getattr(page, "url", ""))
86
+ return False
87
+
88
+ def institution_sign_in(self, page: Any, result: Any = None) -> bool:
89
+ """APS "Sign in via your Institution" (OpenAthens federation).
90
+
91
+ It sits in the header's Sign-in menu. The access box's
92
+ "username/password provided by your institution" link is an APS
93
+ account form, not the institution's own login, and is never used.
94
+ """
95
+ d = self.d
96
+ current_url = str(getattr(page, "url", "") or "").lower()
97
+ if "/auth/openathens/login" in current_url or "/login_inst_user" in current_url:
98
+ return False
99
+ try:
100
+ detail = page.evaluate(
101
+ """
102
+ () => {
103
+ const norm = (value) => (value || '').toString().replace(/\\s+/g, ' ').trim();
104
+ const link = [...document.querySelectorAll('a[href]')].find((el) => {
105
+ let url;
106
+ try { url = new URL(el.getAttribute('href'), location.href); } catch (e) { return false; }
107
+ return url.protocol === 'https:' && url.hostname === 'journals.aps.org'
108
+ && url.pathname === '/auth/openathens/login' && url.searchParams.get('rt');
109
+ });
110
+ if (!link) return null;
111
+ return {
112
+ text: norm(link.innerText || link.textContent || '').slice(0, 200),
113
+ href: link.href || link.getAttribute('href') || ''
114
+ };
115
+ }
116
+ """
117
+ )
118
+ if not isinstance(detail, dict) or not detail.get("href"):
119
+ return False
120
+ open_page(page, str(detail["href"]), timeout_ms=30_000)
121
+ if result is not None:
122
+ d._event(result, "sso_entry_clicked", json.dumps(detail, ensure_ascii=False))
123
+ return True
124
+ except Exception as exc:
125
+ if result is not None:
126
+ d._event(result, "sso_entry_error", f"{type(exc).__name__}: {exc}")
127
+ return False
@@ -0,0 +1,13 @@
1
+ """On the Atypon platform (``platforms/atypon``): only its hosts are its own."""
2
+ from __future__ import annotations
3
+
4
+ from ..base import register
5
+ from ..platforms.atypon import AtyponAdapter
6
+
7
+
8
+ @register
9
+ class ASCEAdapter(AtyponAdapter):
10
+ """ASCE Library (ascelibrary.org), an Atypon site: the shared rules, nothing of its own (2026-11-02)."""
11
+
12
+ publisher = "asce"
13
+ site_hosts = frozenset({"ascelibrary.org", "www.ascelibrary.org"})