@konbakuyomu/smart-search-linux-x64 0.1.25 → 0.1.26
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/package.json +1 -1
- package/runtime/smart-search/_internal/base_library.zip +0 -0
- package/runtime/smart-search/_internal/smart_search/activity.py +1 -1
- package/runtime/smart-search/_internal/smart_search/assets/i18n/messages.json +183 -19
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/SKILL.md +6 -6
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/cli-core.md +5 -5
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/command-patterns.md +12 -22
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/deep-research-mode.md +8 -8
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/provider-routing.md +33 -62
- package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/setup-config.md +21 -13
- package/runtime/smart-search/_internal/smart_search/assets/ui/index.html +41 -15
- package/runtime/smart-search/_internal/smart_search/cli.py +118 -401
- package/runtime/smart-search/_internal/smart_search/config.py +34 -69
- package/runtime/smart-search/_internal/smart_search/desktop_catalog.py +13 -13
- package/runtime/smart-search/_internal/smart_search/desktop_worker.py +2 -1
- package/runtime/smart-search/_internal/smart_search/intent_router.py +6 -550
- package/runtime/smart-search/_internal/smart_search/jev.py +37 -5
- package/runtime/smart-search/_internal/smart_search/jev_search.py +336 -192
- package/runtime/smart-search/_internal/smart_search/provider_descriptions.py +140 -0
- package/runtime/smart-search/_internal/smart_search/providers/context7.py +8 -1
- package/runtime/smart-search/_internal/smart_search/providers/openai_compatible.py +19 -2
- package/runtime/smart-search/_internal/smart_search/providers/xai_responses.py +30 -4
- package/runtime/smart-search/_internal/smart_search/service.py +241 -2030
- package/runtime/smart-search/_internal/smart_search/ui_metadata.py +61 -80
- package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/METADATA +2 -1
- package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/RECORD +32 -32
- package/runtime/smart-search/_internal/wcwidth/_wcwidth_c.abi3.so +0 -0
- package/runtime/smart-search/_internal/wcwidth/_wcwidth_c.pyi +77 -0
- package/runtime/smart-search/package.json +7 -7
- package/runtime/smart-search/smart-search +0 -0
- package/runtime/smart-search/_internal/smart_search/embedding_presets.py +0 -40
- /package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/INSTALLER +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/REQUESTED +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/WHEEL +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/direct_url.json +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/entry_points.txt +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/licenses/LICENSE +0 -0
- /package/runtime/smart-search/_internal/{smart_search-0.1.25.dist-info → smart_search-0.1.26.dist-info}/top_level.txt +0 -0
package/package.json
CHANGED
|
Binary file
|
|
@@ -230,7 +230,7 @@ class Invocation:
|
|
|
230
230
|
return
|
|
231
231
|
self._finished = True
|
|
232
232
|
self._stop.set()
|
|
233
|
-
status = status or ("finished" if exit_code == 0 else "failed")
|
|
233
|
+
status = status or ("cancelled" if self._error_type == "cancelled" else "finished" if exit_code == 0 else "failed")
|
|
234
234
|
if self._enabled:
|
|
235
235
|
self._try(self.store.finish, self.run_id, exit_code, status, error_type=self._error_type,
|
|
236
236
|
sources_count=self._sources_count)
|
|
@@ -3243,9 +3243,9 @@
|
|
|
3243
3243
|
"号池地址填服务商给你的域名或 URL,例如 https://pool.example.com 或 https://pool.example.com/mcp;setup 会保存为 https://pool.example.com/api/tavily。\n",
|
|
3244
3244
|
"For pooled endpoints, paste the provider domain or URL, for example https://pool.example.com or https://pool.example.com/mcp; setup saves it as https://pool.example.com/api/tavily.\n"
|
|
3245
3245
|
],
|
|
3246
|
-
"Force stream=false for OpenAI-compatible main search.": [
|
|
3247
|
-
"强制 OpenAI 兼容主搜索使用 stream=false。",
|
|
3248
|
-
"Force stream=false for OpenAI-compatible main search."
|
|
3246
|
+
"Force stream=false for xAI Responses or OpenAI-compatible main search.": [
|
|
3247
|
+
"强制 xAI Responses 或 OpenAI 兼容主搜索使用 stream=false。",
|
|
3248
|
+
"Force stream=false for xAI Responses or OpenAI-compatible main search."
|
|
3249
3249
|
],
|
|
3250
3250
|
"Full page URL, including http:// or https://.": [
|
|
3251
3251
|
"完整网页地址,需带 http:// 或 https://。",
|
|
@@ -7435,6 +7435,10 @@
|
|
|
7435
7435
|
"最高项",
|
|
7436
7436
|
"Top"
|
|
7437
7437
|
],
|
|
7438
|
+
"Total fetch budget in seconds; overrides SMART_SEARCH_TIMEOUT_SECONDS.": [
|
|
7439
|
+
"抓取总时间预算,单位秒;覆盖 SMART_SEARCH_TIMEOUT_SECONDS。",
|
|
7440
|
+
"Total fetch budget in seconds; overrides SMART_SEARCH_TIMEOUT_SECONDS."
|
|
7441
|
+
],
|
|
7438
7442
|
"Total search budget in seconds; overrides SMART_SEARCH_TIMEOUT_SECONDS.": [
|
|
7439
7443
|
"搜索总时间预算,单位秒;覆盖 SMART_SEARCH_TIMEOUT_SECONDS。",
|
|
7440
7444
|
"Total search budget in seconds; overrides SMART_SEARCH_TIMEOUT_SECONDS."
|
|
@@ -7659,9 +7663,9 @@
|
|
|
7659
7663
|
"使用内置后端",
|
|
7660
7664
|
"Use bundled backend"
|
|
7661
7665
|
],
|
|
7662
|
-
"Use stream=true for OpenAI-compatible main search.": [
|
|
7663
|
-
"为 OpenAI 兼容主搜索使用 stream=true。",
|
|
7664
|
-
"Use stream=true for OpenAI-compatible main search."
|
|
7666
|
+
"Use stream=true for xAI Responses or OpenAI-compatible main search.": [
|
|
7667
|
+
"为 xAI Responses 或 OpenAI 兼容主搜索使用 stream=true。",
|
|
7668
|
+
"Use stream=true for xAI Responses or OpenAI-compatible main search."
|
|
7665
7669
|
],
|
|
7666
7670
|
"Use the Smart Search skill to run the following command and report the actual version. Do not only inspect files, and do not search the web yet:\n": [
|
|
7667
7671
|
"请使用 Smart Search 技能,先运行以下命令并告诉我实际版本,不要仅检查文件,也先不要发起联网搜索:\n",
|
|
@@ -8579,13 +8583,13 @@
|
|
|
8579
8583
|
"source_types 的值必须为 {0} 之一",
|
|
8580
8584
|
"source_types values must be one of {0}"
|
|
8581
8585
|
],
|
|
8582
|
-
"standard
|
|
8583
|
-
"standard
|
|
8584
|
-
"standard
|
|
8586
|
+
"standard requires at least one configured and enabled retrieval channel; Jev is optional.": [
|
|
8587
|
+
"standard 要求至少一个已配置并启用的检索渠道;Jev 可选。",
|
|
8588
|
+
"standard requires at least one configured and enabled retrieval channel; Jev is optional."
|
|
8585
8589
|
],
|
|
8586
|
-
"standard
|
|
8587
|
-
"standard
|
|
8588
|
-
"standard
|
|
8590
|
+
"standard 要求至少一个已配置并启用的检索渠道;Jev 可选。": [
|
|
8591
|
+
"standard 要求至少一个已配置并启用的检索渠道;Jev 可选。",
|
|
8592
|
+
"standard requires at least one configured and enabled retrieval channel; Jev is optional."
|
|
8589
8593
|
],
|
|
8590
8594
|
"strict checks harder and runs slower.": [
|
|
8591
8595
|
"strict 查得更严也更慢。",
|
|
@@ -8683,6 +8687,22 @@
|
|
|
8683
8687
|
"xAI 联网工具",
|
|
8684
8688
|
"xAI Responses tools"
|
|
8685
8689
|
],
|
|
8690
|
+
"xAI reasoning effort": [
|
|
8691
|
+
"xAI 推理强度",
|
|
8692
|
+
"xAI reasoning effort"
|
|
8693
|
+
],
|
|
8694
|
+
"xAI 推理强度": [
|
|
8695
|
+
"xAI 推理强度",
|
|
8696
|
+
"xAI reasoning effort"
|
|
8697
|
+
],
|
|
8698
|
+
"Optional; when set, sends reasoning.effort in xAI Responses requests; omitted by default.": [
|
|
8699
|
+
"可选;设置后在 xAI Responses 请求中发送 reasoning.effort,默认不发送。",
|
|
8700
|
+
"Optional; when set, sends reasoning.effort in xAI Responses requests; omitted by default."
|
|
8701
|
+
],
|
|
8702
|
+
"可选;设置后在 xAI Responses 请求中发送 reasoning.effort,默认不发送。": [
|
|
8703
|
+
"可选;设置后在 xAI Responses 请求中发送 reasoning.effort,默认不发送。",
|
|
8704
|
+
"Optional; when set, sends reasoning.effort in xAI Responses requests; omitted by default."
|
|
8705
|
+
],
|
|
8686
8706
|
"xAI Responses 模型": [
|
|
8687
8707
|
"xAI Responses 模型",
|
|
8688
8708
|
"xAI Responses model"
|
|
@@ -9179,9 +9199,9 @@
|
|
|
9179
9199
|
"中文",
|
|
9180
9200
|
"中文"
|
|
9181
9201
|
],
|
|
9182
|
-
"为 OpenAI 兼容主搜索使用 stream=true。": [
|
|
9183
|
-
"为 OpenAI 兼容主搜索使用 stream=true。",
|
|
9184
|
-
"Use stream=true for OpenAI-compatible main search."
|
|
9202
|
+
"为 xAI Responses 或 OpenAI 兼容主搜索使用 stream=true。": [
|
|
9203
|
+
"为 xAI Responses 或 OpenAI 兼容主搜索使用 stream=true。",
|
|
9204
|
+
"Use stream=true for xAI Responses or OpenAI-compatible main search."
|
|
9185
9205
|
],
|
|
9186
9206
|
"主搜索": [
|
|
9187
9207
|
"主搜索",
|
|
@@ -11099,9 +11119,9 @@
|
|
|
11099
11119
|
"引擎:`{0}`",
|
|
11100
11120
|
"Engines: `{0}`"
|
|
11101
11121
|
],
|
|
11102
|
-
"强制 OpenAI 兼容主搜索使用 stream=false。": [
|
|
11103
|
-
"强制 OpenAI 兼容主搜索使用 stream=false。",
|
|
11104
|
-
"Force stream=false for OpenAI-compatible main search."
|
|
11122
|
+
"强制 xAI Responses 或 OpenAI 兼容主搜索使用 stream=false。": [
|
|
11123
|
+
"强制 xAI Responses 或 OpenAI 兼容主搜索使用 stream=false。",
|
|
11124
|
+
"Force stream=false for xAI Responses or OpenAI-compatible main search."
|
|
11105
11125
|
],
|
|
11106
11126
|
"归档包含特殊设备文件。": [
|
|
11107
11127
|
"归档包含特殊设备文件。",
|
|
@@ -13597,7 +13617,7 @@
|
|
|
13597
13617
|
],
|
|
13598
13618
|
"结果数量": [
|
|
13599
13619
|
"结果数量",
|
|
13600
|
-
"
|
|
13620
|
+
"Result count"
|
|
13601
13621
|
],
|
|
13602
13622
|
"结果核验的严格程度,越严越慢。": [
|
|
13603
13623
|
"结果核验的严格程度,越严越慢。",
|
|
@@ -17690,5 +17710,149 @@
|
|
|
17690
17710
|
"错误详情": [
|
|
17691
17711
|
"错误详情",
|
|
17692
17712
|
"Error details"
|
|
17713
|
+
],
|
|
17714
|
+
"Configure at least one enabled retrieval channel.": [
|
|
17715
|
+
"至少配置一个已启用的检索渠道。",
|
|
17716
|
+
"Configure at least one enabled retrieval channel."
|
|
17717
|
+
],
|
|
17718
|
+
"Embedding/classifier routing is retired. Use route for a local preview or route --remote for Jev diagnostics.": [
|
|
17719
|
+
"旧向量/分类路由已退役。使用 route 本地预览,或显式 route --remote 检查 Jev。",
|
|
17720
|
+
"Embedding/classifier routing is retired. Use route for a local preview or route --remote for Jev diagnostics."
|
|
17721
|
+
],
|
|
17722
|
+
"Legacy embedding calibration is retired and calls no model.": [
|
|
17723
|
+
"旧向量路由校准已退役,不调用模型。",
|
|
17724
|
+
"Legacy embedding calibration is retired and calls no model."
|
|
17725
|
+
],
|
|
17726
|
+
"Local routing": [
|
|
17727
|
+
"本地路由",
|
|
17728
|
+
"Local routing"
|
|
17729
|
+
],
|
|
17730
|
+
"Result count": [
|
|
17731
|
+
"结果数量",
|
|
17732
|
+
"Result count"
|
|
17733
|
+
],
|
|
17734
|
+
"Results requested from the selected channel in this round; does not add channels.": [
|
|
17735
|
+
"本轮向选中渠道请求的结果条数,不增加检索渠道。",
|
|
17736
|
+
"Results requested from the selected channel in this round; does not add channels."
|
|
17737
|
+
],
|
|
17738
|
+
"Retired compatibility command; no remote calibration is performed.": [
|
|
17739
|
+
"已退役的兼容命令;不执行远程校准。",
|
|
17740
|
+
"Retired compatibility command; no remote calibration is performed."
|
|
17741
|
+
],
|
|
17742
|
+
"Retrieve from one suitable channel and return results with sources. Ordinary search runs one round.": [
|
|
17743
|
+
"选择一个合适渠道检索,返回结果和来源;普通搜索只运行一轮。",
|
|
17744
|
+
"Retrieve from one suitable channel and return results with sources. Ordinary search runs one round."
|
|
17745
|
+
],
|
|
17746
|
+
"Run single-pass retrieval through one selected channel.": [
|
|
17747
|
+
"通过一个选中的渠道执行单轮检索。",
|
|
17748
|
+
"Run single-pass retrieval through one selected channel."
|
|
17749
|
+
],
|
|
17750
|
+
"Search can use a retrieval channel without a main model.": [
|
|
17751
|
+
"搜索可直接使用检索渠道,无需主模型。",
|
|
17752
|
+
"Search can use a retrieval channel without a main model."
|
|
17753
|
+
],
|
|
17754
|
+
"Search selects once; research follows evidence gaps. Without Jev, routing stays local.": [
|
|
17755
|
+
"普通搜索只选路一次;深入搜索按证据缺口继续。未配置 Jev 时使用本地路由。",
|
|
17756
|
+
"Search selects once; research follows evidence gaps. Without Jev, routing stays local."
|
|
17757
|
+
],
|
|
17758
|
+
"Source requirement": [
|
|
17759
|
+
"来源要求",
|
|
17760
|
+
"Source requirement"
|
|
17761
|
+
],
|
|
17762
|
+
"Strict requires source evidence; ordinary search does not add follow-up or sufficiency judgments.": [
|
|
17763
|
+
"strict 要求来源证据;普通搜索不会因此自动补搜或判断充分性。",
|
|
17764
|
+
"Strict requires source evidence; ordinary search does not add follow-up or sufficiency judgments."
|
|
17765
|
+
],
|
|
17766
|
+
"Using local routing; no Jev probe was sent.": [
|
|
17767
|
+
"使用本地路由,未发送 Jev 探测请求。",
|
|
17768
|
+
"Using local routing; no Jev probe was sent."
|
|
17769
|
+
],
|
|
17770
|
+
"strict 要求来源证据;普通搜索不会因此自动补搜或判断充分性。": [
|
|
17771
|
+
"strict 要求来源证据;普通搜索不会因此自动补搜或判断充分性。",
|
|
17772
|
+
"Strict requires source evidence; ordinary search does not add follow-up or sufficiency judgments."
|
|
17773
|
+
],
|
|
17774
|
+
"使用本地路由,未发送 Jev 探测请求。": [
|
|
17775
|
+
"使用本地路由,未发送 Jev 探测请求。",
|
|
17776
|
+
"Using local routing; no Jev probe was sent."
|
|
17777
|
+
],
|
|
17778
|
+
"已退役的兼容命令;不执行远程校准。": [
|
|
17779
|
+
"已退役的兼容命令;不执行远程校准。",
|
|
17780
|
+
"Retired compatibility command; no remote calibration is performed."
|
|
17781
|
+
],
|
|
17782
|
+
"搜索可直接使用检索渠道,无需主模型。": [
|
|
17783
|
+
"搜索可直接使用检索渠道,无需主模型。",
|
|
17784
|
+
"Search can use a retrieval channel without a main model."
|
|
17785
|
+
],
|
|
17786
|
+
"旧向量/分类路由已退役。使用 route 本地预览,或显式 route --remote 检查 Jev。": [
|
|
17787
|
+
"旧向量/分类路由已退役。使用 route 本地预览,或显式 route --remote 检查 Jev。",
|
|
17788
|
+
"Embedding/classifier routing is retired. Use route for a local preview or route --remote for Jev diagnostics."
|
|
17789
|
+
],
|
|
17790
|
+
"旧向量路由校准已退役,不调用模型。": [
|
|
17791
|
+
"旧向量路由校准已退役,不调用模型。",
|
|
17792
|
+
"Legacy embedding calibration is retired and calls no model."
|
|
17793
|
+
],
|
|
17794
|
+
"普通搜索只选路一次;深入搜索按证据缺口继续。未配置 Jev 时使用本地路由。": [
|
|
17795
|
+
"普通搜索只选路一次;深入搜索按证据缺口继续。未配置 Jev 时使用本地路由。",
|
|
17796
|
+
"Search selects once; research follows evidence gaps. Without Jev, routing stays local."
|
|
17797
|
+
],
|
|
17798
|
+
"本地路由": [
|
|
17799
|
+
"本地路由",
|
|
17800
|
+
"Local routing"
|
|
17801
|
+
],
|
|
17802
|
+
"本轮向选中渠道请求的结果条数,不增加检索渠道。": [
|
|
17803
|
+
"本轮向选中渠道请求的结果条数,不增加检索渠道。",
|
|
17804
|
+
"Results requested from the selected channel in this round; does not add channels."
|
|
17805
|
+
],
|
|
17806
|
+
"来源要求": [
|
|
17807
|
+
"来源要求",
|
|
17808
|
+
"Source requirement"
|
|
17809
|
+
],
|
|
17810
|
+
"至少配置一个已启用的检索渠道。": [
|
|
17811
|
+
"至少配置一个已启用的检索渠道。",
|
|
17812
|
+
"Configure at least one enabled retrieval channel."
|
|
17813
|
+
],
|
|
17814
|
+
"选择一个合适渠道检索,返回结果和来源;普通搜索只运行一轮。": [
|
|
17815
|
+
"选择一个合适渠道检索,返回结果和来源;普通搜索只运行一轮。",
|
|
17816
|
+
"Retrieve from one suitable channel and return results with sources. Ordinary search runs one round."
|
|
17817
|
+
],
|
|
17818
|
+
"通过一个选中的渠道执行单轮检索。": [
|
|
17819
|
+
"通过一个选中的渠道执行单轮检索。",
|
|
17820
|
+
"Run single-pass retrieval through one selected channel."
|
|
17821
|
+
],
|
|
17822
|
+
"研究预算上限;达到目标后会提前停止。": [
|
|
17823
|
+
"研究预算上限;达到目标后会提前停止。",
|
|
17824
|
+
"Research budget ceiling; stops early when the goal is reached."
|
|
17825
|
+
],
|
|
17826
|
+
"离线计划的建议深度,不执行检索或消耗请求额度。": [
|
|
17827
|
+
"离线计划的建议深度,不执行检索或消耗请求额度。",
|
|
17828
|
+
"Suggested depth for the offline plan; it runs no retrieval and uses no request quota."
|
|
17829
|
+
],
|
|
17830
|
+
"auto 允许故障兜底和后续检索;off 关闭这些行为,但保留已发现来源的必要正文读取。": [
|
|
17831
|
+
"auto 允许故障兜底和后续检索;off 关闭这些行为,但保留已发现来源的必要正文读取。",
|
|
17832
|
+
"auto allows failure fallback and follow-up searches; off disables both but permits necessary reading of discovered sources."
|
|
17833
|
+
],
|
|
17834
|
+
"Invalid {0}: expected chat-completions or responses.": [
|
|
17835
|
+
"无效的 {0}:应为 chat-completions 或 responses。",
|
|
17836
|
+
"Invalid {0}: expected chat-completions or responses."
|
|
17837
|
+
],
|
|
17838
|
+
"Invalid {0}: expected an HTTP(S) base URL without credentials or query parameters.": [
|
|
17839
|
+
"无效的 {0}:需要不含凭据和查询参数的 HTTP(S) 基础地址。",
|
|
17840
|
+
"Invalid {0}: expected an HTTP(S) base URL without credentials or query parameters."
|
|
17841
|
+
],
|
|
17842
|
+
"Jev synthesis requires API URL, API key, and model when dedicated synthesis is configured.": [
|
|
17843
|
+
"配置独立 Jev 汇总时,必须同时填写 API 地址、Key 和模型名。",
|
|
17844
|
+
"Jev synthesis requires API URL, API key, and model when dedicated synthesis is configured."
|
|
17845
|
+
],
|
|
17846
|
+
"Jev synthesis requires an allowed configured synthesis model": [
|
|
17847
|
+
"Jev 结果汇总需要配置允许使用的独立汇总模型",
|
|
17848
|
+
"Jev synthesis requires an allowed configured synthesis model"
|
|
17849
|
+
],
|
|
17850
|
+
"Jev synthesis is disabled": [
|
|
17851
|
+
"Jev 结果汇总已关闭",
|
|
17852
|
+
"Jev synthesis is disabled"
|
|
17853
|
+
],
|
|
17854
|
+
"Jev synthesis model is not configured": [
|
|
17855
|
+
"尚未配置 Jev 独立汇总模型",
|
|
17856
|
+
"Jev synthesis model is not configured"
|
|
17693
17857
|
]
|
|
17694
17858
|
}
|
|
@@ -29,16 +29,16 @@ Use the local `smart-search` command as the default execution layer for web rese
|
|
|
29
29
|
7. Use `smart-search smoke --mock --format json` after CLI/provider architecture changes. Use `--live` only when real keys are available and the user expects live checks.
|
|
30
30
|
8. Treat `TAVILY_ENABLED=false` as an intentional no-network boundary: do not work around it with direct Tavily or `map` calls. Check `doctor` and live smoke for disabled/skipped Tavily state; Firecrawl remains independently configured.
|
|
31
31
|
9. If a result reports a degraded provider in `provider_notices`, or a provider attempt is `skipped`, run `smart-search providers status --format json`. The channel is on a persisted failure cooldown; fix the credential or run `smart-search providers reset PROVIDER` instead of retrying the same failing provider.
|
|
32
|
-
10. Preserve command lines and source URLs in your answer. Prefer citing fetched pages
|
|
32
|
+
10. Preserve command lines and source URLs in your answer. Prefer citing fetched pages; treat model citations and unread search sources as discovery candidates.
|
|
33
33
|
|
|
34
34
|
## Routing
|
|
35
35
|
|
|
36
|
-
- `search`:
|
|
36
|
+
- `search`: single-pass retrieval: Jev or local rules select one suitable channel, which returns results and sources; no automatic assessment, follow-up, filtering, or synthesis.
|
|
37
37
|
- `route`: explain capability routing locally without executing providers; `--router-mode jev --remote` explicitly opts into a potentially billable TypeSafe judgment.
|
|
38
|
-
- `research`:
|
|
38
|
+
- `research`: shared bounded loop with Jev or local routing for complementary discovery, fetch/read, evidence gaps, and optional synthesis.
|
|
39
39
|
- `deep`: offline Deep Research planner; it does not run providers, fetch pages, or replace default `search`.
|
|
40
40
|
- `zhipu-search`: Chinese-language, domestic China, policy/regulatory, announcements, current news, or China-local source discovery.
|
|
41
|
-
- `context7-library` / `context7-docs`: library, SDK, API, framework, or documentation intent.
|
|
41
|
+
- `context7-library` / `context7-docs`: library, SDK, API, framework, or documentation intent. Ordinary search uses the first library in Context7's ranked candidates; research may ask Jev to choose a candidate, using the first candidate if Jev fails or no score reaches its threshold. Unresolved libraries allow same-capability fallback. Explicit commands retain the candidate list and supplied library id.
|
|
42
42
|
- `exa-search`: official domains, papers, product pages, trusted pages, date/domain-filtered low-noise discovery, and adjacent source discovery through `exa-similar`.
|
|
43
43
|
- `fetch`: user-provided URLs or any claim that depends on page content.
|
|
44
44
|
- `map`: documentation site or domain structure before fetching many pages from one site.
|
|
@@ -52,8 +52,8 @@ Use the local `smart-search` command as the default execution layer for web rese
|
|
|
52
52
|
- `smart-search` should resolve from the user's PATH.
|
|
53
53
|
- Private API keys should be saved with `smart-search setup` or `smart-search config set`; environment variables remain supported for CI and advanced users.
|
|
54
54
|
- In sandboxed runtimes, set `SMART_SEARCH_CONFIG_DIR` to an absolute writable path when the default config directory is unavailable or must be pinned.
|
|
55
|
-
- The standard minimum profile requires one
|
|
56
|
-
- Fallback
|
|
55
|
+
- The standard minimum profile requires at least one enabled retrieval channel. Jev and a main model are optional; the requested operation still needs a capable channel.
|
|
56
|
+
- Fallback stays within the same capability family; model answers and web search are mutual fallbacks in ordinary search. Do not use Context7 for broad news/web facts or page-extraction providers as documentation search replacements.
|
|
57
57
|
- xAI Responses and OpenAI-compatible are peer `main_search` providers. Do not reuse one provider's URL/key to fabricate the other provider as fallback.
|
|
58
58
|
- For current-news, policy, finance, health, and other high-risk facts, do not answer from broad `search.content` alone. Fetch key pages and summarize only what fetched text supports.
|
|
59
59
|
- Native `web_search` is disabled in this CLI-first workflow unless the user explicitly configures another approved route; do not silently fall back to another web-search route.
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
## Commands
|
|
22
22
|
|
|
23
23
|
- `smart-search search QUERY [--platform NAME] [--model ID] [--extra-sources N] [--validation fast|balanced|strict] [--fallback auto|off] [--providers auto|CSV] [--stream|--no-stream] [--timeout SECONDS] [--format json|markdown|content] [--output PATH]` (`--timeout` overrides the persisted `SMART_SEARCH_TIMEOUT_SECONDS` total budget)
|
|
24
|
-
- `smart-search route QUERY [--validation fast|balanced|strict] [--router-mode
|
|
24
|
+
- `smart-search route QUERY [--validation fast|balanced|strict] [--router-mode jev|local] [--remote] [--format json|markdown|content] [--output PATH]`
|
|
25
25
|
- `smart-search fetch URL [--format json|markdown|content] [--output PATH]`
|
|
26
26
|
- `smart-search exa-search QUERY [--num-results N] [--search-type neural|keyword|auto] [--include-text] [--include-highlights] [--start-published-date YYYY-MM-DD] [--include-domains DOMAIN...] [--exclude-domains DOMAIN...] [--category NAME] [--format json|markdown|content] [--output PATH]`
|
|
27
27
|
- `smart-search exa-similar URL [--num-results N] [--format json|markdown|content] [--output PATH]`
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
- `smart-search map URL [--instructions TEXT] [--max-depth N] [--max-breadth N] [--limit N] [--timeout SECONDS] [--format json|markdown|content] [--output PATH]`
|
|
49
49
|
- `smart-search doctor [--format json|markdown|content] [--output PATH]`
|
|
50
50
|
- `smart-search diagnose openai-compatible [--timeout SECONDS] [--format json|markdown] [--output PATH]`
|
|
51
|
-
- `smart-search setup [--lang zh|en] [--advanced] [--non-interactive] [--skip-skills] [--install-skills CSV] [--skills-root PATH] [--xai-api-url URL] [--xai-api-key KEY] [--xai-model ID] [--xai-tools-explicit CSV] [--openai-compatible-api-url URL] [--openai-compatible-api-key KEY] [--openai-compatible-model ID] [--openai-compatible-fallback-models CSV] [--openai-compatible-api-mode chat-completions|responses] [--openai-compatible-stream true|false] [--validation-level fast|balanced|strict] [--fallback-mode auto|off] [--minimum-profile standard|off] [--intent-router
|
|
51
|
+
- `smart-search setup [--lang zh|en] [--advanced] [--non-interactive] [--skip-skills] [--install-skills CSV] [--skills-root PATH] [--xai-api-url URL] [--xai-api-key KEY] [--xai-model ID] [--xai-tools-explicit CSV] [--openai-compatible-api-url URL] [--openai-compatible-api-key KEY] [--openai-compatible-model ID] [--openai-compatible-fallback-models CSV] [--openai-compatible-api-mode chat-completions|responses] [--openai-compatible-stream true|false] [--validation-level fast|balanced|strict] [--fallback-mode auto|off] [--minimum-profile standard|off] [--intent-router jev|local] [--search-timeout SECONDS] [--provider-cooldown SECONDS] [--provider-failure-threshold N] [--exa-key KEY] [--context7-key KEY] [--zhipu-key KEY] [--zhipu-api-url URL] [--zhipu-search-engine ENGINE] [--zhipu-mcp-key KEY] [--zhipu-mcp-search-api-url URL] [--zhipu-mcp-reader-api-url URL] [--zhipu-mcp-zread-api-url URL] [--zhipu-mcp-timeout SECONDS] [--jina-key KEY] [--jina-reader-api-url URL] [--jina-respond-with MODE] [--jina-timeout SECONDS] [--tavily-api-url URL] [--tavily-key KEY] [--firecrawl-api-url URL] [--firecrawl-key KEY] [--tinyfish-key KEY] [--tinyfish-search-api-url URL] [--tinyfish-fetch-api-url URL] [--tinyfish-timeout SECONDS] [--anysearch-api-url URL] [--anysearch-key KEY] [--anysearch-timeout SECONDS] [--sciverse-api-url URL] [--sciverse-token TOKEN] [--sciverse-timeout SECONDS] [--format json|markdown|content] [--output PATH]`
|
|
52
52
|
- `smart-search config path|list|set|unset ... [--format json|markdown|content] [--output PATH]`
|
|
53
53
|
- `smart-search model set MODEL [--format json|markdown|content] [--output PATH]`
|
|
54
54
|
- `smart-search model current [--format json|markdown|content] [--output PATH]`
|
|
@@ -69,8 +69,8 @@ Nested aliases: `config path`/`cfg p`, `config list`/`cfg ls`/`cfg l`, `config s
|
|
|
69
69
|
- `--format markdown` is the human-readable report format. `route --format markdown`, `route-calibrate --format markdown`, `doctor --format markdown`, and `diagnose openai-compatible --format markdown` must render useful reports rather than raw JSON dumps.
|
|
70
70
|
- `--format content` prints only the `content` field for content-bearing commands such as `search`, `fetch`, `context7-docs`, and `research`. Commands without a `content` field, including `route`, `route-calibrate`, `doctor`, `smoke`, `config`, `model`, and `providers`, must print a compact non-empty text summary.
|
|
71
71
|
- Successful search output includes `ok`, `query`, `primary_api_mode`, `content`, `sources`, `sources_count`, `primary_sources`, `primary_sources_count`, `extra_sources`, `extra_sources_count`, `source_warning`, `routing_decision`, `providers_used`, `provider_attempts`, `provider_notices`, `fallback_used`, `validation_level`, `timeout_seconds`, `timeout_phase`, `phase_attempts`, deadline elapsed/remaining milliseconds, `partial_success`, and `elapsed_ms`. Phase telemetry is scheduler-level and additive; provider attempts remain provider-level records.
|
|
72
|
-
- Route diagnostic output includes `ok`, `
|
|
73
|
-
-
|
|
72
|
+
- Route diagnostic output includes `ok`, `intent_router_mode`, `required_capabilities`, `available_channels`, `selected_channels`, and `executed_search=false`. Default preview is offline; `--remote` explicitly enables Jev judgment.
|
|
73
|
+
- `route-calibrate` returns `deprecated=true`, `executed_remote=false`, and `error_type=parameter_error`; no model calibration is performed.
|
|
74
74
|
- Fetch output includes `ok`, `url`, `provider`, `content`, `provider_attempts`, `provider_notices`, `fallback_used`, and `elapsed_ms`.
|
|
75
75
|
- Exa search output includes `ok`, `query`, `search_type`, `results`, `total`, and `elapsed_ms`. Exa similar output includes `ok`, `url`, `results`, `total`, and `elapsed_ms`.
|
|
76
76
|
- Zhipu search output includes `ok`, `query`, `provider`, `search_engine`, `results`, `total`, and `elapsed_ms`.
|
|
@@ -84,7 +84,7 @@ Nested aliases: `config path`/`cfg p`, `config list`/`cfg ls`/`cfg l`, `config s
|
|
|
84
84
|
- Diagnostic output masks keys and reports config paths, Windows legacy config metadata, provider timeout values, `capability_status`, `minimum_profile_ok`, `intent_router_status`, `provider_health`, `main_search_connection_tests`, and provider connectivity checks. A successful `doctor` probe also clears that provider's failure cooldown. OpenAI-compatible health must use the endpoint selected by `OPENAI_COMPATIBLE_API_MODE`; `/models` is supplementary metadata.
|
|
85
85
|
- Provider health output includes `ok`, `enabled`, `cooldown_seconds`, `failure_threshold`, `store_path`, `providers`, and `cooldown_providers`; each provider entry carries `provider`, `configured`, `state` (`closed` or `cooldown`), `consecutive_failures`, `error_type`, `error`, `cooldown_remaining_seconds`, and `hard_failure`. `providers reset` output includes `ok`, `cleared`, and `known_providers`, and returns `parameter_error` for an unknown provider id.
|
|
86
86
|
- `provider_notices` is one deduplicated entry per degraded optional provider with `provider`, `capability`, `status` (`failed` or `cooldown`), `error_type`, `error`, `cooldown_remaining_seconds`, and `hint`. Markdown output prints a steady `cooldown` notice only when the command itself failed; JSON always carries it.
|
|
87
|
-
- Smoke output includes `ok`, `mode`, `status` (`healthy`, `degraded`, or `failed`), `failed_cases`, `degraded_cases`, `skipped_cases`, `cases`, `provider_attempts`, and `elapsed_ms`. Healthy and degraded smoke preserve `ok: true` and exit code `0`; failed smoke is non-zero. Live smoke
|
|
87
|
+
- Smoke output includes `ok`, `mode`, `status` (`healthy`, `degraded`, or `failed`), `failed_cases`, `degraded_cases`, `skipped_cases`, `cases`, `provider_attempts`, and `elapsed_ms`. Healthy and degraded smoke preserve `ok: true` and exit code `0`; failed smoke is non-zero. Live smoke skips unavailable optional checks; overall failure follows the reported critical cases, while optional failures with an available same-capability alternative are degraded.
|
|
88
88
|
|
|
89
89
|
## Exit Codes
|
|
90
90
|
|
|
@@ -16,7 +16,7 @@ For claim-level evidence, prefer this order:
|
|
|
16
16
|
|
|
17
17
|
1. Discover candidate URLs with source-focused `search`, `zhipu-search` for Chinese/current/domestic topics, Context7 for docs/API/library topics, or `exa-search` for official/trusted domains and papers.
|
|
18
18
|
2. Fetch the exact pages that matter.
|
|
19
|
-
3.
|
|
19
|
+
3. Build claim-level conclusions from fetched pages, or use `research` for automatic multi-source work. Ordinary `search` returns one selected channel and performs no post-retrieval synthesis. Unread sources remain unverified; `extra_sources` is an empty compatibility field.
|
|
20
20
|
|
|
21
21
|
Deep Research planner output uses an explicit `--evidence-dir` when supplied, otherwise a generated `smart-search-evidence` directory under `tempfile.gettempdir()`. Preserve the CLI's planned `--output` path and `output_path` match; do not rewrite evidence contracts unless a separate docs/runtime fix is in scope. Hard-coded paths such as `C:\tmp\smart-search-evidence\...` should be treated as user-chosen explicit output locations.
|
|
22
22
|
|
|
@@ -70,6 +70,8 @@ smart-search config list --format markdown
|
|
|
70
70
|
smart-search config set XAI_API_KEY "key" --format json
|
|
71
71
|
smart-search config set XAI_MODEL "grok-4-fast" --format json
|
|
72
72
|
smart-search config set XAI_TOOLS "web_search,x_search" --format json
|
|
73
|
+
smart-search config set XAI_REASONING_EFFORT "high" --format json
|
|
74
|
+
smart-search search "Latest Grok news" --providers xai-responses --stream --format json
|
|
73
75
|
smart-search config set OPENAI_COMPATIBLE_API_URL "https://api.openai.com/v1" --format json
|
|
74
76
|
smart-search config set OPENAI_COMPATIBLE_API_KEY "key" --format json
|
|
75
77
|
smart-search config set OPENAI_COMPATIBLE_MODEL "model-id" --format json
|
|
@@ -81,17 +83,7 @@ smart-search config set ANYSEARCH_API_URL "https://api.anysearch.com/mcp" --form
|
|
|
81
83
|
smart-search config set SCIVERSE_API_TOKEN "key" --format json
|
|
82
84
|
smart-search config set ANYSEARCH_API_KEY "key" --format json
|
|
83
85
|
smart-search config set ANYSEARCH_TIMEOUT_SECONDS "30" --format json
|
|
84
|
-
smart-search config set SMART_SEARCH_INTENT_ROUTER "
|
|
85
|
-
smart-search config set INTENT_EMBEDDING_API_URL "https://api.siliconflow.cn/v1/embeddings" --format json
|
|
86
|
-
smart-search config set INTENT_EMBEDDING_API_KEY "key" --format json
|
|
87
|
-
smart-search config set INTENT_EMBEDDING_MODEL "Qwen/Qwen3-Embedding-8B" --format json
|
|
88
|
-
smart-search config set INTENT_EMBEDDING_THRESHOLD "0.475" --format json
|
|
89
|
-
smart-search config set INTENT_EMBEDDING_MARGIN "0.053" --format json
|
|
90
|
-
smart-search route-calibrate --models "Qwen/Qwen3-Embedding-8B" --format json
|
|
91
|
-
smart-search config set INTENT_CLASSIFIER_API_URL "https://api.openai.com/v1/chat/completions" --format json
|
|
92
|
-
smart-search config set INTENT_CLASSIFIER_API_KEY "key" --format json
|
|
93
|
-
smart-search config set INTENT_CLASSIFIER_MODEL "gpt-4.1-mini" --format json
|
|
94
|
-
smart-search config set INTENT_ROUTER_TIMEOUT_SECONDS "8" --format json
|
|
86
|
+
smart-search config set SMART_SEARCH_INTENT_ROUTER "jev" --format json
|
|
95
87
|
smart-search config set EXA_API_KEY "key" --format json
|
|
96
88
|
smart-search config set CONTEXT7_API_KEY "key" --format json
|
|
97
89
|
smart-search config set ZHIPU_API_KEY "key" --format json
|
|
@@ -147,27 +139,25 @@ When a search succeeds but `provider_notices` reports a degraded optional provid
|
|
|
147
139
|
|
|
148
140
|
## Timeout Retry Policy
|
|
149
141
|
|
|
150
|
-
When `smart-search search` returns `ok: false` with `error_type: "timeout"`,
|
|
142
|
+
When `smart-search search` returns `ok: false` with `error_type: "timeout"`, inspect `timeout_phase` and `provider_attempts` first. Partial results can remain in `content`; ordinary search has no automatic optional source phase.
|
|
151
143
|
|
|
152
|
-
1. Retry
|
|
153
|
-
2. Use `--format json` and `--output PATH` for each attempt;
|
|
154
|
-
3.
|
|
155
|
-
4.
|
|
156
|
-
5. Do not rely on `SMART_SEARCH_RETRY_*` settings; search command timeouts are surfaced by the CLI result contract and should be handled by the agent workflow.
|
|
157
|
-
6. If all attempts time out, fall back to source-first evidence:
|
|
144
|
+
1. Retry the same search at most once, adding `--extra-sources 1` to limit the selected channel result count.
|
|
145
|
+
2. Use `--format json` and `--output PATH` for each attempt; inspect the saved JSON and stop on `"ok": true`.
|
|
146
|
+
3. Set the agent's command execution timeout at least 30 seconds longer than the smart-search total budget, or run the command in the background. With the default 300-second budget, the agent timeout must be at least 330 seconds; otherwise the agent can kill smart-search before it returns structured results. `SMART_SEARCH_TIMEOUT_SECONDS` supplies the default; `--timeout` overrides one call.
|
|
147
|
+
4. If the retry also times out, switch to source-first evidence:
|
|
158
148
|
- Run `exa-search` with the original query.
|
|
159
149
|
- Run `exa-search --include-domains` when likely official domains are known.
|
|
160
150
|
- `fetch` the top 1-2 relevant URLs before making claim-level statements.
|
|
161
|
-
- Mark the final answer as `source_mode: "fallback"` or
|
|
151
|
+
- Mark the final answer as `source_mode: "fallback"` or state that it was assembled from fetched sources after the original search failed.
|
|
162
152
|
|
|
163
|
-
Agent timeout handling contract: `smart-search search ... --timeout 300 --extra-sources 1 --format json --output PATH
|
|
153
|
+
Agent timeout handling contract: on `error_type: "timeout"`, inspect `timeout_phase` and `provider_attempts`, then retry the same search at most once with `--extra-sources 1`, for example `smart-search search ... --timeout 300 --extra-sources 1 --format json --output PATH`. Set the agent's command execution timeout at least 30 seconds above the smart-search total budget (at least 330 seconds for the default 300 seconds), or run it in the background, so the agent does not kill it before structured results return. If the retry also times out, switch to source-first fallback with `exa-search`, `exa-search --include-domains`, and fetched evidence, and label the evidence mode as `source_mode: "fallback"` or equivalent prose.
|
|
164
154
|
|
|
165
155
|
## Guardrails
|
|
166
156
|
|
|
167
157
|
- Prefer JSON for agent parsing and markdown for fetched page text intended for reading.
|
|
168
158
|
- Use `--output` for multi-source work, long pages, or anything the answer may need to cite later.
|
|
169
159
|
- Keep `--extra-sources` small (`1` to `3`) unless the user asks for broad coverage.
|
|
170
|
-
- Do not cite `
|
|
160
|
+
- Do not cite unread `sources` or model `primary_sources` as proof for a sentence in `content`; fetch the URL first. `extra_sources` remains an empty compatibility list.
|
|
171
161
|
- Prefer `exa-search --include-domains` for official documentation when likely domains are known.
|
|
172
162
|
- Do not expose API keys. Treat `doctor` output as safe only because it is expected to mask secrets.
|
|
173
163
|
- In this CLI-first workflow, native `web_search` is disabled unless the user explicitly configures another approved route.
|
|
@@ -28,16 +28,16 @@ Use Deep Research Mode when the user asks for `深度搜索`, `深度调研`, `
|
|
|
28
28
|
|
|
29
29
|
Do not select a fixed topic recipe. Market, product, technical docs, news, policy, claim-checking, and URL-first prompts are examples of user language, not schema modes. Deep Research must not require fixed topic recipe ids such as `current_market_research`, `product_comparison_research`, `technical_docs_research`, `news_or_policy_research`, `claim_verification_research`, or `url_first_research`; fixed topic recipe ids are not required schema.
|
|
30
30
|
|
|
31
|
-
Deep Research does not change default `smart-search search` behavior and does not depend on an MCP session.
|
|
31
|
+
Deep Research does not change default `smart-search search` behavior and does not depend on an MCP session.
|
|
32
32
|
|
|
33
33
|
## Offline Planner And Live Executor
|
|
34
34
|
|
|
35
35
|
- `smart-search deep` is the public offline planner command and a public planner entrypoint, not an executor. It does not call providers, run `doctor`, or fetch pages by default.
|
|
36
|
-
- `smart-search research` is the public live executor
|
|
36
|
+
- `smart-search research` is the public live executor. It uses the plan's question candidates, then selects and executes actions in a bounded loop with Jev or local routing; it does not execute the offline `steps[].command` list. The default returns evidence; optional model synthesis is controlled separately.
|
|
37
37
|
- Before manual execution, run `smart-search deep "question" --format json` and use the returned `research_plan` as your planning artifact.
|
|
38
38
|
- Use `smart-search research "question" --format json` when the user wants the CLI to run live Deep Research end to end instead of only planning.
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Optional manual orchestration (use `research` directly for automatic execution):
|
|
41
41
|
|
|
42
42
|
1. Run `smart-search doctor --format json` as preflight when configuration is uncertain.
|
|
43
43
|
2. Call `smart-search deep "question" --format json` to create an offline `research_plan`.
|
|
@@ -47,7 +47,7 @@ Default orchestration:
|
|
|
47
47
|
6. Use `fetch` on key URLs before making claim-level statements.
|
|
48
48
|
7. Run `gap_check`: if an important claim lacks fetched evidence, fetch another source or mark the claim/source as unverified.
|
|
49
49
|
|
|
50
|
-
Default evidence policy is `fetch_before_claim`: key claims in the final answer must be supported by fetched page text. Treat `
|
|
50
|
+
Default evidence policy is `fetch_before_claim`: key claims in the final answer must be supported by fetched page text. Treat unread `sources` and model `primary_sources` as discovery candidates until fetched; `extra_sources` is an empty compatibility list. Final answers should include fetched evidence, unverified candidate sources, and key commands used.
|
|
51
51
|
|
|
52
52
|
## Planner Shape
|
|
53
53
|
|
|
@@ -145,12 +145,12 @@ Prefer PowerShell-safe quoted commands in generated plans because Windows users
|
|
|
145
145
|
|
|
146
146
|
## Capability Boundaries
|
|
147
147
|
|
|
148
|
-
- `search`:
|
|
148
|
+
- `search`: one selected retrieval channel; use returned `routing_decision`, `provider_attempts`, `fallback_used`, and `source_warning` as orchestration signals, not as claim proof.
|
|
149
149
|
- `zhipu-search`: Chinese, domestic, current, policy/regulatory, announcement, and China-local source discovery.
|
|
150
150
|
- `context7-library` and `context7-docs`: library, SDK, API, framework, and documentation intent. Prefer Context7 before Exa for docs/API questions.
|
|
151
151
|
- `exa-search`: low-noise source discovery for official domains, papers, product pages, known domains, and trusted pages. Do not treat Exa as the universal second hop for every high-risk or verification task.
|
|
152
152
|
- `exa-similar`: adjacent-source discovery when a known reliable URL is available.
|
|
153
|
-
- `search --extra-sources N`:
|
|
153
|
+
- `search --extra-sources N`: result count for the single selected ordinary-search channel (maximum 20); it does not add channels.
|
|
154
154
|
- `anysearch-domains` and `anysearch-search`: experimental vertical search. Inspect domains first, then search a selected domain; do not insert it into the default fallback chain.
|
|
155
155
|
- `sciverse-catalog`, `sciverse-search`, `sciverse-semantic`, `sciverse-read`, and `sciverse-relations`: explicit experimental academic commands. Use them directly when the task needs Sciverse academic fields, semantic paper hits, document chunks, or citation/reference relations; do not insert Sciverse into default Deep Research fallback.
|
|
156
156
|
- `fetch`: page-content evidence. Key claims require fetched page text under `fetch_before_claim`.
|
|
@@ -164,9 +164,9 @@ Use this form when the user wants the CLI to execute the live workflow directly:
|
|
|
164
164
|
smart-search research "question" --budget deep --fallback auto --evidence-dir "<evidence-dir>" --format json --output "research.json"
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
`research --fallback auto` permits
|
|
167
|
+
`research --fallback auto` permits local outage fallback and follow-up searches. `research --fallback off` disables both, while allowing reads of initially discovered URLs. Jev may choose complementary capabilities, but each provider remains limited to its supported operations. Every attempt records capability, provider, status, error type, latency, and result count.
|
|
168
168
|
|
|
169
|
-
Research output includes `final_answer`, `citations`, `evidence_items`, `gap_check`, `provider_attempts`, `fallback_used`, `degraded`, `route_policy_version`, and `evidence_dir`. The
|
|
169
|
+
Research output includes `final_answer`, `citations`, `evidence_items`, `gap_check`, `provider_attempts`, `fallback_used`, `degraded`, `route_policy_version`, and `evidence_dir`. The default report contains evidence excerpts; optional model synthesis uses that same read evidence. Unfetched discovery candidates cannot support citations. If providers are exhausted or evidence cannot close, return the gaps rather than inventing missing claims.
|
|
170
170
|
|
|
171
171
|
Research provider advantage routing:
|
|
172
172
|
|