@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.
Files changed (184) hide show
  1. package/AGENTS.md +2 -2
  2. package/README.md +3 -3
  3. package/README.zh-CN.md +3 -3
  4. package/dist/adapters/acl-anthology/papers.d.ts +16 -9
  5. package/dist/adapters/acl-anthology/papers.d.ts.map +1 -1
  6. package/dist/adapters/acl-anthology/papers.js +322 -58
  7. package/dist/adapters/acl-anthology/papers.js.map +1 -1
  8. package/dist/adapters/arxiv/papers.d.ts +22 -4
  9. package/dist/adapters/arxiv/papers.d.ts.map +1 -1
  10. package/dist/adapters/arxiv/papers.js +202 -4
  11. package/dist/adapters/arxiv/papers.js.map +1 -1
  12. package/dist/adapters/baidu-scholar/search.d.ts +15 -1
  13. package/dist/adapters/baidu-scholar/search.d.ts.map +1 -1
  14. package/dist/adapters/baidu-scholar/search.js +72 -8
  15. package/dist/adapters/baidu-scholar/search.js.map +1 -1
  16. package/dist/adapters/biorxiv/preprints.d.ts +9 -0
  17. package/dist/adapters/biorxiv/preprints.d.ts.map +1 -0
  18. package/dist/adapters/biorxiv/preprints.js +78 -0
  19. package/dist/adapters/biorxiv/preprints.js.map +1 -0
  20. package/dist/adapters/cnki/search.d.ts +82 -0
  21. package/dist/adapters/cnki/search.d.ts.map +1 -0
  22. package/dist/adapters/cnki/search.js +236 -0
  23. package/dist/adapters/cnki/search.js.map +1 -0
  24. package/dist/adapters/cvf/papers.d.ts +12 -7
  25. package/dist/adapters/cvf/papers.d.ts.map +1 -1
  26. package/dist/adapters/cvf/papers.js +210 -27
  27. package/dist/adapters/cvf/papers.js.map +1 -1
  28. package/dist/adapters/dblp/publications.d.ts +12 -5
  29. package/dist/adapters/dblp/publications.d.ts.map +1 -1
  30. package/dist/adapters/dblp/publications.js +31 -8
  31. package/dist/adapters/dblp/publications.js.map +1 -1
  32. package/dist/adapters/google-scholar/search.d.ts +22 -1
  33. package/dist/adapters/google-scholar/search.d.ts.map +1 -1
  34. package/dist/adapters/google-scholar/search.js +129 -14
  35. package/dist/adapters/google-scholar/search.js.map +1 -1
  36. package/dist/adapters/hf/paper.d.ts +12 -3
  37. package/dist/adapters/hf/paper.d.ts.map +1 -1
  38. package/dist/adapters/hf/paper.js +65 -5
  39. package/dist/adapters/hf/paper.js.map +1 -1
  40. package/dist/adapters/medrxiv/preprints.d.ts +9 -0
  41. package/dist/adapters/medrxiv/preprints.d.ts.map +1 -0
  42. package/dist/adapters/medrxiv/preprints.js +78 -0
  43. package/dist/adapters/medrxiv/preprints.js.map +1 -0
  44. package/dist/adapters/neurips/proceedings.d.ts +8 -7
  45. package/dist/adapters/neurips/proceedings.d.ts.map +1 -1
  46. package/dist/adapters/neurips/proceedings.js +209 -21
  47. package/dist/adapters/neurips/proceedings.js.map +1 -1
  48. package/dist/adapters/openalex/works.d.ts +21 -5
  49. package/dist/adapters/openalex/works.d.ts.map +1 -1
  50. package/dist/adapters/openalex/works.js +108 -8
  51. package/dist/adapters/openalex/works.js.map +1 -1
  52. package/dist/adapters/openreview/papers.d.ts +10 -4
  53. package/dist/adapters/openreview/papers.d.ts.map +1 -1
  54. package/dist/adapters/openreview/papers.js +351 -24
  55. package/dist/adapters/openreview/papers.js.map +1 -1
  56. package/dist/adapters/pmlr/proceedings.d.ts +6 -6
  57. package/dist/adapters/pmlr/proceedings.d.ts.map +1 -1
  58. package/dist/adapters/pmlr/proceedings.js +92 -12
  59. package/dist/adapters/pmlr/proceedings.js.map +1 -1
  60. package/dist/adapters/pubmed/articles.d.ts +8 -4
  61. package/dist/adapters/pubmed/articles.d.ts.map +1 -1
  62. package/dist/adapters/pubmed/articles.js +272 -39
  63. package/dist/adapters/pubmed/articles.js.map +1 -1
  64. package/dist/adapters/rxiv/preprints.d.ts +75 -0
  65. package/dist/adapters/rxiv/preprints.d.ts.map +1 -0
  66. package/dist/adapters/rxiv/preprints.js +651 -0
  67. package/dist/adapters/rxiv/preprints.js.map +1 -0
  68. package/dist/adapters/scholar-artifacts/pdf-read.d.ts +49 -0
  69. package/dist/adapters/scholar-artifacts/pdf-read.d.ts.map +1 -0
  70. package/dist/adapters/scholar-artifacts/pdf-read.js +204 -0
  71. package/dist/adapters/scholar-artifacts/pdf-read.js.map +1 -0
  72. package/dist/adapters/scholar-artifacts/pdf.d.ts +16 -0
  73. package/dist/adapters/scholar-artifacts/pdf.d.ts.map +1 -0
  74. package/dist/adapters/scholar-artifacts/pdf.js +122 -0
  75. package/dist/adapters/scholar-artifacts/pdf.js.map +1 -0
  76. package/dist/adapters/semantic-scholar/papers.d.ts +6 -6
  77. package/dist/adapters/semantic-scholar/papers.d.ts.map +1 -1
  78. package/dist/adapters/semantic-scholar/papers.js +80 -6
  79. package/dist/adapters/semantic-scholar/papers.js.map +1 -1
  80. package/dist/adapters/unpaywall/works.d.ts +7 -7
  81. package/dist/adapters/unpaywall/works.d.ts.map +1 -1
  82. package/dist/adapters/unpaywall/works.js +104 -12
  83. package/dist/adapters/unpaywall/works.js.map +1 -1
  84. package/dist/adapters/wanfang/search.d.ts +14 -0
  85. package/dist/adapters/wanfang/search.d.ts.map +1 -1
  86. package/dist/adapters/wanfang/search.js +56 -7
  87. package/dist/adapters/wanfang/search.js.map +1 -1
  88. package/dist/browser/page.d.ts +2 -0
  89. package/dist/browser/page.d.ts.map +1 -1
  90. package/dist/browser/page.js +12 -0
  91. package/dist/browser/page.js.map +1 -1
  92. package/dist/commands/browser/actions.d.ts.map +1 -1
  93. package/dist/commands/browser/actions.js +59 -3
  94. package/dist/commands/browser/actions.js.map +1 -1
  95. package/dist/commands/scholar.d.ts +77 -5
  96. package/dist/commands/scholar.d.ts.map +1 -1
  97. package/dist/commands/scholar.js +2945 -83
  98. package/dist/commands/scholar.js.map +1 -1
  99. package/dist/core/command-contract.d.ts.map +1 -1
  100. package/dist/core/command-contract.js +5 -0
  101. package/dist/core/command-contract.js.map +1 -1
  102. package/dist/core/schema-v2.d.ts +1 -0
  103. package/dist/core/schema-v2.d.ts.map +1 -1
  104. package/dist/core/schema-v2.js +1 -0
  105. package/dist/core/schema-v2.js.map +1 -1
  106. package/dist/discovery/aliases.d.ts.map +1 -1
  107. package/dist/discovery/aliases.js +208 -0
  108. package/dist/discovery/aliases.js.map +1 -1
  109. package/dist/discovery/core-catalog.d.ts +2 -0
  110. package/dist/discovery/core-catalog.d.ts.map +1 -1
  111. package/dist/discovery/core-catalog.js +487 -0
  112. package/dist/discovery/core-catalog.js.map +1 -1
  113. package/dist/discovery/intents.d.ts.map +1 -1
  114. package/dist/discovery/intents.js +273 -2
  115. package/dist/discovery/intents.js.map +1 -1
  116. package/dist/discovery/loader.d.ts.map +1 -1
  117. package/dist/discovery/loader.js +3 -0
  118. package/dist/discovery/loader.js.map +1 -1
  119. package/dist/engine/capability-policy.d.ts.map +1 -1
  120. package/dist/engine/capability-policy.js +30 -4
  121. package/dist/engine/capability-policy.js.map +1 -1
  122. package/dist/engine/kernel/stages.d.ts.map +1 -1
  123. package/dist/engine/kernel/stages.js +3 -0
  124. package/dist/engine/kernel/stages.js.map +1 -1
  125. package/dist/engine/operation-policy.d.ts +4 -1
  126. package/dist/engine/operation-policy.d.ts.map +1 -1
  127. package/dist/engine/operation-policy.js +23 -0
  128. package/dist/engine/operation-policy.js.map +1 -1
  129. package/dist/fast-path/manifest.d.ts +3 -0
  130. package/dist/fast-path/manifest.d.ts.map +1 -1
  131. package/dist/fast-path/manifest.js.map +1 -1
  132. package/dist/fast-path/policy.d.ts.map +1 -1
  133. package/dist/fast-path/policy.js +3 -0
  134. package/dist/fast-path/policy.js.map +1 -1
  135. package/dist/manifest-compact.txt +1 -1
  136. package/dist/manifest.json +6804 -1002
  137. package/dist/registry.d.ts +2 -0
  138. package/dist/registry.d.ts.map +1 -1
  139. package/dist/registry.js +1 -0
  140. package/dist/registry.js.map +1 -1
  141. package/dist/types/scholarly.d.ts +19 -4
  142. package/dist/types/scholarly.d.ts.map +1 -1
  143. package/dist/types/scholarly.js +4 -4
  144. package/dist/types.d.ts +8 -0
  145. package/dist/types.d.ts.map +1 -1
  146. package/dist/types.js.map +1 -1
  147. package/package.json +1 -1
  148. package/server.json +2 -2
  149. package/skills/unicli/SKILL.md +1 -1
  150. package/skills/unicli-claude-code/SKILL.md +1 -1
  151. package/skills/unicli-hermes/SKILL.md +1 -1
  152. package/src/adapters/acl-anthology/papers.test.ts +111 -0
  153. package/src/adapters/acl-anthology/papers.ts +379 -71
  154. package/src/adapters/arxiv/papers.test.ts +46 -0
  155. package/src/adapters/arxiv/papers.ts +251 -4
  156. package/src/adapters/baidu-scholar/search.ts +74 -11
  157. package/src/adapters/biorxiv/preprints.ts +112 -0
  158. package/src/adapters/cnki/search.ts +357 -0
  159. package/src/adapters/cvf/papers.ts +260 -27
  160. package/src/adapters/dblp/publications.test.ts +9 -0
  161. package/src/adapters/dblp/publications.ts +31 -8
  162. package/src/adapters/google-scholar/search.ts +165 -17
  163. package/src/adapters/hf/paper.test.ts +23 -0
  164. package/src/adapters/hf/paper.ts +89 -5
  165. package/src/adapters/hf/top.yaml +34 -2
  166. package/src/adapters/huggingface-papers/daily.yaml +37 -3
  167. package/src/adapters/huggingface-papers/search.yaml +43 -9
  168. package/src/adapters/medrxiv/preprints.ts +112 -0
  169. package/src/adapters/neurips/proceedings.ts +266 -22
  170. package/src/adapters/openalex/works.test.ts +15 -4
  171. package/src/adapters/openalex/works.ts +136 -8
  172. package/src/adapters/openreview/papers.test.ts +31 -0
  173. package/src/adapters/openreview/papers.ts +407 -29
  174. package/src/adapters/pmlr/proceedings.ts +102 -12
  175. package/src/adapters/pubmed/articles.test.ts +88 -1
  176. package/src/adapters/pubmed/articles.ts +343 -44
  177. package/src/adapters/rxiv/preprints.test.ts +233 -0
  178. package/src/adapters/rxiv/preprints.ts +849 -0
  179. package/src/adapters/scholar-artifacts/pdf-read.ts +277 -0
  180. package/src/adapters/scholar-artifacts/pdf.ts +133 -0
  181. package/src/adapters/semantic-scholar/papers.ts +98 -6
  182. package/src/adapters/unpaywall/works.ts +141 -12
  183. package/src/adapters/wanfang/search.ts +57 -7
  184. package/src/adapters/cnki/search.yaml +0 -49
@@ -1,17 +1,18 @@
1
1
  /**
2
2
  * @owner src::adapters::neurips::proceedings
3
- * @does Registers NeurIPS proceedings search over the official yearly paper list.
4
- * @needs proceedings.neurips.cc static HTML, src/registry.ts
5
- * @feeds src/commands/scholar.ts via scholar.search, scholar.pdf, and scholar.venue
6
- * @breaks NeurIPS markup drift surfaces as empty parse output; no unrelated source fallback is used.
7
- * @invariants Year is explicit; paper URLs are absolutized against proceedings.neurips.cc.
8
- * @side-effects HTTPS egress to proceedings.neurips.cc only
9
- * @perf O(N) over one proceedings HTML page
3
+ * @does Registers NeurIPS proceedings search, paper detail retrieval, and PDF text reading over official paper pages.
4
+ * @needs proceedings.neurips.cc static 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 NeurIPS markup/PDF drift, denied downloads, or missing pdftotext surface as explicit adapter errors; no unrelated source fallback is used.
7
+ * @invariants Year is explicit; paper detail prefers citation_* metadata and official /file/ PDF URLs.
8
+ * @side-effects HTTPS egress to proceedings.neurips.cc; 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 function parseNeuripsPaperPage(html: string, sourceUrl: string): ScholarlyWorkRecord;
16
17
  export declare function parseNeuripsRows(html: string, year?: string): ScholarlyWorkRecord[];
17
18
  //# sourceMappingURL=proceedings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proceedings.d.ts","sourceRoot":"","sources":["../../../src/adapters/neurips/proceedings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AA4BpE,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,SAAS,GACZ,mBAAmB,EAAE,CA6BvB"}
1
+ {"version":3,"file":"proceedings.d.ts","sourceRoot":"","sources":["../../../src/adapters/neurips/proceedings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AA4FpE,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,mBAAmB,CAwCrB;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,SAAS,GACZ,mBAAmB,EAAE,CA2BvB"}
@@ -1,19 +1,21 @@
1
1
  /**
2
2
  * @owner src::adapters::neurips::proceedings
3
- * @does Registers NeurIPS proceedings search over the official yearly paper list.
4
- * @needs proceedings.neurips.cc static HTML, src/registry.ts
5
- * @feeds src/commands/scholar.ts via scholar.search, scholar.pdf, and scholar.venue
6
- * @breaks NeurIPS markup drift surfaces as empty parse output; no unrelated source fallback is used.
7
- * @invariants Year is explicit; paper URLs are absolutized against proceedings.neurips.cc.
8
- * @side-effects HTTPS egress to proceedings.neurips.cc only
9
- * @perf O(N) over one proceedings HTML page
3
+ * @does Registers NeurIPS proceedings search, paper detail retrieval, and PDF text reading over official paper pages.
4
+ * @needs proceedings.neurips.cc static 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 NeurIPS markup/PDF drift, denied downloads, or missing pdftotext surface as explicit adapter errors; no unrelated source fallback is used.
7
+ * @invariants Year is explicit; paper detail prefers citation_* metadata and official /file/ PDF URLs.
8
+ * @side-effects HTTPS egress to proceedings.neurips.cc; 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";
16
17
  const ORIGIN = "https://proceedings.neurips.cc";
18
+ const NEURIPS_USER_AGENT = "unicli-neurips/1.0 (https://github.com/olo-dot-io/Uni-CLI)";
17
19
  function decode(value) {
18
20
  return value
19
21
  .replace(/&/g, "&")
@@ -29,12 +31,85 @@ function absolute(path) {
29
31
  ? path
30
32
  : `${ORIGIN}${path.startsWith("/") ? "" : "/"}${path}`;
31
33
  }
34
+ function metaContents(html, name) {
35
+ const values = [];
36
+ const re = new RegExp(`<meta\\s+name=["']${name}["']\\s+content=["']([^"']*)["'][^>]*>`, "gi");
37
+ let match;
38
+ while ((match = re.exec(html)) !== null)
39
+ values.push(decode(match[1]));
40
+ return values;
41
+ }
42
+ function firstMetaContent(html, name) {
43
+ return metaContents(html, name)[0] ?? "";
44
+ }
32
45
  function requireYear(value) {
33
46
  const year = String(value ?? "").trim();
34
47
  if (!/^\d{4}$/.test(year))
35
48
  throw new Error(`neurips year "${year}" is not valid.`);
36
49
  return year;
37
50
  }
51
+ function requireNeuripsPaperId(value) {
52
+ const raw = String(value ?? "").trim();
53
+ const id = raw
54
+ .match(/\/(?:hash|file)\/([^/?#]+\.html)/)?.[1]
55
+ ?.replace(/\.html$/, "") ?? raw.replace(/\.html$/, "");
56
+ if (!/^[A-Za-z0-9_.-]+$/.test(id)) {
57
+ throw new Error(`NeurIPS paper id "${raw}" is not valid.`);
58
+ }
59
+ return id;
60
+ }
61
+ function abstractUrl(id, year) {
62
+ return `${ORIGIN}/paper_files/paper/${year}/hash/${id}.html`;
63
+ }
64
+ function pdfUrlFromAbstractUrl(sourceUrl) {
65
+ return sourceUrl
66
+ .replace("/hash/", "/file/")
67
+ .replace("-Abstract-", "-Paper-")
68
+ .replace(/\.html$/, ".pdf");
69
+ }
70
+ function neuripsUpstreamError(label, detail) {
71
+ const error = new Error(`${label} failed: ${detail}.`);
72
+ error.code = "upstream_error";
73
+ error.suggestion =
74
+ "NeurIPS proceedings did not return the expected public paper page on this network path; retry later or verify the official proceedings.neurips.cc page manually.";
75
+ error.retryable =
76
+ /fetch failed|timeout|ECONNRESET|ETIMEDOUT|HTTP (429|5\d\d)/i.test(detail);
77
+ error.alternatives = [];
78
+ return error;
79
+ }
80
+ export function parseNeuripsPaperPage(html, sourceUrl) {
81
+ const title = firstMetaContent(html, "citation_title") ||
82
+ decode(html
83
+ .match(/<h1 class="paper-title">([\s\S]*?)<\/h1>/i)?.[1]
84
+ ?.replace(/<[^>]+>/g, " ") ?? "");
85
+ if (!title)
86
+ throw new Error("NeurIPS paper page did not expose a title.");
87
+ const year = firstMetaContent(html, "citation_publication_date").match(/\d{4}/)?.[0] ??
88
+ sourceUrl.match(/\/paper\/(\d{4})\//)?.[1];
89
+ const id = sourceUrl
90
+ .split("/")
91
+ .pop()
92
+ ?.replace(/\.html$/, "") ?? title;
93
+ const pdfUrl = firstMetaContent(html, "citation_pdf_url") ||
94
+ html.match(/href=["']([^"']+-Paper-[^"']+\.pdf)["']/i)?.[1] ||
95
+ "";
96
+ return {
97
+ id,
98
+ title,
99
+ authors: metaContents(html, "citation_author"),
100
+ year: year ? Number(year) : undefined,
101
+ venue: "NeurIPS",
102
+ type: firstMetaContent(html, "citation_journal_title") || undefined,
103
+ doi: firstMetaContent(html, "citation_doi") || undefined,
104
+ abstract: decode(html
105
+ .match(/<p class="paper-abstract">([\s\S]*?)<\/p>\s*<\/p>/i)?.[1]
106
+ ?.replace(/<[^>]+>/g, " ") ?? "") || undefined,
107
+ pdf_url: pdfUrl ? absolute(pdfUrl) : undefined,
108
+ source_adapter: "neurips",
109
+ source_url: sourceUrl,
110
+ retrieved_at: new Date().toISOString(),
111
+ };
112
+ }
38
113
  export function parseNeuripsRows(html, year = "2024") {
39
114
  const out = [];
40
115
  const re = /<div class="paper-content">[\s\S]*?<a title="paper title" href="([^"]+)">([\s\S]*?)<\/a>[\s\S]*?<span class="paper-authors">([\s\S]*?)<\/span>/g;
@@ -53,9 +128,7 @@ export function parseNeuripsRows(html, year = "2024") {
53
128
  .filter(Boolean),
54
129
  year: Number(year),
55
130
  venue: "NeurIPS",
56
- pdf_url: sourceUrl
57
- .replace("-Abstract-", "-Paper-")
58
- .replace(/\.html$/, ".pdf"),
131
+ pdf_url: pdfUrlFromAbstractUrl(sourceUrl),
59
132
  source_adapter: "neurips",
60
133
  source_url: sourceUrl,
61
134
  retrieved_at: new Date().toISOString(),
@@ -63,6 +136,46 @@ export function parseNeuripsRows(html, year = "2024") {
63
136
  }
64
137
  return out;
65
138
  }
139
+ async function fetchNeuripsHtml(url, label) {
140
+ let response;
141
+ try {
142
+ response = await fetch(url, {
143
+ headers: {
144
+ Accept: "text/html",
145
+ "User-Agent": NEURIPS_USER_AGENT,
146
+ },
147
+ });
148
+ }
149
+ catch (error) {
150
+ throw neuripsUpstreamError(label, error instanceof Error ? error.message : String(error));
151
+ }
152
+ if (response.status === 404)
153
+ throw new Error(`${label} returned no page.`);
154
+ if (!response.ok)
155
+ throw neuripsUpstreamError(label, `HTTP ${response.status}`);
156
+ return response.text();
157
+ }
158
+ async function readNeuripsPaperPdf(row, kwargs) {
159
+ if (!row.pdf_url)
160
+ throw new Error(`NeurIPS paper ${row.id} has no PDF URL.`);
161
+ return readScholarPdf({
162
+ id: row.id,
163
+ title: row.title,
164
+ source_adapter: "neurips",
165
+ source_url: row.source_url,
166
+ pdf_url: row.pdf_url,
167
+ output: kwargs.output,
168
+ filename: kwargs.filename,
169
+ "first-page": kwargs["first-page"] ?? kwargs.firstPage,
170
+ "last-page": kwargs["last-page"] ?? kwargs.lastPage,
171
+ "max-chars": kwargs["max-chars"] ?? kwargs.maxChars,
172
+ }, {
173
+ site: "neurips",
174
+ command: "read",
175
+ defaultOutput: "./neurips-downloads",
176
+ userAgent: NEURIPS_USER_AGENT,
177
+ });
178
+ }
66
179
  cli({
67
180
  site: "neurips",
68
181
  name: "search",
@@ -88,18 +201,8 @@ cli({
88
201
  if (!query)
89
202
  throw new Error("neurips search query cannot be empty.");
90
203
  const year = requireYear(kwargs.year);
91
- const response = await fetch(`${ORIGIN}/paper_files/paper/${year}`, {
92
- headers: {
93
- Accept: "text/html",
94
- "User-Agent": "unicli-neurips/1.0 (https://github.com/olo-dot-io/Uni-CLI)",
95
- },
96
- });
97
- if (response.status === 404)
98
- throw new Error(`NeurIPS ${year} returned no proceedings page.`);
99
- if (!response.ok)
100
- throw new Error(`NeurIPS ${year} returned HTTP ${response.status}.`);
101
204
  const limit = Math.min(Math.max(Number(kwargs.limit ?? 20), 1), 200);
102
- const rows = parseNeuripsRows(await response.text(), year)
205
+ const rows = parseNeuripsRows(await fetchNeuripsHtml(`${ORIGIN}/paper_files/paper/${year}`, `NeurIPS ${year}`), year)
103
206
  .filter((row) => `${row.title} ${row.authors?.join(" ") ?? ""}`
104
207
  .toLowerCase()
105
208
  .includes(query))
@@ -109,4 +212,89 @@ cli({
109
212
  return rows;
110
213
  },
111
214
  });
215
+ cli({
216
+ site: "neurips",
217
+ name: "paper",
218
+ description: "Fetch NeurIPS proceedings paper metadata by page id",
219
+ domain: "proceedings.neurips.cc",
220
+ strategy: Strategy.PUBLIC,
221
+ args: [
222
+ { name: "id", type: "str", required: true, positional: true },
223
+ { name: "year", type: "str", default: "2024" },
224
+ ],
225
+ columns: [
226
+ "id",
227
+ "title",
228
+ "authors",
229
+ "year",
230
+ "venue",
231
+ "doi",
232
+ "pdf_url",
233
+ "source_url",
234
+ ],
235
+ capabilities: ["http.fetch", "scholar.get", "scholar.pdf"],
236
+ func: async (_page, kwargs) => {
237
+ const year = requireYear(kwargs.year);
238
+ const id = requireNeuripsPaperId(kwargs.id ?? kwargs.ref);
239
+ const url = abstractUrl(id, year);
240
+ return [
241
+ parseNeuripsPaperPage(await fetchNeuripsHtml(url, `NeurIPS paper ${id}`), url),
242
+ ];
243
+ },
244
+ });
245
+ cli({
246
+ site: "neurips",
247
+ name: "read",
248
+ description: "Download a NeurIPS proceedings paper PDF by page id and extract text",
249
+ domain: "proceedings.neurips.cc",
250
+ strategy: Strategy.PUBLIC,
251
+ args: [
252
+ { name: "id", type: "str", required: true, positional: true },
253
+ { name: "year", type: "str", default: "2024" },
254
+ {
255
+ name: "output",
256
+ type: "str",
257
+ default: "./neurips-downloads",
258
+ description: "Output directory for the downloaded PDF",
259
+ "x-unicli-kind": "path",
260
+ },
261
+ { name: "filename", type: "str", description: "Output PDF filename" },
262
+ { name: "first-page", type: "int", default: 1, description: "First page" },
263
+ { name: "last-page", type: "int", default: 20, description: "Last page" },
264
+ {
265
+ name: "max-chars",
266
+ type: "int",
267
+ default: 40000,
268
+ description: "Maximum extracted text characters",
269
+ },
270
+ ],
271
+ columns: [
272
+ "id",
273
+ "title",
274
+ "source_adapter",
275
+ "source_url",
276
+ "pdf_url",
277
+ "path",
278
+ "text_source",
279
+ "text",
280
+ "text_chars",
281
+ "text_truncated",
282
+ ],
283
+ capabilities: [
284
+ "http.fetch",
285
+ "http.download",
286
+ "subprocess.exec",
287
+ "scholar.fulltext",
288
+ "scholar.pdf",
289
+ ],
290
+ executables: ["pdftotext"],
291
+ minimum_capability: "subprocess.exec",
292
+ func: async (_page, kwargs) => {
293
+ const year = requireYear(kwargs.year);
294
+ const id = requireNeuripsPaperId(kwargs.id ?? kwargs.ref);
295
+ const url = abstractUrl(id, year);
296
+ const row = parseNeuripsPaperPage(await fetchNeuripsHtml(url, `NeurIPS paper ${id}`), url);
297
+ return [await readNeuripsPaperPdf(row, kwargs)];
298
+ },
299
+ });
112
300
  //# sourceMappingURL=proceedings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"proceedings.js","sourceRoot":"","sources":["../../../src/adapters/neurips/proceedings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proceedings.js","sourceRoot":"","sources":["../../../src/adapters/neurips/proceedings.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,16 @@
1
1
  /**
2
- * @owner src/adapters/openalex/works.ts
3
- * @does Register agent-facing OpenAlex work search and detail commands.
4
- * @needs Public OpenAlex API, TypeScript adapter loader, work id/DOI normalization.
5
- * @feeds surface coverage ledger, scholarly work command surface, agent-readable OpenAlex rows.
6
- * @breaks OpenAlex API envelope drift, weak DOI/id parsing, or abstract reconstruction errors degrade research lookup.
2
+ * @owner src::adapters::openalex::works
3
+ * @does Registers agent-facing OpenAlex work search, detail, and source PDF read commands.
4
+ * @needs Public OpenAlex API, src/adapters/scholar-artifacts/pdf-read.ts, pdftotext
5
+ * @feeds src/commands/scholar.ts via scholar.* capability tags, surface coverage ledger, scholarly work rows
6
+ * @breaks OpenAlex API envelope drift, weak DOI/id parsing, missing OA PDF URLs, or abstract reconstruction errors surface as explicit adapter errors.
7
+ * @invariants Work references normalize to OpenAlex W ids or doi: refs; read requires a source-provided PDF URL before text is claimed.
8
+ * @side-effects HTTPS egress to api.openalex.org and source PDF hosts; read writes one PDF and executes pdftotext.
9
+ * @perf O(limit) JSON mapping for search; O(PDF bytes + extracted page range) for read
10
+ * @concurrency safe
11
+ * @test src/adapters/openalex/works.test.ts, tests/unit/adapters/scholar-sources.test.ts
12
+ * @stability experimental
13
+ * @since 2026-05-19
7
14
  */
8
15
  interface OpenAlexWork {
9
16
  id?: unknown;
@@ -18,6 +25,15 @@ interface OpenAlexWork {
18
25
  };
19
26
  }>;
20
27
  primary_location?: {
28
+ landing_page_url?: unknown;
29
+ pdf_url?: unknown;
30
+ source?: {
31
+ display_name?: unknown;
32
+ };
33
+ };
34
+ best_oa_location?: {
35
+ landing_page_url?: unknown;
36
+ pdf_url?: unknown;
21
37
  source?: {
22
38
  display_name?: unknown;
23
39
  };
@@ -1 +1 @@
1
- {"version":3,"file":"works.d.ts","sourceRoot":"","sources":["../../../src/adapters/openalex/works.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkCH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,OAAO,CAAC;SACxB,CAAC;KACH,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,OAAO,CAAC;SACxB,CAAC;KACH,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpD;AAUD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAK,GAAG,MAAM,CAS1E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKrD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI9C;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAsB7D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAclE;AAmCD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EAAE,EACrB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwBhC;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiCzB"}
1
+ {"version":3,"file":"works.d.ts","sourceRoot":"","sources":["../../../src/adapters/openalex/works.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqCH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,OAAO,CAAC;SACxB,CAAC;KACH,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE;QACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,OAAO,CAAC;SACxB,CAAC;KACH,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE;YACP,YAAY,CAAC,EAAE,OAAO,CAAC;SACxB,CAAC;KACH,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACpD;AAUD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAK,GAAG,MAAM,CAS1E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKrD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI9C;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAsB7D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAclE;AAqDD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,YAAY,EAAE,EACrB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAyBhC;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCzB"}
@@ -1,11 +1,19 @@
1
1
  /**
2
- * @owner src/adapters/openalex/works.ts
3
- * @does Register agent-facing OpenAlex work search and detail commands.
4
- * @needs Public OpenAlex API, TypeScript adapter loader, work id/DOI normalization.
5
- * @feeds surface coverage ledger, scholarly work command surface, agent-readable OpenAlex rows.
6
- * @breaks OpenAlex API envelope drift, weak DOI/id parsing, or abstract reconstruction errors degrade research lookup.
2
+ * @owner src::adapters::openalex::works
3
+ * @does Registers agent-facing OpenAlex work search, detail, and source PDF read commands.
4
+ * @needs Public OpenAlex API, src/adapters/scholar-artifacts/pdf-read.ts, pdftotext
5
+ * @feeds src/commands/scholar.ts via scholar.* capability tags, surface coverage ledger, scholarly work rows
6
+ * @breaks OpenAlex API envelope drift, weak DOI/id parsing, missing OA PDF URLs, or abstract reconstruction errors surface as explicit adapter errors.
7
+ * @invariants Work references normalize to OpenAlex W ids or doi: refs; read requires a source-provided PDF URL before text is claimed.
8
+ * @side-effects HTTPS egress to api.openalex.org and source PDF hosts; read writes one PDF and executes pdftotext.
9
+ * @perf O(limit) JSON mapping for search; O(PDF bytes + extracted page range) for read
10
+ * @concurrency safe
11
+ * @test src/adapters/openalex/works.test.ts, tests/unit/adapters/scholar-sources.test.ts
12
+ * @stability experimental
13
+ * @since 2026-05-19
7
14
  */
8
15
  import { cli, Strategy } from "../../registry.js";
16
+ import { readScholarPdf } from "../scholar-artifacts/pdf-read.js";
9
17
  const OPENALEX_BASE = "https://api.openalex.org";
10
18
  const WORK_ID_RE = /^W\d{4,}$/;
11
19
  const DOI_RE = /^10\.\S+$/;
@@ -17,6 +25,7 @@ const SEARCH_SELECT = [
17
25
  "cited_by_count",
18
26
  "authorships",
19
27
  "primary_location",
28
+ "best_oa_location",
20
29
  "open_access",
21
30
  "type",
22
31
  ].join(",");
@@ -29,6 +38,7 @@ const WORK_SELECT = [
29
38
  "cited_by_count",
30
39
  "authorships",
31
40
  "primary_location",
41
+ "best_oa_location",
32
42
  "open_access",
33
43
  "type",
34
44
  "referenced_works",
@@ -135,7 +145,17 @@ function authorList(work) {
135
145
  : [];
136
146
  }
137
147
  function venue(work) {
138
- return stringField(work.primary_location?.source?.display_name).trim();
148
+ return (stringField(work.primary_location?.source?.display_name).trim() ||
149
+ stringField(work.best_oa_location?.source?.display_name).trim());
150
+ }
151
+ function publisherLandingUrl(work) {
152
+ return (stringField(work.primary_location?.landing_page_url).trim() ||
153
+ stringField(work.best_oa_location?.landing_page_url).trim() ||
154
+ stringField(work.open_access?.oa_url).trim());
155
+ }
156
+ function openAlexPdfUrl(work) {
157
+ return (stringField(work.primary_location?.pdf_url).trim() ||
158
+ stringField(work.best_oa_location?.pdf_url).trim());
139
159
  }
140
160
  export function mapOpenAlexSearchRows(works, limit) {
141
161
  return works.slice(0, limit).map((work, index) => {
@@ -153,7 +173,8 @@ export function mapOpenAlexSearchRows(works, limit) {
153
173
  is_open_access: Boolean(work.open_access?.is_oa),
154
174
  type: stringField(work.type).trim(),
155
175
  doi: bareDoi(work.doi),
156
- pdf_url: stringField(work.open_access?.oa_url).trim(),
176
+ pdf_url: openAlexPdfUrl(work),
177
+ landing_url: publisherLandingUrl(work) || undefined,
157
178
  openalex_id: id,
158
179
  source_adapter: "openalex",
159
180
  source_url: id ? `https://openalex.org/${id}` : "",
@@ -181,7 +202,8 @@ export function mapOpenAlexWorkRow(work) {
181
202
  openAccess: Boolean(work.open_access?.is_oa),
182
203
  is_open_access: Boolean(work.open_access?.is_oa),
183
204
  openAccessUrl: stringField(work.open_access?.oa_url).trim(),
184
- pdf_url: stringField(work.open_access?.oa_url).trim(),
205
+ pdf_url: openAlexPdfUrl(work),
206
+ landing_url: publisherLandingUrl(work) || undefined,
185
207
  referencedCount: Array.isArray(work.referenced_works)
186
208
  ? work.referenced_works.length
187
209
  : null,
@@ -197,6 +219,26 @@ export function mapOpenAlexWorkRow(work) {
197
219
  url: `https://openalex.org/${id}`,
198
220
  };
199
221
  }
222
+ async function readOpenAlexWorkPdf(row, kwargs) {
223
+ const pdfUrl = stringField(row.pdf_url);
224
+ if (!pdfUrl) {
225
+ const id = stringField(row.id) || stringField(row.openalex_id) || "record";
226
+ throw new Error(`OpenAlex work ${id} has no source PDF URL.`);
227
+ }
228
+ return readScholarPdf({
229
+ ...kwargs,
230
+ id: stringField(row.id) || stringField(row.openalex_id) || pdfUrl,
231
+ title: stringField(row.title) || pdfUrl,
232
+ source_adapter: "openalex",
233
+ source_url: stringField(row.source_url) || stringField(row.url),
234
+ pdf_url: pdfUrl,
235
+ }, {
236
+ site: "openalex",
237
+ command: "read",
238
+ defaultOutput: "./openalex-downloads",
239
+ userAgent: "unicli-openalex/1.0 (https://github.com/olo-dot-io/Uni-CLI)",
240
+ });
241
+ }
200
242
  async function fetchOpenAlex(url, label) {
201
243
  const response = await fetch(appendMailto(url), {
202
244
  headers: {
@@ -296,4 +338,62 @@ cli({
296
338
  return [mapOpenAlexWorkRow(work)];
297
339
  },
298
340
  });
341
+ cli({
342
+ site: "openalex",
343
+ name: "read",
344
+ description: "Download an OpenAlex open-access Work PDF and extract text",
345
+ domain: "api.openalex.org",
346
+ strategy: Strategy.PUBLIC,
347
+ args: [
348
+ {
349
+ name: "id",
350
+ type: "str",
351
+ required: true,
352
+ positional: true,
353
+ description: "OpenAlex Work id or DOI",
354
+ },
355
+ {
356
+ name: "output",
357
+ type: "str",
358
+ default: "./openalex-downloads",
359
+ description: "Output directory for the downloaded PDF",
360
+ "x-unicli-kind": "path",
361
+ },
362
+ { name: "filename", type: "str", description: "Output PDF filename" },
363
+ { name: "first-page", type: "int", default: 1, description: "First page" },
364
+ { name: "last-page", type: "int", default: 20, description: "Last page" },
365
+ {
366
+ name: "max-chars",
367
+ type: "int",
368
+ default: 40000,
369
+ description: "Maximum extracted text characters",
370
+ },
371
+ ],
372
+ columns: [
373
+ "id",
374
+ "title",
375
+ "source_adapter",
376
+ "source_url",
377
+ "pdf_url",
378
+ "path",
379
+ "text_source",
380
+ "text",
381
+ "text_chars",
382
+ "text_truncated",
383
+ ],
384
+ capabilities: [
385
+ "http.fetch",
386
+ "http.download",
387
+ "subprocess.exec",
388
+ "scholar.fulltext",
389
+ "scholar.pdf",
390
+ ],
391
+ executables: ["pdftotext"],
392
+ minimum_capability: "subprocess.exec",
393
+ func: async (_page, kwargs) => {
394
+ const ref = requireOpenAlexWorkRef(kwargs.id);
395
+ const work = (await fetchOpenAlex(`${OPENALEX_BASE}/works/${encodeURIComponent(ref)}?select=${WORK_SELECT}`, "openalex work"));
396
+ return [await readOpenAlexWorkPdf(mapOpenAlexWorkRow(work), kwargs)];
397
+ },
398
+ });
299
399
  //# sourceMappingURL=works.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"works.js","sourceRoot":"","sources":["../../../src/adapters/openalex/works.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"works.js","sourceRoot":"","sources":["../../../src/adapters/openalex/works.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * @owner src/adapters/openreview/papers.ts
3
- * @does Register agent-facing OpenReview search, paper, author, venue, and reviews commands.
4
- * @needs Public api2.openreview.net notes API, forum/profile id validation, note content normalization.
5
- * @feeds surface coverage ledger, scholarly review workflow, agent-readable paper/review rows.
6
- * @breaks OpenReview API envelope drift, content.value parsing, or silent empty threads hide paper review state.
3
+ * @does Register agent-facing OpenReview search, paper, author, venue, reviews, PDF download, and PDF text extraction commands.
4
+ * @needs Public api2.openreview.net notes API, openreview.net PDF URLs, pdftotext for read, forum/profile id validation, note content normalization.
5
+ * @feeds surface coverage ledger, scholarly review workflow, agent-readable paper/review rows, local PDF/fulltext workflow.
6
+ * @breaks OpenReview API envelope drift, content.value parsing, PDF download failure, pdftotext absence, or silent empty threads hide paper review state.
7
7
  */
8
8
  interface OpenReviewContentValue {
9
9
  value?: unknown;
@@ -22,6 +22,12 @@ export declare function coerceOpenReviewInt(value: unknown): number;
22
22
  export declare function requireOpenReviewLimit(value: unknown, fallback: number, max: number): number;
23
23
  export declare function requireOpenReviewOffset(value: unknown, fallback?: number): number;
24
24
  export declare function requireForumId(value: unknown, label?: string): string;
25
+ export declare function requireOpenReviewPageRange(firstPage: unknown, lastPage: unknown): {
26
+ firstPage: number;
27
+ lastPage: number;
28
+ };
29
+ export declare function requireOpenReviewMaxChars(value: unknown, fallback?: number): number;
30
+ export declare function openReviewPdfFilename(id: string, title: unknown): string;
25
31
  export declare function requireProfileId(value: unknown): string;
26
32
  export declare function readContent(content: OpenReviewContent | undefined, key: string): unknown;
27
33
  export declare function formatOpenReviewDate(value: unknown): string;