paper-search-cli 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.env.example +2 -6
  2. package/README.md +147 -653
  3. package/README.zh.md +268 -0
  4. package/dist/cli.js +180 -21
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config/ConfigService.d.ts +1 -1
  7. package/dist/config/ConfigService.d.ts.map +1 -1
  8. package/dist/config/ConfigService.js +1 -3
  9. package/dist/config/ConfigService.js.map +1 -1
  10. package/dist/config/ResultCaps.d.ts +4 -0
  11. package/dist/config/ResultCaps.d.ts.map +1 -0
  12. package/dist/config/ResultCaps.js +10 -0
  13. package/dist/config/ResultCaps.js.map +1 -0
  14. package/dist/core/capabilityProfile.d.ts +18 -0
  15. package/dist/core/capabilityProfile.d.ts.map +1 -0
  16. package/dist/core/capabilityProfile.js +153 -0
  17. package/dist/core/capabilityProfile.js.map +1 -0
  18. package/dist/core/diagnostics.js +16 -16
  19. package/dist/core/diagnostics.js.map +1 -1
  20. package/dist/core/liveSmoke.d.ts +42 -0
  21. package/dist/core/liveSmoke.d.ts.map +1 -0
  22. package/dist/core/liveSmoke.js +226 -0
  23. package/dist/core/liveSmoke.js.map +1 -0
  24. package/dist/core/platformMetadata.js +2 -2
  25. package/dist/core/platformMetadata.js.map +1 -1
  26. package/dist/core/schemas.d.ts +50 -1
  27. package/dist/core/schemas.d.ts.map +1 -1
  28. package/dist/core/schemas.js +44 -3
  29. package/dist/core/schemas.js.map +1 -1
  30. package/dist/core/textReports.d.ts +21 -0
  31. package/dist/core/textReports.d.ts.map +1 -0
  32. package/dist/core/textReports.js +85 -0
  33. package/dist/core/textReports.js.map +1 -0
  34. package/dist/core/tools.d.ts.map +1 -1
  35. package/dist/core/tools.js +6 -1
  36. package/dist/core/tools.js.map +1 -1
  37. package/dist/platforms/CORESearcher.d.ts.map +1 -1
  38. package/dist/platforms/CORESearcher.js +39 -9
  39. package/dist/platforms/CORESearcher.js.map +1 -1
  40. package/dist/platforms/OpenAIRESearcher.js +1 -1
  41. package/dist/platforms/OpenAIRESearcher.js.map +1 -1
  42. package/dist/services/JournalMetricsService.js +1 -1
  43. package/dist/services/JournalMetricsService.js.map +1 -1
  44. package/dist/skills/SkillInstaller.d.ts +108 -0
  45. package/dist/skills/SkillInstaller.d.ts.map +1 -0
  46. package/dist/skills/SkillInstaller.js +389 -0
  47. package/dist/skills/SkillInstaller.js.map +1 -0
  48. package/package.json +2 -2
  49. package/skills/paper-search/SKILL.md +50 -143
  50. package/skills/paper-search/references/capability-routing.md +134 -0
  51. package/skills/paper-search/references/cli-contract.md +133 -0
  52. package/skills/paper-search/references/management-layer.md +139 -0
  53. package/README-sc.md +0 -766
@@ -0,0 +1,389 @@
1
+ import { createHash } from 'crypto';
2
+ import { existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, statSync, writeFileSync } from 'fs';
3
+ import { homedir } from 'os';
4
+ import { dirname, join, relative, resolve, sep } from 'path';
5
+ export const SKILL_NAME = 'paper-search';
6
+ export const SKILL_TARGETS = [
7
+ { id: 'agents', label: 'Agents shared skills', relativeRoot: '.agents/skills' },
8
+ { id: 'codex', label: 'Codex', relativeRoot: '.codex/skills' },
9
+ { id: 'claude', label: 'Claude Code', relativeRoot: '.claude/skills' },
10
+ { id: 'cursor', label: 'Cursor', relativeRoot: '.cursor/skills' },
11
+ { id: 'gemini', label: 'Gemini CLI', relativeRoot: '.gemini/skills' },
12
+ { id: 'antigravity', label: 'Antigravity', relativeRoot: '.gemini/antigravity/skills' }
13
+ ];
14
+ const TARGET_BY_ID = new Map(SKILL_TARGETS.map(target => [target.id, target]));
15
+ const TARGET_ALIASES = new Map([
16
+ ['agent', 'agents'],
17
+ ['shared', 'agents'],
18
+ ['agent-skills', 'agents'],
19
+ ['claude-code', 'claude']
20
+ ]);
21
+ export function defaultSkillTargetIds(root = homedir()) {
22
+ const agentsRoot = join(resolve(root), '.agents', 'skills');
23
+ return existsSync(agentsRoot) ? ['agents'] : ['codex', 'claude', 'cursor'];
24
+ }
25
+ export function parseSkillTargets(raw, root = homedir()) {
26
+ const text = raw.trim();
27
+ if (!text)
28
+ return defaultSkillTargetIds(root);
29
+ const tokens = text
30
+ .replace(/[;+]/g, ',')
31
+ .split(',')
32
+ .flatMap(part => part.trim().split(/\s+/))
33
+ .map(part => part.trim().toLowerCase())
34
+ .filter(Boolean);
35
+ const selected = [];
36
+ const invalid = [];
37
+ for (const token of tokens) {
38
+ if (['skip', 'none', 'no', 'n', '跳过', '无', '否'].includes(token))
39
+ return [];
40
+ if (['all', '全部'].includes(token))
41
+ return SKILL_TARGETS.map(target => target.id);
42
+ const targetId = TARGET_ALIASES.get(token) || token;
43
+ if (!TARGET_BY_ID.has(targetId)) {
44
+ invalid.push(token);
45
+ continue;
46
+ }
47
+ if (!selected.includes(targetId))
48
+ selected.push(targetId);
49
+ }
50
+ if (invalid.length > 0) {
51
+ throw new Error(`Unknown skill target(s): ${invalid.join(', ')}. Valid targets: ${SKILL_TARGETS.map(target => target.id).join(', ')}`);
52
+ }
53
+ return selected;
54
+ }
55
+ export function describeSkillTargets(targetIds, root = homedir()) {
56
+ const base = resolve(root);
57
+ return targetIds.map(targetId => {
58
+ const target = getSkillTarget(targetId);
59
+ return {
60
+ target: target.id,
61
+ label: target.label,
62
+ path: skillDestination(target, base)
63
+ };
64
+ });
65
+ }
66
+ export function statusSkillTargets(targetIds, options = {}) {
67
+ const root = resolve(options.skillsRoot || homedir());
68
+ const files = loadSkillFiles(options.sourceRoot);
69
+ const sourceByPath = new Map(files.map(([relPath, content]) => [relPath, content]));
70
+ const bundledHash = skillDigest(files);
71
+ const targets = [];
72
+ for (const targetId of targetIds) {
73
+ const target = getSkillTarget(targetId);
74
+ const dest = skillDestination(target, root);
75
+ const item = {
76
+ target: target.id,
77
+ label: target.label,
78
+ path: dest,
79
+ status: 'missing',
80
+ files: files.length,
81
+ installedFiles: 0,
82
+ bundledHash,
83
+ installedHash: '',
84
+ hashMatch: false,
85
+ managedHashMatch: false,
86
+ extraFiles: [],
87
+ missingFiles: [...sourceByPath.keys()].sort(),
88
+ staleFiles: []
89
+ };
90
+ try {
91
+ if (!existsSync(dest)) {
92
+ targets.push(item);
93
+ continue;
94
+ }
95
+ if (!statSync(dest).isDirectory()) {
96
+ item.status = 'error';
97
+ item.error = 'Installed skill path exists but is not a directory.';
98
+ targets.push(item);
99
+ continue;
100
+ }
101
+ const installedFiles = iterFilesystemFiles(dest);
102
+ const installedByPath = new Map(installedFiles.map(([relPath, content]) => [relPath, content]));
103
+ const missingFiles = [...sourceByPath.keys()].filter(relPath => !installedByPath.has(relPath)).sort();
104
+ const staleFiles = [...sourceByPath.entries()]
105
+ .filter(([relPath, content]) => installedByPath.has(relPath) && !installedByPath.get(relPath)?.equals(content))
106
+ .map(([relPath]) => relPath)
107
+ .sort();
108
+ const extraFiles = [...installedByPath.keys()].filter(relPath => !sourceByPath.has(relPath)).sort();
109
+ const managedHashMatch = missingFiles.length === 0 && staleFiles.length === 0;
110
+ const hashMatch = managedHashMatch && extraFiles.length === 0;
111
+ item.installedFiles = installedFiles.length;
112
+ item.installedHash = installedFiles.length > 0 ? skillDigest(installedFiles) : '';
113
+ item.missingFiles = missingFiles;
114
+ item.staleFiles = staleFiles;
115
+ item.extraFiles = extraFiles;
116
+ item.managedHashMatch = managedHashMatch;
117
+ item.hashMatch = hashMatch;
118
+ item.status = missingFiles.length || staleFiles.length ? 'stale' : extraFiles.length ? 'extra_files' : 'up_to_date';
119
+ }
120
+ catch (error) {
121
+ item.status = 'error';
122
+ item.error = error?.message || String(error);
123
+ }
124
+ targets.push(item);
125
+ }
126
+ const statusCounts = {};
127
+ for (const target of targets) {
128
+ statusCounts[target.status] = (statusCounts[target.status] || 0) + 1;
129
+ }
130
+ return {
131
+ ok: targets.every(target => target.status !== 'error'),
132
+ root,
133
+ skill: SKILL_NAME,
134
+ selected: targetIds,
135
+ bundledFiles: files.length,
136
+ bundledHash,
137
+ targets,
138
+ statusCounts
139
+ };
140
+ }
141
+ export function installSkillTargets(targetIds, options = {}) {
142
+ const root = resolve(options.skillsRoot || homedir());
143
+ const files = loadSkillFiles(options.sourceRoot);
144
+ const installed = [];
145
+ const failed = [];
146
+ for (const targetId of targetIds) {
147
+ const target = getSkillTarget(targetId);
148
+ const dest = skillDestination(target, root);
149
+ try {
150
+ for (const [relPath, content] of files) {
151
+ const filePath = join(dest, relPath);
152
+ mkdirSync(dirname(filePath), { recursive: true });
153
+ writeFileSync(filePath, content);
154
+ }
155
+ installed.push({ target: target.id, label: target.label, path: dest, files: files.length });
156
+ }
157
+ catch (error) {
158
+ failed.push({ target: target.id, label: target.label, path: dest, error: error?.message || String(error) });
159
+ }
160
+ }
161
+ const status = statusSkillTargets(targetIds, options);
162
+ return {
163
+ ok: failed.length === 0 && status.ok,
164
+ root,
165
+ skill: SKILL_NAME,
166
+ selected: targetIds,
167
+ installed,
168
+ failed,
169
+ installedCount: installed.length,
170
+ failedCount: failed.length,
171
+ status
172
+ };
173
+ }
174
+ export function diffSkillTargets(targetIds, options = {}) {
175
+ const root = resolve(options.skillsRoot || homedir());
176
+ const files = loadSkillFiles(options.sourceRoot);
177
+ const sourceByPath = new Map(files.map(([relPath, content]) => [relPath, content]));
178
+ const bundledHash = skillDigest(files);
179
+ const targets = [];
180
+ for (const targetId of targetIds) {
181
+ const target = getSkillTarget(targetId);
182
+ const dest = skillDestination(target, root);
183
+ const item = {
184
+ target: target.id,
185
+ label: target.label,
186
+ path: dest,
187
+ status: 'missing',
188
+ files: files.length,
189
+ installedFiles: 0,
190
+ bundledHash,
191
+ installedHash: '',
192
+ hashMatch: false,
193
+ managedHashMatch: false,
194
+ managedFiles: [...sourceByPath.entries()].map(([relPath, content]) => ({
195
+ file: relPath,
196
+ status: 'missing',
197
+ bundledHash: bufferDigest(content),
198
+ installedHash: ''
199
+ })),
200
+ extraFiles: [],
201
+ missingFiles: [...sourceByPath.keys()].sort(),
202
+ staleFiles: []
203
+ };
204
+ try {
205
+ if (!existsSync(dest)) {
206
+ targets.push(item);
207
+ continue;
208
+ }
209
+ if (!statSync(dest).isDirectory()) {
210
+ item.status = 'error';
211
+ item.error = 'Installed skill path exists but is not a directory.';
212
+ targets.push(item);
213
+ continue;
214
+ }
215
+ const installedFiles = iterFilesystemFiles(dest);
216
+ const installedByPath = new Map(installedFiles.map(([relPath, content]) => [relPath, content]));
217
+ const managedFiles = [...sourceByPath.entries()].map(([relPath, bundled]) => {
218
+ const installed = installedByPath.get(relPath);
219
+ if (!installed) {
220
+ return {
221
+ file: relPath,
222
+ status: 'missing',
223
+ bundledHash: bufferDigest(bundled),
224
+ installedHash: ''
225
+ };
226
+ }
227
+ if (!installed.equals(bundled)) {
228
+ return {
229
+ file: relPath,
230
+ status: 'stale',
231
+ bundledHash: bufferDigest(bundled),
232
+ installedHash: bufferDigest(installed),
233
+ diff: unifiedManagedDiff(relPath, installed, bundled)
234
+ };
235
+ }
236
+ return {
237
+ file: relPath,
238
+ status: 'up_to_date',
239
+ bundledHash: bufferDigest(bundled),
240
+ installedHash: bufferDigest(installed)
241
+ };
242
+ });
243
+ const missingFiles = managedFiles.filter(file => file.status === 'missing').map(file => file.file).sort();
244
+ const staleFiles = managedFiles.filter(file => file.status === 'stale').map(file => file.file).sort();
245
+ const extraFiles = [...installedByPath.keys()].filter(relPath => !sourceByPath.has(relPath)).sort();
246
+ const managedHashMatch = missingFiles.length === 0 && staleFiles.length === 0;
247
+ const hashMatch = managedHashMatch && extraFiles.length === 0;
248
+ item.installedFiles = installedFiles.length;
249
+ item.installedHash = installedFiles.length > 0 ? skillDigest(installedFiles) : '';
250
+ item.managedFiles = managedFiles.sort((a, b) => a.file.localeCompare(b.file));
251
+ item.missingFiles = missingFiles;
252
+ item.staleFiles = staleFiles;
253
+ item.extraFiles = extraFiles;
254
+ item.managedHashMatch = managedHashMatch;
255
+ item.hashMatch = hashMatch;
256
+ item.status = missingFiles.length || staleFiles.length ? 'stale' : extraFiles.length ? 'extra_files' : 'up_to_date';
257
+ }
258
+ catch (error) {
259
+ item.status = 'error';
260
+ item.error = error?.message || String(error);
261
+ }
262
+ targets.push(item);
263
+ }
264
+ const statusCounts = {};
265
+ for (const target of targets) {
266
+ statusCounts[target.status] = (statusCounts[target.status] || 0) + 1;
267
+ }
268
+ return {
269
+ ok: targets.every(target => target.status !== 'error'),
270
+ root,
271
+ skill: SKILL_NAME,
272
+ selected: targetIds,
273
+ bundledFiles: files.length,
274
+ bundledHash,
275
+ targets,
276
+ statusCounts
277
+ };
278
+ }
279
+ function getSkillTarget(targetId) {
280
+ const target = TARGET_BY_ID.get(targetId);
281
+ if (!target) {
282
+ throw new Error(`Unknown skill target: ${targetId}. Valid targets: ${SKILL_TARGETS.map(item => item.id).join(', ')}`);
283
+ }
284
+ return target;
285
+ }
286
+ function skillDestination(target, root) {
287
+ return join(root, target.relativeRoot, SKILL_NAME);
288
+ }
289
+ function loadSkillFiles(sourceRoot) {
290
+ const root = sourceRoot ? resolve(sourceRoot) : bundledSkillRoot();
291
+ if (!existsSync(root) || !statSync(root).isDirectory()) {
292
+ throw new Error(`Skill source directory not found: ${root}`);
293
+ }
294
+ const files = iterFilesystemFiles(root);
295
+ if (files.length === 0) {
296
+ throw new Error(`Skill source directory is empty: ${root}`);
297
+ }
298
+ return files;
299
+ }
300
+ function bundledSkillRoot() {
301
+ const explicit = process.env.PAPER_SEARCH_SKILL_SOURCE_ROOT;
302
+ const candidates = [
303
+ explicit ? resolve(explicit) : '',
304
+ resolve(process.cwd(), 'skills', SKILL_NAME),
305
+ ...entrypointSkillCandidates()
306
+ ].filter(Boolean);
307
+ const found = candidates.find(candidate => existsSync(candidate) && statSync(candidate).isDirectory());
308
+ if (!found)
309
+ return candidates[0] || resolve(process.cwd(), 'skills', SKILL_NAME);
310
+ return found;
311
+ }
312
+ function entrypointSkillCandidates() {
313
+ const entry = process.argv[1];
314
+ if (!entry)
315
+ return [];
316
+ const entryPath = existsSync(entry) ? realpathSync(entry) : resolve(entry);
317
+ const entryDir = dirname(entryPath);
318
+ return [
319
+ resolve(entryDir, '..', 'skills', SKILL_NAME),
320
+ resolve(entryDir, 'skills', SKILL_NAME)
321
+ ];
322
+ }
323
+ function iterFilesystemFiles(root) {
324
+ const files = [];
325
+ function visit(dir) {
326
+ for (const name of readdirSync(dir)) {
327
+ const path = join(dir, name);
328
+ const stats = statSync(path);
329
+ if (stats.isDirectory()) {
330
+ visit(path);
331
+ }
332
+ else if (stats.isFile()) {
333
+ files.push([relative(root, path).split(sep).join('/'), readFileSync(path)]);
334
+ }
335
+ }
336
+ }
337
+ visit(root);
338
+ return files.sort(([a], [b]) => a.localeCompare(b));
339
+ }
340
+ function skillDigest(files) {
341
+ const hash = createHash('sha256');
342
+ for (const [relPath, content] of [...files].sort(([a], [b]) => a.localeCompare(b))) {
343
+ hash.update(relPath);
344
+ hash.update('\0');
345
+ hash.update(content);
346
+ hash.update('\0');
347
+ }
348
+ return hash.digest('hex');
349
+ }
350
+ function bufferDigest(content) {
351
+ return createHash('sha256').update(content).digest('hex');
352
+ }
353
+ function unifiedManagedDiff(relPath, installed, bundled) {
354
+ if (hasBinaryByte(installed) || hasBinaryByte(bundled)) {
355
+ return [
356
+ `--- installed/${relPath}`,
357
+ `+++ bundled/${relPath}`,
358
+ '@@',
359
+ '-[binary content differs]',
360
+ '+[binary content differs]'
361
+ ].join('\n');
362
+ }
363
+ const installedLines = splitLines(installed.toString('utf8'));
364
+ const bundledLines = splitLines(bundled.toString('utf8'));
365
+ const lines = [
366
+ `--- installed/${relPath}`,
367
+ `+++ bundled/${relPath}`,
368
+ '@@'
369
+ ];
370
+ for (const line of installedLines) {
371
+ lines.push(`-${line}`);
372
+ }
373
+ for (const line of bundledLines) {
374
+ lines.push(`+${line}`);
375
+ }
376
+ return lines.join('\n');
377
+ }
378
+ function hasBinaryByte(content) {
379
+ return content.includes(0);
380
+ }
381
+ function splitLines(text) {
382
+ if (!text)
383
+ return [''];
384
+ const lines = text.split(/\r?\n/);
385
+ if (lines[lines.length - 1] === '')
386
+ lines.pop();
387
+ return lines;
388
+ }
389
+ //# sourceMappingURL=SkillInstaller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkillInstaller.js","sourceRoot":"","sources":["../../src/skills/SkillInstaller.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paper-search-cli",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Agent-friendly CLI for searching and downloading academic papers from multiple sources.",
5
5
  "main": "dist/cli.js",
6
6
  "type": "module",
@@ -21,7 +21,7 @@
21
21
  "files": [
22
22
  "dist/",
23
23
  "README.md",
24
- "README-sc.md",
24
+ "README.zh.md",
25
25
  "skills/",
26
26
  "LICENSE",
27
27
  ".env.example"