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,34 @@
1
+ # 实时索引数据源(免 Key CLI 桥接)
2
+ # 结构化 YAML 输出,结果带 published_at(发布时间)维度,支持时间窗过滤。
3
+ # 工程侧形态与 hackernews/local_search 一致:声明式 spec + 通用 cli builder,
4
+ # 不新增 Python 特例分支。
5
+ #
6
+ # 部署:将实际索引 CLI 安装/软链为 realtime-index(或把 cmd 改为其绝对路径);
7
+ # cmd 不可用时引擎自动禁用(与其他 CLI 引擎同形态)。
8
+ #
9
+ # 验证:
10
+ # python3 scripts/engine_validate.py --engine realtime_index --stage all --admit
11
+ # python3 scripts/search.py "rust async" --engine realtime_index --since 7d --json
12
+
13
+ engine_id: realtime_index
14
+ type: cli
15
+ enabled: true
16
+ disabled_reason: 运行时按 realtime-index CLI 是否存在翻转(config._validate_engine_paths);未安装 CLI 时等效停用,装好后无需改代码自动启用
17
+ cost_tier: free
18
+ label: 实时索引搜索
19
+ desc: 实时索引数据源(免 Key,结构化输出,带发布时间维度与时间窗过滤)
20
+ canary_query: "climate change"
21
+ cmd:
22
+ - realtime-index
23
+ search_args:
24
+ - search
25
+ - '{query}'
26
+ output_format: yaml
27
+ filter_args:
28
+ since:
29
+ - --published-after
30
+ - '{since}'
31
+ until:
32
+ - --published-before
33
+ - '{until}'
34
+ timeout: 15
@@ -0,0 +1,20 @@
1
+ # ROR 研究机构标识(免认证)
2
+ # 补 org_entity 域的「学术机构」维度:现有 opencorporates/gleif 覆盖企业法人,
3
+ # ROR 是研究机构的唯一标识(含域名映射),机构消歧刚需。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine ror --stage all --admit --write-doc
6
+
7
+ engine_id: ror
8
+ type: ror
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 15
12
+ canary_query: "tsinghua"
13
+ desc: "ROR 研究机构标识(含域名映射,免认证)"
14
+ coverage: [org_entity, academic, reference]
15
+ recommended: false
16
+ latency_ms: 2000
17
+
18
+ quality_queries:
19
+ - query: "tsinghua"
20
+ - query: "max planck"
@@ -0,0 +1,20 @@
1
+ # SatNOGS 卫星目录(免认证)
2
+ # 补 astronomy 域的卫星目录维度(NORAD ID/发射信息),与 tle_mirror 配合
3
+ # 组成「目录 + 轨道根数」。Celestrak 在本机不可达,SatNOGS 提供稳定替代。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine satnogs --stage all --admit --write-doc
6
+
7
+ engine_id: satnogs
8
+ type: satnogs
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 20
12
+ canary_query: "ISS"
13
+ desc: "卫星目录(SatNOGS DB,NORAD ID/发射信息,免认证)"
14
+ coverage: [astronomy, space, satellites, open_data]
15
+ recommended: false
16
+ latency_ms: 2500
17
+
18
+ quality_queries:
19
+ - query: "ISS"
20
+ - query: "starlink"
@@ -0,0 +1,46 @@
1
+ # SEC EDGAR 美国证监会全文检索(免 Key,官方数据)
2
+ # 文档: https://www.sec.gov/search-filings/edgar-search-assistance
3
+ # 注意: SEC 强制要求 User-Agent
4
+ # q 参数只支持裸关键词搜索(如 q=apple 或 q="apple 10-K"),不支持 field:syntax。
5
+ # 表单过滤必须走 forms= 参数(efts 的 q 参数里写 form_type:10-K 返回 0 条)。
6
+ # 验证:
7
+ # python3 scripts/engine_validate.py --engine sec_edgar --stage all --admit
8
+ # python3 scripts/search.py "apple" --engine sec_edgar --json
9
+ # python3 scripts/search.py "apple" --engine sec_edgar --forms 10-K --json
10
+
11
+ engine_id: sec_edgar
12
+ type: http
13
+ enabled: true
14
+ cost_tier: free
15
+ method: GET
16
+ url: https://efts.sec.gov/LATEST/search-index
17
+ timeout: 15
18
+ query_param: q
19
+ extra_params:
20
+ # forms 默认 10-K:年报是这一源最常被问的表单类型,不传也给出可用结果。
21
+ # 其余三个参数 CLI 暂无开关(ciks=公司 CIK、startdt/enddt=申报日期窗),
22
+ # 留空即不下发有效过滤——需要时先把开关接进 search_cli 再填占位符。
23
+ forms: "10-K"
24
+ ciks: ""
25
+ startdt: ""
26
+ enddt: ""
27
+ canary_query: "apple"
28
+ desc: "SEC EDGAR 美国证监会官方全文检索(公司/财报/申报,免认证)"
29
+ coverage: [finance, us_stock, legal, company]
30
+ # 能力族:这个源回答「某家公司的财报/申报文件是什么」,属公司财务披露。
31
+ # 此前没声明,被静默当成 web_general——后果是它跟通用搜索引擎同族比较,
32
+ # 在排序里被顶到后面,而且会被恢复链当成「安全族」误放行。
33
+ family: finance_market
34
+ recommended: false
35
+
36
+ headers:
37
+ User-Agent: argo-search/1.0 (research contact@example.com)
38
+ Accept: application/json
39
+
40
+ output_map:
41
+ items: hits.hits
42
+ item_title: _source.display_names.0
43
+ # 文档本体 URL:Archives/edgar/data/{cik}/{accession_no_dashes}/{primary_doc}
44
+ # 如果 efts 返回 accession 字段则拼文档本体,否则回退到 browse 页
45
+ url_template: https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK={_source.ciks.0}&type={forms}&dateb=&owner=include&count=40
46
+ item_summary: _source.file_description
@@ -0,0 +1,50 @@
1
+ # SkillsMP — Agent Skills 聚合目录(skill 域跨生态技能索引,GET JSON,keyless)
2
+ # 技能域的广覆盖目录源:独立索引 200 万+ 开源技能,支持语言/职业过滤,
3
+ # 与 redskill(小红书生态 47650 技能本地缓存)互补不重复(不同上游、不同生态)。
4
+ # 免费 REST API 无需密钥(bearerAuth 仅用于提额);sortBy=stars 按仓库热度排序,
5
+ # stars 口径是源仓库星数非安装量,与 skills.sh 安装遥测、ClawHub 下载量互不可比。
6
+ # 可选过滤参数(按需加进 extra_params):language(ISO 码,如 zh)、category、occupation。
7
+ # 验证:
8
+ # python3 scripts/engine_validate.py --engine skillsmp --stage all --admit --write-doc
9
+
10
+ engine_id: skillsmp
11
+ type: http
12
+ enabled: true
13
+ cost_tier: free
14
+ label: SkillsMP 技能目录
15
+ family: misc_vertical
16
+ priority: 50
17
+ qps: 2
18
+ period: second
19
+ limit: null
20
+ cost_per_call: 0.0
21
+ cost_unit: free
22
+ method: GET
23
+ url: https://skillsmp.com/api/v1/skills/search
24
+ timeout: 15
25
+ canary_query: "git commit"
26
+ coverage:
27
+ - skill
28
+ - developer
29
+ - tech
30
+ desc: "SkillsMP Agent 技能聚合目录(200万+ 开源技能独立索引,免费 keyless REST API,stars 排序)"
31
+ format: json
32
+ query_param: q
33
+ extra_params:
34
+ limit: "{n}"
35
+ sortBy: stars
36
+ output_map:
37
+ items: data.skills
38
+ item_title: name
39
+ item_url: skillUrl
40
+ item_summary: description
41
+ # 可验证出处:githubUrl 指向该技能在上游仓里的**目录**(…/tree/main/.agents/
42
+ # skills/xxx),是能核对、能安装的那个地址;skillUrl 只是市场页。
43
+ item_upstream: githubUrl
44
+ # updatedAt 是 epoch **秒**(ClawHub 同名字段是毫秒,差 1000 倍,由
45
+ # engines_base._normalize_epoch 按量级归一成日期)。
46
+ item_published_at: updatedAt
47
+ quality_queries:
48
+ - query: "git commit"
49
+ - query: "code review"
50
+ - query: "pdf"
@@ -0,0 +1,30 @@
1
+ # 搜狗微信搜索·浏览器兜底通道(ego-browser)
2
+ # 定位:HTTP 快车道 wechat_sogou(spec 在 config.yaml wechat_search 路由)被
3
+ # 搜狗反爬墙拦截(302 antispiderwall)时的域内兜底——借 ego-browser 驱动用户
4
+ # 默认浏览器的真实会话拉取同源结果页,指纹与 cookie 连续,2026-09-30 实测
5
+ # 连查无风控(对比:raw curl 第 2 次查询即被墙)。只挂在 wechat_search 路由
6
+ # 的 engines_combo 里(primary 之后、anysearch 之前),不进任何通用池。
7
+ # 实现:scripts/sogou_weixin_browser.py(纯标准库;空间复用+文件锁+最小间隔;
8
+ # 中间链在浏览器会话内解析为 mp.weixin.qq.com 真实链接,语义与 HTTP 车道对齐)
9
+ # 验证:
10
+ # python3 scripts/engine_validate.py --engine sogou_weixin_browser --stage all --admit
11
+ # python3 scripts/search.py "公众号 石墨化" --engine sogou_weixin_browser --json
12
+
13
+ engine_id: sogou_weixin_browser
14
+ type: cli
15
+ enabled: true
16
+ cost_tier: free
17
+ cmd:
18
+ - python3
19
+ - scripts/sogou_weixin_browser.py
20
+ search_args:
21
+ - '{query}'
22
+ - --n
23
+ - '{n}'
24
+ output_format: yaml
25
+ timeout: 75
26
+ canary_query: "人工智能"
27
+ desc: "搜狗微信搜索·浏览器兜底通道(ego-browser 真实会话,HTTP 车道被反爬时保底;中间链会话内解析为微信真实链接)"
28
+ coverage: [chinese, wechat, article]
29
+ recommended: false
30
+ family: web_general
@@ -0,0 +1,25 @@
1
+ # ISRIC SoilGrids 全球土壤属性(逐点栅格,免认证)——【暂不启用】
2
+ # 2026-09-13 实测:端点可达、schema 正确,但**所有 property × 所有深度的 values 全为 null**
3
+ # (clay/sand/silt/soc/nitrogen/phh2o/bdod × 0-5cm… 全空,多坐标复核一致),
4
+ # 属服务端降级(此前 also 出现过 503)。builder 逻辑已验证正确,待上游恢复后
5
+ # 把 enabled 改回 true 即可启用,无需改代码。
6
+ # 补 earth_science 域的「土壤」维度:usgs(地震/水文)、nasa_cmr(地球观测)、
7
+ # 现在加上土壤属性。查地名 → 地理编码 → 取该点土壤理化属性。
8
+ # 验证:
9
+ # python3 scripts/engine_validate.py --engine soilgrids --stage all --admit --write-doc
10
+
11
+ engine_id: soilgrids
12
+ type: soilgrids
13
+ enabled: false
14
+ disabled_reason: 72fd95a 源治理轮批量停用,未单独评估;土壤数据查询占比低,重开前需实测对比
15
+ cost_tier: free
16
+ timeout: 25
17
+ canary_query: "amsterdam"
18
+ desc: "全球土壤属性(ISRIC SoilGrids,逐点栅格,免认证)"
19
+ coverage: [earth_science, agriculture, environment]
20
+ recommended: false
21
+ latency_ms: 4000
22
+
23
+ quality_queries:
24
+ - query: "amsterdam"
25
+ - query: "nairobi"
@@ -0,0 +1,36 @@
1
+ # 少数派搜索 — 中文效率/数码/软件内容(JSON API,免认证)
2
+ # 补 cn_tech_community 域的效率工具/数码生活维度:juejin/v2ex 偏开发向。
3
+ # v3 路径已 404,用 v1;版本漂移风险自担,失败诚实空。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine sspai --stage all --admit --write-doc
6
+
7
+ engine_id: sspai
8
+ type: http
9
+ enabled: true
10
+ cost_tier: free
11
+ method: GET
12
+ url: https://sspai.com/api/v1/search/article/page/get
13
+ timeout: 10
14
+ query_param: title
15
+ canary_query: "notion"
16
+ desc: "少数派搜索(中文效率/数码/软件文章,免认证)"
17
+ coverage: [chinese, tech, article]
18
+ recommended: false
19
+ latency_ms: 1000
20
+
21
+ headers:
22
+ 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
23
+
24
+ extra_params:
25
+ offset: "0"
26
+ limit: "{n}"
27
+
28
+ output_map:
29
+ items: data
30
+ item_title: title
31
+ item_summary: summary
32
+ url_template: "https://sspai.com/post/{id}"
33
+
34
+ quality_queries:
35
+ - query: "notion"
36
+ - query: "iphone"
@@ -0,0 +1,46 @@
1
+ # StackExchange API 族引擎(180+ 问答站官方 API,keyless 匿名直连)
2
+ # 文档: https://api.stackexchange.com/docs/search
3
+ # 额度: 匿名 300/天/IP(全站共享配额,实测 quota_remaining 299/300);
4
+ # 免费注册 key 后 10,000/天——需要提额时在 extra_params 加
5
+ # key: "{ARGO_STACKEXCHANGE_API_KEY}" 并配置该环境变量
6
+ # 特点: search/advanced 端点 q 自由文本检索,items 自带 link(无需拼 URL)、
7
+ # score/IsAnswered 质量信号;--compressed(gzip)由 http_client 统一解压
8
+ # 定位: T2 补充引擎 —— 免费池可路由(daily_support),匿名额度小,
9
+ # 日常 combo 排后排保配额(engine_policy.get_engine_tier 读 spec.tier)
10
+ # 验证:
11
+ # python3 scripts/engine_validate.py --engine stackexchange --stage all --admit
12
+ # python3 scripts/search.py "python asyncio" --engine stackexchange --json
13
+
14
+ engine_id: stackexchange
15
+ type: http
16
+ enabled: true
17
+ cost_tier: free
18
+ # 匿名额度小(300/天/IP 与全站共享),日常只当补位,budget 截断优先命中
19
+ tier: daily_support
20
+ label: StackExchange 问答族
21
+ family: knowledge
22
+ priority: 45
23
+ qps: 1
24
+ period: day
25
+ limit: 300
26
+ cost_per_call: 1.0
27
+ cost_unit: request
28
+ method: GET
29
+ url: https://api.stackexchange.com/2.3/search/advanced
30
+ timeout: 12
31
+ canary_query: "python asyncio"
32
+ coverage:
33
+ - english
34
+ - tech
35
+ desc: "StackExchange API 族(StackOverflow 等 180+ 问答站结构化检索,匿名 300/天/IP,免费 key 可提额 10000/天)"
36
+ format: json
37
+ query_param: q
38
+ extra_params:
39
+ site: stackoverflow
40
+ order: desc
41
+ sort: relevance
42
+ pagesize: "{n}"
43
+ output_map:
44
+ items: items
45
+ item_title: title
46
+ item_url: link
@@ -0,0 +1,21 @@
1
+ # 全国标准信息公共服务平台 — 国标/行标检索(JSON API,免认证)
2
+ # 标准文档域补位:RFC 有、国标无。C_C_NAME 带 <sacinfo> 高亮标签需剥离,
3
+ # 标题由「标准号 + 名称」拼装。id 字段即 openstd hcno,直通全文页。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine std_samr --stage all --admit --write-doc
6
+
7
+ engine_id: std_samr
8
+ type: std_samr
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 12
12
+ canary_query: "数据安全"
13
+ desc: "全国标准信息公共服务平台(国标检索,标准号/状态/日期,免认证)"
14
+ coverage: [standards, tech, chinese]
15
+ recommended: false
16
+ latency_ms: 1500
17
+
18
+ quality_queries:
19
+ - query: "数据安全"
20
+ - query: "个人信息保护"
21
+ - query: "网络安全"
@@ -0,0 +1,43 @@
1
+ # 塔斯社 RSS — 俄罗斯国家通讯社(ТАСС),俄语一手新闻
2
+ #
3
+ # 补的盲区:**ru 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),ru 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**100 条**,摘要中位 64 字、最长 304 字。
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 tass --stage all --admit
15
+ # python3 scripts/search.py "новости сегодня" --engine tass --json
16
+
17
+ engine_id: tass
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: 41
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://tass.ru/rss/v2.xml
32
+ langs:
33
+ - ru
34
+ canary_query: "новости сегодня"
35
+ coverage:
36
+ - news
37
+ - russia
38
+ desc: "塔斯社(俄罗斯国家通讯社(ТАСС),俄语一手新闻,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "новости сегодня"
43
+ - query: "Россия экономика"
@@ -0,0 +1,21 @@
1
+ # TLE 两行根数镜像(第三方,免认证)
2
+ # 补 astronomy 域的轨道根数:官方 Celestrak 在本机网络不可达(TLS 握手失败),
3
+ # 此镜像提供同构数据。**第三方非官方 SLA**,接入时应配 fallback 链
4
+ # (Celestrak 官方 → 本镜像),失败诚实空。
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine tle_mirror --stage all --admit --write-doc
7
+
8
+ engine_id: tle_mirror
9
+ type: tle_mirror
10
+ enabled: true
11
+ cost_tier: free
12
+ timeout: 15
13
+ canary_query: "ISS"
14
+ desc: "TLE 轨道根数镜像(第三方,Celestrak 不可达时替代,免认证)"
15
+ coverage: [astronomy, space, satellites]
16
+ recommended: false
17
+ latency_ms: 2000
18
+
19
+ quality_queries:
20
+ - query: "ISS"
21
+ - query: "NOAA"
@@ -0,0 +1,37 @@
1
+ # 火车余票/中转/经停查询(免 Key)
2
+ # 数据源: 12306 官方接口(init 取会话 Cookie → queryG 查余票 / lcquery 查中转 /
3
+ # queryTrainInfo 查经停),免 Key,查询路径运行时解析跟随官方改版
4
+ # 能力: 自然语言查询车次时刻与余票("上海到北京 后天 G")、中转换乘方案
5
+ # ("北京到拉萨 中转",可「经西宁」指定换乘站)、全程经停("G2 经停")
6
+ # 输出: 行 URL 带查询身份参数(train_code/first_train_no 等)——表格行不共享
7
+ # 裸 URL,避免被 URL 去重折叠成一条(fred/worldbank 时序引擎同款约定)
8
+ # 实现: scripts/train.py(纯标准库,站点表 station_name.js 解析 + 7 天缓存,输出结构化 YAML)
9
+ # 验证:
10
+ # python3 scripts/engine_validate.py --engine train --stage all --admit
11
+ # python3 scripts/search.py "上海到北京高铁" --engine train --json
12
+ # python3 scripts/search.py "北京到拉萨 中转" --engine train --json
13
+ # python3 scripts/search.py "G2 经停" --engine train --json
14
+
15
+ engine_id: train
16
+ type: cli
17
+ enabled: true
18
+ cost_tier: free
19
+ label: 火车余票
20
+ desc: 火车余票/中转/经停查询(免 Key:12306 官方接口)
21
+ canary_query: "北京到上海"
22
+ cmd:
23
+ - python3
24
+ - scripts/train.py
25
+ search_args:
26
+ - '{query}'
27
+ - --n
28
+ - '{n}'
29
+ output_format: yaml
30
+ timeout: 20
31
+ family: misc_vertical
32
+ # 质量门禁自述查询集:通用英文探针(Python asyncio 等)会被当站名解析,
33
+ # 必然 rc=2——垂直引擎按 engine_validate 的设计自述适用集,标准不降
34
+ quality_queries:
35
+ - {id: tickets_zh, query: "上海到北京 高铁", category: travel}
36
+ - {id: transfer_zh, query: "北京到上海 中转", category: travel}
37
+ - {id: route_zh, query: "G2 经停", category: travel}
@@ -0,0 +1,20 @@
1
+ # TVMaze 电视剧元数据(免认证)
2
+ # 补 film_search 域的「剧集/电视」维度:现有 imdb/douban_movie 偏电影,
3
+ # TVMaze 按剧集组织且含播出日期与语言,适合「某剧哪年首播」类查询。
4
+ # 验证:
5
+ # python3 scripts/engine_validate.py --engine tvmaze --stage all --admit --write-doc
6
+
7
+ engine_id: tvmaze
8
+ type: tvmaze
9
+ enabled: true
10
+ cost_tier: free
11
+ timeout: 15
12
+ canary_query: "dark"
13
+ desc: "电视剧元数据(TVMaze,免认证,含首播/语言/评分)"
14
+ coverage: [film, tv, media, entertainment]
15
+ recommended: false
16
+ latency_ms: 2000
17
+
18
+ quality_queries:
19
+ - query: "dark"
20
+ - query: "breaking bad"
@@ -0,0 +1,31 @@
1
+ # X/Twitter 单条推文(syndication 免登录通道)
2
+ #
3
+ # 定位:按推文取单条的抽取型引擎,与 twitter(搜索型)互为补充。
4
+ # 通道原理:面向第三方网页嵌入的公开接口,访问凭证由推文 ID 本地推导
5
+ #(见 engines_builders_intl.syndication_token),无需任何账号或密钥——
6
+ # X 网页与官方 API 对未登录请求一律拒绝,这是常年可用的第二条通道。
7
+ #
8
+ # 查询词形态:推文 URL(x.com / twitter.com / 分享链接带 tweet_id 参数)或裸 ID。
9
+ # 示例:
10
+ # python3 scripts/search.py "https://x.com/elonmusk/status/1585841080431321088" --engine twitter_syndication --json
11
+
12
+ engine_id: twitter_syndication
13
+ type: twitter_syndication
14
+ enabled: true
15
+ cost_tier: free
16
+ timeout: 8
17
+ canary_query: "https://x.com/elonmusk/status/1585841080431321088"
18
+ desc: "X/Twitter 单条推文(syndication 通道,免登录零 key,含正文/作者/时间/媒体计数)"
19
+ coverage: [social]
20
+ recommended: false
21
+ # explicit_only:关键词查询永不触发(无搜索端点),只能按 URL/ID 显式调用;
22
+ # known-url 交接会提示该通道。声明在此,不计入死源。
23
+ explicit_only: true
24
+ latency_ms: 2000
25
+
26
+ # 抽取型引擎:查询词是推文 URL 而非关键词。质量自述集用真实推文 URL,
27
+ # 避免默认关键词探针对单条抽取引擎误判「零结果」
28
+ quality_queries:
29
+ - query: "https://x.com/elonmusk/status/1585841080431321088"
30
+ - query: "https://twitter.com/elonmusk/status/1585841080431321088"
31
+ - query: "1585841080431321088"
@@ -0,0 +1,23 @@
1
+ # UN Comtrade — 双边商品贸易(preview 端点免 key;正式端点免费注册提额)
2
+ # 查询形态:「<国家> <HS 码> [年份] [出口]」,如「中国 8541」「美国 8542 2024 出口」。
3
+ # 国家词表 35 个主要经济体;未提供国家或 HS 码诚实返回空(参数解析不做猜测)。
4
+ # preview 返回代码与数值(Desc 字段为 null),标题用查询词回显、每条附
5
+ # comtradeplus 网页链接可核验。
6
+ # 验证:
7
+ # python3 scripts/engine_validate.py --engine un_comtrade --stage all --admit --write-doc
8
+
9
+ engine_id: un_comtrade
10
+ type: un_comtrade
11
+ enabled: true
12
+ cost_tier: free
13
+ timeout: 15
14
+ canary_query: "中国 8541 2023"
15
+ desc: "UN Comtrade 双边贸易(国家+HS 码+年份+流向;preview 免 key)"
16
+ coverage: [macro, finance]
17
+ recommended: false
18
+ latency_ms: 4000
19
+
20
+ quality_queries:
21
+ - query: "中国 8541 2023"
22
+ - query: "美国 8703 2023 出口"
23
+ - query: "日本 8542 2023"
@@ -0,0 +1,54 @@
1
+ # Unpaywall — 开放获取全文定位(免 key,但**必须带真实邮箱**)
2
+ #
3
+ # 补的盲区:这不是搜索源,而是「论文 → 合法免费全文」的**后置解析器**。
4
+ # 用户搜到一篇论文后,真正的问题常是「有没有免费合法全文」。Unpaywall 专门
5
+ # 解决这件事,是 argo 学术链路从「找到论文」升级到「找到合法全文」的关键一环:
6
+ # paper_found → DOI → Unpaywall → 合法 OA 全文 → fetch
7
+ #
8
+ # 端点语义(实测 2026-09-16):
9
+ # /v2/{doi}?email=<邮箱> → 单对象:is_oa / best_oa_location.url / title ...
10
+ # 邮箱是**硬要求**:上游校验邮箱真实性,测试域名会被 422 拒(实测
11
+ # "Please use your own email address")。故走环境变量注入,不写死在仓里。
12
+ #
13
+ # 用法:显式专用(explicit_only)——查询词传裸 DOI,不参与自动路由。
14
+ #
15
+ # 验证(需先设 ARGO_UNPAYWALL_EMAIL):
16
+ # ARGO_UNPAYWALL_EMAIL=you@example.org python3 scripts/search.py \
17
+ # "10.1038/nature12373" --engine unpaywall --json
18
+
19
+ engine_id: unpaywall
20
+ type: http
21
+ enabled: true
22
+ # 按 DOI 精查,不参与关键词路由
23
+ explicit_only: true
24
+ cost_tier: free
25
+ label: Unpaywall 开放获取定位
26
+ family: academic
27
+ priority: 53
28
+ qps: 2
29
+ period: second
30
+ cost_per_call: 0.0
31
+ cost_unit: free
32
+ method: GET
33
+ # 邮箱从环境变量注入。占位符写**裸名** UNPAYWALL_EMAIL:engine_env 的
34
+ # PLACEHOLDER_ALIASES 会按 [ARGO_UNPAYWALL_EMAIL, UNPAYWALL_EMAIL] 顺序解析;
35
+ # 若这里直接写 ARGO_UNPAYWALL_EMAIL,别名表未命中时会再补一次 ARGO_ 前缀,
36
+ # 报错信息会变成难懂的 ARGO_ARGO_UNPAYWALL_EMAIL(已实测)。
37
+ # 未设置时引擎报 skipped-missing-env(如实提示),而非静默空结果。
38
+ url: https://api.unpaywall.org/v2/{query}?email={UNPAYWALL_EMAIL}
39
+ query_param: ""
40
+ timeout: 12
41
+ format: json
42
+ canary_query: "10.1038/nature12373"
43
+ coverage:
44
+ - academic
45
+ - open_access
46
+ desc: "Unpaywall 开放获取定位(DOI → 是否有合法免费全文及链接;需 ARGO_UNPAYWALL_EMAIL)"
47
+ # 不写 output_map:响应是单对象根、且答案在嵌套字段里,声明式 output_map 只
48
+ # 支持数组根。由 scripts/engines_base.py 的 _CUSTOM_JSON_PARSERS["unpaywall"]
49
+ # 专用解析(与 doi 同一机制)。
50
+ recommended: false
51
+ latency_ms: 900
52
+
53
+ quality_queries:
54
+ - query: "10.1038/nature12373"
@@ -0,0 +1,43 @@
1
+ # VnExpress RSS — 越南最大网络新闻
2
+ #
3
+ # 补的盲区:**vi 本地一手新闻**。接入前 argo 的新闻链路只有中英源
4
+ # (google_news/guardian_rss/dw_news/france24 都是英语视角),vi 查询
5
+ # 拿不到本地一手报道。
6
+ #
7
+ # 实测(2026-09-21):**49 条**,摘要中位 140 字、最长 202 字。
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 vnpress --stage all --admit
15
+ # python3 scripts/search.py "tin tức hôm nay" --engine vnpress --json
16
+
17
+ engine_id: vnpress
18
+ type: rss_feed
19
+ enabled: true
20
+ cost_tier: free
21
+ label: VnExpress RSS
22
+ family: world_news
23
+ feed_mode: hot
24
+ relevance_check: false
25
+ priority: 49
26
+ qps: 1
27
+ period: second
28
+ cost_per_call: 0.0
29
+ cost_unit: free
30
+ timeout: 12
31
+ feed_url: https://vnexpress.net/rss/tin-moi-nhat.rss
32
+ langs:
33
+ - vi
34
+ canary_query: "tin tức hôm nay"
35
+ coverage:
36
+ - news
37
+ - vietnam
38
+ desc: "VnExpress(越南最大网络新闻,免 key)"
39
+ recommended: false
40
+
41
+ quality_queries:
42
+ - query: "tin tức hôm nay"
43
+ - query: "kinh tế Việt Nam"
@@ -0,0 +1,32 @@
1
+ # 天气查询(免 Key)
2
+ # 数据源: wttr.in(主用,免费公开)+ Open-Meteo(兜底,需要坐标)
3
+ # 能力: 按地点名(城市/机场码/邮编)或坐标查询当前天气与未来预报
4
+ # 实现: scripts/wx.py(纯标准库,输出结构化 YAML 结果列表)
5
+ # 验证:
6
+ # python3 scripts/engine_validate.py --engine weather --stage all --admit
7
+ # python3 scripts/search.py "上海天气" --engine weather --json
8
+
9
+ engine_id: weather
10
+ type: cli
11
+ enabled: true
12
+ cost_tier: free
13
+ cmd:
14
+ - python3
15
+ - scripts/wx.py
16
+ search_args:
17
+ - '{query}'
18
+ - --n
19
+ - '{n}'
20
+ output_format: yaml
21
+ timeout: 15
22
+ canary_query: "Shanghai"
23
+ desc: "天气查询(免 Key:wttr.in 主用 + Open-Meteo 兜底,当前+未来预报)"
24
+ coverage: [weather, forecast, geo]
25
+ recommended: false
26
+ # 数据型源:回答的是天气数据而非与查询词面匹配的文档,相关性判据不适用。
27
+ # 实证:canary "Shanghai" 返回 wttr.in 的中文本地化结果(「上海…」),拉丁
28
+ # 查询配 CJK 输出零词面交集,2026-09-16 实测被相关性门判负——同热榜类,
29
+ # 标准不降,只是问错了问题。
30
+ relevance_check: false
31
+
32
+ family: misc_vertical