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,38 @@
|
|
|
1
|
+
# crt.sh — 证书透明度日志搜索(免认证,comodo/Sectigo 维护)
|
|
2
|
+
# 补 security_search 域的子域名/证书情报维度(资产测绘、钓鱼域发现),
|
|
3
|
+
# NVD 只覆盖漏洞不覆盖暴露面。响应偏慢(常见 10-40s),超时放宽、延迟声明从宽。
|
|
4
|
+
# 配额契约:无官方限额,声明 qps 从紧。
|
|
5
|
+
# 验证:
|
|
6
|
+
# python3 scripts/engine_validate.py --engine crt_sh --stage all --admit --write-doc
|
|
7
|
+
|
|
8
|
+
engine_id: crt_sh
|
|
9
|
+
type: http
|
|
10
|
+
enabled: true
|
|
11
|
+
cost_tier: free
|
|
12
|
+
method: GET
|
|
13
|
+
url: https://crt.sh/
|
|
14
|
+
timeout: 45
|
|
15
|
+
query_param: q
|
|
16
|
+
canary_query: "example.com"
|
|
17
|
+
desc: "crt.sh 证书透明度日志(子域名/证书情报,免认证,响应较慢)"
|
|
18
|
+
coverage: [security, tech]
|
|
19
|
+
recommended: false
|
|
20
|
+
latency_ms: 15000
|
|
21
|
+
|
|
22
|
+
headers:
|
|
23
|
+
User-Agent: argo-search/1.0 (+crt_sh)
|
|
24
|
+
Accept: application/json
|
|
25
|
+
|
|
26
|
+
extra_params:
|
|
27
|
+
output: json
|
|
28
|
+
|
|
29
|
+
output_map:
|
|
30
|
+
items: "."
|
|
31
|
+
item_title: common_name
|
|
32
|
+
item_summary: issuer_name
|
|
33
|
+
item_published_at: not_before
|
|
34
|
+
url_template: "https://crt.sh/?id={id}"
|
|
35
|
+
|
|
36
|
+
quality_queries:
|
|
37
|
+
- query: "example.com"
|
|
38
|
+
- query: "github.com"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 捷克电视台24 RSS — ČT24,捷克公共电视新闻
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**cs 本地一手新闻**。接入前 argo 的新闻链路只有中英源
|
|
4
|
+
# (google_news/guardian_rss/dw_news/france24 都是英语视角),cs 查询
|
|
5
|
+
# 拿不到本地一手报道。
|
|
6
|
+
#
|
|
7
|
+
# 实测(2026-09-21):**30 条**,摘要中位 433 字、最长 828 字。
|
|
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 ct24 --stage all --admit
|
|
15
|
+
# python3 scripts/search.py "dnešní zprávy" --engine ct24 --json
|
|
16
|
+
|
|
17
|
+
engine_id: ct24
|
|
18
|
+
type: rss_feed
|
|
19
|
+
enabled: true
|
|
20
|
+
cost_tier: free
|
|
21
|
+
label: 捷克电视台24 RSS
|
|
22
|
+
family: world_news
|
|
23
|
+
feed_mode: hot
|
|
24
|
+
relevance_check: false
|
|
25
|
+
priority: 53
|
|
26
|
+
qps: 1
|
|
27
|
+
period: second
|
|
28
|
+
cost_per_call: 0.0
|
|
29
|
+
cost_unit: free
|
|
30
|
+
timeout: 12
|
|
31
|
+
feed_url: https://ct24.ceskatelevize.cz/rss/hlavni-zpravy
|
|
32
|
+
langs:
|
|
33
|
+
- cs
|
|
34
|
+
canary_query: "dnešní zprávy"
|
|
35
|
+
coverage:
|
|
36
|
+
- news
|
|
37
|
+
- czech
|
|
38
|
+
desc: "捷克电视台24(ČT24,捷克公共电视新闻,免 key)"
|
|
39
|
+
recommended: false
|
|
40
|
+
|
|
41
|
+
quality_queries:
|
|
42
|
+
- query: "dnešní zprávy"
|
|
43
|
+
- query: "ekonomika Česko"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# DataCite 科研数据集搜索(免 Key)
|
|
2
|
+
# 文档: https://support.datacite.org/docs/api-getting-started
|
|
3
|
+
# 验证:
|
|
4
|
+
# python3 scripts/engine_validate.py --engine datacite --stage all --admit
|
|
5
|
+
# python3 scripts/search.py "genome" --engine datacite --json
|
|
6
|
+
|
|
7
|
+
engine_id: datacite
|
|
8
|
+
type: http
|
|
9
|
+
enabled: true
|
|
10
|
+
cost_tier: free
|
|
11
|
+
method: GET
|
|
12
|
+
url: https://api.datacite.org/dois
|
|
13
|
+
timeout: 15
|
|
14
|
+
query_param: query
|
|
15
|
+
canary_query: "genome"
|
|
16
|
+
desc: "DataCite 科研数据集搜索(Dryad/Figshare/Dataverse/OSF 等仓储,免认证)"
|
|
17
|
+
coverage: [dataset, academic, opendata]
|
|
18
|
+
recommended: false
|
|
19
|
+
|
|
20
|
+
extra_params:
|
|
21
|
+
page[size]: "{n}"
|
|
22
|
+
|
|
23
|
+
output_map:
|
|
24
|
+
items: data
|
|
25
|
+
item_title: attributes.titles.0.title
|
|
26
|
+
item_url: attributes.url
|
|
27
|
+
item_summary: attributes.descriptions.0.description
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# data.gov.uk — 英国政府开放数据目录(免 key,CKAN API)
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**英国政府开放数据集**。argo 已有 eu_opendata(欧盟)与
|
|
4
|
+
# fr_opendata(法国),英国这一档缺位;且英国是开放数据运动的发源地,
|
|
5
|
+
# 数据集密度高于多数欧盟国家。
|
|
6
|
+
#
|
|
7
|
+
# 实测(2026-09-21):CKAN package_search 免 key,JSON 直出;
|
|
8
|
+
# 「climate」返回结构化数据集条目(title / notes / name / organization)。
|
|
9
|
+
#
|
|
10
|
+
# 形态:检索式。url 由 url_template 从数据集 slug 拼出。
|
|
11
|
+
#
|
|
12
|
+
# 验证:
|
|
13
|
+
# python3 scripts/engine_validate.py --engine datagov_uk --stage all --admit
|
|
14
|
+
|
|
15
|
+
engine_id: datagov_uk
|
|
16
|
+
type: http
|
|
17
|
+
enabled: true
|
|
18
|
+
cost_tier: free
|
|
19
|
+
method: GET
|
|
20
|
+
url: https://data.gov.uk/api/3/action/package_search
|
|
21
|
+
timeout: 20
|
|
22
|
+
query_param: q
|
|
23
|
+
canary_query: "climate"
|
|
24
|
+
family: misc_vertical
|
|
25
|
+
langs:
|
|
26
|
+
- en
|
|
27
|
+
coverage: [opendata, government, dataset, uk]
|
|
28
|
+
desc: "data.gov.uk 英国政府开放数据目录(CKAN,免 key)"
|
|
29
|
+
recommended: false
|
|
30
|
+
explicit_only: true
|
|
31
|
+
extra_params:
|
|
32
|
+
rows: "{n}"
|
|
33
|
+
output_map:
|
|
34
|
+
items: result.results
|
|
35
|
+
item_title: title
|
|
36
|
+
item_summary: notes
|
|
37
|
+
url_template: "https://data.gov.uk/dataset/{name}"
|
|
38
|
+
|
|
39
|
+
quality_queries:
|
|
40
|
+
- query: "climate"
|
|
41
|
+
- query: "transport"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# 通用图片搜索(免 Key,走 ddgs/Bing 图片通道)
|
|
2
|
+
#
|
|
3
|
+
# 为什么要有这个源:image_search 域此前只有 openverse 一个通用图库,而它是
|
|
4
|
+
# **开放版权素材库**——查「雪山」给的是 Flickr 上 CC 授权的照片,覆盖窄,且
|
|
5
|
+
# 对「这个产品长什么样」「这个梗图」这类检索无能为力。本引擎补的是**全网
|
|
6
|
+
# 图片**维度:底层 ddgs 走 Bing 图片索引,覆盖商业图库、新闻配图、社交平台
|
|
7
|
+
# (实测中文查询能出花瓣、千叶网等站点),是通用图库之外的覆盖面。
|
|
8
|
+
#
|
|
9
|
+
# 与 openverse 的分工(两者都要,不是替代):
|
|
10
|
+
# - openverse:要「能合法发布」的素材 → 带 license/宽高/商用判据
|
|
11
|
+
# - ddgs_images:要「能找到这张图」 → 覆盖面优先,**多数结果无许可信息**
|
|
12
|
+
# 因此本源结果不带 image_commercial_ok(上游不给许可字段,判定为「未判定」
|
|
13
|
+
# 而非「不可商用」),用在要发布的稿子里之前须自行核对。
|
|
14
|
+
#
|
|
15
|
+
# 实现复用 sub-skills/local-search 的 local_ddgs_images 子引擎(那边已写好
|
|
16
|
+
# ddgs 调用与字段解析),不在主仓重复实现一遍 CLI 调用逻辑。
|
|
17
|
+
# 验证:
|
|
18
|
+
# python3 scripts/engine_validate.py --engine ddgs_images --stage all --admit
|
|
19
|
+
|
|
20
|
+
engine_id: ddgs_images
|
|
21
|
+
type: cli
|
|
22
|
+
enabled: true
|
|
23
|
+
cost_tier: free
|
|
24
|
+
label: 通用图片
|
|
25
|
+
desc: "通用图片搜索(免 Key,覆盖全网图片;无版权标注,发布前须自行核对)"
|
|
26
|
+
coverage: [image, media, web]
|
|
27
|
+
family: misc_vertical
|
|
28
|
+
priority: 34
|
|
29
|
+
timeout: 20
|
|
30
|
+
canary_query: "snow mountain"
|
|
31
|
+
cmd:
|
|
32
|
+
- python3
|
|
33
|
+
- sub-skills/local-search/search_v3.py
|
|
34
|
+
search_args:
|
|
35
|
+
- '{query}'
|
|
36
|
+
- --n
|
|
37
|
+
- '{n}'
|
|
38
|
+
- --engine
|
|
39
|
+
- local_ddgs_images
|
|
40
|
+
- --json
|
|
41
|
+
output_format: json
|
|
42
|
+
quality_queries:
|
|
43
|
+
- query: "snow mountain"
|
|
44
|
+
- query: "雪山"
|
|
45
|
+
- query: "vintage poster"
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# DeepSeek Search 引擎(官方 API)——默认开启(需 DEEPSEEK_API_KEY,无 key 时自动停用)
|
|
2
|
+
#
|
|
3
|
+
# 它是什么:DeepSeek 官方网页搜索(POST api.deepseek.com/v1/tools/search),
|
|
4
|
+
# 按次计费 5 元/千次**成功**请求,账号级 QPS 5。返回结果自带四样 Argo 既有
|
|
5
|
+
# 中文 API 引擎(bocha/byted/metaso/octen)都没有的结构化字段:
|
|
6
|
+
# - authority:0-4 权威分级(-1 未知,≥3 极权威)
|
|
7
|
+
# - rerank_score:0-3 排序分(≥1.5 优质,综合相关性/权威性/时效)
|
|
8
|
+
# - date:发布时间,RFC 3339 UTC
|
|
9
|
+
# - site_name / site_icon:站点名与图标
|
|
10
|
+
# 前两样经 output_map 的 item_upstream_* 透传进结果(upstream_authority/
|
|
11
|
+
# upstream_score),输出层的 authority_level(0-4 离散等级,DeepSeek 语义)
|
|
12
|
+
# 优先采信上游原生 authority,没有再回退 Argo 自己的连续 authority 映射。
|
|
13
|
+
#
|
|
14
|
+
# 计费口径与 Argo 自适应学习天然对齐:DeepSeek 只对 HTTP 200 且 results
|
|
15
|
+
# 非空的请求收费;Argo 的 classify_engine_outcome 对 no-results/timeout/
|
|
16
|
+
# error 一律不计成功——两边同口径,不存在「失败也扣分」的错位。
|
|
17
|
+
#
|
|
18
|
+
# 搜索语法(DeepSeek 原样透传给上游,本引擎可吃用户查询里的 site:/-词/
|
|
19
|
+
# -"短语"/"短语"/lang:zh,en/after:/before: 操作符)——查询级操作符契约层
|
|
20
|
+
# 见 scripts/query_operators.py(2026-10-17 同期落地)。
|
|
21
|
+
#
|
|
22
|
+
# 启用前提:
|
|
23
|
+
# 1. export DEEPSEEK_API_KEY=<key>(DeepSeek 开放平台申请;只进 env,
|
|
24
|
+
# 与 {ENV} 占位纪律一致,不写进任何仓库文件)——无 key 时引擎不可用,
|
|
25
|
+
# 路由自动跳过,不影响其他源
|
|
26
|
+
# 2. 健康门:python3 scripts/engine_validate.py --engine deepseek_search --stage all --admit
|
|
27
|
+
# 3. 显式调用:argo search "查询" --engine deepseek_search
|
|
28
|
+
# 路由形态:不进任何域 combo;auto/deep 档位下仅可能经 TF-IDF 强匹配注入
|
|
29
|
+
# (罕见,如查询本身就是 deepseek 主题),显式 --engine deepseek_search
|
|
30
|
+
# 是主路径;fast/budget 模式按成本纪律自动排除付费源。计费口径见文件头
|
|
31
|
+
# (5 元/千次成功请求,失败/空结果不计费)。
|
|
32
|
+
#
|
|
33
|
+
# 配套 Fetch 接口(api.deepseek.com/v1/tools/fetch,返回 Markdown 正文)
|
|
34
|
+
# 留作抓取链备选,本 spec 只接 search。
|
|
35
|
+
engine_id: deepseek_search
|
|
36
|
+
type: http
|
|
37
|
+
enabled: true # 默认开;无 DEEPSEEK_API_KEY 时不可用,路由自动跳过
|
|
38
|
+
explicit_only: true # 不进任何域 combo 与通用兜底,只经 --engine 显式调用
|
|
39
|
+
cost_tier: paid
|
|
40
|
+
method: POST
|
|
41
|
+
url: https://api.deepseek.com/v1/tools/search
|
|
42
|
+
timeout: 12
|
|
43
|
+
canary_query: "DeepSeek"
|
|
44
|
+
label: DeepSeek Search
|
|
45
|
+
family: web_general
|
|
46
|
+
priority: 60
|
|
47
|
+
qps: 5
|
|
48
|
+
period: second
|
|
49
|
+
cost_per_call: 0.005
|
|
50
|
+
cost_unit: cny
|
|
51
|
+
required_env:
|
|
52
|
+
- DEEPSEEK_API_KEY
|
|
53
|
+
|
|
54
|
+
headers:
|
|
55
|
+
Authorization: Bearer {DEEPSEEK_API_KEY}
|
|
56
|
+
Content-Type: application/json
|
|
57
|
+
|
|
58
|
+
# POST body:{query} 查询词,{n} 结果数(DeepSeek count 1-50,渲染时自动 int 化)
|
|
59
|
+
body:
|
|
60
|
+
query: "{query}"
|
|
61
|
+
count: "{n}"
|
|
62
|
+
|
|
63
|
+
# DeepSeek 返回 {results:[{rerank_score,title,url,snippet,summary,content,
|
|
64
|
+
# site_name,site_icon,date,authority}]}。snippet 100-200 字走 snippet 档;
|
|
65
|
+
# summary/content 不接(正文按需走 fetch/verify 链,不在 search 层拉全量)。
|
|
66
|
+
output_map:
|
|
67
|
+
items: results
|
|
68
|
+
item_title: title
|
|
69
|
+
item_url: url
|
|
70
|
+
item_summary: snippet
|
|
71
|
+
item_source: deepseek_search
|
|
72
|
+
item_published_at: date
|
|
73
|
+
item_upstream_authority: authority
|
|
74
|
+
item_upstream_score: rerank_score
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Deezer 音乐艺人/专辑(免认证)
|
|
2
|
+
# 补 media_search 域:现有 qq_music(华语)、itunes(Apple 生态)、musicbrainz(元数据),
|
|
3
|
+
# Deezer 补欧洲/西语圈曲库与粉丝量维度。
|
|
4
|
+
# 验证:
|
|
5
|
+
# python3 scripts/engine_validate.py --engine deezer --stage all --admit --write-doc
|
|
6
|
+
|
|
7
|
+
engine_id: deezer
|
|
8
|
+
type: deezer
|
|
9
|
+
enabled: true
|
|
10
|
+
cost_tier: free
|
|
11
|
+
timeout: 15
|
|
12
|
+
canary_query: "radiohead"
|
|
13
|
+
desc: "音乐艺人/专辑(Deezer,免认证)"
|
|
14
|
+
coverage: [media, music, entertainment]
|
|
15
|
+
recommended: false
|
|
16
|
+
latency_ms: 2000
|
|
17
|
+
|
|
18
|
+
quality_queries:
|
|
19
|
+
- query: "radiohead"
|
|
20
|
+
- query: "coldplay"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# deps.dev — 包依赖与版本状态(Google 维护,npm/pypi/go/maven/cargo 五生态,免认证)
|
|
2
|
+
# 边界:只答包存在性/最新版本/弃用状态/发布时间;包级漏洞聚合端点不存在,
|
|
3
|
+
# 漏洞情报由 nvd 引擎按关键词补位。查询形态:「<生态> <包名>」或裸包名(默认 npm)。
|
|
4
|
+
# 验证:
|
|
5
|
+
# python3 scripts/engine_validate.py --engine deps_dev --stage all --admit --write-doc
|
|
6
|
+
|
|
7
|
+
engine_id: deps_dev
|
|
8
|
+
type: deps_dev
|
|
9
|
+
enabled: true
|
|
10
|
+
cost_tier: free
|
|
11
|
+
timeout: 10
|
|
12
|
+
canary_query: "npm express"
|
|
13
|
+
desc: "deps.dev 包依赖(npm/pypi/go/maven/cargo;版本/弃用/发布时间)"
|
|
14
|
+
coverage: [code, package]
|
|
15
|
+
recommended: false
|
|
16
|
+
latency_ms: 2000
|
|
17
|
+
|
|
18
|
+
quality_queries:
|
|
19
|
+
- query: "npm express"
|
|
20
|
+
- query: "python requests"
|
|
21
|
+
- query: "rust serde"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# DigUp 本地文件语义搜索(CLI 桥接)——默认关闭,按需启用
|
|
2
|
+
#
|
|
3
|
+
# 它搜什么:本机文件按「内容」而不是文件名——照片/截图按画面与图内文字、
|
|
4
|
+
# PDF 按页、文档按块、音频/视频按 30s 窗口与抽帧(命中精确到页/秒/行)。
|
|
5
|
+
# 模型 EmbeddingGemma 2 在设备端跑(llama.cpp/Metal),索引与检索全程离线。
|
|
6
|
+
#
|
|
7
|
+
# 前提(一次性):
|
|
8
|
+
# 1. digup CLI 就位(桥按此序自动定位,也可 $DIGUP_BIN / --bin 指定):
|
|
9
|
+
# PATH 里的 digup > /Applications/DigUp.app/Contents/Helpers/digup
|
|
10
|
+
# (brew install --cask arahim3/tap/digup 或 DMG 装的 App 自带)
|
|
11
|
+
# 2. 建索引:digup index <文件夹>…(或开 DigUp.app 选文件夹;索引默认
|
|
12
|
+
# ~/Library/Application Support/DigUp/index.noindex,$DIGUP_INDEX 可覆盖)
|
|
13
|
+
# 3. 启用:本文件 enabled 改 true,然后跑一次健康门
|
|
14
|
+
# python3 scripts/engine_validate.py --engine digup --stage health --admit
|
|
15
|
+
# (canary 需命中你索引里真实存在的内容,可用 --query 覆盖探针词)
|
|
16
|
+
#
|
|
17
|
+
# 调用:argo search "<用大白话描述文件内容>" --engine digup
|
|
18
|
+
# 口径:强项是语义/多模态/跨语言召回;中文关键词精确查找仍以主链为准,
|
|
19
|
+
# 两路结果在融合层按名次合并,本引擎不做额外降权。
|
|
20
|
+
engine_id: digup
|
|
21
|
+
type: cli
|
|
22
|
+
enabled: false # ← 默认关;开启步骤见文件头
|
|
23
|
+
disabled_reason: 按需启用的本地引擎——需先装 digup CLI 并建索引(文件头三步),装好把 enabled 改 true 后跑 engine_validate 健康门;本机不装不影响任何主链功能
|
|
24
|
+
cost_tier: free
|
|
25
|
+
label: 本地文件语义搜索
|
|
26
|
+
desc: DigUp(EmbeddingGemma 2 本地多模态嵌入,全程离线)——照片/截图/PDF/文档/音视频按内容检索
|
|
27
|
+
canary_query: "test"
|
|
28
|
+
relevance_check: false # 本地索引内容因机而异,词面交集不是有效健康判据(schema+非空已够)
|
|
29
|
+
cmd:
|
|
30
|
+
- python3
|
|
31
|
+
- scripts/digup_bridge.py
|
|
32
|
+
search_args:
|
|
33
|
+
- '{query}'
|
|
34
|
+
- -n
|
|
35
|
+
- '{n}'
|
|
36
|
+
timeout: 30 # digup 首查冷启要加载 ~250MB text 模型(实测 0.4–0.8s),留足
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# DOI 内容协商引擎(doi.org 官方解析器,keyless 直出结构化元数据)
|
|
2
|
+
# 机制: https://doi.org/<DOI> 配 Accept 头做内容协商——
|
|
3
|
+
# application/vnd.citationstyles.csl+json → CSL JSON(标题/作者/期刊/年份)
|
|
4
|
+
# text/x-bibtex → BibTeX 引用(本引擎走 CSL JSON)
|
|
5
|
+
# 用法: 显式专用(explicit_only)——查询词传裸 DOI(如 10.1145/3442188.3445922),
|
|
6
|
+
# 不要带 https://doi.org/ 前缀({query} 原样进路径)
|
|
7
|
+
# 特点: 免 key、不限次;单对象 CSL JSON 响应走 _CUSTOM_JSON_PARSERS["doi"]
|
|
8
|
+
# (声明式 output_map 只支持数组根,单对象根由专用解析器包裹)
|
|
9
|
+
# 验证:
|
|
10
|
+
# python3 scripts/engine_validate.py --engine doi --stage health --admit
|
|
11
|
+
# python3 scripts/search.py "10.1145/3442188.3445922" --engine doi --json
|
|
12
|
+
|
|
13
|
+
engine_id: doi
|
|
14
|
+
type: http
|
|
15
|
+
enabled: true
|
|
16
|
+
# 按 DOI 精查而非关键词检索,不参与自动路由
|
|
17
|
+
explicit_only: true
|
|
18
|
+
cost_tier: free
|
|
19
|
+
label: DOI 元数据直出
|
|
20
|
+
family: academic
|
|
21
|
+
priority: 50
|
|
22
|
+
qps: 2
|
|
23
|
+
period: second
|
|
24
|
+
limit: null
|
|
25
|
+
cost_per_call: 0.0
|
|
26
|
+
cost_unit: free
|
|
27
|
+
method: GET
|
|
28
|
+
url: https://doi.org/{query}
|
|
29
|
+
timeout: 12
|
|
30
|
+
canary_query: "10.1145/3442188.3445922"
|
|
31
|
+
coverage:
|
|
32
|
+
- academic
|
|
33
|
+
- metadata
|
|
34
|
+
desc: "DOI 内容协商(doi.org 官方解析器,Accept 头直出 CSL JSON 结构化元数据,keyless 免 key 免限次,查询词传裸 DOI)"
|
|
35
|
+
format: json
|
|
36
|
+
# 空字符串 = 该 API 不用查询参数名(DOI 走 URL 路径,由 {query} 注入)
|
|
37
|
+
query_param: ""
|
|
38
|
+
headers:
|
|
39
|
+
Accept: "application/vnd.citationstyles.csl+json"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# 豆瓣电影搜索 — suggest 接口(免认证)
|
|
2
|
+
# film_search 域的中文视角补位:imdb/itunes 全英文视角,豆瓣给中文片名/
|
|
3
|
+
# 年份/类型。豆瓣对无 cookie 请求逐步收紧(音乐口子已死),本接口仍存活,
|
|
4
|
+
# 失败诚实空,不做绕过。
|
|
5
|
+
# 验证:
|
|
6
|
+
# python3 scripts/engine_validate.py --engine douban_movie --stage all --admit --write-doc
|
|
7
|
+
|
|
8
|
+
engine_id: douban_movie
|
|
9
|
+
type: douban_movie
|
|
10
|
+
enabled: true
|
|
11
|
+
cost_tier: free
|
|
12
|
+
timeout: 10
|
|
13
|
+
canary_query: "流浪地球"
|
|
14
|
+
desc: "豆瓣电影搜索(中文片名/年份/类型,免认证,suggest 接口)"
|
|
15
|
+
coverage: [film, chinese, media]
|
|
16
|
+
recommended: false
|
|
17
|
+
latency_ms: 1000
|
|
18
|
+
|
|
19
|
+
quality_queries:
|
|
20
|
+
- query: "流浪地球"
|
|
21
|
+
- query: "霸王别姬"
|
|
22
|
+
- query: "Inception"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# DW News RSS — 德国之声英语版(免 key、免注册)
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**德语区/欧洲公共广播的国际新闻**。与 france24 同批接入,
|
|
4
|
+
# 都是「非英美视角的国际新闻」——这类视角在只用英美源的组合里是盲的。
|
|
5
|
+
#
|
|
6
|
+
# 实测(2026-09-17):**139 条**,摘要中位 193 字、最长 220。条目数是候选池
|
|
7
|
+
# 里最多的(卫报 45、NYT 23、BBC 32),代价是摘要密度中等(193 字,排中游)。
|
|
8
|
+
# 条目多意味着实时流更长,这是它相对 france24(24 条)的取舍。
|
|
9
|
+
#
|
|
10
|
+
# 形态:feed_mode=hot(热榜语义,同 guardian_rss)。归 hot_trending 族。
|
|
11
|
+
#
|
|
12
|
+
# 可达性(实测 2026-09-17):它是 intl_news_flash 域的第 3 位,fast 档的
|
|
13
|
+
# combo 预算裁到 2 个引擎,所以 fast 下不出现;`--depth balanced` 起三个
|
|
14
|
+
# 全部入选。也就是说它是「加宽档」的补充源,不是默认档成员——
|
|
15
|
+
# 这不是缺陷,是预算位只有那么多时该有的排序结果。
|
|
16
|
+
#
|
|
17
|
+
# 验证:
|
|
18
|
+
# python3 scripts/engine_validate.py --engine dw_news --stage all --admit
|
|
19
|
+
# python3 scripts/search.py "今日国际要闻" --depth balanced --json
|
|
20
|
+
|
|
21
|
+
engine_id: dw_news
|
|
22
|
+
type: rss_feed
|
|
23
|
+
enabled: true
|
|
24
|
+
cost_tier: free
|
|
25
|
+
label: DW 德国之声 RSS
|
|
26
|
+
family: hot_trending
|
|
27
|
+
feed_mode: hot
|
|
28
|
+
relevance_check: false
|
|
29
|
+
priority: 32
|
|
30
|
+
qps: 1
|
|
31
|
+
period: second
|
|
32
|
+
cost_per_call: 0.0
|
|
33
|
+
cost_unit: free
|
|
34
|
+
timeout: 12
|
|
35
|
+
feed_url: https://rss.dw.com/rdf/rss-en-all
|
|
36
|
+
langs:
|
|
37
|
+
- en
|
|
38
|
+
canary_query: "今日国际要闻"
|
|
39
|
+
coverage:
|
|
40
|
+
- news
|
|
41
|
+
- world
|
|
42
|
+
desc: "德国之声英语版 RSS(德语区/欧洲公共广播视角,条目数最多的一档)"
|
|
43
|
+
recommended: false
|
|
44
|
+
|
|
45
|
+
quality_queries:
|
|
46
|
+
- query: "今日国际要闻"
|
|
47
|
+
- query: "world news today"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 日本 e-Gov 法令检索(官方全文,免认证)
|
|
2
|
+
# 补 legal 域的日本法条:现有 flk_law(中国)、kor_law(韩国)、
|
|
3
|
+
# courtlistener(美国判例)、wenshu(中国判例),日本法令此前空白。
|
|
4
|
+
# lawlists 返回全量法令名 XML,本地按关键词过滤(API 无服务端检索参数)。
|
|
5
|
+
# 验证:
|
|
6
|
+
# python3 scripts/engine_validate.py --engine egov_law --stage all --admit --write-doc
|
|
7
|
+
|
|
8
|
+
engine_id: egov_law
|
|
9
|
+
type: egov_law
|
|
10
|
+
enabled: true
|
|
11
|
+
cost_tier: free
|
|
12
|
+
timeout: 20
|
|
13
|
+
canary_query: "民法"
|
|
14
|
+
desc: "日本法令检索(e-Gov 官方全文,免认证)"
|
|
15
|
+
coverage: [legal, law_text, japanese, official]
|
|
16
|
+
recommended: false
|
|
17
|
+
latency_ms: 3000
|
|
18
|
+
|
|
19
|
+
quality_queries:
|
|
20
|
+
- query: "民法"
|
|
21
|
+
- query: "個人情報"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 西班牙国家报 RSS — El País,西语世界发行量最大的日报
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**es 本地一手新闻**。接入前 argo 的新闻链路只有中英源
|
|
4
|
+
# (google_news/guardian_rss/dw_news/france24 都是英语视角),es 查询
|
|
5
|
+
# 拿不到本地一手报道。
|
|
6
|
+
#
|
|
7
|
+
# 实测(2026-09-21):**143 条**,摘要中位 158 字、最长 445 字。
|
|
8
|
+
#
|
|
9
|
+
# 形态:feed_mode=hot(实时流语义,同 guardian_rss)。归 world_news 族——
|
|
10
|
+
# 与 hot_trending(热榜)分族,避免同族 max_per_family=2 把本地源互相挤掉。
|
|
11
|
+
# 语言由 langs 声明,路由按查询语言选源(见 route._lang_aware_combo_order)。
|
|
12
|
+
#
|
|
13
|
+
# 验证:
|
|
14
|
+
# python3 scripts/engine_validate.py --engine elpais --stage all --admit
|
|
15
|
+
# python3 scripts/search.py "noticias de hoy" --engine elpais --json
|
|
16
|
+
|
|
17
|
+
engine_id: elpais
|
|
18
|
+
type: rss_feed
|
|
19
|
+
enabled: true
|
|
20
|
+
cost_tier: free
|
|
21
|
+
label: 西班牙国家报 RSS
|
|
22
|
+
family: world_news
|
|
23
|
+
feed_mode: hot
|
|
24
|
+
relevance_check: false
|
|
25
|
+
priority: 43
|
|
26
|
+
qps: 1
|
|
27
|
+
period: second
|
|
28
|
+
cost_per_call: 0.0
|
|
29
|
+
cost_unit: free
|
|
30
|
+
timeout: 12
|
|
31
|
+
feed_url: https://feeds.elpais.com/mrss-s/pages/ep/site/elpais.com/portada
|
|
32
|
+
langs:
|
|
33
|
+
- es
|
|
34
|
+
canary_query: "noticias de hoy"
|
|
35
|
+
coverage:
|
|
36
|
+
- news
|
|
37
|
+
- spain
|
|
38
|
+
desc: "西班牙国家报(El País,西语世界发行量最大的日报,免 key)"
|
|
39
|
+
recommended: false
|
|
40
|
+
|
|
41
|
+
quality_queries:
|
|
42
|
+
- query: "noticias de hoy"
|
|
43
|
+
- query: "economía España"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# endoflife.date — 产品生命周期(200+ 产品,免认证)
|
|
2
|
+
# 查询词 = 产品 slug(python/nodejs/go/kubernetes/ubuntu…);API 无搜索端点,
|
|
3
|
+
# slug 提取取查询里第一个 ASCII 词。未识别产品诚实返回空。
|
|
4
|
+
# 验证:
|
|
5
|
+
# python3 scripts/engine_validate.py --engine endoflife --stage all --admit --write-doc
|
|
6
|
+
|
|
7
|
+
engine_id: endoflife
|
|
8
|
+
type: endoflife
|
|
9
|
+
enabled: true
|
|
10
|
+
cost_tier: free
|
|
11
|
+
timeout: 10
|
|
12
|
+
canary_query: "python 生命周期"
|
|
13
|
+
desc: "产品生命周期(版本/最新/支持期/EOL,endoflife.date 200+ 产品)"
|
|
14
|
+
coverage: [tech]
|
|
15
|
+
recommended: false
|
|
16
|
+
latency_ms: 2000
|
|
17
|
+
|
|
18
|
+
quality_queries:
|
|
19
|
+
- query: "python 生命周期"
|
|
20
|
+
- query: "nodejs"
|
|
21
|
+
- query: "kubernetes EOL"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Energy-Charts — 欧洲发电结构与可再生占比(Fraunhofer ISE,免认证)
|
|
2
|
+
# 补 energy 域的「发电结构/可再生实时」维度:按国家给逐时发电类型曲线。
|
|
3
|
+
# 文档要求署名(数据来源 Fraunhofer ISE),已在 desc 与 url 体现。
|
|
4
|
+
# 国家码由 builder 侧按查询词解析,默认 de(德国)。
|
|
5
|
+
# 验证:
|
|
6
|
+
# python3 scripts/engine_validate.py --engine energy_charts --stage all --admit --write-doc
|
|
7
|
+
|
|
8
|
+
engine_id: energy_charts
|
|
9
|
+
type: energy_charts
|
|
10
|
+
enabled: true
|
|
11
|
+
cost_tier: free
|
|
12
|
+
timeout: 20
|
|
13
|
+
canary_query: "germany power"
|
|
14
|
+
desc: "Energy-Charts 欧洲发电结构/可再生占比(Fraunhofer ISE,免认证)"
|
|
15
|
+
coverage: [energy, environment, statistics, europe]
|
|
16
|
+
recommended: false
|
|
17
|
+
latency_ms: 2500
|
|
18
|
+
|
|
19
|
+
quality_queries:
|
|
20
|
+
- query: "germany power"
|
|
21
|
+
- query: "france nuclear"
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# FactCheck.org RSS — 美国事实核查(免 key、免注册)
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**「这个说法有没有被核查过」**。这与 argo 已有的任何一族都不同:
|
|
4
|
+
# 新闻族 回答「发生了什么」
|
|
5
|
+
# 百科族 回答「X 是什么」
|
|
6
|
+
# 本引擎 回答「这个具体声明被判定为真/假/误导」
|
|
7
|
+
# 接入前 argo 的核验能力全靠下游对普通搜索结果打分(evidence.py 的来源类型
|
|
8
|
+
# 加权),没有「声明级」的一手判定。argo 的定位本身是「搜索与证据核验」,
|
|
9
|
+
# 这是补一个不存在的功能维度,不是往新闻池里再加一桶水。
|
|
10
|
+
#
|
|
11
|
+
# 实测(2026-09-17):10 条,摘要中位 **482 字**、最长 566——除卫报外全场最高。
|
|
12
|
+
# 核查文本身就是密度型内容(结论 + 依据),所以摘要信息量天然高。
|
|
13
|
+
#
|
|
14
|
+
# 覆盖范围:**以美国政治/公共议题为主**,非全球通用。若要英国口径另见 full_fact。
|
|
15
|
+
#
|
|
16
|
+
# 召回边界:RSS 固定窗口(最近 10 条)+ 本地关键词过滤。10 条意味着命中面很窄,
|
|
17
|
+
# 只有查询正好落在近期核查过的议题上才有结果——这是它的固有限制,不是缺陷;
|
|
18
|
+
# 它的价值是「正好问到点上时给出权威判定」。
|
|
19
|
+
#
|
|
20
|
+
# 验证:
|
|
21
|
+
# python3 scripts/engine_validate.py --engine factcheck_org --stage all --admit
|
|
22
|
+
# python3 scripts/search.py "election" --engine factcheck_org --json
|
|
23
|
+
|
|
24
|
+
engine_id: factcheck_org
|
|
25
|
+
type: rss_feed
|
|
26
|
+
enabled: true
|
|
27
|
+
cost_tier: free
|
|
28
|
+
label: FactCheck.org
|
|
29
|
+
family: verification
|
|
30
|
+
feed_mode: filter
|
|
31
|
+
priority: 28
|
|
32
|
+
qps: 1
|
|
33
|
+
period: second
|
|
34
|
+
cost_per_call: 0.0
|
|
35
|
+
cost_unit: free
|
|
36
|
+
timeout: 12
|
|
37
|
+
feed_url: https://www.factcheck.org/feed/
|
|
38
|
+
langs:
|
|
39
|
+
- en
|
|
40
|
+
canary_query: "president"
|
|
41
|
+
coverage:
|
|
42
|
+
- news
|
|
43
|
+
- verification
|
|
44
|
+
desc: "FactCheck.org(美国事实核查:声明级真伪判定,摘要密度仅次于卫报)"
|
|
45
|
+
recommended: false
|
|
46
|
+
|
|
47
|
+
# 见 guardian_rss 的说明。该种子仅 10 条、逐日轮换,实测 2026-09-17 当日
|
|
48
|
+
# president 命中 8/10、people 10/10——取 president 而非 people,因为后者
|
|
49
|
+
# 是虚义词,命中了也不说明引擎在正确工作。
|
|
50
|
+
quality_queries:
|
|
51
|
+
- query: "president"
|
|
52
|
+
- query: "election"
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 法兰克福汇报 RSS — FAZ,德国全国性日报
|
|
2
|
+
#
|
|
3
|
+
# 补的盲区:**de 本地一手新闻**。接入前 argo 的新闻链路只有中英源
|
|
4
|
+
# (google_news/guardian_rss/dw_news/france24 都是英语视角),de 查询
|
|
5
|
+
# 拿不到本地一手报道。
|
|
6
|
+
#
|
|
7
|
+
# 实测(2026-09-21):**162 条**,摘要中位 187 字、最长 288 字。
|
|
8
|
+
#
|
|
9
|
+
# 形态:feed_mode=hot(实时流语义,同 guardian_rss)。归 world_news 族——
|
|
10
|
+
# 与 hot_trending(热榜)分族,避免同族 max_per_family=2 把本地源互相挤掉。
|
|
11
|
+
# 语言由 langs 声明,路由按查询语言选源(见 route._lang_aware_combo_order)。
|
|
12
|
+
#
|
|
13
|
+
# 验证:
|
|
14
|
+
# python3 scripts/engine_validate.py --engine faz --stage all --admit
|
|
15
|
+
# python3 scripts/search.py "aktuelle Nachrichten" --engine faz --json
|
|
16
|
+
|
|
17
|
+
engine_id: faz
|
|
18
|
+
type: rss_feed
|
|
19
|
+
enabled: true
|
|
20
|
+
cost_tier: free
|
|
21
|
+
label: 法兰克福汇报 RSS
|
|
22
|
+
family: world_news
|
|
23
|
+
feed_mode: hot
|
|
24
|
+
relevance_check: false
|
|
25
|
+
priority: 46
|
|
26
|
+
qps: 1
|
|
27
|
+
period: second
|
|
28
|
+
cost_per_call: 0.0
|
|
29
|
+
cost_unit: free
|
|
30
|
+
timeout: 12
|
|
31
|
+
feed_url: https://www.faz.net/rss/aktuell/
|
|
32
|
+
langs:
|
|
33
|
+
- de
|
|
34
|
+
canary_query: "aktuelle Nachrichten"
|
|
35
|
+
coverage:
|
|
36
|
+
- news
|
|
37
|
+
- germany
|
|
38
|
+
desc: "法兰克福汇报(FAZ,德国全国性日报,免 key)"
|
|
39
|
+
recommended: false
|
|
40
|
+
|
|
41
|
+
quality_queries:
|
|
42
|
+
- query: "aktuelle Nachrichten"
|
|
43
|
+
- query: "Wirtschaft Deutschland"
|