argo-search 1.0.1 → 2.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -21
- package/README.en.md +735 -0
- package/README.es.md +777 -0
- package/README.ja.md +777 -0
- package/README.ko.md +777 -0
- package/README.md +778 -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/why-better.svg +104 -0
- package/assets/readme/workflow.svg +83 -0
- package/backends/domain_profiles.json +2356 -96
- package/backends/engine_registry.yaml +3428 -503
- package/backends/query_synonyms_cn.json +35 -0
- package/backends/quota_profiles.json +2488 -160
- package/backends/source_types_cn.json +109 -0
- package/backends/text_lexicon.json +44 -0
- package/bin/argo +772 -0
- package/bin/argo.js +102 -39
- package/config.yaml +5139 -367
- 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 +575 -0
- package/docs/MCP_SETUP.md +108 -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/RELEASE_NOTES_v2.9.8.md +73 -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/cfets.yaml +41 -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/defillama.yaml +38 -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 +36 -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/gleif.yaml +55 -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/hkex.yaml +40 -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/keenable_free.yaml +36 -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/shfe.yaml +39 -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/tavily_free.yaml +56 -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/yuanbao.yaml +93 -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 +106 -0
- package/package.json +55 -12
- package/packages/dsh-plugin/README.md +152 -0
- package/packages/dsh-plugin/cordis.patch.yml +48 -0
- package/packages/dsh-plugin/dsh/client.js +1533 -0
- package/packages/dsh-plugin/dsh/diagnostics.js +54 -0
- package/packages/dsh-plugin/dsh/index.js +527 -0
- package/packages/dsh-plugin/dsh/native-tools.mjs +749 -0
- package/packages/dsh-plugin/dsh/runner.js +666 -0
- package/packages/dsh-plugin/dsh/wide-research.js +878 -0
- package/packages/dsh-plugin/package.json +38 -0
- package/packages/dsh-plugin/scripts/sync-local.sh +70 -0
- package/packages/dsh-plugin/test/client.test.js +406 -0
- package/packages/dsh-plugin/test/config.test.js +30 -0
- package/packages/dsh-plugin/test/diagnostics.test.js +28 -0
- package/packages/dsh-plugin/test/index.test.js +1382 -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 +294 -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/article_meta.py +131 -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/budget.py +247 -0
- package/scripts/budget_cli.py +93 -0
- package/scripts/build_release_assets.sh +65 -0
- package/scripts/burstiness_detector.py +147 -0
- package/scripts/cache.py +1066 -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/ci_drift_gate.py +90 -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_boundary.py +46 -0
- package/scripts/content_security.py +685 -0
- package/scripts/content_signals.py +751 -0
- package/scripts/crawl.py +74 -35
- package/scripts/cross_lingual_trace.py +293 -0
- package/scripts/daemon.py +866 -0
- package/scripts/digup_bridge.py +214 -0
- package/scripts/dispatch_result.py +98 -0
- package/scripts/engine_admission.py +366 -0
- package/scripts/engine_dispatch.py +982 -0
- package/scripts/engine_env.py +539 -0
- package/scripts/engine_failure.py +411 -0
- package/scripts/engine_families.py +738 -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 +799 -294
- package/scripts/engines_base.py +1521 -0
- package/scripts/engines_builders.py +310 -0
- package/scripts/engines_builders_batch10.py +204 -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_batch14.py +656 -0
- package/scripts/engines_builders_batch15.py +249 -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_keyless.py +111 -0
- package/scripts/engines_builders_search.py +440 -0
- package/scripts/engines_builders_tech.py +1359 -0
- package/scripts/evidence.py +620 -166
- package/scripts/evidence_loop.py +624 -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 +1804 -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 +195 -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.swift +126 -0
- package/scripts/install.ps1 +166 -0
- package/scripts/install.sh +221 -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_image.py +970 -0
- package/scripts/local_seek.py +402 -0
- package/scripts/macro_countries.py +97 -0
- package/scripts/matrix_search_eval.py +1187 -0
- package/scripts/mcp_compact.py +234 -0
- package/scripts/mcp_diag.py +8 -3
- package/scripts/mcp_handlers.py +492 -0
- package/scripts/mcp_handlers_surface.py +157 -0
- package/scripts/mcp_launch.sh +124 -0
- package/scripts/mcp_local.py +241 -0
- package/scripts/mcp_server.py +125 -419
- package/scripts/mcp_setup.py +431 -0
- package/scripts/mcp_tools.py +331 -0
- package/scripts/mcp_transport.py +191 -0
- package/scripts/mcp_warm.py +127 -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/output_transparency.py +200 -0
- package/scripts/paid_policy.py +98 -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 +633 -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/recovery_runner.py +150 -0
- package/scripts/redskill/redskill_engine.py +332 -0
- package/scripts/regression_p0p1.py +318 -0
- package/scripts/replay_eval.py +658 -0
- package/scripts/rerank_tfidf.py +225 -0
- package/scripts/research.py +607 -403
- package/scripts/research_cli.py +361 -0
- package/scripts/research_dossier.py +492 -0
- package/scripts/research_expand.py +169 -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/retry_policy.py +76 -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 +243 -0
- package/scripts/route_combo.py +917 -0
- package/scripts/route_domains.py +341 -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 +886 -406
- package/scripts/search_attribution.py +185 -0
- package/scripts/search_benchmark.py +407 -0
- package/scripts/search_cli.py +640 -0
- package/scripts/search_entry.py +395 -0
- package/scripts/search_output.py +690 -0
- package/scripts/search_pipeline.py +926 -0
- package/scripts/search_rank.py +991 -0
- package/scripts/search_types.py +129 -16
- package/scripts/seek_locator.py +68 -0
- package/scripts/semantic_evidence.py +391 -0
- package/scripts/serp_guard.py +336 -0
- package/scripts/serp_kill_log.py +74 -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 +107 -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 +447 -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/scripts/zhihu_quota.py +139 -0
- package/sub-skills/ego-search/SKILL.md +253 -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/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/local-search/SKILL.md +50 -53
- package/sub-skills/local-search/bm25.py +186 -0
- package/sub-skills/local-search/cli_runner.py +331 -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/parsers.py +328 -0
- package/sub-skills/local-search/search_v3.py +716 -242
- 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/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 +197 -0
|
@@ -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,55 @@
|
|
|
1
|
+
# GLEIF — 全球法人识别编码(LEI)注册库(免 key)
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**「这家公司到底是谁」的跨境法人底稿**。现有 company 源里
|
|
4
|
+
# opencorporates 需要 token(本机实测 401)、SEC EDGAR 只覆盖美国上市公司,
|
|
5
|
+
# GLEIF 是唯一全球口径、免认证的法人主数据:LEI、法定名称、注册地、
|
|
6
|
+
# 总部地址、注册状态、母公司关系(直接/最终母公司)。
|
|
7
|
+
#
|
|
8
|
+
# 端点语义(2026-10-21 实测):fulltext 全文过滤(legalName 过滤器是精确匹配,
|
|
9
|
+
# 「Tencent Holdings」会 0 条;fulltext 能命中「騰訊控股有限公司」),支持中英文原文。
|
|
10
|
+
# GET /api/v1/lei-records?filter[fulltext]=Tencent&page[size]=5
|
|
11
|
+
# → data[].attributes.entity.legalName.name / legalAddress / registration.status
|
|
12
|
+
# 人名/品牌名可能召回近似主体,是「按名检索」的固有限制,不是脏数据。
|
|
13
|
+
#
|
|
14
|
+
# 验证:
|
|
15
|
+
# python3 scripts/engine_validate.py --engine gleif --stage health --admit
|
|
16
|
+
# argo search "Tencent" --engine gleif --json
|
|
17
|
+
|
|
18
|
+
engine_id: gleif
|
|
19
|
+
type: http
|
|
20
|
+
enabled: true
|
|
21
|
+
cost_tier: free
|
|
22
|
+
label: GLEIF 法人标识
|
|
23
|
+
family: knowledge
|
|
24
|
+
priority: 55
|
|
25
|
+
qps: 2
|
|
26
|
+
period: second
|
|
27
|
+
cost_per_call: 0.0
|
|
28
|
+
cost_unit: free
|
|
29
|
+
recommended: false
|
|
30
|
+
|
|
31
|
+
method: GET
|
|
32
|
+
url: https://api.gleif.org/api/v1/lei-records
|
|
33
|
+
query_param: "filter[fulltext]"
|
|
34
|
+
extra_params:
|
|
35
|
+
"page[size]": "{n}"
|
|
36
|
+
timeout: 15
|
|
37
|
+
|
|
38
|
+
canary_query: Tencent
|
|
39
|
+
desc: "GLEIF 全球法人 LEI 注册库(法定名称/注册地/状态/母公司,免 key)"
|
|
40
|
+
coverage: [company, business, legal, org_entity]
|
|
41
|
+
|
|
42
|
+
headers:
|
|
43
|
+
User-Agent: argo-search/2.9 (+gleif)
|
|
44
|
+
Accept: application/json
|
|
45
|
+
|
|
46
|
+
output_map:
|
|
47
|
+
items: data
|
|
48
|
+
item_title: attributes.entity.legalName.name
|
|
49
|
+
item_summary: attributes.entity.legalAddress.addressLines.0
|
|
50
|
+
url_template: https://api.gleif.org/api/v1/lei-records/{id}
|
|
51
|
+
|
|
52
|
+
quality_queries:
|
|
53
|
+
- query: Tencent
|
|
54
|
+
- query: Siemens
|
|
55
|
+
- query: 阿里巴巴
|
|
@@ -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,40 @@
|
|
|
1
|
+
# 港交所披露易(HKEXnews)公告检索(免 key)
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**港股一手公告**。A 股有巨潮(cninfo)、美股有 SEC EDGAR,
|
|
4
|
+
# 港股此前没有对应源——查「腾讯回购」「某股供股」只能落到网页搜索。
|
|
5
|
+
# 披露易是港交所官方发布渠道,公告原文 PDF 直链可用。
|
|
6
|
+
#
|
|
7
|
+
# 端点语义(2026-10-21 实测):两个接口组合。
|
|
8
|
+
# 1) 代码/公司名解析:/search/prefix.do?...&name=<代码或名称>&market=SEHK
|
|
9
|
+
# → callback({stockInfo:[{stockId, code, name}]}),stockId 是内部 ID
|
|
10
|
+
# 2) 公告检索:/search/titleSearchServlet.do?...&stockId=…&title=…&searchType=…
|
|
11
|
+
# → {result: "<JSON 字符串>"},逐条含 TITLE/STOCK_CODE/DATE_TIME/FILE_LINK
|
|
12
|
+
# 文档标题是繁体中文,builder 对高频简体词做了映射;纯简体生僻词可能 0 结果,
|
|
13
|
+
# 此时用代码查询仍可命中(如「00700 回购」)。
|
|
14
|
+
#
|
|
15
|
+
# 验证:
|
|
16
|
+
# python3 scripts/engine_validate.py --engine hkex --stage health --admit
|
|
17
|
+
# argo search "00700 回购" --engine hkex --json
|
|
18
|
+
|
|
19
|
+
engine_id: hkex
|
|
20
|
+
type: hkex
|
|
21
|
+
enabled: true
|
|
22
|
+
cost_tier: free
|
|
23
|
+
label: 港交所披露易
|
|
24
|
+
family: finance_market
|
|
25
|
+
priority: 50
|
|
26
|
+
qps: 1
|
|
27
|
+
period: second
|
|
28
|
+
cost_per_call: 0.0
|
|
29
|
+
cost_unit: free
|
|
30
|
+
recommended: false
|
|
31
|
+
|
|
32
|
+
timeout: 20
|
|
33
|
+
canary_query: "00700"
|
|
34
|
+
desc: "港交所披露易公告检索(港股一手公告 PDF,代码/公司名/标题关键词,免 key)"
|
|
35
|
+
coverage: [finance, stock, hk_stock, legal, official]
|
|
36
|
+
|
|
37
|
+
quality_queries:
|
|
38
|
+
- query: "00700 回购"
|
|
39
|
+
- query: 腾讯 公告
|
|
40
|
+
- query: 汇丰 业绩
|
|
@@ -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"
|
|
@@ -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,36 @@
|
|
|
1
|
+
# Keenable 免 key 通道(官方 MCP 匿名额度)
|
|
2
|
+
#
|
|
3
|
+
# 与 keenable 并列而不是合并:keyenable 的 REST 通道按 ARGO_KEENABLE_API_KEY
|
|
4
|
+
# 计 credits,本通道走官方 MCP 匿名池、不读任何 key。两条通道额度模型不同,
|
|
5
|
+
# 分开注册才能让「免费源不当计费源」的检查各自成立(同 tavily / parallel 先例)。
|
|
6
|
+
#
|
|
7
|
+
# 端点语义(2026-10-21 实测):POST https://api.keenable.ai/mcp,
|
|
8
|
+
# JSON-RPC tools/call → search_web_pages {query, mode:"realtime"};
|
|
9
|
+
# 返回 content[0].text 为纯文本块(Title/URL/Published/Snippets,`---` 分隔)。
|
|
10
|
+
# 匿名池按 IP 限流,失效时返回 4xx/空块,由调度层换源。
|
|
11
|
+
#
|
|
12
|
+
# 验证:
|
|
13
|
+
# python3 scripts/engine_validate.py --engine keenable_free --stage health --admit
|
|
14
|
+
# argo search "OpenAI latest news" --engine keenable_free --json
|
|
15
|
+
|
|
16
|
+
engine_id: keenable_free
|
|
17
|
+
type: keenable_free
|
|
18
|
+
enabled: true
|
|
19
|
+
cost_tier: free
|
|
20
|
+
label: Keenable (keyless)
|
|
21
|
+
family: web_general
|
|
22
|
+
priority: 57
|
|
23
|
+
qps: 1
|
|
24
|
+
period: second
|
|
25
|
+
cost_per_call: 0.0
|
|
26
|
+
cost_unit: free
|
|
27
|
+
recommended: false
|
|
28
|
+
|
|
29
|
+
timeout: 20
|
|
30
|
+
canary_query: OpenAI
|
|
31
|
+
desc: "Keenable 官方免 key 匿名通道(通用网页搜索,无需注册)"
|
|
32
|
+
coverage: [general, english, chinese]
|
|
33
|
+
|
|
34
|
+
quality_queries:
|
|
35
|
+
- query: OpenAI latest news
|
|
36
|
+
- query: 人工智能 最新进展
|
|
@@ -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"
|