Skip to content

chore: adapt upstream c93978c4ea2e - #1

Closed
q1 wants to merge 321 commits into
prismfrom
sync/codex-upstream
Closed

q1 wants to merge 321 commits into
prismfrom
sync/codex-upstream

Conversation

@q1

@q1 q1 commented Sep 8, 2026 •

Copy link
Copy Markdown
Owner

Prepared local semantic adaptations after reviewing operating rules, range-diff, and overlapping seams.

Fork 0e043afac31d41d68433d6f4a3af72fe1264df52 → upstream c93978c4ea2e908255a2a06c37599fda3651554a. Candidate 5bec34f4bff59ba6027a2d4d35b65f97f92b2180.

Semantic adaptation:

  • Removed the duplicate synchronous Antigravity probe; preserved upstream asynchronous capability updates.
  • Added Meta settings mutations to Prism’s atomic revision checks.
  • Applied OAuth save fencing to Devin and Meta.
  • Preserved the panel’s operator restriction for new plugin quota routes.
  • Honored cross-priority plugin scheduling while retaining Prism quota eligibility.
  • Retained fork refresh ownership, atomic storage, nullable reserves, and native provider support.

Compatibility:

  • Upstream module and provider adapters remain intact.
  • Protected panel quota fetch/reset routes return requires_operator.
  • Fork seam debt remains in management route coverage, OAuth fencing, and scheduler integration.

Additional checks reported by Codex:

  • Added passing regressions for Meta revision conflicts, quota route restrictions, Devin cancellation fencing, asynchronous registration, and quota-filtered cross-priority scheduling.
  • Extended forced-refresh ownership tests; passed.
  • Passed focused Prism storage, catalog, encrypted recovery, lease, retry, affinity, and stream-error fixtures.
  • Passed focused race tests across auth, management, catalog, and encrypted recovery packages.
  • Formatting and git diff --check passed.

Unresolved gaps:

  • None reported.

Release implications:

  • fork/upstream.json already records v7.3.8 at c93978c.
  • The supplied tag mapping could not be independently verified offline because its local ref is absent.
  • Changes remain unstaged; runner fixed verification remains pending.

Verified on the candidate commit:

  • go test -count=1 ./sdk/cliproxy/auth ./internal/runtime/executor ./internal/api/handlers/management ./internal/api ./sdk/auth ./sdk/cliproxy ./internal/prismsync ./cmd/prism-sync
  • go test -race -count=1 ./sdk/cliproxy/auth ./internal/api/handlers/management ./sdk/auth ./sdk/cliproxy ./internal/prismsync
  • go build -o {build}/cli-proxy-api ./cmd/server
  • go build -o {build}/prism-sync ./cmd/prism-sync

Native verification: Linux amd64 server build succeeded with a read-only module-cache warning. Socket-backed fixtures were blocked by sandbox listener restrictions; socket-free fixtures passed. No live providers, credentials, or other native architectures were tested.

This draft proposes source changes. Source promotion, artifact publication and deployment require separate review and approval.

…08-plugin-store-rate-limit

fix(plugin-store): reduce release checks and honor shared GitHub rate-limit cooldowns
…ate call ids

- Extract Responses API call IDs prioritizing dedicated tool call fields (`call_id`, `tool_call_id`, `callId`) over generic `id`.
- Normalize tool call outputs against preceding calls using multi-pass matching (explicit ID, function name, and FIFO fallback).
- Fall back to tool output `name` when resolving function response names for unmapped call IDs.

Closes: router-for-me#5602
…ess-log

fix(logging): silence successful health probes while preserving errors
…sion 6

- Bump plugin ABI `SchemaVersion` to 6 and add `SchemaVersionRawManagementResponse`.
- Skip HTML entity escaping for plugin management JSON responses on schema version 6 and above.
- Retain legacy HTML escaping behavior for plugins with schema versions prior to 6.

Closes: router-for-me#5605
…turns

- Reorder Gemini user turn parts so text parts precede `functionResponse` parts.
- Prevent upstream provider validation failures (e.g., Vertex AI 400 errors) caused by text following tool results in the same turn.
- Apply user part reordering during Claude-to-Gemini request translation and when merging adjacent Gemini user contents.

Closes: router-for-me#5607
- Recursively strip `$schema` and `$id` dialect keywords from tool parameter schemas.
- Ensure object schemas and union object types retain an empty `properties` map.
- Re-encode normalized parameters without escaping HTML entities.

Closes: router-for-me#5612
- Decode and validate host affinity lookup requests for provider, model, and session ID.
- Query the active auth manager for session affinity bindings and status.
- Return lookup responses containing the auth index, observation timestamp, and credential availability state.

Closes: router-for-me#5604
@coderabbitai

coderabbitai Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 639 files, which is 539 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: ca3052de-9cc4-4ceb-a6a6-a75ea007243a

📥 Commits

Reviewing files that changed from the base of the PR and between 0e043af and 5bec34f.

⛔ Files ignored due to path filters (7)
  • assets/aiberm.png is excluded by !**/*.png
  • assets/fastaitoken.png is excluded by !**/*.png
  • assets/fluxa-baidu-ai-cloud.png is excluded by !**/*.png
  • assets/logo/meta.svg is excluded by !**/*.svg
  • assets/patewayai.png is excluded by !**/*.png
  • assets/rapidproxy.png is excluded by !**/*.png
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (639)
  • .github/workflows/prism-ci.yml
  • .github/workflows/prism-release.yml
  • .github/workflows/release.yaml
  • AGENTS.md
  • README.md
  • README_CN.md
  • README_JA.md
  • cmd/fetch_antigravity_models/main.go
  • cmd/fetch_codex_models/main.go
  • cmd/fetch_devin_models/main.go
  • cmd/prism-sync/main.go
  • cmd/prism-sync/main_test.go
  • cmd/server/main.go
  • cmd/server/main_test.go
  • config.example.yaml
  • docs/management-devin-oauth.md
  • examples/plugin/README.md
  • examples/plugin/README_CN.md
  • examples/plugin/executor/go/main.go
  • examples/plugin/executor/go/main_test.go
  • examples/plugin/scripts/generate_examples.py
  • fork/Dockerfile
  • fork/FORK.md
  • fork/docs/prism-serving-sync.md
  • fork/upstream.json
  • go.mod
  • internal/api/handlers/management/api_tools.go
  • internal/api/handlers/management/api_tools_test.go
  • internal/api/handlers/management/auth_files.go
  • internal/api/handlers/management/auth_files_cooldown_test.go
  • internal/api/handlers/management/auth_files_crud.go
  • internal/api/handlers/management/auth_files_devin_oauth.go
  • internal/api/handlers/management/auth_files_devin_oauth_test.go
  • internal/api/handlers/management/auth_files_fields.go
  • internal/api/handlers/management/auth_files_lifecycle_test.go
  • internal/api/handlers/management/auth_files_oauth_callback.go
  • internal/api/handlers/management/auth_files_pagination_test.go
  • internal/api/handlers/management/auth_files_patch_fields_test.go
  • internal/api/handlers/management/auth_files_plugin_oauth_test.go
  • internal/api/handlers/management/auth_files_provider_oauth.go
  • internal/api/handlers/management/auth_files_refresh.go
  • internal/api/handlers/management/auth_files_refresh_test.go
  • internal/api/handlers/management/auth_files_relogin_preserve_test.go
  • internal/api/handlers/management/auth_files_status_sync_test.go
  • internal/api/handlers/management/auth_files_upload_test.go
  • internal/api/handlers/management/config_apikey_disable.go
  • internal/api/handlers/management/config_apikey_disable_test.go
  • internal/api/handlers/management/config_auth_index.go
  • internal/api/handlers/management/config_basic.go
  • internal/api/handlers/management/config_claude_key_test.go
  • internal/api/handlers/management/config_disable_cooling_test.go
  • internal/api/handlers/management/config_lists.go
  • internal/api/handlers/management/config_lists_delete_keys_test.go
  • internal/api/handlers/management/config_meta_key_test.go
  • internal/api/handlers/management/config_weight_test.go
  • internal/api/handlers/management/handler.go
  • internal/api/handlers/management/oauth_sessions.go
  • internal/api/handlers/management/oauth_sessions_test.go
  • internal/api/handlers/management/plugin_quota.go
  • internal/api/handlers/management/plugin_quota_test.go
  • internal/api/handlers/management/plugin_store.go
  • internal/api/handlers/management/plugin_store_release.go
  • internal/api/handlers/management/plugin_store_release_test.go
  • internal/api/handlers/management/plugin_store_test.go
  • internal/api/handlers/management/plugins.go
  • internal/api/handlers/management/prism_control.go
  • internal/api/handlers/management/prism_control_test.go
  • internal/api/handlers/management/prism_models.go
  • internal/api/handlers/management/prism_models_test.go
  • internal/api/handlers/management/prism_oauth_commit_test.go
  • internal/api/handlers/management/prism_panel_accounts.go
  • internal/api/handlers/management/prism_panel_accounts_test.go
  • internal/api/handlers/management/prism_panel_config.go
  • internal/api/handlers/management/prism_panel_config_test.go
  • internal/api/handlers/management/prism_panel_operation.go
  • internal/api/handlers/management/prism_panel_operation_test.go
  • internal/api/handlers/management/prism_replica.go
  • internal/api/handlers/management/prism_replica_test.go
  • internal/api/handlers/management/prism_upstream_adaptation_test.go
  • internal/api/handlers/management/quota_status.go
  • internal/api/handlers/management/quota_status_test.go
  • internal/api/middleware/request_logging_test.go
  • internal/api/server.go
  • internal/api/server_devin_oauth_test.go
  • internal/api/server_management.go
  • internal/api/server_models_interceptor_test.go
  • internal/api/server_reload.go
  • internal/api/server_routes.go
  • internal/api/server_test.go
  • internal/auth/claude/filename.go
  • internal/auth/claude/filename_test.go
  • internal/auth/devin/devin_auth.go
  • internal/auth/devin/devin_auth_test.go
  • internal/auth/devin/pkce.go
  • internal/auth/devin/record.go
  • internal/auth/devin/record_test.go
  • internal/auth/devin/user_status.go
  • internal/auth/devin/user_status_test.go
  • internal/auth/meta/meta.go
  • internal/auth/meta/meta_auth_test.go
  • internal/cache/bounded_lru.go
  • internal/client/codex/live/capabilities.go
  • internal/client/codex/live/live.go
  • internal/client/codex/live/sideband.go
  • internal/client/codex/live/websocket.go
  • internal/client/codex/models/models.go
  • internal/client/codex/models/models_test.go
  • internal/client/codex/models/web_search_capability_test.go
  • internal/client/codex/optimize-multi-agent-v2/optimize_multi_agent_v2.go
  • internal/client/codex/optimize-multi-agent-v2/optimize_multi_agent_v2_test.go
  • internal/clienterror/client_error.go
  • internal/clienterror/client_error_test.go
  • internal/cmd/auth_manager.go
  • internal/cmd/devin_login.go
  • internal/cmd/discover.go
  • internal/cmd/discover_test.go
  • internal/cmd/meta_login.go
  • internal/config/claude_code_test.go
  • internal/config/cloak_save_test.go
  • internal/config/clone_test.go
  • internal/config/codex_websocket_header_defaults_test.go
  • internal/config/config.go
  • internal/config/config_defaults.go
  • internal/config/config_load.go
  • internal/config/config_meta_test.go
  • internal/config/config_normalization.go
  • internal/config/config_types.go
  • internal/config/config_yaml.go
  • internal/config/discovery_test.go
  • internal/config/oauth_model_alias_test.go
  • internal/config/oauth_request_scoped_errors_test.go
  • internal/config/parse.go
  • internal/config/plugin_config_save_test.go
  • internal/config/use_max_completion_tokens_test.go
  • internal/config/weight.go
  • internal/discovery/discovery_test.go
  • internal/discovery/id.go
  • internal/discovery/interfaces.go
  • internal/discovery/service.go
  • internal/discovery/spec.go
  • internal/discovery/types.go
  • internal/discovery/zeroconf.go
  • internal/homeplugins/network_scope_test.go
  • internal/homeplugins/sync.go
  • internal/httpwire/ordered_conn.go
  • internal/httpwire/ordered_conn_test.go
  • internal/logging/gin_logger.go
  • internal/logging/gin_logger_test.go
  • internal/logging/requestmeta.go
  • internal/modelconfig/model_hash.go
  • internal/pluginhost/adapters_executors_usage_test.go
  • internal/pluginhost/adapters_test.go
  • internal/pluginhost/adapters_usage_translation.go
  • internal/pluginhost/affinity_callbacks.go
  • internal/pluginhost/affinity_callbacks_test.go
  • internal/pluginhost/auth_callbacks.go
  • internal/pluginhost/auth_callbacks_test.go
  • internal/pluginhost/auth_provider.go
  • internal/pluginhost/auth_provider_test.go
  • internal/pluginhost/host.go
  • internal/pluginhost/host_callbacks.go
  • internal/pluginhost/host_callbacks_test.go
  • internal/pluginhost/http_bridge.go
  • internal/pluginhost/http_bridge_test.go
  • internal/pluginhost/loader_windows.go
  • internal/pluginhost/loader_windows_test.go
  • internal/pluginhost/management.go
  • internal/pluginhost/management_test.go
  • internal/pluginhost/quota_provider.go
  • internal/pluginhost/quota_provider_test.go
  • internal/pluginhost/rpc_client.go
  • internal/pluginhost/rpc_client_error_test.go
  • internal/pluginhost/rpc_schema.go
  • internal/pluginhost/rpc_schema_test.go
  • internal/pluginhost/scheduler.go
  • internal/pluginhost/scheduler_test.go
  • internal/pluginhost/snapshot.go
  • internal/pluginhost/test_helpers_test.go
  • internal/pluginstore/github.go
  • internal/pluginstore/github_rate_limit.go
  • internal/pluginstore/github_rate_limit_test.go
  • internal/pluginstore/request_identity.go
  • internal/pluginstore/request_identity_test.go
  • internal/prismsync/codec.go
  • internal/prismsync/files.go
  • internal/prismsync/files_other.go
  • internal/prismsync/files_unix.go
  • internal/prismsync/prismsync_test.go
  • internal/prismsync/runtime.go
  • internal/prismsync/transfer.go
  • internal/redisqueue/plugin.go
  • internal/redisqueue/plugin_test.go
  • internal/registry/devin_models.go
  • internal/registry/devin_models_test.go
  • internal/registry/devin_models_updater.go
  • internal/registry/model_definitions.go
  • internal/registry/model_definitions_test.go
  • internal/registry/model_registry.go
  • internal/registry/model_registry_safety_test.go
  • internal/registry/model_updater.go
  • internal/registry/models/codex_client_models.json
  • internal/registry/models/devin_models.json
  • internal/registry/models/models.json
  • internal/registry/prism_catalog.go
  • internal/registry/web_search_capability_test.go
  • internal/runtime/executor/aistudio_executor.go
  • internal/runtime/executor/aistudio_executor_test.go
  • internal/runtime/executor/antigravity_executor.go
  • internal/runtime/executor/antigravity_executor_buildrequest_test.go
  • internal/runtime/executor/antigravity_executor_compaction_test.go
  • internal/runtime/executor/antigravity_executor_execute.go
  • internal/runtime/executor/antigravity_executor_keepalive_test.go
  • internal/runtime/executor/antigravity_executor_signature_test.go
  • internal/runtime/executor/antigravity_executor_stream.go
  • internal/runtime/executor/antigravity_executor_tokens.go
  • internal/runtime/executor/antigravity_executor_transport_test.go
  • internal/runtime/executor/antigravity_preupstream_rewrite_differential_test.go
  • internal/runtime/executor/antigravity_reasoning_replay.go
  • internal/runtime/executor/antigravity_reasoning_replay_test.go
  • internal/runtime/executor/antigravity_schema_sanitize_test.go
  • internal/runtime/executor/claude_cloaked_cache_repro_test.go
  • internal/runtime/executor/claude_executor.go
  • internal/runtime/executor/claude_executor_beta_passthrough_test.go
  • internal/runtime/executor/claude_executor_cloaking.go
  • internal/runtime/executor/claude_executor_execute.go
  • internal/runtime/executor/claude_executor_fable_ratelimit_test.go
  • internal/runtime/executor/claude_executor_native_helper_test.go
  • internal/runtime/executor/claude_executor_request.go
  • internal/runtime/executor/claude_executor_request_remap_test.go
  • internal/runtime/executor/claude_executor_stream.go
  • internal/runtime/executor/claude_executor_stream_terminal_test.go
  • internal/runtime/executor/claude_executor_subagent_ttl_regression_test.go
  • internal/runtime/executor/claude_executor_test.go
  • internal/runtime/executor/claude_executor_tokens.go
  • internal/runtime/executor/claude_mid_system_model_test.go
  • internal/runtime/executor/claude_thinking_replay_test.go
  • internal/runtime/executor/codex_executor.go
  • internal/runtime/executor/codex_executor_auth.go
  • internal/runtime/executor/codex_executor_execute.go
  • internal/runtime/executor/codex_executor_request.go
  • internal/runtime/executor/codex_executor_retry_test.go
  • internal/runtime/executor/codex_executor_signature_test.go
  • internal/runtime/executor/codex_executor_spawn_agent_test.go
  • internal/runtime/executor/codex_executor_stream.go
  • internal/runtime/executor/codex_executor_stream_output_test.go
  • internal/runtime/executor/codex_executor_terminal.go
  • internal/runtime/executor/codex_executor_tokens.go
  • internal/runtime/executor/codex_executor_tool_schema_test.go
  • internal/runtime/executor/codex_native_fidelity_test.go
  • internal/runtime/executor/codex_openai_images.go
  • internal/runtime/executor/codex_openai_images_test.go
  • internal/runtime/executor/codex_response_model_test.go
  • internal/runtime/executor/codex_stream_bootstrap_buffering_test.go
  • internal/runtime/executor/codex_websockets_connection.go
  • internal/runtime/executor/codex_websockets_errors.go
  • internal/runtime/executor/codex_websockets_execute.go
  • internal/runtime/executor/codex_websockets_executor_test.go
  • internal/runtime/executor/codex_websockets_request.go
  • internal/runtime/executor/codex_websockets_session.go
  • internal/runtime/executor/codex_websockets_stream.go
  • internal/runtime/executor/custom_magic_headers_test.go
  • internal/runtime/executor/devin_executor.go
  • internal/runtime/executor/devin_executor_test.go
  • internal/runtime/executor/gemini_executor.go
  • internal/runtime/executor/gemini_executor_test.go
  • internal/runtime/executor/gemini_vertex_executor.go
  • internal/runtime/executor/helps/antigravity_compaction.go
  • internal/runtime/executor/helps/antigravity_compaction_test.go
  • internal/runtime/executor/helps/chat_ttft_helpers.go
  • internal/runtime/executor/helps/claude_client_detection.go
  • internal/runtime/executor/helps/claude_client_detection_test.go
  • internal/runtime/executor/helps/claude_credential_identity.go
  • internal/runtime/executor/helps/claude_diagnostics.go
  • internal/runtime/executor/helps/claude_diagnostics_test.go
  • internal/runtime/executor/helps/claude_ratelimit.go
  • internal/runtime/executor/helps/claude_ratelimit_test.go
  • internal/runtime/executor/helps/claude_ttft_helpers.go
  • internal/runtime/executor/helps/cloak_obfuscate.go
  • internal/runtime/executor/helps/codex_multi_agent_v2.go
  • internal/runtime/executor/helps/codex_multi_agent_v2_test.go
  • internal/runtime/executor/helps/codex_native.go
  • internal/runtime/executor/helps/codex_terminal_incomplete.go
  • internal/runtime/executor/helps/codex_terminal_incomplete_test.go
  • internal/runtime/executor/helps/codex_tool_schema.go
  • internal/runtime/executor/helps/codex_tool_schema_test.go
  • internal/runtime/executor/helps/cpa_session.go
  • internal/runtime/executor/helps/devin_models.go
  • internal/runtime/executor/helps/devin_models_test.go
  • internal/runtime/executor/helps/devin_wire.go
  • internal/runtime/executor/helps/devin_wire_test.go
  • internal/runtime/executor/helps/gemini_content_turns.go
  • internal/runtime/executor/helps/gemini_content_turns_test.go
  • internal/runtime/executor/helps/gemini_ttft_helpers.go
  • internal/runtime/executor/helps/kimi_responses.go
  • internal/runtime/executor/helps/kimi_responses_test.go
  • internal/runtime/executor/helps/openai_compat_max_tokens.go
  • internal/runtime/executor/helps/openai_compat_max_tokens_test.go
  • internal/runtime/executor/helps/openai_compat_tool_results.go
  • internal/runtime/executor/helps/openai_compat_tool_results_test.go
  • internal/runtime/executor/helps/payload_mutations_test.go
  • internal/runtime/executor/helps/prism_quota.go
  • internal/runtime/executor/helps/prism_quota_test.go
  • internal/runtime/executor/helps/proxy_helpers.go
  • internal/runtime/executor/helps/proxy_helpers_test.go
  • internal/runtime/executor/helps/response_model.go
  • internal/runtime/executor/helps/response_model_multiprovider_test.go
  • internal/runtime/executor/helps/response_model_test.go
  • internal/runtime/executor/helps/responses_ttft_helpers.go
  • internal/runtime/executor/helps/stream_response_model_observer.go
  • internal/runtime/executor/helps/stream_response_model_observer_test.go
  • internal/runtime/executor/helps/transport_cache.go
  • internal/runtime/executor/helps/transport_cache_test.go
  • internal/runtime/executor/helps/usage_helpers.go
  • internal/runtime/executor/helps/usage_helpers_test.go
  • internal/runtime/executor/kimi_executor.go
  • internal/runtime/executor/kimi_executor_test.go
  • internal/runtime/executor/kimi_thinking_replay_test.go
  • internal/runtime/executor/meta_executor.go
  • internal/runtime/executor/meta_executor_execute.go
  • internal/runtime/executor/meta_executor_stream.go
  • internal/runtime/executor/meta_executor_test.go
  • internal/runtime/executor/openai_compat_executor.go
  • internal/runtime/executor/openai_compat_executor_images_test.go
  • internal/runtime/executor/openai_compat_executor_max_tokens_test.go
  • internal/runtime/executor/openai_compat_executor_tool_results_test.go
  • internal/runtime/executor/openai_responses_signature.go
  • internal/runtime/executor/openai_responses_signature_test.go
  • internal/runtime/executor/prism_quota_executor.go
  • internal/runtime/executor/prism_quota_executor_test.go
  • internal/runtime/executor/response_model_multiprovider_test.go
  • internal/runtime/executor/xai_executor.go
  • internal/runtime/executor/xai_executor_execute.go
  • internal/runtime/executor/xai_executor_media.go
  • internal/runtime/executor/xai_executor_request.go
  • internal/runtime/executor/xai_executor_response.go
  • internal/runtime/executor/xai_executor_stream.go
  • internal/runtime/executor/xai_executor_test.go
  • internal/runtime/executor/xai_websockets_executor.go
  • internal/runtime/executor/xai_websockets_executor_test.go
  • internal/signature/claude_test.go
  • internal/signature/claude_validation.go
  • internal/signature/gemini_sanitize.go
  • internal/signature/gemini_sanitize_test.go
  • internal/signature/gemini_validation.go
  • internal/signature/gemini_validation_test.go
  • internal/signature/provider_compatibility.go
  • internal/store/disabled_login_save_test.go
  • internal/store/gitstore.go
  • internal/store/gitstore_test.go
  • internal/store/objectstore.go
  • internal/store/postgresstore.go
  • internal/thinking/apply.go
  • internal/thinking/apply_codex_usage_test.go
  • internal/thinking/kimi_max_clamp_repro_test.go
  • internal/translator/antigravity/claude/antigravity_claude_request.go
  • internal/translator/antigravity/claude/antigravity_claude_request_test.go
  • internal/translator/antigravity/claude/antigravity_claude_response.go
  • internal/translator/antigravity/claude/antigravity_claude_response_test.go
  • internal/translator/antigravity/gemini/antigravity_gemini_request.go
  • internal/translator/antigravity/gemini/antigravity_gemini_request_test.go
  • internal/translator/antigravity/interactions/interactions_antigravity_request.go
  • internal/translator/antigravity/interactions/interactions_antigravity_test.go
  • internal/translator/antigravity/openai/chat-completions/antigravity_openai_request.go
  • internal/translator/antigravity/openai/chat-completions/antigravity_openai_request_test.go
  • internal/translator/antigravity/openai/responses/antigravity_openai-responses_request.go
  • internal/translator/antigravity/openai/responses/antigravity_openai-responses_request_test.go
  • internal/translator/antigravity/openai/responses/antigravity_openai-responses_response_test.go
  • internal/translator/antigravity/openai/responses/init.go
  • internal/translator/claude/interactions/interactions_claude_request.go
  • internal/translator/claude/interactions/interactions_claude_test.go
  • internal/translator/claude/openai/chat-completions/claude_openai_request.go
  • internal/translator/claude/openai/chat-completions/claude_openai_request_test.go
  • internal/translator/claude/openai/chat-completions/claude_openai_response.go
  • internal/translator/claude/openai/chat-completions/claude_openai_response_test.go
  • internal/translator/claude/openai/responses/claude_openai-responses_request.go
  • internal/translator/claude/openai/responses/claude_openai-responses_request_test.go
  • internal/translator/claude/openai/responses/claude_openai-responses_response.go
  • internal/translator/codex/claude/codex_claude_compat_test.go
  • internal/translator/codex/claude/codex_claude_request.go
  • internal/translator/codex/claude/codex_claude_request_test.go
  • internal/translator/codex/claude/codex_claude_response.go
  • internal/translator/codex/claude/codex_claude_response_test.go
  • internal/translator/codex/openai/chat-completions/codex_openai_request.go
  • internal/translator/codex/openai/chat-completions/codex_openai_request_test.go
  • internal/translator/codex/openai/chat-completions/codex_openai_response.go
  • internal/translator/codex/openai/chat-completions/codex_openai_response_test.go
  • internal/translator/codex/openai/responses/codex_openai-responses_request.go
  • internal/translator/codex/openai/responses/codex_openai-responses_request_test.go
  • internal/translator/common/bytes.go
  • internal/translator/common/bytes_test.go
  • internal/translator/common/claude_messages.go
  • internal/translator/common/claude_messages_test.go
  • internal/translator/common/claude_system.go
  • internal/translator/common/claude_system_test.go
  • internal/translator/common/devin_tools.go
  • internal/translator/common/devin_tools_test.go
  • internal/translator/common/gemini.go
  • internal/translator/common/gemini_test.go
  • internal/translator/common/openai_tools.go
  • internal/translator/common/openai_tools_test.go
  • internal/translator/common/responses.go
  • internal/translator/common/responses_test.go
  • internal/translator/gemini/claude/gemini_claude_request.go
  • internal/translator/gemini/claude/gemini_claude_request_test.go
  • internal/translator/gemini/openai/chat-completions/gemini_openai_request.go
  • internal/translator/gemini/openai/chat-completions/gemini_openai_request_test.go
  • internal/translator/gemini/openai/chat-completions/gemini_openai_response.go
  • internal/translator/gemini/openai/chat-completions/gemini_openai_response_test.go
  • internal/translator/gemini/openai/responses/gemini_openai-responses_request.go
  • internal/translator/gemini/openai/responses/gemini_openai-responses_request_test.go
  • internal/translator/gemini/openai/responses/gemini_openai-responses_response.go
  • internal/translator/gemini/openai/responses/gemini_openai-responses_response_test.go
  • internal/translator/gemini/openai/responses/gemini_openai-responses_web_search.go
  • internal/translator/gemini/openai/responses/gemini_openai-responses_web_search_test.go
  • internal/translator/gemini/openai/responses/trailing_signature.go
  • internal/translator/gemini/openai/responses/trailing_signature_test.go
  • internal/translator/interactions/claude/interactions_claude_request.go
  • internal/translator/interactions/claude/interactions_claude_response.go
  • internal/translator/interactions/claude/interactions_claude_test.go
  • internal/translator/openai/claude/openai_claude_request.go
  • internal/translator/openai/claude/openai_claude_request_test.go
  • internal/translator/openai/claude/openai_claude_response.go
  • internal/translator/openai/claude/openai_claude_response_test.go
  • internal/translator/openai/gemini/openai_gemini_response.go
  • internal/translator/openai/gemini/openai_gemini_response_test.go
  • internal/translator/openai/interactions/chat-completions/interactions_openai_request_test.go
  • internal/translator/openai/interactions/chat-completions/interactions_openai_response.go
  • internal/translator/openai/interactions/chat-completions/interactions_openai_response_test.go
  • internal/translator/openai/interactions/chat-completions/openai_interactions_request.go
  • internal/translator/openai/interactions/chat-completions/openai_interactions_response.go
  • internal/translator/openai/interactions/responses/interactions_openai_responses_request.go
  • internal/translator/openai/interactions/responses/interactions_openai_responses_request_test.go
  • internal/translator/openai/interactions/responses/interactions_openai_responses_response.go
  • internal/translator/openai/interactions/responses/interactions_openai_responses_response_test.go
  • internal/translator/openai/openai/responses/custom_tool_namespace_recovery_test.go
  • internal/translator/openai/openai/responses/openai_openai-responses_request.go
  • internal/translator/openai/openai/responses/openai_openai-responses_request_test.go
  • internal/translator/openai/openai/responses/openai_openai-responses_response.go
  • internal/translator/openai/openai/responses/openai_openai-responses_response_test.go
  • internal/translator/openai/openai/responses/openai_openai-responses_tools.go
  • internal/tui/auth_tab.go
  • internal/tui/client.go
  • internal/tui/i18n.go
  • internal/tui/oauth_tab.go
  • internal/util/claude_schema.go
  • internal/util/claude_schema_test.go
  • internal/util/codex.go
  • internal/util/gemini_schema.go
  • internal/util/gemini_schema_test.go
  • internal/util/header_helpers.go
  • internal/util/header_helpers_test.go
  • internal/util/provider.go
  • internal/util/responses_tools.go
  • internal/watcher/clients.go
  • internal/watcher/diff/config_diff.go
  • internal/watcher/diff/config_diff_test.go
  • internal/watcher/diff/model_hash_test.go
  • internal/watcher/dispatcher.go
  • internal/watcher/dispatcher_snapshot_test.go
  • internal/watcher/events.go
  • internal/watcher/synthesizer/config.go
  • internal/watcher/synthesizer/config_test.go
  • internal/watcher/synthesizer/file.go
  • internal/watcher/synthesizer/file_test.go
  • internal/watcher/watcher.go
  • internal/watcher/watcher_test.go
  • internal/wsrelay/session.go
  • internal/wsrelay/session_test.go
  • sdk/api/handlers/claude/code_handlers.go
  • sdk/api/handlers/gemini/gemini_handlers.go
  • sdk/api/handlers/handlers.go
  • sdk/api/handlers/handlers_context.go
  • sdk/api/handlers/handlers_error_response_test.go
  • sdk/api/handlers/handlers_errors.go
  • sdk/api/handlers/handlers_execution.go
  • sdk/api/handlers/handlers_interceptors.go
  • sdk/api/handlers/handlers_interceptors_test.go
  • sdk/api/handlers/handlers_metadata_test.go
  • sdk/api/handlers/handlers_model_router_test.go
  • sdk/api/handlers/handlers_request_details_test.go
  • sdk/api/handlers/handlers_routing.go
  • sdk/api/handlers/handlers_stream.go
  • sdk/api/handlers/model_execution.go
  • sdk/api/handlers/model_execution_test.go
  • sdk/api/handlers/openai/codex_client_models_test.go
  • sdk/api/handlers/openai/openai_handlers.go
  • sdk/api/handlers/openai/openai_images_handlers.go
  • sdk/api/handlers/openai/openai_images_handlers_test.go
  • sdk/api/handlers/openai/openai_responses_handlers.go
  • sdk/api/handlers/openai/openai_responses_handlers_stream_error_test.go
  • sdk/api/handlers/openai/openai_responses_handlers_stream_test.go
  • sdk/api/handlers/openai/openai_responses_websocket.go
  • sdk/api/handlers/openai/openai_responses_websocket_forward.go
  • sdk/api/handlers/openai/openai_responses_websocket_prewarm.go
  • sdk/api/handlers/openai/openai_responses_websocket_requests.go
  • sdk/api/handlers/openai/openai_responses_websocket_test.go
  • sdk/api/handlers/openai/openai_responses_websocket_toolcall_repair.go
  • sdk/api/handlers/openai/permanent_oauth_classification_test.go
  • sdk/api/handlers/openai_responses_stream_error.go
  • sdk/api/handlers/openai_responses_stream_error_test.go
  • sdk/api/handlers/retry_deadline_test.go
  • sdk/api/handlers/stream_forwarder_test.go
  • sdk/auth/antigravity.go
  • sdk/auth/antigravity_headless_test.go
  • sdk/auth/claude.go
  • sdk/auth/devin.go
  • sdk/auth/devin_test.go
  • sdk/auth/filestore.go
  • sdk/auth/filestore_atomic_test.go
  • sdk/auth/filestore_disabled_test.go
  • sdk/auth/filestore_proxy_test.go
  • sdk/auth/manager.go
  • sdk/auth/manager_test.go
  • sdk/auth/meta.go
  • sdk/auth/meta_test.go
  • sdk/auth/refresh_registry.go
  • sdk/auth/refresh_registry_test.go
  • sdk/cliproxy/antigravity_models.go
  • sdk/cliproxy/antigravity_models_dedup_test.go
  • sdk/cliproxy/antigravity_models_timeout_test.go
  • sdk/cliproxy/auth/api_key_model_alias_test.go
  • sdk/cliproxy/auth/api_key_model_capabilities.go
  • sdk/cliproxy/auth/auto_refresh_loop.go
  • sdk/cliproxy/auth/auto_refresh_loop_test.go
  • sdk/cliproxy/auth/codex_model_not_found_cooldown_test.go
  • sdk/cliproxy/auth/conductor.go
  • sdk/cliproxy/auth/conductor_alias_cooldown_test.go
  • sdk/cliproxy/auth/conductor_cloudflare_520_test.go
  • sdk/cliproxy/auth/conductor_cooldown.go
  • sdk/cliproxy/auth/conductor_cooldown_monotonic_test.go
  • sdk/cliproxy/auth/conductor_execution.go
  • sdk/cliproxy/auth/conductor_execution_quota_test.go
  • sdk/cliproxy/auth/conductor_home.go
  • sdk/cliproxy/auth/conductor_home_execution.go
  • sdk/cliproxy/auth/conductor_lifecycle.go
  • sdk/cliproxy/auth/conductor_models.go
  • sdk/cliproxy/auth/conductor_oauth_request_scoped_errors_test.go
  • sdk/cliproxy/auth/conductor_quota_clock_test.go
  • sdk/cliproxy/auth/conductor_refresh.go
  • sdk/cliproxy/auth/conductor_refresh_disabled_test.go
  • sdk/cliproxy/auth/conductor_request_scoped_errors.go
  • sdk/cliproxy/auth/conductor_result_policy_test.go
  • sdk/cliproxy/auth/conductor_scheduler_refresh_test.go
  • sdk/cliproxy/auth/conductor_scheduler_targeted_update_test.go
  • sdk/cliproxy/auth/conductor_selection.go
  • sdk/cliproxy/auth/conductor_session_affinity_alias_test.go
  • sdk/cliproxy/auth/conductor_stream.go
  • sdk/cliproxy/auth/conductor_stream_overload_failover_test.go
  • sdk/cliproxy/auth/conductor_stream_quota_test.go
  • sdk/cliproxy/auth/conductor_transport_retry_test.go
  • sdk/cliproxy/auth/cooldown_backoff_test.go
  • sdk/cliproxy/auth/cooldown_state_test.go
  • sdk/cliproxy/auth/cooldown_view.go
  • sdk/cliproxy/auth/cooldown_view_test.go
  • sdk/cliproxy/auth/custom_headers_test.go
  • sdk/cliproxy/auth/errors.go
  • sdk/cliproxy/auth/force_refresh_test.go
  • sdk/cliproxy/auth/home_concurrency.go
  • sdk/cliproxy/auth/home_result.go
  • sdk/cliproxy/auth/home_selection.go
  • sdk/cliproxy/auth/home_session_alias.go
  • sdk/cliproxy/auth/home_web_search_capability_test.go
  • sdk/cliproxy/auth/meta_refresh_test.go
  • sdk/cliproxy/auth/metadata_merge.go
  • sdk/cliproxy/auth/metadata_merge_test.go
  • sdk/cliproxy/auth/oauth_model_alias.go
  • sdk/cliproxy/auth/oauth_model_alias_test.go
  • sdk/cliproxy/auth/persist_policy.go
  • sdk/cliproxy/auth/prism_policy.go
  • sdk/cliproxy/auth/prism_policy_test.go
  • sdk/cliproxy/auth/prism_policy_update.go
  • sdk/cliproxy/auth/prism_policy_update_test.go
  • sdk/cliproxy/auth/prism_recovery.go
  • sdk/cliproxy/auth/prism_recovery_test.go
  • sdk/cliproxy/auth/prism_scheduler_lease_test.go
  • sdk/cliproxy/auth/quota_observations.go
  • sdk/cliproxy/auth/quota_observations_test.go
  • sdk/cliproxy/auth/quota_signals.go
  • sdk/cliproxy/auth/quota_signals_test.go
  • sdk/cliproxy/auth/relogin_test.go
  • sdk/cliproxy/auth/retry_deadline_test.go
  • sdk/cliproxy/auth/scheduler.go
  • sdk/cliproxy/auth/scheduler_test.go
  • sdk/cliproxy/auth/selector.go
  • sdk/cliproxy/auth/selector_test.go
  • sdk/cliproxy/auth/session_affinity_lookup_test.go
  • sdk/cliproxy/auth/session_resolver.go
  • sdk/cliproxy/auth/store.go
  • sdk/cliproxy/auth/types.go
  • sdk/cliproxy/auth/types_test.go
  • sdk/cliproxy/builder.go
  • sdk/cliproxy/config_model_display_name_test.go
  • sdk/cliproxy/discovery_advertiser.go
  • sdk/cliproxy/discovery_advertiser_test.go
  • sdk/cliproxy/model_registry.go
  • sdk/cliproxy/prism_model_catalog.go
  • sdk/cliproxy/prism_model_catalog_test.go
  • sdk/cliproxy/prism_upstream_adaptation_test.go
  • sdk/cliproxy/providers.go
  • sdk/cliproxy/service.go
  • sdk/cliproxy/service_auth.go
  • sdk/cliproxy/service_auth_sync_test.go
  • sdk/cliproxy/service_codex_models_test.go
  • sdk/cliproxy/service_config.go
  • sdk/cliproxy/service_excluded_models_test.go
  • sdk/cliproxy/service_executors.go
  • sdk/cliproxy/service_lifecycle.go
  • sdk/cliproxy/service_models.go
  • sdk/cliproxy/service_oauth_model_alias_test.go
  • sdk/cliproxy/service_plugins.go
  • sdk/cliproxy/service_result_policy_test.go
  • sdk/cliproxy/session/identity.go
  • sdk/cliproxy/session/identity_test.go
  • sdk/cliproxy/session/info.go
  • sdk/cliproxy/session/info_test.go
  • sdk/cliproxy/session/lcp.go
  • sdk/cliproxy/session/lcp_lookup_test.go
  • sdk/cliproxy/session/tree_compat.go
  • sdk/cliproxy/types.go
  • sdk/cliproxy/usage/manager.go
  • sdk/cliproxy/usage/manager_test.go
  • sdk/cliproxy/watcher.go
  • sdk/config/config.go
  • sdk/pluginabi/types.go
  • sdk/pluginabi/types_test.go
  • sdk/pluginapi/types.go
  • sdk/pluginapi/types_test.go
  • sdk/pluginhost/host.go
  • sdk/pluginhost/host_test.go
  • sdk/pluginstore/network_scope_test.go
  • sdk/pluginstore/pluginstore.go
  • sdk/translator/pipeline.go
  • sdk/translator/registry.go
  • sdk/translator/registry_test.go
  • sdk/translator/types.go
  • test/codex_incomplete_stream_error_type_test.go
  • test/codex_quota_failover_test.go
  • test/summary_intent_translation_test.go
  • test/thinking_conversion_test.go

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Warning

Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

luispater and others added 22 commits September 9, 2026 10:48
- Emit an OpenAI-compatible trailing usage chunk with an empty choices array on `message_stop`.
- Include `cache_write_tokens` in prompt token details for OpenAI response translations.
- Parse usage from `message.usage` and buffer Claude stream usage across chunks to merge input and output token counts.
- Ensure observed streaming usage details are published on completion or stream failure.

Closes: router-for-me#5617
- Add `model-level-cooling` configuration option to Codex settings.
- Scope `usage_limit_reached` quota cooldowns to the requested model instead of the entire credential when enabled.
- Propagate model-level cooling checks across HTTP, SSE, and WebSocket execution paths.

Closes: router-for-me#5619
…rom tool schemas

- Add HasUnsupportedUnicodePropertyEscape in internal/util to detect \p{...} / \P{...} escapes that fail Python re compilation.
- Strip incompatible pattern attributes during tool parameter normalization in codex/claude and openai/claude translators.
- Provide schema-aware fallback stripping in codex executor helps to protect downstream Codex requests without mutating non-schema user data.
- Export unified schema keyword lists in internal/util to eliminate duplication.
- Add comprehensive unit tests covering Artifact fixtures, lookaheads, and user data preservation.

Closes: router-for-me#5644
…fast-path bypass

- Check for \u in fast-path check to prevent JSON Unicode escapes from bypassing inspection.
- Inspect regex keys under patternProperties and drop keys with unsupported Unicode property escapes.
- Add tests covering Unicode escape representations (\u005c, \u0070, \u0050) and patternProperties keys.
…hema-pattern

fix(translator): strip unsupported unicode property escape patterns from tool schemas
- Add `RefreshAuthFiles` handler to trigger active refresh for single or all auth files.
- Support specifying refresh targets via query parameters or JSON request body.
- Invoke auth manager force refresh operations and return refreshed credential states.

Closes: router-for-me#5628
- Initialize `util.SessionIDResolver` to resolve session IDs from request contexts, metadata, and headers.
- Ensure canonical session metadata is injected into execution options across execution flows.
- Propagate session context in executors to support `$CPA-SESSION-ID` expansion in custom headers.
- Sync cleared or updated session identities back to execution contexts during conductor execution.

Closes: router-for-me#5690
…errors

- Introduce `IsTerminalAuthError` and `NewTerminalAuthError` to identify permanent upstream authentication failures.
- Return terminal auth errors from candidate selection and scheduling when all available credentials fail with unauthorized errors.
- Support `BuildErrorResponseBodyWithError` to format terminal upstream auth errors as non-retryable `upstream_authentication_required` responses.
- Propagate terminal error classifications and the `retryable` field across HTTP and WebSocket response handlers.

Closes: router-for-me#5645
- Register builtin model definitions for `gpt-image-2.5`, `gpt-image-2.5-flare`, and `gpt-image-2.5-sunburst`.
- Update OpenAI image handlers and request routing to recognize GPT Image 2.5 models.
- Support direct image generation and edit execution for GPT Image 2.5 variants in the Codex executor.
- Apply client visibility overrides to hide new builtin image models where appropriate.
- Retain `cache_control` blocks with 1h TTL and `extended-cache-ttl` beta header when explicitly requested by subagents.
- Detect 1h TTL configuration from request payloads and incoming Anthropic-Beta headers.
- Ensure `extended-cache-ttl` beta header is preserved or injected when 1h TTL is present.

Closes: router-for-me#5629
…esponses websocket

- Track pending synthetic prewarm response IDs to merge warmup inputs into subsequent delta followups.
- Normalize transcript replacements when followups do not reference the prewarm parent response ID.
- Validate that the `input` field is an array for `response.create` requests.
- Allow `function_call_output` items without a `call_id` when a non-empty tool name is present.

Closes: router-for-me#5631
…sponses stream

- Format streaming error payloads with nested error objects matching official OpenAI Responses SSE specifications.
- Extract and propagate sequence numbers from upstream terminal events and framer states.
- Use `json.Number` to prevent precision loss for large integers and token metrics.
- Sanitize sensitive keys recursively across nested error objects without dropping custom fields.
- Broaden pattern matching for Codex model capacity errors.
- Classify model capacity rejections as overload bootstrap failures to enable failover.

Closes: router-for-me#5634
- Map upstream `model_not_found` errors to HTTP 404 before evaluating generic invalid request types in Codex terminal error handling.
- Prevent treating structured model not found responses as client request faults to preserve credential rotation.
- Recognize model access denial errors to apply model-level cooldown and failover.
- Respect `disable_cooling` configuration during model-level cooldown processing.

Closes: router-for-me#5635
…mini response

- Check that `finish_reason` is a non-empty string before mapping to Gemini `finishReason`.
- Prevent chunks or messages with `null` or empty `finish_reason` from emitting unexpected completion statuses.

Closes: router-for-me#5651
- Track trailing carriage returns across chunk boundaries in `sseJSONValidationState`.
- Strip leading newline in subsequent chunks to prevent duplicate newline insertion from split CRLF sequences.
- Reset trailing carriage return state upon stream completion.

Closes: router-for-me#5657
- Remove RunAPI sponsor entries from English, Chinese, and Japanese README files.
- Process `reasoning_content` deltas before message `content` in streaming chat completion translation.
- Ensure reasoning output items receive incremental text before message creation closes reasoning.

Closes: router-for-me#5659
…e stream

- Only transition and close the previous content block when text parts are non-empty.
- Prevent prematurely emitting `content_block_stop` on active blocks like thinking blocks when encountering empty text parts.

Closes: router-for-me#5674
…am failures

- Exclude HTTP 5xx status codes from Cloudflare challenge classification to avoid treating origin errors as challenges.
- Tighten Cloudflare challenge detection pattern to require challenge indicators instead of generic HTML tags.
- Include HTTP 520-526 status codes in transient error cooldown handling across auth and model states.
- Support upstream `RetryAfter` hints when calculating recoverable failure cooldown durations.

Closes: router-for-me#5681
… replay failures

- Synthesize function response parts for interrupted or missing OpenAI Responses tool calls to maintain strict Gemini call-response pairing.
- Preserve function response ordering matching pending call IDs across parallel and partial tool execution turns.
- Degrade gracefully to the original request payload when Antigravity reasoning replay breaks Gemini function call pairing.

Closes: router-for-me#5682
LTbinglingfeng and others added 26 commits September 18, 2026 12:35
…spect-ratio-9-20

feat(xai): allow grok imagine aspect_ratio 9:20 and 20:9
…e models

- Devin: extract authentic upstream model name from parsed Usage.ModelName
  instead of synthesized interactions JSON or binary Connect frames. Keep
  response model empty when upstream does not report one.
- Gemini: support interaction.model and event_type terminal semantics
  in response model extractors for Gemini Interactions streaming.
- Add unit tests for Devin and Gemini Interactions response model observability.
… and openai-compat streams

- observe response model from terminal sourceEvent in Meta non-stream multi-event SSE responses
- record expected upstream model in UsageReporter to prevent false substitution warnings on Kimi canonical mappings
- use bounded stream observer to extract response models across image stream chunk boundaries
- add regression tests for Meta SSE non-stream, Kimi model mappings, and chunked image streams
…observer memory

- Set expected upstream model for Devin in both streaming and non-streaming paths to avoid false positive substitution warnings on intentional mappings
- Account for line overhead and enforce max lines per stream event in StreamResponseModelObserver, dropping overflowed events until the event boundary
- Add unit tests for Devin intentional mappings and stream observer bounded memory behavior
…esponses

- Resolve model `is_compat` status via model info, config index, or model entries in Codex executor
- Skip wiping `reasoning.content` and stripping reasoning IDs during Responses sanitization when `is_compat` is enabled
- Pass resolved compat flag across standard, streaming, compact, and WebSocket Codex request flows

Closes: router-for-me#5930
- Consolidate stream error code and error type derivations into paired error classes
- Map `StatusRequestTimeout` to `server_error` instead of `invalid_request_error` so interrupted streams remain retryable by clients

Closes: router-for-me#5931
…l call IDs

- Scope tool response collection to the corresponding assistant turn instead of relying on global ID maps
- Prevent function names and tool results from being overwritten in multi-turn conversations with repeated tool call IDs
- Ensure proper function call and response pairing for Gemini and Antigravity translators

Closes: router-for-me#5933
- Only detect `server_tool_use` for advisor tool invocations in Claude conversation history
- Prevent client-side tools named `advisor` using standard `tool_use` from improperly triggering advisor cloaking restrictions

Closes: router-for-me#5934
- Add tests for Claude cloak YAML persistence, comment preservation, and pruning of false/empty fields
- Cover partial PATCH and PUT updates, switch toggling, and credential identity isolation for Claude keys

Closes: router-for-me#5935
…ility models

- Add `use-max-completion-tokens` setting to OpenAI compatibility model configuration
- Provide token normalization between `max_tokens` and `max_completion_tokens` based on model preference

Closes: router-for-me#5939
- Track declared passthrough MCP tools in `claudeMCPAliasResolver`
- Recover hybrid tool names when the model prepends a virtual server prefix or replaces the caller's server with the virtual server
- Ensure client-tool alias matches take precedence over passthrough recovery and reject ambiguous passthrough tool matches

Closes: router-for-me#5949
… assistant response

- Buffer text deltas arriving after tool calls in streaming execution and flush them after closing active tool slots
- Prioritize tool call deltas over content text deltas during Connect frame processing
- Separate pre-tool and post-tool text parts in non-streaming responses to preserve step ordering
- Correct thought step index resolution when closing thoughts during content chunk emission

Closes: router-for-me#5951
…keywords

- Normalize boolean `true` subschemas across root, properties, items, definitions, and dependencies into empty object schemas `{}`
- Include `dependencies` in schema definition traversal and normalization
- Strip unsupported schema keywords including `additionalItems`, `unevaluatedProperties`, `unevaluatedItems`, and `contentSchema`

Closes: router-for-me#3551
Publish known expiry and refresh backoff with the existing lifecycle metadata. Expose only the last error HTTP status so clients can distinguish sign-in failures without receiving credential material or raw errors.

Upstream: candidate
Expose normalized Claude and Codex quota windows through the authenticated management API. Persist sign-in quarantine when a refresh credential is rejected.

Upstream: candidate
Stage credential files privately before publication and report post-publication durability uncertainty explicitly.

Upstream: candidate
Add transactional account and settings control, quota-aware routing and recovery, model availability, protected panel adapters, and signed serving-only snapshots. Preserve upstream opt-in compatibility and package the standalone sync tool.

Upstream: no
Fork-Feature: prism
Upstream: no
Fork-Seam-Debt: yes
Fork-Feature: base
Upstream: no
Fork-Seam-Debt: yes
@q1 q1 changed the title chore: adapt upstream 09a29bd345bc chore: adapt upstream c93978c4ea2e Sep 19, 2026
@q1
q1 force-pushed the sync/codex-upstream branch from 9e84b4c to 5bec34f Compare September 19, 2026 13:15
@github-actions

Copy link
Copy Markdown

This repository does not allow modifying AGENTS.md in pull requests.

Detected changes:

  • AGENTS.md

Please revert these changes and open a new PR without touching AGENTS.md.

@github-actions github-actions Bot closed this Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.