paper-search-cli 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +2 -6
- package/README.md +149 -653
- package/README.zh.md +270 -0
- package/dist/cli.js +184 -21
- package/dist/cli.js.map +1 -1
- package/dist/config/ConfigService.d.ts +1 -1
- package/dist/config/ConfigService.d.ts.map +1 -1
- package/dist/config/ConfigService.js +1 -3
- package/dist/config/ConfigService.js.map +1 -1
- package/dist/config/ResultCaps.d.ts +4 -0
- package/dist/config/ResultCaps.d.ts.map +1 -0
- package/dist/config/ResultCaps.js +10 -0
- package/dist/config/ResultCaps.js.map +1 -0
- package/dist/core/capabilityProfile.d.ts +18 -0
- package/dist/core/capabilityProfile.d.ts.map +1 -0
- package/dist/core/capabilityProfile.js +167 -0
- package/dist/core/capabilityProfile.js.map +1 -0
- package/dist/core/diagnostics.js +16 -16
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/handleToolCall.d.ts.map +1 -1
- package/dist/core/handleToolCall.js +33 -0
- package/dist/core/handleToolCall.js.map +1 -1
- package/dist/core/liveSmoke.d.ts +42 -0
- package/dist/core/liveSmoke.d.ts.map +1 -0
- package/dist/core/liveSmoke.js +226 -0
- package/dist/core/liveSmoke.js.map +1 -0
- package/dist/core/platformMetadata.js +2 -2
- package/dist/core/platformMetadata.js.map +1 -1
- package/dist/core/schemas.d.ts +77 -2
- package/dist/core/schemas.d.ts.map +1 -1
- package/dist/core/schemas.js +58 -3
- package/dist/core/schemas.js.map +1 -1
- package/dist/core/textReports.d.ts +21 -0
- package/dist/core/textReports.d.ts.map +1 -0
- package/dist/core/textReports.js +85 -0
- package/dist/core/textReports.js.map +1 -0
- package/dist/core/tools.d.ts.map +1 -1
- package/dist/core/tools.js +60 -1
- package/dist/core/tools.js.map +1 -1
- package/dist/platforms/BioRxivSearcher.d.ts.map +1 -1
- package/dist/platforms/BioRxivSearcher.js +40 -21
- package/dist/platforms/BioRxivSearcher.js.map +1 -1
- package/dist/platforms/CORESearcher.d.ts.map +1 -1
- package/dist/platforms/CORESearcher.js +39 -9
- package/dist/platforms/CORESearcher.js.map +1 -1
- package/dist/platforms/GoogleScholarSearcher.d.ts.map +1 -1
- package/dist/platforms/GoogleScholarSearcher.js +3 -2
- package/dist/platforms/GoogleScholarSearcher.js.map +1 -1
- package/dist/platforms/OpenAIRESearcher.js +1 -1
- package/dist/platforms/OpenAIRESearcher.js.map +1 -1
- package/dist/services/CitationService.d.ts.map +1 -1
- package/dist/services/CitationService.js +8 -2
- package/dist/services/CitationService.js.map +1 -1
- package/dist/services/JournalMetricsService.js +1 -1
- package/dist/services/JournalMetricsService.js.map +1 -1
- package/dist/services/OpenAccessFallbackService.d.ts +20 -0
- package/dist/services/OpenAccessFallbackService.d.ts.map +1 -1
- package/dist/services/OpenAccessFallbackService.js +95 -72
- package/dist/services/OpenAccessFallbackService.js.map +1 -1
- package/dist/skills/SkillInstaller.d.ts +108 -0
- package/dist/skills/SkillInstaller.d.ts.map +1 -0
- package/dist/skills/SkillInstaller.js +389 -0
- package/dist/skills/SkillInstaller.js.map +1 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -1
- package/dist/utils/RateLimiter.js +7 -0
- package/dist/utils/RateLimiter.js.map +1 -1
- package/package.json +2 -2
- package/skills/paper-search/SKILL.md +52 -143
- package/skills/paper-search/references/capability-routing.md +147 -0
- package/skills/paper-search/references/cli-contract.md +152 -0
- package/skills/paper-search/references/management-layer.md +140 -0
- package/README-sc.md +0 -766
|
@@ -1,75 +1,91 @@
|
|
|
1
1
|
import { downloadPdfFromUrl, safeFilename } from '../utils/PdfDownload.js';
|
|
2
|
+
export const INSTITUTIONAL_ACCESS_TIER_ID = 'institutional_access';
|
|
2
3
|
const REPOSITORY_SOURCES = ['pmc', 'europepmc', 'core', 'openaire'];
|
|
4
|
+
const DEFAULT_DOWNLOAD_TIERS = [
|
|
5
|
+
{
|
|
6
|
+
id: 'primary',
|
|
7
|
+
stage: 'primary',
|
|
8
|
+
run: tryPrimaryDownload
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
id: 'direct_pdf_url',
|
|
12
|
+
stage: 'direct_pdf_url',
|
|
13
|
+
run: tryDirectMetadataUrl
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: 'repositories',
|
|
17
|
+
stage: 'repositories',
|
|
18
|
+
run: tryRepositoryFallback
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: 'unpaywall',
|
|
22
|
+
stage: 'unpaywall',
|
|
23
|
+
run: tryUnpaywall
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'scihub',
|
|
27
|
+
stage: 'scihub',
|
|
28
|
+
run: trySciHub
|
|
29
|
+
}
|
|
30
|
+
];
|
|
3
31
|
export async function downloadWithFallback(searchers, options) {
|
|
4
32
|
const savePath = options.savePath || './downloads';
|
|
5
33
|
const attempts = [];
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
34
|
+
const context = {
|
|
35
|
+
searchers,
|
|
36
|
+
source: normalizeSource(options.source),
|
|
37
|
+
paperId: options.paperId,
|
|
38
|
+
doi: options.doi,
|
|
39
|
+
title: options.title,
|
|
40
|
+
savePath,
|
|
41
|
+
useSciHub: options.useSciHub !== false
|
|
42
|
+
};
|
|
43
|
+
for (const tier of DEFAULT_DOWNLOAD_TIERS) {
|
|
44
|
+
const result = await tier.run(context);
|
|
45
|
+
attempts.push({ stage: tier.stage, status: result.status, message: result.message });
|
|
46
|
+
if (result.status === 'ok' && result.path) {
|
|
47
|
+
return { status: 'ok', path: result.path, attempts };
|
|
16
48
|
}
|
|
17
49
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
23
|
-
return { status: '
|
|
24
|
-
const repositoryResult = await tryRepositoryFallback(searchers, options, savePath, attempts);
|
|
25
|
-
if (repositoryResult)
|
|
26
|
-
return { status: 'ok', path: repositoryResult, attempts };
|
|
27
|
-
const unpaywallResult = await tryUnpaywall(searchers, options.doi || '', savePath, attempts);
|
|
28
|
-
if (unpaywallResult)
|
|
29
|
-
return { status: 'ok', path: unpaywallResult, attempts };
|
|
30
|
-
if (options.useSciHub !== false) {
|
|
31
|
-
const identifier = options.doi || options.title || options.paperId;
|
|
32
|
-
try {
|
|
33
|
-
const path = await searchers.scihub.downloadPdf(identifier, { savePath });
|
|
34
|
-
attempts.push({ stage: 'scihub', status: 'ok', message: path });
|
|
35
|
-
return { status: 'ok', path, attempts };
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
attempts.push({ stage: 'scihub', status: 'error', message: error?.message || String(error) });
|
|
39
|
-
}
|
|
50
|
+
return { status: 'error', attempts };
|
|
51
|
+
}
|
|
52
|
+
async function tryPrimaryDownload(context) {
|
|
53
|
+
const primary = context.searchers[context.source];
|
|
54
|
+
if (!primary?.getCapabilities().download) {
|
|
55
|
+
return { status: 'skipped', message: `No primary downloader for ${context.source}` };
|
|
40
56
|
}
|
|
41
|
-
|
|
42
|
-
|
|
57
|
+
try {
|
|
58
|
+
const path = await primary.downloadPdf(context.paperId, { savePath: context.savePath });
|
|
59
|
+
return { status: 'ok', path, message: path };
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
return { status: 'error', message: error?.message || String(error) };
|
|
43
63
|
}
|
|
44
|
-
return { status: 'error', attempts };
|
|
45
64
|
}
|
|
46
|
-
async function tryDirectMetadataUrl(
|
|
47
|
-
const searcher = searchers[source];
|
|
48
|
-
if (!searcher)
|
|
49
|
-
return '';
|
|
65
|
+
async function tryDirectMetadataUrl(context) {
|
|
66
|
+
const searcher = context.searchers[context.source];
|
|
67
|
+
if (!searcher) {
|
|
68
|
+
return { status: 'skipped', message: `No metadata searcher for ${context.source}.` };
|
|
69
|
+
}
|
|
50
70
|
try {
|
|
51
|
-
const paper = await searcher.getPaperByDoi(paperId);
|
|
71
|
+
const paper = await searcher.getPaperByDoi(context.paperId);
|
|
52
72
|
if (!paper?.pdfUrl) {
|
|
53
|
-
|
|
54
|
-
return '';
|
|
73
|
+
return { status: 'skipped', message: 'No pdf_url found in source metadata.' };
|
|
55
74
|
}
|
|
56
|
-
const path = await downloadPdfFromUrl(paper.pdfUrl, savePath, `${source}_${safeFilename(paper.paperId)}`);
|
|
57
|
-
|
|
58
|
-
return path;
|
|
75
|
+
const path = await downloadPdfFromUrl(paper.pdfUrl, context.savePath, `${context.source}_${safeFilename(paper.paperId)}`);
|
|
76
|
+
return { status: 'ok', path, message: path };
|
|
59
77
|
}
|
|
60
78
|
catch (error) {
|
|
61
|
-
|
|
62
|
-
return '';
|
|
79
|
+
return { status: 'error', message: error?.message || String(error) };
|
|
63
80
|
}
|
|
64
81
|
}
|
|
65
|
-
async function tryRepositoryFallback(
|
|
66
|
-
const queries = [
|
|
82
|
+
async function tryRepositoryFallback(context) {
|
|
83
|
+
const queries = [context.doi || '', context.title || ''].filter(Boolean);
|
|
67
84
|
if (queries.length === 0) {
|
|
68
|
-
|
|
69
|
-
return '';
|
|
85
|
+
return { status: 'skipped', message: 'No DOI/title provided for repository discovery.' };
|
|
70
86
|
}
|
|
71
87
|
for (const source of REPOSITORY_SOURCES) {
|
|
72
|
-
const searcher = searchers[source];
|
|
88
|
+
const searcher = context.searchers[source];
|
|
73
89
|
if (!searcher)
|
|
74
90
|
continue;
|
|
75
91
|
for (const query of queries) {
|
|
@@ -78,37 +94,44 @@ async function tryRepositoryFallback(searchers, options, savePath, attempts) {
|
|
|
78
94
|
const paper = papers.find(candidate => candidate.pdfUrl);
|
|
79
95
|
if (!paper?.pdfUrl)
|
|
80
96
|
continue;
|
|
81
|
-
const path = await downloadPdfFromUrl(paper.pdfUrl, savePath, `${source}_${safeFilename(paper.paperId)}`);
|
|
82
|
-
|
|
83
|
-
return path;
|
|
97
|
+
const path = await downloadPdfFromUrl(paper.pdfUrl, context.savePath, `${source}_${safeFilename(paper.paperId)}`);
|
|
98
|
+
return { status: 'ok', path, message: path };
|
|
84
99
|
}
|
|
85
|
-
catch
|
|
86
|
-
|
|
100
|
+
catch {
|
|
101
|
+
continue;
|
|
87
102
|
}
|
|
88
103
|
}
|
|
89
104
|
}
|
|
90
|
-
|
|
91
|
-
return '';
|
|
105
|
+
return { status: 'skipped', message: 'No repository PDF candidate succeeded.' };
|
|
92
106
|
}
|
|
93
|
-
async function tryUnpaywall(
|
|
94
|
-
if (!doi) {
|
|
95
|
-
|
|
96
|
-
return '';
|
|
107
|
+
async function tryUnpaywall(context) {
|
|
108
|
+
if (!context.doi) {
|
|
109
|
+
return { status: 'skipped', message: 'DOI not provided.' };
|
|
97
110
|
}
|
|
98
111
|
try {
|
|
99
|
-
const unpaywall = searchers.unpaywall;
|
|
100
|
-
const pdfUrl = await unpaywall.resolveBestPdfUrl(doi);
|
|
112
|
+
const unpaywall = context.searchers.unpaywall;
|
|
113
|
+
const pdfUrl = await unpaywall.resolveBestPdfUrl(context.doi);
|
|
101
114
|
if (!pdfUrl) {
|
|
102
|
-
|
|
103
|
-
return '';
|
|
115
|
+
return { status: 'skipped', message: 'No OA PDF URL found or email not configured.' };
|
|
104
116
|
}
|
|
105
|
-
const path = await downloadPdfFromUrl(pdfUrl, savePath, `unpaywall_${safeFilename(doi)}`);
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
const path = await downloadPdfFromUrl(pdfUrl, context.savePath, `unpaywall_${safeFilename(context.doi)}`);
|
|
118
|
+
return { status: 'ok', path, message: path };
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
return { status: 'error', message: error?.message || String(error) };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function trySciHub(context) {
|
|
125
|
+
if (!context.useSciHub) {
|
|
126
|
+
return { status: 'skipped', message: 'Sci-Hub fallback disabled by useSciHub=false.' };
|
|
127
|
+
}
|
|
128
|
+
const identifier = context.doi || context.title || context.paperId;
|
|
129
|
+
try {
|
|
130
|
+
const path = await context.searchers.scihub.downloadPdf(identifier, { savePath: context.savePath });
|
|
131
|
+
return { status: 'ok', path, message: path };
|
|
108
132
|
}
|
|
109
133
|
catch (error) {
|
|
110
|
-
|
|
111
|
-
return '';
|
|
134
|
+
return { status: 'error', message: error?.message || String(error) };
|
|
112
135
|
}
|
|
113
136
|
}
|
|
114
137
|
function normalizeSource(source) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAccessFallbackService.js","sourceRoot":"","sources":["../../src/services/OpenAccessFallbackService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenAccessFallbackService.js","sourceRoot":"","sources":["../../src/services/OpenAccessFallbackService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export declare const SKILL_NAME = "paper-search";
|
|
2
|
+
export interface SkillTarget {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
relativeRoot: string;
|
|
6
|
+
}
|
|
7
|
+
export interface SkillTargetStatus {
|
|
8
|
+
target: string;
|
|
9
|
+
label: string;
|
|
10
|
+
path: string;
|
|
11
|
+
status: 'missing' | 'up_to_date' | 'stale' | 'extra_files' | 'error';
|
|
12
|
+
files: number;
|
|
13
|
+
installedFiles: number;
|
|
14
|
+
bundledHash: string;
|
|
15
|
+
installedHash: string;
|
|
16
|
+
hashMatch: boolean;
|
|
17
|
+
managedHashMatch: boolean;
|
|
18
|
+
extraFiles: string[];
|
|
19
|
+
missingFiles: string[];
|
|
20
|
+
staleFiles: string[];
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface SkillStatusResult {
|
|
24
|
+
ok: boolean;
|
|
25
|
+
root: string;
|
|
26
|
+
skill: string;
|
|
27
|
+
selected: string[];
|
|
28
|
+
bundledFiles: number;
|
|
29
|
+
bundledHash: string;
|
|
30
|
+
targets: SkillTargetStatus[];
|
|
31
|
+
statusCounts: Record<string, number>;
|
|
32
|
+
}
|
|
33
|
+
export interface SkillInstallResult {
|
|
34
|
+
ok: boolean;
|
|
35
|
+
root: string;
|
|
36
|
+
skill: string;
|
|
37
|
+
selected: string[];
|
|
38
|
+
installed: Array<{
|
|
39
|
+
target: string;
|
|
40
|
+
label: string;
|
|
41
|
+
path: string;
|
|
42
|
+
files: number;
|
|
43
|
+
}>;
|
|
44
|
+
failed: Array<{
|
|
45
|
+
target: string;
|
|
46
|
+
label: string;
|
|
47
|
+
path: string;
|
|
48
|
+
error: string;
|
|
49
|
+
}>;
|
|
50
|
+
installedCount: number;
|
|
51
|
+
failedCount: number;
|
|
52
|
+
status: SkillStatusResult;
|
|
53
|
+
}
|
|
54
|
+
export interface SkillManagedFileDiff {
|
|
55
|
+
file: string;
|
|
56
|
+
status: 'missing' | 'stale' | 'up_to_date';
|
|
57
|
+
bundledHash: string;
|
|
58
|
+
installedHash: string;
|
|
59
|
+
diff?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface SkillTargetDiff {
|
|
62
|
+
target: string;
|
|
63
|
+
label: string;
|
|
64
|
+
path: string;
|
|
65
|
+
status: SkillTargetStatus['status'];
|
|
66
|
+
files: number;
|
|
67
|
+
installedFiles: number;
|
|
68
|
+
bundledHash: string;
|
|
69
|
+
installedHash: string;
|
|
70
|
+
hashMatch: boolean;
|
|
71
|
+
managedHashMatch: boolean;
|
|
72
|
+
managedFiles: SkillManagedFileDiff[];
|
|
73
|
+
extraFiles: string[];
|
|
74
|
+
missingFiles: string[];
|
|
75
|
+
staleFiles: string[];
|
|
76
|
+
error?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface SkillDiffResult {
|
|
79
|
+
ok: boolean;
|
|
80
|
+
root: string;
|
|
81
|
+
skill: string;
|
|
82
|
+
selected: string[];
|
|
83
|
+
bundledFiles: number;
|
|
84
|
+
bundledHash: string;
|
|
85
|
+
targets: SkillTargetDiff[];
|
|
86
|
+
statusCounts: Record<string, number>;
|
|
87
|
+
}
|
|
88
|
+
export declare const SKILL_TARGETS: SkillTarget[];
|
|
89
|
+
export declare function defaultSkillTargetIds(root?: string): string[];
|
|
90
|
+
export declare function parseSkillTargets(raw: string, root?: string): string[];
|
|
91
|
+
export declare function describeSkillTargets(targetIds: string[], root?: string): Array<{
|
|
92
|
+
target: string;
|
|
93
|
+
label: string;
|
|
94
|
+
path: string;
|
|
95
|
+
}>;
|
|
96
|
+
export declare function statusSkillTargets(targetIds: string[], options?: {
|
|
97
|
+
skillsRoot?: string;
|
|
98
|
+
sourceRoot?: string;
|
|
99
|
+
}): SkillStatusResult;
|
|
100
|
+
export declare function installSkillTargets(targetIds: string[], options?: {
|
|
101
|
+
skillsRoot?: string;
|
|
102
|
+
sourceRoot?: string;
|
|
103
|
+
}): SkillInstallResult;
|
|
104
|
+
export declare function diffSkillTargets(targetIds: string[], options?: {
|
|
105
|
+
skillsRoot?: string;
|
|
106
|
+
sourceRoot?: string;
|
|
107
|
+
}): SkillDiffResult;
|
|
108
|
+
//# sourceMappingURL=SkillInstaller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SkillInstaller.d.ts","sourceRoot":"","sources":["../../src/skills/SkillInstaller.ts"],"names":[],"mappings":"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"}
|