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,253 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ego-search
|
|
3
|
+
description: >-
|
|
4
|
+
ego-search 是 argo 的浏览器态搜索增强子技能,基于真实 Chromium 浏览器运行时,提供
|
|
5
|
+
登录态继承、JS 渲染、反爬(尽力而为,未验证可穿透重度防护)、动态交互与同源接口数据直取(api 模式)能力。专业搜索
|
|
6
|
+
模式默认关闭,需用户明确要求并执行开启指令后启用。当 argo 的 API/HTML 引擎覆盖不到
|
|
7
|
+
时启用:登录墙后的内容(知乎/小红书/微博/X/公众号)、JS 渲染与 SPA 页面、反爬与 Cloudflare 保护页(尽力而为,重度防护可能失败)、需要交互(翻页/展开/滚动加载)的动态搜索、SPA/XHR 接口数据直取、
|
|
8
|
+
以及需要真实登录态才能搜到的私有内容。输出对齐 argo 统一 JSON schema,可直接进入
|
|
9
|
+
evidence 评分与 RRF 融合。Triggers include 浏览器搜索、登录后才能搜到、JS 渲染页面、
|
|
10
|
+
SERP 补充、动态内容抓取、登录态抓取、API 数据直取、接口数据。
|
|
11
|
+
metadata:
|
|
12
|
+
version: "1.6.0"
|
|
13
|
+
date: "2026-08-07"
|
|
14
|
+
upstream: ego lite(ego-browser)+ WebBridge 扩展桥(双运行时)
|
|
15
|
+
parent: argo
|
|
16
|
+
pro_mode: 默认关闭,手动开启(enable/disable)
|
|
17
|
+
cache: 登录态结果 cache_eligible=false,禁止写入 argo 公共缓存
|
|
18
|
+
architecture: dual_runtime_complete
|
|
19
|
+
security: URL 守卫 + 任务空间收尾 + 专业模式闸门 + 登录墙质量信号
|
|
20
|
+
triggers:
|
|
21
|
+
- 专业搜索模式
|
|
22
|
+
- 开启专业搜索模式
|
|
23
|
+
- 浏览器搜索
|
|
24
|
+
- 登录态
|
|
25
|
+
- 登录墙
|
|
26
|
+
- JS渲染
|
|
27
|
+
- SERP
|
|
28
|
+
- 动态内容
|
|
29
|
+
- 反爬(尽力而为)
|
|
30
|
+
- 浏览器抓取
|
|
31
|
+
- API数据直取
|
|
32
|
+
- 接口数据
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
# ego-search(argo 子技能)
|
|
36
|
+
|
|
37
|
+
ego-search 是 argo 的**登录态专业搜索**子技能(v1.4 完全态):
|
|
38
|
+
|
|
39
|
+
- **双运行时保留**:ego lite(`ego-browser`)与 WebBridge(用户浏览器扩展桥)**互补,不互相替代**
|
|
40
|
+
- **任一可用即可**:`search` / `fetch` / `act` / `api` 在至少一条运行时在线时可用
|
|
41
|
+
- **与常规检索隔离**:登录态结果 `cache_eligible=false`,禁止进公共 SearchCache
|
|
42
|
+
- **汇总可融合**:输出带 `merge_with_public_ok=true`,分析层可把 public + login 两路结果一起喂 evidence
|
|
43
|
+
## 专业搜索模式(默认关闭)
|
|
44
|
+
|
|
45
|
+
本子技能涉及真实浏览器**登录态继承**,出于安全与可靠性考虑**默认关闭**。开启后
|
|
46
|
+
`search`/`fetch`/`act`/`api` 与直接浏览器操作才可用;未开启时调用会被拒绝并提示开启命令。
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# 开启(必须由用户明确要求「开启专业搜索模式」后执行)
|
|
50
|
+
python3 sub-skills/ego-search/scripts/ego_search.py enable
|
|
51
|
+
# 关闭
|
|
52
|
+
python3 sub-skills/ego-search/scripts/ego_search.py disable
|
|
53
|
+
# 查看状态
|
|
54
|
+
python3 sub-skills/ego-search/scripts/ego_search.py status
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- **纪律**:Agent 不得自行开启——只有用户明确表达开启意图时才运行 `enable`。
|
|
58
|
+
- 未开启时,同样不得用 heredoc 直连浏览器运行时绕开闸门。
|
|
59
|
+
- 状态持久化于 `~/.local/state/ego-search/pro-mode.json`,开启后长期生效,直到手动关闭。
|
|
60
|
+
## 定位与升级决策
|
|
61
|
+
|
|
62
|
+
主系统 API/HTML 检索覆盖不足时,升级到 **ego-search**:
|
|
63
|
+
|
|
64
|
+
| 场景 | 常规检索 | ego-search 补什么 |
|
|
65
|
+
|------|----------|-------------------|
|
|
66
|
+
| 登录墙内容(知乎/小红书/微博/X/公众号/会员站) | 拿不到正文 | 任务空间继承登录态,搜并抓取 |
|
|
67
|
+
| JS 渲染 / SPA / 懒加载页面 | 可能空壳 | 真实浏览器执行 JS 后提取 |
|
|
68
|
+
| 反爬 / Cloudflare 保护(尽力而为) | HTTP 失败 | 真实浏览器尝试,重度防护可能失败 |
|
|
69
|
+
| 需要交互的动态搜索(翻页/「加载更多」/表单筛选) | 单次请求不够 | `act` 或 `ego-browser` heredoc 多步 |
|
|
70
|
+
| 搜索引擎实时 SERP(Google/Bing/百度) | 可能被反爬 | 真实 SERP 结构化提取 |
|
|
71
|
+
| 深嵌套 iframe 页面 | 常挂 | 快照专长 |
|
|
72
|
+
| 已知同源 API URL | DOM 不全 | `api` + `browserFetch` |
|
|
73
|
+
| 未知 XHR 尚未拿到 URL | — | 不在 CLI 内;heredoc 自探或先拿 URL 再 `api` |
|
|
74
|
+
|
|
75
|
+
**决策顺序**:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
常规检索(快、省 token)
|
|
79
|
+
→ 结果不足 / 正文拿不到 / 需要登录态
|
|
80
|
+
→ ego-search search|fetch|act|api(pro-mode 开启)
|
|
81
|
+
→ 更复杂多步 → ego-browser nodejs heredoc
|
|
82
|
+
高后果结论 → 证据核验
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 依赖与环境
|
|
86
|
+
|
|
87
|
+
- **官方项目**:ego lite → <https://lite.ego.app/>(官网);WebBridge → <https://www.kimi.com/zh-cn/help/kimi-webbridge/kimi-webbridge-introduction>(Kimi WebBridge 官方帮助中心)。
|
|
88
|
+
- **浏览器运行时**(macOS 应用)与 **运行时命令 `ego-browser`**(`~/.local/bin`)。
|
|
89
|
+
- 首次使用前确认:`command -v ego-browser`。未安装时按 `references/install.md` 完成安装。
|
|
90
|
+
- 运行时依赖由安装包自管理,本子技能不重复携带安装脚本。
|
|
91
|
+
- 登录态来自运行时 onboarding(可导入 Chrome 数据);不同站点登录态由用户在运行时中维护。
|
|
92
|
+
|
|
93
|
+
## 快速开始(ego_search.py CLI)
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# 首次使用:先开启专业搜索模式(需用户确认;开启后长期生效)
|
|
97
|
+
python3 sub-skills/ego-search/scripts/ego_search.py enable
|
|
98
|
+
|
|
99
|
+
# 探测运行时与专业模式(--fix 幂等启 WebBridge 桥)
|
|
100
|
+
python3 sub-skills/ego-search/scripts/ego_search.py status [--fix]
|
|
101
|
+
|
|
102
|
+
# 浏览器态搜索(真实 SERP,输出 argo JSON schema)
|
|
103
|
+
# --runtime auto(默认: 有 ego 用 ego,否则 webbridge) | ego | webbridge
|
|
104
|
+
python3 sub-skills/ego-search/scripts/ego_search.py search "AI agent 浏览器自动化" --engine bing --n 8
|
|
105
|
+
|
|
106
|
+
# 强制登录态站点搜索(如知乎/小红书,需登录态)
|
|
107
|
+
python3 sub-skills/ego-search/scripts/ego_search.py search "site:zhihu.com AI 搜索" --engine bing
|
|
108
|
+
|
|
109
|
+
# 浏览器态正文提取(JS 渲染/反爬/登录墙页面)
|
|
110
|
+
python3 sub-skills/ego-search/scripts/ego_search.py fetch "https://example.com/article" --focus 关键词
|
|
111
|
+
|
|
112
|
+
# 同源 API 数据直取(登录态站点接口)
|
|
113
|
+
python3 sub-skills/ego-search/scripts/ego_search.py api "https://www.zhihu.com/api/v4/search_v3?t=general&q=AI代理&limit=5" --origin "https://www.zhihu.com"
|
|
114
|
+
|
|
115
|
+
# 指定任务空间名(同一目标的多轮操作复用同名空间)
|
|
116
|
+
python3 sub-skills/ego-search/scripts/ego_search.py search "竞品分析" --task-space "竞品调研"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
输出约定:**JSON 到 stdout**(机器可读,可管道给 `evidence.py` / 解析喂 RRF),日志到 stderr。
|
|
120
|
+
|
|
121
|
+
### 登录态 provenance(强制)
|
|
122
|
+
|
|
123
|
+
所有 `search` / `fetch` / `act` / `api` 输出均带:
|
|
124
|
+
|
|
125
|
+
| 字段 | 值 | 含义 |
|
|
126
|
+
|------|-----|------|
|
|
127
|
+
| `login_state_used` | `true` | 使用了浏览器登录态 |
|
|
128
|
+
| `auth_partition` | `login` | 认证分区标签(不写 cookie) |
|
|
129
|
+
| `cache_eligible` | `false` | **禁止**写入 argo 公共 `SearchCache` / `set_fetch` |
|
|
130
|
+
| `search_partition` | `login` | 与常规 `public` 检索分区隔离 |
|
|
131
|
+
| `merge_with_public_ok` | `true` | **允许**在汇总分析时与 public 结果一并送入 evidence |
|
|
132
|
+
| `runtime` | `ego` \| `webbridge` | 实际使用的运行时 |
|
|
133
|
+
|
|
134
|
+
公共库路径 `~/.cache/unified-search/cache.db` 在 `set` / `set_engine` / `set_fetch` 入口会硬拒绝
|
|
135
|
+
此类载荷。登录态结果默认不缓存 body。
|
|
136
|
+
|
|
137
|
+
### 与常规搜索的隔离与融合
|
|
138
|
+
|
|
139
|
+
| 阶段 | 规则 |
|
|
140
|
+
|------|------|
|
|
141
|
+
| **检索** | public(argo)与 login(本技能)分开跑、分 cache、分 partition |
|
|
142
|
+
| **缓存** | login 永不进 argo 公共缓存;两路互不 soft-hit |
|
|
143
|
+
| **汇总** | Agent 可将两路 `results` / 正文一并交给 `evidence` 或报告生成;用 `source` / `runtime` / `search_partition` 区分权重与可信语境 |
|
|
144
|
+
|
|
145
|
+
### 安全与登录态长期可用
|
|
146
|
+
|
|
147
|
+
| 控制 | 默认 | 说明 |
|
|
148
|
+
|------|------|------|
|
|
149
|
+
| 专业模式闸门 | 关 | 需用户 `enable` 后才跑登录态检索 |
|
|
150
|
+
| URL 守卫 | 拦 | `fetch`/`api`/`navigate` 仅 http(s),默认禁本机/字面私有 IP;`EGO_SEARCH_STRICT_SSRF=1` 全量 DNS;`ARGO_ALLOW_PRIVATE_URLS=1` 放行 |
|
|
151
|
+
| 任务空间收尾 | 关空间 | ego 路径默认 `completeTaskSpace keep:false`,防标签堆积 |
|
|
152
|
+
| `--keep-space` / `--site` | 见右 | 多轮保温;`--site zhihu.com` → `site:zhihu.com` 并默认 keep |
|
|
153
|
+
| 登录墙质量信号 | 开 | fetch/act 输出 `quality.auth_wall_suspected` / `login_likely_ok` |
|
|
154
|
+
| WebBridge session | 不自动 close_session | 避免误关用户标签 |
|
|
155
|
+
| 公共缓存 | 拒写 | `cache_eligible=false` + SearchCache 硬守卫 |
|
|
156
|
+
| 分析融合 | `merge` | 与 public 结果隔离缓存、汇总时用 `merge --public --login` |
|
|
157
|
+
| 降级 | auto | 任一安装即可;ego 优先,失败降 WebBridge |
|
|
158
|
+
|
|
159
|
+
**登录态稳定建议**:
|
|
160
|
+
|
|
161
|
+
1. 同站多轮:`--site zhihu.com`(或 `--task-space site:zhihu.com --keep-space`)
|
|
162
|
+
2. 单次取证:默认即可(跑完关空间)
|
|
163
|
+
3. `quality.login_likely_ok=false` → 在 ego App 或用户 Chrome 人工登录后重试
|
|
164
|
+
4. 不要把登录态 body 写入 public cache;汇总用 `merge`
|
|
165
|
+
### search 模式
|
|
166
|
+
|
|
167
|
+
打开指定搜索引擎的真实结果页,`js()` 提取结构化 SERP,输出:
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"query": "AI agent 浏览器自动化",
|
|
172
|
+
"engine": "ego_browser_bing",
|
|
173
|
+
"source": "ego-browser",
|
|
174
|
+
"url": "https://cn.bing.com/search?q=...",
|
|
175
|
+
"results": [
|
|
176
|
+
{"title": "...", "url": "https://...", "snippet": "..."}
|
|
177
|
+
],
|
|
178
|
+
"count": 8,
|
|
179
|
+
"fetch_method": "browser",
|
|
180
|
+
"login_state_used": true,
|
|
181
|
+
"auth_partition": "login",
|
|
182
|
+
"cache_eligible": false
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
- `--engine`:`bing`(默认,最稳)/ `baidu`(中文)/ `google`(需网络可达,可能弹验证)。
|
|
187
|
+
- `--n`:结果条数(默认 8)。
|
|
188
|
+
- 注意:SERP 本身是**检索入口**,不是正文证据——高后果结论必须 `fetch` 打开结果页取正文后再下判断(与 argo「SERP 链禁止当正文来源」纪律一致)。
|
|
189
|
+
|
|
190
|
+
### fetch 模式
|
|
191
|
+
|
|
192
|
+
浏览器态正文提取。优先 `article`/`main`/`[role=main]` 等语义容器,回退 `document.body.innerText`,
|
|
193
|
+
输出 `{ url, title, content, word_count, fetch_method: "browser" }`,正文可管道给 argo 质量信号分析。
|
|
194
|
+
|
|
195
|
+
- `--focus 关键词`:若传,只返回包含该关键词附近的段落(减少 token)。
|
|
196
|
+
|
|
197
|
+
### api 模式
|
|
198
|
+
|
|
199
|
+
浏览器上下文**同源 API 数据直取**(v1.1.0)。
|
|
200
|
+
先打开目标站点页面(继承登录态),再用 `browserFetch` 从该页面上下文请求同源接口,
|
|
201
|
+
拿回结构化 JSON/文本。覆盖 DOM 提取拿不到的场景:
|
|
202
|
+
|
|
203
|
+
- **SPA/XHR 懒加载截断**:页面只渲染前几屏,全量数据在接口里 → 直取接口拿全量。
|
|
204
|
+
- **登录态私有数据**:已登录站点的个人/搜索接口 → 页面 cookies 随请求携带。
|
|
205
|
+
- **站点内 API 搜索**:直接调站点搜索 API(如知乎 `search_v3`),比解析 SERP 更干净。
|
|
206
|
+
|
|
207
|
+
```json
|
|
208
|
+
{
|
|
209
|
+
"api_url": "https://www.zhihu.com/api/v4/search_v3?t=general&q=...",
|
|
210
|
+
"page_url": "https://www.zhihu.com/",
|
|
211
|
+
"page_title": "(1 条消息) 首页 - 知乎",
|
|
212
|
+
"data": { "paging": {...}, "data": [...] },
|
|
213
|
+
"data_type": "json",
|
|
214
|
+
"fetch_method": "browser_api"
|
|
215
|
+
}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
- `--origin`:登录态上下文页面 URL。**默认取 API URL 同源**(scheme://host);
|
|
219
|
+
跨子域场景(如 `cn.bing.com` 请求 `www.bing.com`)须显式指定,否则 browserFetch 受
|
|
220
|
+
同源约束失败。
|
|
221
|
+
- `data_type`:`json` / `text` / `error`(跨域、网络错误等归一化为 error,脚本不崩)。
|
|
222
|
+
- 大响应截断:`data` 超 100KB 时截断并标记 `truncated: true`、`data_type` 加
|
|
223
|
+
`_truncated` 后缀。
|
|
224
|
+
- **定位**:api 模式输出是「原始数据」,供 Agent 分析判断,**不是 SERP 证据**,
|
|
225
|
+
高后果结论仍须走 `argo_evidence` 核验。
|
|
226
|
+
|
|
227
|
+
### act 模式
|
|
228
|
+
|
|
229
|
+
把「搜索 → 点开结果 → 抓正文」等常见链式动作一次跑完。
|
|
230
|
+
支持 `--engine bing|baidu|google`(与 search 同表,默认 bing)。
|
|
231
|
+
输出含 `query` / `results` / `detail` 与登录态 provenance。
|
|
232
|
+
更复杂的多步交互(登录、表单、翻页、对比多个页面)用 `ego-browser nodejs` heredoc;
|
|
233
|
+
`ego_search.py` 只覆盖高频确定路径。
|
|
234
|
+
|
|
235
|
+
## 与 argo 主系统配合
|
|
236
|
+
|
|
237
|
+
1. **证据流水线**:ego-search 的输出与 argo schema 对齐,`results` 可直接喂
|
|
238
|
+
`python3 scripts/evidence.py "查询词" --stdin --json` 做 Selection×Absorption 评分;
|
|
239
|
+
正文可复用 `content_signals` / `content_security` 检查。
|
|
240
|
+
2. **RRF 融合**:`source=ego-browser` / `engine=ego_browser_<engine>` 可参与多源去重;
|
|
241
|
+
envelope 会标 `login_state_used=true`。**不得**把该路结果写入公共 SearchCache。
|
|
242
|
+
3. **分层查询纪律**:事实类问题保持 argo 的 2–3 条子查询纪律(来源要求 / 对比 / 主体),
|
|
243
|
+
ego-search 用于其中「登录态/动态内容」这一路,不替代 argo 引擎的全量召回。
|
|
244
|
+
4. **防污染**:内容安全引擎照常;**缓存隔离**靠 `cache_eligible=false` + SearchCache 硬守卫。
|
|
245
|
+
5. **缓存策略**:默认不缓存登录态 body;若未来做短缓存,必须独立库
|
|
246
|
+
`~/.cache/ego-search/`,键含 `auth_partition`,禁止 soft-hit 公共 combo。
|
|
247
|
+
## 按需读取
|
|
248
|
+
|
|
249
|
+
复杂交互、heredoc 全 helper 速查、任务空间归属权纪律 → `references/browser-runtime.md`;安装细节 → `references/install.md`;升级到原版运行时 → `references/original-ego-upgrade.md`。
|
|
250
|
+
|
|
251
|
+
## 参考
|
|
252
|
+
|
|
253
|
+
- 浏览器运行时细节:`references/install.md`(依赖安装)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# ego-search 浏览器运行时参考(低频:复杂交互才需要)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## 直接浏览器操作
|
|
5
|
+
|
|
6
|
+
复杂交互路径用浏览器运行时命令 `ego-browser nodejs` heredoc 直接编排(本子技能继承完整
|
|
7
|
+
运行时)。核心纪律:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
ego-browser nodejs <<'EOF'
|
|
11
|
+
// 同名任务空间跨轮次复用;同一用户目标不新建空间
|
|
12
|
+
const task = await useOrCreateTaskSpace('竞品调研')
|
|
13
|
+
await openOrReuseTab('https://example.com', { wait: true, timeout: 20 })
|
|
14
|
+
cliLog(await snapshotText()) // 语义快照,带 [ref=N, loc=..., url=...]
|
|
15
|
+
EOF
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Helpers 速查**:
|
|
19
|
+
|
|
20
|
+
- 任务空间:`useOrCreateTaskSpace` / `listTaskSpaces` / `claimTaskSpace` / `handOffTaskSpace` / `takeOverTaskSpace` / `completeTaskSpace`
|
|
21
|
+
- 导航:`openOrReuseTab` / `gotoAndWait` / `pageInfo` / `listTabs` / `switchTab`
|
|
22
|
+
- 观察:`snapshotText` / `captureScreenshot` / `drainEvents`
|
|
23
|
+
- 动作:`click` / `fillInput` / `typeText` / `pressKey` / `scrollToBottomUntil` / `hover` / `uploadFile`
|
|
24
|
+
- 等待:`wait` / `waitForElement` / `waitForNetworkIdle`
|
|
25
|
+
- 提取:`js`(页面内 JS)/ `cdp`(浏览器协议)
|
|
26
|
+
- 输出:`cliLog`(唯一输出通道;`-e` 模式下输出到 stderr)
|
|
27
|
+
|
|
28
|
+
**关键纪律**:
|
|
29
|
+
|
|
30
|
+
1. **任务空间隔离 + 登录态继承**:Agent 在独立空间操作,不抢用户标签页;登录态默认继承,可访问已登录站点。
|
|
31
|
+
2. **跨轮次复用**:Node 运行时每次 heredoc 退出即释放,后续轮次用 `useOrCreateTaskSpace(同名)` 或
|
|
32
|
+
`takeOverTaskSpace`(用户确认继续后)恢复。
|
|
33
|
+
3. **归属权**:用户接管空间时("user is controlling")是硬停——问用户并等待,不重试不抢回;
|
|
34
|
+
`handOffTaskSpace` 交还用户后,只有用户明确确认(Ask 的 Continue)才 `takeOverTaskSpace`。
|
|
35
|
+
4. **收尾**:任务完成必须 `completeTaskSpace(name, { keep: false })` 关掉空间;
|
|
36
|
+
仅当用户明确要求保留页面/需人工操作/结果无法用 URL 交付时才 `{ keep: true }`。
|
|
37
|
+
5. **`js()` 用法**:页面内逻辑包成单个 IIFE 一次返回;`js()` 返回求值结果而非 JSON 字符串,
|
|
38
|
+
不要包 `JSON.parse`;模板字符串里正则反斜杠要双写或 `String.raw`。
|
|
39
|
+
6. **输出通道**:heredoc 模式 `cliLog` 输出到 stdout;`ego-browser nodejs -e "..."` 模式输出到 **stderr**。
|
|
40
|
+
|
|
41
|
+
**三种工作流**:普通 DOM 页用语义流(`snapshotText` + `@N`/`loc=` 引用);canvas/富编辑器
|
|
42
|
+
(Google Docs/Notion/Figma 等)用视觉流(截图 + 坐标 + 键盘);需要浏览器态/紧凑数据提取用
|
|
43
|
+
直接 DOM/CDP 流(`js`/`cdp`)。
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Install ego lite
|
|
2
|
+
|
|
3
|
+
Read this file only when ego lite isn't installed yet, or when the user asks to install ego lite. For day-to-day browser work, go back to `SKILL.md`.
|
|
4
|
+
|
|
5
|
+
The ego-browser skill depends on the ego lite browser: the `ego-browser` command is provided by the ego lite app. Once ego lite is installed and you've gone through onboarding once, the environment is ready and there are no further environment issues.
|
|
6
|
+
|
|
7
|
+
ego lite website: https://lite.ego.app/
|
|
8
|
+
|
|
9
|
+
## Install steps (macOS only)
|
|
10
|
+
|
|
11
|
+
The install script lives at `scripts/install.sh` in this skill and supports macOS only. It will:
|
|
12
|
+
|
|
13
|
+
- Download the ego lite installer (a DMG) for your CPU architecture (arm64 / x64).
|
|
14
|
+
- Install `ego lite.app` to `/Applications` (falling back to `~/Applications` when needed).
|
|
15
|
+
- Strip the quarantine attribute to keep Gatekeeper from blocking the first launch.
|
|
16
|
+
- After installing, launch the `ego lite` app.
|
|
17
|
+
|
|
18
|
+
Run the script (use the script's actual path under this skill's directory):
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
sh skills/ego-browser/scripts/install.sh
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
After installing, the script opens the ego lite app directly. If ego lite is already installed, the script skips the download and opens the app directly.
|
|
25
|
+
|
|
26
|
+
After the script opens the ego lite app, the user completes the first-run onboarding in the app:
|
|
27
|
+
|
|
28
|
+
- Choose to import data from Chrome or another browser as needed.
|
|
29
|
+
- Onboarding registers the `ego-browser` command on the PATH (usually under `~/.local/bin`).
|
|
30
|
+
|
|
31
|
+
Onboarding is a step the user completes in the GUI. After the script opens ego lite, wait for the user to confirm they've finished onboarding before continuing.
|
|
32
|
+
|
|
33
|
+
## After installing: confirm `ego-browser` is available
|
|
34
|
+
|
|
35
|
+
Once the user has finished onboarding, confirm the command is ready:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
command -v ego-browser
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If it reports that the command isn't found, `~/.local/bin` is most likely not on the current PATH. Fix it temporarily and retry:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
45
|
+
command -v ego-browser
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Once the command exists, verify the runtime with a minimal heredoc:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
ego-browser nodejs <<'EOF'
|
|
52
|
+
cliLog('ego-browser ready')
|
|
53
|
+
EOF
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Printing `ego-browser ready` means the environment is ready.
|
|
57
|
+
|
|
58
|
+
## After that, return to the original task
|
|
59
|
+
|
|
60
|
+
Once the environment is ready, return to the user's original task and continue with the task space flow in `SKILL.md` — start from `useOrCreateTaskSpace(name)` and proceed as usual.
|
|
61
|
+
|
|
62
|
+
## Troubleshooting
|
|
63
|
+
|
|
64
|
+
- **Not macOS**: the script supports macOS only (`uname -s` is `Darwin`). On other platforms, have the user download and install from the ego lite website at https://lite.ego.app/.
|
|
65
|
+
- **Download failed**: the script retries 3 times automatically; if it still fails, it's usually a network issue — have the user check their network and retry.
|
|
66
|
+
- **Gatekeeper still blocks it**: the script already tries to strip quarantine; if the first launch is still blocked, have the user allow ego lite manually under System Settings → Privacy & Security.
|
|
67
|
+
- **Command still unavailable after onboarding**: confirm `~/.local/bin` is on the PATH (see above); or have the user reopen ego lite, finish onboarding, and retry.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 原版 ego 技能升级要点(与本子技能配套)
|
|
2
|
+
|
|
3
|
+
原版 `ego-browser` skill 仍是**通用浏览器自动化**真源;本文件只补「与登录态专业搜索完全态」对齐的用法,不替换原版 SKILL 正文。
|
|
4
|
+
|
|
5
|
+
## 与 ego-search 分工
|
|
6
|
+
|
|
7
|
+
| 场景 | 用谁 |
|
|
8
|
+
|------|------|
|
|
9
|
+
| 搜 SERP / 抓正文 / 已知 API / 登录墙取证 | **ego-search**(双运行时 auto) |
|
|
10
|
+
| 复杂点选、填表、多步、截图工作流 | **原版 ego-browser** heredoc |
|
|
11
|
+
| 无 ego App、只有用户 Chrome | **ego-search --runtime webbridge** |
|
|
12
|
+
|
|
13
|
+
## 建议启用但常被忽略的能力
|
|
14
|
+
|
|
15
|
+
在 `ego-browser nodejs` 中(打开目标站后):
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
// 站点经验包(若该站有 learnings)
|
|
19
|
+
const ctx = await learnContext()
|
|
20
|
+
cliLog(JSON.stringify(ctx))
|
|
21
|
+
// 例如 google 搜索抽取(以实际 manifest 为准)
|
|
22
|
+
// await runSiteTool('google', 'search_and_extract', { query: '...' })
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
站点包通常在应用内 `learnings/`(google / x-com / github 等)。
|
|
26
|
+
|
|
27
|
+
## 输出建议(与隔离/融合对齐)
|
|
28
|
+
|
|
29
|
+
原版 heredoc 若产出可并入分析的结果,请在 `cliLog` 的 JSON 中尽量带:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"login_state_used": true,
|
|
34
|
+
"auth_partition": "login",
|
|
35
|
+
"cache_eligible": false,
|
|
36
|
+
"search_partition": "login",
|
|
37
|
+
"merge_with_public_ok": true,
|
|
38
|
+
"runtime": "ego",
|
|
39
|
+
"source": "ego-browser"
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
勿把登录态 body 写入 argo 公共 `SearchCache`。
|
|
44
|
+
|
|
45
|
+
## 探测
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
python3 sub-skills/ego-search/scripts/ego_search.py status
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`runtimes.preferred` / `login_search_ready` 表示登录态专业搜索是否可跑。
|