@konbakuyomu/smart-search-linux-x64 0.1.31 → 0.1.33

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 (34) hide show
  1. package/package.json +1 -1
  2. package/runtime/smart-search/_internal/base_library.zip +0 -0
  3. package/runtime/smart-search/_internal/certifi/cacert.pem +0 -51
  4. package/runtime/smart-search/_internal/smart_search/assets/i18n/messages.json +208 -4
  5. package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/SKILL.md +1 -1
  6. package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/cli-core.md +2 -2
  7. package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/command-patterns.md +5 -0
  8. package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/provider-routing.md +15 -5
  9. package/runtime/smart-search/_internal/smart_search/assets/skills/smart-search-cli/references/setup-config.md +2 -0
  10. package/runtime/smart-search/_internal/smart_search/cli.py +68 -22
  11. package/runtime/smart-search/_internal/smart_search/config.py +93 -9
  12. package/runtime/smart-search/_internal/smart_search/jev_search.py +5 -0
  13. package/runtime/smart-search/_internal/smart_search/provider_descriptions.py +8 -0
  14. package/runtime/smart-search/_internal/smart_search/providers/__init__.py +2 -0
  15. package/runtime/smart-search/_internal/smart_search/providers/openai_compatible.py +32 -2
  16. package/runtime/smart-search/_internal/smart_search/providers/xai_responses.py +28 -10
  17. package/runtime/smart-search/_internal/smart_search/providers/yuanbao.py +157 -0
  18. package/runtime/smart-search/_internal/smart_search/service.py +149 -71
  19. package/runtime/smart-search/_internal/smart_search/sources.py +12 -0
  20. package/runtime/smart-search/_internal/smart_search/ui_metadata.py +38 -4
  21. package/runtime/smart-search/_internal/smart_search/utils.py +7 -3
  22. package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/METADATA +3 -3
  23. package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/RECORD +28 -26
  24. package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/WHEEL +1 -1
  25. package/runtime/smart-search/_internal/wcwidth/_wcwidth_c.abi3.so +0 -0
  26. package/runtime/smart-search/_internal/wcwidth/_wcwidth_c.pyi +6 -0
  27. package/runtime/smart-search/package.json +7 -7
  28. package/runtime/smart-search/smart-search +0 -0
  29. /package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/INSTALLER +0 -0
  30. /package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/REQUESTED +0 -0
  31. /package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/direct_url.json +0 -0
  32. /package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/entry_points.txt +0 -0
  33. /package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/licenses/LICENSE +0 -0
  34. /package/runtime/smart-search/_internal/{smart_search-0.1.31.dist-info → smart_search-0.1.33.dist-info}/top_level.txt +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@konbakuyomu/smart-search-linux-x64",
3
- "version": "0.1.31",
3
+ "version": "0.1.33",
4
4
  "description": "Self-contained Smart Search CLI for linux/x64",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -2005,57 +2005,6 @@ RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx
2005
2005
  iN66zB+Afko=
2006
2006
  -----END CERTIFICATE-----
2007
2007
 
2008
- # Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI
2009
- # Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI
2010
- # Label: "emSign Root CA - C1"
2011
- # Serial: 825510296613316004955058
2012
- # MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68
2013
- # SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01
2014
- # SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f
2015
- -----BEGIN CERTIFICATE-----
2016
- MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG
2017
- A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg
2018
- SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw
2019
- MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln
2020
- biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v
2021
- dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ
2022
- BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ
2023
- HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH
2024
- 3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH
2025
- GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c
2026
- xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1
2027
- aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq
2028
- TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL
2029
- BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87
2030
- /kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4
2031
- kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG
2032
- YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT
2033
- +xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo
2034
- WXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
2035
- -----END CERTIFICATE-----
2036
-
2037
- # Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI
2038
- # Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI
2039
- # Label: "emSign ECC Root CA - C3"
2040
- # Serial: 582948710642506000014504
2041
- # MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5
2042
- # SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66
2043
- # SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3
2044
- -----BEGIN CERTIFICATE-----
2045
- MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG
2046
- EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx
2047
- IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw
2048
- MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln
2049
- biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND
2050
- IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci
2051
- MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti
2052
- sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O
2053
- BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
2054
- Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c
2055
- 3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J
2056
- 0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
2057
- -----END CERTIFICATE-----
2058
-
2059
2008
  # Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post
2060
2009
  # Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post
2061
2010
  # Label: "Hongkong Post Root CA 3"
@@ -1447,6 +1447,82 @@
1447
1447
  "TinyFish 搜索与抓取 API 均可用",
1448
1448
  "Both TinyFish search and fetch APIs are available"
1449
1449
  ],
1450
+ "Invalid OPENAI_COMPATIBLE_TOOLS: {0}. Supported values: {1}": [
1451
+ "无效的 OPENAI_COMPATIBLE_TOOLS:{0}。支持:{1}",
1452
+ "Invalid OPENAI_COMPATIBLE_TOOLS: {0}. Supported values: {1}"
1453
+ ],
1454
+ "OPENAI_COMPATIBLE_TOOLS only works with OPENAI_COMPATIBLE_API_MODE=responses. Set the API mode to responses, or clear OPENAI_COMPATIBLE_TOOLS.": [
1455
+ "OPENAI_COMPATIBLE_TOOLS 只在 OPENAI_COMPATIBLE_API_MODE=responses 时生效。请把接口模式改成 responses,或清空 OPENAI_COMPATIBLE_TOOLS。",
1456
+ "OPENAI_COMPATIBLE_TOOLS only works with OPENAI_COMPATIBLE_API_MODE=responses. Set the API mode to responses, or clear OPENAI_COMPATIBLE_TOOLS."
1457
+ ],
1458
+ "OPENAI_COMPATIBLE_TOOLS 只在 OPENAI_COMPATIBLE_API_MODE=responses 时生效。请把接口模式改成 responses,或清空 OPENAI_COMPATIBLE_TOOLS。": [
1459
+ "OPENAI_COMPATIBLE_TOOLS 只在 OPENAI_COMPATIBLE_API_MODE=responses 时生效。请把接口模式改成 responses,或清空 OPENAI_COMPATIBLE_TOOLS。",
1460
+ "OPENAI_COMPATIBLE_TOOLS only works with OPENAI_COMPATIBLE_API_MODE=responses. Set the API mode to responses, or clear OPENAI_COMPATIBLE_TOOLS."
1461
+ ],
1462
+ "OpenAI 兼容联网工具": [
1463
+ "OpenAI 兼容联网工具",
1464
+ "openai-compatible tools"
1465
+ ],
1466
+ "OpenAI-compatible tools are invalid.": [
1467
+ "OpenAI-compatible 联网工具配置无效。",
1468
+ "OpenAI-compatible tools are invalid."
1469
+ ],
1470
+ "OpenAI-compatible was rate limited upstream (HTTP 429), so this diagnosis cannot tell whether the route works.": [
1471
+ "OpenAI-compatible 被上游限流(HTTP 429),这次诊断判断不了链路是否正常。",
1472
+ "OpenAI-compatible was rate limited upstream (HTTP 429), so this diagnosis cannot tell whether the route works."
1473
+ ],
1474
+ "OpenAI-compatible 联网工具配置无效。": [
1475
+ "OpenAI-compatible 联网工具配置无效。",
1476
+ "OpenAI-compatible tools are invalid."
1477
+ ],
1478
+ "OpenAI-compatible 被上游限流(HTTP 429),这次诊断判断不了链路是否正常。": [
1479
+ "OpenAI-compatible 被上游限流(HTTP 429),这次诊断判断不了链路是否正常。",
1480
+ "OpenAI-compatible was rate limited upstream (HTTP 429), so this diagnosis cannot tell whether the route works."
1481
+ ],
1482
+ "Run this diagnosis again in a minute; if it keeps happening, lower concurrency, switch models, or raise the account's rate limit. The URL, key and model name are not necessarily wrong.": [
1483
+ "等一分钟再运行本诊断;经常出现就降低并发、换模型,或提高账户的速率额度。地址、key 和模型名不一定有问题。",
1484
+ "Run this diagnosis again in a minute; if it keeps happening, lower concurrency, switch models, or raise the account's rate limit. The URL, key and model name are not necessarily wrong."
1485
+ ],
1486
+ "Save OPENAI_COMPATIBLE_TOOLS (web_search or web_search_preview; needs --openai-compatible-api-mode responses).": [
1487
+ "保存 OPENAI_COMPATIBLE_TOOLS(web_search 或 web_search_preview;需要 --openai-compatible-api-mode responses)。",
1488
+ "Save OPENAI_COMPATIBLE_TOOLS (web_search or web_search_preview; needs --openai-compatible-api-mode responses)."
1489
+ ],
1490
+ "Strict validation needs sources that a search service retrieved on its own; this run only has the search model's own citations, which are not independent evidence. Configure a web_search provider (for example Tavily, Zhipu or Yuanbao Search) before using strict, or switch to balanced.": [
1491
+ "strict 校验需要搜索服务独立检索到的来源;这次只有搜索模型自带的引用,不算独立证据。配置一个 web_search 提供方(例如 Tavily、智谱、元宝搜索)后再用 strict,或改用 balanced。",
1492
+ "Strict validation needs sources that a search service retrieved on its own; this run only has the search model's own citations, which are not independent evidence. Configure a web_search provider (for example Tavily, Zhipu or Yuanbao Search) before using strict, or switch to balanced."
1493
+ ],
1494
+ "Use OPENAI_COMPATIBLE_TOOLS=web_search (or web_search_preview) only with OPENAI_COMPATIBLE_API_MODE=responses; otherwise leave it empty.": [
1495
+ "只在 OPENAI_COMPATIBLE_API_MODE=responses 时把 OPENAI_COMPATIBLE_TOOLS 设为 web_search(或 web_search_preview);其他情况留空。",
1496
+ "Use OPENAI_COMPATIBLE_TOOLS=web_search (or web_search_preview) only with OPENAI_COMPATIBLE_API_MODE=responses; otherwise leave it empty."
1497
+ ],
1498
+ "Yuanbao Search API is available": [
1499
+ "元宝搜索 API 可用",
1500
+ "Yuanbao Search API is available"
1501
+ ],
1502
+ "YUANBAO_SECRET_ID or YUANBAO_SECRET_KEY is not set; Yuanbao Search is unavailable": [
1503
+ "YUANBAO_SECRET_ID 或 YUANBAO_SECRET_KEY 未设置,元宝搜索不可用",
1504
+ "YUANBAO_SECRET_ID or YUANBAO_SECRET_KEY is not set; Yuanbao Search is unavailable"
1505
+ ],
1506
+ "Yuanbao Search: {0}": [
1507
+ "元宝搜索:{0}",
1508
+ "Yuanbao Search: {0}"
1509
+ ],
1510
+ "Yuanbao Search API request timed out": [
1511
+ "元宝搜索 API 请求超时",
1512
+ "Yuanbao Search API request timed out"
1513
+ ],
1514
+ "YUANBAO_SECRET_ID and YUANBAO_SECRET_KEY are not configured.": [
1515
+ "YUANBAO_SECRET_ID 和 YUANBAO_SECRET_KEY 未配置。",
1516
+ "YUANBAO_SECRET_ID and YUANBAO_SECRET_KEY are not configured."
1517
+ ],
1518
+ "Yuanbao search response is missing Response": [
1519
+ "元宝搜索响应缺少 Response",
1520
+ "Yuanbao search response is missing Response"
1521
+ ],
1522
+ "Yuanbao search Pages is not a list": [
1523
+ "元宝搜索返回的 Pages 不是列表",
1524
+ "Yuanbao search Pages is not a list"
1525
+ ],
1450
1526
  "Branch or version": [
1451
1527
  "分支或版本",
1452
1528
  "Branch or version"
@@ -4635,6 +4711,18 @@
4635
4711
  "OpenAI 兼容 API 模式",
4636
4712
  "openai-compatible API mode"
4637
4713
  ],
4714
+ "openai-compatible tools": [
4715
+ "OpenAI 兼容联网工具",
4716
+ "openai-compatible tools"
4717
+ ],
4718
+ "strict 校验需要搜索服务独立检索到的来源;这次只有搜索模型自带的引用,不算独立证据。配置一个 web_search 提供方(例如 Tavily、智谱、元宝搜索)后再用 strict,或改用 balanced。": [
4719
+ "strict 校验需要搜索服务独立检索到的来源;这次只有搜索模型自带的引用,不算独立证据。配置一个 web_search 提供方(例如 Tavily、智谱、元宝搜索)后再用 strict,或改用 balanced。",
4720
+ "Strict validation needs sources that a search service retrieved on its own; this run only has the search model's own citations, which are not independent evidence. Configure a web_search provider (for example Tavily, Zhipu or Yuanbao Search) before using strict, or switch to balanced."
4721
+ ],
4722
+ "xai-responses 流式": [
4723
+ "xai-responses 流式",
4724
+ "xai-responses stream"
4725
+ ],
4638
4726
  "OpenAI 兼容回退": [
4639
4727
  "OpenAI 兼容回退",
4640
4728
  "openai-compatible fallback"
@@ -5735,6 +5823,10 @@
5735
5823
  "保存 XAI_TOOLS。",
5736
5824
  "Save XAI_TOOLS."
5737
5825
  ],
5826
+ "Save XAI_STREAM.": [
5827
+ "保存 XAI_STREAM。",
5828
+ "Save XAI_STREAM."
5829
+ ],
5738
5830
  "Save ZHIPU_API_KEY.": [
5739
5831
  "保存 ZHIPU_API_KEY。",
5740
5832
  "Save ZHIPU_API_KEY."
@@ -7387,6 +7479,62 @@
7387
7479
  "TinyFish 搜索与抓取 API 均可用",
7388
7480
  "Both TinyFish search and fetch APIs are available"
7389
7481
  ],
7482
+ "{0} Also, the web search capability check did not pass: {1}. If this model can only search through the Responses web_search tool (for example OpenAI's gpt-6.1-sol), set OPENAI_COMPATIBLE_API_MODE=responses and OPENAI_COMPATIBLE_TOOLS=web_search; use web_search_preview for relays that only know the older name.": [
7483
+ "{0} 另外,联网搜索能力检查未通过:{1}。如果这个模型只能通过 Responses 的 web_search 工具联网(例如 OpenAI 官方的 gpt-6.1-sol),请设置 OPENAI_COMPATIBLE_API_MODE=responses 和 OPENAI_COMPATIBLE_TOOLS=web_search;中转站只认旧名时改用 web_search_preview。",
7484
+ "{0} Also, the web search capability check did not pass: {1}. If this model can only search through the Responses web_search tool (for example OpenAI's gpt-6.1-sol), set OPENAI_COMPATIBLE_API_MODE=responses and OPENAI_COMPATIBLE_TOOLS=web_search; use web_search_preview for relays that only know the older name."
7485
+ ],
7486
+ "{0} Also, the web search capability check did not pass: {1}. The request already carried the {2} tool, so this model or relay may not support Responses web search tools; switch to a model that does, or clear OPENAI_COMPATIBLE_TOOLS and use a model that searches on its own.": [
7487
+ "{0} 另外,联网搜索能力检查未通过:{1}。请求里已经带了 {2} 工具,可能是这个模型或中转站不支持 Responses 的联网工具;换一个支持的模型,或清空 OPENAI_COMPATIBLE_TOOLS 改用自带搜索的模型。",
7488
+ "{0} Also, the web search capability check did not pass: {1}. The request already carried the {2} tool, so this model or relay may not support Responses web search tools; switch to a model that does, or clear OPENAI_COMPATIBLE_TOOLS and use a model that searches on its own."
7489
+ ],
7490
+ "{0} does not support x_search in XAI_TOOLS (HTTP 400). Only the official xAI API serves x_search; set XAI_TOOLS to web_search and try again.": [
7491
+ "{0} 不支持 XAI_TOOLS 里的 x_search(HTTP 400)。x_search 只有 xAI 官方接口能用;把 XAI_TOOLS 改成 web_search 再试。",
7492
+ "{0} does not support x_search in XAI_TOOLS (HTTP 400). Only the official xAI API serves x_search; set XAI_TOOLS to web_search and try again."
7493
+ ],
7494
+ "{0} 不支持 XAI_TOOLS 里的 x_search(HTTP 400)。x_search 只有 xAI 官方接口能用;把 XAI_TOOLS 改成 web_search 再试。": [
7495
+ "{0} 不支持 XAI_TOOLS 里的 x_search(HTTP 400)。x_search 只有 xAI 官方接口能用;把 XAI_TOOLS 改成 web_search 再试。",
7496
+ "{0} does not support x_search in XAI_TOOLS (HTTP 400). Only the official xAI API serves x_search; set XAI_TOOLS to web_search and try again."
7497
+ ],
7498
+ "{0} 另外,联网搜索能力检查未通过:{1}。如果这个模型只能通过 Responses 的 web_search 工具联网(例如 OpenAI 官方的 gpt-6.1-sol),请设置 OPENAI_COMPATIBLE_API_MODE=responses 和 OPENAI_COMPATIBLE_TOOLS=web_search;中转站只认旧名时改用 web_search_preview。": [
7499
+ "{0} 另外,联网搜索能力检查未通过:{1}。如果这个模型只能通过 Responses 的 web_search 工具联网(例如 OpenAI 官方的 gpt-6.1-sol),请设置 OPENAI_COMPATIBLE_API_MODE=responses 和 OPENAI_COMPATIBLE_TOOLS=web_search;中转站只认旧名时改用 web_search_preview。",
7500
+ "{0} Also, the web search capability check did not pass: {1}. If this model can only search through the Responses web_search tool (for example OpenAI's gpt-6.1-sol), set OPENAI_COMPATIBLE_API_MODE=responses and OPENAI_COMPATIBLE_TOOLS=web_search; use web_search_preview for relays that only know the older name."
7501
+ ],
7502
+ "{0} 另外,联网搜索能力检查未通过:{1}。请求里已经带了 {2} 工具,可能是这个模型或中转站不支持 Responses 的联网工具;换一个支持的模型,或清空 OPENAI_COMPATIBLE_TOOLS 改用自带搜索的模型。": [
7503
+ "{0} 另外,联网搜索能力检查未通过:{1}。请求里已经带了 {2} 工具,可能是这个模型或中转站不支持 Responses 的联网工具;换一个支持的模型,或清空 OPENAI_COMPATIBLE_TOOLS 改用自带搜索的模型。",
7504
+ "{0} Also, the web search capability check did not pass: {1}. The request already carried the {2} tool, so this model or relay may not support Responses web search tools; switch to a model that does, or clear OPENAI_COMPATIBLE_TOOLS and use a model that searches on its own."
7505
+ ],
7506
+ "保存 OPENAI_COMPATIBLE_TOOLS(web_search 或 web_search_preview;需要 --openai-compatible-api-mode responses)。": [
7507
+ "保存 OPENAI_COMPATIBLE_TOOLS(web_search 或 web_search_preview;需要 --openai-compatible-api-mode responses)。",
7508
+ "Save OPENAI_COMPATIBLE_TOOLS (web_search or web_search_preview; needs --openai-compatible-api-mode responses)."
7509
+ ],
7510
+ "元宝搜索 API 可用": [
7511
+ "元宝搜索 API 可用",
7512
+ "Yuanbao Search API is available"
7513
+ ],
7514
+ "YUANBAO_SECRET_ID 或 YUANBAO_SECRET_KEY 未设置,元宝搜索不可用": [
7515
+ "YUANBAO_SECRET_ID 或 YUANBAO_SECRET_KEY 未设置,元宝搜索不可用",
7516
+ "YUANBAO_SECRET_ID or YUANBAO_SECRET_KEY is not set; Yuanbao Search is unavailable"
7517
+ ],
7518
+ "元宝搜索:{0}": [
7519
+ "元宝搜索:{0}",
7520
+ "Yuanbao Search: {0}"
7521
+ ],
7522
+ "元宝搜索 API 请求超时": [
7523
+ "元宝搜索 API 请求超时",
7524
+ "Yuanbao Search API request timed out"
7525
+ ],
7526
+ "YUANBAO_SECRET_ID 和 YUANBAO_SECRET_KEY 未配置。": [
7527
+ "YUANBAO_SECRET_ID 和 YUANBAO_SECRET_KEY 未配置。",
7528
+ "YUANBAO_SECRET_ID and YUANBAO_SECRET_KEY are not configured."
7529
+ ],
7530
+ "元宝搜索响应缺少 Response": [
7531
+ "元宝搜索响应缺少 Response",
7532
+ "Yuanbao search response is missing Response"
7533
+ ],
7534
+ "元宝搜索返回的 Pages 不是列表": [
7535
+ "元宝搜索返回的 Pages 不是列表",
7536
+ "Yuanbao search Pages is not a list"
7537
+ ],
7390
7538
  "TinyFish 搜索响应不是 JSON 对象": [
7391
7539
  "TinyFish 搜索响应不是 JSON 对象",
7392
7540
  "TinyFish search response is not a JSON object"
@@ -8415,6 +8563,10 @@
8415
8563
  "OpenAI 兼容 API 模式",
8416
8564
  "openai-compatible API mode"
8417
8565
  ],
8566
+ "xai-responses stream": [
8567
+ "xai-responses 流式",
8568
+ "xai-responses stream"
8569
+ ],
8418
8570
  "openai-compatible fallback": [
8419
8571
  "OpenAI 兼容回退",
8420
8572
  "openai-compatible fallback"
@@ -8675,10 +8827,26 @@
8675
8827
  "xAI Responses API 可用 (HTTP {0})",
8676
8828
  "xAI Responses API is available (HTTP {0})"
8677
8829
  ],
8830
+ "{0} (sent: {1})": [
8831
+ "{0}(本次发送:{1})",
8832
+ "{0} (sent: {1})"
8833
+ ],
8834
+ "xAI Responses stream returned no text": [
8835
+ "xAI Responses 流式响应没有返回文本",
8836
+ "xAI Responses stream returned no text"
8837
+ ],
8678
8838
  "xAI Responses API 可用 (HTTP {0})": [
8679
8839
  "xAI Responses API 可用 (HTTP {0})",
8680
8840
  "xAI Responses API is available (HTTP {0})"
8681
8841
  ],
8842
+ "{0}(本次发送:{1})": [
8843
+ "{0}(本次发送:{1})",
8844
+ "{0} (sent: {1})"
8845
+ ],
8846
+ "xAI Responses 流式响应没有返回文本": [
8847
+ "xAI Responses 流式响应没有返回文本",
8848
+ "xAI Responses stream returned no text"
8849
+ ],
8682
8850
  "xAI Responses model": [
8683
8851
  "xAI 模型",
8684
8852
  "xAI Responses model"
@@ -8699,6 +8867,10 @@
8699
8867
  "可选;设置后在 xAI Responses 请求中发送 reasoning.effort,默认不发送。",
8700
8868
  "Optional; when set, sends reasoning.effort in xAI Responses requests; omitted by default."
8701
8869
  ],
8870
+ "只在 OPENAI_COMPATIBLE_API_MODE=responses 时把 OPENAI_COMPATIBLE_TOOLS 设为 web_search(或 web_search_preview);其他情况留空。": [
8871
+ "只在 OPENAI_COMPATIBLE_API_MODE=responses 时把 OPENAI_COMPATIBLE_TOOLS 设为 web_search(或 web_search_preview);其他情况留空。",
8872
+ "Use OPENAI_COMPATIBLE_TOOLS=web_search (or web_search_preview) only with OPENAI_COMPATIBLE_API_MODE=responses; otherwise leave it empty."
8873
+ ],
8702
8874
  "可选;设置后在 xAI Responses 请求中发送 reasoning.effort,默认不发送。": [
8703
8875
  "可选;设置后在 xAI Responses 请求中发送 reasoning.effort,默认不发送。",
8704
8876
  "Optional; when set, sends reasoning.effort in xAI Responses requests; omitted by default."
@@ -9527,6 +9699,10 @@
9527
9699
  "保存 XAI_TOOLS。",
9528
9700
  "Save XAI_TOOLS."
9529
9701
  ],
9702
+ "保存 XAI_STREAM。": [
9703
+ "保存 XAI_STREAM。",
9704
+ "Save XAI_STREAM."
9705
+ ],
9530
9706
  "保存 ZHIPU_API_KEY。": [
9531
9707
  "保存 ZHIPU_API_KEY。",
9532
9708
  "Save ZHIPU_API_KEY."
@@ -11615,6 +11791,10 @@
11615
11791
  "无效的 --timeout:{0}。需要有限的正数。",
11616
11792
  "Invalid --timeout: {0}. Expected a positive finite number."
11617
11793
  ],
11794
+ "无效的 OPENAI_COMPATIBLE_TOOLS:{0}。支持:{1}": [
11795
+ "无效的 OPENAI_COMPATIBLE_TOOLS:{0}。支持:{1}",
11796
+ "Invalid OPENAI_COMPATIBLE_TOOLS: {0}. Supported values: {1}"
11797
+ ],
11618
11798
  "无效的 OpenAI 兼容 API 模式:{0}。支持:{1}": [
11619
11799
  "无效的 OpenAI 兼容 API 模式:{0}。支持:{1}",
11620
11800
  "Invalid OpenAI-compatible API mode: {0}. Supported values: {1}"
@@ -13567,6 +13747,10 @@
13567
13747
  "站点地图",
13568
13748
  "Site map"
13569
13749
  ],
13750
+ "等一分钟再运行本诊断;经常出现就降低并发、换模型,或提高账户的速率额度。地址、key 和模型名不一定有问题。": [
13751
+ "等一分钟再运行本诊断;经常出现就降低并发、换模型,或提高账户的速率额度。地址、key 和模型名不一定有问题。",
13752
+ "Run this diagnosis again in a minute; if it keeps happening, lower concurrency, switch models, or raise the account's rate limit. The URL, key and model name are not necessarily wrong."
13753
+ ],
13570
13754
  "等多久、失败之后怎么办、冷却多长时间。默认值适合大多数人。": [
13571
13755
  "等多久、失败之后怎么办、冷却多长时间。默认值适合大多数人。",
13572
13756
  "How long to wait, what happens after a failure, how long a dead provider stays out. The defaults suit most people."
@@ -17855,10 +18039,6 @@
17855
18039
  "尚未配置 Jev 独立汇总模型",
17856
18040
  "Jev synthesis model is not configured"
17857
18041
  ],
17858
- "{0} 另外,联网搜索能力检查未通过:{1}。OpenAI-compatible 不会发送搜索工具;如果该模型只能通过 Responses 的 web_search 工具联网,请把 XAI_API_URL、XAI_API_KEY、XAI_MODEL 指向支持 /v1/responses 的中转站。": [
17859
- "{0} 另外,联网搜索能力检查未通过:{1}。OpenAI-compatible 不会发送搜索工具;如果该模型只能通过 Responses 的 web_search 工具联网,请把 XAI_API_URL、XAI_API_KEY、XAI_MODEL 指向支持 /v1/responses 的中转站。",
17860
- "{0} Also, the web search capability check did not pass: {1}. OpenAI-compatible sends no search tool; if this model can only search through the Responses web_search tool, point XAI_API_URL, XAI_API_KEY and XAI_MODEL at a relay that supports /v1/responses."
17861
- ],
17862
18042
  "DeepSeek search response is not a JSON object": [
17863
18043
  "DeepSeek 搜索响应不是 JSON 对象",
17864
18044
  "DeepSeek search response is not a JSON object"
@@ -18026,5 +18206,29 @@
18026
18206
  "检索渠道": [
18027
18207
  "检索渠道",
18028
18208
  "Retrieval channel"
18209
+ ],
18210
+ "{0} · 正在连接": [
18211
+ "{0} · 正在连接",
18212
+ "{0} · Connecting"
18213
+ ],
18214
+ "再次检测没有找到正在使用的 Smart Search CLI,当前连接保持不变。如已卸载或移动,请在“环境详情…”中重新检测。": [
18215
+ "再次检测没有找到正在使用的 Smart Search CLI,当前连接保持不变。如已卸载或移动,请在“环境详情…”中重新检测。",
18216
+ "Detecting again did not find the Smart Search CLI in use, so the current connection stays. If you uninstalled or moved it, choose Detect again in Environment details…."
18217
+ ],
18218
+ "Smart Search CLI 有变化。完成当前任务后,点击右上角的刷新即可切换。": [
18219
+ "Smart Search CLI 有变化。完成当前任务后,点击右上角的刷新即可切换。",
18220
+ "The Smart Search CLI has changed. When the current task is done, click Refresh at the top right to switch to it."
18221
+ ],
18222
+ "Smart Search CLI 有变化,已切换到 {0}。": [
18223
+ "Smart Search CLI 有变化,已切换到 {0}。",
18224
+ "The Smart Search CLI has changed; switched to {0}."
18225
+ ],
18226
+ "Smart Search {0} 已发布,当前版本为 {1}。立即更新会下载新版本并重启 App;配置、独立 CLI 和 Skills 会保留。": [
18227
+ "Smart Search {0} 已发布,当前版本为 {1}。立即更新会下载新版本并重启 App;配置、独立 CLI 和 Skills 会保留。",
18228
+ "Smart Search {0} is available (you have {1}). Update now downloads it and restarts the App; your configuration, independent CLI and Skills are kept."
18229
+ ],
18230
+ "立即更新": [
18231
+ "立即更新",
18232
+ "Update now"
18029
18233
  ]
18030
18234
  }
@@ -23,7 +23,7 @@ Use the local `smart-search` command as the default execution layer for web rese
23
23
  1. Run `smart-search doctor --format json` when configuration or availability is uncertain.
24
24
  2. If `doctor` reports missing configuration, use `smart-search setup` or `smart-search config set KEY VALUE` when the user provides keys. Do not ask users to edit global environment variables by default.
25
25
  3. If OpenAI-compatible `search` hangs or times out after `doctor` succeeds, run `smart-search diagnose openai-compatible --format markdown` and use its summary.
26
- 4. Keep `OPENAI_COMPATIBLE_API_MODE=chat-completions` unless a named relay has passed the official Responses subset probes; set `responses` only for that relay and keep the diagnostic evidence.
26
+ 4. Keep `OPENAI_COMPATIBLE_API_MODE=chat-completions` unless a named relay has passed the official Responses subset probes; set `responses` only for that relay and keep the diagnostic evidence. For a model that searches only through the Responses `web_search` tool (for example `gpt-6.1-sol` with an official OpenAI key), also set `OPENAI_COMPATIBLE_TOOLS=web_search`.
27
27
  5. If `doctor` returns `ok: true`, use only `smart-search` CLI subcommands for web research. Do not call Codex native web search in the same task.
28
28
  6. Use `smart-search skills status --targets codex --format json` when the installed global skill may be stale; use `smart-search skills update --targets codex --format json` to refresh it without rerunning setup.
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.
@@ -43,12 +43,12 @@
43
43
  - `smart-search context7-library NAME [QUERY] [--format json|markdown|content] [--output PATH]`
44
44
  - `smart-search context7-docs LIBRARY_ID QUERY [--format json|markdown|content] [--output PATH]`
45
45
  - `smart-search deep QUERY [--budget quick|standard|deep] [--evidence-dir PATH] [--format json|markdown|content] [--output PATH]`
46
- - `smart-search research QUERY [--budget quick|standard|deep] [--evidence-dir PATH] [--fallback auto|off] [--format json|markdown|content] [--output PATH]`
46
+ - `smart-search research QUERY [--budget quick|standard|deep] [--evidence-dir PATH] [--fallback auto|off] [--stream|--no-stream] [--format json|markdown|content] [--output PATH]`
47
47
  - `smart-search route-calibrate [--models CSV] [--format json|markdown|content] [--output PATH]`
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 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] [--deepseek-key KEY] [--deepseek-api-url URL] [--deepseek-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]`
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] [--xai-stream true|false] [--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-tools web_search|web_search_preview] [--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] [--yuanbao-secret-id ID] [--yuanbao-secret-key KEY] [--yuanbao-api-url URL] [--yuanbao-timeout SECONDS] [--deepseek-key KEY] [--deepseek-api-url URL] [--deepseek-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]`
@@ -58,6 +58,7 @@ smart-search skills update --all --format json
58
58
  smart-search route "React useEffect API docs" --format markdown
59
59
  smart-search setup --non-interactive --zhipu-api-url "https://open.bigmodel.cn/api" --zhipu-search-engine "search_std"
60
60
  smart-search setup --non-interactive --openai-compatible-api-mode responses
61
+ smart-search setup --non-interactive --openai-compatible-api-mode responses --openai-compatible-tools web_search
61
62
  smart-search setup --non-interactive --openai-compatible-stream true
62
63
  smart-search setup --non-interactive --openai-compatible-fallback-models "model-a,model-b"
63
64
  smart-search setup --non-interactive --anysearch-api-url "https://api.anysearch.com/mcp" --anysearch-key "key"
@@ -71,11 +72,13 @@ smart-search config set XAI_API_KEY "key" --format json
71
72
  smart-search config set XAI_MODEL "grok-4-fast" --format json
72
73
  smart-search config set XAI_TOOLS "web_search,x_search" --format json
73
74
  smart-search config set XAI_REASONING_EFFORT "high" --format json
75
+ smart-search config set XAI_STREAM "true" --format json
74
76
  smart-search search "Latest Grok news" --providers xai-responses --stream --format json
75
77
  smart-search config set OPENAI_COMPATIBLE_API_URL "https://api.openai.com/v1" --format json
76
78
  smart-search config set OPENAI_COMPATIBLE_API_KEY "key" --format json
77
79
  smart-search config set OPENAI_COMPATIBLE_MODEL "model-id" --format json
78
80
  smart-search config set OPENAI_COMPATIBLE_API_MODE "responses" --format json
81
+ smart-search config set OPENAI_COMPATIBLE_TOOLS "web_search" --format json
79
82
  smart-search config set OPENAI_COMPATIBLE_FALLBACK_MODELS "model-a,model-b" --format json
80
83
  smart-search config set OPENAI_COMPATIBLE_STREAM "true" --format json
81
84
  smart-search config set SMART_SEARCH_TIMEOUT_SECONDS "180" --format json
@@ -98,6 +101,8 @@ smart-search config set TINYFISH_SEARCH_API_URL "https://api.search.tinyfish.ai"
98
101
  smart-search config set TINYFISH_FETCH_API_URL "https://api.fetch.tinyfish.ai" --format json
99
102
  smart-search config set DEEPSEEK_API_KEY "key" --format json
100
103
  smart-search config set DEEPSEEK_API_URL "https://api.deepseek.com" --format json
104
+ smart-search config set YUANBAO_SECRET_ID "id" --format json
105
+ smart-search config set YUANBAO_SECRET_KEY "key" --format json
101
106
  smart-search model current --format json
102
107
  smart-search doctor --format json
103
108
  smart-search doctor --format markdown
@@ -22,18 +22,19 @@ For research, `SMART_SEARCH_JEV_SYNTHESIZE` accepts `true`, `false`, and `auto`.
22
22
 
23
23
  - `deep` uses offline rules/local signals only and must not call remote embeddings or classifier components.
24
24
  - Official xAI uses `/responses` through `XAI_*`. OpenAI-compatible relays default to `/chat/completions`; `OPENAI_COMPATIBLE_API_MODE=responses` explicitly selects `/responses` for a relay that supports the documented subset.
25
- - `search --stream` sets `stream=true` for xAI Responses and OpenAI-compatible search, including Grok search selected by Jev. `--no-stream` disables streaming for that request. `OPENAI_COMPATIBLE_STREAM=true` remains the default switch for OpenAI-compatible search and provider-side fetch.
25
+ - `search --stream` and `research --stream` set `stream=true` for xAI Responses and OpenAI-compatible search, including Grok search selected by Jev. `--no-stream` disables streaming for that request. `OPENAI_COMPATIBLE_STREAM=true` remains the default switch for OpenAI-compatible search and provider-side fetch.
26
+ - `XAI_STREAM` defaults to `false` and accepts `true`, `1`, or `yes` as true. When true, every xAI Responses request uses `stream=true`, including `research` and Grok search selected by Jev; `--stream` / `--no-stream` override it for one run. A failed xAI stream is an error; it is not retried with `stream=false`.
26
27
  - Legacy `SMART_SEARCH_API_URL`, `SMART_SEARCH_API_KEY`, `SMART_SEARCH_API_MODE`, `SMART_SEARCH_MODEL`, and `SMART_SEARCH_XAI_TOOLS` are unsupported config keys.
27
28
  - xAI Responses mode may use only `XAI_TOOLS=web_search,x_search` and a subset of those tools.
28
- - `XAI_REASONING_EFFORT` accepts `low`, `medium`, or `high` (case-insensitive, stored lowercase). Optional; when set, sends reasoning.effort in xAI Responses requests; omitted by default. This also applies to Grok search selected by Jev. Unsupported reasoning values reported by the upstream API remain errors; the field is not silently removed and retried.
29
- - Neither OpenAI-compatible API mode sends xAI `web_search` / `x_search` tools or legacy `search_parameters`; xAI Chat Completions Live Search is deprecated.
29
+ - `XAI_REASONING_EFFORT` accepts `low`, `medium`, or `high` (case-insensitive, stored lowercase). Optional; when set, sends reasoning.effort in xAI Responses requests; omitted by default. This also applies to Grok search selected by Jev. Unsupported reasoning values reported by the upstream API remain errors; the field is not silently removed and retried. The xAI connection test in `doctor` and the App sends the same `reasoning.effort` and `stream` as a search, without tools, and names them in its message and under `sent`; a stream that fails after HTTP 200 fails the test.
30
+ - OpenAI-compatible sends no search tools by default. `OPENAI_COMPATIBLE_TOOLS` (`web_search` or `web_search_preview`, comma-separated) attaches Responses tools to `search()` only; it requires `OPENAI_COMPATIBLE_API_MODE=responses`, and any other mode is a `parameter_error` on save and before a request. It never applies to `fetch()`, `describe_url()`, `rank_sources()`, synthesis, or the `doctor` connection test. `x_search` and legacy `search_parameters` are never sent; xAI Chat Completions Live Search is deprecated.
30
31
  - AnySearch is reported only as optional experimental `vertical_search`; it is not part of the `web_search` fallback and is not required by the `standard` minimum profile.
31
32
  - Sciverse is reported only as optional experimental explicit-only `vertical_search`; it is not `docs_search`, not part of default `search` / `research` fallback, and not required by the `standard` minimum profile.
32
33
  - Jina Reader is `web_fetch` only, not a general search provider. `JINA_API_KEY` is required before Jina satisfies the standard minimum profile; anonymous `r.jina.ai` is explicit/experimental fetch behavior.
33
34
  - Same-capability fallback is allowed; model answers and web search are mutual fallbacks in ordinary search. Context7 is not used for unrelated broad web queries, and page extraction providers are not used as docs search providers.
34
35
  - `TAVILY_ENABLED=false` removes Tavily from registered `web_search` and `web_fetch` routes even when its key is present. Direct Tavily search/extract calls, `map`, `doctor`, and smoke must make no Tavily network request; `map` reports a local configuration error. Firecrawl remains independently configured and all fallback stays within its capability.
35
36
  - In Jev mode, Jev chooses among allowed capabilities and providers for the question; there is no mandatory main-model call or fixed global provider order. Local routing prioritizes suitable capabilities and configured preferences; a docs question with no docs channel configured uses web search instead of no channel.
36
- - `main_search` contains xAI Responses and OpenAI-compatible model channels; `web_search` contains Zhipu REST/MCP, Tavily, Firecrawl, TinyFish and DeepSeek; `docs_search` contains Context7 and Exa. Failure fallback stays within the selected capability family; model answers and web search are mutual fallbacks in ordinary search.
37
+ - `main_search` contains xAI Responses and OpenAI-compatible model channels; `web_search` contains Zhipu REST/MCP, Tavily, Firecrawl, TinyFish, DeepSeek and Yuanbao Search; `docs_search` contains Context7 and Exa. Failure fallback stays within the selected capability family; model answers and web search are mutual fallbacks in ordinary search.
37
38
  - Ordinary Context7 uses the first library in Context7's ranked candidates, without a second Jev call. Research may use Jev to select the matching library, using the first candidate if Jev fails or no score reaches its threshold. Empty results may fall through to same-capability Exa; explicit Context7 commands remain unchanged.
38
39
  - `--extra-sources N` controls the selected channel's result count. It does not add channels, split a budget between providers, or make Tavily/Firecrawl a required extra stage. A known-URL search follows the configured Jev/local routing; local routing prefers page reading.
39
40
  - `fetch` tries Tavily first, then Jina with `JINA_API_KEY`, then Zhipu Coding Plan MCP Reader, then Firecrawl, then TinyFish, then DeepSeek.
@@ -55,6 +56,14 @@ DeepSeek:
55
56
  - Search results normalize `summary` (falling back to `snippet`) to `description`, `site_name` to `source`, and `date` to `published_date`. Summaries are not page text: fetch a key page before citing it. An empty result set is a successful empty response.
56
57
  - Fetch returns the page Markdown. HTTP 403 (URL refused by DeepSeek's safety policy) and 404 (no usable page content, which currently includes PDF links and private network addresses) mean that page has nothing to read: the attempt is `empty`, fallback continues, and the provider is not cooled down. `401` maps to `auth_error`, `402` (insufficient balance) to `provider_error`, `429` to `rate_limited`, `5xx` to `network_error`.
57
58
  - DeepSeek bills each successful search or fetch request. `doctor` and `providers test deepseek` send one real request to each.
59
+
60
+ Yuanbao Search:
61
+
62
+ - `YUANBAO_SECRET_ID` and `YUANBAO_SECRET_KEY`, a Tencent Cloud API key with Yuanbao Search enabled, register Yuanbao Search for `web_search` only. It never satisfies `main_search`, `docs_search` or `web_fetch`. Jev may select it directly; `search --providers yuanbao` forces it.
63
+ - `YUANBAO_API_URL` defaults to `https://wsa.tencentcloudapi.com`. Each search is one Tencent Cloud API 3.0 `SearchPro` call (version `2025-05-08`) with `{"Query"}`, signed with TC3-HMAC-SHA256 the way the official SDK signs it. Never log or echo either secret.
64
+ - Results normalize `passage` to `description`, the longer `content` summary (standard and flagship tiers only) to `content`, `site` to `source`, and `date` to `published_date`. At most 10 results come back.
65
+ - Errors arrive as HTTP 200 with `Response.Error`. `AuthFailure*` and `UnauthorizedOperation*` map to `auth_error`, `RequestLimitExceeded*` and `LimitExceeded*` to `rate_limited`, `InvalidParameter*`, `MissingParameter*` and `UnknownParameter*` to `parameter_error`, and any other code to `provider_error`; the code stays in the message.
66
+ - Every search counts against the Tencent Cloud quota. `doctor` and `providers test yuanbao` send one real search.
58
67
  - `map` currently uses Tavily only.
59
68
  - `exa-search` and `exa-similar` use Exa only.
60
69
  - `context7-library` and `context7-docs` use Context7 only.
@@ -129,13 +138,14 @@ OpenAI-compatible streaming:
129
138
 
130
139
  - `OPENAI_COMPATIBLE_API_MODE` defaults to `chat-completions` and accepts only `chat-completions` or `responses`. The selected protocol applies consistently to `search()`, provider-side `fetch()`, `describe_url()`, `rank_sources()`, `doctor`, and `diagnose openai-compatible`.
131
140
  - Responses mode handles the official `model` + `instructions`/`input` subset, heterogeneous `output` text parts, URL citations, typed stream deltas, and terminal failures. It does not promise `/responses` support from every relay marketed as OpenAI-compatible; accept each named relay with both diagnose stream probes.
141
+ - Models that search only through the Responses `web_search` tool, such as `gpt-6.1-sol` on the official OpenAI API, need `OPENAI_COMPATIBLE_API_MODE=responses` plus `OPENAI_COMPATIBLE_TOOLS=web_search`. Chat Completions search models such as `gpt-5-search-api` search on their own; their `url_citation` annotations become structured sources. `diagnose openai-compatible` sends the configured tools with its search-shape and web-search probes.
132
142
  - `OPENAI_COMPATIBLE_STREAM` defaults to `false` and accepts `true`, `1`, or `yes` as true.
133
143
  - For OpenAI-compatible search, `search --stream` means "prefer stream first"; stream empty/timeout/retryable protocol failures fall back to the same provider/model with `stream=false`.
134
144
  - `search --no-stream` forces `stream=false` for the current invocation.
135
145
  - `SMART_SEARCH_TIMEOUT_SECONDS` defines one 300-second default monotonic `search` budget. Jev selection, channel dependencies and failure fallback share its remaining time; no budget is reserved for a mandatory main model. `search --timeout` overrides the saved value for one invocation. Research uses the same deadline with its configured budget ceilings.
136
146
  - `OPENAI_COMPATIBLE_FALLBACK_MODELS` is an optional comma-separated ordered list. It is fail-over after a hard primary-model failure, not a time slice. The current candidate keeps the remaining shared main-search budget; extra fallback models must not shrink that budget. `--fallback off` or `--model MODEL` disables this model fallback for the invocation.
137
147
  - `timeout_phase`, `phase_attempts`, elapsed/remaining deadline values, and `partial_success` report execution progress. Research judgment/filter/synthesis failures preserve completed evidence; ordinary search has no extra/supplemental phase. Strict validation still reports an evidence error when its source requirements are not met.
138
- - OpenAI-compatible attempts may include `model`, `transport`, `fallback_from_transport`, `fallback_from_model`, and `breaker_state`. `transport_fallback_used` records stream-to-non-stream recovery separately from provider/model `fallback_used`.
148
+ - OpenAI-compatible attempts may include `model`, `transport`, `fallback_from_transport`, `fallback_from_model`, and `breaker_state`. `transport_fallback_used` records stream-to-non-stream recovery separately from provider/model `fallback_used`. xAI Responses attempts include `stream`, `transport`, and `reasoning_effort`.
139
149
  - Streaming applies to xAI Responses `search()` and OpenAI-compatible `search()` and provider-side `fetch()` calls. `describe_url()` and `rank_sources()` stay non-streaming. xAI Responses uses the shared Responses SSE parser and does not retry with `stream=false`.
140
150
 
141
151
  Exa domain filters:
@@ -84,6 +84,7 @@
84
84
  - Use `smart-search setup --non-interactive --jina-key "key"` to let Jina satisfy `web_fetch`; `JINA_RESPOND_WITH=readerlm-v2` also requires `JINA_API_KEY`.
85
85
  - Use `smart-search setup --non-interactive --zhipu-mcp-key "key"` only when the user explicitly wants Coding Plan Remote MCP quota.
86
86
  - Use `smart-search setup --non-interactive --openai-compatible-api-mode responses` only when a named relay requires `/responses`. The default is `chat-completions` and uses `/chat/completions`; invalid modes fail before setup saves any field.
87
+ - Use `smart-search setup --non-interactive --openai-compatible-api-mode responses --openai-compatible-tools web_search` when the model searches only through the Responses `web_search` tool, such as `gpt-6.1-sol` with an official OpenAI key. Use `web_search_preview` for a relay that only knows the older name. Tools without `responses` mode fail before setup saves any field.
87
88
  - Use `smart-search setup --non-interactive --openai-compatible-stream true` only when an OpenAI-compatible relay benefits from SSE streaming for long requests. Default remains false.
88
89
  - Use `smart-search setup --non-interactive --openai-compatible-fallback-models "model-a,model-b"` to save ordered OpenAI-compatible backup models for primary model hard failure. These models do not receive a reserved time slice; the primary model keeps the remaining shared main-search budget. `--fallback off` and `search --model MODEL` disable this model fallback for one invocation.
89
90
  - Use `smart-search setup --non-interactive --search-timeout 300` or `smart-search config set SMART_SEARCH_TIMEOUT_SECONDS 300` to persist the normal search budget. Invalid non-positive values fail before provider work.
@@ -99,6 +100,7 @@
99
100
  - `TINYFISH_SEARCH_API_URL` defaults to `https://api.search.tinyfish.ai`, and `TINYFISH_FETCH_API_URL` defaults to `https://api.fetch.tinyfish.ai`. Both authenticate with the `X-API-Key` header, not a bearer token.
100
101
  - `TINYFISH_TIMEOUT_SECONDS` defaults to `60` and covers both TinyFish search and fetch reads.
101
102
  - Use `smart-search setup --non-interactive --deepseek-key "key"` to add DeepSeek to `web_search` and `web_fetch` with the same key as the DeepSeek model API. It never satisfies `main_search` or `docs_search`; Jev can select it among the allowed channels.
103
+ - Use `smart-search setup --non-interactive --yuanbao-secret-id "id" --yuanbao-secret-key "key"` to add Yuanbao Search to `web_search` with a Tencent Cloud API key that has Yuanbao Search enabled. It never satisfies `main_search`, `docs_search` or `web_fetch`. `YUANBAO_API_URL` defaults to `https://wsa.tencentcloudapi.com`, and `YUANBAO_TIMEOUT_SECONDS` defaults to `30`.
102
104
  - `DEEPSEEK_API_URL` defaults to `https://api.deepseek.com`, and `DEEPSEEK_TIMEOUT_SECONDS` defaults to `60` and covers both DeepSeek search and fetch reads. Each successful DeepSeek request is billed.
103
105
 
104
106
  ## Provider Failure Cooldown