argo-search 1.0.1 → 2.9.7

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 (463) hide show
  1. package/LICENSE +201 -21
  2. package/README.en.md +822 -0
  3. package/README.es.md +864 -0
  4. package/README.ja.md +864 -0
  5. package/README.ko.md +864 -0
  6. package/README.md +867 -320
  7. package/SKILL.md +135 -0
  8. package/assets/readme/hero.svg +121 -0
  9. package/assets/readme/made-with-beautify.svg +10 -0
  10. package/assets/readme/proof-routes.svg +73 -0
  11. package/assets/readme/settings-keys.png +0 -0
  12. package/assets/readme/settings-tools.png +0 -0
  13. package/assets/readme/why-better.svg +104 -0
  14. package/assets/readme/workflow.svg +83 -0
  15. package/backends/domain_profiles.json +2308 -96
  16. package/backends/engine_registry.yaml +3314 -503
  17. package/backends/query_synonyms_cn.json +35 -0
  18. package/backends/quota_profiles.json +2409 -161
  19. package/backends/source_types_cn.json +83 -0
  20. package/backends/text_lexicon.json +44 -0
  21. package/bin/argo +703 -0
  22. package/bin/argo.js +71 -39
  23. package/config.yaml +4976 -363
  24. package/cordis.patch.yml +21 -0
  25. package/data/countries.json +40 -0
  26. package/data/lang_matrix/lang_capability.json +842 -0
  27. package/data/lang_matrix/matrix_2026-09-10.json +11921 -0
  28. package/data/regions_cn.json +1 -0
  29. package/docs/ADDING_NEW_ENGINE.md +184 -0
  30. package/docs/ARGO_INTRO.md +124 -0
  31. package/docs/DATA_SOURCE_GAPS.md +81 -0
  32. package/docs/DESIGN_LOCAL_DATA_FUSION.md +90 -0
  33. package/docs/ENGINE_CATALOG.md +564 -0
  34. package/docs/MCP_SETUP.md +106 -0
  35. package/docs/PLATFORM_PATHS.md +111 -0
  36. package/docs/RELEASE_NOTES_v2.8.0.md +71 -0
  37. package/docs/RELEASE_NOTES_v2.8.2.md +63 -0
  38. package/docs/RELEASE_NOTES_v2.8.3.md +55 -0
  39. package/docs/RELEASE_NOTES_v2.8.4.md +79 -0
  40. package/docs/RELEASE_NOTES_v2.8.5.md +102 -0
  41. package/docs/RELEASE_NOTES_v2.8.6.md +66 -0
  42. package/docs/RELEASE_NOTES_v2.8.7.md +65 -0
  43. package/docs/RELEASE_NOTES_v2.8.8.md +67 -0
  44. package/docs/RELEASE_NOTES_v2.8.9.md +67 -0
  45. package/docs/RELEASE_NOTES_v2.9.0.md +64 -0
  46. package/docs/SEARCH_ARCHIVE.md +115 -0
  47. package/docs/assets/architecture.svg +104 -0
  48. package/docs/assets/hero.svg +98 -0
  49. package/docs/engines/bangumi.md +27 -0
  50. package/docs/engines/biorxiv.md +27 -0
  51. package/docs/engines/clawhub.md +27 -0
  52. package/docs/engines/crt_sh.md +27 -0
  53. package/docs/engines/datacite.md +27 -0
  54. package/docs/engines/deps_dev.md +27 -0
  55. package/docs/engines/douban_movie.md +27 -0
  56. package/docs/engines/endoflife.md +27 -0
  57. package/docs/engines/flk_law.md +27 -0
  58. package/docs/engines/fxtwitter.md +27 -0
  59. package/docs/engines/google_news.md +27 -0
  60. package/docs/engines/gov_regulations.md +27 -0
  61. package/docs/engines/guqian.md +27 -0
  62. package/docs/engines/hackernews.md +27 -0
  63. package/docs/engines/iplant.md +27 -0
  64. package/docs/engines/keenable.md +27 -0
  65. package/docs/engines/met_museum.md +27 -0
  66. package/docs/engines/nasa_images.md +27 -0
  67. package/docs/engines/netease_music.md +27 -0
  68. package/docs/engines/npm.md +27 -0
  69. package/docs/engines/nvd.md +27 -0
  70. package/docs/engines/openreview.md +27 -0
  71. package/docs/engines/openstd.md +27 -0
  72. package/docs/engines/parallel_free.md +27 -0
  73. package/docs/engines/people_daily.md +27 -0
  74. package/docs/engines/realtime_index.md +27 -0
  75. package/docs/engines/sec_edgar.md +27 -0
  76. package/docs/engines/seltz.md +27 -0
  77. package/docs/engines/skillsmp.md +27 -0
  78. package/docs/engines/sspai.md +27 -0
  79. package/docs/engines/std_samr.md +27 -0
  80. package/docs/engines/train.md +27 -0
  81. package/docs/engines/un_comtrade.md +27 -0
  82. package/docs/engines/wikisource.md +27 -0
  83. package/docs/engines/zdic.md +27 -0
  84. package/docs/engines/zenodo.md +27 -0
  85. package/docs/engines/zhihu_hot_app.md +27 -0
  86. package/docs//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251argo.md +176 -0
  87. package/engines/README.md +10 -0
  88. package/engines/_template_cli.yaml +39 -0
  89. package/engines/_template_http.yaml +37 -0
  90. package/engines/plugins/_template_plugin.py +50 -0
  91. package/engines/specs/_cisa_kev.yaml +54 -0
  92. package/engines/specs/_osv.yaml +63 -0
  93. package/engines/specs/aljazeera.yaml +43 -0
  94. package/engines/specs/antara.yaml +43 -0
  95. package/engines/specs/artic.yaml +20 -0
  96. package/engines/specs/aviation_weather.yaml +39 -0
  97. package/engines/specs/bangumi.yaml +21 -0
  98. package/engines/specs/biorxiv.yaml +24 -0
  99. package/engines/specs/carbon_intensity.yaml +32 -0
  100. package/engines/specs/cinii.yaml +44 -0
  101. package/engines/specs/clawhub.yaml +49 -0
  102. package/engines/specs/cleveland.yaml +19 -0
  103. package/engines/specs/cn_ai_news.yaml +43 -0
  104. package/engines/specs/core.yaml +35 -0
  105. package/engines/specs/crt_sh.yaml +38 -0
  106. package/engines/specs/ct24.yaml +43 -0
  107. package/engines/specs/datacite.yaml +27 -0
  108. package/engines/specs/datagov_uk.yaml +41 -0
  109. package/engines/specs/ddgs_images.yaml +45 -0
  110. package/engines/specs/deepseek_search.yaml +74 -0
  111. package/engines/specs/deezer.yaml +20 -0
  112. package/engines/specs/deps_dev.yaml +21 -0
  113. package/engines/specs/digup.yaml +36 -0
  114. package/engines/specs/doi.yaml +39 -0
  115. package/engines/specs/douban_movie.yaml +22 -0
  116. package/engines/specs/dw_news.yaml +47 -0
  117. package/engines/specs/egov_law.yaml +21 -0
  118. package/engines/specs/elpais.yaml +43 -0
  119. package/engines/specs/endoflife.yaml +21 -0
  120. package/engines/specs/energy_charts.yaml +21 -0
  121. package/engines/specs/factcheck_org.yaml +52 -0
  122. package/engines/specs/faz.yaml +43 -0
  123. package/engines/specs/federal_register.yaml +57 -0
  124. package/engines/specs/firecrawl.yaml +53 -0
  125. package/engines/specs/flk_law.yaml +24 -0
  126. package/engines/specs/folha.yaml +43 -0
  127. package/engines/specs/france24.yaml +44 -0
  128. package/engines/specs/full_fact.yaml +47 -0
  129. package/engines/specs/fxtwitter.yaml +31 -0
  130. package/engines/specs/gbfs_nyc.yaml +32 -0
  131. package/engines/specs/gdacs.yaml +21 -0
  132. package/engines/specs/gdelt.yaml +64 -0
  133. package/engines/specs/google_news.yaml +22 -0
  134. package/engines/specs/gov_regulations.yaml +38 -0
  135. package/engines/specs/guardian_rss.yaml +59 -0
  136. package/engines/specs/hurriyet.yaml +43 -0
  137. package/engines/specs/iplant.yaml +25 -0
  138. package/engines/specs/jikan.yaml +24 -0
  139. package/engines/specs/jolpica.yaml +20 -0
  140. package/engines/specs/k10plus.yaml +20 -0
  141. package/engines/specs/keenable.yaml +44 -0
  142. package/engines/specs/lefigaro.yaml +43 -0
  143. package/engines/specs/listenbrainz.yaml +19 -0
  144. package/engines/specs/matichon.yaml +43 -0
  145. package/engines/specs/met_museum.yaml +21 -0
  146. package/engines/specs/nasa_images.yaml +45 -0
  147. package/engines/specs/netease_music.yaml +38 -0
  148. package/engines/specs/nhk.yaml +43 -0
  149. package/engines/specs/nhtsa_vpic.yaml +20 -0
  150. package/engines/specs/noaa_swpc.yaml +20 -0
  151. package/engines/specs/nvd.yaml +38 -0
  152. package/engines/specs/obis.yaml +20 -0
  153. package/engines/specs/opencitations.yaml +52 -0
  154. package/engines/specs/openf1.yaml +21 -0
  155. package/engines/specs/openfoodfacts.yaml +45 -0
  156. package/engines/specs/openligadb.yaml +20 -0
  157. package/engines/specs/openreview.yaml +37 -0
  158. package/engines/specs/openstd.yaml +21 -0
  159. package/engines/specs/people_daily.yaml +22 -0
  160. package/engines/specs/realtime_index.yaml +34 -0
  161. package/engines/specs/ror.yaml +20 -0
  162. package/engines/specs/satnogs.yaml +20 -0
  163. package/engines/specs/sec_edgar.yaml +46 -0
  164. package/engines/specs/skillsmp.yaml +50 -0
  165. package/engines/specs/sogou_weixin_browser.yaml +30 -0
  166. package/engines/specs/soilgrids.yaml +25 -0
  167. package/engines/specs/sspai.yaml +36 -0
  168. package/engines/specs/stackexchange.yaml +46 -0
  169. package/engines/specs/std_samr.yaml +21 -0
  170. package/engines/specs/tass.yaml +43 -0
  171. package/engines/specs/tle_mirror.yaml +21 -0
  172. package/engines/specs/train.yaml +37 -0
  173. package/engines/specs/tvmaze.yaml +20 -0
  174. package/engines/specs/twitter_syndication.yaml +31 -0
  175. package/engines/specs/un_comtrade.yaml +23 -0
  176. package/engines/specs/unpaywall.yaml +54 -0
  177. package/engines/specs/vnpress.yaml +43 -0
  178. package/engines/specs/weather.yaml +32 -0
  179. package/engines/specs/who_don.yaml +21 -0
  180. package/engines/specs/who_gho.yaml +20 -0
  181. package/engines/specs/wikimedia_commons.yaml +34 -0
  182. package/engines/specs/wikisource.yaml +22 -0
  183. package/engines/specs/worms.yaml +19 -0
  184. package/engines/specs/x_trending.yaml +34 -0
  185. package/engines/specs/yna.yaml +43 -0
  186. package/engines/specs/ynet.yaml +43 -0
  187. package/engines/specs/zbmath.yaml +40 -0
  188. package/engines/specs/zdic.yaml +22 -0
  189. package/engines/specs/zenodo.yaml +27 -0
  190. package/engines/specs/zhihu_hot_app.yaml +35 -0
  191. package/mcp/clients.yaml +74 -0
  192. package/package.json +51 -12
  193. package/packages/dsh-plugin/README.md +134 -0
  194. package/packages/dsh-plugin/cordis.patch.yml +48 -0
  195. package/packages/dsh-plugin/dsh/client.js +1244 -0
  196. package/packages/dsh-plugin/dsh/index.js +2290 -0
  197. package/packages/dsh-plugin/dsh/native-tools.mjs +743 -0
  198. package/packages/dsh-plugin/package.json +38 -0
  199. package/packages/dsh-plugin/test/client.test.js +232 -0
  200. package/packages/dsh-plugin/test/config.test.js +30 -0
  201. package/packages/dsh-plugin/test/index.test.js +1338 -0
  202. package/references/query-templates.md +96 -0
  203. package/references/query-templates.yaml +118 -0
  204. package/scripts/ab_eval.py +219 -0
  205. package/scripts/ab_eval_p0p1.py +266 -0
  206. package/scripts/adaptive.py +271 -70
  207. package/scripts/answer.py +154 -0
  208. package/scripts/archive_run.py +591 -0
  209. package/scripts/argo_engine_registry.py +172 -0
  210. package/scripts/argo_paths.py +728 -0
  211. package/scripts/article.py +136 -0
  212. package/scripts/arxiv_source.py +201 -0
  213. package/scripts/badcase_ledger.py +252 -0
  214. package/scripts/batch_probe.py +241 -0
  215. package/scripts/benchmark.py +19 -0
  216. package/scripts/bounded_run.py +144 -0
  217. package/scripts/browser_auth.py +323 -0
  218. package/scripts/burstiness_detector.py +147 -0
  219. package/scripts/cache.py +1078 -67
  220. package/scripts/cache_guard.py +271 -0
  221. package/scripts/cache_key_vdom.py +56 -0
  222. package/scripts/cache_similarity.py +170 -0
  223. package/scripts/caliber_isolation.py +195 -0
  224. package/scripts/calibrate_lowquality.py +210 -0
  225. package/scripts/candidate_envelope.py +366 -0
  226. package/scripts/chrome_cdp.py +871 -0
  227. package/scripts/circuit_breaker.py +389 -0
  228. package/scripts/citations.py +334 -0
  229. package/scripts/cite_cli.py +59 -0
  230. package/scripts/cjk_tokens.py +95 -0
  231. package/scripts/clarify.py +47 -24
  232. package/scripts/cli_io.py +240 -0
  233. package/scripts/config.py +683 -45
  234. package/scripts/config_cache.py +402 -0
  235. package/scripts/conn_pool.py +220 -0
  236. package/scripts/content_security.py +685 -0
  237. package/scripts/content_signals.py +730 -0
  238. package/scripts/crawl.py +74 -35
  239. package/scripts/daemon.py +866 -0
  240. package/scripts/digup_bridge.py +214 -0
  241. package/scripts/engine_admission.py +366 -0
  242. package/scripts/engine_dispatch.py +1019 -0
  243. package/scripts/engine_env.py +534 -0
  244. package/scripts/engine_failure.py +411 -0
  245. package/scripts/engine_families.py +732 -0
  246. package/scripts/engine_policy.py +218 -0
  247. package/scripts/engine_requires.py +190 -0
  248. package/scripts/engine_status.py +322 -0
  249. package/scripts/engine_validate.py +638 -0
  250. package/scripts/engines.py +778 -294
  251. package/scripts/engines_base.py +1521 -0
  252. package/scripts/engines_builders.py +298 -0
  253. package/scripts/engines_builders_batch10.py +159 -0
  254. package/scripts/engines_builders_batch11.py +174 -0
  255. package/scripts/engines_builders_batch12.py +103 -0
  256. package/scripts/engines_builders_batch13.py +340 -0
  257. package/scripts/engines_builders_batch9.py +1468 -0
  258. package/scripts/engines_builders_cn.py +2283 -0
  259. package/scripts/engines_builders_data.py +2923 -0
  260. package/scripts/engines_builders_data_macro.py +775 -0
  261. package/scripts/engines_builders_feeds.py +255 -0
  262. package/scripts/engines_builders_intl.py +1239 -0
  263. package/scripts/engines_builders_search.py +440 -0
  264. package/scripts/engines_builders_tech.py +1360 -0
  265. package/scripts/evidence.py +588 -162
  266. package/scripts/evidence_loop.py +592 -0
  267. package/scripts/evidence_tier.py +298 -0
  268. package/scripts/except_sets.py +25 -0
  269. package/scripts/extract.py +55 -16
  270. package/scripts/fact_align.py +207 -0
  271. package/scripts/fact_crosscheck.py +230 -0
  272. package/scripts/fetch.py +25 -12
  273. package/scripts/fetch_browser.py +87 -0
  274. package/scripts/fetch_jsrun.py +122 -0
  275. package/scripts/fetch_quality.py +225 -0
  276. package/scripts/fetch_render_tinyfish.py +117 -0
  277. package/scripts/fetch_v3.py +1779 -0
  278. package/scripts/focus_extract.py +350 -0
  279. package/scripts/fulltext_store.py +169 -0
  280. package/scripts/fxtwitter_api.py +325 -0
  281. package/scripts/gen_engine_catalog.py +364 -0
  282. package/scripts/gen_native_tools.py +91 -0
  283. package/scripts/gen_routing_snapshot.py +184 -0
  284. package/scripts/health_check.py +140 -402
  285. package/scripts/health_probe.py +23 -8
  286. package/scripts/hot_state.py +134 -0
  287. package/scripts/http_client.py +1053 -0
  288. package/scripts/image_ops.py +430 -0
  289. package/scripts/image_vision/vision_probe +0 -0
  290. package/scripts/image_vision/vision_probe.swift +126 -0
  291. package/scripts/install.ps1 +148 -0
  292. package/scripts/install.sh +206 -0
  293. package/scripts/job.py +1186 -0
  294. package/scripts/jump_resolver.py +235 -0
  295. package/scripts/lang_capability.py +150 -0
  296. package/scripts/lang_detect.py +289 -0
  297. package/scripts/lang_matrix_probe.py +329 -0
  298. package/scripts/lang_pref.py +311 -0
  299. package/scripts/link_source.py +340 -0
  300. package/scripts/local_engines.py +321 -0
  301. package/scripts/local_image.py +970 -0
  302. package/scripts/local_seek.py +366 -0
  303. package/scripts/macro_countries.py +82 -0
  304. package/scripts/matrix_search_eval.py +1105 -0
  305. package/scripts/mcp_diag.py +8 -3
  306. package/scripts/mcp_handlers.py +1074 -0
  307. package/scripts/mcp_handlers_surface.py +157 -0
  308. package/scripts/mcp_launch.sh +122 -0
  309. package/scripts/mcp_server.py +118 -417
  310. package/scripts/mcp_setup.py +407 -0
  311. package/scripts/mcp_tools.py +330 -0
  312. package/scripts/mcp_transport.py +191 -0
  313. package/scripts/min_version_scan.py +335 -0
  314. package/scripts/net_proxy.py +258 -0
  315. package/scripts/network_aware.py +152 -0
  316. package/scripts/paper.py +274 -0
  317. package/scripts/pdf_extract.py +518 -0
  318. package/scripts/phrase_filter.py +66 -0
  319. package/scripts/plan.py +422 -0
  320. package/scripts/postprocess_signals.py +150 -0
  321. package/scripts/pre-commit +48 -0
  322. package/scripts/query_enhance.py +157 -0
  323. package/scripts/query_operators.py +196 -0
  324. package/scripts/query_rewriter.py +116 -7
  325. package/scripts/query_signals.py +300 -0
  326. package/scripts/query_templates.py +167 -0
  327. package/scripts/query_understanding.py +411 -0
  328. package/scripts/query_variants.py +298 -0
  329. package/scripts/quota.py +488 -76
  330. package/scripts/rank_signals.py +775 -0
  331. package/scripts/ranking_eval.py +319 -0
  332. package/scripts/readability_extract.py +433 -0
  333. package/scripts/recompute.py +415 -0
  334. package/scripts/recovery.py +616 -0
  335. package/scripts/recovery_l0.py +160 -0
  336. package/scripts/redskill/redskill_engine.py +332 -0
  337. package/scripts/regression_p0p1.py +318 -0
  338. package/scripts/replay_eval.py +640 -0
  339. package/scripts/rerank_tfidf.py +225 -0
  340. package/scripts/research.py +591 -403
  341. package/scripts/research_cli.py +361 -0
  342. package/scripts/research_dossier.py +492 -0
  343. package/scripts/research_expand.py +146 -0
  344. package/scripts/research_gates.py +272 -0
  345. package/scripts/research_report.py +209 -0
  346. package/scripts/research_strategy.py +37 -0
  347. package/scripts/research_work_packages.py +195 -0
  348. package/scripts/result_lang.py +311 -0
  349. package/scripts/robots_guard.py +259 -0
  350. package/scripts/route.py +921 -254
  351. package/scripts/route_bangs.py +40 -0
  352. package/scripts/route_cache.py +225 -0
  353. package/scripts/route_combo.py +910 -0
  354. package/scripts/route_domains.py +328 -0
  355. package/scripts/route_lang.py +605 -0
  356. package/scripts/route_log.py +63 -0
  357. package/scripts/route_policy.py +250 -0
  358. package/scripts/rrf_classic.py +66 -0
  359. package/scripts/screenshot.py +73 -0
  360. package/scripts/search.py +897 -405
  361. package/scripts/search_attribution.py +88 -0
  362. package/scripts/search_benchmark.py +407 -0
  363. package/scripts/search_cli.py +627 -0
  364. package/scripts/search_entry.py +389 -0
  365. package/scripts/search_output.py +606 -0
  366. package/scripts/search_pipeline.py +1077 -0
  367. package/scripts/search_rank.py +991 -0
  368. package/scripts/search_types.py +27 -12
  369. package/scripts/seek_locator.py +68 -0
  370. package/scripts/semantic_evidence.py +215 -0
  371. package/scripts/serp_guard.py +228 -0
  372. package/scripts/serp_kill_log.py +51 -0
  373. package/scripts/single_flight.py +120 -0
  374. package/scripts/social_engines/__init__.py +10 -0
  375. package/scripts/social_engines/bilibili_engine.py +131 -0
  376. package/scripts/social_engines/hackernews_engine.py +113 -0
  377. package/scripts/social_engines/reddit_engine.py +172 -0
  378. package/scripts/social_engines/twitter_engine.py +397 -0
  379. package/scripts/social_engines/v2ex_engine.py +101 -0
  380. package/scripts/social_engines/weibo_engine.py +128 -0
  381. package/scripts/social_engines/xiaohongshu_engine.py +137 -0
  382. package/scripts/social_engines/zhihu_engine.py +139 -0
  383. package/scripts/social_research.py +201 -0
  384. package/scripts/sogou_weixin_browser.py +318 -0
  385. package/scripts/source_ledger.py +249 -0
  386. package/scripts/stage_timing.py +58 -0
  387. package/scripts/stats_cli.py +95 -0
  388. package/scripts/straggler_policy.py +60 -0
  389. package/scripts/stylometry_detector.py +231 -0
  390. package/scripts/sync_backends.py +353 -0
  391. package/scripts/sync_installs.py +29 -0
  392. package/scripts/template_cli.py +127 -0
  393. package/scripts/text_lexicon.py +72 -0
  394. package/scripts/tfidf_router.py +109 -37
  395. package/scripts/time_utils.py +233 -0
  396. package/scripts/topic_research_profiles.py +643 -0
  397. package/scripts/train.py +737 -0
  398. package/scripts/tweet.py +596 -0
  399. package/scripts/url_canon.py +217 -0
  400. package/scripts/url_optimize.py +56 -0
  401. package/scripts/url_safety.py +236 -0
  402. package/scripts/usage_log.py +116 -0
  403. package/scripts/usage_log_clean.py +113 -0
  404. package/scripts/v2ex_nodes.py +311 -0
  405. package/scripts/variant_recall.py +188 -0
  406. package/scripts/watch.py +205 -0
  407. package/scripts/wechat_article.py +258 -0
  408. package/scripts/wide_research.py +402 -0
  409. package/scripts/wx.py +349 -0
  410. package/scripts/x_article_fetch.py +141 -0
  411. package/scripts/x_search.py +234 -0
  412. package/scripts/x_trending.py +189 -0
  413. package/scripts/yaml_load.py +67 -0
  414. package/sub-skills/ego-search/SKILL.md +253 -0
  415. package/sub-skills/ego-search/references/browser-runtime.md +43 -0
  416. package/sub-skills/ego-search/references/install.md +67 -0
  417. package/sub-skills/ego-search/references/original-ego-upgrade.md +51 -0
  418. package/sub-skills/ego-search/scripts/ego_search.py +800 -0
  419. package/sub-skills/ego-search/scripts/merge.py +226 -0
  420. package/sub-skills/ego-search/scripts/quality.py +64 -0
  421. package/sub-skills/ego-search/scripts/runtime.py +172 -0
  422. package/sub-skills/ego-search/scripts/safety.py +109 -0
  423. package/sub-skills/ego-search/scripts/serp_spec.py +109 -0
  424. package/sub-skills/ego-search/scripts/webbridge_adapter.py +374 -0
  425. package/sub-skills/ego-search/tests/test_query_normalize.py +68 -0
  426. package/sub-skills/js-run/SKILL.md +67 -0
  427. package/sub-skills/js-run/scripts/jsrun.py +112 -0
  428. package/sub-skills/js-run/scripts/shim.js +188 -0
  429. package/sub-skills/js-run/tests/fixtures/challenge_like.js +27 -0
  430. package/sub-skills/js-run/tests/test_jsrun.py +165 -0
  431. package/sub-skills/local-search/SKILL.md +50 -53
  432. package/sub-skills/local-search/bm25.py +162 -0
  433. package/sub-skills/local-search/config.yaml +152 -55
  434. package/sub-skills/local-search/engine_registry.py +91 -26
  435. package/sub-skills/local-search/{health_check.py → local_health_check.py} +140 -10
  436. package/sub-skills/local-search/local_search_adapter.py +13 -2
  437. package/sub-skills/local-search/parse_maps.yaml +40 -42
  438. package/sub-skills/local-search/search_v3.py +1182 -65
  439. package/sub-skills/local-search/smart_router.py +47 -7
  440. package/sub-skills/local-seek/SKILL.md +110 -0
  441. package/sub-skills/local-seek/config/domains.yaml +20 -0
  442. package/sub-skills/local-seek/references/auto-behaviors.md +24 -0
  443. package/sub-skills/local-seek/references/fd-mdfind-recipes.md +62 -0
  444. package/sub-skills/local-seek/references/git-integration.md +54 -0
  445. package/sub-skills/local-seek/references/remote-handoff.md +46 -0
  446. package/sub-skills/local-seek/references/rg-recipes.md +96 -0
  447. package/sub-skills/local-seek/references/strategies.md +52 -0
  448. package/sub-skills/local-seek/references/structural-search.md +59 -0
  449. package/sub-skills/local-seek/scripts/eval_rank.py +216 -0
  450. package/sub-skills/local-seek/scripts/eval_seek.py +224 -0
  451. package/sub-skills/local-seek/scripts/seek.py +1465 -0
  452. package/sub-skills/local-seek/scripts/seek_frecency.py +126 -0
  453. package/sub-skills/local-seek/scripts/seek_fts.py +430 -0
  454. package/sub-skills/local-seek/scripts/seek_rank.py +193 -0
  455. package/sub-skills/local-seek/tests/test_content_rank.py +222 -0
  456. package/sub-skills/local-seek/tests/test_determinism_20261006.py +145 -0
  457. package/sub-skills/local-seek/tests/test_noise_tier.py +101 -0
  458. package/sub-skills/local-seek/tests/test_pcre2_probe.py +136 -0
  459. package/sub-skills/local-seek/tests/test_rank_pinyin.py +77 -0
  460. package/sub-skills/local-seek/tests/test_regression_20261003.py +169 -0
  461. package/sub-skills/local-seek/tests/test_regression_20261006.py +146 -0
  462. package/sub-skills/local-seek/tests/test_seek_degradation.py +111 -0
  463. package/sub-skills/local-seek/tests/test_seek_fts.py +313 -0
@@ -0,0 +1,57 @@
1
+ # Federal Register — 美国联邦公报(免 key、免注册)
2
+ #
3
+ # 补的盲区:**美国联邦法规原文与提案**。已有的 courtlistener 覆盖法院判例、
4
+ # gov_regulations/flk_law 覆盖中国法规、eurlex 类覆盖欧盟,而美国行政法规
5
+ # (rules / proposed rules / notices)此前没有一手源——这类问题搜索引擎只能
6
+ # 给新闻与二手解读,而法规原文本身就是权威证据。
7
+ #
8
+ # 端点语义(实测 2026-09-16):
9
+ # /api/v1/documents.json?conditions[term]=<q> → 全文检索,返回 count + results
10
+ # 实测 "artificial intelligence" → 1565 条
11
+ # 免 key;官方建议加 User-Agent 标识(argo 已统一带)。
12
+ #
13
+ # 验证:
14
+ # python3 scripts/engine_validate.py --engine federal_register --stage health --admit
15
+ # python3 scripts/search.py "artificial intelligence" --engine federal_register --json
16
+
17
+ engine_id: federal_register
18
+ type: http
19
+ enabled: true
20
+ cost_tier: free
21
+ label: Federal Register 联邦公报
22
+ family: legal
23
+ priority: 46
24
+ qps: 2
25
+ period: second
26
+ cost_per_call: 0.0
27
+ cost_unit: free
28
+ method: GET
29
+ url: https://www.federalregister.gov/api/v1/documents.json
30
+ query_param: "conditions[term]"
31
+ extra_params:
32
+ per_page: "10"
33
+ # 刻意**不声明 fields[]**:该 API 的字段裁剪只认「重复的 fields[] 参数」
34
+ # (fields[]=title&fields[]=html_url),而 extra_params 会把值 str() 后当成
35
+ # 单个参数发送(列表会变成 "['title', ...]" 触发 400;逗号形式亦不认)。
36
+ # 不裁剪的代价是响应多带 excerpts 字段,但结果正确——宁可多几 KB,也不要
37
+ # 「拿到 10 条却因 html_url 被裁掉而静默变 0 条」。
38
+ timeout: 15
39
+ format: json
40
+ canary_query: "artificial intelligence"
41
+ coverage:
42
+ - legal
43
+ - regulation
44
+ - us
45
+ desc: "美国联邦公报全文检索(行政法规/提案/通告原文,免 key;一手法规源)"
46
+ output_map:
47
+ items: results
48
+ item_title: title
49
+ item_summary: abstract
50
+ item_url: html_url
51
+ item_published_at: publication_date
52
+ recommended: false
53
+ latency_ms: 1200
54
+
55
+ quality_queries:
56
+ - query: "artificial intelligence"
57
+ - query: "data privacy"
@@ -0,0 +1,53 @@
1
+ # Firecrawl 搜索引擎(官方云 API,keyless 免配置优先启用)
2
+ # 文档: https://docs.firecrawl.dev/api-reference/endpoint/search
3
+ # 额度: 免费层 1000 credits/月(按结果数计费,约 1 credit/条);Billing Period 月重置。
4
+ # 匿名(不带 Authorization)即走免费层;配置 FIRECRAWL_API_KEY(可选)后
5
+ # 计入注册账号额度并支持更高稳定性
6
+ # 特点: search+scrape 一体化、JS 渲染、categories(github/research/pdf)、tbs 时间窗、
7
+ # site:/inurl:/filetype: 高级算符
8
+ # 定位: T2 补充引擎 —— 免费池可路由(daily_support),priority 低 + combo 预算截断,
9
+ # 日常少用保护共享免费层配额;deep/research 全量可用
10
+ # 验证:
11
+ # python3 scripts/engine_validate.py --engine firecrawl --stage all --admit
12
+ # python3 scripts/search.py "climate change" --engine firecrawl --json
13
+
14
+ engine_id: firecrawl
15
+ type: http
16
+ enabled: true
17
+ cost_tier: free
18
+ # 分层:daily_support —— 日常 combo 可参与(failover 补位),budget 截断优先命中,
19
+ # 不至于把 1000 credits/月 免费层当主力烧掉(engine_policy.get_engine_tier 读 spec.tier)
20
+ tier: daily_support
21
+ method: POST
22
+ url: https://api.firecrawl.dev/v2/search
23
+ timeout: 20
24
+ canary_query: "climate change"
25
+ desc: "Firecrawl 云搜索(search+全文markdown,JS渲染/学术/PDF垂直,keyless 免费层 1000 credits/月)"
26
+ label: Firecrawl
27
+ family: web_general
28
+ # 预算感知:priority 低 + daily_support,日常排 combo 后排,配额留给 failover 补位
29
+ priority: 50
30
+ qps: 1
31
+ period: month
32
+ limit: 1000
33
+ cost_per_call: 0.001
34
+ cost_unit: credit
35
+
36
+ # 可选密钥(OPTIONAL_ENV_ENGINES):未配置时不发送 Authorization(keyless 直连免费层)
37
+ headers:
38
+ Authorization: Bearer {FIRECRAWL_API_KEY}
39
+ Content-Type: application/json
40
+
41
+ # POST body;{query} 查询词,{n} 结果数
42
+ # 注意:argo HTTP builder 仅支持标量值(嵌套数组/对象会失效),故只用 query/limit;
43
+ # description 字段已含 markdown 全文(API 默认 scrapeOptions.formats=[markdown])
44
+ body:
45
+ query: "{query}"
46
+ limit: "{n}"
47
+
48
+ # firecrawl 返回 {success, data:{web:[{title,description,url,markdown,...}]}}
49
+ output_map:
50
+ items: data.web
51
+ item_title: title
52
+ item_url: url
53
+ item_summary: description
@@ -0,0 +1,24 @@
1
+ # 国家法律法规数据库 — 法律/行政法规/司法解释/地方性法规(POST JSON,免认证)
2
+ # legal 域的权威法条文本源:此前只有裁判文书(wenshu)+国务院政策(gov_policy),
3
+ # 缺法条本身。接口为 flk SPA 前端逆向(searchRange 1=标题 2=正文,searchType
4
+ # 1=精确 2=模糊;orderByParam 是对象 {order,sort},扁平 body 会 500)。
5
+ # 高亮 <em> 标签剥离;sxx 时效性映射:1 已废止 / 2 已修改 / 3 有效 / 4 尚未生效。
6
+ # 无验证码无签名;失败诚实空,不做绕过。
7
+ # 验证:
8
+ # python3 scripts/engine_validate.py --engine flk_law --stage all --admit --write-doc
9
+
10
+ engine_id: flk_law
11
+ type: flk_law
12
+ enabled: true
13
+ cost_tier: free
14
+ timeout: 25
15
+ canary_query: "行政处罚"
16
+ desc: "国家法律法规数据库(法律/行政法规/司法解释全文,权威法条源,免认证)"
17
+ coverage: [legal, law, chinese, gov]
18
+ recommended: false
19
+ latency_ms: 2000
20
+
21
+ quality_queries:
22
+ - query: "行政处罚"
23
+ - query: "个人信息保护"
24
+ - query: "劳动法"
@@ -0,0 +1,43 @@
1
+ # 巴西页报 RSS — Folha de S.Paulo,巴西最大日报
2
+ #
3
+ # 补的盲区:**pt 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),pt 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**100 条**,摘要中位 279 字、最长 514 字。
8
+ #
9
+ # 形态:feed_mode=hot(实时流语义,同 guardian_rss)。归 world_news 族——
10
+ # 与 hot_trending(热榜)分族,避免同族 max_per_family=2 把本地源互相挤掉。
11
+ # 语言由 langs 声明,路由按查询语言选源(见 route._lang_aware_combo_order)。
12
+ #
13
+ # 验证:
14
+ # python3 scripts/engine_validate.py --engine folha --stage all --admit
15
+ # python3 scripts/search.py "notícias de hoje" --engine folha --json
16
+
17
+ engine_id: folha
18
+ type: rss_feed
19
+ enabled: true
20
+ cost_tier: free
21
+ label: 巴西页报 RSS
22
+ family: world_news
23
+ feed_mode: hot
24
+ relevance_check: false
25
+ priority: 44
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://feeds.folha.uol.com.br/poder/rss091.xml
32
+ langs:
33
+ - pt
34
+ canary_query: "notícias de hoje"
35
+ coverage:
36
+ - news
37
+ - brazil
38
+ desc: "巴西页报(Folha de S.Paulo,巴西最大日报,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "notícias de hoje"
43
+ - query: "política Brasil"
@@ -0,0 +1,44 @@
1
+ # France 24 RSS — 法国 24 英语版(免 key、免注册)
2
+ #
3
+ # 补的盲区:**法语区视角的国际新闻**。接入前 argo 对法语世界没有直采通道,
4
+ # 欧洲视角只能靠英文源转述。
5
+ #
6
+ # 实测(2026-09-17):24 条,摘要中位 337 字、最长 610——在候选池里排第二,
7
+ # 仅次于卫报(979 字),高于 NYT(147)/ BBC(106)。条目量偏少(24),
8
+ # 所以它是互补位而不是主位。
9
+ #
10
+ # 形态:feed_mode=hot(热榜语义,同 guardian_rss)。归 hot_trending 族,
11
+ # 不进话题检索域。注意同族在组合里有 max_per_family=2 上限,它与
12
+ # guardian_rss 同族,两者在同一 combo 里至多同时出现两个。
13
+ #
14
+ # 验证:
15
+ # python3 scripts/engine_validate.py --engine france24 --stage all --admit
16
+ # python3 scripts/search.py "今日国际要闻" --engine france24 --json
17
+
18
+ engine_id: france24
19
+ type: rss_feed
20
+ enabled: true
21
+ cost_tier: free
22
+ label: France 24 RSS
23
+ family: hot_trending
24
+ feed_mode: hot
25
+ relevance_check: false
26
+ priority: 30
27
+ qps: 1
28
+ period: second
29
+ cost_per_call: 0.0
30
+ cost_unit: free
31
+ timeout: 12
32
+ feed_url: https://www.france24.com/en/rss
33
+ langs:
34
+ - en
35
+ canary_query: "今日国际要闻"
36
+ coverage:
37
+ - news
38
+ - world
39
+ desc: "France 24 英语版 RSS(法语区一手的国际新闻实时流,免 key)"
40
+ recommended: false
41
+
42
+ quality_queries:
43
+ - query: "今日国际要闻"
44
+ - query: "world news today"
@@ -0,0 +1,47 @@
1
+ # Full Fact RSS — 英国事实核查(免 key、免注册)
2
+ #
3
+ # 补的盲区:与 factcheck_org 同族(verification),但**口径不同**——
4
+ # Full Fact 核查英国政治与公共数据,FactCheck.org 覆盖美国议题。
5
+ # 两源并存不是重复:同一族内保持不同法域口径,才有交叉验证的意义。
6
+ #
7
+ # 实测(2026-09-17):10 条,摘要中位 140 字、最长 204。密度明显低于
8
+ # FactCheck.org(482 字),条目数同样只有 10——所以它是 factcheck_org 的
9
+ # 补位而非替代。
10
+ #
11
+ # 召回边界:RSS 固定窗口(最近 10 条)+ 本地关键词过滤,命中面窄。
12
+ #
13
+ # 验证:
14
+ # python3 scripts/engine_validate.py --engine full_fact --stage all --admit
15
+ # python3 scripts/search.py "election" --engine full_fact --json
16
+
17
+ engine_id: full_fact
18
+ type: rss_feed
19
+ enabled: true
20
+ cost_tier: free
21
+ label: Full Fact
22
+ family: verification
23
+ feed_mode: filter
24
+ priority: 34
25
+ qps: 1
26
+ period: second
27
+ cost_per_call: 0.0
28
+ cost_unit: free
29
+ timeout: 12
30
+ feed_url: https://fullfact.org/feed/
31
+ langs:
32
+ - en
33
+ canary_query: "shared"
34
+ coverage:
35
+ - news
36
+ - verification
37
+ desc: "Full Fact(英国事实核查:与 FactCheck.org 分属英美两法域口径)"
38
+ recommended: false
39
+
40
+ # ⚠️ 五源中命中面最窄的一个:种子仅 10 条且逐日轮换,加之核查文本身是
41
+ # 话题型内容,高频实词极少。实测 2026-09-17 当日 shared 4/10、posts/claims/
42
+ # online/viral 各 3/10——canary 只能取到 4/10 这一档,明显低于其余四源。
43
+ # 若 health 转 fail,第一个怀疑对象是词而非引擎;用 guardian_rss 里那条
44
+ # 命令换词重测。
45
+ quality_queries:
46
+ - query: "shared"
47
+ - query: "posts"
@@ -0,0 +1,31 @@
1
+ # FxTwitter / FxEmbed 公开 API — X/Twitter 推文搜索(零 Key)
2
+ # 文档: https://docs.fxembed.com/api/twitter/
3
+ # 验证:
4
+ # python3 scripts/engine_validate.py --engine fxtwitter --stage all --admit --write-doc
5
+ # python3 scripts/search.py "OpenAI" --engine fxtwitter --json
6
+
7
+ engine_id: fxtwitter
8
+ type: http
9
+ enabled: true
10
+ cost_tier: free
11
+ method: GET
12
+ url: https://api.fxtwitter.com/2/search
13
+ timeout: 10
14
+ query_param: q
15
+ canary_query: "OpenAI"
16
+ desc: "FxTwitter 公开 API:X/Twitter 推文搜索(零认证,含互动元数据)"
17
+ coverage: [social, english]
18
+ recommended: false
19
+
20
+ headers:
21
+ User-Agent: argo-search/1.0 (+fxtwitter)
22
+ Accept: application/json
23
+
24
+ extra_params:
25
+ count: "{n}"
26
+
27
+ output_map:
28
+ items: results
29
+ item_title: text
30
+ item_url: url
31
+ item_summary: text
@@ -0,0 +1,32 @@
1
+ # GBFS — 通用共享单车/滑板车标准规范(免认证)
2
+ # 补「共享单车实时站点」空白:GBFS 是标准规范,全球数百城市同构,
3
+ # 换 base URL 即可复用(本 spec 以 NYC Citi Bike 为首发,其余城市按需追加)。
4
+ # 榜单/快照型源:查询词不参与过滤,命中即给城市站点清单。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine gbfs_nyc --stage all --admit --write-doc
7
+
8
+ engine_id: gbfs_nyc
9
+ type: http
10
+ enabled: true
11
+ cost_tier: free
12
+ method: GET
13
+ url: https://gbfs.citibikenyc.com/gbfs/en/station_information.json
14
+ timeout: 15
15
+ query_param: ""
16
+ canary_query: "bike"
17
+ desc: "GBFS 共享单车站点(NYC Citi Bike,通用规范,免认证)"
18
+ coverage: [transport, geo, realtime, open_data]
19
+ recommended: false
20
+ latency_ms: 1500
21
+
22
+ headers:
23
+ User-Agent: argo-search/1.0 (+gbfs)
24
+
25
+ output_map:
26
+ items: data.stations
27
+ item_title: name
28
+ item_summary: capacity
29
+ url_template: "https://maps.google.com/?q={lat},{lon}"
30
+
31
+ quality_queries:
32
+ - query: "bike share"
@@ -0,0 +1,21 @@
1
+ # GDACS — 全球灾害预警协调系统(EU/JRC 官方,免认证 GeoJSON)
2
+ # 补 earth_science 域「多灾种」维度:现有 usgs 只覆盖地震,
3
+ # GDACS 覆盖洪水/台风/野火/干旱/火山,且带 GLIDE 编号与预警等级。
4
+ # 查询为榜单型(按时间窗列事件),与查询词弱相关——判定为事件列表源。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine gdacs --stage all --admit --write-doc
7
+
8
+ engine_id: gdacs
9
+ type: gdacs
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 20
13
+ canary_query: "flood"
14
+ desc: "GDACS 全球多灾种预警(洪水/台风/野火/地震,EU JRC 官方,免认证)"
15
+ coverage: [earth_science, disaster, environment, official]
16
+ recommended: false
17
+ latency_ms: 3000
18
+
19
+ quality_queries:
20
+ - query: "earthquake"
21
+ - query: "flood"
@@ -0,0 +1,64 @@
1
+ # GDELT 全球新闻事件流(免 Key)
2
+ # 数据源: https://api.gdeltproject.org/api/v2/doc/doc DOC 2.0 API
3
+ # 能力: 全球媒体文章流——75+ 种语言(GDELT 机器翻译索引),一条查询横扫
4
+ # 英/中/俄/土/阿尔巴尼亚等各国媒体,带 domain/language/sourcecountry
5
+ # 与抓取时间。argo 原有新闻源是「单国单语」(google_news/dw_news/
6
+ # france24/人民日报),「同一事件看全球媒体怎么报」这个面是盲的。
7
+ # 形态: type=http GET + ArtList 模式,query 驱动(非热榜),归 news_flash 族。
8
+ # 坑: ①查询词太短报 "The specified phrase is too short"(纯文本非 JSON,
9
+ # 走引擎失败路径返回空)——canary/质量查询必须用 ≥4 字符的真实词组。
10
+ # ②官方限流 1 调用/5 秒,超了 429 且冷却以分钟计(出口 IP 生效)——
11
+ # qps 压到 0.2,且 429 响应体来得慢(实测 14s),timeout 放宽到 25s
12
+ # 才能读到响应体、正确归因而不是被记成 connection-failed。
13
+ # ③无摘要字段,snippet 留空;published_at 用 seendate
14
+ # (YYYYMMDDTHHMMSSZ 原样透传,与其他非 epoch 源一致)。
15
+ # 历史: v2.8.9 曾以下线(当时判定「死源」)。根因是 qps:2 的重试节奏撞进
16
+ # 429 冷却窗(越重试越 429)+ 共享代理出口常年半冷却;2026-09-19 实测
17
+ # 上游活着(200 返回完整 JSON),改 qps 0.2 + direct 出口复活。
18
+ # 验证:
19
+ # python3 scripts/engine_validate.py --engine gdelt --stage all --admit
20
+ # python3 scripts/search.py "artificial intelligence" --engine gdelt --json
21
+
22
+ engine_id: gdelt
23
+ type: http
24
+ enabled: true
25
+ cost_tier: free
26
+ method: GET
27
+ url: https://api.gdeltproject.org/api/v2/doc/doc
28
+ timeout: 25
29
+ query_param: query
30
+ canary_query: "artificial intelligence"
31
+ desc: "GDELT 全球新闻事件流(75+ 语言跨国媒体扫描,带域名/语言/国家标注)"
32
+ coverage: [news, world, multilingual]
33
+ recommended: false
34
+
35
+ family: news_flash
36
+ # min_interval_ms=5000:官方纪律是 1 调用/5 秒。qps 字段落地为滚动 60s 窗口
37
+ # 的 rpm 上限,12 连发照样 3 秒内全打出去,兜不住 GDELT 的突发冷却——
38
+ # 硬节流靠 min_interval_ms;qps: 1 显式声明配额闸,避免落回域族默认(qps=2)
39
+ qps: 1
40
+ min_interval_ms: 5000
41
+ # explicit_only:限流严格、触发后冷却以分钟计——不能进默认 combo 打流量
42
+ # (不达源门禁会拦),只在显式 --engine gdelt 时出
43
+ explicit_only: true
44
+
45
+ extra_params:
46
+ mode: ArtList
47
+ format: json
48
+ maxrecords: "{n}"
49
+ sort: DateDesc
50
+
51
+ # domain 是真实发布方(土耳其 milliyet.com.tr / 美国 stardem.com...),
52
+ # 保留而非改写为引擎名
53
+ preserve_source: true
54
+
55
+ output_map:
56
+ items: articles
57
+ item_title: title
58
+ item_url: url
59
+ item_source: domain
60
+ item_published_at: seendate
61
+
62
+ quality_queries:
63
+ - query: "artificial intelligence"
64
+ - query: "climate change policy"
@@ -0,0 +1,22 @@
1
+ # Google News RSS — 英文/多语言新闻(免认证,结构化 RSS)
2
+ # 对 local_google_news(HTML)的结构化升级:时间窗(when:1d/1h)、site: 限定、
3
+ # hl/gl/ceid 语言地区参数化。ToS 仅供个人 feed 展示,无配额契约——qps 从紧。
4
+ # 语言映射在 builder 内按查询主语言选择 hl/gl/ceid 组合。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine google_news --stage all --admit --write-doc
7
+
8
+ engine_id: google_news
9
+ type: google_news
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 12
13
+ canary_query: "artificial intelligence"
14
+ desc: "Google News RSS(多语言新闻,免认证,支持时间窗与 site: 限定)"
15
+ coverage: [news, realtime, english, international]
16
+ recommended: false
17
+ latency_ms: 1500
18
+
19
+ quality_queries:
20
+ - query: "artificial intelligence"
21
+ - query: "climate change"
22
+ - query: "quantum computing"
@@ -0,0 +1,38 @@
1
+ # 中国政府网·规章库 — 部门规章/地方政府规章(与 gov_policy 同一接口族)
2
+ # t=zhengcelibrary_bm 取规章层,与 gov_policy(t=zhengcelibrary_gw,国务院文件)
3
+ # 互补:法规金字塔的中段。响应封套与字段同构,声明直接克隆。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine gov_regulations --stage all --admit --write-doc
6
+
7
+ engine_id: gov_regulations
8
+ type: http
9
+ enabled: true
10
+ cost_tier: free
11
+ method: GET
12
+ url: https://sousuo.www.gov.cn/search-gov/data
13
+ timeout: 10
14
+ query_param: q
15
+ canary_query: "行政处罚"
16
+ desc: "中国政府网规章库(部门规章/地方政府规章,免认证)"
17
+ coverage: [legal, policy, gov, chinese]
18
+ recommended: false
19
+ latency_ms: 1500
20
+
21
+ headers:
22
+ User-Agent: argo-search/1.0 (+gov_regulations)
23
+
24
+ extra_params:
25
+ t: zhengcelibrary_bm
26
+ p: "1"
27
+ n: "{n}"
28
+
29
+ output_map:
30
+ items: searchVO.listVO
31
+ item_title: title
32
+ item_url: url
33
+ item_summary: summary
34
+ item_published_at: pubtimeStr
35
+
36
+ quality_queries:
37
+ - query: "行政处罚"
38
+ - query: "食品安全"
@@ -0,0 +1,59 @@
1
+ # The Guardian RSS — 卫报世界版(免 key、免注册)
2
+ #
3
+ # 补的盲区:**国际主流媒体的一手通道**。接入前 argo 的新闻域(global_event /
4
+ # news_realtime / financial_news 等)成员全是中文财经向(东财 / 财联社 / 金十 /
5
+ # 人民网)+ 聚合器 google_news,摸到 NYT / BBC / 卫报的唯一路径是聚合器转发,
6
+ # 拿到的是切片而不是原站。
7
+ #
8
+ # 为什么在候选池里选它(2026-09-17 实测 29 个源):
9
+ # Guardian 45 条 / 摘要中位 **979 字** / 最长 2769
10
+ # France24 24 条 / 337 字 ← 第二名
11
+ # Bloomberg 20 条 / 215 字
12
+ # NYT 23 条 / 147 字
13
+ # BBC 32 条 / 106 字
14
+ # 即它的摘要密度是同侪的 3–9 倍——卫报的 <description> 直接给导语加前几段,
15
+ # 其余媒体只给一句话。这是选它而不是选 NYT/BBC 的唯一理由,也是实测值。
16
+ #
17
+ # 形态:**feed_mode=hot(热榜语义)**。种子是固定的最近 45 条,这是实时流
18
+ # 不是检索索引,所以忽略 query、返回最新条目,归 hot_trending 族。
19
+ # 不放进 global_event 之类的话题检索域——实时流混进查询检索会白占槽位
20
+ # (话题词对固定窗口的部分命中本来就极低),仓内 _REFILL_EXCLUDED_FAMILIES
21
+ # 对 hot_trending 的排除注释说的是同一件事。
22
+ #
23
+ # 关于全文:本 RSS 不给全文(无 <content:encoded>)。卫报另有 Open Platform
24
+ # Content API 可给 bodyText 全文(免费 developer key、500 次/天、190 万篇),
25
+ # 但需注册;本引擎走免密路线,先落地这条。
26
+ #
27
+ # 验证:
28
+ # python3 scripts/engine_validate.py --engine guardian_rss --stage all --admit
29
+ # python3 scripts/search.py "今日国际要闻" --engine guardian_rss --json
30
+
31
+ engine_id: guardian_rss
32
+ type: rss_feed
33
+ enabled: true
34
+ cost_tier: free
35
+ label: 卫报 RSS
36
+ family: hot_trending
37
+ feed_mode: hot
38
+ # 热榜语义按设计忽略查询词,相关性词面判据对它不适用(用错标准)。
39
+ # 实测:英文查询「world news today」打最新条目,词面交集为 0 而被误判语料选错。
40
+ relevance_check: false
41
+ priority: 25
42
+ qps: 1
43
+ period: second
44
+ cost_per_call: 0.0
45
+ cost_unit: free
46
+ timeout: 12
47
+ feed_url: https://www.theguardian.com/world/rss
48
+ langs:
49
+ - en
50
+ canary_query: "今日国际要闻"
51
+ coverage:
52
+ - news
53
+ - world
54
+ desc: "卫报世界版 RSS(一手国际新闻实时流;摘要密度最高的一档,免 key)"
55
+ recommended: false
56
+
57
+ quality_queries:
58
+ - query: "今日国际要闻"
59
+ - query: "world news today"
@@ -0,0 +1,43 @@
1
+ # 自由报 RSS — Hürriyet,土耳其主流日报
2
+ #
3
+ # 补的盲区:**tr 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),tr 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**68 条**,摘要中位 236 字、最长 655 字。
8
+ #
9
+ # 形态:feed_mode=hot(实时流语义,同 guardian_rss)。归 world_news 族——
10
+ # 与 hot_trending(热榜)分族,避免同族 max_per_family=2 把本地源互相挤掉。
11
+ # 语言由 langs 声明,路由按查询语言选源(见 route._lang_aware_combo_order)。
12
+ #
13
+ # 验证:
14
+ # python3 scripts/engine_validate.py --engine hurriyet --stage all --admit
15
+ # python3 scripts/search.py "bugün haberler" --engine hurriyet --json
16
+
17
+ engine_id: hurriyet
18
+ type: rss_feed
19
+ enabled: true
20
+ cost_tier: free
21
+ label: 自由报 RSS
22
+ family: world_news
23
+ feed_mode: hot
24
+ relevance_check: false
25
+ priority: 51
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://www.hurriyet.com.tr/rss/anasayfa
32
+ langs:
33
+ - tr
34
+ canary_query: "bugün haberler"
35
+ coverage:
36
+ - news
37
+ - turkey
38
+ desc: "自由报(Hürriyet,土耳其主流日报,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "bugün haberler"
43
+ - query: "Türkiye ekonomi"
@@ -0,0 +1,25 @@
1
+ # iPlant 植物智(中科院植物所)——中文植物名(含俗名)→ 学名 + 分类
2
+ # 补的是 argo 一条硬盲区:此前没有任何从中文名进入生物数据库的路。gbif 对纯中文
3
+ # 查询返回无关属种(实测「玉米」首条是 Frithia 属,补 qField=VERNACULAR 仍是垃圾),
4
+ # 本仓 gbif builder 也因此在中文查询上直接短路。iPlant 的 /info/{名} 直接吃中文名、
5
+ # 学名、属名、科名,免认证,实测时延 0.29–0.41s。
6
+ # 只承诺名称规范化(学名 + 属/科/目 + 俗名);植物志正文(frps/foc)是 AJAX
7
+ # 填充且内部接口不可直调,不做承诺。
8
+ # 验证:
9
+ # python3 scripts/engine_validate.py --engine iplant --stage all --admit --write-doc
10
+
11
+ engine_id: iplant
12
+ type: iplant
13
+ enabled: true
14
+ cost_tier: free
15
+ timeout: 15
16
+ canary_query: "玉米"
17
+ desc: "iPlant 植物智(中文植物名/俗名 → 学名 + 分类,中科院植物所,免认证)"
18
+ coverage: [species, botany, chinese, science]
19
+ recommended: false
20
+ latency_ms: 1200
21
+
22
+ quality_queries:
23
+ - query: "玉米" # 正名:一级直接命中
24
+ - query: "包谷" # 俗名:走二级消歧取接受名
25
+ - query: "银杏"
@@ -0,0 +1,24 @@
1
+ # Jikan(MyAnimeList 数据,免认证非官方)——【暂不启用】
2
+ # 2026-09-13 实测:/anime?q= 检索端点持续 504(curl 直连同样 504,非本机问题),
3
+ # 而同站 /top/anime 与 /anime/{id} 返回 200 —— 是其检索端点的上游故障。
4
+ # builder 逻辑已验证正确,待检索端点恢复后把 enabled 改回 true 即可。
5
+ # 补 anime_encyclopedia 域:现有 bangumi(中文圈)+ 萌娘百科,Jikan 覆盖
6
+ # MAL 的全球番剧库(含日文原名与评分)。社区接口,失败诚实空。
7
+ # 验证:
8
+ # python3 scripts/engine_validate.py --engine jikan --stage all --admit --write-doc
9
+
10
+ engine_id: jikan
11
+ type: jikan
12
+ enabled: false
13
+ disabled_reason: builder 逻辑已验证正确,待检索端点恢复后把 enabled 改回 true(见文件头注释);重开前需实测端点可用性
14
+ cost_tier: free
15
+ timeout: 20
16
+ canary_query: "naruto"
17
+ desc: "动漫元数据(Jikan/MyAnimeList,免认证,含评分与集数)"
18
+ coverage: [anime, media, entertainment, japanese]
19
+ recommended: false
20
+ latency_ms: 2500
21
+
22
+ quality_queries:
23
+ - query: "naruto"
24
+ - query: "attack on titan"
@@ -0,0 +1,20 @@
1
+ # Jolpica F1 — Ergast API 的社区继任者(免认证)
2
+ # 补 sports_search 域的「赛车」维度。Ergast 已于 2024 停止服务,Jolpica 兼容其接口。
3
+ # 验证:
4
+ # python3 scripts/engine_validate.py --engine jolpica --stage all --admit --write-doc
5
+
6
+ engine_id: jolpica
7
+ type: jolpica
8
+ enabled: true
9
+ cost_tier: free
10
+ timeout: 20
11
+ canary_query: "verstappen"
12
+ desc: "F1 车手积分榜/赛程(Jolpica,Ergast 继任,免认证)"
13
+ family: sports
14
+ coverage: [sports, racing, statistics]
15
+ recommended: false
16
+ latency_ms: 2500
17
+
18
+ quality_queries:
19
+ - query: "verstappen"
20
+ - query: "f1 2026 standings"