feat(codex): add per-provider option to disable hosted web search - #409
ChanthMiao wants to merge 3 commits into
Conversation
|
Thanks for the PR! The TUI direction looks consistent, but there are a few blockers:
Please add lifecycle coverage for switch-away/back, temporary capture, and takeover restore. |
|
Ok, I will fix them later. But, my laptop failed to boot for unknown problem. I need some time to fix it first. |
…ifecycle Address maintainer review (PR SaladDay#409): - Align with upstream d380b410: native /responses gateways on the host/model blacklist (xiaomimimo.com, longcat.chat, minimax.io, minimaxi.com; model prefixes mimo/longcat/minimax) now get web_search = "disabled" automatically, with an optional top-level base_url fallback for legacy flat configs. The disableWebSearch toggle remains as a force-disable override (additive only). - Preserve settingsConfig.disableWebSearch when Codex snapshots are rebuilt during provider backfill or temporary-launch capture, so the option survives a normal switch cycle. - Proxy takeover restore no longer strips web_search = "disabled" from native providers: verbatim restores keep the captured field, and takeover writes evaluate the blacklist against the provider's stored pre-rewrite config (the live base_url is rewritten to the local proxy). - Lifecycle tests: switch-away/back, temporary capture, backfill, takeover restore, and blacklist verdict override.
|
All review points are addressed in commit
Test status: |
|
@SaladDay Any other problems to fix ? |
|
Thanks for the update! I re-reviewed commit
Also, the takeover restore coverage is still helper-level only. Please add a real takeover/restore assertion under I also checked the #415 cross-reference: it covers the separate Claude-to-Responses WebSearch bridge and does not add scope to this PR. The PR merges cleanly with current |
…wen3-Coder blacklist Address maintainer round-2 review (PR SaladDay#409): - restore_codex_settings_for_backfill now restores disableWebSearch alongside modelCatalog, so refresh_provider_snapshot keeps the option on the newly active provider after a real switch (verified by a full ProviderService::switch seed->away->back lifecycle test using a non-blacklisted host, proving the disable comes from the option). - Add qwen3-coder to the web_search reject model prefixes (upstream 26f0d221): DashScope rejects built-in tools for the coder series. qwen3-coder-plus is now blacklisted (incl. behind aggregator vendor/ prefixes), while general Qwen models (qwen-max, qwen3-max) stay enabled. - Add a real takeover assertion under proxy_takeover.rs: activating a managed proxy session for a host-blacklisted native gateway keeps web_search = "disabled" after the live base_url is rewritten to the local proxy.
|
All three round-2 blockers are fixed in commit
Verification: |
e95a391 to
fa56a7a
Compare
…ifecycle Address maintainer review (PR SaladDay#409): - Align with upstream d380b410: native /responses gateways on the host/model blacklist (xiaomimimo.com, longcat.chat, minimax.io, minimaxi.com; model prefixes mimo/longcat/minimax) now get web_search = "disabled" automatically, with an optional top-level base_url fallback for legacy flat configs. The disableWebSearch toggle remains as a force-disable override (additive only). - Preserve settingsConfig.disableWebSearch when Codex snapshots are rebuilt during provider backfill or temporary-launch capture, so the option survives a normal switch cycle. - Proxy takeover restore no longer strips web_search = "disabled" from native providers: verbatim restores keep the captured field, and takeover writes evaluate the blacklist against the provider's stored pre-rewrite config (the live base_url is rewritten to the local proxy). - Lifecycle tests: switch-away/back, temporary capture, backfill, takeover restore, and blacklist verdict override.
…wen3-Coder blacklist Address maintainer round-2 review (PR SaladDay#409): - restore_codex_settings_for_backfill now restores disableWebSearch alongside modelCatalog, so refresh_provider_snapshot keeps the option on the newly active provider after a real switch (verified by a full ProviderService::switch seed->away->back lifecycle test using a non-blacklisted host, proving the disable comes from the option). - Add qwen3-coder to the web_search reject model prefixes (upstream 26f0d221): DashScope rejects built-in tools for the coder series. qwen3-coder-plus is now blacklisted (incl. behind aggregator vendor/ prefixes), while general Qwen models (qwen-max, qwen3-max) stay enabled. - Add a real takeover assertion under proxy_takeover.rs: activating a managed proxy session for a host-blacklisted native gateway keeps web_search = "disabled" after the live base_url is rewritten to the local proxy.
|
Rebased onto latest upstream main to resolve conflicts (branch now at fa56a7a). Upstream advanced past the PR's original base (v5.10.3 release, Pi support, provider presets, skills rework), so the PR was rebased onto the current main
Verification after rebase: codex_config 57 passed, services::provider 120, proxy_takeover/proxy_service 13/30, form tests 44, fmt clean, clippy warnings |
|
@SaladDay May you review the latest changes ? |
Add a "禁用内置联网搜索" toggle for native Responses (openai_responses) Codex providers. When enabled, live config.toml generation writes web_search = "disabled"; otherwise the field is left untouched except for removing the exact "disabled" value previously written by cc-switch, preserving user-owned settings such as "live". Anthropic gateways keep forcing the disabled value (the bridge cannot carry the hosted tool); Chat formats are unaffected (the proxy converts the tool). The option is stored in settingsConfig.disableWebSearch and round-trips through SQLite/import-export/WebDAV without schema changes.
…ifecycle Address maintainer review (PR SaladDay#409): - Align with upstream d380b410: native /responses gateways on the host/model blacklist (xiaomimimo.com, longcat.chat, minimax.io, minimaxi.com; model prefixes mimo/longcat/minimax) now get web_search = "disabled" automatically, with an optional top-level base_url fallback for legacy flat configs. The disableWebSearch toggle remains as a force-disable override (additive only). - Preserve settingsConfig.disableWebSearch when Codex snapshots are rebuilt during provider backfill or temporary-launch capture, so the option survives a normal switch cycle. - Proxy takeover restore no longer strips web_search = "disabled" from native providers: verbatim restores keep the captured field, and takeover writes evaluate the blacklist against the provider's stored pre-rewrite config (the live base_url is rewritten to the local proxy). - Lifecycle tests: switch-away/back, temporary capture, backfill, takeover restore, and blacklist verdict override.
…wen3-Coder blacklist Address maintainer round-2 review (PR SaladDay#409): - restore_codex_settings_for_backfill now restores disableWebSearch alongside modelCatalog, so refresh_provider_snapshot keeps the option on the newly active provider after a real switch (verified by a full ProviderService::switch seed->away->back lifecycle test using a non-blacklisted host, proving the disable comes from the option). - Add qwen3-coder to the web_search reject model prefixes (upstream 26f0d221): DashScope rejects built-in tools for the coder series. qwen3-coder-plus is now blacklisted (incl. behind aggregator vendor/ prefixes), while general Qwen models (qwen-max, qwen3-max) stay enabled. - Add a real takeover assertion under proxy_takeover.rs: activating a managed proxy session for a host-blacklisted native gateway keeps web_search = "disabled" after the live base_url is rewritten to the local proxy.
fa56a7a to
4cd9a66
Compare
|
Sorry, I've been a bit busy lately. I'll review it soon. |
cc-switch-cli 5.10.2 Created-by: HarmonybrewBot Commit-by: HarmonybrewBot Merged-by: HarmonybrewBot Description: Created by `brew bump` --- Created with `brew bump-formula-pr`.<details> <summary>release notes</summary> <pre># CC Switch CLI v5.10.2 v5.10.2 is a patch release for skill updates, provider configuration persistence, and upstream-compatible database, pricing, backup, and cloud-sync behavior. ## Highlights - Manually check and apply updates for repository-backed skills from the CLI or TUI. Use `cc-switch skills check-updates`, `cc-switch skills update <name>`, or `cc-switch skills update --all`. - Provider quick settings and common-config membership now persist correctly after TUI edits, including inherited Claude and Codex values. - The database now matches upstream schema v17 and keeps a persistent session-usage deduplication ledger. - SQL backup/restore and WebDAV/S3 synchronization follow the upstream recovery and locking behavior more closely. - The built-in price catalog and model aliases are refreshed from upstream CC-Switch v3.20. - OpenModel is available as a named preset for Claude, Codex, Gemini, OpenCode, Hermes, and OpenClaw. ## Upgrade The database migrates from schema v16 to v17 after creating the normal pre-migration backup. The migration adds the usage-deduplication ledger without rebuilding or deleting existing usage logs. If multiple installations share snapshots through WebDAV or S3, upgrade all of them before syncing a v17 snapshot. Older versions intentionally reject newer schemas. Built-in updater: ```bash cc-switch update ``` Homebrew: ```bash brew upgrade cc-switch-cli ``` macOS/Linux installer: ```bash curl -fsSL https://github.com/SaladDay/cc-switch-cli/releases/latest/download/install.sh | bash ``` ## Thank you Thank you to everyone who submitted an issue, shared diagnostics, followed up in a discussion, proposed a change, or opened a pull request during this cycle: - Issues and follow-up: [@DoubleLT](https://github.com/DoubleLT) ([#415](SaladDay/cc-switch-cli#415)), [@ShatterDusk](https://github.com/ShatterDusk) ([#413](SaladDay/cc-switch-cli#413)), [@PawnMa](https://github.com/PawnMa) ([#410](SaladDay/cc-switch-cli#410)), [@evelyn-jialin-zhang](https://github.com/evelyn-jialin-zhang) ([#408](SaladDay/cc-switch-cli#408)), [@MartinaBarton6](https://github.com/MartinaBarton6) ([#407](SaladDay/cc-switch-cli#407)), [@Wizard-one](https://github.com/Wizard-one) ([#406](SaladDay/cc-switch-cli#406)), [@Kurayuri](https://github.com/Kurayuri) ([#405](SaladDay/cc-switch-cli#405)), [@coderyangyangyang](https://github.com/coderyangyangyang) ([#404](SaladDay/cc-switch-cli#404)), [@CodeCatMeow](https://github.com/CodeCatMeow) ([#403](SaladDay/cc-switch-cli#403)), [@TaichiLi](https://github.com/TaichiLi) ([#402](SaladDay/cc-switch-cli#402)), [@maxwell-feng](https://github.com/maxwell-feng) ([#370](SaladDay/cc-switch-cli#370)), [@Jerrrry666](https://github.com/Jerrrry666) ([#278](SaladDay/cc-switch-cli#278)), and [@AkaChou](https://github.com/AkaChou) ([#89](SaladDay/cc-switch-cli#89)). - Pull requests and proposals: [@ShatterDusk](https://github.com/ShatterDusk) ([#414](SaladDay/cc-switch-cli#414)), [@XiaoHuo888-hue](https://github.com/XiaoHuo888-hue) ([#412](SaladDay/cc-switch-cli#412)), [@brushax](https://github.com/brushax) ([#411](SaladDay/cc-switch-cli#411)), [@ChanthMiao](https://github.com/ChanthMiao) ([#409](SaladDay/cc-switch-cli#409)), [@wplct](https://github.com/wplct) ([#399](SaladDay/cc-switch-cli#399), [#400](SaladDay/cc-switch-cli#400), [#401](SaladDay/cc-switch-cli#401)), [@louisneal](https://github.com/louisneal) ([#297](SaladDay/cc-switch-cli#297)), [@zhangyang-crazy-one](https://github.com/zhangyang-crazy-one) ([#277](SaladDay/cc-switch-cli#277)), [@tangaac](https://github.com/tangaac) ([#105](SaladDay/cc-switch-cli#105)), and [@hitsmaxft](https://github.com/hitsmaxft) ([#94](SaladDay/cc-switch-cli#94)). - Discussion participation: [@ToDayL](https://github.com/ToDayL) ([#297](SaladDay/cc-switch-cli#297)). We also thank [@farion1231](https://github.com/farion1231) and every upstream CC-Switch contributor, especially [@Komikawayi](https://github.com/Komikawayi), [@mhy1227](https://github.com/mhy1227), [@zayokami](https://github.com/zayokami), and [@YUZHEthefool](https://github.com/YUZHEthefool), whose database, pricing, backup, and sync work was adapted here. Some acknowledged reports and proposals remain open or were not merged; inclusion here is a thank-you, not a change in their status. See the [full changelog](https://github.com/SaladDay/cc-switch-cli/blob/v5.10.2/CHANGELOG.md) and [all changes since v5.10.1](SaladDay/cc-switch-cli@v5.10.1...v5.10.2). </pre> <p>View the full release notes at <a href="https://github.com/SaladDay/cc-switch-cli/releases/tag/v5.10.2">https://github.com/SaladDay/cc-switch-cli/releases/tag/v5.10.2</a>.</p> </details> <hr> See merge request: Harmonybrew/homebrew-core!17022
cc-switch-cli 5.10.5 Created-by: HarmonybrewBot Commit-by: HarmonybrewBot Merged-by: HarmonybrewBot Description: Created by `brew bump` --- Created with `brew bump-formula-pr`.<details> <summary>release notes</summary> <pre># CC Switch CLI v5.10.5 v5.10.5 adds opt-in shared Codex sessions, per-model reasoning controls, local quota reset times, and GPT-6 Astra pricing. It also fixes model-catalog persistence, user-owned catalog paths, Windows session scanning, SQL imports, and Chat Completions compatibility. ## Added - **Codex / Shared Sessions**: Add opt-in `cc-switch start codex <provider> --shared-sessions` on macOS/Linux. Providers keep separate credentials and configuration while sharing persistent native session history and session locks. Includes [#440](SaladDay/cc-switch-cli#440), addressing [#436](SaladDay/cc-switch-cli#436). - **Codex / Per-Model Reasoning**: Expose supported reasoning levels and a default for each model in both TUI model-catalog editors, with the existing Auto behavior and contextual help. Includes [#442](SaladDay/cc-switch-cli#442), addressing [#441](SaladDay/cc-switch-cli#441). - **Providers / PatewayAI**: Add the PatewayAI sponsor preset and its provider setup support. ## Changed - **Quota / Reset Times**: Show quota reset timestamps in the local timezone, with UTC offsets and remaining time in CLI text; add compact reset countdowns to the TUI. Raw JSON timestamps and upstream quota calculations retain their existing semantics. Includes [#456](SaladDay/cc-switch-cli#456), fixing [#445](SaladDay/cc-switch-cli#445). - **Pricing / GPT-6 Astra**: Add standard prices per million tokens: $10 input, $50 output, $1 cached input, and $12.50 cache writes. Missing entries are added without replacing user-customized prices or restoring user-deleted entries. Includes [#460](SaladDay/cc-switch-cli#460), fixing [#459](SaladDay/cc-switch-cli#459). ## Fixed - **Codex / Model Mapping Persistence**: Preserve stored model catalogs and per-model reasoning settings during provider switches and temporary-launch capture. Fixes [#447](SaladDay/cc-switch-cli#447). - **Codex / User-Owned Catalogs**: Preserve custom `model_catalog_json` paths when generating a cc-switch catalog. Includes [#454](SaladDay/cc-switch-cli#454). - **Codex / OpenCode Go Reasoning**: Recognize the OpenCode Zen gateway before applying model-vendor reasoning defaults, and constrain effort to the model's catalog settings. Fixes [#443](SaladDay/cc-switch-cli#443). - **Proxy / Chat Completions Compatibility**: Convert null or missing message content to an empty string when translating Responses requests to Chat Completions, preserving tool payloads and multimodal content. Fixes the Azure compatibility issue in [#448](SaladDay/cc-switch-cli#448). - **Windows / Session Scanning**: Open existing session-cache files with the access required for synchronization, avoiding `Access denied (os error 5)` without truncating their contents. Includes [#455](SaladDay/cc-switch-cli#455), fixing [#450](SaladDay/cc-switch-cli#450). - **Configuration / SQL Import**: Acquire the sync lock before synchronous import and live-config projection to avoid a nested-executor panic when importing or restoring SQL backups. Fixes [#453](SaladDay/cc-switch-cli#453). - **TUI / Claude Quick Config**: Correct the displayed item total in the quick-configuration menu. Fixes [#435](SaladDay/cc-switch-cli#435). ## Upgrade notes - The database schema remains at v18; upgrading from v5.10.4 requires no schema migration. - Shared Codex sessions are opt-in and limited to macOS/Linux. Keep the persistent `.cc-switch-launches/` directories, allow only one shared launch per provider, and close a session before continuing it through another provider. See the [shared-session usage notes](https://github.com/SaladDay/cc-switch-cli/blob/v5.10.5/README.md) for argument restrictions and cross-provider limitations. - GPT-6 Astra uses the existing standard-rate calculator. Long-context and service-tier pricing are outside this release's pricing change. ## Update ```bash cc-switch update ``` Or use the macOS/Linux installer: ```bash curl -fsSL https://github.com/SaladDay/cc-switch-cli/releases/latest/download/install.sh | bash ``` ## Thank you Thank you to everyone who opened an issue or pull request, shared diagnostics, reviewed a change, or joined a discussion. This list covers issues and pull requests active since v5.10.4, including participants in their earlier discussions. | Contributor | Issues and pull requests | | --- | --- | | [@6UOOON9](https://github.com/6UOOON9) | [#447](SaladDay/cc-switch-cli#447) | | [@ChanthMiao](https://github.com/ChanthMiao) | [#409](SaladDay/cc-switch-cli#409) | | [@Curious-r](https://github.com/Curious-r) | [#441](SaladDay/cc-switch-cli#441), [#443](SaladDay/cc-switch-cli#443) | | [@czfhhh](https://github.com/czfhhh) | [#454](SaladDay/cc-switch-cli#454) | | [@Devin-Pi](https://github.com/Devin-Pi) | [#358](SaladDay/cc-switch-cli#358), [#446](SaladDay/cc-switch-cli#446) | | [@dividduang](https://github.com/dividduang) | [#358](SaladDay/cc-switch-cli#358) | | [@GMOogway](https://github.com/GMOogway) | [#433](SaladDay/cc-switch-cli#433) | | [@HappyLiang12](https://github.com/HappyLiang12) | [#448](SaladDay/cc-switch-cli#448) | | [@jinjiwu](https://github.com/jinjiwu) | [#436](SaladDay/cc-switch-cli#436), [#445](SaladDay/cc-switch-cli#445) | | [@JounQin](https://github.com/JounQin) | [#457](SaladDay/cc-switch-cli#457) | | [@kelvkhiu](https://github.com/kelvkhiu) | [#444](SaladDay/cc-switch-cli#444) | | [@moonjoke001](https://github.com/moonjoke001) | [#358](SaladDay/cc-switch-cli#358) | | [@netcatty](https://github.com/netcatty) | [#450](SaladDay/cc-switch-cli#450) | | [@neverdie0710](https://github.com/neverdie0710) | [#451](SaladDay/cc-switch-cli#451) | | [@odup](https://github.com/odup) | [#453](SaladDay/cc-switch-cli#453) | | [@paopjian](https://github.com/paopjian) | [#439](SaladDay/cc-switch-cli#439) | | [@RainyPixel](https://github.com/RainyPixel) | [#449](SaladDay/cc-switch-cli#449) | | [@SaladDay](https://github.com/SaladDay) | [#440](SaladDay/cc-switch-cli#440), [#442](SaladDay/cc-switch-cli#442), [#455](SaladDay/cc-switch-cli#455), [#456](SaladDay/cc-switch-cli#456), [#460](SaladDay/cc-switch-cli#460) | | [@suntory1](https://github.com/suntory1) | [#358](SaladDay/cc-switch-cli#358) | | [@SyaJask](https://github.com/SyaJask) | [#358](SaladDay/cc-switch-cli#358) | | [@tangjunyi1](https://github.com/tangjunyi1) | [#458](SaladDay/cc-switch-cli#458) | | [@TheBoYang](https://github.com/TheBoYang) | [#432](SaladDay/cc-switch-cli#432) | | [@tianzhuwei](https://github.com/tianzhuwei) | [#358](SaladDay/cc-switch-cli#358) | | [@Tonystarkw12](https://github.com/Tonystarkw12) | [#434](SaladDay/cc-switch-cli#434) | | [@u1544096979](https://github.com/u1544096979) | [#437](SaladDay/cc-switch-cli#437), [#438](SaladDay/cc-switch-cli#438) | | [@wangsiqidahaoren](https://github.com/wangsiqidahaoren) | [#459](SaladDay/cc-switch-cli#459) | | [@wbbo](https://github.com/wbbo) | [#435](SaladDay/cc-switch-cli#435) | | [@xiaoshidebug](https://github.com/xiaoshidebug) | [#452](SaladDay/cc-switch-cli#452) | We also thank [@farion1231](https://github.com/farion1231) and upstream CC-Switch contributors, including [@zayokami](https://github.com/zayokami) for the [OpenCode Zen reasoning fix](farion1231/cc-switch#6123), and [@misaka-myu](https://github.com/misaka-myu) for the [user-owned catalog fix](farion1231/cc-switch#6087). Some acknowledged reports and proposals remain open or are not included in this release; a thank-you does not imply that an issue is fixed or a pull request is merged. See the [full changelog](https://github.com/SaladDay/cc-switch-cli/blob/v5.10.5/CHANGELOG.md) and [all changes since v5.10.4](SaladDay/cc-switch-cli@v5.10.4...v5.10.5). </pre> <p>View the full release notes at <a href="https://github.com/SaladDay/cc-switch-cli/releases/tag/v5.10.5">https://github.com/SaladDay/cc-switch-cli/releases/tag/v5.10.5</a>.</p> </details> <hr> See merge request: Harmonybrew/homebrew-core!20243
动机
Codex 供应商走原生
/responses(NativeResponses)格式直连网关时,部分网关不支持 hosted web-search 工具;此前 cc-switch 只能通过 model catalog 的supports_search_tool: false隐式抑制工具声明,无法在 config.toml 顶层显式禁用。本 PR 为这类供应商提供「禁用内置联网搜索」开关,控制web_search字段的生成。行为变化
openai_responses)格式的供应商显示;官方 OAuth 供应商同样可见web_search = "disabled""disabled"的值,用户手写的"live"等偏好保留settingsConfig.disableWebSearch(布尔),随 provider 经 SQLite / 导入导出 / WebDAV 同步往返,无需数据库迁移实现要点
prepare_codex_config_text_with_model_catalog_payload根据 profile + 选项推导 disable 条件,覆盖切换、同步、takeover、failover、恢复全部 live 写入入口build_effective_live_snapshot对 Codex 只投影{auth, config},新增merge_codex_provider_catalog_options在 proxy 侧三处写路径补齐选项测试
cargo test --lib web_search(9 个)、--lib provider_add_form_codex(43 个)全绿cargo fmt --check通过;改动文件无新增 clippy 警告