argo-search 2.9.7 → 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.
Files changed (140) hide show
  1. package/README.en.md +58 -145
  2. package/README.es.md +58 -145
  3. package/README.ja.md +64 -151
  4. package/README.ko.md +63 -150
  5. package/README.md +65 -154
  6. package/SKILL.md +3 -3
  7. package/assets/readme/hero.svg +2 -2
  8. package/backends/domain_profiles.json +48 -0
  9. package/backends/engine_registry.yaml +118 -4
  10. package/backends/quota_profiles.json +92 -12
  11. package/backends/source_types_cn.json +27 -1
  12. package/bin/argo +74 -5
  13. package/bin/argo.js +33 -2
  14. package/config.yaml +219 -60
  15. package/docs/ENGINE_CATALOG.md +50 -39
  16. package/docs/MCP_SETUP.md +3 -1
  17. package/docs/RELEASE_NOTES_v2.9.8.md +73 -0
  18. package/engines/specs/cfets.yaml +41 -0
  19. package/engines/specs/defillama.yaml +38 -0
  20. package/engines/specs/firecrawl.yaml +1 -1
  21. package/engines/specs/fxtwitter.yaml +5 -0
  22. package/engines/specs/gleif.yaml +55 -0
  23. package/engines/specs/hkex.yaml +40 -0
  24. package/engines/specs/keenable_free.yaml +36 -0
  25. package/engines/specs/shfe.yaml +39 -0
  26. package/engines/specs/stackexchange.yaml +2 -2
  27. package/engines/specs/tavily_free.yaml +56 -0
  28. package/engines/specs/yuanbao.yaml +93 -0
  29. package/mcp/clients.yaml +32 -0
  30. package/package.json +6 -2
  31. package/packages/dsh-plugin/README.md +23 -5
  32. package/packages/dsh-plugin/dsh/client.js +304 -15
  33. package/packages/dsh-plugin/dsh/diagnostics.js +54 -0
  34. package/packages/dsh-plugin/dsh/index.js +112 -1875
  35. package/packages/dsh-plugin/dsh/native-tools.mjs +7 -1
  36. package/packages/dsh-plugin/dsh/runner.js +666 -0
  37. package/packages/dsh-plugin/dsh/wide-research.js +878 -0
  38. package/packages/dsh-plugin/package.json +2 -2
  39. package/packages/dsh-plugin/scripts/sync-local.sh +70 -0
  40. package/packages/dsh-plugin/test/client.test.js +175 -1
  41. package/packages/dsh-plugin/test/diagnostics.test.js +28 -0
  42. package/packages/dsh-plugin/test/index.test.js +44 -0
  43. package/scripts/adaptive.py +24 -1
  44. package/scripts/article_meta.py +131 -0
  45. package/scripts/budget.py +247 -0
  46. package/scripts/budget_cli.py +93 -0
  47. package/scripts/build_release_assets.sh +65 -0
  48. package/scripts/cache.py +60 -72
  49. package/scripts/ci_drift_gate.py +90 -0
  50. package/scripts/content_boundary.py +46 -0
  51. package/scripts/content_signals.py +26 -5
  52. package/scripts/cross_lingual_trace.py +293 -0
  53. package/scripts/dispatch_result.py +98 -0
  54. package/scripts/engine_dispatch.py +49 -86
  55. package/scripts/engine_env.py +5 -0
  56. package/scripts/engine_families.py +6 -0
  57. package/scripts/engine_policy.py +7 -7
  58. package/scripts/engines.py +21 -0
  59. package/scripts/engines_base.py +3 -3
  60. package/scripts/engines_builders.py +12 -0
  61. package/scripts/engines_builders_batch10.py +48 -3
  62. package/scripts/engines_builders_batch14.py +656 -0
  63. package/scripts/engines_builders_batch15.py +249 -0
  64. package/scripts/engines_builders_keyless.py +111 -0
  65. package/scripts/engines_builders_tech.py +0 -1
  66. package/scripts/evidence.py +31 -3
  67. package/scripts/evidence_loop.py +54 -22
  68. package/scripts/fetch_v3.py +25 -0
  69. package/scripts/gen_routing_snapshot.py +11 -0
  70. package/scripts/install.ps1 +18 -0
  71. package/scripts/install.sh +16 -1
  72. package/scripts/job.py +3 -3
  73. package/scripts/local_seek.py +41 -5
  74. package/scripts/macro_countries.py +15 -0
  75. package/scripts/matrix_search_eval.py +82 -0
  76. package/scripts/mcp_compact.py +234 -0
  77. package/scripts/mcp_handlers.py +60 -642
  78. package/scripts/mcp_launch.sh +10 -8
  79. package/scripts/mcp_local.py +241 -0
  80. package/scripts/mcp_server.py +19 -14
  81. package/scripts/mcp_setup.py +33 -9
  82. package/scripts/mcp_tools.py +1 -0
  83. package/scripts/mcp_transport.py +1 -1
  84. package/scripts/mcp_warm.py +127 -0
  85. package/scripts/output_transparency.py +200 -0
  86. package/scripts/paid_policy.py +98 -0
  87. package/scripts/quota.py +158 -13
  88. package/scripts/recovery_runner.py +150 -0
  89. package/scripts/replay_eval.py +18 -0
  90. package/scripts/research.py +37 -21
  91. package/scripts/research_expand.py +24 -1
  92. package/scripts/retry_policy.py +76 -0
  93. package/scripts/route.py +6 -6
  94. package/scripts/route_cache.py +18 -0
  95. package/scripts/route_combo.py +7 -0
  96. package/scripts/route_domains.py +32 -19
  97. package/scripts/search.py +15 -27
  98. package/scripts/search_attribution.py +100 -3
  99. package/scripts/search_cli.py +24 -11
  100. package/scripts/search_entry.py +7 -1
  101. package/scripts/search_output.py +99 -15
  102. package/scripts/search_pipeline.py +42 -193
  103. package/scripts/search_types.py +107 -9
  104. package/scripts/semantic_evidence.py +179 -3
  105. package/scripts/serp_guard.py +115 -7
  106. package/scripts/serp_kill_log.py +25 -2
  107. package/scripts/stats_cli.py +13 -1
  108. package/scripts/wide_research.py +45 -0
  109. package/scripts/zhihu_quota.py +139 -0
  110. package/sub-skills/local-search/bm25.py +27 -3
  111. package/sub-skills/local-search/cli_runner.py +331 -0
  112. package/sub-skills/local-search/parsers.py +328 -0
  113. package/sub-skills/local-search/search_v3.py +31 -674
  114. package/sub-skills/local-seek/scripts/seek_rank.py +7 -3
  115. package/assets/readme/settings-keys.png +0 -0
  116. package/assets/readme/settings-tools.png +0 -0
  117. package/scripts/image_vision/vision_probe +0 -0
  118. package/scripts/local_engines.py +0 -321
  119. package/sub-skills/ego-search/references/browser-runtime.md +0 -43
  120. package/sub-skills/ego-search/references/install.md +0 -67
  121. package/sub-skills/ego-search/references/original-ego-upgrade.md +0 -51
  122. package/sub-skills/ego-search/tests/test_query_normalize.py +0 -68
  123. package/sub-skills/js-run/tests/fixtures/challenge_like.js +0 -27
  124. package/sub-skills/js-run/tests/test_jsrun.py +0 -165
  125. package/sub-skills/local-seek/references/auto-behaviors.md +0 -24
  126. package/sub-skills/local-seek/references/fd-mdfind-recipes.md +0 -62
  127. package/sub-skills/local-seek/references/git-integration.md +0 -54
  128. package/sub-skills/local-seek/references/remote-handoff.md +0 -46
  129. package/sub-skills/local-seek/references/rg-recipes.md +0 -96
  130. package/sub-skills/local-seek/references/strategies.md +0 -52
  131. package/sub-skills/local-seek/references/structural-search.md +0 -59
  132. package/sub-skills/local-seek/tests/test_content_rank.py +0 -222
  133. package/sub-skills/local-seek/tests/test_determinism_20261006.py +0 -145
  134. package/sub-skills/local-seek/tests/test_noise_tier.py +0 -101
  135. package/sub-skills/local-seek/tests/test_pcre2_probe.py +0 -136
  136. package/sub-skills/local-seek/tests/test_rank_pinyin.py +0 -77
  137. package/sub-skills/local-seek/tests/test_regression_20261003.py +0 -169
  138. package/sub-skills/local-seek/tests/test_regression_20261006.py +0 -146
  139. package/sub-skills/local-seek/tests/test_seek_degradation.py +0 -111
  140. package/sub-skills/local-seek/tests/test_seek_fts.py +0 -313
@@ -0,0 +1,56 @@
1
+ # Tavily 免 key 通道(官方 keyless 匿名额度)
2
+ #
3
+ # 为什么与 tavily 并列而不是合并:两者同上游、不同经济模型——tavily 用
4
+ # ARGO_TAVILY_API_KEY 走账号档(额度高、结果稳),本引擎走官方 keyless
5
+ # 头(x-tavily-access-mode),不读任何 key。计费语义不同,合并会让
6
+ # 「免费源不当计费源」的检查失真(与 parallel / parallel_free 同一处理)。
7
+ #
8
+ # 端点语义(2026-10-21 实测):POST /search,带 `x-tavily-access-mode: keyless`
9
+ # 且不带 Authorization,返回与账号档同构的 {results:[{title,url,content,score}]}。
10
+ # 匿名额度有 IP 级限流;失效时返回 4xx,由调度层换源,不静默伪装成空结果。
11
+ #
12
+ # 验证:
13
+ # python3 scripts/engine_validate.py --engine tavily_free --stage health --admit
14
+ # argo search "OpenAI" --engine tavily_free --json
15
+
16
+ engine_id: tavily_free
17
+ type: http
18
+ enabled: true
19
+ cost_tier: free
20
+ label: Tavily (keyless)
21
+ family: web_general
22
+ priority: 56
23
+ qps: 1
24
+ period: second
25
+ cost_per_call: 0.0
26
+ cost_unit: free
27
+ recommended: false
28
+
29
+ method: POST
30
+ url: https://api.tavily.com/search
31
+ timeout: 15
32
+
33
+ headers:
34
+ Content-Type: application/json
35
+ x-tavily-access-mode: keyless
36
+
37
+ body:
38
+ query: "{query}"
39
+ max_results: "{n}"
40
+ search_depth: basic
41
+ include_answer: false
42
+
43
+ output_map:
44
+ items: results
45
+ item_title: title
46
+ item_url: url
47
+ item_summary: content
48
+ item_published_at: published_date
49
+
50
+ canary_query: OpenAI
51
+ desc: "Tavily 官方免 key 匿名通道(通用网页搜索,无需注册)"
52
+ coverage: [general, english, chinese]
53
+
54
+ quality_queries:
55
+ - query: OpenAI
56
+ - query: 人工智能 应用
@@ -0,0 +1,93 @@
1
+ # 腾讯元宝搜索(Tencent WSA SearchPro,需 key)——默认开,无 key 时路由自动跳过
2
+ #
3
+ # 它是什么:腾讯云「联网搜索」的元宝口径(POST api.wsa.cloud.tencent.com/SearchPro)。
4
+ # 中文全网检索,返回**权威源占比很高**:实测「三星堆的由来」10 条里 8 条来自
5
+ # 人民日报 / 新华网 / 国家文物局 / 住建部 / 国家民委 / 中国日报 / 中新网 /
6
+ # 中国经济网,另 2 条为环球网与腾讯新闻。这与 bocha/byted 的「门户+自媒体」
7
+ # 构成互补——同一个查询上,它更偏一手/官方口径。
8
+ #
9
+ # 返回字段(实测):passage(摘要 ~800 字)、content(更长正文 ~2000 字)、
10
+ # score(相关度 0.55-0.65 区间)、date(`YYYY/MM/DD HH:MM:SS`,东八区)、
11
+ # title、url、site(站点中文名,如「人民日报」)、favicon、pics。
12
+ # 搜索层只取 passage 当摘要,正文按需走 fetch/verify 链(与 DeepSeek 引擎同口径)。
13
+ #
14
+ # 为什么是独立 builder 而不是 type: http(四条声明式表达不了的事实):
15
+ # 1. Pages 是 **JSON 字符串数组**,要二次解析
16
+ # 2. 错误全部走 HTTP 200 + Response.Error(鉴权/欠费/限流都是),
17
+ # 声明式会把它当「0 结果」
18
+ # 3. date 是斜杠格式,不是 argo 的 ISO 约定
19
+ # 4. Cnt 只接受 10/20/30/50,传别的值回 "illegal Cnt"
20
+ # 详见 scripts/engines_builders_batch15.py 的模块 docstring。
21
+ #
22
+ # 成本口径:**未知**。官方文档未公布单价,只有 ResourceUnavailable「请检查账号
23
+ # 是否欠费」这一条侧面说明它按量计费。故 cost_per_call 记 0.0(预算层因此不会
24
+ # 扣减),并用 explicit_only 把它挡在自动路由之外——在价格与额度未知之前,
25
+ # 不让它进任何域 combo,避免「自动花钱却算不出花了多少」。补齐价格后再按
26
+ # scripts/paid_policy.py 的既有做法决定是否放进白名单域的付费对冲位。
27
+ #
28
+ # 启用前提:
29
+ # 1. 配置 key(两个名字都认):
30
+ # ARGO_YUANBAO_API_KEY=<key> # argo 推荐名
31
+ # TENCENTCLOUD_WSA_APIKEY=<key> # 腾讯官方名(文档里的环境变量名)
32
+ # 写进 ~/.config/argo/env 即可,只进环境不落仓库。
33
+ # 2. 健康门:python3 scripts/engine_validate.py --engine yuanbao --stage all --admit
34
+ # 3. 显式调用:argo search "三星堆的由来" --engine yuanbao --json --fields agent
35
+ #
36
+ # 实测(2026-10-21 本机):单次 POST 0.44s,返回 10 条,响应体 ~90KB。
37
+ engine_id: yuanbao
38
+ type: yuanbao
39
+ enabled: true
40
+ # 额度是**按次**的(默认 2000/月),不是按钱的——用 limit + period 的计数档位,
41
+ # 不用 budget.py 的金额档(金额档要单价,计数档不要;单价官方也没公布)。
42
+ #
43
+ # 「次数」的口径:quota.record_many 的 used 计的是**发出过的调用数(含失败)**,
44
+ # 只有 cost_used 是成功才累加。对硬额度而言这是安全的一侧——本地宁可早停,
45
+ # 不让远端 2000 次的硬上限被撞穿;反过来说,本地显示「已用 100 次」时上游
46
+ # 可能只计了其中成功的那些。本轮不改这个口径(改它要动 record_many 的通用
47
+ # 语义,影响全部引擎)。
48
+ #
49
+ # 额度用完即 is_hard_down(全模式排除,不是仅仅排除路由),到 30 天周期边界
50
+ # 惰性自愈;想提前恢复用 `python3 scripts/quota.py reset yuanbao`。
51
+ #
52
+ # **进自动路由(无 explicit_only)**:2026-10-21 起作为 chinese_general 域的第
53
+ # 2 位对冲位(config.yaml 该域的注释里有实测依据)。之所以敢进,是因为额度是
54
+ # **硬上限 + 自动摘除**:耗尽后 is_hard_down 把它从 combo 里摘掉,组合回落到
55
+ # 此前的 anysearch/zhihu_global 形态——降级是明确的一步,不是静默变窄。
56
+ # 代价是额度按查询量线性消耗(中文通用查询每次 1 次调用),档位见下方 limit。
57
+ cost_tier: api
58
+ method: POST
59
+ url: https://api.wsa.cloud.tencent.com/SearchPro
60
+ timeout: 12
61
+ canary_query: 三星堆的由来
62
+ label: 腾讯元宝搜索
63
+ family: web_general
64
+ priority: 55
65
+ # 上游有 RequestLimitExceeded,但公开文档未给具体 QPS;保守取 2,避免撞限流。
66
+ # 限频与下面的 period 无关:qps 检查走硬编码 60 秒窗口(quota.py:585 的
67
+ # `now - t < 60`),全仓没有限频器读 period。
68
+ qps: 2
69
+ # period 是**额度语义**,今天只影响两处 + 一处展示:
70
+ # 1. 本地额度重置跨度:quota._period_elapsed(month → 30 天,否则 1 天)
71
+ # 2. 远端耗尽冷却窗:quota._PERIOD_SECONDS(month → 30 天;表里查不到的值
72
+ # ——含 second/minute——落 86400,且「过短一律按 24h 保守处理」)
73
+ # 3. ENGINE_CATALOG 的「频率上限」列展示
74
+ # 本引擎限额是月度,故两处都应为 30 天 = month。
75
+ period: month
76
+ # 月度调用额度。默认按体验额度 2000 次/月;开通更高套餐时改本行 limit
77
+ # (DSH 面板默认值也按 2000 显示,面板写入只覆盖当前环境,不改进本文件)。
78
+ limit: 2000
79
+ # 单价未知(官方未公布超额度后的计价),故不填金额,只由 limit 约束次数。
80
+ cost_per_call: 0.0
81
+ cost_unit: credit
82
+ recommended: false
83
+
84
+ # key 候选链:任一有值即视为就绪(解析见 engine_env.missing_env_for)
85
+ required_env:
86
+ - [ARGO_YUANBAO_API_KEY, TENCENTCLOUD_WSA_APIKEY, YUANBAO_API_KEY]
87
+
88
+ coverage: [web, chinese, news, official]
89
+
90
+ quality_queries:
91
+ - query: 三星堆的由来
92
+ - query: 央行 降准 最新
93
+ - query: 国家统计局 一季度 GDP
package/mcp/clients.yaml CHANGED
@@ -72,3 +72,35 @@ clients:
72
72
  servers_key: mcpServers
73
73
  format: json
74
74
  detect: [.workbuddy]
75
+
76
+ - id: claude-desktop
77
+ name: Claude Desktop
78
+ config_path: Library/Application Support/Claude/claude_desktop_config.json
79
+ config_path_darwin: Library/Application Support/Claude/claude_desktop_config.json
80
+ config_path_win32: AppData/Roaming/Claude/claude_desktop_config.json
81
+ config_path_linux: .config/Claude/claude_desktop_config.json
82
+ servers_key: mcpServers
83
+ format: json
84
+ detect_darwin: [Library/Application Support/Claude]
85
+ detect_win32: [AppData/Roaming/Claude]
86
+ detect_linux: [.config/Claude]
87
+
88
+ - id: zed
89
+ name: Zed
90
+ config_path: .config/zed/settings.json
91
+ servers_key: context_servers
92
+ format: json
93
+ detect: [.config/zed]
94
+
95
+ - id: roo-code
96
+ name: Roo Code
97
+ config_path: Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json
98
+ config_path_darwin: Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json
99
+ config_path_win32: AppData/Roaming/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json
100
+ config_path_linux: .config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json
101
+ servers_key: mcpServers
102
+ format: json
103
+ detect_darwin: [Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline]
104
+ detect_win32: [AppData/Roaming/Code/User/globalStorage/rooveterinaryinc.roo-cline]
105
+ detect_linux: [.config/Code/User/globalStorage/rooveterinaryinc.roo-cline]
106
+
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "argo-search",
3
- "version": "2.9.7",
4
- "description": "Argo 阿尔戈 — 统一搜索与证据核验。推荐 npx -y github:taxueseek/argo 或 install.sh 安装(不依赖 npm 发版)。多语言路由、264 个源(227 个免密钥开箱可用)、影视/体育/金融等垂直源、19 个 MCP 工具(与 CLI 能力面对齐)。",
3
+ "version": "2.9.8",
4
+ "description": "Argo 阿尔戈 — 统一搜索与证据核验。推荐 npx -y github:taxueseek/argo 或 install.sh 安装(不依赖 npm 发版)。多语言路由、272 个源(235 个免密钥开箱可用)、影视/体育/金融等垂直源、19 个 MCP 工具(与 CLI 能力面对齐)。",
5
5
  "keywords": [
6
6
  "mcp",
7
7
  "mcp-server",
@@ -53,6 +53,7 @@
53
53
  "docs/RELEASE_NOTES_v2.8.8.md",
54
54
  "docs/RELEASE_NOTES_v2.8.9.md",
55
55
  "docs/RELEASE_NOTES_v2.9.0.md",
56
+ "docs/RELEASE_NOTES_v2.9.8.md",
56
57
  "docs/assets/",
57
58
  "docs/engines/",
58
59
  "cordis.patch.yml",
@@ -67,6 +68,9 @@
67
68
  "!**/*.pyc",
68
69
  "!sub-skills/**/__pycache__/**",
69
70
  "!sub-skills/**/*.pyc",
71
+ "!sub-skills/**/tests/**",
72
+ "!sub-skills/**/references/**",
73
+ "!assets/readme/*.webp",
70
74
  "!data/jobs"
71
75
  ],
72
76
  "dsh": {
@@ -8,7 +8,25 @@ DeepSeek Harness 插件:一行同时挂上 [Argo](https://github.com/taxueseek
8
8
  dsh plugin --profile web add "github:taxueseek/argo#main&path:packages/dsh-plugin"
9
9
  ```
10
10
 
11
- 重启 `dsh web` 后生效。本 bundle 提供 **三形态接入**——同一套 argo 检索能力(同引擎、同压缩、同守卫),三种调用通道互为冗余,按宿主能力自动降级:
11
+ 重启 `dsh web` 后生效。
12
+
13
+ ### 本地开发:改完源码必须同步进 profile
14
+
15
+ profile 里的依赖是 `file:` / `github:`,pnpm 安装时**复制**进
16
+ `node_modules/@taxueseek/argo-dsh`,不是软链。只改本仓源码、不跑同步,
17
+ DSH 设置页读到的仍是旧 bundle(2026-10-22 实测:缓存开关与付费额度已改,
18
+ 面板仍显示旧版)。
19
+
20
+ ```bash
21
+ packages/dsh-plugin/scripts/sync-local.sh --check # 比对源码与已安装 bundle
22
+ packages/dsh-plugin/scripts/sync-local.sh # 同步 web/desktop
23
+ packages/dsh-plugin/scripts/sync-local.sh --restart # 同步并重启 dsh web
24
+ ```
25
+
26
+ 同步会先备份到 `~/.dsh/backups/argo-dsh-sync-<时间>-<profile>`;浏览器如仍显示
27
+ 旧面板,做一次硬刷新(Cmd+Shift+R)。
28
+
29
+ 本 bundle 提供 **三形态接入**——同一套 argo 检索能力(同引擎、同压缩、同守卫),三种调用通道互为冗余,按宿主能力自动降级:
12
30
 
13
31
  - **原生一等工具**(默认开):`argo_search` / `argo_fetch`(`ctx.tools.register`),走 CLI 单发(`--call`)复用 MCP 同一套引擎与守卫,**不依赖 MCP 连接、零常驻 token 开销**;`nativeTools: []` 关闭
14
32
  - **原生 web seam**(默认开):注册 `argo` 搜索与抓取两个 provider,宿主内置 `web_search` 路由到 argo 引擎链、`web_fetch` 走 argo 抓取链(HTTP 优先,遇 Cloudflare/JS 渲染自动升级反检测浏览器);`searchProviderEnabled: false` / `fetchProviderEnabled: false` 时对应 provider 注册但不可选
@@ -29,7 +47,7 @@ dsh plugin --profile web add "github:taxueseek/argo#main&path:packages/dsh-plugi
29
47
 
30
48
  - **接入**:`web_search` / `web_fetch` seam 开关;引擎入口命令与参数(npx 或本机 `mcp_server.py`);搜索/抓取超时、正文上限、连接空闲回收、并发连接数
31
49
  - **工具**:18 个原生一等工具的勾选(默认只开 `argo_search` / `argo_fetch`);单次调用超时与返回文本上限
32
- - **引擎**:argo 本体的行为开关(原环境变量,curated 白名单 28 个:缓存 / TF-IDF 重排 / 数值交叉校验 / MinHash 去重 / SERP 守卫、Jina / 移动端 UA / Parallel 抓取层、语义证据层、对冲宽限与尾宽、引擎启停名单、代理、本机检索根与读取白名单、预热 / 使用日志 / 连接池 / 各类 TTL)。开关类即时生效,数字 / 文本 / 名单类分组保存;未配置行显示 argo 默认态并标注「默认」。授权类开关(可复算执行、内网 URL)刻意不进面板
50
+ - **引擎**:argo 本体的行为开关(原环境变量,curated 白名单 35 个,分八组:缓存与排序 / 抓取层 / 语义与自适应 / 引擎启停 / 网络出口 / 本机检索 / **额度与预算** / 其他)。「缓存与排序」组第一项是**测试模式(关闭结果缓存)**,默认关、日常结果缓存 1 小时;只有改进 Skill/插件、需要实时结果时才打开。「额度与预算」组把免费与付费源放在同一套 QuotaManager 下:金额计费的源设月度预算(DeepSeek 元 / Exa 美元),按次数限额的源设日/月次数上限(AnySearch / 知乎按日,元宝默认 2000/月、Tavily 按月);博查按量付费,不设固定次数上限,由服务商侧结算。额度或预算用尽后该源自动跳过并回落免费源。开关类即时生效,数字 / 文本 / 名单类分组保存;未配置行显示 argo 默认态并标注「默认」。授权类开关(可复算执行、内网 URL)刻意不进面板
33
51
  - **密钥**:常用引擎 key 的填写、更新、清除;显示「已配置 / 未配置 + 来源层(凭证库 / 启动环境 / .env)+ 只读态」,明文不回显;每行可勾选「转发」,等价于把引用名加进 `keyRefs`
34
52
  - **研究**:worker / 轨道 / 每轨信源 / token 上限与报告落盘目录
35
53
  - **高级**:worker 工具 allow / deny 名单、凭证转发名单
@@ -70,7 +88,7 @@ argo 的 `deepseek_search` 引擎(官方 `api.deepseek.com/v1/tools/search`,
70
88
  - 安全:插件不读 key 文件、不落盘、不打日志;key 值只经内存进入 argo 子进程 env,任何输出与错误信息都不含它
71
89
  - 旧宿主无 credentials 服务时静默跳过:argo 侧该引擎按缺 key 停用,其余 265 个源不受影响
72
90
  - `keyRefs: []` 可整体关闭转发;后续要转发别的宿主凭证(如 `ARGO_EXA_API_KEY`),把引用名加进数组即可,entry 必须是 POSIX 标识符(apply 期 loud fail)
73
- - `argoEnv`(设置页「引擎」分区写入):argo 行为开关,一行一个 `KEY=VALUE`,名字限 curated 白名单(index.js 的 `ARGO_ENV_SPECS`,28 个;白名单外 apply 期 loud fail,防拼错静默失效);授权位与路径 / 状态类变量刻意不收。与 `keyRefs` 的分工:`keyRefs` 管密钥(凭证库),`argoEnv` 管行为开关(插件配置),两者都不落明文
91
+ - `argoEnv`(设置页「引擎」分区写入):argo 行为开关,一行一个 `KEY=VALUE`,名字限 curated 白名单(index.js 的 `ARGO_ENV_SPECS`,35 个;白名单外 apply 期 loud fail,防拼错静默失效);授权位与路径 / 状态类变量刻意不收。与 `keyRefs` 的分工:`keyRefs` 管密钥(凭证库),`argoEnv` 管行为开关(插件配置),两者都不落明文
74
92
 
75
93
  ## 依赖
76
94
 
@@ -83,8 +101,8 @@ argo 的 `deepseek_search` 引擎(官方 `api.deepseek.com/v1/tools/search`,
83
101
 
84
102
  | argo-dsh | DSH Harness | 说明 |
85
103
  |----------|-------------|------|
86
- | 2.9.7(当前) | 0.2.1-rc.2(当前,运行中) | 自带设置页(接入 / 工具 / API 密钥 / 研究 / 高级);双栈入口 `startActivation({provider, label, request, signal, delivery})`;rc.2 移除 `toolFilter` 启动期字段后由插件内 tool guard 阻止 worker 嵌套调用 `wide_research`;`wide_research` 端到端实测通过(planner → 2 worker → synthesis,passed=true / 14 sources) |
87
- | 2.9.7(当前) | 0.2.1-alpha.1(实测,兼容) | 旧宿主走 `start(provider, request)` 分支,`toolFilter` 启动期字段仍认;该分支由插件单测覆盖,未在 alpha.x 上重跑端到端 |
104
+ | 2.9.8(当前) | 0.2.1-rc.2(当前,运行中) | 自带设置页(接入 / 工具 / API 密钥 / 研究 / 高级);双栈入口 `startActivation({provider, label, request, signal, delivery})`;rc.2 移除 `toolFilter` 启动期字段后由插件内 tool guard 阻止 worker 嵌套调用 `wide_research`;`wide_research` 端到端实测通过(planner → 2 worker → synthesis,passed=true / 14 sources) |
105
+ | 2.9.7(上一版,兼容) | 0.2.1-alpha.1(实测,兼容) | 旧宿主走 `start(provider, request)` 分支,`toolFilter` 启动期字段仍认;该分支由插件单测覆盖,未在 alpha.x 上重跑端到端 |
88
106
  | 2.9.2 | 0.2.1-alpha.1(实测) | 上一轮适配验证基线;rc.2 的新入口与 tool guard 自 2.9.4 起进入 |
89
107
 
90
108
  低于 0.2.1 的 Harness 未做验证,不保证可用。