argo-search 2.9.7 → 2.9.8

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 (140) hide show
  1. package/README.en.md +58 -145
  2. package/README.es.md +58 -145
  3. package/README.ja.md +64 -151
  4. package/README.ko.md +63 -150
  5. package/README.md +65 -154
  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 +74 -5
  13. package/bin/argo.js +33 -2
  14. package/config.yaml +219 -60
  15. package/docs/ENGINE_CATALOG.md +50 -39
  16. package/docs/MCP_SETUP.md +3 -1
  17. package/docs/RELEASE_NOTES_v2.9.8.md +73 -0
  18. package/engines/specs/cfets.yaml +41 -0
  19. package/engines/specs/defillama.yaml +38 -0
  20. package/engines/specs/firecrawl.yaml +1 -1
  21. package/engines/specs/fxtwitter.yaml +5 -0
  22. package/engines/specs/gleif.yaml +55 -0
  23. package/engines/specs/hkex.yaml +40 -0
  24. package/engines/specs/keenable_free.yaml +36 -0
  25. package/engines/specs/shfe.yaml +39 -0
  26. package/engines/specs/stackexchange.yaml +2 -2
  27. package/engines/specs/tavily_free.yaml +56 -0
  28. package/engines/specs/yuanbao.yaml +93 -0
  29. package/mcp/clients.yaml +32 -0
  30. package/package.json +6 -2
  31. package/packages/dsh-plugin/README.md +23 -5
  32. package/packages/dsh-plugin/dsh/client.js +304 -15
  33. package/packages/dsh-plugin/dsh/diagnostics.js +54 -0
  34. package/packages/dsh-plugin/dsh/index.js +112 -1875
  35. package/packages/dsh-plugin/dsh/native-tools.mjs +7 -1
  36. package/packages/dsh-plugin/dsh/runner.js +666 -0
  37. package/packages/dsh-plugin/dsh/wide-research.js +878 -0
  38. package/packages/dsh-plugin/package.json +2 -2
  39. package/packages/dsh-plugin/scripts/sync-local.sh +70 -0
  40. package/packages/dsh-plugin/test/client.test.js +175 -1
  41. package/packages/dsh-plugin/test/diagnostics.test.js +28 -0
  42. package/packages/dsh-plugin/test/index.test.js +44 -0
  43. package/scripts/adaptive.py +24 -1
  44. package/scripts/article_meta.py +131 -0
  45. package/scripts/budget.py +247 -0
  46. package/scripts/budget_cli.py +93 -0
  47. package/scripts/build_release_assets.sh +65 -0
  48. package/scripts/cache.py +60 -72
  49. package/scripts/ci_drift_gate.py +90 -0
  50. package/scripts/content_boundary.py +46 -0
  51. package/scripts/content_signals.py +26 -5
  52. package/scripts/cross_lingual_trace.py +293 -0
  53. package/scripts/dispatch_result.py +98 -0
  54. package/scripts/engine_dispatch.py +49 -86
  55. package/scripts/engine_env.py +5 -0
  56. package/scripts/engine_families.py +6 -0
  57. package/scripts/engine_policy.py +7 -7
  58. package/scripts/engines.py +21 -0
  59. package/scripts/engines_base.py +3 -3
  60. package/scripts/engines_builders.py +12 -0
  61. package/scripts/engines_builders_batch10.py +48 -3
  62. package/scripts/engines_builders_batch14.py +656 -0
  63. package/scripts/engines_builders_batch15.py +249 -0
  64. package/scripts/engines_builders_keyless.py +111 -0
  65. package/scripts/engines_builders_tech.py +0 -1
  66. package/scripts/evidence.py +31 -3
  67. package/scripts/evidence_loop.py +54 -22
  68. package/scripts/fetch_v3.py +25 -0
  69. package/scripts/gen_routing_snapshot.py +11 -0
  70. package/scripts/install.ps1 +18 -0
  71. package/scripts/install.sh +16 -1
  72. package/scripts/job.py +3 -3
  73. package/scripts/local_seek.py +41 -5
  74. package/scripts/macro_countries.py +15 -0
  75. package/scripts/matrix_search_eval.py +82 -0
  76. package/scripts/mcp_compact.py +234 -0
  77. package/scripts/mcp_handlers.py +60 -642
  78. package/scripts/mcp_launch.sh +10 -8
  79. package/scripts/mcp_local.py +241 -0
  80. package/scripts/mcp_server.py +19 -14
  81. package/scripts/mcp_setup.py +33 -9
  82. package/scripts/mcp_tools.py +1 -0
  83. package/scripts/mcp_transport.py +1 -1
  84. package/scripts/mcp_warm.py +127 -0
  85. package/scripts/output_transparency.py +200 -0
  86. package/scripts/paid_policy.py +98 -0
  87. package/scripts/quota.py +158 -13
  88. package/scripts/recovery_runner.py +150 -0
  89. package/scripts/replay_eval.py +18 -0
  90. package/scripts/research.py +37 -21
  91. package/scripts/research_expand.py +24 -1
  92. package/scripts/retry_policy.py +76 -0
  93. package/scripts/route.py +6 -6
  94. package/scripts/route_cache.py +18 -0
  95. package/scripts/route_combo.py +7 -0
  96. package/scripts/route_domains.py +32 -19
  97. package/scripts/search.py +15 -27
  98. package/scripts/search_attribution.py +100 -3
  99. package/scripts/search_cli.py +24 -11
  100. package/scripts/search_entry.py +7 -1
  101. package/scripts/search_output.py +99 -15
  102. package/scripts/search_pipeline.py +42 -193
  103. package/scripts/search_types.py +107 -9
  104. package/scripts/semantic_evidence.py +179 -3
  105. package/scripts/serp_guard.py +115 -7
  106. package/scripts/serp_kill_log.py +25 -2
  107. package/scripts/stats_cli.py +13 -1
  108. package/scripts/wide_research.py +45 -0
  109. package/scripts/zhihu_quota.py +139 -0
  110. package/sub-skills/local-search/bm25.py +27 -3
  111. package/sub-skills/local-search/cli_runner.py +331 -0
  112. package/sub-skills/local-search/parsers.py +328 -0
  113. package/sub-skills/local-search/search_v3.py +31 -674
  114. package/sub-skills/local-seek/scripts/seek_rank.py +7 -3
  115. package/assets/readme/settings-keys.png +0 -0
  116. package/assets/readme/settings-tools.png +0 -0
  117. package/scripts/image_vision/vision_probe +0 -0
  118. package/scripts/local_engines.py +0 -321
  119. package/sub-skills/ego-search/references/browser-runtime.md +0 -43
  120. package/sub-skills/ego-search/references/install.md +0 -67
  121. package/sub-skills/ego-search/references/original-ego-upgrade.md +0 -51
  122. package/sub-skills/ego-search/tests/test_query_normalize.py +0 -68
  123. package/sub-skills/js-run/tests/fixtures/challenge_like.js +0 -27
  124. package/sub-skills/js-run/tests/test_jsrun.py +0 -165
  125. package/sub-skills/local-seek/references/auto-behaviors.md +0 -24
  126. package/sub-skills/local-seek/references/fd-mdfind-recipes.md +0 -62
  127. package/sub-skills/local-seek/references/git-integration.md +0 -54
  128. package/sub-skills/local-seek/references/remote-handoff.md +0 -46
  129. package/sub-skills/local-seek/references/rg-recipes.md +0 -96
  130. package/sub-skills/local-seek/references/strategies.md +0 -52
  131. package/sub-skills/local-seek/references/structural-search.md +0 -59
  132. package/sub-skills/local-seek/tests/test_content_rank.py +0 -222
  133. package/sub-skills/local-seek/tests/test_determinism_20261006.py +0 -145
  134. package/sub-skills/local-seek/tests/test_noise_tier.py +0 -101
  135. package/sub-skills/local-seek/tests/test_pcre2_probe.py +0 -136
  136. package/sub-skills/local-seek/tests/test_rank_pinyin.py +0 -77
  137. package/sub-skills/local-seek/tests/test_regression_20261003.py +0 -169
  138. package/sub-skills/local-seek/tests/test_regression_20261006.py +0 -146
  139. package/sub-skills/local-seek/tests/test_seek_degradation.py +0 -111
  140. 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
@@ -228,6 +258,7 @@ domains:
228
258
  # 反向),不足以单独收工,强制 eastmoney 并行补位;3 条以上才停。
229
259
  engines_combo:
230
260
  - fx_rate
261
+ - cfets
231
262
  - eastmoney
232
263
  - frankfurter
233
264
  - anysearch
@@ -235,12 +266,17 @@ domains:
235
266
  name: fx_query
236
267
  parallel: true
237
268
  patterns:
238
- - 中间价|牌价|汇率|外币兑换|换汇
269
+ - match: '(?i)(中间价|牌价|汇率|外币兑换|换汇)'
270
+ # 代码语境里的「汇率/中间价」是在问库或接口,不是要今天的牌价。
271
+ # 实测「示例金融库 开源 接口 汇率 中间价 python github」被 fx_query
272
+ # 抢走,只返回一条 USD/CNY 中间价,用户要的库文档一条没有。
273
+ unless: '(?i)(python|github|api|接口|库|数据源|代码|开源|pip|npm|教程|安装)'
239
274
  - (?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
275
  - 离岸人民币|在岸人民币|离岸美元
241
276
  - (人民币|美元|欧元|英镑|日元|港币|港元|加元|澳元|瑞郎|新加坡元).{0,6}(升值|贬值|买入价|卖出价|钞买价|汇买价|中间价|走势)
242
277
  - (人民币|美元|欧元|英镑|日元|港币|港元|加元|澳元|瑞郎|新加坡元)\s*[//兑対]\s*(人民币|美元|欧元|英镑|日元|港币|港元|加元|澳元|瑞郎|新加坡元)
243
- - {match: 外汇, unless: 储备}
278
+ - match: '(?i)外汇'
279
+ unless: '(?i)(储备|python|github|api|接口|库|数据源|代码|开源)'
244
280
  primary: fx_rate
245
281
  early_stop_min_results: 3
246
282
  # 源保底分(score_floors):汇率快照是「答案型」结果(标题是数字而非网页,
@@ -386,6 +422,10 @@ domains:
386
422
  # 裸 CVE 此前不认:第一条要求写成完整的 CVE-2024-1234,于是「CVE 漏洞」
387
423
  # 这种最自然的说法一个域都不命中,掉进通用兜底、nvd 选不上。
388
424
  - (?i)\bCVE(-|\b)
425
+ # 裸「漏洞/vulnerability」是最自然的说法,此前只收「漏洞+公告/情报/扫描…」,
426
+ # 实测「示例包 漏洞」掉进通用兜底、「示例 python package
427
+ # vulnerability」被 code_search 的 package 抢走。
428
+ - (?i)(漏洞|vulnerabilit(y|ies)|security\s+(issue|flaw|bug))
389
429
  - (?i)(安全漏洞|漏洞公告|漏洞情报|漏洞利用|漏洞评分|漏洞扫描|漏洞修复|CVSS|CVE|NVD|安全通告|zero.?day|零日漏洞|0day)
390
430
  - (?i)(security (advisory|vulnerability|bulletin)|cisa kev)
391
431
  - (?i)(在野利用|已被利用|\bkev\b|exploited in the wild)
@@ -426,6 +466,9 @@ domains:
426
466
  patterns:
427
467
  - (?i)(进出口|贸易额|双边贸易|贸易数据|进口额|出口额|comtrade)
428
468
  - (?i)(进口|出口|import|export).{0,12}\bHS?\s?\d{4}\b
469
+ # 海关商品编码是贸易统计字段,不是代码搜索;但裸「商品编码」也常指零售
470
+ # SKU,必须带海关/HS/关税语境才收,避免反向误伤。
471
+ - (?i)(HS\s*代码|HS\s*code|海关(商品)?编码|海关商品代码|(?:海关|HS|进出口|关税|贸易).{0,10}(商品编码|商品代码))
429
472
  primary: un_comtrade
430
473
 
431
474
  - desc: 天文/空间天气/卫星(Kp 指数、太阳活动区、卫星目录与 TLE 轨道根数)
@@ -580,7 +623,11 @@ domains:
580
623
  name: art_museum
581
624
  parallel: true
582
625
  patterns:
583
- - (博物馆|馆藏|藏品|美术馆|文物|艺术品|雕塑|名画|油画|画作|画家|谁画的)
626
+ - (博物馆|藏品|美术馆|文物|艺术品|雕塑|名画|油画|画作|画家|谁画的)
627
+ # 「馆藏」在图书馆/电子书语境里不是博物馆意图。实测「图书馆 馆藏 电子全文」
628
+ # 被锁进 art_museum,Met Museum 源返回艺术史论文。
629
+ - match: '(?i)馆藏'
630
+ unless: '(?i)(图书馆|电子书|电子全文|书目|馆藏目录|馆藏查询|pdf|试读|ss\s*号)'
584
631
  - (?i)(met museum|museum collection|art collection|painting|sculpture|van gogh|\bmonet\b|picasso|vermeer)
585
632
  primary: met_museum
586
633
 
@@ -610,7 +657,7 @@ domains:
610
657
  name: financial_news
611
658
  parallel: true
612
659
  patterns:
613
- - (?i)(研报|财报|公告|财经|宏观|央行政策|降息|加息|CPI|GDP|PMI)
660
+ - (?i)(研报|财报|公告|财经|宏观|央行政策|降准|降息|加息|CPI|GDP|PMI)
614
661
  - (?i)(financial|earnings report|annual report|announcement)
615
662
  primary: em_miaoxiang
616
663
  # 源保底分:cninfo 是官方公告源(标题是「年报」而非网页,token 覆盖低)
@@ -649,14 +696,11 @@ domains:
649
696
  unless: '(?i)(气候变化|极端天气|全球变暖|天气趋势|天气研究|天气影响|天气对)'
650
697
  # 日韩天气触发词(修复「東京の天気」「서울 날씨」漏召)
651
698
  - (?i)(天気|気温|予報|何度)
652
- # 「雨/雪」此前裸放在上一条日文模式里,而这两个字在中文里**同时是图片词**
653
- # (雪景/雨景/雪花/大雪壁纸)。实测代价:`雪景 壁纸`、`雨景 摄影`、
654
- # `雪花 插画`、`壁纸 雪山`、`帮我找几张雪山壁纸` 全部被抢进 weather_query,
655
- # 返回天气网和必应网页结果——图片需求一条图都拿不到。含「雪/雨」的中文
656
- # 图片查询是高频场景(壁纸、摄影、插画),不是边缘 case。
657
- # 与 geo_places 同法加让位表:出现图片/摄影语境时让位给 image_search,
658
- # 其余情况仍按天气处理(「明天会下雪吗」照旧命中天气)。
659
- - match: '(?i)(雨|雪)'
699
+ # 裸「雨/雪」在中文里大量作为构词成分出现(雪原、雪松、电动车…),
700
+ # 不是天气意图。2026-10-23 回放实测:「雪原 开源 投研 搜索工具」被判进
701
+ # weather_query,天气源返回「雪原…当前 14°C 晴」。改为只收明确的天气说法;
702
+ # 「明天会下雪吗」仍命中「下雪」,「雪景 壁纸」仍由 image_search 接。
703
+ - match: '(?i)(下雨|下雪|降雨|降雪|雨夹雪|暴雨|大雨|小雨|中雨|大雪|小雪|中雪|阵雨|雷阵雨|雨量|雪量|雨天|雪天|有雨|有雪)'
660
704
  unless: '(?i)(图片|壁纸|照片|图库|素材|插画|头像|背景图|桌面|png|jpg|海报|摄影|写真|剧照|表情|雪花|雪景|雨景|wallpaper|photo|image|picture|illustration|poster)'
661
705
  - (?i)(날씨|기온|온도|예보|몇\s*도)
662
706
  early_stop_min_results: 1
@@ -670,7 +714,7 @@ domains:
670
714
  name: modal_card
671
715
  parallel: false
672
716
  patterns:
673
- - (?i)(火车票|高铁|动车|车次|火车时刻|高铁票价|高铁时刻)
717
+ - (?i)(火车票|高铁|(?<!电)动车|车次|火车时刻|高铁票价|高铁时刻)
674
718
  - (?i)(油价|今日油价|加油价格|成品油|柴油价格|汽油价格)
675
719
  - (?i)(金价|银价|黄金价格|铂金|钯金|贵金属行情|今日金价|今日银价)
676
720
  - (?i)(黄历|万年历|宜忌|农历查询|老黄历|吉日|黄道吉日)
@@ -733,6 +777,7 @@ domains:
733
777
  - desc: 加密货币/币种查询
734
778
  engines_combo:
735
779
  - coingecko
780
+ - defillama
736
781
  - anysearch
737
782
  fallback: anysearch
738
783
  name: crypto_search
@@ -740,6 +785,7 @@ domains:
740
785
  patterns:
741
786
  - (?i)(比特币|以太坊|莱特币|狗狗币|加密货币|虚拟货币|数字货币|币价|币种|山寨币|空气币|代币|区块链|挖矿|钱包地址|token 经济|稳定币)
742
787
  - (?i)\b(bitcoin|ethereum|btc|eth|crypto|altcoin|defi|nft|blockchain|coin)\b
788
+ - (?i)(\btvl\b|总锁仓|锁仓量|链上资金|协议收入|defillama)
743
789
  primary: coingecko
744
790
  - desc: 包管理器/语言包查询(PyPI/npm/crates/Docker)
745
791
  engines_combo:
@@ -832,7 +878,11 @@ domains:
832
878
  name: legal
833
879
  parallel: true
834
880
  patterns:
835
- - (?i)(刑法|民法|司法解释|判例|法规|裁判文书|案由|案号|法院判决)
881
+ # 「裁判文书/判决书/裁定书」让位给 wenshu_query(2026-10-22):本域 patterns 含
882
+ # 「裁判文书」,且本域排在 wenshu_query 之前(857 vs 867 行)——实测
883
+ # 「裁判文书 判决书」落本域用 anysearch/byted 搜,而 wenshu 才是裁判文书权威源。
884
+ - match: '(?i)(刑法|民法|司法解释|判例|法规|裁判文书|案由|案号|法院判决)'
885
+ unless: '(?i)(裁判文书|判决书|裁定书|wenshu|court\.gov)'
836
886
  primary: anysearch
837
887
  - desc: 裁判文书检索
838
888
  engines_combo:
@@ -945,7 +995,12 @@ domains:
945
995
  name: anime_encyclopedia
946
996
  parallel: false
947
997
  patterns:
948
- - (?i)(萌娘百科|二次元|ACG|动漫|番剧|新番|番组|声优|手办|同人|轻小说|漫画|日本动画|新番动画|动画番剧|动画推荐|看动画|galgame|vtuber|虚拟主播|东方project|型月|(?-i:\bFate\b))
998
+ - (?i)(萌娘百科|二次元|ACG|动漫|番剧|新番|番组|声优|手办|同人|轻小说|漫画|日本动画|新番动画|动画番剧|动画推荐|看动画|galgame|vtuber|虚拟主播|东方project|(?-i:\bFate\b))
999
+ # 「型月」是 Type-Moon 专名,但在无空格中文里是「大模型月报」的子串:
1000
+ # 实测「AI大模型月报 2026年8月」被锁进 anime_encyclopedia,萌娘百科返回
1001
+ # 一款 2009 年的太空战略游戏。单独的型月查询仍保留。
1002
+ - match: '(?i)型月'
1003
+ unless: '(?i)(大模型|模型月报)'
949
1004
  primary: moegirl
950
1005
  - desc: 书籍/图书搜索(微信读书 + 豆瓣读书 + Open Library + Gutenberg)
951
1006
  engines_combo:
@@ -1020,7 +1075,7 @@ domains:
1020
1075
  # 结果无关)。CJK 触发词不受影响,另补「亚运会」词条(此前漏配,
1021
1076
  # 「杭州亚运会场馆」落不进体育域)。
1022
1077
  - (?i:(?<![a-z0-9])(NBA|CBA|WNBA|NFL|NHL|MLB|MLS)(?![a-z0-9]))|(?i:(英超|西甲|德甲|意甲|法甲|中超|欧冠|亚冠|世界杯|欧洲杯|美洲杯|奥运会|残奥会|世锦赛|大奖赛|亚运会))
1023
- - (?i)(足球|篮球|网球|排球|乒乓球|羽毛球|棒球|橄榄球|高尔夫|F1|一级方程式|马拉松|田径|游泳|拳击|UFC|电竞战队)
1078
+ - (?i)(足球|篮球|网球|排球|乒乓球|羽毛球|棒球|橄榄球|高尔夫|(?<![a-z0-9])F1(?![a-z0-9])|一级方程式|马拉松|田径|游泳|拳击|(?<![a-z0-9])UFC(?![a-z0-9])|电竞战队)
1024
1079
  - (?i)(决赛|半决赛|季后赛|总冠军|MVP|得分王|金靴|金球奖|转会|俱乐部|联赛|进球|助攻|夺冠|卫冕|球员|守门员|前锋|后卫)
1025
1080
  # 中英球队/效力语境(修复「库里 球队」「LeBron James team」「Ronaldo club」漏召)
1026
1081
  - (?i)(球队|球星|球会|球衣|队名|队史|效力于|效力|主教练|得分手)
@@ -1054,9 +1109,17 @@ domains:
1054
1109
  # 注入」这类触发词,而「行政区划代码」是货真价实的地理查询——域级否决会
1055
1110
  # 因为它含「代码」而把整域毙掉(2026-09-21 快照实测,3709 条查询里 3 条
1056
1111
  # 因此漂移)。否决的作用域必须与被否决的触发词一样窄。
1112
+ # 「总部/母公司/子公司/注册地/办公地」等企业语境词让方位词失效(2026-10-22):
1113
+ # 「华为 总部在哪」此前命中本域,用 OSM+维基只拿到广汽/新凯来/五粮液等无关结果
1114
+ # (企业总部不是地理问题,实体库无中国民企数据,与 org_entity 2026-10-14 的
1115
+ # 尽调词排除同因)。让位后落到 entity_search(其 patterns 含「总部在哪」)。
1057
1116
  - match: '(?i)(在哪里|在哪儿|在哪|位于|坐落|位置|坐标|经纬度|海拔|发源地|入海口|交汇|毗邻|接壤|边境|首都|省会|直辖市|地标|名胜|景点)'
1058
- unless: '(?i)(报错|错误|日志|失败|异常|配置|设置|安装|修改|代码|接口|参数|文档|教程|图片|元素|居中|对齐|偏移|样式|布局|按钮|窗口|表格|控件|调整)'
1059
- - (?i)(山脉|河流|湖泊|海洋|岛屿|半岛|沙漠|高原|盆地|峡谷|海峡|运河|瀑布|火山|冰川|赤道|经线|纬线|时区)
1117
+ unless: '(?i)(报错|错误|日志|失败|异常|配置|设置|安装|修改|代码|接口|参数|文档|教程|图片|元素|居中|对齐|偏移|样式|布局|按钮|窗口|表格|控件|调整|总部|母公司|子公司|注册地|办公地)'
1118
+ - match: '(?i)(山脉|河流|湖泊|海洋|岛屿|半岛|沙漠|高原|盆地|峡谷|海峡|运河|瀑布|火山|冰川|赤道|经线|纬线|时区)'
1119
+ # 「火山引擎」是云产品,不是火山地貌。2026-10-23 回放实测:
1120
+ # 「某云产品 官方 指南 火山引擎」被锁进 geo_places,主源
1121
+ # local_openstreetmap 对产品名答非所问。
1122
+ unless: '(?i)(火山(引擎|云|翻译|方舟)|volcengine|volcano\s+engine)'
1060
1123
  # 水系/行政区划事实(修复「黄河 流经省份」漏召)
1061
1124
  - (?i)(流经|途经|贯穿|横跨|流域|水系|汇入|注入|源头|入海|几省|省份|省区|行政区划|发源于)
1062
1125
  - (?i)(地理|地图|方位|东南西北|几公里|多远|距离.*多远|openstreetmap|nominatim|geonames)
@@ -1112,7 +1175,7 @@ domains:
1112
1175
  # 实控人/融资/股权)都不应命中本域——前者是招聘文案,后者 wikidata 无中国
1113
1176
  # 民企股东数据(实测 1.8s 只拿到两字「公司」)。
1114
1177
  - match: '(?i)(股份有限公司|有限公司|集团|控股|总部|成立于|创立于|创办于|创始人|CEO|董事长|市值|子公司|母公司)'
1115
- unless: '(?i)(岗位|职位|招聘|薪资|待遇|面试|简历|JD|工作内容|任职要求|岗位要求|股东|持股|实控人|融资|股权|注册资本|工商登记)'
1178
+ unless: '(?i)(岗位|职位|招聘|薪资|待遇|面试|简历|JD|工作内容|任职要求|岗位要求|股东|持股|实控人|融资|股权|注册资本|工商登记|统一社会信用代码|社会信用代码|信用代码|法定代表人|经营范围|注册号|企业信息|工商信息)'
1116
1179
  - (?i)(创办年份|成立年份|创立年份|建校年份|成立时间|创办时间|创立时间|建校时间|何时成立|何时创办|何时创立)
1117
1180
  - (?i)(大学|学院|研究所|科学院|研究院).{0,12}(创办|成立|创立|建校)
1118
1181
  - (?i)\b([A-Z][A-Za-z0-9&.\- ]{1,40}\s+(Inc\.?|LLC|Ltd\.?|Corp\.?|Co\.|GmbH|S\.A\.|PLC))\b
@@ -1161,8 +1224,18 @@ domains:
1161
1224
  # 收「摄影作品/摄影图」这类带结果的写法。
1162
1225
  # 同理收「海报/封面图/图标/字体图」——实测 `vintage poster` 落
1163
1226
  # 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
1227
+ - (?i)(图片|壁纸|照片|图库|素材|插画|无版权|免费图片|头像|背景图|表情图|png|jpg 图片|壁纸下载|摄影作品|摄影图|写真|剧照|雨景|雪景|夜景|风景照|风光照|海报|封面图|logo 图|贴图|素材图|配图)
1228
+ # 「图标」在 UI 排障句里指的是菜单栏/状态栏控件(图标不显示、图标消失),
1229
+ # 不是找图需求。2026-10-23 回放实测:「菜单栏 第三方 图标 不显示 消失」
1230
+ # 被锁进 image_search,主源 Openverse 返回图库结果。
1231
+ - match: '(?i)图标'
1232
+ unless: '(?i)(菜单栏|状态栏|工具栏|任务栏|dock|favicon|应用图标|app\s+icon|不显示|消失|丢失|missing|disappear|not\s+show|图标满|图标太多)'
1233
+ # 单独的 image/picture 在技术任务句里是「处理图片」而非「找图」:
1234
+ # 实测「PDF extract text image」被 image_search 接走。收窄到
1235
+ # image/picture 这一条,wallpaper/photo/poster 等明确的找图词不受影响。
1236
+ - match: '(?i)\b(image|picture)\b'
1237
+ unless: '(?i)(extract|ocr|pdf|text|代码|python|api|库|命令|脚本|转换|识别|提取)'
1238
+ - (?i)\b(wallpaper|photo|illustration|stock photo|free image|poster|icon set|clip ?art|thumbnail|artwork)\b
1166
1239
  primary: openverse
1167
1240
  # 版权优先:要「能合法用」的图时 openverse 带许可标注,ddgs 全网图多数
1168
1241
  # 无授权信息。两条并行取回后由合并层按需取舍,而不是先跑一条再补另一条
@@ -1201,7 +1274,11 @@ domains:
1201
1274
  name: zhihu_content
1202
1275
  parallel: true
1203
1276
  patterns:
1204
- - (?i)(知乎|怎么看待|如何评价|体验|评测|对比|推荐|哪个好|值得买|好不好|要不要|推荐吗|求推荐|有什么)
1277
+ # 2026-10-21:只认「明确指向知乎/站内观点」的词。此前的 体验|评测|对比|
1278
+ # 推荐|哪个好|值得买|好不好|要不要|求推荐|有什么 是中文查询的通用词,
1279
+ # 实测把「蓝牙耳机推荐」「新能源汽车对比」这类通用消费查询锁到知乎单源
1280
+ # (21 条样本里至少 9 条)。泛意图交给通用保底,覆盖更宽。
1281
+ - (?i)(知乎|怎么看待|如何评价|知友)
1205
1282
  primary: zhihu
1206
1283
  - desc: 学术论文搜索
1207
1284
  # openreview/biorxiv 曾长期是「已实现但无域引用」的孤儿源:只能靠
@@ -1262,7 +1339,9 @@ domains:
1262
1339
  # 注意 unless 是子串语义,写「对比|vs」会误伤「BERT vs GPT 对比实验」——
1263
1340
  # 学术对比通常带论文词(综述/实验/论文),由第 1 条兜住,这里只拦产品语境。
1264
1341
  - match: '(?i)(transformer|attention|neural\s+network|deep\s+learning|machine\s+learning|BERT|GPT)'
1265
- unless: '(?i)(技巧|教程|怎么用|如何|使用|入口|官网|注册|充值|账号|订阅|价格|发布|下载|安装|对比|哪个好|好用|推荐|周报|写作|助手|插件|镜像|平替|魔法|翻墙)'
1342
+ # 「工程实践/博客/案例」是产品与经验文章语境,不是论文。实测「GPT
1343
+ # 工程实践 清理死代码」被 academic 接走,arXiv 返回 AI 教育论文。
1344
+ unless: '(?i)(技巧|教程|怎么用|如何|使用|入口|官网|注册|充值|账号|订阅|价格|发布|下载|安装|对比|哪个好|好用|推荐|周报|写作|助手|插件|镜像|平替|魔法|翻墙|工程实践|实践|博客|文章|官方博客|公司|团队|案例)'
1266
1345
  - (?i)(論文|ジャーナル|学会誌|査読|研究論文|プレプリント)
1267
1346
  primary: arxiv
1268
1347
  - desc: 技术深度研究
@@ -1287,7 +1366,10 @@ domains:
1287
1366
  parallel: true
1288
1367
  patterns:
1289
1368
  # 注意:不要用裸 \bbest\b / review / comparison,会误伤 "best practices" 等技术查询
1290
- - (?i)(评测|推荐|哪个好|值得买|选购|入手|踩坑|避雷|种草|拔草|海淘)
1369
+ # 2026-10-21:泛购物意图(评测/推荐/哪个好/值得买/选购/入手)不再由本域
1370
+ # 独占——它们占中文查询的很大一块,锁到知乎单源等于用问答站替代全网。
1371
+ # 这里只留「购物动作」本身;泛意图落通用保底(octen/anysearch),覆盖更宽。
1372
+ - (?i)(踩坑|避雷|种草|拔草|海淘|好物|开箱|平替)
1291
1373
  - (?i)\b(product\s+review|buyer's?\s+guide|worth\s+buying|best\s+buy|shopping)\b
1292
1374
  primary: zhihu
1293
1375
  - desc: 语义发现/开放式调研(Exa 语义引擎)
@@ -1322,8 +1404,23 @@ domains:
1322
1404
  name: code_search
1323
1405
  parallel: true
1324
1406
  patterns:
1325
- - (?i)(github|source code|代码|源码|开源|函数|实现|用法|snippet)
1326
- - (?i)\b(API|api)\b|\b(repo|repository|library|package|npm|pip|cargo)\b
1407
+ # 裸「开源」太宽:品牌/产品句(「雪原 开源 投研 搜索工具」)也会
1408
+ # 命中,GitHub 慢源要 7s 且只回一条。只收「开源项目/代码/仓库/库/软件/
1409
+ # 框架」这类明确指向代码仓库的说法;有 github/源码 的查询仍走本域。
1410
+ - (?i)(github|source code|源码|开源\s*(项目|代码|仓库|库|软件|框架)|函数|实现|用法|snippet)
1411
+ # 「统一社会信用代码」是工商登记字段,不是代码搜索。拆出「代码」单条,
1412
+ # 让 company_search(更靠后)能接到这类查询。
1413
+ - match: '(?i)(代码)'
1414
+ # 「代码」在文章/工程实践句里是主题词,不是找仓库。实测「示例公司 官方
1415
+ # 博客 … 维护代码库 … 死代码」被 code_search 接走,GitHub 返回 OpenGL
1416
+ # 和 MDN 的 sidebarAction。让位给 chinese_tech_deep 的中文技术组合。
1417
+ unless: '(?i)(统一社会信用代码|社会信用代码|信用代码|区划代码|行政代码|邮政编码|股票代码|证券代码|基金代码|基金份额代码|商品代码|HS\s*代码|海关编码|商品编码|验证码|信用卡|安全码|CVV|官方博客|博客|文章|工程实践|实践|维护|重构|死代码|屎山|清理|经验|案例|周报|月报)'
1418
+ - (?i)\b(repo|repository|library|package|npm|pip|cargo)\b
1419
+ # API 在「A vs B / 对比 / 区别」句里要的是概念解释,不是代码仓库:
1420
+ # 实测「kubernetes ingress vs gateway api」被 code_search 接走,GitHub 回
1421
+ # 两个示例仓、MDN 回 502/504 错误页。让位给 english_tech 的通用组合。
1422
+ - match: '(?i)\b(API|api)\b'
1423
+ unless: '(?i)(\bvs\b|\bversus\b|\bcompare\b|\bcomparison\b|\bdifference\b|对比|区别|差异)'
1327
1424
  - (?i)\b(example|examples|example\s+code)\b
1328
1425
  primary: github
1329
1426
  - desc: 网络梗/流行语/俚语/黑话
@@ -1429,7 +1526,12 @@ domains:
1429
1526
  parallel: true
1430
1527
  patterns:
1431
1528
  - (?i)(最新新闻|最新进展|今天发生|突发|breaking)
1432
- - (?i)\b(news|latest)\b
1529
+ # `latest` 单独出现不足以判实时新闻:软件/技术查询(latest version、
1530
+ # AI agent framework 2026 latest)会被误路由到这里,combo 只有新闻源。
1531
+ # 只保留明确的新闻搭配(latest on/about/in、latest news/headlines/
1532
+ # developments/events);版本语义的 latest 让位给技术/通用域(issue #18)。
1533
+ - (?i)\bnews\b
1534
+ - (?i)\blatest\s+(?:on|about|in|news|headlines?|developments?|events?)\b
1433
1535
  primary: byted
1434
1536
  - desc: 中文技术深挖(先于英文技术域/中文通用域;要求含中文)
1435
1537
  engines_combo:
@@ -1442,8 +1544,13 @@ domains:
1442
1544
  name: chinese_tech_deep
1443
1545
  parallel: true
1444
1546
  patterns:
1445
- - (?i)[一-鿿].*(编程|代码|算法|架构|框架|框架对比|性能优化|源码分析|实现原理|教程|指南|原理|底层|综述|深入|深挖|架构设计|实现|用法)
1446
- - (?i)[一-鿿].*(Rust|Python|Go|Java|JavaScript|TypeScript|React|Vue|Docker|K8s|Cursor|Copilot|Windsurf|AI编程|LLM|大模型|量子|神经网络|机器学习|深度学习)
1547
+ - match: '(?i)[一-鿿].*(编程|代码|算法|架构|框架|框架对比|性能优化|源码分析|实现原理|教程|指南|原理|底层|综述|深入|深挖|架构设计|实现|用法)'
1548
+ unless: '(?i)(统一社会信用代码|社会信用代码|信用代码|区划代码|行政代码|邮政编码)'
1549
+ # 拉丁语言名必须有字母数字边界:裸 alternation 会让 Go 命中 argo、让
1550
+ # Java 命中 JavaScript(顺序靠前会截断)。实测「重启后 django 自检」被
1551
+ # 「Go ⊂ argo」锁进本域。
1552
+ - (?i)[一-鿿].*(?<![a-zA-Z0-9])(Rust|Python|Golang|Go|Java|JavaScript|TypeScript|React|Vue|Docker|K8s|Cursor|Copilot|Windsurf|LLMs?)(?![a-zA-Z0-9])
1553
+ - (?i)[一-鿿].*(AI编程|大模型|量子|神经网络|机器学习|深度学习)
1447
1554
  primary: byted
1448
1555
  - desc: 英文技术通用(octen 主搜,低延迟;anysearch #2 作 hedged 救援;先于 catch-all)
1449
1556
  engines_combo:
@@ -1459,8 +1566,18 @@ domains:
1459
1566
  - (?i)\b(API|api)\b
1460
1567
  - (?i)\b(Rust|Python|JavaScript|TypeScript|React|Vue|Node|Docker|Kubernetes|asyncio)\b
1461
1568
  primary: octen
1462
- - desc: 公司注册/尽调(OpenCorporates 全球公司注册)
1569
+ - desc: 公司注册/尽调(GLEIF 法人主数据 + OpenCorporates 注册库;元宝补中文企业信息)
1570
+ # 元宝放第 1 位(2026-10-22):本域 patterns 含「股东/法人/注册资本/工商信息」,
1571
+ # 但 combo 原本只有国际法人库(gleif/opencorporates)+ 百科(baidu_baike),
1572
+ # 对中国**非上市**企业全废——实测「长亭科技 股东 持股比例」被路由到本域后,
1573
+ # opencorporates 熔断 + baidu_baike 只返回同名「XX科技有限公司」干扰,5 条无一命中
1574
+ # (2026-10-22 实测复现 2026-10-14 的老问题)。元宝实测能返回天眼查/企查查/
1575
+ # 爱企查的结构化股东表(长亭未来 100% 控股、阿里巴巴 17.7685%),是本域唯一能
1576
+ # 交付中文企业信息的源,放第 1 位确保进 budget=2 窗口(combo_budget 只按声明
1577
+ # 顺序取前 2,见 engine_policy.combo_budget)。
1463
1578
  engines_combo:
1579
+ - yuanbao
1580
+ - gleif
1464
1581
  - opencorporates
1465
1582
  - cninfo
1466
1583
  - baidu_baike
@@ -1469,15 +1586,26 @@ domains:
1469
1586
  parallel: false
1470
1587
  patterns:
1471
1588
  - (?i)(公司注册|注册号|统一社会信用代码|工商信息|股东|法人|注册资本|经营范围|尽调|工商登记|企业信息)
1589
+ - (?i)(\bLEI\b|法人识别码|法人标识|法人主数据|legal\s+entity\s+identifier)
1472
1590
  - (?i)\b(company\s*registration|incorporation|registered\s+number|business\s+registry|company\s+search|corporate\s+records)\b
1473
1591
  - (?i)(会社|法人|登記|기업|법인|등록)
1474
1592
  primary: opencorporates
1475
- - desc: 中文通用搜索(anysearch #3 作 bocha/byted 弱结果时的多语言救援)
1593
+ - desc: 中文通用搜索(octen #3 作 bocha/byted 弱结果时的多语言救援;yuanbao #2 为权威源对冲)
1594
+ # yuanbao 放第 2 位(2026-10-21):它不是「备选」而是**对冲位**。当月实测
1595
+ # bocha/octen 报 403(账户余额不足)、byted 报 10406(免费额度耗尽),三个
1596
+ # 主力同时被 is_hard_down 排除,combo 实际只剩 anysearch+zhihu_global;
1597
+ # 而同 6 个中文查询对拍 anysearch 中位 2664ms、日期覆盖 0%,yuanbao 中位
1598
+ # 699ms、日期覆盖 96%——放第 2 位意味着主力全挂时它直接顶上。
1599
+ #
1600
+ # 额度可耗尽(默认 2000 次/月;更高套餐改 engines/specs/yuanbao.yaml 的 limit),
1601
+ # 但耗尽后 is_hard_down 会自动把它从 combo 摘掉,组合回落到 anysearch/zhihu_global
1602
+ # 形态,不报错、不留半截状态。改档位后跑 scripts/sync_backends.py。
1476
1603
  engines_combo:
1477
1604
  - bocha
1605
+ - yuanbao
1478
1606
  - byted
1479
- - anysearch
1480
1607
  - octen
1608
+ - anysearch
1481
1609
  - zhihu_global
1482
1610
  - wechat_sogou
1483
1611
  - local_search
@@ -1576,7 +1704,11 @@ domains:
1576
1704
  name: social
1577
1705
  parallel: true
1578
1706
  patterns:
1579
- - (?i)(小红书|抖音|推特|twitter|reddit|b站|bilibili|微博|v2ex|评论|帖子|热门|trending|viral|public opinion|public sentiment|market sentiment|舆论|舆情|种草|拔草|用户体验|口碑)
1707
+ # `v2ex` 让位给 v2ex_search(2026-10-22):本域 patterns 含 v2ex,且
1708
+ # route_domains._social_domain_first 会把 social 提到命中列表首位——实测
1709
+ # 「v2ex 技术社区」落本域用 hackernews 搜(HackerNews 里确有一批 V2EX 讨论帖,
1710
+ # 但那是转载不是社区本身),而 v2ex_search 才是垂直域。从 patterns 移除 v2ex。
1711
+ - (?i)(小红书|抖音|推特|twitter|reddit|b站|bilibili|微博|评论|帖子|热门|trending|viral|public opinion|public sentiment|market sentiment|舆论|舆情|种草|拔草|用户体验|口碑)
1580
1712
  - (?i)(xhs|douyin|tweet|retweet|up主|博主|粉丝|点赞|转发|收藏)
1581
1713
  - (?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
1714
  primary: zhihu
@@ -1775,7 +1907,8 @@ engines:
1775
1907
  cost_tier: free
1776
1908
  qps: 5
1777
1909
  priority: 1
1778
- limit: 2000
1910
+ # 2026-10-21:默认额度按 1000/日 配置(账号实际可能更高,按默认口径走)
1911
+ limit: 1000
1779
1912
  period: day
1780
1913
  cost_per_call: 0.0
1781
1914
  cost_unit: free
@@ -1824,8 +1957,8 @@ engines:
1824
1957
  cost_tier: low
1825
1958
  qps: 5
1826
1959
  priority: 9
1827
- limit: 10000
1828
- period: month
1960
+ # 按量付费:不设次数上限(2026-10-22 用户更正)。额度由博查控制台后付,
1961
+ # argo 侧只在成本预算层可另设上限(argo budget set bocha ...)。
1829
1962
  cost_per_call: 0.0001
1830
1963
  cost_unit: credit
1831
1964
  coverage:
@@ -1851,8 +1984,7 @@ engines:
1851
1984
  cost_tier: low
1852
1985
  qps: 5
1853
1986
  priority: 9
1854
- limit: 10000
1855
- period: month
1987
+ # 按量付费:同 bocha,不设次数上限。
1856
1988
  cost_per_call: 0.001
1857
1989
  cost_unit: credit
1858
1990
  coverage:
@@ -1955,8 +2087,10 @@ engines:
1955
2087
  priority: 14
1956
2088
  limit: 1000
1957
2089
  period: month
1958
- cost_per_call: 0.0
1959
- cost_unit: free
2090
+ # 每月 $10 赠金按 1000 次折算 → $0.01/次。此前写 0 表示「赠金不计成本」,
2091
+ # 结果是 $10 预算永远不消耗、面板上的额度无法参与调度(2026-10-22 修正)。
2092
+ cost_per_call: 0.01
2093
+ cost_unit: usd
1960
2094
  coverage:
1961
2095
  - semantic
1962
2096
  - general
@@ -2968,7 +3102,7 @@ engines:
2968
3102
  priority: 8
2969
3103
  period: second
2970
3104
  cost_per_call: 0.0
2971
- cost_unit: credit
3105
+ cost_unit: usd
2972
3106
  coverage:
2973
3107
  - general
2974
3108
  - tech
@@ -3106,10 +3240,10 @@ engines:
3106
3240
  limit: 1000
3107
3241
  period: month
3108
3242
  cost_per_call: 0.001
3109
- cost_unit: credit
3243
+ cost_unit: usd
3110
3244
  coverage:
3111
3245
  - general
3112
- desc: Tavily AI 搜索 API(免费层 1000 次/月,按 credit 计费;与 exa 同为 api 档)
3246
+ desc: Tavily AI 搜索 API(免费层 1000 次/月,超出按美元计费;与 exa 同为 api 档)
3113
3247
  headers:
3114
3248
  Content-Type: application/json
3115
3249
  method: POST
@@ -3227,29 +3361,39 @@ engines:
3227
3361
  twitter:
3228
3362
  qps: 2
3229
3363
  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
3364
+ # timeout 声明(2026-10-21 改道后核查):主通道改为 scripts/x_search.py
3365
+ # (ego-browser,复用已登录的 X 会话),实测 3.1s 返回 3 条。
3366
+ # 内含浏览器首屏等待,故给 20s 上限;dispatch 仍按整轮预算截断,
3367
+ # 不会因为这一源拖垮整次搜索。
3368
+ timeout: 20
3236
3369
  label: Twitter/X
3237
3370
  enabled: true
3238
3371
  cost_tier: free
3372
+ # 覆盖标签决定路由:X 是社交/英文语料,不是通用网页源。
3373
+ # 此前缺省为 [general],社交意图选不到它、通用意图反而可能被它拖慢。
3374
+ coverage:
3375
+ - social
3376
+ - english
3377
+ canary_query: OpenAI
3239
3378
  cmd:
3240
3379
  - python3
3241
- - scripts/social_engines/twitter_engine.py
3380
+ - scripts/x_search.py
3242
3381
  search_args:
3243
- - search
3244
3382
  - '{query}'
3245
3383
  - -n
3246
3384
  - '{n}'
3385
+ - --json
3247
3386
  env: {}
3248
- # 后端依赖:脚本内部调 `tw` CLI。缺它时引擎只能返回空,
3249
- # 故为必需——声明后状态显示 missing_dep 并给出安装命令。
3387
+ # 通道变更(2026-10-21):旧脚本 twitter_engine.py 的三个通道当时全失效——
3388
+ # FxTwitter /2/search 上游已停用、nitter 公共实例实测零结果、tw CLI 未装,
3389
+ # 强制调用 6s 超时且结果为空。x_search.py 是仓库内既有的可用替代,
3390
+ # 且支持 X 原生布尔语法(from:/-is:retweet/lang:),比旧通道更准。
3391
+ # ego-browser 缺失只影响该源本身(显式调用报错),不阻断路由,故标 optional。
3250
3392
  requires:
3251
- - bin: tw
3252
- fix: 安装 twitter-cli(`pipx install twitter-cli` 或 npm i -g twitter-cli),完成后确保 `tw` 在 PATH 上
3393
+ - bin: ego-browser
3394
+ optional: true
3395
+ fix: 安装 ego-browser(Ego Lite)并登录 X;缺失时该源跳过,单条推文仍可走 `argo tweet`
3396
+ desc: X/Twitter 关键词搜索(ego-browser 通道,原生布尔语法 from:/-is:retweet/lang:)
3253
3397
  reddit:
3254
3398
  qps: 2
3255
3399
  type: cli
@@ -5135,10 +5279,25 @@ output:
5135
5279
  # 发布出去的默认值就从「关闭」变成「开启」了。
5136
5280
  semantic_evidence:
5137
5281
  enabled: false
5282
+ # 通道:jev(TypeSafe System One)| classify(classifier.dev)。
5283
+ # **纯配置驱动,不做「按键就绪自动选」**——那会让同一份代码在开发机与 CI
5284
+ # 上走不同分支(本机 env 文件里有没有 key 决定路径),既有测试会静默改道。
5285
+ # 未声明时默认 jev:classifier.dev 的匿名路径 2026-10-22 起回
5286
+ # 403 proxy_requires_payment(「Anonymous proxy traffic requires a funded
5287
+ # API key」),要 workspace key 才能用;JEV 是当前可用的那条。
5288
+ transport: jev
5289
+ # JEV 端点与模型。**独立于下方 endpoint 字段**——两个通道的请求体形状不同
5290
+ # (JEV 是 state+questions,classify 是 inputs+labels),共用一个 endpoint 会
5291
+ # 把 System One 的体发到 classifier.dev,拿回指向错误方向的 401。
5292
+ jev_endpoint: "https://api.typesafe.ai/v1/systemone"
5293
+ jev_model: "jev-latest"
5294
+ # classify 通道(classifier.dev)的端点;JEV 通道不读它。
5138
5295
  endpoint: "https://classifier.dev"
5139
- # 单次批量分类的超时(秒)。服务不可达时核验链路最多多等这么久,然后静默降级。
5296
+ # 单次请求的超时(秒)。服务不可达时核验链路最多多等这么久,然后静默降级。
5297
+ # JEV 通道下这是**每条正文**的超时(每条一个请求,并发 4)。
5140
5298
  timeout_s: 5
5141
- # fast:决策模型一次往返;smart:低置信度条目转推理模型复核(慢,配额小 10 倍)
5299
+ # fast:决策模型一次往返;smart:低置信度条目转推理模型复核(慢,配额小 10 倍)。
5300
+ # 仅 classify 通道认这个字段。
5142
5301
  tier: fast
5143
5302
 
5144
5303
  # ── 网络出口调度(issue #13,2026-09-14)────────────────────────────────