@zenalexa/unicli 0.221.0 → 0.222.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 (247) hide show
  1. package/AGENTS.md +12 -12
  2. package/README.md +40 -31
  3. package/README.zh-CN.md +37 -31
  4. package/crates/unicli-atspi/src/errors.rs +2 -2
  5. package/crates/unicli-uia/src/errors.rs +1 -1
  6. package/dist/adapters/acl-anthology/papers.d.ts +16 -0
  7. package/dist/adapters/acl-anthology/papers.d.ts.map +1 -0
  8. package/dist/adapters/acl-anthology/papers.js +135 -0
  9. package/dist/adapters/acl-anthology/papers.js.map +1 -0
  10. package/dist/adapters/arxiv/papers.js +2 -0
  11. package/dist/adapters/arxiv/papers.js.map +1 -1
  12. package/dist/adapters/baidu-scholar/search.js +5 -0
  13. package/dist/adapters/baidu-scholar/search.js.map +1 -1
  14. package/dist/adapters/crossref/works.d.ts +42 -0
  15. package/dist/adapters/crossref/works.d.ts.map +1 -0
  16. package/dist/adapters/crossref/works.js +157 -0
  17. package/dist/adapters/crossref/works.js.map +1 -0
  18. package/dist/adapters/cvf/papers.d.ts +17 -0
  19. package/dist/adapters/cvf/papers.d.ts.map +1 -0
  20. package/dist/adapters/cvf/papers.js +124 -0
  21. package/dist/adapters/cvf/papers.js.map +1 -0
  22. package/dist/adapters/dblp/publications.js +4 -0
  23. package/dist/adapters/dblp/publications.js.map +1 -1
  24. package/dist/adapters/google-scholar/cite.js +1 -0
  25. package/dist/adapters/google-scholar/cite.js.map +1 -1
  26. package/dist/adapters/google-scholar/profile.js +5 -0
  27. package/dist/adapters/google-scholar/profile.js.map +1 -1
  28. package/dist/adapters/google-scholar/search.js +5 -0
  29. package/dist/adapters/google-scholar/search.js.map +1 -1
  30. package/dist/adapters/hf/paper.js +1 -0
  31. package/dist/adapters/hf/paper.js.map +1 -1
  32. package/dist/adapters/neurips/proceedings.d.ts +17 -0
  33. package/dist/adapters/neurips/proceedings.d.ts.map +1 -0
  34. package/dist/adapters/neurips/proceedings.js +112 -0
  35. package/dist/adapters/neurips/proceedings.js.map +1 -0
  36. package/dist/adapters/openalex/works.d.ts.map +1 -1
  37. package/dist/adapters/openalex/works.js +32 -0
  38. package/dist/adapters/openalex/works.js.map +1 -1
  39. package/dist/adapters/openreview/papers.js +5 -0
  40. package/dist/adapters/openreview/papers.js.map +1 -1
  41. package/dist/adapters/pmlr/proceedings.d.ts +35 -0
  42. package/dist/adapters/pmlr/proceedings.d.ts.map +1 -0
  43. package/dist/adapters/pmlr/proceedings.js +139 -0
  44. package/dist/adapters/pmlr/proceedings.js.map +1 -0
  45. package/dist/adapters/pubmed/articles.js +5 -0
  46. package/dist/adapters/pubmed/articles.js.map +1 -1
  47. package/dist/adapters/semantic-scholar/papers.d.ts +36 -0
  48. package/dist/adapters/semantic-scholar/papers.d.ts.map +1 -0
  49. package/dist/adapters/semantic-scholar/papers.js +214 -0
  50. package/dist/adapters/semantic-scholar/papers.js.map +1 -0
  51. package/dist/adapters/unpaywall/works.d.ts +33 -0
  52. package/dist/adapters/unpaywall/works.d.ts.map +1 -0
  53. package/dist/adapters/unpaywall/works.js +101 -0
  54. package/dist/adapters/unpaywall/works.js.map +1 -0
  55. package/dist/cli.d.ts.map +1 -1
  56. package/dist/cli.js +15 -1
  57. package/dist/cli.js.map +1 -1
  58. package/dist/commands/compute.d.ts.map +1 -1
  59. package/dist/commands/compute.js +1 -1
  60. package/dist/commands/compute.js.map +1 -1
  61. package/dist/commands/do.d.ts +30 -0
  62. package/dist/commands/do.d.ts.map +1 -0
  63. package/dist/commands/do.js +248 -0
  64. package/dist/commands/do.js.map +1 -0
  65. package/dist/commands/doctor-compute.js +11 -7
  66. package/dist/commands/doctor-compute.js.map +1 -1
  67. package/dist/commands/extract.d.ts +34 -0
  68. package/dist/commands/extract.d.ts.map +1 -0
  69. package/dist/commands/extract.js +316 -0
  70. package/dist/commands/extract.js.map +1 -0
  71. package/dist/commands/lint.js +3 -3
  72. package/dist/commands/lint.js.map +1 -1
  73. package/dist/commands/migrate-schema.d.ts.map +1 -1
  74. package/dist/commands/migrate-schema.js +26 -22
  75. package/dist/commands/migrate-schema.js.map +1 -1
  76. package/dist/commands/scholar.d.ts +33 -0
  77. package/dist/commands/scholar.d.ts.map +1 -0
  78. package/dist/commands/scholar.js +494 -0
  79. package/dist/commands/scholar.js.map +1 -0
  80. package/dist/commands/search.d.ts.map +1 -1
  81. package/dist/commands/search.js +2 -5
  82. package/dist/commands/search.js.map +1 -1
  83. package/dist/discovery/aliases.d.ts +2 -2
  84. package/dist/discovery/aliases.d.ts.map +1 -1
  85. package/dist/discovery/aliases.js +182 -11
  86. package/dist/discovery/aliases.js.map +1 -1
  87. package/dist/discovery/intents.d.ts +10 -0
  88. package/dist/discovery/intents.d.ts.map +1 -0
  89. package/dist/discovery/intents.js +255 -0
  90. package/dist/discovery/intents.js.map +1 -0
  91. package/dist/discovery/loader.d.ts.map +1 -1
  92. package/dist/discovery/loader.js +47 -2
  93. package/dist/discovery/loader.js.map +1 -1
  94. package/dist/discovery/search.d.ts +4 -1
  95. package/dist/discovery/search.d.ts.map +1 -1
  96. package/dist/discovery/search.js +28 -140
  97. package/dist/discovery/search.js.map +1 -1
  98. package/dist/electron-apps.d.ts +1 -1
  99. package/dist/electron-apps.d.ts.map +1 -1
  100. package/dist/electron-apps.js +2 -2
  101. package/dist/electron-apps.js.map +1 -1
  102. package/dist/engine/executor.d.ts +1 -1
  103. package/dist/engine/executor.js +7 -7
  104. package/dist/engine/executor.js.map +1 -1
  105. package/dist/engine/repair/remedies.js +3 -3
  106. package/dist/engine/repair/remedies.js.map +1 -1
  107. package/dist/engine/steps/desktop-ax.d.ts +4 -0
  108. package/dist/engine/steps/desktop-ax.d.ts.map +1 -1
  109. package/dist/engine/steps/desktop-ax.js +8 -0
  110. package/dist/engine/steps/desktop-ax.js.map +1 -1
  111. package/dist/engine/steps/desktop-sidecar.d.ts +1 -1
  112. package/dist/engine/steps/desktop-sidecar.js +1 -1
  113. package/dist/engine/steps/index.d.ts +1 -1
  114. package/dist/engine/steps/index.d.ts.map +1 -1
  115. package/dist/engine/steps/index.js +1 -1
  116. package/dist/engine/steps/index.js.map +1 -1
  117. package/dist/engine/steps/visual.d.ts +47 -0
  118. package/dist/engine/steps/visual.d.ts.map +1 -0
  119. package/dist/engine/steps/visual.js +66 -0
  120. package/dist/engine/steps/visual.js.map +1 -0
  121. package/dist/engine/transport/mcp-browser.d.ts +1 -1
  122. package/dist/engine/transport/mcp-browser.js +1 -1
  123. package/dist/fast-path/handlers/discovery.d.ts.map +1 -1
  124. package/dist/fast-path/handlers/discovery.js +17 -3
  125. package/dist/fast-path/handlers/discovery.js.map +1 -1
  126. package/dist/manifest-compact.txt +13 -11
  127. package/dist/manifest-search.json +1 -1
  128. package/dist/manifest.json +529 -121
  129. package/dist/mcp/handler.d.ts.map +1 -1
  130. package/dist/mcp/handler.js +14 -2
  131. package/dist/mcp/handler.js.map +1 -1
  132. package/dist/mcp/tools.d.ts.map +1 -1
  133. package/dist/mcp/tools.js +11 -3
  134. package/dist/mcp/tools.js.map +1 -1
  135. package/dist/registry.d.ts +1 -0
  136. package/dist/registry.d.ts.map +1 -1
  137. package/dist/registry.js +5 -0
  138. package/dist/registry.js.map +1 -1
  139. package/dist/transport/adapters/desktop-atspi.js +1 -1
  140. package/dist/transport/adapters/desktop-atspi.js.map +1 -1
  141. package/dist/transport/adapters/desktop-ax-background-activation-swift.d.ts +9 -0
  142. package/dist/transport/adapters/desktop-ax-background-activation-swift.d.ts.map +1 -0
  143. package/dist/transport/adapters/desktop-ax-background-activation-swift.js +99 -0
  144. package/dist/transport/adapters/desktop-ax-background-activation-swift.js.map +1 -0
  145. package/dist/transport/adapters/desktop-ax-background-click-swift.d.ts.map +1 -1
  146. package/dist/transport/adapters/desktop-ax-background-click-swift.js +10 -133
  147. package/dist/transport/adapters/desktop-ax-background-click-swift.js.map +1 -1
  148. package/dist/transport/adapters/desktop-ax-background-click.d.ts +1 -3
  149. package/dist/transport/adapters/desktop-ax-background-click.d.ts.map +1 -1
  150. package/dist/transport/adapters/desktop-ax-background-click.js +1 -69
  151. package/dist/transport/adapters/desktop-ax-background-click.js.map +1 -1
  152. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.d.ts +9 -0
  153. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.d.ts.map +1 -0
  154. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.js +169 -0
  155. package/dist/transport/adapters/desktop-ax-background-dispatch-swift.js.map +1 -0
  156. package/dist/transport/adapters/desktop-ax-background-input-swift.d.ts +23 -0
  157. package/dist/transport/adapters/desktop-ax-background-input-swift.d.ts.map +1 -0
  158. package/dist/transport/adapters/desktop-ax-background-input-swift.js +157 -0
  159. package/dist/transport/adapters/desktop-ax-background-input-swift.js.map +1 -0
  160. package/dist/transport/adapters/desktop-ax-background-input.d.ts +13 -0
  161. package/dist/transport/adapters/desktop-ax-background-input.d.ts.map +1 -0
  162. package/dist/transport/adapters/desktop-ax-background-input.js +124 -0
  163. package/dist/transport/adapters/desktop-ax-background-input.js.map +1 -0
  164. package/dist/transport/adapters/desktop-ax-background-window-swift.d.ts +9 -0
  165. package/dist/transport/adapters/desktop-ax-background-window-swift.d.ts.map +1 -0
  166. package/dist/transport/adapters/desktop-ax-background-window-swift.js +110 -0
  167. package/dist/transport/adapters/desktop-ax-background-window-swift.js.map +1 -0
  168. package/dist/transport/adapters/desktop-ax-swift.d.ts +1 -0
  169. package/dist/transport/adapters/desktop-ax-swift.d.ts.map +1 -1
  170. package/dist/transport/adapters/desktop-ax-swift.js +1 -0
  171. package/dist/transport/adapters/desktop-ax-swift.js.map +1 -1
  172. package/dist/transport/adapters/desktop-ax.d.ts +4 -1
  173. package/dist/transport/adapters/desktop-ax.d.ts.map +1 -1
  174. package/dist/transport/adapters/desktop-ax.js +57 -6
  175. package/dist/transport/adapters/desktop-ax.js.map +1 -1
  176. package/dist/transport/adapters/desktop-uia.js +1 -1
  177. package/dist/transport/adapters/desktop-uia.js.map +1 -1
  178. package/dist/transport/adapters/visual.d.ts +114 -0
  179. package/dist/transport/adapters/visual.d.ts.map +1 -0
  180. package/dist/transport/adapters/visual.js +473 -0
  181. package/dist/transport/adapters/visual.js.map +1 -0
  182. package/dist/transport/bus.d.ts +1 -1
  183. package/dist/transport/bus.js +3 -3
  184. package/dist/transport/bus.js.map +1 -1
  185. package/dist/transport/capability.d.ts.map +1 -1
  186. package/dist/transport/capability.js +32 -30
  187. package/dist/transport/capability.js.map +1 -1
  188. package/dist/transport/cascade.js +27 -27
  189. package/dist/transport/cascade.js.map +1 -1
  190. package/dist/transport/types.d.ts +5 -5
  191. package/dist/transport/types.d.ts.map +1 -1
  192. package/dist/transport/types.js +1 -1
  193. package/dist/types/scholarly.d.ts +49 -0
  194. package/dist/types/scholarly.d.ts.map +1 -0
  195. package/dist/types/scholarly.js +16 -0
  196. package/dist/types/scholarly.js.map +1 -0
  197. package/docs/operate/compute.md +20 -7
  198. package/docs/operate/focus-behavior.md +21 -12
  199. package/docs/operate/troubleshooting.md +17 -12
  200. package/package.json +5 -11
  201. package/server.json +2 -2
  202. package/skills/unicli/SKILL.md +1 -1
  203. package/skills/unicli-claude-code/SKILL.md +1 -1
  204. package/skills/unicli-hermes/SKILL.md +1 -1
  205. package/skills/unicli-repair/references/error-codes.md +7 -7
  206. package/src/adapters/_archived/README.md +6 -6
  207. package/src/adapters/_archived/apple-music/rate-album.yaml +15 -15
  208. package/src/adapters/_archived/archive.json +2 -2
  209. package/src/adapters/acl-anthology/papers.ts +157 -0
  210. package/src/adapters/arxiv/download.yaml +1 -1
  211. package/src/adapters/arxiv/paper.yaml +1 -1
  212. package/src/adapters/arxiv/papers.ts +2 -0
  213. package/src/adapters/arxiv/search.yaml +1 -1
  214. package/src/adapters/arxiv/trending.yaml +1 -1
  215. package/src/adapters/baidu-scholar/search.ts +5 -0
  216. package/src/adapters/crossref/works.ts +209 -0
  217. package/src/adapters/cvf/papers.ts +136 -0
  218. package/src/adapters/dblp/publications.ts +4 -0
  219. package/src/adapters/figma/export-selected.yaml +16 -16
  220. package/src/adapters/google-scholar/cite.ts +1 -0
  221. package/src/adapters/google-scholar/profile.ts +5 -0
  222. package/src/adapters/google-scholar/search.ts +5 -0
  223. package/src/adapters/hf/paper.test.ts +10 -0
  224. package/src/adapters/hf/paper.ts +1 -0
  225. package/src/adapters/hf/top.yaml +1 -1
  226. package/src/adapters/huggingface-papers/daily.yaml +1 -1
  227. package/src/adapters/huggingface-papers/search.yaml +1 -1
  228. package/src/adapters/neurips/proceedings.ts +126 -0
  229. package/src/adapters/openalex/works.test.ts +40 -32
  230. package/src/adapters/openalex/works.ts +33 -0
  231. package/src/adapters/openreview/papers.ts +5 -0
  232. package/src/adapters/pmlr/proceedings.ts +167 -0
  233. package/src/adapters/pubmed/articles.ts +5 -0
  234. package/src/adapters/semantic-scholar/papers.ts +268 -0
  235. package/src/adapters/unpaywall/works.ts +138 -0
  236. package/src/adapters/zoom/toggle-mute.yaml +1 -1
  237. package/src/adapters/zotero/search.yaml +1 -1
  238. package/dist/engine/steps/cua.d.ts +0 -41
  239. package/dist/engine/steps/cua.d.ts.map +0 -1
  240. package/dist/engine/steps/cua.js +0 -59
  241. package/dist/engine/steps/cua.js.map +0 -1
  242. package/dist/transport/adapters/cua.d.ts +0 -239
  243. package/dist/transport/adapters/cua.d.ts.map +0 -1
  244. package/dist/transport/adapters/cua.js +0 -661
  245. package/dist/transport/adapters/cua.js.map +0 -1
  246. package/src/adapters/cua/bench-list.yaml +0 -28
  247. package/src/adapters/cua/bench-run.yaml +0 -40
@@ -0,0 +1,494 @@
1
+ /**
2
+ * @owner src::commands::scholar
3
+ * @does Top-level `unicli scholar` meta-command for academic source discovery: searches, retrieves, PDF availability, citation/reference traversal, and doctor output across adapters tagged with `scholar.*` capabilities.
4
+ * @needs src/registry.ts, src/types/scholarly.ts, src/engine/kernel/execute.ts, src/output/formatter.ts
5
+ * @feeds src/cli.ts, MCP/agent command discovery via list/search/do
6
+ * @breaks Missing capability tags make scholarly sources invisible to the meta-command; weak reference routing can send DOI/arXiv/PMID lookups to the wrong first source.
7
+ * @invariants --sources default is a conservative first-source set; --sources all is registry capability discovery; DOI is the primary dedupe key; no non-scholarly adapter is invoked as fallback.
8
+ * @side-effects Executes adapter commands through the engine kernel; writes stdout/stderr only.
9
+ * @perf Fan-out is sequential today, O(S * R), where S is source count and R is rows per source.
10
+ * @concurrency safe — Commander handlers run one at a time per process
11
+ * @test tests/unit/commands/scholar.test.ts
12
+ * @stability experimental
13
+ * @since 2026-05-19
14
+ */
15
+ import { commandStrategy, getAllAdapters, resolveCommand, } from "../registry.js";
16
+ import { buildInvocation, execute } from "../engine/kernel/execute.js";
17
+ import { makeCtx } from "../output/envelope.js";
18
+ import { detectFormat, format } from "../output/formatter.js";
19
+ import { ExitCode, Strategy } from "../types.js";
20
+ export const DEFAULT_SCHOLAR_SOURCES = [
21
+ "semantic-scholar",
22
+ "openalex",
23
+ "crossref",
24
+ "arxiv",
25
+ "dblp",
26
+ "pubmed",
27
+ ];
28
+ export const SCHOLAR_CAPABILITIES = [
29
+ "scholar.search",
30
+ "scholar.get",
31
+ "scholar.pdf",
32
+ "scholar.citations",
33
+ "scholar.references",
34
+ "scholar.venue",
35
+ "scholar.author",
36
+ "scholar.datasets",
37
+ "scholar.code",
38
+ "scholar.review",
39
+ ];
40
+ function hasAnyScholarCapability(adapter) {
41
+ return Object.values(adapter.commands).some((command) => (command.capabilities ?? []).some((cap) => cap.startsWith("scholar.")));
42
+ }
43
+ export function listScholarAdapters() {
44
+ return getAllAdapters()
45
+ .filter(hasAnyScholarCapability)
46
+ .sort((a, b) => a.name.localeCompare(b.name));
47
+ }
48
+ export function resolveScholarSources(sourcesArg, fallback = DEFAULT_SCHOLAR_SOURCES) {
49
+ if (!sourcesArg || sourcesArg.trim().length === 0)
50
+ return [...fallback];
51
+ if (sourcesArg.trim() === "all")
52
+ return listScholarAdapters().map((a) => a.name);
53
+ return sourcesArg
54
+ .split(",")
55
+ .map((source) => source.trim())
56
+ .filter(Boolean);
57
+ }
58
+ export function findScholarCommandByCapability(adapter, capability) {
59
+ for (const [name, command] of Object.entries(adapter.commands)) {
60
+ if ((command.capabilities ?? []).includes(capability))
61
+ return { name, command };
62
+ }
63
+ return undefined;
64
+ }
65
+ function bareDoi(value) {
66
+ return value
67
+ .trim()
68
+ .replace(/^doi:/i, "")
69
+ .replace(/^https?:\/\/(?:dx\.)?doi\.org\//i, "");
70
+ }
71
+ function bareArxiv(value) {
72
+ return value
73
+ .trim()
74
+ .replace(/^arxiv:/i, "")
75
+ .replace(/^https?:\/\/arxiv\.org\/(?:abs|pdf)\//i, "")
76
+ .replace(/\.pdf$/i, "")
77
+ .replace(/v\d+$/i, "");
78
+ }
79
+ export function resolveScholarReference(ref) {
80
+ const raw = ref.trim();
81
+ const doi = bareDoi(raw);
82
+ if (/^10\.\S+\/\S+/i.test(doi)) {
83
+ return {
84
+ kind: "doi",
85
+ value: doi,
86
+ preferredSources: ["openalex", "crossref", "semantic-scholar"],
87
+ };
88
+ }
89
+ if (/^(?:arxiv:|https?:\/\/arxiv\.org\/(?:abs|pdf)\/|\d{4}\.\d{4,5})/i.test(raw)) {
90
+ return {
91
+ kind: "arxiv",
92
+ value: bareArxiv(raw),
93
+ preferredSources: ["arxiv", "semantic-scholar", "openalex"],
94
+ };
95
+ }
96
+ const pmid = raw.match(/^pmid:\s*(\d+)$/i);
97
+ if (pmid) {
98
+ return {
99
+ kind: "pmid",
100
+ value: pmid[1],
101
+ preferredSources: ["pubmed", "semantic-scholar", "openalex"],
102
+ };
103
+ }
104
+ const openReview = raw.match(/^openreview:\s*([A-Za-z0-9_-]{6,20})$/i);
105
+ if (openReview) {
106
+ return {
107
+ kind: "openreview",
108
+ value: openReview[1],
109
+ preferredSources: ["openreview", "semantic-scholar", "openalex"],
110
+ };
111
+ }
112
+ const openAlex = raw.match(/^(?:https?:\/\/(?:api\.)?openalex\.org\/)?(?:works\/)?(W\d{4,})$/i);
113
+ if (openAlex) {
114
+ return {
115
+ kind: "openalex",
116
+ value: openAlex[1].toUpperCase(),
117
+ preferredSources: ["openalex", "semantic-scholar", "crossref"],
118
+ };
119
+ }
120
+ if (/^[a-f0-9]{40}$/i.test(raw)) {
121
+ return {
122
+ kind: "semantic-scholar",
123
+ value: raw,
124
+ preferredSources: ["semantic-scholar", "openalex", "crossref"],
125
+ };
126
+ }
127
+ if (/^[a-z]+(?:\/[A-Za-z0-9_.-]+)+$/.test(raw)) {
128
+ return {
129
+ kind: "dblp",
130
+ value: raw,
131
+ preferredSources: ["dblp", "semantic-scholar", "openalex"],
132
+ };
133
+ }
134
+ return {
135
+ kind: "unknown",
136
+ value: raw,
137
+ preferredSources: [...DEFAULT_SCHOLAR_SOURCES],
138
+ };
139
+ }
140
+ function dedupeKey(record) {
141
+ if (record.doi)
142
+ return `doi:${record.doi.toLowerCase()}`;
143
+ if (record.arxiv_id)
144
+ return `arxiv:${record.arxiv_id.toLowerCase()}`;
145
+ if (record.pmid)
146
+ return `pmid:${record.pmid}`;
147
+ return `${record.source_adapter}:${record.id}`;
148
+ }
149
+ export function reciprocalRankFusion(rankedLists, options = {}) {
150
+ const k = options.k ?? 60;
151
+ const buckets = new Map();
152
+ let order = 0;
153
+ for (const list of rankedLists) {
154
+ for (let rank = 0; rank < list.length; rank += 1) {
155
+ const record = list[rank];
156
+ const key = dedupeKey(record);
157
+ const increment = 1 / (k + rank + 1);
158
+ const existing = buckets.get(key);
159
+ if (existing) {
160
+ existing.score += increment;
161
+ }
162
+ else {
163
+ buckets.set(key, { score: increment, record, firstSeen: order });
164
+ order += 1;
165
+ }
166
+ }
167
+ }
168
+ const fused = [...buckets.values()].sort((a, b) => b.score - a.score || a.firstSeen - b.firstSeen);
169
+ return (options.topN ? fused.slice(0, options.topN) : fused).map((bucket) => bucket.record);
170
+ }
171
+ function numberOpt(raw, fallback, max) {
172
+ if (raw === undefined || raw === "")
173
+ return fallback;
174
+ const n = Number(raw);
175
+ if (!Number.isInteger(n) || n < 1 || n > max) {
176
+ throw new Error(`limit must be an integer in [1, ${max}].`);
177
+ }
178
+ return n;
179
+ }
180
+ function coerceStringArray(value) {
181
+ if (!Array.isArray(value))
182
+ return undefined;
183
+ const out = value.map((item) => String(item ?? "").trim()).filter(Boolean);
184
+ return out.length > 0 ? out : undefined;
185
+ }
186
+ function coerceNumber(value) {
187
+ if (typeof value === "number" && Number.isFinite(value))
188
+ return value;
189
+ if (typeof value === "string" && value.length > 0) {
190
+ const n = Number(value);
191
+ return Number.isFinite(n) ? n : undefined;
192
+ }
193
+ return undefined;
194
+ }
195
+ function coerceToScholarlyRecords(rows, source) {
196
+ if (!Array.isArray(rows))
197
+ return [];
198
+ const out = [];
199
+ for (const row of rows) {
200
+ if (!row || typeof row !== "object")
201
+ continue;
202
+ const record = row;
203
+ if (typeof record.id !== "string" || typeof record.title !== "string") {
204
+ continue;
205
+ }
206
+ const work = {
207
+ id: record.id,
208
+ title: record.title,
209
+ source_adapter: typeof record.source_adapter === "string"
210
+ ? record.source_adapter
211
+ : source,
212
+ retrieved_at: typeof record.retrieved_at === "string" &&
213
+ record.retrieved_at.length > 0
214
+ ? record.retrieved_at
215
+ : new Date().toISOString(),
216
+ };
217
+ const authors = coerceStringArray(record.authors);
218
+ if (authors)
219
+ work.authors = authors;
220
+ const year = coerceNumber(record.year);
221
+ if (year !== undefined)
222
+ work.year = year;
223
+ for (const field of [
224
+ "date",
225
+ "venue",
226
+ "type",
227
+ "abstract",
228
+ "doi",
229
+ "arxiv_id",
230
+ "pmid",
231
+ "openalex_id",
232
+ "semantic_scholar_id",
233
+ "dblp_key",
234
+ "openreview_id",
235
+ "oa_status",
236
+ "pdf_url",
237
+ "landing_url",
238
+ "code_url",
239
+ "dataset_url",
240
+ "source_url",
241
+ ]) {
242
+ if (typeof record[field] === "string" && record[field].length > 0) {
243
+ work[field] = record[field];
244
+ }
245
+ }
246
+ for (const [sourceField, targetField] of [
247
+ ["cited_by_count", "cited_by_count"],
248
+ ["references_count", "references_count"],
249
+ ]) {
250
+ const n = coerceNumber(record[sourceField]);
251
+ if (n !== undefined)
252
+ work[targetField] = n;
253
+ }
254
+ if (typeof record.is_open_access === "boolean") {
255
+ work.is_open_access = record.is_open_access;
256
+ }
257
+ if (record.raw !== undefined)
258
+ work.raw = record.raw;
259
+ out.push(work);
260
+ }
261
+ return out;
262
+ }
263
+ async function runAdapterCommand(source, capability, args) {
264
+ const adapter = getAllAdapters().find((candidate) => candidate.name === source);
265
+ if (!adapter) {
266
+ return {
267
+ source,
268
+ records: [],
269
+ error: {
270
+ code: "adapter_not_found",
271
+ message: `unknown source: ${source}`,
272
+ },
273
+ };
274
+ }
275
+ const found = findScholarCommandByCapability(adapter, capability);
276
+ if (!found) {
277
+ return {
278
+ source,
279
+ records: [],
280
+ error: {
281
+ code: "capability_unsupported",
282
+ message: `${source} does not expose ${capability}`,
283
+ },
284
+ };
285
+ }
286
+ const invocation = buildInvocation("cli", source, found.name, { args, source: "internal" }, { approved: true });
287
+ if (!invocation) {
288
+ return {
289
+ source,
290
+ records: [],
291
+ error: {
292
+ code: "build_invocation_failed",
293
+ message: `could not build invocation for ${source}.${found.name}`,
294
+ },
295
+ };
296
+ }
297
+ const result = await execute(invocation);
298
+ if (result.error) {
299
+ return {
300
+ source,
301
+ records: [],
302
+ error: {
303
+ code: result.error.code ?? "execution_error",
304
+ message: result.error.message ?? "adapter command failed",
305
+ },
306
+ };
307
+ }
308
+ return {
309
+ source,
310
+ records: coerceToScholarlyRecords(result.results, source),
311
+ };
312
+ }
313
+ function columns(detailed = false) {
314
+ return detailed
315
+ ? [
316
+ "id",
317
+ "title",
318
+ "authors",
319
+ "year",
320
+ "venue",
321
+ "type",
322
+ "doi",
323
+ "arxiv_id",
324
+ "pmid",
325
+ "cited_by_count",
326
+ "references_count",
327
+ "is_open_access",
328
+ "oa_status",
329
+ "pdf_url",
330
+ "source_adapter",
331
+ "source_url",
332
+ ]
333
+ : ["id", "title", "year", "venue", "doi", "pdf_url", "source_adapter"];
334
+ }
335
+ async function runSearch(program, query, opts) {
336
+ const startedAt = Date.now();
337
+ const fmt = detectFormat(program.opts().format);
338
+ const ctx = makeCtx("scholar.search", startedAt);
339
+ const limit = numberOpt(opts.limit, 20, 100);
340
+ const sources = resolveScholarSources(opts.sources);
341
+ const outcomes = [];
342
+ for (const source of sources) {
343
+ outcomes.push(await runAdapterCommand(source, "scholar.search", { query, limit }));
344
+ }
345
+ const fused = reciprocalRankFusion(outcomes.map((outcome) => outcome.records), { topN: limit });
346
+ ctx.duration_ms = Date.now() - startedAt;
347
+ ctx.surface = "web";
348
+ if (fused.length === 0) {
349
+ const errors = outcomes.filter((outcome) => outcome.error);
350
+ ctx.error = {
351
+ code: "SCHOLAR_NOT_FOUND",
352
+ message: `no scholarly works returned for "${query}" across [${sources.join(", ")}]`,
353
+ suggestion: errors.length > 0
354
+ ? `Per-source errors: ${errors.map((outcome) => `${outcome.source}: ${outcome.error?.code}`).join("; ")}`
355
+ : "Try --sources all or a more specific query.",
356
+ retryable: errors.some((outcome) => outcome.error?.code === "rate_limit"),
357
+ };
358
+ console.error(format(null, undefined, fmt, ctx));
359
+ process.exit(ExitCode.EMPTY_RESULT);
360
+ }
361
+ console.log(format(fused, columns(opts.detailed), fmt, ctx));
362
+ }
363
+ async function runSingle(program, capability, ref, opts) {
364
+ const startedAt = Date.now();
365
+ const fmt = detectFormat(program.opts().format);
366
+ const ctx = makeCtx(capability, startedAt);
367
+ const route = resolveScholarReference(ref);
368
+ const sourceList = opts.source
369
+ ? [opts.source]
370
+ : resolveScholarSources(opts.sources, route.preferredSources);
371
+ const outcomes = [];
372
+ for (const source of sourceList) {
373
+ outcomes.push(await runAdapterCommand(source, capability, {
374
+ ref: route.value,
375
+ id: route.value,
376
+ doi: route.kind === "doi" ? route.value : undefined,
377
+ arxiv_id: route.kind === "arxiv" ? route.value : undefined,
378
+ pmid: route.kind === "pmid" ? route.value : undefined,
379
+ }));
380
+ }
381
+ const fused = reciprocalRankFusion(outcomes.map((outcome) => outcome.records), { topN: capability === "scholar.pdf" ? 10 : 50 });
382
+ ctx.duration_ms = Date.now() - startedAt;
383
+ ctx.surface = "web";
384
+ if (fused.length === 0) {
385
+ const errors = outcomes.filter((outcome) => outcome.error);
386
+ ctx.error = {
387
+ code: "SCHOLAR_NOT_FOUND",
388
+ message: `no scholarly records returned for "${ref}" across [${sourceList.join(", ")}]`,
389
+ suggestion: errors.length > 0
390
+ ? `Per-source errors: ${errors.map((outcome) => `${outcome.source}: ${outcome.error?.code}`).join("; ")}`
391
+ : "Run `unicli scholar doctor` to inspect available scholarly sources.",
392
+ retryable: errors.some((outcome) => outcome.error?.code === "rate_limit"),
393
+ };
394
+ console.error(format(null, undefined, fmt, ctx));
395
+ process.exit(ExitCode.EMPTY_RESULT);
396
+ }
397
+ console.log(format(fused, columns(opts.detailed), fmt, ctx));
398
+ }
399
+ async function runDoctor(program, opts) {
400
+ const startedAt = Date.now();
401
+ const fmt = detectFormat(program.opts().format);
402
+ const ctx = makeCtx("scholar.doctor", startedAt);
403
+ const selected = resolveScholarSources(opts.sources, listScholarAdapters().map((adapter) => adapter.name));
404
+ const rows = listScholarAdapters()
405
+ .filter((adapter) => selected.includes(adapter.name))
406
+ .map((adapter) => {
407
+ const caps = new Set();
408
+ for (const command of Object.values(adapter.commands)) {
409
+ for (const cap of command.capabilities ?? []) {
410
+ if (cap.startsWith("scholar."))
411
+ caps.add(cap);
412
+ }
413
+ }
414
+ const health = resolveCommand(adapter.name, "health");
415
+ const strategy = health
416
+ ? commandStrategy(adapter, health.command)
417
+ : undefined;
418
+ return {
419
+ source: adapter.name,
420
+ capabilities: [...caps].sort(),
421
+ health: !health
422
+ ? "skipped"
423
+ : strategy !== undefined && strategy !== Strategy.PUBLIC
424
+ ? "blocked"
425
+ : "available",
426
+ detail: !health
427
+ ? "no `health` command — adapter passes by capability introspection"
428
+ : strategy !== undefined && strategy !== Strategy.PUBLIC
429
+ ? `health probe requires ${strategy} auth — skipped`
430
+ : "health probe command is public",
431
+ };
432
+ });
433
+ ctx.duration_ms = Date.now() - startedAt;
434
+ ctx.surface = "web";
435
+ console.log(format(rows, ["source", "capabilities", "health", "detail"], fmt, ctx));
436
+ }
437
+ export function registerScholarCommand(program) {
438
+ const scholar = program
439
+ .command("scholar")
440
+ .description("Scholarly meta-command — search, retrieve, PDF, citations, references, and source audit across first-source academic adapters");
441
+ scholar
442
+ .command("search <query>")
443
+ .description("Fan-out scholarly paper search across first-source adapters")
444
+ .option("--sources <csv>", "comma-separated source list, or `all`")
445
+ .option("--limit <n>", "maximum fused result count", "20")
446
+ .option("-D, --detailed", "include richer metadata columns")
447
+ .action(async (query, opts) => {
448
+ await runSearch(program, query, opts);
449
+ });
450
+ scholar
451
+ .command("get <ref>")
452
+ .description("Retrieve one paper/work by DOI, arXiv id, PMID, OpenAlex id, Semantic Scholar id, dblp key, or OpenReview forum")
453
+ .option("--source <site>", "force one source")
454
+ .option("--sources <csv>", "override auto-routed source list")
455
+ .option("-D, --detailed", "include richer metadata columns")
456
+ .action(async (ref, opts) => {
457
+ await runSingle(program, "scholar.get", ref, opts);
458
+ });
459
+ scholar
460
+ .command("pdf <ref>")
461
+ .description("Find open-access PDF candidates for a DOI, arXiv id, PMID, or source id")
462
+ .option("--source <site>", "force one source")
463
+ .option("--sources <csv>", "override auto-routed source list")
464
+ .option("-D, --detailed", "include richer metadata columns")
465
+ .action(async (ref, opts) => {
466
+ await runSingle(program, "scholar.pdf", ref, opts);
467
+ });
468
+ scholar
469
+ .command("citations <ref>")
470
+ .description("List works citing this paper when the source supports it")
471
+ .option("--source <site>", "force one source")
472
+ .option("--sources <csv>", "override auto-routed source list")
473
+ .option("-D, --detailed", "include richer metadata columns")
474
+ .action(async (ref, opts) => {
475
+ await runSingle(program, "scholar.citations", ref, opts);
476
+ });
477
+ scholar
478
+ .command("references <ref>")
479
+ .description("List works referenced by this paper when the source supports it")
480
+ .option("--source <site>", "force one source")
481
+ .option("--sources <csv>", "override auto-routed source list")
482
+ .option("-D, --detailed", "include richer metadata columns")
483
+ .action(async (ref, opts) => {
484
+ await runSingle(program, "scholar.references", ref, opts);
485
+ });
486
+ scholar
487
+ .command("doctor")
488
+ .description("Inspect registered scholarly adapters and capability tags")
489
+ .option("--sources <csv>", "limit to a comma-separated source list")
490
+ .action(async (opts) => {
491
+ await runDoctor(program, opts);
492
+ });
493
+ }
494
+ //# sourceMappingURL=scholar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scholar.js","sourceRoot":"","sources":["../../src/commands/scholar.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D5D"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D5D"}
@@ -25,12 +25,9 @@ export function registerSearchCommand(program) {
25
25
  process.exitCode = 2;
26
26
  return;
27
27
  }
28
- const effectiveQuery = opts.category
29
- ? `${opts.category} ${query}`.trim()
30
- : query;
31
- const results = search(effectiveQuery, limit);
28
+ const results = search(query, limit, { category: opts.category });
32
29
  if (results.length === 0) {
33
- console.error(chalk.yellow(`No commands found for: ${effectiveQuery}`));
30
+ console.error(chalk.yellow(`No commands found for: ${[opts.category, query].filter(Boolean).join(" ")}`));
34
31
  process.exitCode = 66; // EX_EMPTY
35
32
  return;
36
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI9D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,GAAG,CAAC;SAC7C,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;SAChD,MAAM,CACL,CAAC,UAAoB,EAAE,IAA0C,EAAE,EAAE;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,kEAAkE,CACnE,CACF,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ;YAClC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE;YACpC,CAAC,CAAC,KAAK,CAAC;QAEV,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,MAAM,CAAC,0BAA0B,cAAc,EAAE,CAAC,CACzD,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,WAAW;YAClC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,YAAY,CACtB,OAAO,CAAC,IAAI,EAAE,CAAC,MAAkC,CAClD,CAAC;QAEF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE;YACjC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,EAAE;YAC1D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC,CAAC;QAEJ,MAAM,GAAG,GAAiB;YACxB,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;YACvC,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CACrE,CAAC;IACJ,CAAC,CACF,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI9D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CACV,oEAAoE,CACrE;SACA,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,GAAG,CAAC;SAC7C,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;SAChD,MAAM,CACL,CAAC,UAAoB,EAAE,IAA0C,EAAE,EAAE;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CACP,kEAAkE,CACnE,CACF,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAElE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,MAAM,CACV,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC7E,CACF,CAAC;YACF,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,WAAW;YAClC,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,YAAY,CACtB,OAAO,CAAC,IAAI,EAAE,CAAC,MAAkC,CAClD,CAAC;QAEF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE;YACjC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,EAAE;YAC1D,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC,CAAC;QAEJ,MAAM,GAAG,GAAiB;YACxB,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;YACvC,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CACrE,CAAC;IACJ,CAAC,CACF,CAAC;AACN,CAAC"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @owner src/discovery/aliases.ts
3
- * @does Define bilingual aliases, action synonyms, domain synonyms, and site categories.
3
+ * @does Define bilingual aliases, action synonyms, domain synonyms, site categories, and scholarly discovery vocabulary.
4
4
  * @needs Supported site ids, discovery search scoring rules
5
- * @feeds src/discovery/search.ts, generated manifest categories
5
+ * @feeds src/discovery/search.ts, src/registry.ts, generated manifest categories
6
6
  * @breaks Missing aliases or categories degrade command discovery relevance.
7
7
  */
8
8
  export declare const SITE_ALIASES: ReadonlyMap<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/discovery/aliases.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAiLnD,CAAC;AAKH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAuIhE,CAAC;AAKH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CA+bhE,CAAC;AAKH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAyNtD,CAAC;AAKH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CA6CvD,CAAC;AAIH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBnD;AASD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAiCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAiErD"}
1
+ {"version":3,"file":"aliases.d.ts","sourceRoot":"","sources":["../../src/discovery/aliases.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAiLnD,CAAC;AAKH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAuIhE,CAAC;AAKH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CA8gBhE,CAAC;AAKH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAmStD,CAAC;AAKH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAiEvD,CAAC;AAIH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBnD;AASD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAiCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAiErD"}