@zenalexa/unicli 0.225.1 → 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 (271) hide show
  1. package/AGENTS.md +3 -3
  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/browser/protocol.d.ts +6 -1
  93. package/dist/browser/protocol.d.ts.map +1 -1
  94. package/dist/browser/protocol.js.map +1 -1
  95. package/dist/commands/browser/actions.d.ts.map +1 -1
  96. package/dist/commands/browser/actions.js +487 -8
  97. package/dist/commands/browser/actions.js.map +1 -1
  98. package/dist/commands/compute.js +12 -1
  99. package/dist/commands/compute.js.map +1 -1
  100. package/dist/commands/schema.d.ts.map +1 -1
  101. package/dist/commands/schema.js +22 -0
  102. package/dist/commands/schema.js.map +1 -1
  103. package/dist/commands/scholar.d.ts +77 -5
  104. package/dist/commands/scholar.d.ts.map +1 -1
  105. package/dist/commands/scholar.js +2945 -83
  106. package/dist/commands/scholar.js.map +1 -1
  107. package/dist/commands/search.d.ts.map +1 -1
  108. package/dist/commands/search.js +14 -3
  109. package/dist/commands/search.js.map +1 -1
  110. package/dist/compute/contracts.d.ts +55 -0
  111. package/dist/compute/contracts.d.ts.map +1 -0
  112. package/dist/compute/contracts.js +487 -0
  113. package/dist/compute/contracts.js.map +1 -0
  114. package/dist/core/command-contract.d.ts.map +1 -1
  115. package/dist/core/command-contract.js +5 -0
  116. package/dist/core/command-contract.js.map +1 -1
  117. package/dist/core/schema-v2.d.ts +1 -0
  118. package/dist/core/schema-v2.d.ts.map +1 -1
  119. package/dist/core/schema-v2.js +1 -0
  120. package/dist/core/schema-v2.js.map +1 -1
  121. package/dist/discovery/aliases.d.ts +8 -1
  122. package/dist/discovery/aliases.d.ts.map +1 -1
  123. package/dist/discovery/aliases.js +333 -20
  124. package/dist/discovery/aliases.js.map +1 -1
  125. package/dist/discovery/core-catalog.d.ts +2 -0
  126. package/dist/discovery/core-catalog.d.ts.map +1 -1
  127. package/dist/discovery/core-catalog.js +525 -66
  128. package/dist/discovery/core-catalog.js.map +1 -1
  129. package/dist/discovery/intents.d.ts +1 -0
  130. package/dist/discovery/intents.d.ts.map +1 -1
  131. package/dist/discovery/intents.js +299 -2
  132. package/dist/discovery/intents.js.map +1 -1
  133. package/dist/discovery/loader.d.ts.map +1 -1
  134. package/dist/discovery/loader.js +3 -0
  135. package/dist/discovery/loader.js.map +1 -1
  136. package/dist/discovery/macos-dynamic.d.ts +1 -0
  137. package/dist/discovery/macos-dynamic.d.ts.map +1 -1
  138. package/dist/discovery/macos-dynamic.js +20 -1
  139. package/dist/discovery/macos-dynamic.js.map +1 -1
  140. package/dist/discovery/search.d.ts.map +1 -1
  141. package/dist/discovery/search.js +12 -5
  142. package/dist/discovery/search.js.map +1 -1
  143. package/dist/engine/browser/evidence.d.ts +34 -1
  144. package/dist/engine/browser/evidence.d.ts.map +1 -1
  145. package/dist/engine/browser/evidence.js +141 -6
  146. package/dist/engine/browser/evidence.js.map +1 -1
  147. package/dist/engine/capability-policy.d.ts.map +1 -1
  148. package/dist/engine/capability-policy.js +30 -4
  149. package/dist/engine/capability-policy.js.map +1 -1
  150. package/dist/engine/kernel/stages.d.ts.map +1 -1
  151. package/dist/engine/kernel/stages.js +3 -0
  152. package/dist/engine/kernel/stages.js.map +1 -1
  153. package/dist/engine/operation-policy.d.ts +4 -1
  154. package/dist/engine/operation-policy.d.ts.map +1 -1
  155. package/dist/engine/operation-policy.js +23 -0
  156. package/dist/engine/operation-policy.js.map +1 -1
  157. package/dist/engine/steps/fetch-text.d.ts.map +1 -1
  158. package/dist/engine/steps/fetch-text.js +2 -2
  159. package/dist/engine/steps/fetch-text.js.map +1 -1
  160. package/dist/engine/steps/fetch.d.ts +1 -0
  161. package/dist/engine/steps/fetch.d.ts.map +1 -1
  162. package/dist/engine/steps/fetch.js +24 -4
  163. package/dist/engine/steps/fetch.js.map +1 -1
  164. package/dist/fast-path/handlers/discovery.d.ts +5 -5
  165. package/dist/fast-path/handlers/discovery.d.ts.map +1 -1
  166. package/dist/fast-path/handlers/discovery.js +61 -8
  167. package/dist/fast-path/handlers/discovery.js.map +1 -1
  168. package/dist/fast-path/manifest.d.ts +3 -0
  169. package/dist/fast-path/manifest.d.ts.map +1 -1
  170. package/dist/fast-path/manifest.js.map +1 -1
  171. package/dist/fast-path/policy.d.ts.map +1 -1
  172. package/dist/fast-path/policy.js +3 -0
  173. package/dist/fast-path/policy.js.map +1 -1
  174. package/dist/fast-path/render.d.ts +2 -0
  175. package/dist/fast-path/render.d.ts.map +1 -1
  176. package/dist/fast-path/render.js +9 -0
  177. package/dist/fast-path/render.js.map +1 -1
  178. package/dist/manifest-compact.txt +2 -2
  179. package/dist/manifest.json +6977 -1002
  180. package/dist/mcp/handler.d.ts +2 -16
  181. package/dist/mcp/handler.d.ts.map +1 -1
  182. package/dist/mcp/handler.js.map +1 -1
  183. package/dist/mcp/http-transport.d.ts +7 -1
  184. package/dist/mcp/http-transport.d.ts.map +1 -1
  185. package/dist/mcp/http-transport.js +20 -1
  186. package/dist/mcp/http-transport.js.map +1 -1
  187. package/dist/mcp/jsonrpc.d.ts +27 -0
  188. package/dist/mcp/jsonrpc.d.ts.map +1 -0
  189. package/dist/mcp/jsonrpc.js +12 -0
  190. package/dist/mcp/jsonrpc.js.map +1 -0
  191. package/dist/mcp/origin-guard.d.ts +26 -0
  192. package/dist/mcp/origin-guard.d.ts.map +1 -0
  193. package/dist/mcp/origin-guard.js +42 -0
  194. package/dist/mcp/origin-guard.js.map +1 -0
  195. package/dist/mcp/profiles/computer-use.d.ts.map +1 -1
  196. package/dist/mcp/profiles/computer-use.js +30 -270
  197. package/dist/mcp/profiles/computer-use.js.map +1 -1
  198. package/dist/mcp/streamable-http/session.d.ts +4 -22
  199. package/dist/mcp/streamable-http/session.d.ts.map +1 -1
  200. package/dist/mcp/streamable-http/session.js +4 -24
  201. package/dist/mcp/streamable-http/session.js.map +1 -1
  202. package/dist/mcp/tools.d.ts.map +1 -1
  203. package/dist/mcp/tools.js +74 -54
  204. package/dist/mcp/tools.js.map +1 -1
  205. package/dist/output/envelope.d.ts +2 -0
  206. package/dist/output/envelope.d.ts.map +1 -1
  207. package/dist/output/envelope.js.map +1 -1
  208. package/dist/output/error-map.d.ts +14 -0
  209. package/dist/output/error-map.d.ts.map +1 -1
  210. package/dist/output/error-map.js +20 -0
  211. package/dist/output/error-map.js.map +1 -1
  212. package/dist/registry.d.ts +2 -0
  213. package/dist/registry.d.ts.map +1 -1
  214. package/dist/registry.js +1 -0
  215. package/dist/registry.js.map +1 -1
  216. package/dist/transport/cascade.d.ts.map +1 -1
  217. package/dist/transport/cascade.js +77 -5
  218. package/dist/transport/cascade.js.map +1 -1
  219. package/dist/transport/refs.d.ts +33 -1
  220. package/dist/transport/refs.d.ts.map +1 -1
  221. package/dist/transport/refs.js +40 -1
  222. package/dist/transport/refs.js.map +1 -1
  223. package/dist/types/scholarly.d.ts +19 -4
  224. package/dist/types/scholarly.d.ts.map +1 -1
  225. package/dist/types/scholarly.js +4 -4
  226. package/dist/types.d.ts +8 -0
  227. package/dist/types.d.ts.map +1 -1
  228. package/dist/types.js.map +1 -1
  229. package/package.json +1 -1
  230. package/server.json +2 -2
  231. package/skills/unicli/SKILL.md +1 -1
  232. package/skills/unicli-claude-code/SKILL.md +1 -1
  233. package/skills/unicli-hermes/SKILL.md +1 -1
  234. package/src/adapters/acl-anthology/papers.test.ts +111 -0
  235. package/src/adapters/acl-anthology/papers.ts +379 -71
  236. package/src/adapters/arxiv/papers.test.ts +46 -0
  237. package/src/adapters/arxiv/papers.ts +251 -4
  238. package/src/adapters/baidu-scholar/search.ts +74 -11
  239. package/src/adapters/biorxiv/preprints.ts +112 -0
  240. package/src/adapters/cnki/search.ts +357 -0
  241. package/src/adapters/cvf/papers.ts +260 -27
  242. package/src/adapters/dblp/publications.test.ts +9 -0
  243. package/src/adapters/dblp/publications.ts +31 -8
  244. package/src/adapters/defuddle/read.yaml +30 -0
  245. package/src/adapters/google-scholar/search.ts +165 -17
  246. package/src/adapters/hf/paper.test.ts +23 -0
  247. package/src/adapters/hf/paper.ts +89 -5
  248. package/src/adapters/hf/top.yaml +34 -2
  249. package/src/adapters/huggingface-papers/daily.yaml +37 -3
  250. package/src/adapters/huggingface-papers/search.yaml +43 -9
  251. package/src/adapters/jina/read.yaml +30 -0
  252. package/src/adapters/markdown-new/read.yaml +50 -0
  253. package/src/adapters/medrxiv/preprints.ts +112 -0
  254. package/src/adapters/neurips/proceedings.ts +266 -22
  255. package/src/adapters/ollama-cloud/fetch.yaml +39 -0
  256. package/src/adapters/ollama-cloud/search.yaml +43 -0
  257. package/src/adapters/openalex/works.test.ts +15 -4
  258. package/src/adapters/openalex/works.ts +136 -8
  259. package/src/adapters/openreview/papers.test.ts +31 -0
  260. package/src/adapters/openreview/papers.ts +407 -29
  261. package/src/adapters/pmlr/proceedings.ts +102 -12
  262. package/src/adapters/pubmed/articles.test.ts +88 -1
  263. package/src/adapters/pubmed/articles.ts +343 -44
  264. package/src/adapters/rxiv/preprints.test.ts +233 -0
  265. package/src/adapters/rxiv/preprints.ts +849 -0
  266. package/src/adapters/scholar-artifacts/pdf-read.ts +277 -0
  267. package/src/adapters/scholar-artifacts/pdf.ts +133 -0
  268. package/src/adapters/semantic-scholar/papers.ts +98 -6
  269. package/src/adapters/unpaywall/works.ts +141 -12
  270. package/src/adapters/wanfang/search.ts +57 -7
  271. package/src/adapters/cnki/search.yaml +0 -49
@@ -3,11 +3,27 @@
3
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
5
  * @feeds src/discovery/search.ts, src/registry.ts, generated manifest categories
6
- * @breaks Missing aliases or categories degrade command discovery relevance.
6
+ * @breaks Throws at module load on duplicate alias keys; missing aliases or categories degrade command discovery relevance.
7
7
  */
8
+ /**
9
+ * Map constructor that throws on duplicate keys. JS Map literals silently
10
+ * keep the last duplicate, which already cost a synonym in production
11
+ * (行情 appeared twice and dropped "market"); a hand-maintained table this
12
+ * size must fail loudly at load instead.
13
+ */
14
+ export function strictMap(entries) {
15
+ const aliasTable = new Map();
16
+ for (const [key, value] of entries) {
17
+ if (aliasTable.has(key)) {
18
+ throw new Error(`Duplicate alias key: ${String(key)}`);
19
+ }
20
+ aliasTable.set(key, value);
21
+ }
22
+ return aliasTable;
23
+ }
8
24
  // ── Site Aliases ────────────────────────────────────────────────────────────
9
25
  // Chinese name / abbreviation → canonical site identifier
10
- export const SITE_ALIASES = new Map([
26
+ export const SITE_ALIASES = strictMap([
11
27
  // Chinese social
12
28
  ["推特", "twitter"],
13
29
  ["微博", "weibo"],
@@ -22,7 +38,7 @@ export const SITE_ALIASES = new Map([
22
38
  ["b站", "bilibili"],
23
39
  ["哔哩哔哩", "bilibili"],
24
40
  ["微信", "weixin"],
25
- ["飞书", "lark"],
41
+ ["飞书", "feishu"],
26
42
  ["钉钉", "dingtalk"],
27
43
  ["企业微信", "wechat-work"],
28
44
  ["网易云", "netease-music"],
@@ -58,6 +74,18 @@ export const SITE_ALIASES = new Map([
58
74
  ["什么值得买", "smzdm"],
59
75
  ["当当", "dangdang"],
60
76
  // Chinese news/knowledge
77
+ ["百度", "baidu"],
78
+ ["头条", "toutiao"],
79
+ ["今日头条", "toutiao"],
80
+ ["维基百科", "wikipedia"],
81
+ ["维基", "wikipedia"],
82
+ ["知识星球", "zsxq"],
83
+ ["谷歌", "google"],
84
+ ["猫眼", "maoyan"],
85
+ ["携程", "ctrip"],
86
+ ["即梦", "jimeng"],
87
+ ["元宝", "yuanbao"],
88
+ ["腾讯元宝", "yuanbao"],
61
89
  ["少数派", "sspai"],
62
90
  ["微信读书", "weread"],
63
91
  ["小宇宙", "xiaoyuzhou"],
@@ -188,7 +216,7 @@ export const SITE_ALIASES = new Map([
188
216
  ]);
189
217
  // ── Action Verb Aliases ─────────────────────────────────────────────────────
190
218
  // Intent verb → English canonical forms used in command names
191
- export const ACTION_ALIASES = new Map([
219
+ export const ACTION_ALIASES = strictMap([
192
220
  // Search intent
193
221
  ["搜索", ["search", "find", "query", "lookup"]],
194
222
  ["搜", ["search", "find"]],
@@ -258,11 +286,27 @@ export const ACTION_ALIASES = new Map([
258
286
  ["profile", ["profile", "user", "info"]],
259
287
  [
260
288
  "作者",
261
- ["author", "authors", "creator", "creators", "artist", "artists", "staff"],
289
+ [
290
+ "author",
291
+ "authors",
292
+ "creator",
293
+ "creators",
294
+ "artist",
295
+ "artists",
296
+ "staff",
297
+ ],
262
298
  ],
263
299
  [
264
300
  "画师",
265
- ["artist", "artists", "creator", "creators", "author", "authors", "staff"],
301
+ [
302
+ "artist",
303
+ "artists",
304
+ "creator",
305
+ "creators",
306
+ "author",
307
+ "authors",
308
+ "staff",
309
+ ],
266
310
  ],
267
311
  ["漫画家", ["mangaka", "author", "authors", "artist", "artists", "staff"]],
268
312
  ["作家", ["author", "authors", "creator", "creators", "staff"]],
@@ -285,7 +329,15 @@ export const ACTION_ALIASES = new Map([
285
329
  ],
286
330
  [
287
331
  "artist",
288
- ["artist", "artists", "creator", "creators", "author", "authors", "staff"],
332
+ [
333
+ "artist",
334
+ "artists",
335
+ "creator",
336
+ "creators",
337
+ "author",
338
+ "authors",
339
+ "staff",
340
+ ],
289
341
  ],
290
342
  [
291
343
  "creator",
@@ -322,23 +374,29 @@ export const ACTION_ALIASES = new Map([
322
374
  ]);
323
375
  // ── Domain Term Aliases ─────────────────────────────────────────────────────
324
376
  // Subject domain → English terms that appear in command descriptions
325
- export const DOMAIN_ALIASES = new Map([
377
+ export const DOMAIN_ALIASES = strictMap([
326
378
  // Finance
327
379
  ["股票", ["stock", "quote", "ticker", "finance", "market"]],
380
+ ["股价", ["stock", "quote", "price", "ticker"]],
328
381
  ["基金", ["fund", "finance", "portfolio"]],
329
382
  ["行情", ["quote", "market", "price", "ticker"]],
330
383
  ["汇率", ["exchange", "rate", "currency", "forex"]],
331
384
  ["加密货币", ["crypto", "coin", "token", "bitcoin"]],
385
+ ["经济", ["economics", "economy", "finance", "macro"]],
332
386
  ["stock", ["stock", "quote", "ticker", "finance"]],
333
387
  ["crypto", ["crypto", "coin", "token", "bitcoin"]],
334
388
  ["finance", ["stock", "finance", "market", "quote"]],
335
389
  // Video / Media
336
390
  ["视频", ["video", "clip", "stream", "watch"]],
391
+ ["字幕", ["subtitle", "subtitles", "transcript", "caption"]],
392
+ ["逐字稿", ["transcript", "subtitles", "text"]],
337
393
  ["弹幕", ["danmaku", "comment", "barrage"]],
338
394
  ["直播", ["live", "stream", "broadcast"]],
339
395
  ["音乐", ["music", "song", "audio", "playlist"]],
340
396
  ["歌曲", ["song", "track", "music", "audio"]],
341
397
  ["播客", ["podcast", "audio", "episode"]],
398
+ ["压缩", ["compress", "encode", "convert"]],
399
+ ["热映", ["hot", "movie", "movies", "playing"]],
342
400
  ["video", ["video", "clip", "stream"]],
343
401
  ["music", ["music", "song", "audio"]],
344
402
  ["song", ["song", "track", "music", "audio"]],
@@ -359,6 +417,15 @@ export const DOMAIN_ALIASES = new Map([
359
417
  ["文章", ["article", "post", "story"]],
360
418
  ["资讯", ["news", "feed", "updates"]],
361
419
  ["帖子", ["post", "thread", "topic"]],
420
+ ["动态", ["feed", "dynamic", "timeline", "moments"]],
421
+ ["时间线", ["timeline", "feed"]],
422
+ ["收藏", ["favorites", "favorite", "bookmark", "bookmarks", "saved"]],
423
+ ["推文", ["tweet", "tweets", "post", "twitter"]],
424
+ ["回答", ["answer", "answers"]],
425
+ ["笔记", ["note", "notes"]],
426
+ ["对话", ["chat", "ask", "conversation", "talk"]],
427
+ ["每日", ["daily"]],
428
+ ["词典", ["dictionary", "definition", "word"]],
362
429
  ["news", ["news", "article", "headline"]],
363
430
  ["article", ["article", "post", "story"]],
364
431
  // Tech / Dev
@@ -372,7 +439,6 @@ export const DOMAIN_ALIASES = new Map([
372
439
  // Shopping
373
440
  ["商品", ["product", "item", "goods"]],
374
441
  ["价格", ["price", "cost"]],
375
- ["行情", ["ticker", "price", "quote"]],
376
442
  ["成交", ["trades", "trade", "volume"]],
377
443
  ["最新成交", ["trades", "trade"]],
378
444
  ["深度", ["depth", "orderbook", "book"]],
@@ -385,6 +451,13 @@ export const DOMAIN_ALIASES = new Map([
385
451
  ["订单", ["order", "purchase"]],
386
452
  ["product", ["product", "item", "goods"]],
387
453
  ["price", ["price", "cost", "deal"]],
454
+ // Desktop / System
455
+ ["通知", ["notification", "notifications", "notify", "alert"]],
456
+ ["notifications", ["notification", "notifications", "notify"]],
457
+ ["电池", ["battery", "power"]],
458
+ ["亮度", ["brightness", "display"]],
459
+ ["音量", ["volume", "sound", "audio"]],
460
+ ["缩放", ["resize", "scale", "zoom"]],
388
461
  // Job / Career
389
462
  ["工作", ["job", "position", "career"]],
390
463
  ["招聘", ["job", "hire", "recruit"]],
@@ -406,7 +479,33 @@ export const DOMAIN_ALIASES = new Map([
406
479
  "literature",
407
480
  ],
408
481
  ],
409
- ["学术", ["academic", "research", "scholar", "scholarly", "paper", "papers"]],
482
+ [
483
+ "学术",
484
+ ["academic", "research", "scholar", "scholarly", "paper", "papers"],
485
+ ],
486
+ [
487
+ "学术网站",
488
+ [
489
+ "academic",
490
+ "scholar",
491
+ "scholarly",
492
+ "coverage",
493
+ "source",
494
+ "sources",
495
+ "site",
496
+ "sites",
497
+ ],
498
+ ],
499
+ [
500
+ "学术源",
501
+ ["academic", "scholar", "scholarly", "coverage", "source", "sources"],
502
+ ],
503
+ [
504
+ "来源对比",
505
+ ["coverage", "compare", "comparison", "source", "sources", "sites"],
506
+ ],
507
+ ["覆盖矩阵", ["coverage", "matrix", "gap", "gaps", "sources"]],
508
+ ["学术缺口", ["academic", "scholar", "coverage", "gap", "gaps"]],
410
509
  [
411
510
  "文献",
412
511
  [
@@ -420,8 +519,185 @@ export const DOMAIN_ALIASES = new Map([
420
519
  ],
421
520
  ["引用", ["citation", "citations", "reference", "references"]],
422
521
  ["参考文献", ["reference", "references", "citation", "citations"]],
522
+ ["审稿", ["review", "reviews", "peer", "openreview", "paper"]],
523
+ ["评审", ["review", "reviews", "peer", "openreview", "paper"]],
524
+ [
525
+ "同行评审",
526
+ ["peer", "review", "reviews", "openreview", "paper", "decision"],
527
+ ],
528
+ [
529
+ "审稿意见",
530
+ ["review", "reviews", "peer", "openreview", "paper", "decision"],
531
+ ],
532
+ [
533
+ "评审意见",
534
+ ["review", "reviews", "peer", "openreview", "paper", "decision"],
535
+ ],
536
+ ["接收决定", ["decision", "review", "reviews", "openreview", "paper"]],
537
+ ["作者回复", ["rebuttal", "review", "reviews", "openreview", "paper"]],
423
538
  ["期刊", ["journal", "publication", "paper", "papers"]],
424
539
  ["会议论文", ["conference", "paper", "papers", "proceedings"]],
540
+ ["论文代码", ["paper", "code", "repo", "repository", "github"]],
541
+ [
542
+ "论文复现",
543
+ ["paper", "reproduce", "reproducibility", "replicate", "code", "dataset"],
544
+ ],
545
+ [
546
+ "代码安装",
547
+ ["paper", "install", "installation", "setup", "environment", "code"],
548
+ ],
549
+ ["运行代码", ["paper", "run", "code", "setup", "environment", "reproduce"]],
550
+ [
551
+ "复现实验",
552
+ ["paper", "reproduce", "replicate", "experiment", "code", "dataset"],
553
+ ],
554
+ ["数据集", ["dataset", "datasets", "data", "paper"]],
555
+ ["论文数据", ["dataset", "datasets", "data", "paper"]],
556
+ [
557
+ "论文审计",
558
+ [
559
+ "paper",
560
+ "availability",
561
+ "audit",
562
+ "evidence",
563
+ "citation",
564
+ "references",
565
+ "review",
566
+ ],
567
+ ],
568
+ [
569
+ "文献审计",
570
+ [
571
+ "literature",
572
+ "paper",
573
+ "availability",
574
+ "audit",
575
+ "evidence",
576
+ "citation",
577
+ "references",
578
+ ],
579
+ ],
580
+ [
581
+ "学术来源对比",
582
+ [
583
+ "academic",
584
+ "scholar",
585
+ "source",
586
+ "sources",
587
+ "compare",
588
+ "paper",
589
+ "evidence",
590
+ ],
591
+ ],
592
+ [
593
+ "论文来源对比",
594
+ ["paper", "source", "sources", "compare", "evidence", "audit"],
595
+ ],
596
+ [
597
+ "论文来源逐站点对比",
598
+ [
599
+ "paper",
600
+ "source",
601
+ "sources",
602
+ "site",
603
+ "sites",
604
+ "compare",
605
+ "evidence",
606
+ "audit",
607
+ ],
608
+ ],
609
+ [
610
+ "逐站点对比",
611
+ ["source", "sources", "site", "sites", "compare", "paper", "evidence"],
612
+ ],
613
+ [
614
+ "站点对比",
615
+ ["source", "sources", "site", "sites", "compare", "paper", "evidence"],
616
+ ],
617
+ [
618
+ "学术网站对比",
619
+ [
620
+ "academic",
621
+ "scholar",
622
+ "site",
623
+ "sites",
624
+ "source",
625
+ "sources",
626
+ "compare",
627
+ "evidence",
628
+ ],
629
+ ],
630
+ [
631
+ "学术闭环",
632
+ ["academic", "scholar", "workflow", "runbook", "closed", "loop", "agent"],
633
+ ],
634
+ [
635
+ "完整闭环",
636
+ ["workflow", "runbook", "closed", "loop", "end-to-end", "agent", "paper"],
637
+ ],
638
+ [
639
+ "闭环工作流",
640
+ [
641
+ "workflow",
642
+ "runbook",
643
+ "closed",
644
+ "loop",
645
+ "step",
646
+ "steps",
647
+ "agent",
648
+ "paper",
649
+ ],
650
+ ],
651
+ [
652
+ "资源闭环",
653
+ [
654
+ "resource",
655
+ "resources",
656
+ "workflow",
657
+ "runbook",
658
+ "closed",
659
+ "loop",
660
+ "agent",
661
+ "paper",
662
+ ],
663
+ ],
664
+ ["论文闭环", ["paper", "workflow", "runbook", "closed", "loop", "agent"]],
665
+ [
666
+ "文献闭环",
667
+ ["literature", "paper", "workflow", "runbook", "closed", "loop", "agent"],
668
+ ],
669
+ [
670
+ "学术工作流",
671
+ ["academic", "scholar", "workflow", "runbook", "step", "steps"],
672
+ ],
673
+ ["论文工作流", ["paper", "workflow", "runbook", "step", "steps", "agent"]],
674
+ ["Agent闭环", ["agent", "workflow", "runbook", "closed", "loop", "paper"]],
675
+ [
676
+ "操作闭环",
677
+ ["workflow", "runbook", "closed", "loop", "step", "steps", "agent"],
678
+ ],
679
+ ["可读", ["availability", "available", "read", "fulltext", "paper"]],
680
+ [
681
+ "证据分级",
682
+ ["paper", "evidence", "classify", "classification", "citation", "safety"],
683
+ ],
684
+ [
685
+ "引用安全",
686
+ ["paper", "citation", "safety", "evidence", "verify", "source"],
687
+ ],
688
+ [
689
+ "一手证据",
690
+ ["paper", "primary", "source", "evidence", "provenance", "verified"],
691
+ ],
692
+ [
693
+ "可信文献",
694
+ ["paper", "trustworthy", "evidence", "verify", "citation", "safety"],
695
+ ],
696
+ [
697
+ "幻觉文献",
698
+ ["paper", "evidence", "classify", "citation", "safety", "hallucination"],
699
+ ],
700
+ ["模型", ["model", "models", "paper"]],
425
701
  ["课程", ["course", "class", "lesson"]],
426
702
  ["paper", ["paper", "papers", "thesis", "research", "academic"]],
427
703
  ["papers", ["papers", "paper", "research", "academic", "scholarly"]],
@@ -431,10 +707,18 @@ export const DOMAIN_ALIASES = new Map([
431
707
  ],
432
708
  ["scholar", ["scholar", "scholarly", "academic", "research", "paper"]],
433
709
  ["scholarly", ["scholarly", "academic", "research", "paper", "papers"]],
434
- ["literature", ["literature", "publication", "paper", "papers", "research"]],
710
+ [
711
+ "literature",
712
+ ["literature", "publication", "paper", "papers", "research"],
713
+ ],
435
714
  ["publication", ["publication", "paper", "papers", "research"]],
436
715
  ["bibliography", ["bibliography", "citation", "references", "dblp"]],
437
716
  ["citation", ["citation", "citations", "reference", "references"]],
717
+ ["dataset", ["dataset", "datasets", "data", "paper"]],
718
+ ["datasets", ["datasets", "dataset", "data", "paper"]],
719
+ ["model", ["model", "models", "paper"]],
720
+ ["models", ["models", "model", "paper"]],
721
+ ["github", ["github", "repo", "repository", "code"]],
438
722
  ["doi", ["doi", "paper", "publication"]],
439
723
  ["semantic scholar", ["semantic", "scholar", "paper", "citation"]],
440
724
  ["semanticscholar", ["semantic", "scholar", "paper", "citation"]],
@@ -464,21 +748,33 @@ export const DOMAIN_ALIASES = new Map([
464
748
  "icse",
465
749
  ["icse", "software", "engineering", "conference", "paper", "papers"],
466
750
  ],
467
- ["fse", ["fse", "software", "engineering", "conference", "paper", "papers"]],
468
- ["ase", ["ase", "software", "engineering", "conference", "paper", "papers"]],
751
+ [
752
+ "fse",
753
+ ["fse", "software", "engineering", "conference", "paper", "papers"],
754
+ ],
755
+ [
756
+ "ase",
757
+ ["ase", "software", "engineering", "conference", "paper", "papers"],
758
+ ],
469
759
  [
470
760
  "pldi",
471
761
  ["pldi", "programming", "language", "conference", "paper", "papers"],
472
762
  ],
473
763
  ["experiment", ["experiment", "experiments", "method", "results", "paper"]],
474
- ["experiments", ["experiments", "experiment", "method", "results", "paper"]],
764
+ [
765
+ "experiments",
766
+ ["experiments", "experiment", "method", "results", "paper"],
767
+ ],
475
768
  ["method", ["method", "methods", "experiment", "paper"]],
476
769
  ["methods", ["methods", "method", "experiment", "paper"]],
477
770
  ["results", ["results", "experiment", "conclusion", "paper"]],
478
771
  ["conclusion", ["conclusion", "results", "paper"]],
479
772
  ["research", ["research", "paper", "papers", "academic", "scholarly"]],
480
773
  // Philosophy and Marxism archives
481
- ["马克思主义", ["marxism", "marxist", "marxists", "socialism", "philosophy"]],
774
+ [
775
+ "马克思主义",
776
+ ["marxism", "marxist", "marxists", "socialism", "philosophy"],
777
+ ],
482
778
  [
483
779
  "西马",
484
780
  [
@@ -541,7 +837,10 @@ export const DOMAIN_ALIASES = new Map([
541
837
  ],
542
838
  ["阿多诺", ["adorno", "frankfurt", "western", "marxism", "marxist"]],
543
839
  ["马尔库塞", ["marcuse", "frankfurt", "western", "marxism", "marxist"]],
544
- ["阿尔都塞", ["althusser", "western", "marxism", "marxist", "structuralism"]],
840
+ [
841
+ "阿尔都塞",
842
+ ["althusser", "western", "marxism", "marxist", "structuralism"],
843
+ ],
545
844
  ["曼德尔", ["mandel", "western", "marxism", "marxist", "economics"]],
546
845
  ["著名", ["famous", "classic", "canonical", "canon"]],
547
846
  ["经典", ["classic", "canonical", "canon"]],
@@ -611,7 +910,15 @@ export const DOMAIN_ALIASES = new Map([
611
910
  ],
612
911
  [
613
912
  "タグ",
614
- ["tag", "tags", "danbooru", "yandere", "konachan", "safebooru", "ehentai"],
913
+ [
914
+ "tag",
915
+ "tags",
916
+ "danbooru",
917
+ "yandere",
918
+ "konachan",
919
+ "safebooru",
920
+ "ehentai",
921
+ ],
615
922
  ],
616
923
  [
617
924
  "booru",
@@ -952,7 +1259,7 @@ export const DOMAIN_ALIASES = new Map([
952
1259
  ]);
953
1260
  // ── Category Mapping ────────────────────────────────────────────────────────
954
1261
  // Site → category for category-based boosting in search results
955
- export const SITE_CATEGORIES = new Map([
1262
+ export const SITE_CATEGORIES = strictMap([
956
1263
  // Social
957
1264
  ["twitter", "social"],
958
1265
  ["weibo", "social"],
@@ -1111,6 +1418,8 @@ export const SITE_CATEGORIES = new Map([
1111
1418
  ["openreview", "scholarly"],
1112
1419
  ["dblp", "scholarly"],
1113
1420
  ["pubmed", "scholarly"],
1421
+ ["biorxiv", "scholarly"],
1422
+ ["medrxiv", "scholarly"],
1114
1423
  ["acl-anthology", "scholarly"],
1115
1424
  ["pmlr", "scholarly"],
1116
1425
  ["cvf", "scholarly"],
@@ -1120,6 +1429,7 @@ export const SITE_CATEGORIES = new Map([
1120
1429
  ["google-scholar", "scholarly"],
1121
1430
  ["baidu-scholar", "scholarly"],
1122
1431
  ["huggingface-papers", "scholarly"],
1432
+ ["scholar-artifacts", "scholarly"],
1123
1433
  ["paperreview", "scholarly"],
1124
1434
  ["zotero", "scholarly"],
1125
1435
  // Patent / IP
@@ -1234,7 +1544,7 @@ export const SITE_CATEGORIES = new Map([
1234
1544
  ]);
1235
1545
  // ── Category Aliases ────────────────────────────────────────────────────────
1236
1546
  // Chinese category terms → canonical category names
1237
- export const CATEGORY_ALIASES = new Map([
1547
+ export const CATEGORY_ALIASES = strictMap([
1238
1548
  ["社交", "social"],
1239
1549
  ["社区", "social"],
1240
1550
  ["视频", "video"],
@@ -1432,7 +1742,10 @@ export function tokenizeQuery(query) {
1432
1742
  tokens.push(seg.text);
1433
1743
  }
1434
1744
  else {
1435
- // English: split on internal delimiters
1745
+ // English: keep the unsplit form (so hyphenated site names like
1746
+ // "yt-dlp" still match site lookups) and split on internal delimiters
1747
+ if (/[-_/]/.test(seg.text))
1748
+ tokens.push(seg.text);
1436
1749
  tokens.push(...seg.text.split(/[-_/]/).filter((w) => w.length > 0));
1437
1750
  }
1438
1751
  }