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,20 @@
1
+ # K10plus SRU 联合目录(德国最大,SRU 标准协议,免认证)
2
+ # 补 book_search 域的馆藏维度:现有 open_library/gutenberg 偏英文公版,
3
+ # K10plus 覆盖德语区学术馆藏(3000+ 万条),SRU 标准协议可复用到其他 SRU 馆。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine k10plus --stage all --admit --write-doc
6
+
7
+ engine_id: k10plus
8
+ type: k10plus
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 30
12
+ canary_query: "tesla"
13
+ desc: "K10plus 联合目录(德国最大图书馆联合目录,SRU,免认证)"
14
+ coverage: [book, library, academic, german]
15
+ recommended: false
16
+ latency_ms: 2500
17
+
18
+ quality_queries:
19
+ - query: "tesla"
20
+ - query: "kant kritik"
@@ -0,0 +1,44 @@
1
+ # Keenable 搜索引擎(需 ARGO_KEENABLE_API_KEY)
2
+ # 文档: https://docs.keenable.ai/api-reference/search
3
+ # 认证: X-API-Key: keen_<key>(POST /v1/search);keyless 走 /public(公共池限流,此处不用)
4
+ # 额度: 按组织限流 + 消费 credits;响应带 X-RateLimit-* 头,429 带 Retry-After
5
+ # 定位: 通用网络搜索(ranked results:URL/title/description/snippet/published_at)
6
+ # 验证:
7
+ # export ARGO_KEENABLE_API_KEY=<key>
8
+ # python3 scripts/engine_validate.py --engine keenable --stage all --admit --write-doc
9
+ # python3 scripts/search.py "OpenAI" --engine keenable --json
10
+
11
+ engine_id: keenable
12
+ type: http
13
+ enabled: true
14
+ # 免费体验期:量较大,按 free 源对待(auto/fast 均可用),不参与 budget 成本过滤。
15
+ # 不预设「到期后改回 api」——免费期结束或冒问题(额度/报错/变慢)时,
16
+ # 直接置 enabled: false 停用即可(灵活,别为它写自动切换的脆弱逻辑)。
17
+ cost_tier: free
18
+ method: POST
19
+ url: https://api.keenable.ai/v1/search
20
+ timeout: 12
21
+ canary_query: "OpenAI"
22
+ label: Keenable
23
+ family: web_general
24
+ desc: "Keenable 通用网页搜索(ranked results,含 published_at,按 credits 计费)"
25
+ required_env:
26
+ - ARGO_KEENABLE_API_KEY
27
+
28
+ headers:
29
+ X-API-Key: "{ARGO_KEENABLE_API_KEY}"
30
+ Content-Type: application/json
31
+
32
+ # POST body; {query} 查询词,{n} 结果数(Keenable max_results 1-50,int 化)
33
+ body:
34
+ query: "{query}"
35
+ max_results: "{n}"
36
+
37
+ # Keenable 返回 {query, results:[{title,url,description,snippet,published_at,acquired_at}]}
38
+ output_map:
39
+ items: results
40
+ item_title: title
41
+ item_url: url
42
+ item_summary: snippet
43
+ item_source: keenable
44
+ item_published_at: published_at
@@ -0,0 +1,43 @@
1
+ # 费加罗报 RSS — Le Figaro,法国主流日报
2
+ #
3
+ # 补的盲区:**fr 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),fr 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**20 条**,摘要中位 189 字、最长 255 字。
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 lefigaro --stage all --admit
15
+ # python3 scripts/search.py "actualités du jour" --engine lefigaro --json
16
+
17
+ engine_id: lefigaro
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: 45
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://www.lefigaro.fr/rss/figaro_actualites.xml
32
+ langs:
33
+ - fr
34
+ canary_query: "actualités du jour"
35
+ coverage:
36
+ - news
37
+ - france
38
+ desc: "费加罗报(Le Figaro,法国主流日报,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "actualités du jour"
43
+ - query: "politique France"
@@ -0,0 +1,19 @@
1
+ # ListenBrainz 收听趋势(免认证,社区收听统计)
2
+ # 补 media_search 域的「收听热度」维度(musicbrainz 只给元数据,无流行度)。
3
+ # 验证:
4
+ # python3 scripts/engine_validate.py --engine listenbrainz --stage all --admit --write-doc
5
+
6
+ engine_id: listenbrainz
7
+ type: listenbrainz
8
+ enabled: true
9
+ cost_tier: free
10
+ timeout: 15
11
+ canary_query: "pop"
12
+ desc: "音乐收听趋势榜(ListenBrainz,免认证)"
13
+ coverage: [media, music, statistics]
14
+ recommended: false
15
+ latency_ms: 2000
16
+
17
+ quality_queries:
18
+ - query: "pop"
19
+ - query: "jazz"
@@ -0,0 +1,43 @@
1
+ # 泰国民族报 RSS — Matichon,泰国主流日报
2
+ #
3
+ # 补的盲区:**th 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),th 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**50 条**,摘要中位 65 字、最长 65 字。
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 matichon --stage all --admit
15
+ # python3 scripts/search.py "ข่าววันนี้" --engine matichon --json
16
+
17
+ engine_id: matichon
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: 48
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://www.matichon.co.th/feed
32
+ langs:
33
+ - th
34
+ canary_query: "ข่าววันนี้"
35
+ coverage:
36
+ - news
37
+ - thailand
38
+ desc: "泰国民族报(Matichon,泰国主流日报,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "ข่าววันนี้"
43
+ - query: "การเมืองไทย"
@@ -0,0 +1,21 @@
1
+ # Met Museum 藏品库 — 大都会艺术博物馆公开馆藏(免认证,两跳:搜索→详情)
2
+ # 艺术品/博物馆藏品的完全空白补位:49 万藏品含高清公版图像。
3
+ # 二跳结构:search 只回 objectIDs,逐个取详情(上限 6 条控延迟)。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine met_museum --stage all --admit --write-doc
6
+
7
+ engine_id: met_museum
8
+ type: met_museum
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 20
12
+ canary_query: "van gogh"
13
+ desc: "Met Museum 藏品库(艺术/博物馆藏品,两跳搜索,免认证)"
14
+ coverage: [art, museum, culture, media]
15
+ recommended: false
16
+ latency_ms: 3000
17
+
18
+ quality_queries:
19
+ - query: "van gogh"
20
+ - query: "japanese armor"
21
+ - query: "egyptian scarab"
@@ -0,0 +1,45 @@
1
+ # NASA Image and Video Library — 公开航天图像/视频(免认证)
2
+ # 补 earth_science 域的图像素材维度:nasa_cmr 是数据集目录、usgs 是地震目录,
3
+ # 都给不了可看的图。匿名约 30 req/h,无官方契约,qps 从紧。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine nasa_images --stage all --admit --write-doc
6
+
7
+ engine_id: nasa_images
8
+ type: http
9
+ enabled: true
10
+ cost_tier: free
11
+ method: GET
12
+ url: https://images-api.nasa.gov/search
13
+ timeout: 15
14
+ query_param: q
15
+ canary_query: "apollo 11"
16
+ desc: "NASA 图像视频库(公开航天影像,免认证,匿名约 30 req/h)"
17
+ coverage: [earth_science, media]
18
+ recommended: false
19
+ latency_ms: 2000
20
+
21
+ headers:
22
+ User-Agent: argo-search/1.0 (+nasa_images)
23
+ Accept: application/json
24
+
25
+ extra_params:
26
+ media_type: image
27
+ page_size: "{n}"
28
+
29
+ output_map:
30
+ items: collection.items
31
+ item_title: data.0.title
32
+ item_summary: data.0.description
33
+ item_published_at: data.0.date_created
34
+ url_template: "https://images.nasa.gov/details/{data.0.nasa_id}"
35
+ # 图片直链:item.links 是 [{href, rel, render, width, ...}],必须取 .href
36
+ # ——写成 links.0 会被 _coerce_field 丢成空串(dict 不可强转)。
37
+ item_image: links.0.href
38
+
39
+ # NASA 影像是美国政府作品,属公有领域;授权不随条目变化,声明一次即可。
40
+ image_license: "公有领域(NASA,美国政府作品)"
41
+
42
+ quality_queries:
43
+ - query: "apollo 11"
44
+ - query: "hubble telescope"
45
+ - query: "mars rover"
@@ -0,0 +1,38 @@
1
+ # 网易云音乐搜索 — 中文曲库(Web 接口,免认证)
2
+ # 补 media_search 域的中文曲库维度:qq_music 无歌单/专辑元数据深度,
3
+ # itunes 偏欧美曲库。非官方接口,历史上偶加签名——失败诚实空,不做绕过。
4
+ # fee 字段标 VIP 歌曲仅作元数据用途。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine netease_music --stage all --admit --write-doc
7
+
8
+ engine_id: netease_music
9
+ type: http
10
+ enabled: true
11
+ cost_tier: free
12
+ method: GET
13
+ url: https://music.163.com/api/search/get/web
14
+ timeout: 10
15
+ query_param: s
16
+ canary_query: "周杰伦 晴天"
17
+ desc: "网易云音乐搜索(中文曲库/专辑元数据,免认证,非官方接口)"
18
+ coverage: [media, chinese]
19
+ recommended: false
20
+ latency_ms: 1000
21
+
22
+ headers:
23
+ User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
24
+ Referer: https://music.163.com/
25
+
26
+ extra_params:
27
+ type: "1"
28
+ limit: "{n}"
29
+
30
+ output_map:
31
+ items: result.songs
32
+ item_title: name
33
+ item_summary: album.name
34
+ url_template: "https://music.163.com/song?id={id}"
35
+
36
+ quality_queries:
37
+ - query: "周杰伦 晴天"
38
+ - query: "Taylor Swift Love Story"
@@ -0,0 +1,43 @@
1
+ # NHK 新闻 RSS — 日本放送协会主要新闻,公共广播一手源
2
+ #
3
+ # 补的盲区:**ja 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),ja 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**7 条**,摘要中位 103 字、最长 163 字。
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 nhk --stage all --admit
15
+ # python3 scripts/search.py "今日のニュース" --engine nhk --json
16
+
17
+ engine_id: nhk
18
+ type: rss_feed
19
+ enabled: true
20
+ cost_tier: free
21
+ label: NHK 新闻 RSS
22
+ family: world_news
23
+ feed_mode: hot
24
+ relevance_check: false
25
+ priority: 47
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://www3.nhk.or.jp/rss/news/cat0.xml
32
+ langs:
33
+ - ja
34
+ canary_query: "今日のニュース"
35
+ coverage:
36
+ - news
37
+ - japan
38
+ desc: "NHK 新闻(日本放送协会主要新闻,公共广播一手源,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "今日のニュース"
43
+ - query: "日本の政治"
@@ -0,0 +1,20 @@
1
+ # NHTSA vPIC 车辆厂商/车型本体(免认证)
2
+ # 补 shopping 域:车辆厂商/车型标准命名(12361 个厂商),
3
+ # 「某车型属于哪个厂商」类查询的权威答案源。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine nhtsa_vpic --stage all --admit --write-doc
6
+
7
+ engine_id: nhtsa_vpic
8
+ type: nhtsa_vpic
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 20
12
+ canary_query: "tesla"
13
+ desc: "车辆厂商/车型本体(NHTSA vPIC,免认证)"
14
+ coverage: [shopping, vehicle, reference, official]
15
+ recommended: false
16
+ latency_ms: 2500
17
+
18
+ quality_queries:
19
+ - query: "tesla"
20
+ - query: "toyota"
@@ -0,0 +1,20 @@
1
+ # NOAA SWPC 空间天气(官方免认证)
2
+ # 补 astronomy 域的「空间天气」维度:Kp 地磁指数 + 太阳活动区。
3
+ # 榜单型源(查询词不参与过滤),与太阳活动/极光/卫星安全类查询相关。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine noaa_swpc --stage all --admit --write-doc
6
+
7
+ engine_id: noaa_swpc
8
+ type: noaa_swpc
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 15
12
+ canary_query: "solar"
13
+ desc: "空间天气(NOAA SWPC,Kp 指数/太阳活动区,官方免认证)"
14
+ coverage: [astronomy, space, science, official]
15
+ recommended: false
16
+ latency_ms: 2000
17
+
18
+ quality_queries:
19
+ - query: "solar"
20
+ - query: "geomagnetic storm"
@@ -0,0 +1,38 @@
1
+ # NVD CVE API 2.0 — 安全漏洞情报(NIST 官方,免认证)
2
+ # 配额契约:免 key 5 请求/30 秒滚动窗口(免费 key 50/30s,见 nvd.nist.gov/developers/start-here)
3
+ # 验证:
4
+ # python3 scripts/engine_validate.py --engine nvd --stage all --admit --write-doc
5
+ # python3 scripts/search.py "log4j" --engine nvd --json
6
+
7
+ engine_id: nvd
8
+ type: http
9
+ enabled: true
10
+ cost_tier: free
11
+ method: GET
12
+ url: https://services.nvd.nist.gov/rest/json/cves/2.0
13
+ timeout: 12
14
+ query_param: keywordSearch
15
+ canary_query: "log4j"
16
+ desc: "NVD 漏洞情报(CVE 编号/描述/CVSS 与 KEV 标记;免认证 5 请求/30 秒)"
17
+ coverage: [security, tech]
18
+ recommended: false
19
+ latency_ms: 2500
20
+
21
+ headers:
22
+ User-Agent: argo-search/1.0 (+nvd)
23
+ Accept: application/json
24
+
25
+ extra_params:
26
+ resultsPerPage: "5"
27
+
28
+ output_map:
29
+ items: vulnerabilities
30
+ item_title: cve.id
31
+ item_summary: cve.descriptions.0.value
32
+ item_published_at: cve.published
33
+ url_template: "https://nvd.nist.gov/vuln/detail/{cve.id}"
34
+
35
+ quality_queries:
36
+ - query: "log4j"
37
+ - query: "openssl"
38
+ - query: "heartbleed"
@@ -0,0 +1,20 @@
1
+ # OBIS 海洋生物多样性观测(IOC/UNESCO,免认证,2.29 亿条记录)
2
+ # 补 species_search 域的「海洋」维度:现有 gbif 以陆生/通用为主,
3
+ # OBIS 是海洋观测的官方汇总。拉丁学名准确,中文俗名诚实空(交回百科类引擎)。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine obis --stage all --admit --write-doc
6
+
7
+ engine_id: obis
8
+ type: obis
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 15
12
+ canary_query: "Gadus morhua"
13
+ desc: "OBIS 海洋物种观测(IOC/UNESCO 官方,2.29 亿条记录,免认证)"
14
+ coverage: [species, marine, science, open_data]
15
+ recommended: false
16
+ latency_ms: 2000
17
+
18
+ quality_queries:
19
+ - query: "Gadus morhua"
20
+ - query: "Delphinus delphis"
@@ -0,0 +1,52 @@
1
+ # OpenCitations — 引用图谱(免 key、免注册、无限次)
2
+ #
3
+ # 补的盲区:论文的**引用关系与溯源**。Crossref/OpenAlex 给的是出版物元数据,
4
+ # 而「这篇被谁引用 / 引了谁」是另一类问题——用于判断一篇工作的影响力与谱系,
5
+ # 也是证据链里「这个说法有没有后续验证」的入口。
6
+ #
7
+ # 端点语义(实测 2026-09-16):
8
+ # /index/api/v1/citation-count/{doi} → [{"count": "1806"}] 被引数
9
+ # /index/api/v1/citations/{doi} → 引用它的 DOI 列表
10
+ # /index/api/v1/references/{doi} → 它引用的 DOI 列表
11
+ # 本引擎走 citation-count(单值、稳定、体积小),查询词传**裸 DOI**。
12
+ #
13
+ # 验证:
14
+ # python3 scripts/engine_validate.py --engine opencitations --stage health --admit
15
+ # python3 scripts/search.py "10.1038/nature12373" --engine opencitations --json
16
+
17
+ engine_id: opencitations
18
+ type: http
19
+ enabled: true
20
+ # 按 DOI 精查而非关键词检索:传裸 DOI,不参与自动路由
21
+ explicit_only: true
22
+ cost_tier: free
23
+ label: OpenCitations 引用图谱
24
+ family: academic
25
+ priority: 52
26
+ qps: 2
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ method: GET
31
+ url: https://opencitations.net/index/api/v1/citation-count/{query}
32
+ query_param: ""
33
+ timeout: 12
34
+ format: json
35
+ canary_query: "10.1038/nature12373"
36
+ coverage:
37
+ - academic
38
+ - citation
39
+ desc: "OpenCitations 引用计数(DOI → 被引次数,免 key 无限次;查询词传裸 DOI)"
40
+ # 响应是单元素数组 [{"count": "N"}],没有标题/URL 字段。url_template 的 {..}
41
+ # 占位符取自 **item** 而非 query,写 {query} 会渲染成空串,故用静态入口页
42
+ # (与 carbon_intensity 同做法)。
43
+ output_map:
44
+ items: "."
45
+ item_title: "count"
46
+ item_summary: "count"
47
+ url_template: "https://opencitations.net/"
48
+ recommended: false
49
+ latency_ms: 800
50
+
51
+ quality_queries:
52
+ - query: "10.1038/nature12373"
@@ -0,0 +1,21 @@
1
+ # OpenF1 — 一级方程式遥测与赛程(免认证,社区维护)
2
+ # 补 sports_search 域的「赛车」维度(现有 thesportsdb 偏足篮)。
3
+ # 先查 sessions 端点拿 session_key 再查 drivers,两级解析由 builder 完成。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine openf1 --stage all --admit --write-doc
6
+
7
+ engine_id: openf1
8
+ type: openf1
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 20
12
+ canary_query: "verstappen"
13
+ desc: "F1 车手/车队/赛程数据(OpenF1,免认证,社区维护)"
14
+ family: sports
15
+ coverage: [sports, racing, realtime]
16
+ recommended: false
17
+ latency_ms: 2500
18
+
19
+ quality_queries:
20
+ - query: "verstappen"
21
+ - query: "monza"
@@ -0,0 +1,45 @@
1
+ # Open Food Facts — 全球食品成分库(免 key,开放数据库)
2
+ #
3
+ # 补的盲区:**食品/营养**。argo 有 usda(美国农业部食品营养,DEMO_KEY 限流)
4
+ # 但它是单一国别;Open Food Facts 是 200+ 国家的众包食品库,多语言
5
+ # (产品名/配料表按语言分列),免 key 无配额。
6
+ #
7
+ # 实测(2026-09-21):JSON 直出;「nutella」1038 条命中,含 additives_n /
8
+ # brands / 各国产品名。条目数在垂直源里属最高档。
9
+ #
10
+ # 形态:检索式。url 由 url_template 从条码拼出(上游不返回绝对 URL)。
11
+ #
12
+ # 验证:
13
+ # python3 scripts/engine_validate.py --engine openfoodfacts --stage all --admit
14
+
15
+ engine_id: openfoodfacts
16
+ type: http
17
+ enabled: true
18
+ cost_tier: free
19
+ method: GET
20
+ url: https://world.openfoodfacts.org/cgi/search.pl
21
+ timeout: 20
22
+ query_param: search_terms
23
+ canary_query: "nutella"
24
+ family: misc_vertical
25
+ coverage: [food, nutrition, product]
26
+ desc: "Open Food Facts 全球食品成分库(200+ 国家,多语言,免 key)"
27
+ recommended: false
28
+ # 上游按 Accept 头做内容协商:不带 Accept 时返回 503(实测 2026-09-21,
29
+ # 同一 URL 加 Accept: application/json 即 200)——不是限流,是端点策略。
30
+ headers:
31
+ Accept: application/json
32
+ extra_params:
33
+ search_simple: 1
34
+ action: process
35
+ json: 1
36
+ page_size: "{n}"
37
+ output_map:
38
+ items: products
39
+ item_title: product_name
40
+ item_summary: brands
41
+ url_template: "https://world.openfoodfacts.org/product/{code}"
42
+
43
+ quality_queries:
44
+ - query: "nutella"
45
+ - query: "yogurt"
@@ -0,0 +1,20 @@
1
+ # OpenLigaDB 德甲/欧洲联赛赛程比分(免认证)
2
+ # 补 sports_search 域的足球赛程/比分维度(thesportsdb 偏球队元数据)。
3
+ # 验证:
4
+ # python3 scripts/engine_validate.py --engine openligadb --stage all --admit --write-doc
5
+
6
+ engine_id: openligadb
7
+ type: openligadb
8
+ enabled: true
9
+ cost_tier: free
10
+ timeout: 15
11
+ canary_query: "bayern"
12
+ desc: "德甲/欧洲联赛赛程比分(OpenLigaDB,免认证)"
13
+ family: sports
14
+ coverage: [sports, football, realtime]
15
+ recommended: false
16
+ latency_ms: 2000
17
+
18
+ quality_queries:
19
+ - query: "bayern"
20
+ - query: "bundesliga"
@@ -0,0 +1,37 @@
1
+ # OpenReview API2 — 顶会论文与评审意见(免认证)
2
+ # 特点:审稿意见 / meta-review / rebuttal 公开可见,openalex 与
3
+ # semantic_scholar 均不含这一层;content 字段统一为 {value: ...} 包装。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine openreview --stage all --admit --write-doc
6
+
7
+ engine_id: openreview
8
+ type: http
9
+ enabled: true
10
+ cost_tier: free
11
+ method: GET
12
+ url: https://api2.openreview.net/notes/search
13
+ timeout: 12
14
+ query_param: term
15
+ canary_query: "LLM agents"
16
+ desc: "OpenReview 顶会论文(含评审可见性与 PDF,AI/ML 研究为主)"
17
+ coverage: [academic]
18
+ recommended: false
19
+ latency_ms: 3000
20
+
21
+ headers:
22
+ User-Agent: argo-search/1.0 (+openreview)
23
+ Accept: application/json
24
+
25
+ extra_params:
26
+ limit: "10"
27
+
28
+ output_map:
29
+ items: notes
30
+ item_title: content.title.value
31
+ item_summary: content.abstract.value
32
+ url_template: "https://openreview.net/forum?id={id}"
33
+
34
+ quality_queries:
35
+ - query: "LLM agents"
36
+ - query: "transformer"
37
+ - query: "reinforcement learning"
@@ -0,0 +1,21 @@
1
+ # 国家标准全文公开系统 — GB 国标全文在线预览入口(HTML 解析,免认证)
2
+ # 与 std_samr 同库互补:这里给全文预览页(newGbInfo?hcno=),列表为服务端
3
+ # 渲染 HTML,行内 onclick showInfo('hcno') 取详情键。全文 PDF 防复制渲染,
4
+ # 只取元数据(标准号/名称/性质/状态/发布/实施日期)。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine openstd --stage all --admit --write-doc
7
+
8
+ engine_id: openstd
9
+ type: openstd
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 15
13
+ canary_query: "数据安全"
14
+ desc: "国家标准全文公开系统(GB 全文预览入口,HTML 解析,免认证)"
15
+ coverage: [standards, tech, chinese]
16
+ recommended: false
17
+ latency_ms: 2500
18
+
19
+ quality_queries:
20
+ - query: "数据安全"
21
+ - query: "信息技术"
@@ -0,0 +1,22 @@
1
+ # 人民网搜索 — 权威综合中文新闻(官方 JSON 接口,免认证,POST)
2
+ # 现有新闻类源全偏财经(东财/财联社/金十),人民网补权威综合新闻维度。
3
+ # 注意:走 http 而非 https(https 会 301 丢 body)。标题/正文带 <em> 高亮
4
+ # 标签,builder 内剥离。displayTime 为毫秒时间戳。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine people_daily --stage all --admit --write-doc
7
+
8
+ engine_id: people_daily
9
+ type: people_daily
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 12
13
+ canary_query: "人工智能"
14
+ desc: "人民网搜索(权威综合中文新闻,官方接口,免认证)"
15
+ coverage: [news, chinese, realtime]
16
+ recommended: false
17
+ latency_ms: 1200
18
+
19
+ quality_queries:
20
+ - query: "人工智能"
21
+ - query: "经济"
22
+ - query: "教育"