argo-search 1.0.1 → 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 (472) hide show
  1. package/LICENSE +201 -21
  2. package/README.en.md +735 -0
  3. package/README.es.md +777 -0
  4. package/README.ja.md +777 -0
  5. package/README.ko.md +777 -0
  6. package/README.md +778 -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/why-better.svg +104 -0
  12. package/assets/readme/workflow.svg +83 -0
  13. package/backends/domain_profiles.json +2356 -96
  14. package/backends/engine_registry.yaml +3428 -503
  15. package/backends/query_synonyms_cn.json +35 -0
  16. package/backends/quota_profiles.json +2488 -160
  17. package/backends/source_types_cn.json +109 -0
  18. package/backends/text_lexicon.json +44 -0
  19. package/bin/argo +772 -0
  20. package/bin/argo.js +102 -39
  21. package/config.yaml +5139 -367
  22. package/cordis.patch.yml +21 -0
  23. package/data/countries.json +40 -0
  24. package/data/lang_matrix/lang_capability.json +842 -0
  25. package/data/lang_matrix/matrix_2026-09-10.json +11921 -0
  26. package/data/regions_cn.json +1 -0
  27. package/docs/ADDING_NEW_ENGINE.md +184 -0
  28. package/docs/ARGO_INTRO.md +124 -0
  29. package/docs/DATA_SOURCE_GAPS.md +81 -0
  30. package/docs/DESIGN_LOCAL_DATA_FUSION.md +90 -0
  31. package/docs/ENGINE_CATALOG.md +575 -0
  32. package/docs/MCP_SETUP.md +108 -0
  33. package/docs/PLATFORM_PATHS.md +111 -0
  34. package/docs/RELEASE_NOTES_v2.8.0.md +71 -0
  35. package/docs/RELEASE_NOTES_v2.8.2.md +63 -0
  36. package/docs/RELEASE_NOTES_v2.8.3.md +55 -0
  37. package/docs/RELEASE_NOTES_v2.8.4.md +79 -0
  38. package/docs/RELEASE_NOTES_v2.8.5.md +102 -0
  39. package/docs/RELEASE_NOTES_v2.8.6.md +66 -0
  40. package/docs/RELEASE_NOTES_v2.8.7.md +65 -0
  41. package/docs/RELEASE_NOTES_v2.8.8.md +67 -0
  42. package/docs/RELEASE_NOTES_v2.8.9.md +67 -0
  43. package/docs/RELEASE_NOTES_v2.9.0.md +64 -0
  44. package/docs/RELEASE_NOTES_v2.9.8.md +73 -0
  45. package/docs/SEARCH_ARCHIVE.md +115 -0
  46. package/docs/assets/architecture.svg +104 -0
  47. package/docs/assets/hero.svg +98 -0
  48. package/docs/engines/bangumi.md +27 -0
  49. package/docs/engines/biorxiv.md +27 -0
  50. package/docs/engines/clawhub.md +27 -0
  51. package/docs/engines/crt_sh.md +27 -0
  52. package/docs/engines/datacite.md +27 -0
  53. package/docs/engines/deps_dev.md +27 -0
  54. package/docs/engines/douban_movie.md +27 -0
  55. package/docs/engines/endoflife.md +27 -0
  56. package/docs/engines/flk_law.md +27 -0
  57. package/docs/engines/fxtwitter.md +27 -0
  58. package/docs/engines/google_news.md +27 -0
  59. package/docs/engines/gov_regulations.md +27 -0
  60. package/docs/engines/guqian.md +27 -0
  61. package/docs/engines/hackernews.md +27 -0
  62. package/docs/engines/iplant.md +27 -0
  63. package/docs/engines/keenable.md +27 -0
  64. package/docs/engines/met_museum.md +27 -0
  65. package/docs/engines/nasa_images.md +27 -0
  66. package/docs/engines/netease_music.md +27 -0
  67. package/docs/engines/npm.md +27 -0
  68. package/docs/engines/nvd.md +27 -0
  69. package/docs/engines/openreview.md +27 -0
  70. package/docs/engines/openstd.md +27 -0
  71. package/docs/engines/parallel_free.md +27 -0
  72. package/docs/engines/people_daily.md +27 -0
  73. package/docs/engines/realtime_index.md +27 -0
  74. package/docs/engines/sec_edgar.md +27 -0
  75. package/docs/engines/seltz.md +27 -0
  76. package/docs/engines/skillsmp.md +27 -0
  77. package/docs/engines/sspai.md +27 -0
  78. package/docs/engines/std_samr.md +27 -0
  79. package/docs/engines/train.md +27 -0
  80. package/docs/engines/un_comtrade.md +27 -0
  81. package/docs/engines/wikisource.md +27 -0
  82. package/docs/engines/zdic.md +27 -0
  83. package/docs/engines/zenodo.md +27 -0
  84. package/docs/engines/zhihu_hot_app.md +27 -0
  85. package/docs//344/270/272/344/273/200/344/271/210/351/200/211/346/213/251argo.md +176 -0
  86. package/engines/README.md +10 -0
  87. package/engines/_template_cli.yaml +39 -0
  88. package/engines/_template_http.yaml +37 -0
  89. package/engines/plugins/_template_plugin.py +50 -0
  90. package/engines/specs/_cisa_kev.yaml +54 -0
  91. package/engines/specs/_osv.yaml +63 -0
  92. package/engines/specs/aljazeera.yaml +43 -0
  93. package/engines/specs/antara.yaml +43 -0
  94. package/engines/specs/artic.yaml +20 -0
  95. package/engines/specs/aviation_weather.yaml +39 -0
  96. package/engines/specs/bangumi.yaml +21 -0
  97. package/engines/specs/biorxiv.yaml +24 -0
  98. package/engines/specs/carbon_intensity.yaml +32 -0
  99. package/engines/specs/cfets.yaml +41 -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/defillama.yaml +38 -0
  113. package/engines/specs/deps_dev.yaml +21 -0
  114. package/engines/specs/digup.yaml +36 -0
  115. package/engines/specs/doi.yaml +39 -0
  116. package/engines/specs/douban_movie.yaml +22 -0
  117. package/engines/specs/dw_news.yaml +47 -0
  118. package/engines/specs/egov_law.yaml +21 -0
  119. package/engines/specs/elpais.yaml +43 -0
  120. package/engines/specs/endoflife.yaml +21 -0
  121. package/engines/specs/energy_charts.yaml +21 -0
  122. package/engines/specs/factcheck_org.yaml +52 -0
  123. package/engines/specs/faz.yaml +43 -0
  124. package/engines/specs/federal_register.yaml +57 -0
  125. package/engines/specs/firecrawl.yaml +53 -0
  126. package/engines/specs/flk_law.yaml +24 -0
  127. package/engines/specs/folha.yaml +43 -0
  128. package/engines/specs/france24.yaml +44 -0
  129. package/engines/specs/full_fact.yaml +47 -0
  130. package/engines/specs/fxtwitter.yaml +36 -0
  131. package/engines/specs/gbfs_nyc.yaml +32 -0
  132. package/engines/specs/gdacs.yaml +21 -0
  133. package/engines/specs/gdelt.yaml +64 -0
  134. package/engines/specs/gleif.yaml +55 -0
  135. package/engines/specs/google_news.yaml +22 -0
  136. package/engines/specs/gov_regulations.yaml +38 -0
  137. package/engines/specs/guardian_rss.yaml +59 -0
  138. package/engines/specs/hkex.yaml +40 -0
  139. package/engines/specs/hurriyet.yaml +43 -0
  140. package/engines/specs/iplant.yaml +25 -0
  141. package/engines/specs/jikan.yaml +24 -0
  142. package/engines/specs/jolpica.yaml +20 -0
  143. package/engines/specs/k10plus.yaml +20 -0
  144. package/engines/specs/keenable.yaml +44 -0
  145. package/engines/specs/keenable_free.yaml +36 -0
  146. package/engines/specs/lefigaro.yaml +43 -0
  147. package/engines/specs/listenbrainz.yaml +19 -0
  148. package/engines/specs/matichon.yaml +43 -0
  149. package/engines/specs/met_museum.yaml +21 -0
  150. package/engines/specs/nasa_images.yaml +45 -0
  151. package/engines/specs/netease_music.yaml +38 -0
  152. package/engines/specs/nhk.yaml +43 -0
  153. package/engines/specs/nhtsa_vpic.yaml +20 -0
  154. package/engines/specs/noaa_swpc.yaml +20 -0
  155. package/engines/specs/nvd.yaml +38 -0
  156. package/engines/specs/obis.yaml +20 -0
  157. package/engines/specs/opencitations.yaml +52 -0
  158. package/engines/specs/openf1.yaml +21 -0
  159. package/engines/specs/openfoodfacts.yaml +45 -0
  160. package/engines/specs/openligadb.yaml +20 -0
  161. package/engines/specs/openreview.yaml +37 -0
  162. package/engines/specs/openstd.yaml +21 -0
  163. package/engines/specs/people_daily.yaml +22 -0
  164. package/engines/specs/realtime_index.yaml +34 -0
  165. package/engines/specs/ror.yaml +20 -0
  166. package/engines/specs/satnogs.yaml +20 -0
  167. package/engines/specs/sec_edgar.yaml +46 -0
  168. package/engines/specs/shfe.yaml +39 -0
  169. package/engines/specs/skillsmp.yaml +50 -0
  170. package/engines/specs/sogou_weixin_browser.yaml +30 -0
  171. package/engines/specs/soilgrids.yaml +25 -0
  172. package/engines/specs/sspai.yaml +36 -0
  173. package/engines/specs/stackexchange.yaml +46 -0
  174. package/engines/specs/std_samr.yaml +21 -0
  175. package/engines/specs/tass.yaml +43 -0
  176. package/engines/specs/tavily_free.yaml +56 -0
  177. package/engines/specs/tle_mirror.yaml +21 -0
  178. package/engines/specs/train.yaml +37 -0
  179. package/engines/specs/tvmaze.yaml +20 -0
  180. package/engines/specs/twitter_syndication.yaml +31 -0
  181. package/engines/specs/un_comtrade.yaml +23 -0
  182. package/engines/specs/unpaywall.yaml +54 -0
  183. package/engines/specs/vnpress.yaml +43 -0
  184. package/engines/specs/weather.yaml +32 -0
  185. package/engines/specs/who_don.yaml +21 -0
  186. package/engines/specs/who_gho.yaml +20 -0
  187. package/engines/specs/wikimedia_commons.yaml +34 -0
  188. package/engines/specs/wikisource.yaml +22 -0
  189. package/engines/specs/worms.yaml +19 -0
  190. package/engines/specs/x_trending.yaml +34 -0
  191. package/engines/specs/yna.yaml +43 -0
  192. package/engines/specs/ynet.yaml +43 -0
  193. package/engines/specs/yuanbao.yaml +93 -0
  194. package/engines/specs/zbmath.yaml +40 -0
  195. package/engines/specs/zdic.yaml +22 -0
  196. package/engines/specs/zenodo.yaml +27 -0
  197. package/engines/specs/zhihu_hot_app.yaml +35 -0
  198. package/mcp/clients.yaml +106 -0
  199. package/package.json +55 -12
  200. package/packages/dsh-plugin/README.md +152 -0
  201. package/packages/dsh-plugin/cordis.patch.yml +48 -0
  202. package/packages/dsh-plugin/dsh/client.js +1533 -0
  203. package/packages/dsh-plugin/dsh/diagnostics.js +54 -0
  204. package/packages/dsh-plugin/dsh/index.js +527 -0
  205. package/packages/dsh-plugin/dsh/native-tools.mjs +749 -0
  206. package/packages/dsh-plugin/dsh/runner.js +666 -0
  207. package/packages/dsh-plugin/dsh/wide-research.js +878 -0
  208. package/packages/dsh-plugin/package.json +38 -0
  209. package/packages/dsh-plugin/scripts/sync-local.sh +70 -0
  210. package/packages/dsh-plugin/test/client.test.js +406 -0
  211. package/packages/dsh-plugin/test/config.test.js +30 -0
  212. package/packages/dsh-plugin/test/diagnostics.test.js +28 -0
  213. package/packages/dsh-plugin/test/index.test.js +1382 -0
  214. package/references/query-templates.md +96 -0
  215. package/references/query-templates.yaml +118 -0
  216. package/scripts/ab_eval.py +219 -0
  217. package/scripts/ab_eval_p0p1.py +266 -0
  218. package/scripts/adaptive.py +294 -70
  219. package/scripts/answer.py +154 -0
  220. package/scripts/archive_run.py +591 -0
  221. package/scripts/argo_engine_registry.py +172 -0
  222. package/scripts/argo_paths.py +728 -0
  223. package/scripts/article.py +136 -0
  224. package/scripts/article_meta.py +131 -0
  225. package/scripts/arxiv_source.py +201 -0
  226. package/scripts/badcase_ledger.py +252 -0
  227. package/scripts/batch_probe.py +241 -0
  228. package/scripts/benchmark.py +19 -0
  229. package/scripts/bounded_run.py +144 -0
  230. package/scripts/browser_auth.py +323 -0
  231. package/scripts/budget.py +247 -0
  232. package/scripts/budget_cli.py +93 -0
  233. package/scripts/build_release_assets.sh +65 -0
  234. package/scripts/burstiness_detector.py +147 -0
  235. package/scripts/cache.py +1066 -67
  236. package/scripts/cache_guard.py +271 -0
  237. package/scripts/cache_key_vdom.py +56 -0
  238. package/scripts/cache_similarity.py +170 -0
  239. package/scripts/caliber_isolation.py +195 -0
  240. package/scripts/calibrate_lowquality.py +210 -0
  241. package/scripts/candidate_envelope.py +366 -0
  242. package/scripts/chrome_cdp.py +871 -0
  243. package/scripts/ci_drift_gate.py +90 -0
  244. package/scripts/circuit_breaker.py +389 -0
  245. package/scripts/citations.py +334 -0
  246. package/scripts/cite_cli.py +59 -0
  247. package/scripts/cjk_tokens.py +95 -0
  248. package/scripts/clarify.py +47 -24
  249. package/scripts/cli_io.py +240 -0
  250. package/scripts/config.py +683 -45
  251. package/scripts/config_cache.py +402 -0
  252. package/scripts/conn_pool.py +220 -0
  253. package/scripts/content_boundary.py +46 -0
  254. package/scripts/content_security.py +685 -0
  255. package/scripts/content_signals.py +751 -0
  256. package/scripts/crawl.py +74 -35
  257. package/scripts/cross_lingual_trace.py +293 -0
  258. package/scripts/daemon.py +866 -0
  259. package/scripts/digup_bridge.py +214 -0
  260. package/scripts/dispatch_result.py +98 -0
  261. package/scripts/engine_admission.py +366 -0
  262. package/scripts/engine_dispatch.py +982 -0
  263. package/scripts/engine_env.py +539 -0
  264. package/scripts/engine_failure.py +411 -0
  265. package/scripts/engine_families.py +738 -0
  266. package/scripts/engine_policy.py +218 -0
  267. package/scripts/engine_requires.py +190 -0
  268. package/scripts/engine_status.py +322 -0
  269. package/scripts/engine_validate.py +638 -0
  270. package/scripts/engines.py +799 -294
  271. package/scripts/engines_base.py +1521 -0
  272. package/scripts/engines_builders.py +310 -0
  273. package/scripts/engines_builders_batch10.py +204 -0
  274. package/scripts/engines_builders_batch11.py +174 -0
  275. package/scripts/engines_builders_batch12.py +103 -0
  276. package/scripts/engines_builders_batch13.py +340 -0
  277. package/scripts/engines_builders_batch14.py +656 -0
  278. package/scripts/engines_builders_batch15.py +249 -0
  279. package/scripts/engines_builders_batch9.py +1468 -0
  280. package/scripts/engines_builders_cn.py +2283 -0
  281. package/scripts/engines_builders_data.py +2923 -0
  282. package/scripts/engines_builders_data_macro.py +775 -0
  283. package/scripts/engines_builders_feeds.py +255 -0
  284. package/scripts/engines_builders_intl.py +1239 -0
  285. package/scripts/engines_builders_keyless.py +111 -0
  286. package/scripts/engines_builders_search.py +440 -0
  287. package/scripts/engines_builders_tech.py +1359 -0
  288. package/scripts/evidence.py +620 -166
  289. package/scripts/evidence_loop.py +624 -0
  290. package/scripts/evidence_tier.py +298 -0
  291. package/scripts/except_sets.py +25 -0
  292. package/scripts/extract.py +55 -16
  293. package/scripts/fact_align.py +207 -0
  294. package/scripts/fact_crosscheck.py +230 -0
  295. package/scripts/fetch.py +25 -12
  296. package/scripts/fetch_browser.py +87 -0
  297. package/scripts/fetch_jsrun.py +122 -0
  298. package/scripts/fetch_quality.py +225 -0
  299. package/scripts/fetch_render_tinyfish.py +117 -0
  300. package/scripts/fetch_v3.py +1804 -0
  301. package/scripts/focus_extract.py +350 -0
  302. package/scripts/fulltext_store.py +169 -0
  303. package/scripts/fxtwitter_api.py +325 -0
  304. package/scripts/gen_engine_catalog.py +364 -0
  305. package/scripts/gen_native_tools.py +91 -0
  306. package/scripts/gen_routing_snapshot.py +195 -0
  307. package/scripts/health_check.py +140 -402
  308. package/scripts/health_probe.py +23 -8
  309. package/scripts/hot_state.py +134 -0
  310. package/scripts/http_client.py +1053 -0
  311. package/scripts/image_ops.py +430 -0
  312. package/scripts/image_vision/vision_probe.swift +126 -0
  313. package/scripts/install.ps1 +166 -0
  314. package/scripts/install.sh +221 -0
  315. package/scripts/job.py +1186 -0
  316. package/scripts/jump_resolver.py +235 -0
  317. package/scripts/lang_capability.py +150 -0
  318. package/scripts/lang_detect.py +289 -0
  319. package/scripts/lang_matrix_probe.py +329 -0
  320. package/scripts/lang_pref.py +311 -0
  321. package/scripts/link_source.py +340 -0
  322. package/scripts/local_image.py +970 -0
  323. package/scripts/local_seek.py +402 -0
  324. package/scripts/macro_countries.py +97 -0
  325. package/scripts/matrix_search_eval.py +1187 -0
  326. package/scripts/mcp_compact.py +234 -0
  327. package/scripts/mcp_diag.py +8 -3
  328. package/scripts/mcp_handlers.py +492 -0
  329. package/scripts/mcp_handlers_surface.py +157 -0
  330. package/scripts/mcp_launch.sh +124 -0
  331. package/scripts/mcp_local.py +241 -0
  332. package/scripts/mcp_server.py +125 -419
  333. package/scripts/mcp_setup.py +431 -0
  334. package/scripts/mcp_tools.py +331 -0
  335. package/scripts/mcp_transport.py +191 -0
  336. package/scripts/mcp_warm.py +127 -0
  337. package/scripts/min_version_scan.py +335 -0
  338. package/scripts/net_proxy.py +258 -0
  339. package/scripts/network_aware.py +152 -0
  340. package/scripts/output_transparency.py +200 -0
  341. package/scripts/paid_policy.py +98 -0
  342. package/scripts/paper.py +274 -0
  343. package/scripts/pdf_extract.py +518 -0
  344. package/scripts/phrase_filter.py +66 -0
  345. package/scripts/plan.py +422 -0
  346. package/scripts/postprocess_signals.py +150 -0
  347. package/scripts/pre-commit +48 -0
  348. package/scripts/query_enhance.py +157 -0
  349. package/scripts/query_operators.py +196 -0
  350. package/scripts/query_rewriter.py +116 -7
  351. package/scripts/query_signals.py +300 -0
  352. package/scripts/query_templates.py +167 -0
  353. package/scripts/query_understanding.py +411 -0
  354. package/scripts/query_variants.py +298 -0
  355. package/scripts/quota.py +633 -76
  356. package/scripts/rank_signals.py +775 -0
  357. package/scripts/ranking_eval.py +319 -0
  358. package/scripts/readability_extract.py +433 -0
  359. package/scripts/recompute.py +415 -0
  360. package/scripts/recovery.py +616 -0
  361. package/scripts/recovery_l0.py +160 -0
  362. package/scripts/recovery_runner.py +150 -0
  363. package/scripts/redskill/redskill_engine.py +332 -0
  364. package/scripts/regression_p0p1.py +318 -0
  365. package/scripts/replay_eval.py +658 -0
  366. package/scripts/rerank_tfidf.py +225 -0
  367. package/scripts/research.py +607 -403
  368. package/scripts/research_cli.py +361 -0
  369. package/scripts/research_dossier.py +492 -0
  370. package/scripts/research_expand.py +169 -0
  371. package/scripts/research_gates.py +272 -0
  372. package/scripts/research_report.py +209 -0
  373. package/scripts/research_strategy.py +37 -0
  374. package/scripts/research_work_packages.py +195 -0
  375. package/scripts/result_lang.py +311 -0
  376. package/scripts/retry_policy.py +76 -0
  377. package/scripts/robots_guard.py +259 -0
  378. package/scripts/route.py +921 -254
  379. package/scripts/route_bangs.py +40 -0
  380. package/scripts/route_cache.py +243 -0
  381. package/scripts/route_combo.py +917 -0
  382. package/scripts/route_domains.py +341 -0
  383. package/scripts/route_lang.py +605 -0
  384. package/scripts/route_log.py +63 -0
  385. package/scripts/route_policy.py +250 -0
  386. package/scripts/rrf_classic.py +66 -0
  387. package/scripts/screenshot.py +73 -0
  388. package/scripts/search.py +886 -406
  389. package/scripts/search_attribution.py +185 -0
  390. package/scripts/search_benchmark.py +407 -0
  391. package/scripts/search_cli.py +640 -0
  392. package/scripts/search_entry.py +395 -0
  393. package/scripts/search_output.py +690 -0
  394. package/scripts/search_pipeline.py +926 -0
  395. package/scripts/search_rank.py +991 -0
  396. package/scripts/search_types.py +129 -16
  397. package/scripts/seek_locator.py +68 -0
  398. package/scripts/semantic_evidence.py +391 -0
  399. package/scripts/serp_guard.py +336 -0
  400. package/scripts/serp_kill_log.py +74 -0
  401. package/scripts/single_flight.py +120 -0
  402. package/scripts/social_engines/__init__.py +10 -0
  403. package/scripts/social_engines/bilibili_engine.py +131 -0
  404. package/scripts/social_engines/hackernews_engine.py +113 -0
  405. package/scripts/social_engines/reddit_engine.py +172 -0
  406. package/scripts/social_engines/twitter_engine.py +397 -0
  407. package/scripts/social_engines/v2ex_engine.py +101 -0
  408. package/scripts/social_engines/weibo_engine.py +128 -0
  409. package/scripts/social_engines/xiaohongshu_engine.py +137 -0
  410. package/scripts/social_engines/zhihu_engine.py +139 -0
  411. package/scripts/social_research.py +201 -0
  412. package/scripts/sogou_weixin_browser.py +318 -0
  413. package/scripts/source_ledger.py +249 -0
  414. package/scripts/stage_timing.py +58 -0
  415. package/scripts/stats_cli.py +107 -0
  416. package/scripts/straggler_policy.py +60 -0
  417. package/scripts/stylometry_detector.py +231 -0
  418. package/scripts/sync_backends.py +353 -0
  419. package/scripts/sync_installs.py +29 -0
  420. package/scripts/template_cli.py +127 -0
  421. package/scripts/text_lexicon.py +72 -0
  422. package/scripts/tfidf_router.py +109 -37
  423. package/scripts/time_utils.py +233 -0
  424. package/scripts/topic_research_profiles.py +643 -0
  425. package/scripts/train.py +737 -0
  426. package/scripts/tweet.py +596 -0
  427. package/scripts/url_canon.py +217 -0
  428. package/scripts/url_optimize.py +56 -0
  429. package/scripts/url_safety.py +236 -0
  430. package/scripts/usage_log.py +116 -0
  431. package/scripts/usage_log_clean.py +113 -0
  432. package/scripts/v2ex_nodes.py +311 -0
  433. package/scripts/variant_recall.py +188 -0
  434. package/scripts/watch.py +205 -0
  435. package/scripts/wechat_article.py +258 -0
  436. package/scripts/wide_research.py +447 -0
  437. package/scripts/wx.py +349 -0
  438. package/scripts/x_article_fetch.py +141 -0
  439. package/scripts/x_search.py +234 -0
  440. package/scripts/x_trending.py +189 -0
  441. package/scripts/yaml_load.py +67 -0
  442. package/scripts/zhihu_quota.py +139 -0
  443. package/sub-skills/ego-search/SKILL.md +253 -0
  444. package/sub-skills/ego-search/scripts/ego_search.py +800 -0
  445. package/sub-skills/ego-search/scripts/merge.py +226 -0
  446. package/sub-skills/ego-search/scripts/quality.py +64 -0
  447. package/sub-skills/ego-search/scripts/runtime.py +172 -0
  448. package/sub-skills/ego-search/scripts/safety.py +109 -0
  449. package/sub-skills/ego-search/scripts/serp_spec.py +109 -0
  450. package/sub-skills/ego-search/scripts/webbridge_adapter.py +374 -0
  451. package/sub-skills/js-run/SKILL.md +67 -0
  452. package/sub-skills/js-run/scripts/jsrun.py +112 -0
  453. package/sub-skills/js-run/scripts/shim.js +188 -0
  454. package/sub-skills/local-search/SKILL.md +50 -53
  455. package/sub-skills/local-search/bm25.py +186 -0
  456. package/sub-skills/local-search/cli_runner.py +331 -0
  457. package/sub-skills/local-search/config.yaml +152 -55
  458. package/sub-skills/local-search/engine_registry.py +91 -26
  459. package/sub-skills/local-search/{health_check.py → local_health_check.py} +140 -10
  460. package/sub-skills/local-search/local_search_adapter.py +13 -2
  461. package/sub-skills/local-search/parse_maps.yaml +40 -42
  462. package/sub-skills/local-search/parsers.py +328 -0
  463. package/sub-skills/local-search/search_v3.py +716 -242
  464. package/sub-skills/local-search/smart_router.py +47 -7
  465. package/sub-skills/local-seek/SKILL.md +110 -0
  466. package/sub-skills/local-seek/config/domains.yaml +20 -0
  467. package/sub-skills/local-seek/scripts/eval_rank.py +216 -0
  468. package/sub-skills/local-seek/scripts/eval_seek.py +224 -0
  469. package/sub-skills/local-seek/scripts/seek.py +1465 -0
  470. package/sub-skills/local-seek/scripts/seek_frecency.py +126 -0
  471. package/sub-skills/local-seek/scripts/seek_fts.py +430 -0
  472. package/sub-skills/local-seek/scripts/seek_rank.py +197 -0
@@ -0,0 +1,39 @@
1
+ # DOI 内容协商引擎(doi.org 官方解析器,keyless 直出结构化元数据)
2
+ # 机制: https://doi.org/<DOI> 配 Accept 头做内容协商——
3
+ # application/vnd.citationstyles.csl+json → CSL JSON(标题/作者/期刊/年份)
4
+ # text/x-bibtex → BibTeX 引用(本引擎走 CSL JSON)
5
+ # 用法: 显式专用(explicit_only)——查询词传裸 DOI(如 10.1145/3442188.3445922),
6
+ # 不要带 https://doi.org/ 前缀({query} 原样进路径)
7
+ # 特点: 免 key、不限次;单对象 CSL JSON 响应走 _CUSTOM_JSON_PARSERS["doi"]
8
+ # (声明式 output_map 只支持数组根,单对象根由专用解析器包裹)
9
+ # 验证:
10
+ # python3 scripts/engine_validate.py --engine doi --stage health --admit
11
+ # python3 scripts/search.py "10.1145/3442188.3445922" --engine doi --json
12
+
13
+ engine_id: doi
14
+ type: http
15
+ enabled: true
16
+ # 按 DOI 精查而非关键词检索,不参与自动路由
17
+ explicit_only: true
18
+ cost_tier: free
19
+ label: DOI 元数据直出
20
+ family: academic
21
+ priority: 50
22
+ qps: 2
23
+ period: second
24
+ limit: null
25
+ cost_per_call: 0.0
26
+ cost_unit: free
27
+ method: GET
28
+ url: https://doi.org/{query}
29
+ timeout: 12
30
+ canary_query: "10.1145/3442188.3445922"
31
+ coverage:
32
+ - academic
33
+ - metadata
34
+ desc: "DOI 内容协商(doi.org 官方解析器,Accept 头直出 CSL JSON 结构化元数据,keyless 免 key 免限次,查询词传裸 DOI)"
35
+ format: json
36
+ # 空字符串 = 该 API 不用查询参数名(DOI 走 URL 路径,由 {query} 注入)
37
+ query_param: ""
38
+ headers:
39
+ Accept: "application/vnd.citationstyles.csl+json"
@@ -0,0 +1,22 @@
1
+ # 豆瓣电影搜索 — suggest 接口(免认证)
2
+ # film_search 域的中文视角补位:imdb/itunes 全英文视角,豆瓣给中文片名/
3
+ # 年份/类型。豆瓣对无 cookie 请求逐步收紧(音乐口子已死),本接口仍存活,
4
+ # 失败诚实空,不做绕过。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine douban_movie --stage all --admit --write-doc
7
+
8
+ engine_id: douban_movie
9
+ type: douban_movie
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 10
13
+ canary_query: "流浪地球"
14
+ desc: "豆瓣电影搜索(中文片名/年份/类型,免认证,suggest 接口)"
15
+ coverage: [film, chinese, media]
16
+ recommended: false
17
+ latency_ms: 1000
18
+
19
+ quality_queries:
20
+ - query: "流浪地球"
21
+ - query: "霸王别姬"
22
+ - query: "Inception"
@@ -0,0 +1,47 @@
1
+ # DW News RSS — 德国之声英语版(免 key、免注册)
2
+ #
3
+ # 补的盲区:**德语区/欧洲公共广播的国际新闻**。与 france24 同批接入,
4
+ # 都是「非英美视角的国际新闻」——这类视角在只用英美源的组合里是盲的。
5
+ #
6
+ # 实测(2026-09-17):**139 条**,摘要中位 193 字、最长 220。条目数是候选池
7
+ # 里最多的(卫报 45、NYT 23、BBC 32),代价是摘要密度中等(193 字,排中游)。
8
+ # 条目多意味着实时流更长,这是它相对 france24(24 条)的取舍。
9
+ #
10
+ # 形态:feed_mode=hot(热榜语义,同 guardian_rss)。归 hot_trending 族。
11
+ #
12
+ # 可达性(实测 2026-09-17):它是 intl_news_flash 域的第 3 位,fast 档的
13
+ # combo 预算裁到 2 个引擎,所以 fast 下不出现;`--depth balanced` 起三个
14
+ # 全部入选。也就是说它是「加宽档」的补充源,不是默认档成员——
15
+ # 这不是缺陷,是预算位只有那么多时该有的排序结果。
16
+ #
17
+ # 验证:
18
+ # python3 scripts/engine_validate.py --engine dw_news --stage all --admit
19
+ # python3 scripts/search.py "今日国际要闻" --depth balanced --json
20
+
21
+ engine_id: dw_news
22
+ type: rss_feed
23
+ enabled: true
24
+ cost_tier: free
25
+ label: DW 德国之声 RSS
26
+ family: hot_trending
27
+ feed_mode: hot
28
+ relevance_check: false
29
+ priority: 32
30
+ qps: 1
31
+ period: second
32
+ cost_per_call: 0.0
33
+ cost_unit: free
34
+ timeout: 12
35
+ feed_url: https://rss.dw.com/rdf/rss-en-all
36
+ langs:
37
+ - en
38
+ canary_query: "今日国际要闻"
39
+ coverage:
40
+ - news
41
+ - world
42
+ desc: "德国之声英语版 RSS(德语区/欧洲公共广播视角,条目数最多的一档)"
43
+ recommended: false
44
+
45
+ quality_queries:
46
+ - query: "今日国际要闻"
47
+ - query: "world news today"
@@ -0,0 +1,21 @@
1
+ # 日本 e-Gov 法令检索(官方全文,免认证)
2
+ # 补 legal 域的日本法条:现有 flk_law(中国)、kor_law(韩国)、
3
+ # courtlistener(美国判例)、wenshu(中国判例),日本法令此前空白。
4
+ # lawlists 返回全量法令名 XML,本地按关键词过滤(API 无服务端检索参数)。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine egov_law --stage all --admit --write-doc
7
+
8
+ engine_id: egov_law
9
+ type: egov_law
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 20
13
+ canary_query: "民法"
14
+ desc: "日本法令检索(e-Gov 官方全文,免认证)"
15
+ coverage: [legal, law_text, japanese, official]
16
+ recommended: false
17
+ latency_ms: 3000
18
+
19
+ quality_queries:
20
+ - query: "民法"
21
+ - query: "個人情報"
@@ -0,0 +1,43 @@
1
+ # 西班牙国家报 RSS — El País,西语世界发行量最大的日报
2
+ #
3
+ # 补的盲区:**es 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),es 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**143 条**,摘要中位 158 字、最长 445 字。
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 elpais --stage all --admit
15
+ # python3 scripts/search.py "noticias de hoy" --engine elpais --json
16
+
17
+ engine_id: elpais
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: 43
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://feeds.elpais.com/mrss-s/pages/ep/site/elpais.com/portada
32
+ langs:
33
+ - es
34
+ canary_query: "noticias de hoy"
35
+ coverage:
36
+ - news
37
+ - spain
38
+ desc: "西班牙国家报(El País,西语世界发行量最大的日报,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "noticias de hoy"
43
+ - query: "economía España"
@@ -0,0 +1,21 @@
1
+ # endoflife.date — 产品生命周期(200+ 产品,免认证)
2
+ # 查询词 = 产品 slug(python/nodejs/go/kubernetes/ubuntu…);API 无搜索端点,
3
+ # slug 提取取查询里第一个 ASCII 词。未识别产品诚实返回空。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine endoflife --stage all --admit --write-doc
6
+
7
+ engine_id: endoflife
8
+ type: endoflife
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 10
12
+ canary_query: "python 生命周期"
13
+ desc: "产品生命周期(版本/最新/支持期/EOL,endoflife.date 200+ 产品)"
14
+ coverage: [tech]
15
+ recommended: false
16
+ latency_ms: 2000
17
+
18
+ quality_queries:
19
+ - query: "python 生命周期"
20
+ - query: "nodejs"
21
+ - query: "kubernetes EOL"
@@ -0,0 +1,21 @@
1
+ # Energy-Charts — 欧洲发电结构与可再生占比(Fraunhofer ISE,免认证)
2
+ # 补 energy 域的「发电结构/可再生实时」维度:按国家给逐时发电类型曲线。
3
+ # 文档要求署名(数据来源 Fraunhofer ISE),已在 desc 与 url 体现。
4
+ # 国家码由 builder 侧按查询词解析,默认 de(德国)。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine energy_charts --stage all --admit --write-doc
7
+
8
+ engine_id: energy_charts
9
+ type: energy_charts
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 20
13
+ canary_query: "germany power"
14
+ desc: "Energy-Charts 欧洲发电结构/可再生占比(Fraunhofer ISE,免认证)"
15
+ coverage: [energy, environment, statistics, europe]
16
+ recommended: false
17
+ latency_ms: 2500
18
+
19
+ quality_queries:
20
+ - query: "germany power"
21
+ - query: "france nuclear"
@@ -0,0 +1,52 @@
1
+ # FactCheck.org RSS — 美国事实核查(免 key、免注册)
2
+ #
3
+ # 补的盲区:**「这个说法有没有被核查过」**。这与 argo 已有的任何一族都不同:
4
+ # 新闻族 回答「发生了什么」
5
+ # 百科族 回答「X 是什么」
6
+ # 本引擎 回答「这个具体声明被判定为真/假/误导」
7
+ # 接入前 argo 的核验能力全靠下游对普通搜索结果打分(evidence.py 的来源类型
8
+ # 加权),没有「声明级」的一手判定。argo 的定位本身是「搜索与证据核验」,
9
+ # 这是补一个不存在的功能维度,不是往新闻池里再加一桶水。
10
+ #
11
+ # 实测(2026-09-17):10 条,摘要中位 **482 字**、最长 566——除卫报外全场最高。
12
+ # 核查文本身就是密度型内容(结论 + 依据),所以摘要信息量天然高。
13
+ #
14
+ # 覆盖范围:**以美国政治/公共议题为主**,非全球通用。若要英国口径另见 full_fact。
15
+ #
16
+ # 召回边界:RSS 固定窗口(最近 10 条)+ 本地关键词过滤。10 条意味着命中面很窄,
17
+ # 只有查询正好落在近期核查过的议题上才有结果——这是它的固有限制,不是缺陷;
18
+ # 它的价值是「正好问到点上时给出权威判定」。
19
+ #
20
+ # 验证:
21
+ # python3 scripts/engine_validate.py --engine factcheck_org --stage all --admit
22
+ # python3 scripts/search.py "election" --engine factcheck_org --json
23
+
24
+ engine_id: factcheck_org
25
+ type: rss_feed
26
+ enabled: true
27
+ cost_tier: free
28
+ label: FactCheck.org
29
+ family: verification
30
+ feed_mode: filter
31
+ priority: 28
32
+ qps: 1
33
+ period: second
34
+ cost_per_call: 0.0
35
+ cost_unit: free
36
+ timeout: 12
37
+ feed_url: https://www.factcheck.org/feed/
38
+ langs:
39
+ - en
40
+ canary_query: "president"
41
+ coverage:
42
+ - news
43
+ - verification
44
+ desc: "FactCheck.org(美国事实核查:声明级真伪判定,摘要密度仅次于卫报)"
45
+ recommended: false
46
+
47
+ # 见 guardian_rss 的说明。该种子仅 10 条、逐日轮换,实测 2026-09-17 当日
48
+ # president 命中 8/10、people 10/10——取 president 而非 people,因为后者
49
+ # 是虚义词,命中了也不说明引擎在正确工作。
50
+ quality_queries:
51
+ - query: "president"
52
+ - query: "election"
@@ -0,0 +1,43 @@
1
+ # 法兰克福汇报 RSS — FAZ,德国全国性日报
2
+ #
3
+ # 补的盲区:**de 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),de 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**162 条**,摘要中位 187 字、最长 288 字。
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 faz --stage all --admit
15
+ # python3 scripts/search.py "aktuelle Nachrichten" --engine faz --json
16
+
17
+ engine_id: faz
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: 46
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://www.faz.net/rss/aktuell/
32
+ langs:
33
+ - de
34
+ canary_query: "aktuelle Nachrichten"
35
+ coverage:
36
+ - news
37
+ - germany
38
+ desc: "法兰克福汇报(FAZ,德国全国性日报,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "aktuelle Nachrichten"
43
+ - query: "Wirtschaft Deutschland"
@@ -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: usd
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,36 @@
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
+ # 状态注记(2026-10-21 实测):上游 /2/search 搜索端点已停用(对任意查询返回
10
+ # 空 results,强制调用 6.3s 零结果),status/profile 端点仍正常但不属本引擎职责。
11
+ # X 关键词搜索走 `argo x-search`(ego-browser 通道,见 config.yaml 的 twitter 引擎)
12
+ # 或 `--engine twitter`;单条推文按 URL 取正文仍走 `argo tweet`(twitter_syndication)。
13
+ # 保留注册:上游若恢复搜索端点可直接复用,声明本身无需改动。
14
+ enabled: true
15
+ cost_tier: free
16
+ method: GET
17
+ url: https://api.fxtwitter.com/2/search
18
+ timeout: 10
19
+ query_param: q
20
+ canary_query: "OpenAI"
21
+ desc: "FxTwitter 公开 API:X/Twitter 推文搜索(零认证,含互动元数据)"
22
+ coverage: [social, english]
23
+ recommended: false
24
+
25
+ headers:
26
+ User-Agent: argo-search/1.0 (+fxtwitter)
27
+ Accept: application/json
28
+
29
+ extra_params:
30
+ count: "{n}"
31
+
32
+ output_map:
33
+ items: results
34
+ item_title: text
35
+ item_url: url
36
+ 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"