Conversation
…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
|
Important Review skippedToo 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 configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: ⛔ Files ignored due to path filters (7)
📒 Files selected for processing (639)
You can disable this status message by setting the 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. Comment |
- 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
…spect-ratio-9-20 feat(xai): allow grok imagine aspect_ratio 9:20 and 20:9
…e-model-observability
…ings to all providers
…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
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
Fork-Feature: prism Upstream: no
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
9e84b4c to
5bec34f
Compare
|
This repository does not allow modifying Detected changes:
Please revert these changes and open a new PR without touching |
Prepared local semantic adaptations after reviewing operating rules, range-diff, and overlapping seams.
Fork
0e043afac31d41d68433d6f4a3af72fe1264df52→ upstreamc93978c4ea2e908255a2a06c37599fda3651554a. Candidate5bec34f4bff59ba6027a2d4d35b65f97f92b2180.Semantic adaptation:
Compatibility:
Additional checks reported by Codex:
Unresolved gaps:
Release implications:
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-syncgo test -race -count=1 ./sdk/cliproxy/auth ./internal/api/handlers/management ./sdk/auth ./sdk/cliproxy ./internal/prismsyncgo build -o {build}/cli-proxy-api ./cmd/servergo build -o {build}/prism-sync ./cmd/prism-syncNative 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.