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