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,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"
|
|
@@ -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: usd
|
|
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,36 @@
|
|
|
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
|
+
# 状态注记(2026-10-21 实测):上游 /2/search 搜索端点已停用(对任意查询返回
|
|
10
|
+
# 空 results,强制调用 6.3s 零结果),status/profile 端点仍正常但不属本引擎职责。
|
|
11
|
+
# X 关键词搜索走 `argo x-search`(ego-browser 通道,见 config.yaml 的 twitter 引擎)
|
|
12
|
+
# 或 `--engine twitter`;单条推文按 URL 取正文仍走 `argo tweet`(twitter_syndication)。
|
|
13
|
+
# 保留注册:上游若恢复搜索端点可直接复用,声明本身无需改动。
|
|
14
|
+
enabled: true
|
|
15
|
+
cost_tier: free
|
|
16
|
+
method: GET
|
|
17
|
+
url: https://api.fxtwitter.com/2/search
|
|
18
|
+
timeout: 10
|
|
19
|
+
query_param: q
|
|
20
|
+
canary_query: "OpenAI"
|
|
21
|
+
desc: "FxTwitter 公开 API:X/Twitter 推文搜索(零认证,含互动元数据)"
|
|
22
|
+
coverage: [social, english]
|
|
23
|
+
recommended: false
|
|
24
|
+
|
|
25
|
+
headers:
|
|
26
|
+
User-Agent: argo-search/1.0 (+fxtwitter)
|
|
27
|
+
Accept: application/json
|
|
28
|
+
|
|
29
|
+
extra_params:
|
|
30
|
+
count: "{n}"
|
|
31
|
+
|
|
32
|
+
output_map:
|
|
33
|
+
items: results
|
|
34
|
+
item_title: text
|
|
35
|
+
item_url: url
|
|
36
|
+
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"
|