argo-search 2.9.7 → 2.9.9

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 (154) hide show
  1. package/README.en.md +73 -150
  2. package/README.es.md +73 -150
  3. package/README.ja.md +79 -156
  4. package/README.ko.md +78 -155
  5. package/README.md +80 -159
  6. package/SKILL.md +3 -3
  7. package/assets/readme/hero.svg +2 -2
  8. package/backends/domain_profiles.json +48 -0
  9. package/backends/engine_registry.yaml +118 -4
  10. package/backends/quota_profiles.json +92 -12
  11. package/backends/source_types_cn.json +27 -1
  12. package/bin/argo +78 -5
  13. package/bin/argo.js +33 -2
  14. package/config.yaml +269 -63
  15. package/docs/ARGO_INTRO.md +5 -3
  16. package/docs/ENGINE_CATALOG.md +50 -39
  17. package/docs/MCP_SETUP.md +3 -1
  18. package/docs/RELEASE_NOTES_v2.9.8.md +73 -0
  19. package/docs/RELEASE_NOTES_v2.9.9.md +78 -0
  20. package/engines/specs/cfets.yaml +41 -0
  21. package/engines/specs/defillama.yaml +38 -0
  22. package/engines/specs/firecrawl.yaml +1 -1
  23. package/engines/specs/fxtwitter.yaml +5 -0
  24. package/engines/specs/gleif.yaml +55 -0
  25. package/engines/specs/hkex.yaml +40 -0
  26. package/engines/specs/keenable_free.yaml +36 -0
  27. package/engines/specs/shfe.yaml +39 -0
  28. package/engines/specs/stackexchange.yaml +2 -2
  29. package/engines/specs/tavily_free.yaml +56 -0
  30. package/engines/specs/yuanbao.yaml +93 -0
  31. package/mcp/clients.yaml +32 -0
  32. package/package.json +7 -2
  33. package/packages/dsh-plugin/README.md +25 -6
  34. package/packages/dsh-plugin/dsh/client.js +402 -47
  35. package/packages/dsh-plugin/dsh/diagnostics.js +97 -0
  36. package/packages/dsh-plugin/dsh/index.js +135 -1876
  37. package/packages/dsh-plugin/dsh/native-tools.mjs +7 -1
  38. package/packages/dsh-plugin/dsh/runner.js +666 -0
  39. package/packages/dsh-plugin/dsh/wide-research.js +878 -0
  40. package/packages/dsh-plugin/package.json +3 -3
  41. package/packages/dsh-plugin/scripts/sync-local.sh +70 -0
  42. package/packages/dsh-plugin/test/client.test.js +177 -2
  43. package/packages/dsh-plugin/test/diagnostics.test.js +28 -0
  44. package/packages/dsh-plugin/test/index.test.js +44 -0
  45. package/scripts/adaptive.py +126 -43
  46. package/scripts/article_meta.py +131 -0
  47. package/scripts/bench_tail_ab.py +281 -0
  48. package/scripts/bounded_run.py +91 -49
  49. package/scripts/budget.py +247 -0
  50. package/scripts/budget_cli.py +93 -0
  51. package/scripts/build_release_assets.sh +65 -0
  52. package/scripts/cache.py +60 -72
  53. package/scripts/ci_drift_gate.py +90 -0
  54. package/scripts/clock_bridge.py +22 -0
  55. package/scripts/content_boundary.py +46 -0
  56. package/scripts/content_security.py +119 -4
  57. package/scripts/content_signals.py +26 -5
  58. package/scripts/cross_lingual_trace.py +293 -0
  59. package/scripts/dispatch_result.py +105 -0
  60. package/scripts/engine_add.py +602 -0
  61. package/scripts/engine_dispatch.py +58 -86
  62. package/scripts/engine_env.py +5 -0
  63. package/scripts/engine_families.py +6 -0
  64. package/scripts/engine_policy.py +7 -7
  65. package/scripts/engines.py +21 -0
  66. package/scripts/engines_base.py +3 -3
  67. package/scripts/engines_builders.py +12 -0
  68. package/scripts/engines_builders_batch10.py +48 -3
  69. package/scripts/engines_builders_batch14.py +656 -0
  70. package/scripts/engines_builders_batch15.py +249 -0
  71. package/scripts/engines_builders_keyless.py +111 -0
  72. package/scripts/engines_builders_tech.py +0 -1
  73. package/scripts/evidence.py +31 -3
  74. package/scripts/evidence_loop.py +58 -22
  75. package/scripts/fetch_quality.py +13 -0
  76. package/scripts/fetch_v3.py +28 -3
  77. package/scripts/gen_routing_snapshot.py +11 -0
  78. package/scripts/http_client.py +24 -38
  79. package/scripts/install.ps1 +18 -0
  80. package/scripts/install.sh +16 -1
  81. package/scripts/job.py +3 -3
  82. package/scripts/local_seek.py +41 -5
  83. package/scripts/macro_countries.py +15 -0
  84. package/scripts/matrix_search_eval.py +192 -0
  85. package/scripts/mcp_compact.py +234 -0
  86. package/scripts/mcp_handlers.py +60 -642
  87. package/scripts/mcp_launch.sh +10 -8
  88. package/scripts/mcp_local.py +241 -0
  89. package/scripts/mcp_server.py +19 -14
  90. package/scripts/mcp_setup.py +33 -9
  91. package/scripts/mcp_tools.py +1 -0
  92. package/scripts/mcp_transport.py +1 -1
  93. package/scripts/mcp_warm.py +127 -0
  94. package/scripts/net_proxy.py +27 -0
  95. package/scripts/output_transparency.py +200 -0
  96. package/scripts/paid_policy.py +98 -0
  97. package/scripts/quota.py +158 -13
  98. package/scripts/recovery.py +7 -3
  99. package/scripts/recovery_runner.py +150 -0
  100. package/scripts/replay_eval.py +18 -0
  101. package/scripts/research.py +37 -21
  102. package/scripts/research_expand.py +24 -1
  103. package/scripts/retry_policy.py +76 -0
  104. package/scripts/route.py +6 -6
  105. package/scripts/route_cache.py +18 -0
  106. package/scripts/route_combo.py +26 -5
  107. package/scripts/route_domains.py +170 -31
  108. package/scripts/safe_conn.py +52 -0
  109. package/scripts/search.py +15 -27
  110. package/scripts/search_attribution.py +100 -3
  111. package/scripts/search_cli.py +24 -11
  112. package/scripts/search_entry.py +8 -1
  113. package/scripts/search_output.py +99 -15
  114. package/scripts/search_pipeline.py +62 -195
  115. package/scripts/search_rank.py +6 -0
  116. package/scripts/search_types.py +107 -9
  117. package/scripts/semantic_evidence.py +179 -3
  118. package/scripts/serp_guard.py +138 -7
  119. package/scripts/serp_kill_log.py +25 -2
  120. package/scripts/stats_cli.py +13 -1
  121. package/scripts/tail_completion.py +212 -0
  122. package/scripts/url_safety.py +126 -3
  123. package/scripts/usage_log.py +45 -0
  124. package/scripts/wide_research.py +45 -0
  125. package/scripts/zhihu_quota.py +139 -0
  126. package/sub-skills/local-search/bm25.py +27 -3
  127. package/sub-skills/local-search/cli_runner.py +331 -0
  128. package/sub-skills/local-search/parsers.py +328 -0
  129. package/sub-skills/local-search/search_v3.py +31 -674
  130. package/sub-skills/local-seek/scripts/seek_rank.py +7 -3
  131. package/assets/readme/settings-keys.png +0 -0
  132. package/assets/readme/settings-tools.png +0 -0
  133. package/sub-skills/ego-search/references/browser-runtime.md +0 -43
  134. package/sub-skills/ego-search/references/install.md +0 -67
  135. package/sub-skills/ego-search/references/original-ego-upgrade.md +0 -51
  136. package/sub-skills/ego-search/tests/test_query_normalize.py +0 -68
  137. package/sub-skills/js-run/tests/fixtures/challenge_like.js +0 -27
  138. package/sub-skills/js-run/tests/test_jsrun.py +0 -165
  139. package/sub-skills/local-seek/references/auto-behaviors.md +0 -24
  140. package/sub-skills/local-seek/references/fd-mdfind-recipes.md +0 -62
  141. package/sub-skills/local-seek/references/git-integration.md +0 -54
  142. package/sub-skills/local-seek/references/remote-handoff.md +0 -46
  143. package/sub-skills/local-seek/references/rg-recipes.md +0 -96
  144. package/sub-skills/local-seek/references/strategies.md +0 -52
  145. package/sub-skills/local-seek/references/structural-search.md +0 -59
  146. package/sub-skills/local-seek/tests/test_content_rank.py +0 -222
  147. package/sub-skills/local-seek/tests/test_determinism_20261006.py +0 -145
  148. package/sub-skills/local-seek/tests/test_noise_tier.py +0 -101
  149. package/sub-skills/local-seek/tests/test_pcre2_probe.py +0 -136
  150. package/sub-skills/local-seek/tests/test_rank_pinyin.py +0 -77
  151. package/sub-skills/local-seek/tests/test_regression_20261003.py +0 -169
  152. package/sub-skills/local-seek/tests/test_regression_20261006.py +0 -146
  153. package/sub-skills/local-seek/tests/test_seek_degradation.py +0 -111
  154. package/sub-skills/local-seek/tests/test_seek_fts.py +0 -313
package/config.yaml CHANGED
@@ -121,7 +121,11 @@ domains:
121
121
  name: cls_telegraph_search
122
122
  parallel: false
123
123
  patterns:
124
- - (?i)(财联社|cls\.cn|财联社电报|电报快讯|电报原文|快讯|财经快讯)
124
+ # 「金十」让位给 jin10_flash(2026-10-22):本域 patterns 含「快讯/财经快讯」,
125
+ # 与 jin10_flash 的触发词重叠——实测「金十 7x24 快讯」被本域截走(用财联社
126
+ # +金十双源去搜金十快讯)。unless 后落到 jin10_flash,财联社本域查询不受影响。
127
+ - match: '(?i)(财联社|cls\.cn|财联社电报|电报快讯|电报原文|快讯|财经快讯)'
128
+ unless: '(?i)(金十|jin10)'
125
129
  primary: cls_telegraph
126
130
  - desc: 东财全球资讯
127
131
  engines_combo:
@@ -131,7 +135,11 @@ domains:
131
135
  name: em_news_search
132
136
  parallel: false
133
137
  patterns:
134
- - (?i)(东财资讯|全球资讯|7x24|财经快讯|市场快讯)
138
+ # 「金十」让位给 jin10_flash(2026-10-22):本域 patterns 含 `7x24`,jin10_flash
139
+ # 的触发词含「金十|7x24快讯」,两域重叠——实测「金十 7x24 快讯」被本域截走。
140
+ # 让位后落到 jin10_flash;东财本域查询(东财资讯/全球资讯)不受影响。
141
+ - match: '(?i)(东财资讯|全球资讯|7x24|财经快讯|市场快讯)'
142
+ unless: '(?i)(金十|jin10)'
135
143
  - (?i)(eastmoney news|global news|financial news)
136
144
  primary: em_global_news
137
145
  - desc: 基金筛选/基金数据
@@ -142,7 +150,7 @@ domains:
142
150
  name: fund_query
143
151
  parallel: false
144
152
  patterns:
145
- - match: '(?i)(基金净值|基金排行|基金经理|公募基金|私募基金|公募|私募|选基|买基金|基金定投|基金收益|基金持仓)'
153
+ - match: '(?i)(基金净值|基金排行|基金经理|公募基金|私募基金|公募|私募|选基|买基金|基金定投|基金收益|基金持仓|基金代码|基金份额代码)'
146
154
  unless: '(?i)(管理办法|条例|法规|规定|征求意见|证监会令|逐条解读|政策解读|立方米|平米)'
147
155
  - (?i)\b(ETF|LOF|FOF)\b
148
156
  primary: eastmoney
@@ -159,6 +167,28 @@ domains:
159
167
  - (?i)(sec\s+filing|edgar|form\s+10-?[kq]|proxy\s+statement)
160
168
  - (招股书|财报申报|年报申报|季报申报|证券申报|申报文件)
161
169
  primary: sec_edgar
170
+ - desc: 港股公告(港交所披露易一手公告)
171
+ engines_combo:
172
+ - hkex
173
+ - anysearch
174
+ fallback: anysearch
175
+ name: hk_filings
176
+ parallel: false
177
+ patterns:
178
+ - (?i)(港股|港交所|披露易|hkex|H股|红筹|同股不同权)
179
+ - (?i)\b\d{5}\.HK\b
180
+ primary: hkex
181
+ - desc: 商品期货行情(上期所官方日行情)
182
+ engines_combo:
183
+ - shfe
184
+ - anysearch
185
+ fallback: anysearch
186
+ name: futures_market
187
+ parallel: false
188
+ patterns:
189
+ - (沪铜|沪铝|沪锌|沪铅|沪镍|沪锡|沪金|沪银|螺纹钢|热轧卷板|热卷|黄金期货|白银期货|原油期货|上期所|上海期货交易所)
190
+ - (?i)(\bSHFE\b|copper\s+futures|crude\s+oil\s+futures|rebar\s+futures)
191
+ primary: shfe
162
192
  - desc: 美股结构化财务(SEC XBRL companyfacts:营收/净利/资产/EPS 年度值)
163
193
  engines_combo:
164
194
  - sec_companyfacts
@@ -167,7 +197,13 @@ domains:
167
197
  name: us_fundamentals
168
198
  parallel: false
169
199
  patterns:
170
- - (?i)(营收|营业收入|净利润|净利|利润|财务数据|财务指标|annual\s+revenue|revenue|net\s+income|earnings|financials|fundamentals|balance\s+sheet|资产负债表|现金流|cash\s+flow|\bEPS\b|每股收益|总资产|总负债|毛利)
200
+ # 2026-10-25 补 unless:zh 词形的财务查询一律让位 stock_query(sina/eastmoney
201
+ # 对 A/US 两地上市都能交付,sec_companyfacts 只认 CIK,宁德时代这类 A 股
202
+ # 企业落本域全废)——与「XX 股价」既有分流约定同构:zh 词走 stock_query,
203
+ # 英文词形或美股语境才进本域。与 stock_query 新增的财务 pattern 成对出现,
204
+ # 改一处必须同步另一处。
205
+ - match: '(?i)(营收|营业收入|净利润|净利|利润|财务数据|财务指标|annual\s+revenue|revenue|net\s+income|earnings|financials|fundamentals|balance\s+sheet|资产负债表|现金流|cash\s+flow|\bEPS\b|每股收益|总资产|总负债|毛利)'
206
+ unless: '(?i)(A股|沪深|沪市|深市|上证|深证|北交所|创业板|科创板|年报|季报|财报|营收|营业收入|净利润|净利|利润|财务数据|财务指标|资产负债表|现金流|每股收益|总资产|总负债|毛利)'
171
207
  primary: sec_companyfacts
172
208
 
173
209
  - desc: 美股筛选/分析(Finviz + Seeking Alpha;须排在 stock_query 前,避免「美股/ticker」被 A 股域吸走)
@@ -205,6 +241,15 @@ domains:
205
241
  - (?i)(\bstock\b|stock price|share price|market\s+cap)
206
242
  - A股|港股|股票|ETF|板块
207
243
  - (资金流|主力资金|北向|龙虎榜|大宗交易|换手率)
244
+ # 2026-10-25 补:财务数值/估值类。A/US 分流沿用「XX 股价」既有约定——
245
+ # zh 词且无美股标记进本域(sina/eastmoney 双地覆盖),美股标记与 10-K
246
+ # 让位 us_*。裸「财报/年报」是披露浏览归 financial_news(「英伟达 财报」
247
+ # 是双向锁既有约定),本域只收数值/估值词形;howto(怎么写年报/模板)
248
+ # 让位通用域。实测 A 股企业「年报 营收」「市盈率 估值」此前分别落
249
+ # us_fundamentals 与 chinese_general。us_fundamentals 同日加了对应的
250
+ # zh 词形 unless,两处成对。
251
+ - match: '(?i)(营收|营业收入|净利润|净利|利润|毛利率|市盈率|市净率|股息率|净资产收益率|\bROE\b|估值|现金流)'
252
+ unless: '(?i)(美股|NASDAQ|NYSE|纳斯达克|标普|10-?[KQ]|\bSEC\b|EDGAR|怎么写|模板|格式|范文|入门|公告)'
208
253
  primary: sina_quote
209
254
  quote: true
210
255
  early_stop_min_results: 1
@@ -228,6 +273,7 @@ domains:
228
273
  # 反向),不足以单独收工,强制 eastmoney 并行补位;3 条以上才停。
229
274
  engines_combo:
230
275
  - fx_rate
276
+ - cfets
231
277
  - eastmoney
232
278
  - frankfurter
233
279
  - anysearch
@@ -235,12 +281,17 @@ domains:
235
281
  name: fx_query
236
282
  parallel: true
237
283
  patterns:
238
- - 中间价|牌价|汇率|外币兑换|换汇
284
+ - match: '(?i)(中间价|牌价|汇率|外币兑换|换汇)'
285
+ # 代码语境里的「汇率/中间价」是在问库或接口,不是要今天的牌价。
286
+ # 实测「示例金融库 开源 接口 汇率 中间价 python github」被 fx_query
287
+ # 抢走,只返回一条 USD/CNY 中间价,用户要的库文档一条没有。
288
+ unless: '(?i)(python|github|api|接口|库|数据源|代码|开源|pip|npm|教程|安装)'
239
289
  - (?i)(exchange\s+rate|fx\s+rate|currency\s+rate|usd\s*/?\s*cny|usdcny|cny\s*/?\s*usd|\bcnh\b|offshore\s+yuan)
240
290
  - 离岸人民币|在岸人民币|离岸美元
241
291
  - (人民币|美元|欧元|英镑|日元|港币|港元|加元|澳元|瑞郎|新加坡元).{0,6}(升值|贬值|买入价|卖出价|钞买价|汇买价|中间价|走势)
242
292
  - (人民币|美元|欧元|英镑|日元|港币|港元|加元|澳元|瑞郎|新加坡元)\s*[//兑対]\s*(人民币|美元|欧元|英镑|日元|港币|港元|加元|澳元|瑞郎|新加坡元)
243
- - {match: 外汇, unless: 储备}
293
+ - match: '(?i)外汇'
294
+ unless: '(?i)(储备|python|github|api|接口|库|数据源|代码|开源)'
244
295
  primary: fx_rate
245
296
  early_stop_min_results: 3
246
297
  # 源保底分(score_floors):汇率快照是「答案型」结果(标题是数字而非网页,
@@ -386,6 +437,10 @@ domains:
386
437
  # 裸 CVE 此前不认:第一条要求写成完整的 CVE-2024-1234,于是「CVE 漏洞」
387
438
  # 这种最自然的说法一个域都不命中,掉进通用兜底、nvd 选不上。
388
439
  - (?i)\bCVE(-|\b)
440
+ # 裸「漏洞/vulnerability」是最自然的说法,此前只收「漏洞+公告/情报/扫描…」,
441
+ # 实测「示例包 漏洞」掉进通用兜底、「示例 python package
442
+ # vulnerability」被 code_search 的 package 抢走。
443
+ - (?i)(漏洞|vulnerabilit(y|ies)|security\s+(issue|flaw|bug))
389
444
  - (?i)(安全漏洞|漏洞公告|漏洞情报|漏洞利用|漏洞评分|漏洞扫描|漏洞修复|CVSS|CVE|NVD|安全通告|zero.?day|零日漏洞|0day)
390
445
  - (?i)(security (advisory|vulnerability|bulletin)|cisa kev)
391
446
  - (?i)(在野利用|已被利用|\bkev\b|exploited in the wild)
@@ -426,6 +481,9 @@ domains:
426
481
  patterns:
427
482
  - (?i)(进出口|贸易额|双边贸易|贸易数据|进口额|出口额|comtrade)
428
483
  - (?i)(进口|出口|import|export).{0,12}\bHS?\s?\d{4}\b
484
+ # 海关商品编码是贸易统计字段,不是代码搜索;但裸「商品编码」也常指零售
485
+ # SKU,必须带海关/HS/关税语境才收,避免反向误伤。
486
+ - (?i)(HS\s*代码|HS\s*code|海关(商品)?编码|海关商品代码|(?:海关|HS|进出口|关税|贸易).{0,10}(商品编码|商品代码))
429
487
  primary: un_comtrade
430
488
 
431
489
  - desc: 天文/空间天气/卫星(Kp 指数、太阳活动区、卫星目录与 TLE 轨道根数)
@@ -580,7 +638,11 @@ domains:
580
638
  name: art_museum
581
639
  parallel: true
582
640
  patterns:
583
- - (博物馆|馆藏|藏品|美术馆|文物|艺术品|雕塑|名画|油画|画作|画家|谁画的)
641
+ - (博物馆|藏品|美术馆|文物|艺术品|雕塑|名画|油画|画作|画家|谁画的)
642
+ # 「馆藏」在图书馆/电子书语境里不是博物馆意图。实测「图书馆 馆藏 电子全文」
643
+ # 被锁进 art_museum,Met Museum 源返回艺术史论文。
644
+ - match: '(?i)馆藏'
645
+ unless: '(?i)(图书馆|电子书|电子全文|书目|馆藏目录|馆藏查询|pdf|试读|ss\s*号)'
584
646
  - (?i)(met museum|museum collection|art collection|painting|sculpture|van gogh|\bmonet\b|picasso|vermeer)
585
647
  primary: met_museum
586
648
 
@@ -610,7 +672,7 @@ domains:
610
672
  name: financial_news
611
673
  parallel: true
612
674
  patterns:
613
- - (?i)(研报|财报|公告|财经|宏观|央行政策|降息|加息|CPI|GDP|PMI)
675
+ - (?i)(研报|财报|公告|财经|宏观|央行政策|降准|降息|加息|CPI|GDP|PMI)
614
676
  - (?i)(financial|earnings report|annual report|announcement)
615
677
  primary: em_miaoxiang
616
678
  # 源保底分:cninfo 是官方公告源(标题是「年报」而非网页,token 覆盖低)
@@ -649,14 +711,11 @@ domains:
649
711
  unless: '(?i)(气候变化|极端天气|全球变暖|天气趋势|天气研究|天气影响|天气对)'
650
712
  # 日韩天气触发词(修复「東京の天気」「서울 날씨」漏召)
651
713
  - (?i)(天気|気温|予報|何度)
652
- # 「雨/雪」此前裸放在上一条日文模式里,而这两个字在中文里**同时是图片词**
653
- # (雪景/雨景/雪花/大雪壁纸)。实测代价:`雪景 壁纸`、`雨景 摄影`、
654
- # `雪花 插画`、`壁纸 雪山`、`帮我找几张雪山壁纸` 全部被抢进 weather_query,
655
- # 返回天气网和必应网页结果——图片需求一条图都拿不到。含「雪/雨」的中文
656
- # 图片查询是高频场景(壁纸、摄影、插画),不是边缘 case。
657
- # 与 geo_places 同法加让位表:出现图片/摄影语境时让位给 image_search,
658
- # 其余情况仍按天气处理(「明天会下雪吗」照旧命中天气)。
659
- - match: '(?i)(雨|雪)'
714
+ # 裸「雨/雪」在中文里大量作为构词成分出现(雪原、雪松、电动车…),
715
+ # 不是天气意图。2026-10-23 回放实测:「雪原 开源 投研 搜索工具」被判进
716
+ # weather_query,天气源返回「雪原…当前 14°C 晴」。改为只收明确的天气说法;
717
+ # 「明天会下雪吗」仍命中「下雪」,「雪景 壁纸」仍由 image_search 接。
718
+ - match: '(?i)(下雨|下雪|降雨|降雪|雨夹雪|暴雨|大雨|小雨|中雨|大雪|小雪|中雪|阵雨|雷阵雨|雨量|雪量|雨天|雪天|有雨|有雪)'
660
719
  unless: '(?i)(图片|壁纸|照片|图库|素材|插画|头像|背景图|桌面|png|jpg|海报|摄影|写真|剧照|表情|雪花|雪景|雨景|wallpaper|photo|image|picture|illustration|poster)'
661
720
  - (?i)(날씨|기온|온도|예보|몇\s*도)
662
721
  early_stop_min_results: 1
@@ -670,7 +729,7 @@ domains:
670
729
  name: modal_card
671
730
  parallel: false
672
731
  patterns:
673
- - (?i)(火车票|高铁|动车|车次|火车时刻|高铁票价|高铁时刻)
732
+ - (?i)(火车票|高铁|(?<!电)动车|车次|火车时刻|高铁票价|高铁时刻)
674
733
  - (?i)(油价|今日油价|加油价格|成品油|柴油价格|汽油价格)
675
734
  - (?i)(金价|银价|黄金价格|铂金|钯金|贵金属行情|今日金价|今日银价)
676
735
  - (?i)(黄历|万年历|宜忌|农历查询|老黄历|吉日|黄道吉日)
@@ -733,6 +792,7 @@ domains:
733
792
  - desc: 加密货币/币种查询
734
793
  engines_combo:
735
794
  - coingecko
795
+ - defillama
736
796
  - anysearch
737
797
  fallback: anysearch
738
798
  name: crypto_search
@@ -740,6 +800,7 @@ domains:
740
800
  patterns:
741
801
  - (?i)(比特币|以太坊|莱特币|狗狗币|加密货币|虚拟货币|数字货币|币价|币种|山寨币|空气币|代币|区块链|挖矿|钱包地址|token 经济|稳定币)
742
802
  - (?i)\b(bitcoin|ethereum|btc|eth|crypto|altcoin|defi|nft|blockchain|coin)\b
803
+ - (?i)(\btvl\b|总锁仓|锁仓量|链上资金|协议收入|defillama)
743
804
  primary: coingecko
744
805
  - desc: 包管理器/语言包查询(PyPI/npm/crates/Docker)
745
806
  engines_combo:
@@ -799,7 +860,10 @@ domains:
799
860
  parallel: false
800
861
  patterns:
801
862
  - (?i)\b(LLM|GPT|Claude|Gemini|GLM|Llama|Mistral|DeepSeek|Qwen|Grok)\b
802
- - (?i)(模型|model).{0,24}(价格|pricing|多少钱|上下文|context|token|支持视觉|vision|能力|对比|免费|开源)
863
+ # 2026-10-25 补 unless:综述/论文语境让位给 tech_deep(openalex/arxiv)——
864
+ # 实测「大模型 长上下文 综述」被本域 models_dev 抢走,模型目录答不了综述。
865
+ - match: '(?i)(模型|model).{0,24}(价格|pricing|多少钱|上下文|context|token|支持视觉|vision|能力|对比|免费|开源)'
866
+ unless: '(?i)(综述|survey|论文|文献|研究进展|预印本|state\s+of\s+the\s+art|SOTA)'
803
867
  - (?i)(API price|pricing|context window|token limit|vision model|tool call)
804
868
  # 点查域意图豁免词(语义见 route_domains.intent_required)
805
869
  # 扩展(2026-10-06):意图门 token 门槛降到 4 后,4 token 的真点查
@@ -832,7 +896,17 @@ domains:
832
896
  name: legal
833
897
  parallel: true
834
898
  patterns:
835
- - (?i)(刑法|民法|司法解释|判例|法规|裁判文书|案由|案号|法院判决)
899
+ # 「裁判文书/判决书/裁定书」让位给 wenshu_query(2026-10-22):本域 patterns 含
900
+ # 「裁判文书」,且本域排在 wenshu_query 之前(857 vs 867 行)——实测
901
+ # 「裁判文书 判决书」落本域用 anysearch/byted 搜,而 wenshu 才是裁判文书权威源。
902
+ - match: '(?i)(刑法|民法|司法解释|判例|法规|裁判文书|案由|案号|法院判决)'
903
+ unless: '(?i)(裁判文书|判决书|裁定书|wenshu|court\.gov)'
904
+ # 2026-10-25 补:民事实务类(劳动/借贷/婚姻家事/侵权赔偿)——实测
905
+ # 「劳动合同解除 赔偿」「民间借贷 利率 司法保护上限」落 chinese_general,
906
+ # 而 flk_law/anysearch 能交付法条与实务口径。unless 锁求职(岗位/薪资)
907
+ # 与模板下载形态。
908
+ - match: '(?i)(劳动合同|工伤|民间借贷|借贷纠纷|借贷利率|婚姻|离婚|继承|遗产|侵权责任|交通肇事|仲裁申请|赔偿金|经济补偿|竞业限制)'
909
+ unless: '(?i)(岗位|招聘|薪资|待遇|面试|简历|模板|范文|下载)'
836
910
  primary: anysearch
837
911
  - desc: 裁判文书检索
838
912
  engines_combo:
@@ -874,6 +948,11 @@ domains:
874
948
  - (?i)(临床试验|clinical trial|nct\d+|clinicaltrials\.gov|openfda|fda 药品|药品说明书|药物标签|drug label|适应症|不良反应)
875
949
  - (?i)(medicine|pharmaceutical|dosage|contraindication|药物|药品|处方药|\botc\b)
876
950
  - (?i)(症状|用药|适应症|临床|临床指南|诊疗指南|医学指南|用药指南|治疗指南|副作用|禁忌|诊断|治疗|病因)
951
+ # 2026-10-25 补:药品说明书/用法用量类——实测「某药 说明书 用法用量」被
952
+ # code_search 的「用法」子串抢走(GitHub/MDN 答不了药)。unless 锁软件/
953
+ # 硬件语境的说明书。code_search 同日加了对应药品语境 unless,两处成对。
954
+ - match: '(?i)(说明书|用法用量|服用剂量|一次吃多少|一天几次)'
955
+ unless: '(?i)(软件|硬件|固件|安装|接口|\bAPI\b|\bAPP\b|app|产品说明)'
877
956
  - '(?i)(WHO|世界卫生组织).{0,12}(通报|疫情|卫生|指标|统计)'
878
957
  - '(?i)(公共卫生|卫生指标|疾病负担|死亡率|发病率|卫生统计)'
879
958
  primary: clinicaltrials
@@ -945,7 +1024,12 @@ domains:
945
1024
  name: anime_encyclopedia
946
1025
  parallel: false
947
1026
  patterns:
948
- - (?i)(萌娘百科|二次元|ACG|动漫|番剧|新番|番组|声优|手办|同人|轻小说|漫画|日本动画|新番动画|动画番剧|动画推荐|看动画|galgame|vtuber|虚拟主播|东方project|型月|(?-i:\bFate\b))
1027
+ - (?i)(萌娘百科|二次元|ACG|动漫|番剧|新番|番组|声优|手办|同人|轻小说|漫画|日本动画|新番动画|动画番剧|动画推荐|看动画|galgame|vtuber|虚拟主播|东方project|(?-i:\bFate\b))
1028
+ # 「型月」是 Type-Moon 专名,但在无空格中文里是「大模型月报」的子串:
1029
+ # 实测「AI大模型月报 2026年8月」被锁进 anime_encyclopedia,萌娘百科返回
1030
+ # 一款 2009 年的太空战略游戏。单独的型月查询仍保留。
1031
+ - match: '(?i)型月'
1032
+ unless: '(?i)(大模型|模型月报)'
949
1033
  primary: moegirl
950
1034
  - desc: 书籍/图书搜索(微信读书 + 豆瓣读书 + Open Library + Gutenberg)
951
1035
  engines_combo:
@@ -1020,7 +1104,7 @@ domains:
1020
1104
  # 结果无关)。CJK 触发词不受影响,另补「亚运会」词条(此前漏配,
1021
1105
  # 「杭州亚运会场馆」落不进体育域)。
1022
1106
  - (?i:(?<![a-z0-9])(NBA|CBA|WNBA|NFL|NHL|MLB|MLS)(?![a-z0-9]))|(?i:(英超|西甲|德甲|意甲|法甲|中超|欧冠|亚冠|世界杯|欧洲杯|美洲杯|奥运会|残奥会|世锦赛|大奖赛|亚运会))
1023
- - (?i)(足球|篮球|网球|排球|乒乓球|羽毛球|棒球|橄榄球|高尔夫|F1|一级方程式|马拉松|田径|游泳|拳击|UFC|电竞战队)
1107
+ - (?i)(足球|篮球|网球|排球|乒乓球|羽毛球|棒球|橄榄球|高尔夫|(?<![a-z0-9])F1(?![a-z0-9])|一级方程式|马拉松|田径|游泳|拳击|(?<![a-z0-9])UFC(?![a-z0-9])|电竞战队)
1024
1108
  - (?i)(决赛|半决赛|季后赛|总冠军|MVP|得分王|金靴|金球奖|转会|俱乐部|联赛|进球|助攻|夺冠|卫冕|球员|守门员|前锋|后卫)
1025
1109
  # 中英球队/效力语境(修复「库里 球队」「LeBron James team」「Ronaldo club」漏召)
1026
1110
  - (?i)(球队|球星|球会|球衣|队名|队史|效力于|效力|主教练|得分手)
@@ -1054,9 +1138,17 @@ domains:
1054
1138
  # 注入」这类触发词,而「行政区划代码」是货真价实的地理查询——域级否决会
1055
1139
  # 因为它含「代码」而把整域毙掉(2026-09-21 快照实测,3709 条查询里 3 条
1056
1140
  # 因此漂移)。否决的作用域必须与被否决的触发词一样窄。
1141
+ # 「总部/母公司/子公司/注册地/办公地」等企业语境词让方位词失效(2026-10-22):
1142
+ # 「华为 总部在哪」此前命中本域,用 OSM+维基只拿到广汽/新凯来/五粮液等无关结果
1143
+ # (企业总部不是地理问题,实体库无中国民企数据,与 org_entity 2026-10-14 的
1144
+ # 尽调词排除同因)。让位后落到 entity_search(其 patterns 含「总部在哪」)。
1057
1145
  - match: '(?i)(在哪里|在哪儿|在哪|位于|坐落|位置|坐标|经纬度|海拔|发源地|入海口|交汇|毗邻|接壤|边境|首都|省会|直辖市|地标|名胜|景点)'
1058
- unless: '(?i)(报错|错误|日志|失败|异常|配置|设置|安装|修改|代码|接口|参数|文档|教程|图片|元素|居中|对齐|偏移|样式|布局|按钮|窗口|表格|控件|调整)'
1059
- - (?i)(山脉|河流|湖泊|海洋|岛屿|半岛|沙漠|高原|盆地|峡谷|海峡|运河|瀑布|火山|冰川|赤道|经线|纬线|时区)
1146
+ unless: '(?i)(报错|错误|日志|失败|异常|配置|设置|安装|修改|代码|接口|参数|文档|教程|图片|元素|居中|对齐|偏移|样式|布局|按钮|窗口|表格|控件|调整|总部|母公司|子公司|注册地|办公地)'
1147
+ - match: '(?i)(山脉|河流|湖泊|海洋|岛屿|半岛|沙漠|高原|盆地|峡谷|海峡|运河|瀑布|火山|冰川|赤道|经线|纬线|时区)'
1148
+ # 「火山引擎」是云产品,不是火山地貌。2026-10-23 回放实测:
1149
+ # 「某云产品 官方 指南 火山引擎」被锁进 geo_places,主源
1150
+ # local_openstreetmap 对产品名答非所问。
1151
+ unless: '(?i)(火山(引擎|云|翻译|方舟)|volcengine|volcano\s+engine)'
1060
1152
  # 水系/行政区划事实(修复「黄河 流经省份」漏召)
1061
1153
  - (?i)(流经|途经|贯穿|横跨|流域|水系|汇入|注入|源头|入海|几省|省份|省区|行政区划|发源于)
1062
1154
  - (?i)(地理|地图|方位|东南西北|几公里|多远|距离.*多远|openstreetmap|nominatim|geonames)
@@ -1111,8 +1203,12 @@ domains:
1111
1203
  # 2026-10-14 +股东尽调词:求职查询(岗位/招聘/薪资)与尽调查询(股东/持股/
1112
1204
  # 实控人/融资/股权)都不应命中本域——前者是招聘文案,后者 wikidata 无中国
1113
1205
  # 民企股东数据(实测 1.8s 只拿到两字「公司」)。
1206
+ # 2026-10-25 再补让位词:注销/吊销/经营异常/行政处罚/开票/税号(尽调风险与
1207
+ # 开票类)与 担任法定代表人/名下公司(人查公司反向)——这些形态此前落本域
1208
+ # wikidata 组合,对中文企业同样全废(合成名实测四类全误投,wikidata 7 天
1209
+ # 空结果率 82%),company_search 的元宝才是中文交付源。
1114
1210
  - match: '(?i)(股份有限公司|有限公司|集团|控股|总部|成立于|创立于|创办于|创始人|CEO|董事长|市值|子公司|母公司)'
1115
- unless: '(?i)(岗位|职位|招聘|薪资|待遇|面试|简历|JD|工作内容|任职要求|岗位要求|股东|持股|实控人|融资|股权|注册资本|工商登记)'
1211
+ unless: '(?i)(岗位|职位|招聘|薪资|待遇|面试|简历|JD|工作内容|任职要求|岗位要求|股东|持股|实控人|融资|股权|注册资本|工商登记|统一社会信用代码|社会信用代码|信用代码|法定代表人|经营范围|注册号|企业信息|工商信息|注销|吊销|经营异常|行政处罚|开票|税号|担任法定代表人|名下公司)'
1116
1212
  - (?i)(创办年份|成立年份|创立年份|建校年份|成立时间|创办时间|创立时间|建校时间|何时成立|何时创办|何时创立)
1117
1213
  - (?i)(大学|学院|研究所|科学院|研究院).{0,12}(创办|成立|创立|建校)
1118
1214
  - (?i)\b([A-Z][A-Za-z0-9&.\- ]{1,40}\s+(Inc\.?|LLC|Ltd\.?|Corp\.?|Co\.|GmbH|S\.A\.|PLC))\b
@@ -1161,8 +1257,18 @@ domains:
1161
1257
  # 收「摄影作品/摄影图」这类带结果的写法。
1162
1258
  # 同理收「海报/封面图/图标/字体图」——实测 `vintage poster` 落
1163
1259
  # general_search、`海报` 落 chinese_general,都是明确的图片需求被截走。
1164
- - (?i)(图片|壁纸|照片|图库|素材|插画|无版权|免费图片|头像|背景图|表情图|png|jpg 图片|壁纸下载|摄影作品|摄影图|写真|剧照|雨景|雪景|夜景|风景照|风光照|海报|封面图|图标|logo 图|贴图|素材图|配图)
1165
- - (?i)\b(wallpaper|photo|image|picture|illustration|stock photo|free image|poster|icon set|clip ?art|thumbnail|artwork)\b
1260
+ - (?i)(图片|壁纸|照片|图库|素材|插画|无版权|免费图片|头像|背景图|表情图|png|jpg 图片|壁纸下载|摄影作品|摄影图|写真|剧照|雨景|雪景|夜景|风景照|风光照|海报|封面图|logo 图|贴图|素材图|配图)
1261
+ # 「图标」在 UI 排障句里指的是菜单栏/状态栏控件(图标不显示、图标消失),
1262
+ # 不是找图需求。2026-10-23 回放实测:「菜单栏 第三方 图标 不显示 消失」
1263
+ # 被锁进 image_search,主源 Openverse 返回图库结果。
1264
+ - match: '(?i)图标'
1265
+ unless: '(?i)(菜单栏|状态栏|工具栏|任务栏|dock|favicon|应用图标|app\s+icon|不显示|消失|丢失|missing|disappear|not\s+show|图标满|图标太多)'
1266
+ # 单独的 image/picture 在技术任务句里是「处理图片」而非「找图」:
1267
+ # 实测「PDF extract text image」被 image_search 接走。收窄到
1268
+ # image/picture 这一条,wallpaper/photo/poster 等明确的找图词不受影响。
1269
+ - match: '(?i)\b(image|picture)\b'
1270
+ unless: '(?i)(extract|ocr|pdf|text|代码|python|api|库|命令|脚本|转换|识别|提取)'
1271
+ - (?i)\b(wallpaper|photo|illustration|stock photo|free image|poster|icon set|clip ?art|thumbnail|artwork)\b
1166
1272
  primary: openverse
1167
1273
  # 版权优先:要「能合法用」的图时 openverse 带许可标注,ddgs 全网图多数
1168
1274
  # 无授权信息。两条并行取回后由合并层按需取舍,而不是先跑一条再补另一条
@@ -1201,7 +1307,11 @@ domains:
1201
1307
  name: zhihu_content
1202
1308
  parallel: true
1203
1309
  patterns:
1204
- - (?i)(知乎|怎么看待|如何评价|体验|评测|对比|推荐|哪个好|值得买|好不好|要不要|推荐吗|求推荐|有什么)
1310
+ # 2026-10-21:只认「明确指向知乎/站内观点」的词。此前的 体验|评测|对比|
1311
+ # 推荐|哪个好|值得买|好不好|要不要|求推荐|有什么 是中文查询的通用词,
1312
+ # 实测把「蓝牙耳机推荐」「新能源汽车对比」这类通用消费查询锁到知乎单源
1313
+ # (21 条样本里至少 9 条)。泛意图交给通用保底,覆盖更宽。
1314
+ - (?i)(知乎|怎么看待|如何评价|知友)
1205
1315
  primary: zhihu
1206
1316
  - desc: 学术论文搜索
1207
1317
  # openreview/biorxiv 曾长期是「已实现但无域引用」的孤儿源:只能靠
@@ -1252,7 +1362,11 @@ domains:
1252
1362
  # 中文论文语境词此前是缺口:规则里有英文 preprint,却没有「预印本」。
1253
1363
  # 实测「生物医学预印本」因此一个域都不命中,掉进通用兜底(combo 变成
1254
1364
  # bocha+anysearch),biorxiv/openreview 这些已实现的源永远轮不上。
1255
- - (?i)(论文|\bpaper\b|预印本|preprint|arXiv|bioRxiv|medRxiv|DOI|引用|citation|学术|文献|期刊|学报|综述|同行评议|影响因子|openalex|crossref|europe pmc|dblp|PubMed|知网|万方|维普)
1365
+ # 2026-10-25 补 unless:论文写作/评审的 howto 形态(怎么写/查重/盲审/开题)
1366
+ # 不是找论文——实测两类都落本域,arxiv 答不了写作技巧。只否决这一条,
1367
+ # 「综述 论文」等真检索语境不受影响。
1368
+ - match: '(?i)(论文|\bpaper\b|预印本|preprint|arXiv|bioRxiv|medRxiv|DOI|引用|citation|学术|文献|期刊|学报|综述|同行评议|影响因子|openalex|crossref|europe pmc|dblp|PubMed|知网|万方|维普)'
1369
+ unless: '(?i)(怎么写|查重|降重|盲审|开题|致谢|选题|范文|抄袭|写作技巧|参考文献格式)'
1256
1370
  - \b\d{4}\.\d{4,5}\b
1257
1371
  # 2026-09-30:模型名词表拆成独立条目并挂 unless。此前裸 (?i)...|BERT|GPT)
1258
1372
  # 是子串匹配,「chatgpt 使用技巧」「如何用 GPT 写周报」「gpt-5 发布」这类
@@ -1262,7 +1376,9 @@ domains:
1262
1376
  # 注意 unless 是子串语义,写「对比|vs」会误伤「BERT vs GPT 对比实验」——
1263
1377
  # 学术对比通常带论文词(综述/实验/论文),由第 1 条兜住,这里只拦产品语境。
1264
1378
  - match: '(?i)(transformer|attention|neural\s+network|deep\s+learning|machine\s+learning|BERT|GPT)'
1265
- unless: '(?i)(技巧|教程|怎么用|如何|使用|入口|官网|注册|充值|账号|订阅|价格|发布|下载|安装|对比|哪个好|好用|推荐|周报|写作|助手|插件|镜像|平替|魔法|翻墙)'
1379
+ # 「工程实践/博客/案例」是产品与经验文章语境,不是论文。实测「GPT
1380
+ # 工程实践 清理死代码」被 academic 接走,arXiv 返回 AI 教育论文。
1381
+ unless: '(?i)(技巧|教程|怎么用|如何|使用|入口|官网|注册|充值|账号|订阅|价格|发布|下载|安装|对比|哪个好|好用|推荐|周报|写作|助手|插件|镜像|平替|魔法|翻墙|工程实践|实践|博客|文章|官方博客|公司|团队|案例)'
1266
1382
  - (?i)(論文|ジャーナル|学会誌|査読|研究論文|プレプリント)
1267
1383
  primary: arxiv
1268
1384
  - desc: 技术深度研究
@@ -1287,7 +1403,10 @@ domains:
1287
1403
  parallel: true
1288
1404
  patterns:
1289
1405
  # 注意:不要用裸 \bbest\b / review / comparison,会误伤 "best practices" 等技术查询
1290
- - (?i)(评测|推荐|哪个好|值得买|选购|入手|踩坑|避雷|种草|拔草|海淘)
1406
+ # 2026-10-21:泛购物意图(评测/推荐/哪个好/值得买/选购/入手)不再由本域
1407
+ # 独占——它们占中文查询的很大一块,锁到知乎单源等于用问答站替代全网。
1408
+ # 这里只留「购物动作」本身;泛意图落通用保底(octen/anysearch),覆盖更宽。
1409
+ - (?i)(踩坑|避雷|种草|拔草|海淘|好物|开箱|平替)
1291
1410
  - (?i)\b(product\s+review|buyer's?\s+guide|worth\s+buying|best\s+buy|shopping)\b
1292
1411
  primary: zhihu
1293
1412
  - desc: 语义发现/开放式调研(Exa 语义引擎)
@@ -1322,8 +1441,26 @@ domains:
1322
1441
  name: code_search
1323
1442
  parallel: true
1324
1443
  patterns:
1325
- - (?i)(github|source code|代码|源码|开源|函数|实现|用法|snippet)
1326
- - (?i)\b(API|api)\b|\b(repo|repository|library|package|npm|pip|cargo)\b
1444
+ # 裸「开源」太宽:品牌/产品句(「雪原 开源 投研 搜索工具」)也会
1445
+ # 命中,GitHub 慢源要 7s 且只回一条。只收「开源项目/代码/仓库/库/软件/
1446
+ # 框架」这类明确指向代码仓库的说法;有 github/源码 的查询仍走本域。
1447
+ # 2026-10-25 补 unless:药品语境让位 medical——「用法」子串会命中
1448
+ # 「用法用量」(实测药品说明书查询被 GitHub/MDN 接走)。
1449
+ - match: '(?i)(github|source code|源码|开源\s*(项目|代码|仓库|库|软件|框架)|函数|实现|用法|snippet)'
1450
+ unless: '(?i)(用法用量|说明书|不良反应|禁忌|症状|服用|剂量|药品|药物)'
1451
+ # 「统一社会信用代码」是工商登记字段,不是代码搜索。拆出「代码」单条,
1452
+ # 让 company_search(更靠后)能接到这类查询。
1453
+ - match: '(?i)(代码)'
1454
+ # 「代码」在文章/工程实践句里是主题词,不是找仓库。实测「示例公司 官方
1455
+ # 博客 … 维护代码库 … 死代码」被 code_search 接走,GitHub 返回 OpenGL
1456
+ # 和 MDN 的 sidebarAction。让位给 chinese_tech_deep 的中文技术组合。
1457
+ unless: '(?i)(统一社会信用代码|社会信用代码|信用代码|区划代码|行政代码|邮政编码|股票代码|证券代码|基金代码|基金份额代码|商品代码|HS\s*代码|海关编码|商品编码|验证码|信用卡|安全码|CVV|官方博客|博客|文章|工程实践|实践|维护|重构|死代码|屎山|清理|经验|案例|周报|月报)'
1458
+ - (?i)\b(repo|repository|library|package|npm|pip|cargo)\b
1459
+ # API 在「A vs B / 对比 / 区别」句里要的是概念解释,不是代码仓库:
1460
+ # 实测「kubernetes ingress vs gateway api」被 code_search 接走,GitHub 回
1461
+ # 两个示例仓、MDN 回 502/504 错误页。让位给 english_tech 的通用组合。
1462
+ - match: '(?i)\b(API|api)\b'
1463
+ unless: '(?i)(\bvs\b|\bversus\b|\bcompare\b|\bcomparison\b|\bdifference\b|对比|区别|差异)'
1327
1464
  - (?i)\b(example|examples|example\s+code)\b
1328
1465
  primary: github
1329
1466
  - desc: 网络梗/流行语/俚语/黑话
@@ -1429,7 +1566,12 @@ domains:
1429
1566
  parallel: true
1430
1567
  patterns:
1431
1568
  - (?i)(最新新闻|最新进展|今天发生|突发|breaking)
1432
- - (?i)\b(news|latest)\b
1569
+ # `latest` 单独出现不足以判实时新闻:软件/技术查询(latest version、
1570
+ # AI agent framework 2026 latest)会被误路由到这里,combo 只有新闻源。
1571
+ # 只保留明确的新闻搭配(latest on/about/in、latest news/headlines/
1572
+ # developments/events);版本语义的 latest 让位给技术/通用域(issue #18)。
1573
+ - (?i)\bnews\b
1574
+ - (?i)\blatest\s+(?:on|about|in|news|headlines?|developments?|events?)\b
1433
1575
  primary: byted
1434
1576
  - desc: 中文技术深挖(先于英文技术域/中文通用域;要求含中文)
1435
1577
  engines_combo:
@@ -1442,8 +1584,13 @@ domains:
1442
1584
  name: chinese_tech_deep
1443
1585
  parallel: true
1444
1586
  patterns:
1445
- - (?i)[一-鿿].*(编程|代码|算法|架构|框架|框架对比|性能优化|源码分析|实现原理|教程|指南|原理|底层|综述|深入|深挖|架构设计|实现|用法)
1446
- - (?i)[一-鿿].*(Rust|Python|Go|Java|JavaScript|TypeScript|React|Vue|Docker|K8s|Cursor|Copilot|Windsurf|AI编程|LLM|大模型|量子|神经网络|机器学习|深度学习)
1587
+ - match: '(?i)[一-鿿].*(编程|代码|算法|架构|框架|框架对比|性能优化|源码分析|实现原理|教程|指南|原理|底层|综述|深入|深挖|架构设计|实现|用法)'
1588
+ unless: '(?i)(统一社会信用代码|社会信用代码|信用代码|区划代码|行政代码|邮政编码)'
1589
+ # 拉丁语言名必须有字母数字边界:裸 alternation 会让 Go 命中 argo、让
1590
+ # Java 命中 JavaScript(顺序靠前会截断)。实测「重启后 django 自检」被
1591
+ # 「Go ⊂ argo」锁进本域。
1592
+ - (?i)[一-鿿].*(?<![a-zA-Z0-9])(Rust|Python|Golang|Go|Java|JavaScript|TypeScript|React|Vue|Docker|K8s|Cursor|Copilot|Windsurf|LLMs?)(?![a-zA-Z0-9])
1593
+ - (?i)[一-鿿].*(AI编程|大模型|量子|神经网络|机器学习|深度学习)
1447
1594
  primary: byted
1448
1595
  - desc: 英文技术通用(octen 主搜,低延迟;anysearch #2 作 hedged 救援;先于 catch-all)
1449
1596
  engines_combo:
@@ -1459,8 +1606,18 @@ domains:
1459
1606
  - (?i)\b(API|api)\b
1460
1607
  - (?i)\b(Rust|Python|JavaScript|TypeScript|React|Vue|Node|Docker|Kubernetes|asyncio)\b
1461
1608
  primary: octen
1462
- - desc: 公司注册/尽调(OpenCorporates 全球公司注册)
1609
+ - desc: 公司注册/尽调(GLEIF 法人主数据 + OpenCorporates 注册库;元宝补中文企业信息)
1610
+ # 元宝放第 1 位(2026-10-22):本域 patterns 含「股东/法人/注册资本/工商信息」,
1611
+ # 但 combo 原本只有国际法人库(gleif/opencorporates)+ 百科(baidu_baike),
1612
+ # 对中国**非上市**企业全废——实测「长亭科技 股东 持股比例」被路由到本域后,
1613
+ # opencorporates 熔断 + baidu_baike 只返回同名「XX科技有限公司」干扰,5 条无一命中
1614
+ # (2026-10-22 实测复现 2026-10-14 的老问题)。元宝实测能返回天眼查/企查查/
1615
+ # 爱企查的结构化股东表(长亭未来 100% 控股、阿里巴巴 17.7685%),是本域唯一能
1616
+ # 交付中文企业信息的源,放第 1 位确保进 budget=2 窗口(combo_budget 只按声明
1617
+ # 顺序取前 2,见 engine_policy.combo_budget)。
1463
1618
  engines_combo:
1619
+ - yuanbao
1620
+ - gleif
1464
1621
  - opencorporates
1465
1622
  - cninfo
1466
1623
  - baidu_baike
@@ -1469,15 +1626,33 @@ domains:
1469
1626
  parallel: false
1470
1627
  patterns:
1471
1628
  - (?i)(公司注册|注册号|统一社会信用代码|工商信息|股东|法人|注册资本|经营范围|尽调|工商登记|企业信息)
1629
+ # 2026-10-25 补:尽调风险(注销/吊销/经营异常/行政处罚)、开票(开票信息/税号)、
1630
+ # 人查公司(担任法定代表人/名下公司)三类。unless 锁住办事指南形态(流程/
1631
+ # 怎么办/条件/材料…)——「公司注销流程 怎么办」是 howto 不是主体查询,合成名
1632
+ # 双向锁用例见 matrix_search_eval ROUTE_MATRIX。org_entity 侧同日补了对应
1633
+ # 让位词(见其 unless 注释),两类改动必须成对出现。
1634
+ - match: '(?i)(注销|吊销|经营异常|行政处罚|开票信息|开票|税号|担任法定代表人|名下公司|实际控制人是谁)'
1635
+ unless: '(?i)(流程|怎么办|如何|怎么办理|怎样|条件|材料|手续|多久|费用|办理|指南)'
1636
+ - (?i)(\bLEI\b|法人识别码|法人标识|法人主数据|legal\s+entity\s+identifier)
1472
1637
  - (?i)\b(company\s*registration|incorporation|registered\s+number|business\s+registry|company\s+search|corporate\s+records)\b
1473
1638
  - (?i)(会社|法人|登記|기업|법인|등록)
1474
1639
  primary: opencorporates
1475
- - desc: 中文通用搜索(anysearch #3 作 bocha/byted 弱结果时的多语言救援)
1640
+ - desc: 中文通用搜索(octen #3 作 bocha/byted 弱结果时的多语言救援;yuanbao #2 为权威源对冲)
1641
+ # yuanbao 放第 2 位(2026-10-21):它不是「备选」而是**对冲位**。当月实测
1642
+ # bocha/octen 报 403(账户余额不足)、byted 报 10406(免费额度耗尽),三个
1643
+ # 主力同时被 is_hard_down 排除,combo 实际只剩 anysearch+zhihu_global;
1644
+ # 而同 6 个中文查询对拍 anysearch 中位 2664ms、日期覆盖 0%,yuanbao 中位
1645
+ # 699ms、日期覆盖 96%——放第 2 位意味着主力全挂时它直接顶上。
1646
+ #
1647
+ # 额度可耗尽(默认 2000 次/月;更高套餐改 engines/specs/yuanbao.yaml 的 limit),
1648
+ # 但耗尽后 is_hard_down 会自动把它从 combo 摘掉,组合回落到 anysearch/zhihu_global
1649
+ # 形态,不报错、不留半截状态。改档位后跑 scripts/sync_backends.py。
1476
1650
  engines_combo:
1477
1651
  - bocha
1652
+ - yuanbao
1478
1653
  - byted
1479
- - anysearch
1480
1654
  - octen
1655
+ - anysearch
1481
1656
  - zhihu_global
1482
1657
  - wechat_sogou
1483
1658
  - local_search
@@ -1576,7 +1751,11 @@ domains:
1576
1751
  name: social
1577
1752
  parallel: true
1578
1753
  patterns:
1579
- - (?i)(小红书|抖音|推特|twitter|reddit|b站|bilibili|微博|v2ex|评论|帖子|热门|trending|viral|public opinion|public sentiment|market sentiment|舆论|舆情|种草|拔草|用户体验|口碑)
1754
+ # `v2ex` 让位给 v2ex_search(2026-10-22):本域 patterns 含 v2ex,且
1755
+ # route_domains._social_domain_first 会把 social 提到命中列表首位——实测
1756
+ # 「v2ex 技术社区」落本域用 hackernews 搜(HackerNews 里确有一批 V2EX 讨论帖,
1757
+ # 但那是转载不是社区本身),而 v2ex_search 才是垂直域。从 patterns 移除 v2ex。
1758
+ - (?i)(小红书|抖音|推特|twitter|reddit|b站|bilibili|微博|评论|帖子|热门|trending|viral|public opinion|public sentiment|market sentiment|舆论|舆情|种草|拔草|用户体验|口碑)
1580
1759
  - (?i)(xhs|douyin|tweet|retweet|up主|博主|粉丝|点赞|转发|收藏)
1581
1760
  - (?i)(from\s*:|to\s*:|subreddit\s*:|lang\s*:|filter\s*:images|min_faves\s*:|min_retweets\s*:|since\s*:|until\s*:|nitter\b|via\s*:)
1582
1761
  primary: zhihu
@@ -1775,7 +1954,8 @@ engines:
1775
1954
  cost_tier: free
1776
1955
  qps: 5
1777
1956
  priority: 1
1778
- limit: 2000
1957
+ # 2026-10-21:默认额度按 1000/日 配置(账号实际可能更高,按默认口径走)
1958
+ limit: 1000
1779
1959
  period: day
1780
1960
  cost_per_call: 0.0
1781
1961
  cost_unit: free
@@ -1824,8 +2004,8 @@ engines:
1824
2004
  cost_tier: low
1825
2005
  qps: 5
1826
2006
  priority: 9
1827
- limit: 10000
1828
- period: month
2007
+ # 按量付费:不设次数上限(2026-10-22 用户更正)。额度由博查控制台后付,
2008
+ # argo 侧只在成本预算层可另设上限(argo budget set bocha ...)。
1829
2009
  cost_per_call: 0.0001
1830
2010
  cost_unit: credit
1831
2011
  coverage:
@@ -1851,8 +2031,7 @@ engines:
1851
2031
  cost_tier: low
1852
2032
  qps: 5
1853
2033
  priority: 9
1854
- limit: 10000
1855
- period: month
2034
+ # 按量付费:同 bocha,不设次数上限。
1856
2035
  cost_per_call: 0.001
1857
2036
  cost_unit: credit
1858
2037
  coverage:
@@ -1955,8 +2134,10 @@ engines:
1955
2134
  priority: 14
1956
2135
  limit: 1000
1957
2136
  period: month
1958
- cost_per_call: 0.0
1959
- cost_unit: free
2137
+ # 每月 $10 赠金按 1000 次折算 → $0.01/次。此前写 0 表示「赠金不计成本」,
2138
+ # 结果是 $10 预算永远不消耗、面板上的额度无法参与调度(2026-10-22 修正)。
2139
+ cost_per_call: 0.01
2140
+ cost_unit: usd
1960
2141
  coverage:
1961
2142
  - semantic
1962
2143
  - general
@@ -2968,7 +3149,7 @@ engines:
2968
3149
  priority: 8
2969
3150
  period: second
2970
3151
  cost_per_call: 0.0
2971
- cost_unit: credit
3152
+ cost_unit: usd
2972
3153
  coverage:
2973
3154
  - general
2974
3155
  - tech
@@ -3106,10 +3287,10 @@ engines:
3106
3287
  limit: 1000
3107
3288
  period: month
3108
3289
  cost_per_call: 0.001
3109
- cost_unit: credit
3290
+ cost_unit: usd
3110
3291
  coverage:
3111
3292
  - general
3112
- desc: Tavily AI 搜索 API(免费层 1000 次/月,按 credit 计费;与 exa 同为 api 档)
3293
+ desc: Tavily AI 搜索 API(免费层 1000 次/月,超出按美元计费;与 exa 同为 api 档)
3113
3294
  headers:
3114
3295
  Content-Type: application/json
3115
3296
  method: POST
@@ -3227,29 +3408,39 @@ engines:
3227
3408
  twitter:
3228
3409
  qps: 2
3229
3410
  type: cli
3230
- # timeout 声明(2026-09-10 核查):该引擎内部已有**广谱重试**
3231
- # (429 + URLError/OSError,最多 3 次带指数退避,见 _http_get_with_retry)。
3232
- # 按 search._engine_retries 约定,声明 ≥8s 即不再叠加引擎级重试——
3233
- # 否则内外两层重试叠乘(anysearch 曾因此跑出 31s)。
3234
- # 安全性:缺 tw 依赖不可路由,声明以保持一致,远低于 8s,不会截断正常请求。
3235
- timeout: 8
3411
+ # timeout 声明(2026-10-21 改道后核查):主通道改为 scripts/x_search.py
3412
+ # (ego-browser,复用已登录的 X 会话),实测 3.1s 返回 3 条。
3413
+ # 内含浏览器首屏等待,故给 20s 上限;dispatch 仍按整轮预算截断,
3414
+ # 不会因为这一源拖垮整次搜索。
3415
+ timeout: 20
3236
3416
  label: Twitter/X
3237
3417
  enabled: true
3238
3418
  cost_tier: free
3419
+ # 覆盖标签决定路由:X 是社交/英文语料,不是通用网页源。
3420
+ # 此前缺省为 [general],社交意图选不到它、通用意图反而可能被它拖慢。
3421
+ coverage:
3422
+ - social
3423
+ - english
3424
+ canary_query: OpenAI
3239
3425
  cmd:
3240
3426
  - python3
3241
- - scripts/social_engines/twitter_engine.py
3427
+ - scripts/x_search.py
3242
3428
  search_args:
3243
- - search
3244
3429
  - '{query}'
3245
3430
  - -n
3246
3431
  - '{n}'
3432
+ - --json
3247
3433
  env: {}
3248
- # 后端依赖:脚本内部调 `tw` CLI。缺它时引擎只能返回空,
3249
- # 故为必需——声明后状态显示 missing_dep 并给出安装命令。
3434
+ # 通道变更(2026-10-21):旧脚本 twitter_engine.py 的三个通道当时全失效——
3435
+ # FxTwitter /2/search 上游已停用、nitter 公共实例实测零结果、tw CLI 未装,
3436
+ # 强制调用 6s 超时且结果为空。x_search.py 是仓库内既有的可用替代,
3437
+ # 且支持 X 原生布尔语法(from:/-is:retweet/lang:),比旧通道更准。
3438
+ # ego-browser 缺失只影响该源本身(显式调用报错),不阻断路由,故标 optional。
3250
3439
  requires:
3251
- - bin: tw
3252
- fix: 安装 twitter-cli(`pipx install twitter-cli` 或 npm i -g twitter-cli),完成后确保 `tw` 在 PATH 上
3440
+ - bin: ego-browser
3441
+ optional: true
3442
+ fix: 安装 ego-browser(Ego Lite)并登录 X;缺失时该源跳过,单条推文仍可走 `argo tweet`
3443
+ desc: X/Twitter 关键词搜索(ego-browser 通道,原生布尔语法 from:/-is:retweet/lang:)
3253
3444
  reddit:
3254
3445
  qps: 2
3255
3446
  type: cli
@@ -5135,10 +5326,25 @@ output:
5135
5326
  # 发布出去的默认值就从「关闭」变成「开启」了。
5136
5327
  semantic_evidence:
5137
5328
  enabled: false
5329
+ # 通道:jev(TypeSafe System One)| classify(classifier.dev)。
5330
+ # **纯配置驱动,不做「按键就绪自动选」**——那会让同一份代码在开发机与 CI
5331
+ # 上走不同分支(本机 env 文件里有没有 key 决定路径),既有测试会静默改道。
5332
+ # 未声明时默认 jev:classifier.dev 的匿名路径 2026-10-22 起回
5333
+ # 403 proxy_requires_payment(「Anonymous proxy traffic requires a funded
5334
+ # API key」),要 workspace key 才能用;JEV 是当前可用的那条。
5335
+ transport: jev
5336
+ # JEV 端点与模型。**独立于下方 endpoint 字段**——两个通道的请求体形状不同
5337
+ # (JEV 是 state+questions,classify 是 inputs+labels),共用一个 endpoint 会
5338
+ # 把 System One 的体发到 classifier.dev,拿回指向错误方向的 401。
5339
+ jev_endpoint: "https://api.typesafe.ai/v1/systemone"
5340
+ jev_model: "jev-latest"
5341
+ # classify 通道(classifier.dev)的端点;JEV 通道不读它。
5138
5342
  endpoint: "https://classifier.dev"
5139
- # 单次批量分类的超时(秒)。服务不可达时核验链路最多多等这么久,然后静默降级。
5343
+ # 单次请求的超时(秒)。服务不可达时核验链路最多多等这么久,然后静默降级。
5344
+ # JEV 通道下这是**每条正文**的超时(每条一个请求,并发 4)。
5140
5345
  timeout_s: 5
5141
- # fast:决策模型一次往返;smart:低置信度条目转推理模型复核(慢,配额小 10 倍)
5346
+ # fast:决策模型一次往返;smart:低置信度条目转推理模型复核(慢,配额小 10 倍)。
5347
+ # 仅 classify 通道认这个字段。
5142
5348
  tier: fast
5143
5349
 
5144
5350
  # ── 网络出口调度(issue #13,2026-09-14)────────────────────────────────