@zenalexa/unicli 0.225.2 → 0.225.3
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/AGENTS.md +2 -2
- package/README.md +3 -3
- package/README.zh-CN.md +3 -3
- package/dist/adapters/acl-anthology/papers.d.ts +16 -9
- package/dist/adapters/acl-anthology/papers.d.ts.map +1 -1
- package/dist/adapters/acl-anthology/papers.js +322 -58
- package/dist/adapters/acl-anthology/papers.js.map +1 -1
- package/dist/adapters/arxiv/papers.d.ts +22 -4
- package/dist/adapters/arxiv/papers.d.ts.map +1 -1
- package/dist/adapters/arxiv/papers.js +202 -4
- package/dist/adapters/arxiv/papers.js.map +1 -1
- package/dist/adapters/baidu-scholar/search.d.ts +15 -1
- package/dist/adapters/baidu-scholar/search.d.ts.map +1 -1
- package/dist/adapters/baidu-scholar/search.js +72 -8
- package/dist/adapters/baidu-scholar/search.js.map +1 -1
- package/dist/adapters/biorxiv/preprints.d.ts +9 -0
- package/dist/adapters/biorxiv/preprints.d.ts.map +1 -0
- package/dist/adapters/biorxiv/preprints.js +78 -0
- package/dist/adapters/biorxiv/preprints.js.map +1 -0
- package/dist/adapters/cnki/search.d.ts +82 -0
- package/dist/adapters/cnki/search.d.ts.map +1 -0
- package/dist/adapters/cnki/search.js +236 -0
- package/dist/adapters/cnki/search.js.map +1 -0
- package/dist/adapters/cvf/papers.d.ts +12 -7
- package/dist/adapters/cvf/papers.d.ts.map +1 -1
- package/dist/adapters/cvf/papers.js +210 -27
- package/dist/adapters/cvf/papers.js.map +1 -1
- package/dist/adapters/dblp/publications.d.ts +12 -5
- package/dist/adapters/dblp/publications.d.ts.map +1 -1
- package/dist/adapters/dblp/publications.js +31 -8
- package/dist/adapters/dblp/publications.js.map +1 -1
- package/dist/adapters/google-scholar/search.d.ts +22 -1
- package/dist/adapters/google-scholar/search.d.ts.map +1 -1
- package/dist/adapters/google-scholar/search.js +129 -14
- package/dist/adapters/google-scholar/search.js.map +1 -1
- package/dist/adapters/hf/paper.d.ts +12 -3
- package/dist/adapters/hf/paper.d.ts.map +1 -1
- package/dist/adapters/hf/paper.js +65 -5
- package/dist/adapters/hf/paper.js.map +1 -1
- package/dist/adapters/medrxiv/preprints.d.ts +9 -0
- package/dist/adapters/medrxiv/preprints.d.ts.map +1 -0
- package/dist/adapters/medrxiv/preprints.js +78 -0
- package/dist/adapters/medrxiv/preprints.js.map +1 -0
- package/dist/adapters/neurips/proceedings.d.ts +8 -7
- package/dist/adapters/neurips/proceedings.d.ts.map +1 -1
- package/dist/adapters/neurips/proceedings.js +209 -21
- package/dist/adapters/neurips/proceedings.js.map +1 -1
- package/dist/adapters/openalex/works.d.ts +21 -5
- package/dist/adapters/openalex/works.d.ts.map +1 -1
- package/dist/adapters/openalex/works.js +108 -8
- package/dist/adapters/openalex/works.js.map +1 -1
- package/dist/adapters/openreview/papers.d.ts +10 -4
- package/dist/adapters/openreview/papers.d.ts.map +1 -1
- package/dist/adapters/openreview/papers.js +351 -24
- package/dist/adapters/openreview/papers.js.map +1 -1
- package/dist/adapters/pmlr/proceedings.d.ts +6 -6
- package/dist/adapters/pmlr/proceedings.d.ts.map +1 -1
- package/dist/adapters/pmlr/proceedings.js +92 -12
- package/dist/adapters/pmlr/proceedings.js.map +1 -1
- package/dist/adapters/pubmed/articles.d.ts +8 -4
- package/dist/adapters/pubmed/articles.d.ts.map +1 -1
- package/dist/adapters/pubmed/articles.js +272 -39
- package/dist/adapters/pubmed/articles.js.map +1 -1
- package/dist/adapters/rxiv/preprints.d.ts +75 -0
- package/dist/adapters/rxiv/preprints.d.ts.map +1 -0
- package/dist/adapters/rxiv/preprints.js +651 -0
- package/dist/adapters/rxiv/preprints.js.map +1 -0
- package/dist/adapters/scholar-artifacts/pdf-read.d.ts +49 -0
- package/dist/adapters/scholar-artifacts/pdf-read.d.ts.map +1 -0
- package/dist/adapters/scholar-artifacts/pdf-read.js +204 -0
- package/dist/adapters/scholar-artifacts/pdf-read.js.map +1 -0
- package/dist/adapters/scholar-artifacts/pdf.d.ts +16 -0
- package/dist/adapters/scholar-artifacts/pdf.d.ts.map +1 -0
- package/dist/adapters/scholar-artifacts/pdf.js +122 -0
- package/dist/adapters/scholar-artifacts/pdf.js.map +1 -0
- package/dist/adapters/semantic-scholar/papers.d.ts +6 -6
- package/dist/adapters/semantic-scholar/papers.d.ts.map +1 -1
- package/dist/adapters/semantic-scholar/papers.js +80 -6
- package/dist/adapters/semantic-scholar/papers.js.map +1 -1
- package/dist/adapters/unpaywall/works.d.ts +7 -7
- package/dist/adapters/unpaywall/works.d.ts.map +1 -1
- package/dist/adapters/unpaywall/works.js +104 -12
- package/dist/adapters/unpaywall/works.js.map +1 -1
- package/dist/adapters/wanfang/search.d.ts +14 -0
- package/dist/adapters/wanfang/search.d.ts.map +1 -1
- package/dist/adapters/wanfang/search.js +56 -7
- package/dist/adapters/wanfang/search.js.map +1 -1
- package/dist/browser/page.d.ts +2 -0
- package/dist/browser/page.d.ts.map +1 -1
- package/dist/browser/page.js +12 -0
- package/dist/browser/page.js.map +1 -1
- package/dist/commands/browser/actions.d.ts.map +1 -1
- package/dist/commands/browser/actions.js +59 -3
- package/dist/commands/browser/actions.js.map +1 -1
- package/dist/commands/scholar.d.ts +77 -5
- package/dist/commands/scholar.d.ts.map +1 -1
- package/dist/commands/scholar.js +2945 -83
- package/dist/commands/scholar.js.map +1 -1
- package/dist/core/command-contract.d.ts.map +1 -1
- package/dist/core/command-contract.js +5 -0
- package/dist/core/command-contract.js.map +1 -1
- package/dist/core/schema-v2.d.ts +1 -0
- package/dist/core/schema-v2.d.ts.map +1 -1
- package/dist/core/schema-v2.js +1 -0
- package/dist/core/schema-v2.js.map +1 -1
- package/dist/discovery/aliases.d.ts.map +1 -1
- package/dist/discovery/aliases.js +208 -0
- package/dist/discovery/aliases.js.map +1 -1
- package/dist/discovery/core-catalog.d.ts +2 -0
- package/dist/discovery/core-catalog.d.ts.map +1 -1
- package/dist/discovery/core-catalog.js +487 -0
- package/dist/discovery/core-catalog.js.map +1 -1
- package/dist/discovery/intents.d.ts.map +1 -1
- package/dist/discovery/intents.js +273 -2
- package/dist/discovery/intents.js.map +1 -1
- package/dist/discovery/loader.d.ts.map +1 -1
- package/dist/discovery/loader.js +3 -0
- package/dist/discovery/loader.js.map +1 -1
- package/dist/engine/capability-policy.d.ts.map +1 -1
- package/dist/engine/capability-policy.js +30 -4
- package/dist/engine/capability-policy.js.map +1 -1
- package/dist/engine/kernel/stages.d.ts.map +1 -1
- package/dist/engine/kernel/stages.js +3 -0
- package/dist/engine/kernel/stages.js.map +1 -1
- package/dist/engine/operation-policy.d.ts +4 -1
- package/dist/engine/operation-policy.d.ts.map +1 -1
- package/dist/engine/operation-policy.js +23 -0
- package/dist/engine/operation-policy.js.map +1 -1
- package/dist/fast-path/manifest.d.ts +3 -0
- package/dist/fast-path/manifest.d.ts.map +1 -1
- package/dist/fast-path/manifest.js.map +1 -1
- package/dist/fast-path/policy.d.ts.map +1 -1
- package/dist/fast-path/policy.js +3 -0
- package/dist/fast-path/policy.js.map +1 -1
- package/dist/manifest-compact.txt +1 -1
- package/dist/manifest.json +6804 -1002
- package/dist/registry.d.ts +2 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +1 -0
- package/dist/registry.js.map +1 -1
- package/dist/types/scholarly.d.ts +19 -4
- package/dist/types/scholarly.d.ts.map +1 -1
- package/dist/types/scholarly.js +4 -4
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/skills/unicli/SKILL.md +1 -1
- package/skills/unicli-claude-code/SKILL.md +1 -1
- package/skills/unicli-hermes/SKILL.md +1 -1
- package/src/adapters/acl-anthology/papers.test.ts +111 -0
- package/src/adapters/acl-anthology/papers.ts +379 -71
- package/src/adapters/arxiv/papers.test.ts +46 -0
- package/src/adapters/arxiv/papers.ts +251 -4
- package/src/adapters/baidu-scholar/search.ts +74 -11
- package/src/adapters/biorxiv/preprints.ts +112 -0
- package/src/adapters/cnki/search.ts +357 -0
- package/src/adapters/cvf/papers.ts +260 -27
- package/src/adapters/dblp/publications.test.ts +9 -0
- package/src/adapters/dblp/publications.ts +31 -8
- package/src/adapters/google-scholar/search.ts +165 -17
- package/src/adapters/hf/paper.test.ts +23 -0
- package/src/adapters/hf/paper.ts +89 -5
- package/src/adapters/hf/top.yaml +34 -2
- package/src/adapters/huggingface-papers/daily.yaml +37 -3
- package/src/adapters/huggingface-papers/search.yaml +43 -9
- package/src/adapters/medrxiv/preprints.ts +112 -0
- package/src/adapters/neurips/proceedings.ts +266 -22
- package/src/adapters/openalex/works.test.ts +15 -4
- package/src/adapters/openalex/works.ts +136 -8
- package/src/adapters/openreview/papers.test.ts +31 -0
- package/src/adapters/openreview/papers.ts +407 -29
- package/src/adapters/pmlr/proceedings.ts +102 -12
- package/src/adapters/pubmed/articles.test.ts +88 -1
- package/src/adapters/pubmed/articles.ts +343 -44
- package/src/adapters/rxiv/preprints.test.ts +233 -0
- package/src/adapters/rxiv/preprints.ts +849 -0
- package/src/adapters/scholar-artifacts/pdf-read.ts +277 -0
- package/src/adapters/scholar-artifacts/pdf.ts +133 -0
- package/src/adapters/semantic-scholar/papers.ts +98 -6
- package/src/adapters/unpaywall/works.ts +141 -12
- package/src/adapters/wanfang/search.ts +57 -7
- package/src/adapters/cnki/search.yaml +0 -49
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @owner src::adapters::cnki::search
|
|
3
|
+
* @does Registers CNKI Scholar title search against the current public KNS criteria endpoint.
|
|
4
|
+
* @needs scholar.cnki.net KNS criteria API, node:crypto, src/registry.ts, src/types/scholarly.ts
|
|
5
|
+
* @feeds `unicli cnki search`, src/commands/scholar.ts via scholar.search, scholar doctor live probes
|
|
6
|
+
* @breaks CNKI token/request-shape drift surfaces as upstream_error; access-controlled PDF/order URLs are exposed as relation hints, not as a scholar.pdf guarantee.
|
|
7
|
+
* @invariants Search uses CNKI's current all-database class id; rows must carry source-local id/title/source_adapter/retrieved_at; no stale API fallback is kept.
|
|
8
|
+
* @side-effects HTTPS egress to scholar.cnki.net only
|
|
9
|
+
* @perf O(limit) JSON mapping after one POST request.
|
|
10
|
+
* @concurrency safe
|
|
11
|
+
* @test tests/unit/adapters/scholar-sources.test.ts; live smoke via `unicli cnki search <query>` and `unicli scholar doctor --sources cnki --live`
|
|
12
|
+
* @stability experimental
|
|
13
|
+
* @since 2026-06-27
|
|
14
|
+
*/
|
|
15
|
+
import { createCipheriv } from "node:crypto";
|
|
16
|
+
import { cli, Strategy } from "../../registry.js";
|
|
17
|
+
const CNKI_QUERY_API = "https://scholar.cnki.net/restapi/kns8s-api/v2/criteria/query";
|
|
18
|
+
const CNKI_TOKEN_SECRET = "cf4e8f25360248f89248af06a55d21ea";
|
|
19
|
+
const CNKI_CLIENT_ID = "c5fd4ef0-d314-4888-b0a7-f6190eaefaf0";
|
|
20
|
+
const CNKI_ALL_DATABASE_CLASS_ID = "WD0FTY92";
|
|
21
|
+
const CNKI_REFERER = "https://scholar.cnki.net/";
|
|
22
|
+
const MAX_LIMIT = 50;
|
|
23
|
+
function str(value) {
|
|
24
|
+
return typeof value === "string" ? value.trim() : "";
|
|
25
|
+
}
|
|
26
|
+
function stripHtml(value) {
|
|
27
|
+
return str(value)
|
|
28
|
+
.replace(/<[^>]*>/g, "")
|
|
29
|
+
.replace(/ /g, " ")
|
|
30
|
+
.replace(/&/g, "&")
|
|
31
|
+
.replace(/</g, "<")
|
|
32
|
+
.replace(/>/g, ">")
|
|
33
|
+
.replace(/"/g, '"')
|
|
34
|
+
.replace(/'/g, "'")
|
|
35
|
+
.replace(/\s+/g, " ")
|
|
36
|
+
.trim();
|
|
37
|
+
}
|
|
38
|
+
function metadataValue(row, name) {
|
|
39
|
+
const entry = row.metadata?.find((candidate) => str(candidate.name).toUpperCase() === name);
|
|
40
|
+
return stripHtml(entry?.value);
|
|
41
|
+
}
|
|
42
|
+
function relationUrl(relations, scope) {
|
|
43
|
+
const found = relations?.find((relation) => str(relation.scope).toUpperCase() === scope);
|
|
44
|
+
return str(found?.url);
|
|
45
|
+
}
|
|
46
|
+
function firstRelationUrl(row, scopes) {
|
|
47
|
+
for (const scope of scopes) {
|
|
48
|
+
const rowUrl = relationUrl(row.relations, scope);
|
|
49
|
+
if (rowUrl)
|
|
50
|
+
return rowUrl;
|
|
51
|
+
const sourceUrl = relationUrl(row.source?.relations, scope);
|
|
52
|
+
if (sourceUrl)
|
|
53
|
+
return sourceUrl;
|
|
54
|
+
}
|
|
55
|
+
return "";
|
|
56
|
+
}
|
|
57
|
+
function parseYear(value) {
|
|
58
|
+
const year = Number(value.match(/(?:19|20)\d{2}/)?.[0]);
|
|
59
|
+
return Number.isInteger(year) ? year : undefined;
|
|
60
|
+
}
|
|
61
|
+
function splitMetadataAuthors(value) {
|
|
62
|
+
return value
|
|
63
|
+
.split(/[;;]/)
|
|
64
|
+
.map((author) => author.trim())
|
|
65
|
+
.filter(Boolean);
|
|
66
|
+
}
|
|
67
|
+
function cnkiError(message, code = "upstream_error") {
|
|
68
|
+
const error = new Error(message);
|
|
69
|
+
error.code = code;
|
|
70
|
+
error.suggestion =
|
|
71
|
+
"CNKI changed or rejected the public KNS criteria query. Run `unicli describe cnki search`, then inspect scholar.cnki.net's current search request before changing the adapter.";
|
|
72
|
+
error.retryable = false;
|
|
73
|
+
return error;
|
|
74
|
+
}
|
|
75
|
+
export function createCnkiVvToken(timestamp = Date.now()) {
|
|
76
|
+
const cipher = createCipheriv("aes-256-ecb", Buffer.from(CNKI_TOKEN_SECRET, "utf8"), null);
|
|
77
|
+
cipher.setAutoPadding(true);
|
|
78
|
+
return Buffer.concat([
|
|
79
|
+
cipher.update(JSON.stringify({ timestamp }), "utf8"),
|
|
80
|
+
cipher.final(),
|
|
81
|
+
]).toString("hex");
|
|
82
|
+
}
|
|
83
|
+
export function buildCnkiSearchPayload(query, limit) {
|
|
84
|
+
return {
|
|
85
|
+
Resource: "",
|
|
86
|
+
Classid: CNKI_ALL_DATABASE_CLASS_ID,
|
|
87
|
+
Products: "",
|
|
88
|
+
KuaKuCode: "",
|
|
89
|
+
QNode: {
|
|
90
|
+
QGroup: [
|
|
91
|
+
{
|
|
92
|
+
Key: "",
|
|
93
|
+
Title: "",
|
|
94
|
+
Logic: 0,
|
|
95
|
+
Items: [],
|
|
96
|
+
ChildItems: [
|
|
97
|
+
{
|
|
98
|
+
Key: "subject",
|
|
99
|
+
Title: "",
|
|
100
|
+
Logic: 0,
|
|
101
|
+
Items: [
|
|
102
|
+
{
|
|
103
|
+
Key: "",
|
|
104
|
+
Title: "题名",
|
|
105
|
+
Logic: 0,
|
|
106
|
+
Field: "TI",
|
|
107
|
+
Operator: "FUZZY",
|
|
108
|
+
Value: query,
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
ChildItems: [],
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
ExScope: "1",
|
|
118
|
+
SearchType: 2,
|
|
119
|
+
SearchFrom: 1,
|
|
120
|
+
Rlang: "",
|
|
121
|
+
sort: "PT",
|
|
122
|
+
sortType: "DESC",
|
|
123
|
+
pageNum: 1,
|
|
124
|
+
pageSize: limit,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export function mapCnkiSearchRow(row, rank) {
|
|
128
|
+
const title = metadataValue(row, "TI") || metadataValue(row, "ENTI");
|
|
129
|
+
const doi = metadataValue(row, "DOI").replace(/^doi:/i, "");
|
|
130
|
+
const date = metadataValue(row, "PT");
|
|
131
|
+
const source = metadataValue(row, "LY") || stripHtml(row.source?.title);
|
|
132
|
+
const authorNames = row.authors?.map((author) => stripHtml(author.title)).filter(Boolean) ?? [];
|
|
133
|
+
const authors = authorNames.length
|
|
134
|
+
? authorNames
|
|
135
|
+
: splitMetadataAuthors(metadataValue(row, "AU"));
|
|
136
|
+
const sourceUrl = firstRelationUrl(row, ["ABSTRACT", "PUBLICATION"]);
|
|
137
|
+
const pdfUrl = firstRelationUrl(row, ["PDF"]);
|
|
138
|
+
const id = metadataValue(row, "ID") ||
|
|
139
|
+
metadataValue(row, "FN") ||
|
|
140
|
+
doi ||
|
|
141
|
+
sourceUrl ||
|
|
142
|
+
title;
|
|
143
|
+
if (!id || !title) {
|
|
144
|
+
throw cnkiError("CNKI returned a row without a stable id or title.");
|
|
145
|
+
}
|
|
146
|
+
const citedByCount = Number(metadataValue(row, "CF"));
|
|
147
|
+
return {
|
|
148
|
+
id,
|
|
149
|
+
rank,
|
|
150
|
+
title,
|
|
151
|
+
authors,
|
|
152
|
+
year: parseYear(date) ?? parseYear(str(row.source?.year)),
|
|
153
|
+
date: date || undefined,
|
|
154
|
+
venue: source || undefined,
|
|
155
|
+
type: metadataValue(row, "DB") || stripHtml(row.source?.type) || undefined,
|
|
156
|
+
abstract: metadataValue(row, "AB") || undefined,
|
|
157
|
+
doi: doi || undefined,
|
|
158
|
+
cited_by_count: Number.isFinite(citedByCount) ? citedByCount : undefined,
|
|
159
|
+
pdf_url: pdfUrl || undefined,
|
|
160
|
+
landing_url: sourceUrl || undefined,
|
|
161
|
+
source_adapter: "cnki",
|
|
162
|
+
source_url: sourceUrl || undefined,
|
|
163
|
+
retrieved_at: new Date().toISOString(),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
async function fetchCnkiSearch(payload) {
|
|
167
|
+
const url = new URL(CNKI_QUERY_API);
|
|
168
|
+
url.searchParams.set("vv", createCnkiVvToken());
|
|
169
|
+
url.searchParams.set("clientId", CNKI_CLIENT_ID);
|
|
170
|
+
const response = await fetch(url, {
|
|
171
|
+
method: "POST",
|
|
172
|
+
headers: {
|
|
173
|
+
Accept: "application/json, text/plain, */*",
|
|
174
|
+
"Content-Type": "application/json;charset=UTF-8",
|
|
175
|
+
Origin: "https://scholar.cnki.net",
|
|
176
|
+
Referer: CNKI_REFERER,
|
|
177
|
+
"User-Agent": "Mozilla/5.0 (compatible; Uni-CLI/1.0; +https://github.com/olo-dot-io/Uni-CLI)",
|
|
178
|
+
Version: "",
|
|
179
|
+
},
|
|
180
|
+
body: JSON.stringify(payload),
|
|
181
|
+
});
|
|
182
|
+
if (!response.ok) {
|
|
183
|
+
throw cnkiError(`CNKI search returned HTTP ${response.status}.`);
|
|
184
|
+
}
|
|
185
|
+
const json = (await response.json());
|
|
186
|
+
const code = Number(json.code);
|
|
187
|
+
if (code !== 0) {
|
|
188
|
+
throw cnkiError(`CNKI search returned code ${String(json.code)}: ${str(json.message)}`);
|
|
189
|
+
}
|
|
190
|
+
return json;
|
|
191
|
+
}
|
|
192
|
+
cli({
|
|
193
|
+
site: "cnki",
|
|
194
|
+
name: "search",
|
|
195
|
+
description: "Search CNKI academic papers by title",
|
|
196
|
+
domain: "scholar.cnki.net",
|
|
197
|
+
strategy: Strategy.PUBLIC,
|
|
198
|
+
adapter_path: "src/adapters/cnki/search.ts",
|
|
199
|
+
args: [
|
|
200
|
+
{ name: "query", type: "str", required: true, positional: true },
|
|
201
|
+
{ name: "limit", type: "int", default: 20 },
|
|
202
|
+
],
|
|
203
|
+
columns: [
|
|
204
|
+
"rank",
|
|
205
|
+
"id",
|
|
206
|
+
"title",
|
|
207
|
+
"authors",
|
|
208
|
+
"venue",
|
|
209
|
+
"year",
|
|
210
|
+
"doi",
|
|
211
|
+
"cited_by_count",
|
|
212
|
+
"pdf_url",
|
|
213
|
+
"source_url",
|
|
214
|
+
],
|
|
215
|
+
capabilities: ["http.fetch", "scholar.search"],
|
|
216
|
+
func: async (_page, kwargs) => {
|
|
217
|
+
const query = str(kwargs.query);
|
|
218
|
+
if (!query) {
|
|
219
|
+
const error = new Error("cnki search query cannot be empty.");
|
|
220
|
+
error.code = "invalid_input";
|
|
221
|
+
error.suggestion =
|
|
222
|
+
"Pass a CNKI title keyword, for example `unicli cnki search 人工智能`.";
|
|
223
|
+
error.retryable = false;
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
const requestedLimit = Number(kwargs.limit ?? 20);
|
|
227
|
+
const limit = Number.isFinite(requestedLimit)
|
|
228
|
+
? Math.min(Math.max(Math.trunc(requestedLimit), 1), MAX_LIMIT)
|
|
229
|
+
: 20;
|
|
230
|
+
const payload = buildCnkiSearchPayload(query, limit);
|
|
231
|
+
const response = await fetchCnkiSearch(payload);
|
|
232
|
+
const rows = Array.isArray(response.data?.data) ? response.data.data : [];
|
|
233
|
+
return rows.map((row, index) => mapCnkiSearchRow(row, index + 1));
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/adapters/cnki/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @owner src::adapters::cvf::papers
|
|
3
|
-
* @does Registers CVF OpenAccess conference paper search for CVPR/ICCV/ECCV-style proceedings pages.
|
|
4
|
-
* @needs openaccess.thecvf.com static proceedings HTML, src/registry.ts
|
|
5
|
-
* @feeds src/commands/scholar.ts via scholar.search, scholar.pdf, and scholar.venue
|
|
6
|
-
* @breaks CVF markup drift
|
|
7
|
-
* @invariants Venue/year map to explicit CVF event pages;
|
|
8
|
-
* @side-effects HTTPS egress to openaccess.thecvf.com
|
|
9
|
-
* @perf O(N) over one proceedings HTML page
|
|
3
|
+
* @does Registers CVF OpenAccess conference paper search, detail retrieval, and PDF text reading for CVPR/ICCV/ECCV-style proceedings pages.
|
|
4
|
+
* @needs openaccess.thecvf.com static proceedings HTML/PDFs, src/adapters/scholar-artifacts/pdf-read.ts, src/registry.ts
|
|
5
|
+
* @feeds src/commands/scholar.ts via scholar.search, scholar.get, scholar.pdf, scholar.fulltext, and scholar.venue
|
|
6
|
+
* @breaks CVF markup/PDF drift, denied downloads, or missing pdftotext surface as explicit adapter errors rather than non-CVF fallbacks.
|
|
7
|
+
* @invariants Venue/year map to explicit CVF event pages; paper detail prefers citation_* metadata over scraped display blocks.
|
|
8
|
+
* @side-effects HTTPS egress to openaccess.thecvf.com; read writes one PDF artifact and executes pdftotext.
|
|
9
|
+
* @perf O(N) over one proceedings HTML page; read is O(PDF bytes + selected pages)
|
|
10
10
|
* @concurrency safe
|
|
11
11
|
* @test tests/unit/adapters/scholar-sources.test.ts
|
|
12
12
|
* @stability experimental
|
|
13
13
|
* @since 2026-05-19
|
|
14
14
|
*/
|
|
15
15
|
import type { ScholarlyWorkRecord } from "../../types/scholarly.js";
|
|
16
|
+
export declare const CVF_HTTP_HEADERS: {
|
|
17
|
+
readonly Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
|
|
18
|
+
readonly "User-Agent": "unicli-cvf/1.0 (https://github.com/olo-dot-io/Uni-CLI)";
|
|
19
|
+
};
|
|
20
|
+
export declare function parseCvfPaperPage(html: string, sourceUrl: string): ScholarlyWorkRecord;
|
|
16
21
|
export declare function parseCvfRows(html: string, event?: string): ScholarlyWorkRecord[];
|
|
17
22
|
//# sourceMappingURL=papers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"papers.d.ts","sourceRoot":"","sources":["../../../src/adapters/cvf/papers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"papers.d.ts","sourceRoot":"","sources":["../../../src/adapters/cvf/papers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAOpE,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAiGX,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,mBAAmB,CAsCrB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,SAAa,GACjB,mBAAmB,EAAE,CA2BvB"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @owner src::adapters::cvf::papers
|
|
3
|
-
* @does Registers CVF OpenAccess conference paper search for CVPR/ICCV/ECCV-style proceedings pages.
|
|
4
|
-
* @needs openaccess.thecvf.com static proceedings HTML, src/registry.ts
|
|
5
|
-
* @feeds src/commands/scholar.ts via scholar.search, scholar.pdf, and scholar.venue
|
|
6
|
-
* @breaks CVF markup drift
|
|
7
|
-
* @invariants Venue/year map to explicit CVF event pages;
|
|
8
|
-
* @side-effects HTTPS egress to openaccess.thecvf.com
|
|
9
|
-
* @perf O(N) over one proceedings HTML page
|
|
3
|
+
* @does Registers CVF OpenAccess conference paper search, detail retrieval, and PDF text reading for CVPR/ICCV/ECCV-style proceedings pages.
|
|
4
|
+
* @needs openaccess.thecvf.com static proceedings HTML/PDFs, src/adapters/scholar-artifacts/pdf-read.ts, src/registry.ts
|
|
5
|
+
* @feeds src/commands/scholar.ts via scholar.search, scholar.get, scholar.pdf, scholar.fulltext, and scholar.venue
|
|
6
|
+
* @breaks CVF markup/PDF drift, denied downloads, or missing pdftotext surface as explicit adapter errors rather than non-CVF fallbacks.
|
|
7
|
+
* @invariants Venue/year map to explicit CVF event pages; paper detail prefers citation_* metadata over scraped display blocks.
|
|
8
|
+
* @side-effects HTTPS egress to openaccess.thecvf.com; read writes one PDF artifact and executes pdftotext.
|
|
9
|
+
* @perf O(N) over one proceedings HTML page; read is O(PDF bytes + selected pages)
|
|
10
10
|
* @concurrency safe
|
|
11
11
|
* @test tests/unit/adapters/scholar-sources.test.ts
|
|
12
12
|
* @stability experimental
|
|
13
13
|
* @since 2026-05-19
|
|
14
14
|
*/
|
|
15
15
|
import { cli, Strategy } from "../../registry.js";
|
|
16
|
+
import { readScholarPdf } from "../scholar-artifacts/pdf-read.js";
|
|
17
|
+
import { Agent, request } from "undici";
|
|
16
18
|
const ORIGIN = "https://openaccess.thecvf.com";
|
|
19
|
+
const CVF_USER_AGENT = "unicli-cvf/1.0 (https://github.com/olo-dot-io/Uni-CLI)";
|
|
20
|
+
const CVF_HTTP_AGENT = new Agent({ connect: { timeout: 30_000 } });
|
|
21
|
+
export const CVF_HTTP_HEADERS = {
|
|
22
|
+
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
|
|
23
|
+
"User-Agent": CVF_USER_AGENT,
|
|
24
|
+
};
|
|
17
25
|
function decode(value) {
|
|
18
26
|
return value
|
|
19
27
|
.replace(/&/g, "&")
|
|
@@ -29,6 +37,21 @@ function absolute(path) {
|
|
|
29
37
|
? path
|
|
30
38
|
: `${ORIGIN}${path.startsWith("/") ? "" : "/"}${path}`;
|
|
31
39
|
}
|
|
40
|
+
function metaContents(html, name) {
|
|
41
|
+
const values = [];
|
|
42
|
+
const re = new RegExp(`<meta\\s+name=["']${name}["']\\s+content=["']([^"']*)["'][^>]*>`, "gi");
|
|
43
|
+
let match;
|
|
44
|
+
while ((match = re.exec(html)) !== null)
|
|
45
|
+
values.push(decode(match[1]));
|
|
46
|
+
return values;
|
|
47
|
+
}
|
|
48
|
+
function firstMetaContent(html, name) {
|
|
49
|
+
return metaContents(html, name)[0] ?? "";
|
|
50
|
+
}
|
|
51
|
+
function parseYear(value) {
|
|
52
|
+
const year = value.match(/\d{4}/)?.[0];
|
|
53
|
+
return year ? Number(year) : undefined;
|
|
54
|
+
}
|
|
32
55
|
function eventId(venue, year) {
|
|
33
56
|
const v = String(venue ?? "CVPR")
|
|
34
57
|
.trim()
|
|
@@ -40,6 +63,69 @@ function eventId(venue, year) {
|
|
|
40
63
|
throw new Error(`cvf year "${y}" is not valid.`);
|
|
41
64
|
return `${v}${y}`;
|
|
42
65
|
}
|
|
66
|
+
function requireCvfPaperId(value) {
|
|
67
|
+
const raw = String(value ?? "").trim();
|
|
68
|
+
const id = raw.match(/\/html\/([^/?#]+\.html)/)?.[1]?.replace(/\.html$/, "") ??
|
|
69
|
+
raw.replace(/\.html$/, "");
|
|
70
|
+
if (!/^[A-Za-z0-9_.-]+$/.test(id)) {
|
|
71
|
+
throw new Error(`CVF paper id "${raw}" is not valid.`);
|
|
72
|
+
}
|
|
73
|
+
return id;
|
|
74
|
+
}
|
|
75
|
+
function paperUrl(id, event) {
|
|
76
|
+
return `${ORIGIN}/content/${event}/html/${id}.html`;
|
|
77
|
+
}
|
|
78
|
+
function cvfUpstreamError(label, detail) {
|
|
79
|
+
const error = new Error(`${label} failed: ${detail}.`);
|
|
80
|
+
error.code = "upstream_error";
|
|
81
|
+
error.suggestion =
|
|
82
|
+
"CVF OpenAccess did not return the expected public proceedings page on this network path; retry later or verify the official openaccess.thecvf.com page manually.";
|
|
83
|
+
error.retryable =
|
|
84
|
+
/fetch failed|timeout|ECONNRESET|ETIMEDOUT|HTTP (429|5\d\d)/i.test(detail);
|
|
85
|
+
error.alternatives = [];
|
|
86
|
+
return error;
|
|
87
|
+
}
|
|
88
|
+
function parseListAuthors(block) {
|
|
89
|
+
const beforeLinks = block.split(/\[<a\s+href=/i)[0] ?? block;
|
|
90
|
+
const dd = beforeLinks.match(/<dd>([\s\S]*?)(?:<\/dd>|$)/i)?.[1] ?? "";
|
|
91
|
+
const text = decode(dd.replace(/<div class="bibref[\s\S]*$/i, " ").replace(/<[^>]+>/g, " "));
|
|
92
|
+
const authors = text
|
|
93
|
+
.replace(/;\s*Proceedings[\s\S]*$/i, "")
|
|
94
|
+
.split(",")
|
|
95
|
+
.map((author) => author.trim())
|
|
96
|
+
.filter(Boolean);
|
|
97
|
+
return authors.length > 0 ? authors : undefined;
|
|
98
|
+
}
|
|
99
|
+
export function parseCvfPaperPage(html, sourceUrl) {
|
|
100
|
+
const title = firstMetaContent(html, "citation_title") ||
|
|
101
|
+
decode(html
|
|
102
|
+
.match(/<div id="papertitle">([\s\S]*?)<dd>/i)?.[1]
|
|
103
|
+
?.replace(/<[^>]+>/g, " ") ?? "");
|
|
104
|
+
if (!title)
|
|
105
|
+
throw new Error("CVF paper page did not expose a title.");
|
|
106
|
+
const event = sourceUrl.match(/\/content\/([A-Z]+\d{4})\//)?.[1] ?? undefined;
|
|
107
|
+
const id = sourceUrl
|
|
108
|
+
.split("/")
|
|
109
|
+
.pop()
|
|
110
|
+
?.replace(/\.html$/, "") ?? title;
|
|
111
|
+
const pdfUrl = firstMetaContent(html, "citation_pdf_url") ||
|
|
112
|
+
html.match(/<a href="([^"]+\.pdf)">pdf<\/a>/i)?.[1] ||
|
|
113
|
+
"";
|
|
114
|
+
return {
|
|
115
|
+
id,
|
|
116
|
+
title,
|
|
117
|
+
authors: metaContents(html, "citation_author"),
|
|
118
|
+
year: parseYear(firstMetaContent(html, "citation_publication_date")) ??
|
|
119
|
+
(event ? Number(event.slice(-4)) : undefined),
|
|
120
|
+
venue: firstMetaContent(html, "citation_conference_title") ||
|
|
121
|
+
event?.replace(/\d{4}$/, ""),
|
|
122
|
+
abstract: decode(html.match(/<div id="abstract">([\s\S]*?)<\/div>/i)?.[1] ?? "").replace(/<[^>]+>/g, " ") || undefined,
|
|
123
|
+
pdf_url: pdfUrl ? absolute(pdfUrl) : undefined,
|
|
124
|
+
source_adapter: "cvf",
|
|
125
|
+
source_url: sourceUrl,
|
|
126
|
+
retrieved_at: new Date().toISOString(),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
43
129
|
export function parseCvfRows(html, event = "CVPR2024") {
|
|
44
130
|
const out = [];
|
|
45
131
|
const re = /<dt class="ptitle">[\s\S]*?<a href="([^"]+)">([\s\S]*?)<\/a><\/dt>([\s\S]*?)(?=<dt class="ptitle">|$)/g;
|
|
@@ -49,21 +135,13 @@ export function parseCvfRows(html, event = "CVPR2024") {
|
|
|
49
135
|
const title = decode(match[2].replace(/<[^>]+>/g, " "));
|
|
50
136
|
const block = match[3];
|
|
51
137
|
const pdf = block.match(/<a href="([^"]+\.pdf)">pdf<\/a>/i)?.[1] ?? "";
|
|
52
|
-
const authorText = block
|
|
53
|
-
.replace(/\[[\s\S]*?\]/g, " ")
|
|
54
|
-
.replace(/<form[\s\S]*?<\/form>/g, " ")
|
|
55
|
-
.replace(/<[^>]+>/g, " ");
|
|
56
|
-
const authors = decode(authorText)
|
|
57
|
-
.split(",")
|
|
58
|
-
.map((author) => author.trim())
|
|
59
|
-
.filter(Boolean);
|
|
60
138
|
out.push({
|
|
61
139
|
id: sourceUrl
|
|
62
140
|
.split("/")
|
|
63
141
|
.pop()
|
|
64
142
|
?.replace(/\.html$/, "") ?? title,
|
|
65
143
|
title,
|
|
66
|
-
authors:
|
|
144
|
+
authors: parseListAuthors(block),
|
|
67
145
|
year: Number(event.slice(-4)),
|
|
68
146
|
venue: event.replace(/\d{4}$/, ""),
|
|
69
147
|
pdf_url: pdf ? absolute(pdf) : undefined,
|
|
@@ -74,6 +152,45 @@ export function parseCvfRows(html, event = "CVPR2024") {
|
|
|
74
152
|
}
|
|
75
153
|
return out;
|
|
76
154
|
}
|
|
155
|
+
async function fetchCvfHtml(url, label) {
|
|
156
|
+
let response;
|
|
157
|
+
try {
|
|
158
|
+
response = await request(url, {
|
|
159
|
+
dispatcher: CVF_HTTP_AGENT,
|
|
160
|
+
headers: CVF_HTTP_HEADERS,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
throw cvfUpstreamError(label, error instanceof Error ? error.message : String(error));
|
|
165
|
+
}
|
|
166
|
+
if (response.statusCode === 404)
|
|
167
|
+
throw new Error(`${label} returned no page.`);
|
|
168
|
+
if (response.statusCode < 200 || response.statusCode >= 300) {
|
|
169
|
+
throw cvfUpstreamError(label, `HTTP ${response.statusCode}`);
|
|
170
|
+
}
|
|
171
|
+
return response.body.text();
|
|
172
|
+
}
|
|
173
|
+
async function readCvfPaperPdf(row, kwargs) {
|
|
174
|
+
if (!row.pdf_url)
|
|
175
|
+
throw new Error(`CVF paper ${row.id} has no PDF URL.`);
|
|
176
|
+
return readScholarPdf({
|
|
177
|
+
id: row.id,
|
|
178
|
+
title: row.title,
|
|
179
|
+
source_adapter: "cvf",
|
|
180
|
+
source_url: row.source_url,
|
|
181
|
+
pdf_url: row.pdf_url,
|
|
182
|
+
output: kwargs.output,
|
|
183
|
+
filename: kwargs.filename,
|
|
184
|
+
"first-page": kwargs["first-page"] ?? kwargs.firstPage,
|
|
185
|
+
"last-page": kwargs["last-page"] ?? kwargs.lastPage,
|
|
186
|
+
"max-chars": kwargs["max-chars"] ?? kwargs.maxChars,
|
|
187
|
+
}, {
|
|
188
|
+
site: "cvf",
|
|
189
|
+
command: "read",
|
|
190
|
+
defaultOutput: "./cvf-downloads",
|
|
191
|
+
userAgent: CVF_USER_AGENT,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
77
194
|
cli({
|
|
78
195
|
site: "cvf",
|
|
79
196
|
name: "search",
|
|
@@ -100,18 +217,8 @@ cli({
|
|
|
100
217
|
if (!query)
|
|
101
218
|
throw new Error("cvf search query cannot be empty.");
|
|
102
219
|
const event = eventId(kwargs.venue, kwargs.year);
|
|
103
|
-
const response = await fetch(`${ORIGIN}/${event}?day=all`, {
|
|
104
|
-
headers: {
|
|
105
|
-
Accept: "*/*",
|
|
106
|
-
"User-Agent": "unicli-cvf/1.0 (https://github.com/olo-dot-io/Uni-CLI)",
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
if (response.status === 404)
|
|
110
|
-
throw new Error(`CVF ${event} returned no proceedings page.`);
|
|
111
|
-
if (!response.ok)
|
|
112
|
-
throw new Error(`CVF ${event} returned HTTP ${response.status}.`);
|
|
113
220
|
const limit = Math.min(Math.max(Number(kwargs.limit ?? 20), 1), 200);
|
|
114
|
-
const rows = parseCvfRows(await
|
|
221
|
+
const rows = parseCvfRows(await fetchCvfHtml(`${ORIGIN}/${event}?day=all`, `CVF ${event}`), event)
|
|
115
222
|
.filter((row) => `${row.title} ${row.authors?.join(" ") ?? ""}`
|
|
116
223
|
.toLowerCase()
|
|
117
224
|
.includes(query))
|
|
@@ -121,4 +228,80 @@ cli({
|
|
|
121
228
|
return rows;
|
|
122
229
|
},
|
|
123
230
|
});
|
|
231
|
+
cli({
|
|
232
|
+
site: "cvf",
|
|
233
|
+
name: "paper",
|
|
234
|
+
description: "Fetch CVF OpenAccess paper metadata by page id",
|
|
235
|
+
domain: "openaccess.thecvf.com",
|
|
236
|
+
strategy: Strategy.PUBLIC,
|
|
237
|
+
args: [
|
|
238
|
+
{ name: "id", type: "str", required: true, positional: true },
|
|
239
|
+
{ name: "venue", type: "str", default: "CVPR" },
|
|
240
|
+
{ name: "year", type: "str", default: "2024" },
|
|
241
|
+
],
|
|
242
|
+
columns: ["id", "title", "authors", "year", "venue", "pdf_url", "source_url"],
|
|
243
|
+
capabilities: ["http.fetch", "scholar.get", "scholar.pdf"],
|
|
244
|
+
func: async (_page, kwargs) => {
|
|
245
|
+
const event = eventId(kwargs.venue, kwargs.year);
|
|
246
|
+
const id = requireCvfPaperId(kwargs.id ?? kwargs.ref);
|
|
247
|
+
const url = paperUrl(id, event);
|
|
248
|
+
return [parseCvfPaperPage(await fetchCvfHtml(url, `CVF paper ${id}`), url)];
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
cli({
|
|
252
|
+
site: "cvf",
|
|
253
|
+
name: "read",
|
|
254
|
+
description: "Download a CVF OpenAccess paper PDF by page id and extract text",
|
|
255
|
+
domain: "openaccess.thecvf.com",
|
|
256
|
+
strategy: Strategy.PUBLIC,
|
|
257
|
+
args: [
|
|
258
|
+
{ name: "id", type: "str", required: true, positional: true },
|
|
259
|
+
{ name: "venue", type: "str", default: "CVPR" },
|
|
260
|
+
{ name: "year", type: "str", default: "2024" },
|
|
261
|
+
{
|
|
262
|
+
name: "output",
|
|
263
|
+
type: "str",
|
|
264
|
+
default: "./cvf-downloads",
|
|
265
|
+
description: "Output directory for the downloaded PDF",
|
|
266
|
+
"x-unicli-kind": "path",
|
|
267
|
+
},
|
|
268
|
+
{ name: "filename", type: "str", description: "Output PDF filename" },
|
|
269
|
+
{ name: "first-page", type: "int", default: 1, description: "First page" },
|
|
270
|
+
{ name: "last-page", type: "int", default: 20, description: "Last page" },
|
|
271
|
+
{
|
|
272
|
+
name: "max-chars",
|
|
273
|
+
type: "int",
|
|
274
|
+
default: 40000,
|
|
275
|
+
description: "Maximum extracted text characters",
|
|
276
|
+
},
|
|
277
|
+
],
|
|
278
|
+
columns: [
|
|
279
|
+
"id",
|
|
280
|
+
"title",
|
|
281
|
+
"source_adapter",
|
|
282
|
+
"source_url",
|
|
283
|
+
"pdf_url",
|
|
284
|
+
"path",
|
|
285
|
+
"text_source",
|
|
286
|
+
"text",
|
|
287
|
+
"text_chars",
|
|
288
|
+
"text_truncated",
|
|
289
|
+
],
|
|
290
|
+
capabilities: [
|
|
291
|
+
"http.fetch",
|
|
292
|
+
"http.download",
|
|
293
|
+
"subprocess.exec",
|
|
294
|
+
"scholar.fulltext",
|
|
295
|
+
"scholar.pdf",
|
|
296
|
+
],
|
|
297
|
+
executables: ["pdftotext"],
|
|
298
|
+
minimum_capability: "subprocess.exec",
|
|
299
|
+
func: async (_page, kwargs) => {
|
|
300
|
+
const event = eventId(kwargs.venue, kwargs.year);
|
|
301
|
+
const id = requireCvfPaperId(kwargs.id ?? kwargs.ref);
|
|
302
|
+
const url = paperUrl(id, event);
|
|
303
|
+
const row = parseCvfPaperPage(await fetchCvfHtml(url, `CVF paper ${id}`), url);
|
|
304
|
+
return [await readCvfPaperPdf(row, kwargs)];
|
|
305
|
+
},
|
|
306
|
+
});
|
|
124
307
|
//# sourceMappingURL=papers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"papers.js","sourceRoot":"","sources":["../../../src/adapters/cvf/papers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"papers.js","sourceRoot":"","sources":["../../../src/adapters/cvf/papers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @owner
|
|
3
|
-
* @does
|
|
4
|
-
* @needs
|
|
5
|
-
* @feeds
|
|
6
|
-
* @breaks
|
|
2
|
+
* @owner src::adapters::dblp::publications
|
|
3
|
+
* @does Registers DBLP publication, paper, author, and venue commands for computer-science bibliography discovery.
|
|
4
|
+
* @needs dblp public JSON/XML APIs, conservative XML field extraction, bounded result limits, src/registry.ts
|
|
5
|
+
* @feeds src/commands/scholar.ts via scholar.search, scholar.get, scholar.pdf, scholar.author, and scholar.venue
|
|
6
|
+
* @breaks DBLP API envelope drift, record-key parsing drift, or missing normalized ids makes CS bibliography rows invisible to the scholar meta-command.
|
|
7
|
+
* @invariants DBLP `key` is the source-local scholarly id and is mirrored as `dblp_key`; DOI remains a separate cross-source dedupe key.
|
|
8
|
+
* @side-effects HTTPS egress to dblp.org only
|
|
9
|
+
* @perf O(limit) JSON/XML mapping after one DBLP API request per command
|
|
10
|
+
* @concurrency safe
|
|
11
|
+
* @test src/adapters/dblp/publications.test.ts; live smoke via `unicli dblp search <query>` and `unicli scholar doctor --sources dblp --live`
|
|
12
|
+
* @stability experimental
|
|
13
|
+
* @since 2026-05-19
|
|
7
14
|
*/
|
|
8
15
|
interface DblpAuthorField {
|
|
9
16
|
author?: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publications.d.ts","sourceRoot":"","sources":["../../../src/adapters/dblp/publications.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"publications.d.ts","sourceRoot":"","sources":["../../../src/adapters/dblp/publications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,OAAO;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAaD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAU,GAAG,MAAM,CAIxE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,MAAM,CAOR;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOvD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIjD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAaxD;AAuBD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,OAAO,GAAG,MAAM,EAAE,CAiBpE;AAWD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAM7D;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD;AA4BD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiCjE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CASxD"}
|