paper-search-cli 0.3.0 → 0.3.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 (314) hide show
  1. package/README.md +11 -9
  2. package/README.zh.md +11 -9
  3. package/dist/capabilities/body-snippet-search/handler.d.ts +9 -0
  4. package/dist/capabilities/body-snippet-search/handler.d.ts.map +1 -0
  5. package/dist/capabilities/body-snippet-search/handler.js +17 -0
  6. package/dist/capabilities/body-snippet-search/handler.js.map +1 -0
  7. package/dist/capabilities/body-snippet-search/index.d.ts +7 -0
  8. package/dist/capabilities/body-snippet-search/index.d.ts.map +1 -0
  9. package/dist/capabilities/body-snippet-search/index.js +6 -0
  10. package/dist/capabilities/body-snippet-search/index.js.map +1 -0
  11. package/dist/capabilities/body-snippet-search/schemas.d.ts +36 -0
  12. package/dist/capabilities/body-snippet-search/schemas.d.ts.map +1 -0
  13. package/dist/capabilities/body-snippet-search/schemas.js +16 -0
  14. package/dist/capabilities/body-snippet-search/schemas.js.map +1 -0
  15. package/dist/capabilities/body-snippet-search/service.d.ts +4 -0
  16. package/dist/capabilities/body-snippet-search/service.d.ts.map +1 -0
  17. package/dist/capabilities/body-snippet-search/service.js +4 -0
  18. package/dist/capabilities/body-snippet-search/service.js.map +1 -0
  19. package/dist/capabilities/body-snippet-search/tools.d.ts +187 -0
  20. package/dist/capabilities/body-snippet-search/tools.d.ts.map +1 -0
  21. package/dist/capabilities/body-snippet-search/tools.js +49 -0
  22. package/dist/capabilities/body-snippet-search/tools.js.map +1 -0
  23. package/dist/capabilities/body-snippet-search/types.d.ts +14 -0
  24. package/dist/capabilities/body-snippet-search/types.d.ts.map +1 -0
  25. package/dist/capabilities/body-snippet-search/types.js +2 -0
  26. package/dist/capabilities/body-snippet-search/types.js.map +1 -0
  27. package/dist/capabilities/citation-expansion/CitationService.d.ts +47 -0
  28. package/dist/capabilities/citation-expansion/CitationService.d.ts.map +1 -0
  29. package/dist/capabilities/citation-expansion/CitationService.js +243 -0
  30. package/dist/capabilities/citation-expansion/CitationService.js.map +1 -0
  31. package/dist/capabilities/citation-expansion/handler.d.ts +36 -0
  32. package/dist/capabilities/citation-expansion/handler.d.ts.map +1 -0
  33. package/dist/capabilities/citation-expansion/handler.js +44 -0
  34. package/dist/capabilities/citation-expansion/handler.js.map +1 -0
  35. package/dist/capabilities/citation-expansion/index.d.ts +6 -0
  36. package/dist/capabilities/citation-expansion/index.d.ts.map +1 -0
  37. package/dist/capabilities/citation-expansion/index.js +5 -0
  38. package/dist/capabilities/citation-expansion/index.js.map +1 -0
  39. package/dist/capabilities/citation-expansion/schemas.d.ts +28 -0
  40. package/dist/capabilities/citation-expansion/schemas.d.ts.map +1 -0
  41. package/dist/capabilities/citation-expansion/schemas.js +13 -0
  42. package/dist/capabilities/citation-expansion/schemas.js.map +1 -0
  43. package/dist/capabilities/citation-expansion/tools.d.ts +82 -0
  44. package/dist/capabilities/citation-expansion/tools.d.ts.map +1 -0
  45. package/dist/capabilities/citation-expansion/tools.js +48 -0
  46. package/dist/capabilities/citation-expansion/tools.js.map +1 -0
  47. package/dist/capabilities/citation-expansion/types.d.ts +22 -0
  48. package/dist/capabilities/citation-expansion/types.d.ts.map +1 -0
  49. package/dist/capabilities/citation-expansion/types.js +2 -0
  50. package/dist/capabilities/citation-expansion/types.js.map +1 -0
  51. package/dist/capabilities/journal-metrics/JournalMetricsService.d.ts +3 -0
  52. package/dist/capabilities/journal-metrics/JournalMetricsService.d.ts.map +1 -0
  53. package/dist/capabilities/journal-metrics/JournalMetricsService.js +142 -0
  54. package/dist/capabilities/journal-metrics/JournalMetricsService.js.map +1 -0
  55. package/dist/capabilities/journal-metrics/handler.d.ts +12 -0
  56. package/dist/capabilities/journal-metrics/handler.d.ts.map +1 -0
  57. package/dist/capabilities/journal-metrics/handler.js +38 -0
  58. package/dist/capabilities/journal-metrics/handler.js.map +1 -0
  59. package/dist/capabilities/journal-metrics/index.d.ts +6 -0
  60. package/dist/capabilities/journal-metrics/index.d.ts.map +1 -0
  61. package/dist/capabilities/journal-metrics/index.js +5 -0
  62. package/dist/capabilities/journal-metrics/index.js.map +1 -0
  63. package/dist/capabilities/journal-metrics/schemas.d.ts +28 -0
  64. package/dist/capabilities/journal-metrics/schemas.d.ts.map +1 -0
  65. package/dist/capabilities/journal-metrics/schemas.js +13 -0
  66. package/dist/capabilities/journal-metrics/schemas.js.map +1 -0
  67. package/dist/capabilities/journal-metrics/tools.d.ts +67 -0
  68. package/dist/capabilities/journal-metrics/tools.d.ts.map +1 -0
  69. package/dist/capabilities/journal-metrics/tools.js +27 -0
  70. package/dist/capabilities/journal-metrics/tools.js.map +1 -0
  71. package/dist/capabilities/journal-metrics/types.d.ts +36 -0
  72. package/dist/capabilities/journal-metrics/types.d.ts.map +1 -0
  73. package/dist/capabilities/journal-metrics/types.js +2 -0
  74. package/dist/capabilities/journal-metrics/types.js.map +1 -0
  75. package/dist/capabilities/metadata-search/MultiSourceSearchService.d.ts +9 -0
  76. package/dist/capabilities/metadata-search/MultiSourceSearchService.d.ts.map +1 -0
  77. package/dist/capabilities/metadata-search/MultiSourceSearchService.js +78 -0
  78. package/dist/capabilities/metadata-search/MultiSourceSearchService.js.map +1 -0
  79. package/dist/capabilities/metadata-search/handler.d.ts +23 -0
  80. package/dist/capabilities/metadata-search/handler.d.ts.map +1 -0
  81. package/dist/capabilities/metadata-search/handler.js +163 -0
  82. package/dist/capabilities/metadata-search/handler.js.map +1 -0
  83. package/dist/capabilities/metadata-search/index.d.ts +6 -0
  84. package/dist/capabilities/metadata-search/index.d.ts.map +1 -0
  85. package/dist/capabilities/metadata-search/index.js +5 -0
  86. package/dist/capabilities/metadata-search/index.js.map +1 -0
  87. package/dist/capabilities/metadata-search/schemas.d.ts +83 -0
  88. package/dist/capabilities/metadata-search/schemas.d.ts.map +1 -0
  89. package/dist/capabilities/metadata-search/schemas.js +81 -0
  90. package/dist/capabilities/metadata-search/schemas.js.map +1 -0
  91. package/dist/capabilities/metadata-search/tools.d.ts +178 -0
  92. package/dist/capabilities/metadata-search/tools.d.ts.map +1 -0
  93. package/dist/capabilities/metadata-search/tools.js +75 -0
  94. package/dist/capabilities/metadata-search/tools.js.map +1 -0
  95. package/dist/capabilities/metadata-search/types.d.ts +13 -0
  96. package/dist/capabilities/metadata-search/types.d.ts.map +1 -0
  97. package/dist/capabilities/metadata-search/types.js +2 -0
  98. package/dist/capabilities/metadata-search/types.js.map +1 -0
  99. package/dist/capabilities/pdf-discovery/DownloadTier.d.ts +22 -0
  100. package/dist/capabilities/pdf-discovery/DownloadTier.d.ts.map +1 -0
  101. package/dist/capabilities/pdf-discovery/DownloadTier.js +2 -0
  102. package/dist/capabilities/pdf-discovery/DownloadTier.js.map +1 -0
  103. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.d.ts +10 -0
  104. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.d.ts.map +1 -0
  105. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.js +53 -0
  106. package/dist/capabilities/pdf-discovery/OpenAccessFallbackService.js.map +1 -0
  107. package/dist/capabilities/pdf-discovery/handler.d.ts +19 -0
  108. package/dist/capabilities/pdf-discovery/handler.d.ts.map +1 -0
  109. package/dist/capabilities/pdf-discovery/handler.js +56 -0
  110. package/dist/capabilities/pdf-discovery/handler.js.map +1 -0
  111. package/dist/capabilities/pdf-discovery/index.d.ts +7 -0
  112. package/dist/capabilities/pdf-discovery/index.d.ts.map +1 -0
  113. package/dist/capabilities/pdf-discovery/index.js +5 -0
  114. package/dist/capabilities/pdf-discovery/index.js.map +1 -0
  115. package/dist/capabilities/pdf-discovery/schemas.d.ts +37 -0
  116. package/dist/capabilities/pdf-discovery/schemas.d.ts.map +1 -0
  117. package/dist/capabilities/pdf-discovery/schemas.js +22 -0
  118. package/dist/capabilities/pdf-discovery/schemas.js.map +1 -0
  119. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.d.ts +3 -0
  120. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.d.ts.map +1 -0
  121. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.js +27 -0
  122. package/dist/capabilities/pdf-discovery/tiers/directPdfUrl.js.map +1 -0
  123. package/dist/capabilities/pdf-discovery/tiers/primary.d.ts +3 -0
  124. package/dist/capabilities/pdf-discovery/tiers/primary.d.ts.map +1 -0
  125. package/dist/capabilities/pdf-discovery/tiers/primary.js +21 -0
  126. package/dist/capabilities/pdf-discovery/tiers/primary.js.map +1 -0
  127. package/dist/capabilities/pdf-discovery/tiers/repositories.d.ts +3 -0
  128. package/dist/capabilities/pdf-discovery/tiers/repositories.d.ts.map +1 -0
  129. package/dist/capabilities/pdf-discovery/tiers/repositories.js +35 -0
  130. package/dist/capabilities/pdf-discovery/tiers/repositories.js.map +1 -0
  131. package/dist/capabilities/pdf-discovery/tiers/scihub.d.ts +3 -0
  132. package/dist/capabilities/pdf-discovery/tiers/scihub.d.ts.map +1 -0
  133. package/dist/capabilities/pdf-discovery/tiers/scihub.js +21 -0
  134. package/dist/capabilities/pdf-discovery/tiers/scihub.js.map +1 -0
  135. package/dist/capabilities/pdf-discovery/tiers/unpaywall.d.ts +3 -0
  136. package/dist/capabilities/pdf-discovery/tiers/unpaywall.d.ts.map +1 -0
  137. package/dist/capabilities/pdf-discovery/tiers/unpaywall.js +29 -0
  138. package/dist/capabilities/pdf-discovery/tiers/unpaywall.js.map +1 -0
  139. package/dist/capabilities/pdf-discovery/tools.d.ts +114 -0
  140. package/dist/capabilities/pdf-discovery/tools.d.ts.map +1 -0
  141. package/dist/capabilities/pdf-discovery/tools.js +42 -0
  142. package/dist/capabilities/pdf-discovery/tools.js.map +1 -0
  143. package/dist/capabilities/pdf-discovery/types.d.ts +19 -0
  144. package/dist/capabilities/pdf-discovery/types.d.ts.map +1 -0
  145. package/dist/capabilities/pdf-discovery/types.js +2 -0
  146. package/dist/capabilities/pdf-discovery/types.js.map +1 -0
  147. package/dist/cli.js +10 -6
  148. package/dist/cli.js.map +1 -1
  149. package/dist/core/capabilityProfile.d.ts +1 -17
  150. package/dist/core/capabilityProfile.d.ts.map +1 -1
  151. package/dist/core/capabilityProfile.js +1 -152
  152. package/dist/core/capabilityProfile.js.map +1 -1
  153. package/dist/core/diagnostics.d.ts +1 -42
  154. package/dist/core/diagnostics.d.ts.map +1 -1
  155. package/dist/core/diagnostics.js +1 -585
  156. package/dist/core/diagnostics.js.map +1 -1
  157. package/dist/core/handleToolCall.d.ts +1 -0
  158. package/dist/core/handleToolCall.d.ts.map +1 -1
  159. package/dist/core/handleToolCall.js +265 -476
  160. package/dist/core/handleToolCall.js.map +1 -1
  161. package/dist/core/httpPolicies.d.ts +2 -0
  162. package/dist/core/httpPolicies.d.ts.map +1 -0
  163. package/dist/core/httpPolicies.js +2 -0
  164. package/dist/core/httpPolicies.js.map +1 -0
  165. package/dist/core/liveSmoke.d.ts +1 -41
  166. package/dist/core/liveSmoke.d.ts.map +1 -1
  167. package/dist/core/liveSmoke.js +1 -225
  168. package/dist/core/liveSmoke.js.map +1 -1
  169. package/dist/core/platformFactories.d.ts +2 -0
  170. package/dist/core/platformFactories.d.ts.map +1 -0
  171. package/dist/core/platformFactories.js +2 -0
  172. package/dist/core/platformFactories.js.map +1 -0
  173. package/dist/core/platformMetadata.d.ts +1 -27
  174. package/dist/core/platformMetadata.d.ts.map +1 -1
  175. package/dist/core/platformMetadata.js +1 -257
  176. package/dist/core/platformMetadata.js.map +1 -1
  177. package/dist/core/schemas.d.ts +11 -177
  178. package/dist/core/schemas.d.ts.map +1 -1
  179. package/dist/core/schemas.js +14 -107
  180. package/dist/core/schemas.js.map +1 -1
  181. package/dist/core/searchers.d.ts +24 -24
  182. package/dist/core/searchers.d.ts.map +1 -1
  183. package/dist/core/searchers.js +14 -79
  184. package/dist/core/searchers.js.map +1 -1
  185. package/dist/core/textReports.d.ts +1 -20
  186. package/dist/core/textReports.d.ts.map +1 -1
  187. package/dist/core/textReports.js +1 -84
  188. package/dist/core/textReports.js.map +1 -1
  189. package/dist/core/tools.d.ts.map +1 -1
  190. package/dist/core/tools.js +15 -183
  191. package/dist/core/tools.js.map +1 -1
  192. package/dist/infrastructure/cache/RequestCache.d.ts +26 -0
  193. package/dist/infrastructure/cache/RequestCache.d.ts.map +1 -0
  194. package/dist/infrastructure/cache/RequestCache.js +66 -0
  195. package/dist/infrastructure/cache/RequestCache.js.map +1 -0
  196. package/dist/infrastructure/http/ErrorHandler.d.ts +99 -0
  197. package/dist/infrastructure/http/ErrorHandler.d.ts.map +1 -0
  198. package/dist/infrastructure/http/ErrorHandler.js +266 -0
  199. package/dist/infrastructure/http/ErrorHandler.js.map +1 -0
  200. package/dist/infrastructure/http/HttpClient.d.ts +31 -0
  201. package/dist/infrastructure/http/HttpClient.d.ts.map +1 -0
  202. package/dist/infrastructure/http/HttpClient.js +50 -0
  203. package/dist/infrastructure/http/HttpClient.js.map +1 -0
  204. package/dist/infrastructure/pdf/PDFExtractor.d.ts +34 -0
  205. package/dist/infrastructure/pdf/PDFExtractor.d.ts.map +1 -0
  206. package/dist/infrastructure/pdf/PDFExtractor.js +130 -0
  207. package/dist/infrastructure/pdf/PDFExtractor.js.map +1 -0
  208. package/dist/infrastructure/pdf/PdfDownload.d.ts +7 -0
  209. package/dist/infrastructure/pdf/PdfDownload.d.ts.map +1 -0
  210. package/dist/infrastructure/pdf/PdfDownload.js +175 -0
  211. package/dist/infrastructure/pdf/PdfDownload.js.map +1 -0
  212. package/dist/infrastructure/rate-limit/RateLimiter.d.ts +50 -0
  213. package/dist/infrastructure/rate-limit/RateLimiter.d.ts.map +1 -0
  214. package/dist/infrastructure/rate-limit/RateLimiter.js +128 -0
  215. package/dist/infrastructure/rate-limit/RateLimiter.js.map +1 -0
  216. package/dist/infrastructure/security/SecurityUtils.d.ts +80 -0
  217. package/dist/infrastructure/security/SecurityUtils.d.ts.map +1 -0
  218. package/dist/infrastructure/security/SecurityUtils.js +357 -0
  219. package/dist/infrastructure/security/SecurityUtils.js.map +1 -0
  220. package/dist/management/capability-profile/index.d.ts +18 -0
  221. package/dist/management/capability-profile/index.d.ts.map +1 -0
  222. package/dist/management/capability-profile/index.js +167 -0
  223. package/dist/management/capability-profile/index.js.map +1 -0
  224. package/dist/management/config/index.d.ts +2 -0
  225. package/dist/management/config/index.d.ts.map +1 -0
  226. package/dist/management/config/index.js +2 -0
  227. package/dist/management/config/index.js.map +1 -0
  228. package/dist/management/diagnostics/index.d.ts +43 -0
  229. package/dist/management/diagnostics/index.d.ts.map +1 -0
  230. package/dist/management/diagnostics/index.js +586 -0
  231. package/dist/management/diagnostics/index.js.map +1 -0
  232. package/dist/management/reports/index.d.ts +21 -0
  233. package/dist/management/reports/index.d.ts.map +1 -0
  234. package/dist/management/reports/index.js +85 -0
  235. package/dist/management/reports/index.js.map +1 -0
  236. package/dist/management/skills/index.d.ts +2 -0
  237. package/dist/management/skills/index.d.ts.map +1 -0
  238. package/dist/management/skills/index.js +2 -0
  239. package/dist/management/skills/index.js.map +1 -0
  240. package/dist/management/smoke/index.d.ts +42 -0
  241. package/dist/management/smoke/index.d.ts.map +1 -0
  242. package/dist/management/smoke/index.js +226 -0
  243. package/dist/management/smoke/index.js.map +1 -0
  244. package/dist/platforms/BioRxivSearcher.d.ts.map +1 -1
  245. package/dist/platforms/BioRxivSearcher.js +40 -21
  246. package/dist/platforms/BioRxivSearcher.js.map +1 -1
  247. package/dist/platforms/GoogleScholarSearcher.d.ts.map +1 -1
  248. package/dist/platforms/GoogleScholarSearcher.js +3 -2
  249. package/dist/platforms/GoogleScholarSearcher.js.map +1 -1
  250. package/dist/registry/aliases.d.ts +2 -0
  251. package/dist/registry/aliases.d.ts.map +1 -0
  252. package/dist/registry/aliases.js +2 -0
  253. package/dist/registry/aliases.js.map +1 -0
  254. package/dist/registry/httpPolicies.d.ts +3 -0
  255. package/dist/registry/httpPolicies.d.ts.map +1 -0
  256. package/dist/registry/httpPolicies.js +17 -0
  257. package/dist/registry/httpPolicies.js.map +1 -0
  258. package/dist/registry/platformFactories.d.ts +8 -0
  259. package/dist/registry/platformFactories.d.ts.map +1 -0
  260. package/dist/registry/platformFactories.js +55 -0
  261. package/dist/registry/platformFactories.js.map +1 -0
  262. package/dist/registry/platformMetadata.d.ts +39 -0
  263. package/dist/registry/platformMetadata.d.ts.map +1 -0
  264. package/dist/registry/platformMetadata.js +321 -0
  265. package/dist/registry/platformMetadata.js.map +1 -0
  266. package/dist/services/CitationService.d.ts +2 -65
  267. package/dist/services/CitationService.d.ts.map +1 -1
  268. package/dist/services/CitationService.js +1 -236
  269. package/dist/services/CitationService.js.map +1 -1
  270. package/dist/services/JournalMetricsService.d.ts +2 -37
  271. package/dist/services/JournalMetricsService.d.ts.map +1 -1
  272. package/dist/services/JournalMetricsService.js +1 -141
  273. package/dist/services/JournalMetricsService.js.map +1 -1
  274. package/dist/services/MultiSourceSearchService.d.ts +2 -18
  275. package/dist/services/MultiSourceSearchService.d.ts.map +1 -1
  276. package/dist/services/MultiSourceSearchService.js +1 -77
  277. package/dist/services/MultiSourceSearchService.js.map +1 -1
  278. package/dist/services/OpenAccessFallbackService.d.ts +3 -20
  279. package/dist/services/OpenAccessFallbackService.d.ts.map +1 -1
  280. package/dist/services/OpenAccessFallbackService.js +1 -123
  281. package/dist/services/OpenAccessFallbackService.js.map +1 -1
  282. package/dist/utils/ErrorHandler.d.ts +2 -98
  283. package/dist/utils/ErrorHandler.d.ts.map +1 -1
  284. package/dist/utils/ErrorHandler.js +2 -265
  285. package/dist/utils/ErrorHandler.js.map +1 -1
  286. package/dist/utils/HttpClient.d.ts +1 -5
  287. package/dist/utils/HttpClient.d.ts.map +1 -1
  288. package/dist/utils/HttpClient.js +1 -29
  289. package/dist/utils/HttpClient.js.map +1 -1
  290. package/dist/utils/PDFExtractor.d.ts +2 -33
  291. package/dist/utils/PDFExtractor.d.ts.map +1 -1
  292. package/dist/utils/PDFExtractor.js +2 -129
  293. package/dist/utils/PDFExtractor.js.map +1 -1
  294. package/dist/utils/PdfDownload.d.ts +1 -6
  295. package/dist/utils/PdfDownload.d.ts.map +1 -1
  296. package/dist/utils/PdfDownload.js +1 -141
  297. package/dist/utils/PdfDownload.js.map +1 -1
  298. package/dist/utils/RateLimiter.d.ts +1 -49
  299. package/dist/utils/RateLimiter.d.ts.map +1 -1
  300. package/dist/utils/RateLimiter.js +1 -120
  301. package/dist/utils/RateLimiter.js.map +1 -1
  302. package/dist/utils/RequestCache.d.ts +2 -25
  303. package/dist/utils/RequestCache.d.ts.map +1 -1
  304. package/dist/utils/RequestCache.js +2 -65
  305. package/dist/utils/RequestCache.js.map +1 -1
  306. package/dist/utils/SecurityUtils.d.ts +2 -79
  307. package/dist/utils/SecurityUtils.d.ts.map +1 -1
  308. package/dist/utils/SecurityUtils.js +2 -356
  309. package/dist/utils/SecurityUtils.js.map +1 -1
  310. package/package.json +1 -1
  311. package/skills/paper-search/SKILL.md +4 -2
  312. package/skills/paper-search/references/capability-routing.md +15 -2
  313. package/skills/paper-search/references/cli-contract.md +19 -0
  314. package/skills/paper-search/references/management-layer.md +1 -0
package/README.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  [简体中文](README.zh.md) | English
4
4
 
5
- Paper Search CLI is an agent-facing Skill + CLI package built on a standalone Node.js command line tool for academic literature work. It gives AI agents, terminal users, and scripts one reproducible command layer with agent-friendly JSON output for literature metadata search, journal metrics lookup, PDF discovery/download, and paper body snippet search.
5
+ Paper Search CLI is an agent-facing Skill + CLI package built on a standalone Node.js command line tool for academic literature work. It gives AI agents, terminal users, and scripts one reproducible command layer with agent-friendly JSON output for literature metadata search, citation expansion, journal metrics lookup, PDF discovery/download, and paper body snippet search.
6
6
 
7
7
  ![Node.js](https://img.shields.io/badge/node.js->=18.0.0-green.svg)
8
8
  ![TypeScript](https://img.shields.io/badge/typescript-^5.5.3-blue.svg)
9
9
  ![License](https://img.shields.io/badge/license-MIT-blue.svg)
10
10
  ![Platforms](https://img.shields.io/badge/platforms-25-brightgreen.svg)
11
- ![Version](https://img.shields.io/badge/version-0.3.0-blue.svg)
11
+ ![Version](https://img.shields.io/badge/version-0.3.2-blue.svg)
12
12
  [![LinuxDo](https://img.shields.io/badge/LinuxDo-community-1f6feb)](https://linux.do)
13
13
 
14
14
  [Quick Start](#quick-start) | [Architecture](#architecture) | [Configuration](#configuration) | [Agent Skill](#agent-skill) | [Supported Platforms](#supported-platforms) | [Commands](#commands) | [Troubleshooting](#troubleshooting)
@@ -18,6 +18,7 @@ Paper Search CLI is an agent-facing Skill + CLI package built on a standalone No
18
18
  | Workflow | Primary commands | What it returns |
19
19
  | --- | --- | --- |
20
20
  | Literature metadata search | `paper-search search`, `paper-search run search_*` | Paper title, authors, year, journal, DOI, PMID/PMCID, arXiv ID, URL, abstract, and source metadata |
21
+ | Citation expansion | `paper-search run get_paper_citations`, `paper-search run get_paper_references` | Citing papers and cited references for a known Semantic Scholar paper ID, DOI, or arXiv ID |
21
22
  | Journal metrics lookup | `paper-search journal-metrics`, `paper-search run query_journal_metrics` | Impact factor, 5-year IF, JCR/SSCI quartile, CAS zone, JCI, ESI, warning flags, and rank fields |
22
23
  | PDF discovery and download | `paper-search download`, `paper-search run download_with_fallback` | Verified PDF download paths through native sources, open access, configured entitlement, and Sci-Hub fallback when enabled |
23
24
  | Body snippet search | `paper-search run search_semantic_snippets` | Semantic Scholar Open Access body snippets for methods, parameters, and wording clues |
@@ -28,11 +29,11 @@ Paper Search CLI is an agent-facing Skill + CLI package built on a standalone No
28
29
 
29
30
  | Layer | Responsibility |
30
31
  | --- | --- |
31
- | CLI package body | Executes literature search, journal metrics lookup, PDF discovery/download, body snippet search, and stable JSON output |
32
+ | CLI package body | Executes literature search, citation expansion, journal metrics lookup, PDF discovery/download, body snippet search, and stable JSON output |
32
33
  | Bundled Skill | Ships `skills/paper-search` with agent routing rules and focused references; it does not store API keys, cookies, or account credentials |
33
- | Friendly Management Layer | Provides `doctor`, `smoke`, `skills`, `config`, and `tools` around the four main capabilities: `metadata_search`, `journal_metrics`, `pdf_discovery`, and `body_snippet_search`. `doctor` health reports include masked configuration, Capability Profile, platform/source status, and missing or degraded items; `smoke` checks command wiring and live readiness; `skills` syncs the bundled Skill |
34
+ | Friendly Management Layer | Provides `doctor`, `smoke`, `skills`, `config`, and `tools` around the five main capabilities: `metadata_search`, `citation_expansion`, `journal_metrics`, `pdf_discovery`, and `body_snippet_search`. `doctor` health reports include masked configuration, Capability Profile, platform/source status, and missing or degraded items; `smoke` checks command wiring and live readiness; `skills` syncs the bundled Skill |
34
35
 
35
- The four main capabilities are executed by the CLI package body and reported by the management layer. The Capability Profile also reports `entitled_access` so users can see whether publisher API keys, database keys, TDM tokens, or institutional entitlements are configured. Missing or degraded configuration for one workflow does not make unrelated workflows unavailable.
36
+ The five main capabilities are executed by the CLI package body and reported by the management layer. The Capability Profile also reports `entitled_access` so users can see whether publisher API keys, database keys, TDM tokens, or institutional entitlements are configured. Missing or degraded configuration for one workflow does not make unrelated workflows unavailable.
36
37
 
37
38
  ## Quick Start
38
39
 
@@ -44,13 +45,14 @@ paper-search setup
44
45
  paper-search doctor --pretty
45
46
  ```
46
47
 
47
- Try the four main workflows:
48
+ Try the five main workflows:
48
49
 
49
50
  ```bash
50
51
  paper-search search "machine learning clinical prediction" --platform crossref --max-results 3 --pretty
52
+ paper-search run get_paper_citations --arg doi="10.1038/nature12373" --arg limit=5 --pretty
51
53
  paper-search journal-metrics "Nature" "BMJ" --pretty
52
54
  paper-search download 10.48550/arxiv.1201.0490 --platform arxiv --save-path ./downloads
53
- paper-search run search_semantic_snippets --arg query="propensity score matching" --arg maxResults=3 --pretty
55
+ paper-search run search_semantic_snippets --arg query="propensity score matching" --arg limit=3 --pretty
54
56
  ```
55
57
 
56
58
  Useful checks:
@@ -87,7 +89,7 @@ The quick group table helps choose a source family. The capability matrix below
87
89
  | --- | --- | --- | --- | --- | --- | --- |
88
90
  | Crossref | ✅ Yes | ❌ No | ❌ No | ✅ Yes | ❌ None | Default broad metadata source |
89
91
  | OpenAlex | ✅ Yes | 🟡 Conditional | ❌ No | ✅ Yes | ❌ None | Free metadata; OA links can help PDF fallback |
90
- | Semantic Scholar | ✅ Yes | 🟡 Conditional | ✅ Body snippets | ✅ Yes | 🟡 Optional; snippets require `SEMANTIC_SCHOLAR_API_KEY` | Good for AI/CS and body snippet clues |
92
+ | Semantic Scholar | ✅ Yes | 🟡 Conditional | ✅ Body snippets | ✅ Yes | 🟡 Optional; snippets require `SEMANTIC_SCHOLAR_API_KEY` | Good for AI/CS, citation expansion, and body snippet clues |
91
93
  | Google Scholar | ✅ Yes | ❌ No | ❌ No | ✅ Yes | ❌ None | Broad discovery through page parsing |
92
94
 
93
95
  #### Journal Metrics
@@ -205,7 +207,7 @@ Useful key dashboards:
205
207
 
206
208
  ## Agent Skill
207
209
 
208
- The npm package ships a bundled agent Skill at `skills/paper-search/SKILL.md`. Terminal users can use the CLI directly; AI agent workflows should install or sync the Skill so the agent can route the four main workflows correctly.
210
+ The npm package ships a bundled agent Skill at `skills/paper-search/SKILL.md`. Terminal users can use the CLI directly; AI agent workflows should install or sync the Skill so the agent can route the five main workflows correctly.
209
211
 
210
212
  ```bash
211
213
  paper-search setup --install-skills agents
package/README.zh.md CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  简体中文 | [English](README.md)
4
4
 
5
- Paper Search CLI 是一个面向 AI agent 的 Skill + CLI 包,基于独立的 Node.js 命令行工具构建,用于学术文献工作。它为 AI agent、终端用户和脚本提供一个可复现的命令层,并通过 agent 友好的 JSON 输出覆盖文献元数据检索、期刊指标检索、PDF 获取/下载和论文正文片段检索。
5
+ Paper Search CLI 是一个面向 AI agent 的 Skill + CLI 包,基于独立的 Node.js 命令行工具构建,用于学术文献工作。它为 AI agent、终端用户和脚本提供一个可复现的命令层,并通过 agent 友好的 JSON 输出覆盖文献元数据检索、施引/参考文献扩展、期刊指标检索、PDF 获取/下载和论文正文片段检索。
6
6
 
7
7
  ![Node.js](https://img.shields.io/badge/node.js->=18.0.0-green.svg)
8
8
  ![TypeScript](https://img.shields.io/badge/typescript-^5.5.3-blue.svg)
9
9
  ![License](https://img.shields.io/badge/license-MIT-blue.svg)
10
10
  ![Platforms](https://img.shields.io/badge/platforms-25-brightgreen.svg)
11
- ![Version](https://img.shields.io/badge/version-0.3.0-blue.svg)
11
+ ![Version](https://img.shields.io/badge/version-0.3.2-blue.svg)
12
12
  [![LinuxDo](https://img.shields.io/badge/LinuxDo-community-1f6feb)](https://linux.do)
13
13
 
14
14
  [快速开始](#快速开始) | [架构说明](#架构说明) | [配置](#配置) | [Agent Skill](#agent-skill) | [支持平台](#支持平台) | [命令](#命令) | [排障](#排障)
@@ -18,6 +18,7 @@ Paper Search CLI 是一个面向 AI agent 的 Skill + CLI 包,基于独立的
18
18
  | 功能 | 主要命令 | 返回内容 |
19
19
  | --- | --- | --- |
20
20
  | 文献元数据检索 | `paper-search search`, `paper-search run search_*` | 题名、作者、年份、期刊、DOI、PMID/PMCID、arXiv ID、URL、摘要和来源元数据 |
21
+ | 引文扩展 | `paper-search run get_paper_citations`, `paper-search run get_paper_references` | 已知 Semantic Scholar paper ID、DOI 或 arXiv ID 对应论文的施引文献和参考文献 |
21
22
  | 期刊指标检索 | `paper-search journal-metrics`, `paper-search run query_journal_metrics` | 影响因子、5 年 IF、JCR/SSCI 分区、中科院分区、JCI、ESI、预警和等级字段 |
22
23
  | PDF 获取和下载 | `paper-search download`, `paper-search run download_with_fallback` | 通过原生来源、开放获取、已配置权限来源和启用时的 Sci-Hub fallback 获取 PDF |
23
24
  | 正文片段检索 | `paper-search run search_semantic_snippets` | Semantic Scholar Open Access 正文片段,用于查方法、参数和写法线索 |
@@ -28,11 +29,11 @@ Paper Search CLI 是一个面向 AI agent 的 Skill + CLI 包,基于独立的
28
29
 
29
30
  | 层 | 负责什么 |
30
31
  | --- | --- |
31
- | CLI 本体 | 执行文献检索、期刊指标检索、PDF 获取/下载、正文片段检索和稳定 JSON 输出 |
32
+ | CLI 本体 | 执行文献检索、引文扩展、期刊指标检索、PDF 获取/下载、正文片段检索和稳定 JSON 输出 |
32
33
  | Bundled Skill | 随包发布 `skills/paper-search`,提供 agent 路由规则和 focused references;不保存密钥、cookie 或账号信息 |
33
- | Friendly Management Layer | 围绕四个主要能力 `metadata_search`、`journal_metrics`、`pdf_discovery`、`body_snippet_search` 提供 `doctor`、`smoke`、`skills`、`config`、`tools`。`doctor` 健康报告包含脱敏配置、Capability Profile、平台/来源状态、缺失项和降级项;`smoke` 检查命令入口连通性和 live 可用性;`skills` 负责同步随包发布的 Skill |
34
+ | Friendly Management Layer | 围绕五个主要能力 `metadata_search`、`citation_expansion`、`journal_metrics`、`pdf_discovery`、`body_snippet_search` 提供 `doctor`、`smoke`、`skills`、`config`、`tools`。`doctor` 健康报告包含脱敏配置、Capability Profile、平台/来源状态、缺失项和降级项;`smoke` 检查命令入口连通性和 live 可用性;`skills` 负责同步随包发布的 Skill |
34
35
 
35
- 四个主要能力由 CLI 本体执行,由管理层报告和检查。Capability Profile 也会报告 `entitled_access`,让用户看到出版商 API key、数据库 key、TDM token 或机构权限是否已配置。某一个能力缺少配置或降级,不会导致其他独立能力不可用。
36
+ 五个主要能力由 CLI 本体执行,由管理层报告和检查。Capability Profile 也会报告 `entitled_access`,让用户看到出版商 API key、数据库 key、TDM token 或机构权限是否已配置。某一个能力缺少配置或降级,不会导致其他独立能力不可用。
36
37
 
37
38
  ## 快速开始
38
39
 
@@ -44,13 +45,14 @@ paper-search setup
44
45
  paper-search doctor --pretty
45
46
  ```
46
47
 
47
- 尝试四个主要功能:
48
+ 尝试五个主要功能:
48
49
 
49
50
  ```bash
50
51
  paper-search search "machine learning clinical prediction" --platform crossref --max-results 3 --pretty
52
+ paper-search run get_paper_citations --arg doi="10.1038/nature12373" --arg limit=5 --pretty
51
53
  paper-search journal-metrics "Nature" "BMJ" --pretty
52
54
  paper-search download 10.48550/arxiv.1201.0490 --platform arxiv --save-path ./downloads
53
- paper-search run search_semantic_snippets --arg query="propensity score matching" --arg maxResults=3 --pretty
55
+ paper-search run search_semantic_snippets --arg query="propensity score matching" --arg limit=3 --pretty
54
56
  ```
55
57
 
56
58
  常用检查:
@@ -87,7 +89,7 @@ paper-search skills status --pretty
87
89
  | --- | --- | --- | --- | --- | --- | --- |
88
90
  | Crossref | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ✅ 支持 | ❌ 不需要 | 默认广覆盖元数据来源 |
89
91
  | OpenAlex | ✅ 支持 | 🟡 条件支持 | ❌ 不支持 | ✅ 支持 | ❌ 不需要 | 免费元数据;记录含 OA 链接时可帮助 PDF fallback |
90
- | Semantic Scholar | ✅ 支持 | 🟡 条件支持 | ✅ 正文片段 | ✅ 支持 | 🟡 可选;正文片段需要 `SEMANTIC_SCHOLAR_API_KEY` | 适合 AI/CS 和正文片段线索 |
92
+ | Semantic Scholar | ✅ 支持 | 🟡 条件支持 | ✅ 正文片段 | ✅ 支持 | 🟡 可选;正文片段需要 `SEMANTIC_SCHOLAR_API_KEY` | 适合 AI/CS、引文扩展和正文片段线索 |
91
93
  | Google Scholar | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ✅ 支持 | ❌ 不需要 | 基于页面解析的广覆盖发现 |
92
94
 
93
95
  #### 期刊指标
@@ -205,7 +207,7 @@ paper-search doctor --pretty
205
207
 
206
208
  ## Agent Skill
207
209
 
208
- npm 包会随包发布 agent Skill,位置是 `skills/paper-search/SKILL.md`。终端用户可以只用 CLI;AI agent 工作流应安装或同步 Skill,让 agent 正确路由四个主要功能。
210
+ npm 包会随包发布 agent Skill,位置是 `skills/paper-search/SKILL.md`。终端用户可以只用 CLI;AI agent 工作流应安装或同步 Skill,让 agent 正确路由五个主要功能。
209
211
 
210
212
  ```bash
211
213
  paper-search setup --install-skills agents
@@ -0,0 +1,9 @@
1
+ import type { Searchers } from '../../core/searchers.js';
2
+ import type { SemanticSnippetSearchArgs } from './types.js';
3
+ export declare function handleSemanticSnippets(args: SemanticSnippetSearchArgs, searchers: Searchers): Promise<{
4
+ content: {
5
+ type: "text";
6
+ text: string;
7
+ }[];
8
+ }>;
9
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAa5D,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,yBAAyB,EAAE,SAAS,EAAE,SAAS;;;;;GAWjG"}
@@ -0,0 +1,17 @@
1
+ import { searchBodySnippets } from './service.js';
2
+ function jsonTextResponse(text) {
3
+ return {
4
+ content: [
5
+ {
6
+ type: 'text',
7
+ text
8
+ }
9
+ ]
10
+ };
11
+ }
12
+ export async function handleSemanticSnippets(args, searchers) {
13
+ const results = await searchBodySnippets(searchers, args);
14
+ const bodyCount = results.filter(result => result.snippet.snippetKind === 'body').length;
15
+ return jsonTextResponse(`Found ${results.length} Semantic Scholar snippet(s), including ${bodyCount} body snippet(s).\n\n${JSON.stringify(results, null, 2)}`);
16
+ }
17
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI;aACL;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAA+B,EAAE,SAAoB;IAChG,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAEzF,OAAO,gBAAgB,CACrB,SAAS,OAAO,CAAC,MAAM,2CAA2C,SAAS,wBAAwB,IAAI,CAAC,SAAS,CAC/G,OAAO,EACP,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { SemanticScholarSearcher } from '../../platforms/SemanticScholarSearcher.js';
2
+ export { handleSemanticSnippets } from './handler.js';
3
+ export { SearchSemanticSnippetsSchema } from './schemas.js';
4
+ export { searchBodySnippets } from './service.js';
5
+ export { BODY_SNIPPET_SEARCH_TOOLS, SEARCH_SEMANTIC_SNIPPETS_TOOL } from './tools.js';
6
+ export type { SemanticSnippetResult, SemanticSnippetSearchArgs } from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEtF,YAAY,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { SemanticScholarSearcher } from '../../platforms/SemanticScholarSearcher.js';
2
+ export { handleSemanticSnippets } from './handler.js';
3
+ export { SearchSemanticSnippetsSchema } from './schemas.js';
4
+ export { searchBodySnippets } from './service.js';
5
+ export { BODY_SNIPPET_SEARCH_TOOLS, SEARCH_SEMANTIC_SNIPPETS_TOOL } from './tools.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ export declare const SearchSemanticSnippetsSchema: z.ZodObject<{
3
+ query: z.ZodString;
4
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
5
+ year: z.ZodOptional<z.ZodString>;
6
+ fieldsOfStudy: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
7
+ paperIds: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
8
+ authors: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
9
+ venue: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
10
+ minCitationCount: z.ZodOptional<z.ZodNumber>;
11
+ publicationDateOrYear: z.ZodOptional<z.ZodString>;
12
+ fields: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ query: string;
15
+ limit: number;
16
+ authors?: string | string[] | undefined;
17
+ year?: string | undefined;
18
+ venue?: string | string[] | undefined;
19
+ fieldsOfStudy?: string | string[] | undefined;
20
+ fields?: string | string[] | undefined;
21
+ paperIds?: string | string[] | undefined;
22
+ minCitationCount?: number | undefined;
23
+ publicationDateOrYear?: string | undefined;
24
+ }, {
25
+ query: string;
26
+ authors?: string | string[] | undefined;
27
+ year?: string | undefined;
28
+ venue?: string | string[] | undefined;
29
+ fieldsOfStudy?: string | string[] | undefined;
30
+ limit?: number | undefined;
31
+ fields?: string | string[] | undefined;
32
+ paperIds?: string | string[] | undefined;
33
+ minCitationCount?: number | undefined;
34
+ publicationDateOrYear?: string | undefined;
35
+ }>;
36
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa/B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export const SearchSemanticSnippetsSchema = z
3
+ .object({
4
+ query: z.string().min(1),
5
+ limit: z.number().int().min(1).max(1000).optional().default(5),
6
+ year: z.string().optional(),
7
+ fieldsOfStudy: z.union([z.string(), z.array(z.string())]).optional(),
8
+ paperIds: z.union([z.string(), z.array(z.string())]).optional(),
9
+ authors: z.union([z.string(), z.array(z.string())]).optional(),
10
+ venue: z.union([z.string(), z.array(z.string())]).optional(),
11
+ minCitationCount: z.number().int().min(0).optional(),
12
+ publicationDateOrYear: z.string().optional(),
13
+ fields: z.union([z.string(), z.array(z.string())]).optional()
14
+ })
15
+ .strip();
16
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC;KAC1C,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC/D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9D,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC9D,CAAC;KACD,KAAK,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Searchers } from '../../core/searchers.js';
2
+ import type { SemanticSnippetResult, SemanticSnippetSearchArgs } from './types.js';
3
+ export declare function searchBodySnippets(searchers: Searchers, args: SemanticSnippetSearchArgs): Promise<SemanticSnippetResult[]>;
4
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEnF,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAElC"}
@@ -0,0 +1,4 @@
1
+ export async function searchBodySnippets(searchers, args) {
2
+ return searchers.semantic.searchSnippets(args);
3
+ }
4
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/service.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAoB,EACpB,IAA+B;IAE/B,OAAO,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,187 @@
1
+ export declare const SEARCH_SEMANTIC_SNIPPETS_TOOL: {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {
5
+ type: string;
6
+ properties: {
7
+ query: {
8
+ type: string;
9
+ description: string;
10
+ };
11
+ limit: {
12
+ type: string;
13
+ minimum: number;
14
+ maximum: number;
15
+ description: string;
16
+ };
17
+ year: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ fieldsOfStudy: {
22
+ anyOf: ({
23
+ type: string;
24
+ items?: undefined;
25
+ } | {
26
+ type: string;
27
+ items: {
28
+ type: string;
29
+ };
30
+ })[];
31
+ description: string;
32
+ };
33
+ paperIds: {
34
+ anyOf: ({
35
+ type: string;
36
+ items?: undefined;
37
+ } | {
38
+ type: string;
39
+ items: {
40
+ type: string;
41
+ };
42
+ })[];
43
+ description: string;
44
+ };
45
+ authors: {
46
+ anyOf: ({
47
+ type: string;
48
+ items?: undefined;
49
+ } | {
50
+ type: string;
51
+ items: {
52
+ type: string;
53
+ };
54
+ })[];
55
+ description: string;
56
+ };
57
+ venue: {
58
+ anyOf: ({
59
+ type: string;
60
+ items?: undefined;
61
+ } | {
62
+ type: string;
63
+ items: {
64
+ type: string;
65
+ };
66
+ })[];
67
+ description: string;
68
+ };
69
+ minCitationCount: {
70
+ type: string;
71
+ minimum: number;
72
+ description: string;
73
+ };
74
+ publicationDateOrYear: {
75
+ type: string;
76
+ description: string;
77
+ };
78
+ fields: {
79
+ anyOf: ({
80
+ type: string;
81
+ items?: undefined;
82
+ } | {
83
+ type: string;
84
+ items: {
85
+ type: string;
86
+ };
87
+ })[];
88
+ description: string;
89
+ };
90
+ };
91
+ required: string[];
92
+ };
93
+ };
94
+ export declare const BODY_SNIPPET_SEARCH_TOOLS: {
95
+ name: string;
96
+ description: string;
97
+ inputSchema: {
98
+ type: string;
99
+ properties: {
100
+ query: {
101
+ type: string;
102
+ description: string;
103
+ };
104
+ limit: {
105
+ type: string;
106
+ minimum: number;
107
+ maximum: number;
108
+ description: string;
109
+ };
110
+ year: {
111
+ type: string;
112
+ description: string;
113
+ };
114
+ fieldsOfStudy: {
115
+ anyOf: ({
116
+ type: string;
117
+ items?: undefined;
118
+ } | {
119
+ type: string;
120
+ items: {
121
+ type: string;
122
+ };
123
+ })[];
124
+ description: string;
125
+ };
126
+ paperIds: {
127
+ anyOf: ({
128
+ type: string;
129
+ items?: undefined;
130
+ } | {
131
+ type: string;
132
+ items: {
133
+ type: string;
134
+ };
135
+ })[];
136
+ description: string;
137
+ };
138
+ authors: {
139
+ anyOf: ({
140
+ type: string;
141
+ items?: undefined;
142
+ } | {
143
+ type: string;
144
+ items: {
145
+ type: string;
146
+ };
147
+ })[];
148
+ description: string;
149
+ };
150
+ venue: {
151
+ anyOf: ({
152
+ type: string;
153
+ items?: undefined;
154
+ } | {
155
+ type: string;
156
+ items: {
157
+ type: string;
158
+ };
159
+ })[];
160
+ description: string;
161
+ };
162
+ minCitationCount: {
163
+ type: string;
164
+ minimum: number;
165
+ description: string;
166
+ };
167
+ publicationDateOrYear: {
168
+ type: string;
169
+ description: string;
170
+ };
171
+ fields: {
172
+ anyOf: ({
173
+ type: string;
174
+ items?: undefined;
175
+ } | {
176
+ type: string;
177
+ items: {
178
+ type: string;
179
+ };
180
+ })[];
181
+ description: string;
182
+ };
183
+ };
184
+ required: string[];
185
+ };
186
+ }[];
187
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/tools.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CzC,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAkC,CAAC"}
@@ -0,0 +1,49 @@
1
+ export const SEARCH_SEMANTIC_SNIPPETS_TOOL = {
2
+ name: 'search_semantic_snippets',
3
+ description: 'Search Semantic Scholar Open Access snippet index for text excerpts from titles, abstracts, and body text. Requires SEMANTIC_SCHOLAR_API_KEY.',
4
+ inputSchema: {
5
+ type: 'object',
6
+ properties: {
7
+ query: { type: 'string', description: 'Natural-language query for text snippets' },
8
+ limit: {
9
+ type: 'number',
10
+ minimum: 1,
11
+ maximum: 1000,
12
+ description: 'Maximum number of snippet results to return. Default: 5'
13
+ },
14
+ year: { type: 'string', description: 'Publication year filter, e.g. "2020-2024"' },
15
+ fieldsOfStudy: {
16
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
17
+ description: 'Field-of-study filter, e.g. "Medicine" or ["Medicine","Biology"]'
18
+ },
19
+ paperIds: {
20
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
21
+ description: 'Optional paper IDs to restrict results to, comma-separated or array'
22
+ },
23
+ authors: {
24
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
25
+ description: 'Optional author-name filter, comma-separated or array'
26
+ },
27
+ venue: {
28
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
29
+ description: 'Optional venue filter, comma-separated or array'
30
+ },
31
+ minCitationCount: {
32
+ type: 'number',
33
+ minimum: 0,
34
+ description: 'Only return snippets from papers with at least this many citations'
35
+ },
36
+ publicationDateOrYear: {
37
+ type: 'string',
38
+ description: 'Publication date/year range, e.g. "2020-01-01:2024-12-31"'
39
+ },
40
+ fields: {
41
+ anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' } }],
42
+ description: 'Optional Semantic Scholar snippet fields to return'
43
+ }
44
+ },
45
+ required: ['query']
46
+ }
47
+ };
48
+ export const BODY_SNIPPET_SEARCH_TOOLS = [SEARCH_SEMANTIC_SNIPPETS_TOOL];
49
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/tools.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,IAAI,EAAE,0BAA0B;IAChC,WAAW,EACT,+IAA+I;IACjJ,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;YAClF,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,yDAAyD;aACvE;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YAClF,aAAa,EAAE;gBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACzE,WAAW,EAAE,kEAAkE;aAChF;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACzE,WAAW,EAAE,qEAAqE;aACnF;YACD,OAAO,EAAE;gBACP,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACzE,WAAW,EAAE,uDAAuD;aACrE;YACD,KAAK,EAAE;gBACL,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACzE,WAAW,EAAE,iDAAiD;aAC/D;YACD,gBAAgB,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,CAAC;gBACV,WAAW,EAAE,oEAAoE;aAClF;YACD,qBAAqB,EAAE;gBACrB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2DAA2D;aACzE;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACzE,WAAW,EAAE,oDAAoD;aAClE;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,6BAA6B,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type { SemanticSnippetResult } from '../../platforms/SemanticScholarSearcher.js';
2
+ export interface SemanticSnippetSearchArgs {
3
+ query: string;
4
+ limit?: number;
5
+ year?: string;
6
+ fieldsOfStudy?: string | string[];
7
+ paperIds?: string | string[];
8
+ authors?: string | string[];
9
+ venue?: string | string[];
10
+ minCitationCount?: number;
11
+ publicationDateOrYear?: string;
12
+ fields?: string | string[];
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAExF,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/capabilities/body-snippet-search/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import type { BatchCitationRequest, CitationData } from './types.js';
2
+ export type { BatchCitationRequest, CitationData } from './types.js';
3
+ export declare class CitationService {
4
+ private client;
5
+ private cache;
6
+ private rateLimiter;
7
+ private apiKey?;
8
+ constructor(apiKey?: string);
9
+ /**
10
+ * Get citation data for a single paper by ID
11
+ */
12
+ getCitationData(paperId: string, forceRefresh?: boolean): Promise<CitationData | null>;
13
+ /**
14
+ * Get citation data by DOI
15
+ */
16
+ getCitationDataByDoi(doi: string, forceRefresh?: boolean): Promise<CitationData | null>;
17
+ /**
18
+ * Get citation data by arXiv ID
19
+ */
20
+ getCitationDataByArxiv(arxivId: string, forceRefresh?: boolean): Promise<CitationData | null>;
21
+ /**
22
+ * Batch lookup citations for multiple papers
23
+ */
24
+ batchLookup(requests: BatchCitationRequest[]): Promise<Map<string, CitationData | null>>;
25
+ /**
26
+ * Get references for a paper
27
+ */
28
+ getReferences(paperId: string, limit?: number): Promise<CitationData[]>;
29
+ /**
30
+ * Get citations for a paper
31
+ */
32
+ getCitations(paperId: string, limit?: number): Promise<CitationData[]>;
33
+ /**
34
+ * Parse Semantic Scholar response to CitationData
35
+ */
36
+ private parseCitationData;
37
+ /**
38
+ * Get cache statistics
39
+ */
40
+ getCacheStats(): import("../../utils/RequestCache.js").CacheStats;
41
+ /**
42
+ * Clear cache
43
+ */
44
+ clearCache(): void;
45
+ }
46
+ export default CitationService;
47
+ //# sourceMappingURL=CitationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CitationService.d.ts","sourceRoot":"","sources":["../../../src/capabilities/citation-expansion/CitationService.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM;IA0B3B;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAkDnG;;OAEG;IACG,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAUpG;;OAEG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAU1G;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC,CAAC;IAqC9F;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqClF;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAqCjF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,aAAa;IAIb;;OAEG;IACH,UAAU;CAGX;AAED,eAAe,eAAe,CAAC"}