- Implement `splitDevinUID` for consistent UID splitting and effort extraction.
- Update model aggregation to handle thinking levels and merge variants.
- Refine display name cleaning logic to remove redundant suffixes.
- Adjust Devin catalog integration to exclude exposed thinking variants.
- Normalize and sort thinking levels with an extended rank scheme.
Closes: #6141
- Parse and normalize `service_tier` from incoming OpenAI chat completion requests
- Map `fast` and `priority` to `priority`, and preserve `ultrafast`
- Omit absent, default, or unsupported service tier values
Closes: #6138
- Add reject flags and reason fields to `SchedulerPickResponse` with snake_case JSON unmarshaling support
- Terminate candidate selection with an auth error when scheduler rejection is flagged
- Normalize rejection response with default error code and reason in the plugin host
Closes: #6130
- Split function response parts from mixed user turns in Gemini payloads
- Hoist function response turns ahead of intervening text reminders following model calls
- Apply function response turn splitting and adjacent user turn merging for Claude models
Closes: #6129
- Use Codex usage config extraction to log the effective thinking effort
- Include baseline level in logged fields when the top-level mode is configured
- Guard config extraction and logging behind a debug log level check
- Handle unchanged native Responses payloads before user-defined model processing
- Extract and log original and processed thinking configuration when present
- Return payload unmodified without rewriting or re-validating
- Attach resolved execution model info during execution and token counting even when restoring execution models
- Propagate configuration update support to resolved Home dispatch model info
- Track modifications to configuration updates across plugin normalizers in the translation pipeline
- Mark configuration update support for eligible Codex models in the registry
- Permanently unschedule credentials that are disabled and encounter invalid_grant to avoid high-frequency refresh loops.
- Preserve expected token refresh behavior for normal disabled credentials without invalid_grant failures.
- Apply exponential backoff starting at 1m up to 30m when enabled credentials encounter invalid_grant to allow CAPTCHA/checkpoint recovery.
- Add regression tests covering disabled invalid_grant unscheduling and exponential backoff retry cycles.
- Remove direct Messages passthrough bypass for unconfirmed OAuth credentials
- Ensure standard cache control handling and CLI fingerprinting apply upstream
- Support detection for Claude Code 2.1.280 title helper payload shape
Closes: #6120
- Permanently unschedule credentials that are disabled and encounter invalid_grant to avoid high-frequency refresh loops.
- Preserve expected token refresh behavior for normal disabled credentials without invalid_grant failures.
- Apply exponential backoff starting at 1m up to 30m when enabled credentials encounter invalid_grant to allow CAPTCHA/checkpoint recovery.
- Add regression tests covering disabled invalid_grant unscheduling and exponential backoff retry cycles.
- Merge existing auth attributes and preserve file path metadata across plugin refreshes
- Avoid overwriting existing source and path attributes during auth data conversion
- Retry file stat during atomic replace to prevent premature removal of known auth files
Closes: #6119
- Add static and builtin model definition for `devin/swe-1-6-slow`
- Inject builtin models into Devin catalog retrieval, lookup, and dynamic updates
Closes: #6111
- Fix malformed `X-Client-Id` header and ensure it is applied to upstream requests
- Preserve subscription metadata during OAuth token creation and token refreshes
- Support dynamic retry-after for 404 responses and shorten default Meta 404 cooldown
Closes: #6117
- Introduce `sessionObject` to index top-level JSON fields once for session key lookups
- Prevent repeated rescans of large message payloads when probing missing candidate keys
- Support duplicate top-level keys when resolving nested paths
Closes: #6114
- Share request payload reference during session identity enrichment when original request is unset
- Avoid cloning request payload when interceptors do not mutate the body
- Pass request body directly to handler and conductor interceptors
Closes: #6101
- Postpone request context cancellation until after reading and closing the response body
- Ensure response body is closed and context is canceled across all error paths
Closes: #6095
- Switch HTTP server stop from graceful shutdown to immediate close to prevent hanging on active requests
- Guard listeners and configuration access with dedicated mutexes
- Instantiate service shutdown context with a fresh timeout deadline upon exit
Closes: #6094
- Map Devin grok models to xai owned_by in catalog and fetch_devin_models tool
- Update Antigravity fetched capability test to reflect gemini-pro-agent native web search support
- Fix formatting in test fixtures
- In gemini_openai-responses_request.go, do not attach 'skip_thought_signature_validator' to visibleText or thought parts when there is no genuine signature to replay.
- In response_model_rewriter.go, track rewritten model paths per stream to emit a single start debug log and a final summary upon stream completion, avoiding hot-path per-chunk log flooding.
* fix(claude): align Opus 5.5 cloak and preserve native CLI hints
* fix(claude): recognize the 2.1.280 Haiku title helper
The native title request now appends server-side fallback, fallback credit,
and cache diagnosis after the structured-output beta. Keep the helper
allowlist exact so this sequence passes through without cloaking.
* fix(claude): align thinking visibility and Messages passthrough
* fix(claude): preserve thinking visibility through compatibility paths
* fix(claude): harden OAuth beta, session alignment, and 2.1.280 helper headers
- Pass resolved `baseModel` directly to `applyCodexRoutingHint` instead of reading model from the upstream body
- Ensure the routing hint header accurately reflects the resolved model across HTTP and WebSocket executions
- Send X-Codex-Routing-Hint ("model=<slug>" plus ";tier=<service_tier>")
on ChatGPT-backend requests over HTTP, compact and websocket handshakes,
matching openai/codex rust-v0.155.0 build_routing_hint_header. Translated
requests previously carried service_tier=priority only in the body.
- Derive the hint from the final upstream body, replacing a hint a native
client forwarded, so it names the model and tier actually sent.
- Keep operator precedence: an auth header rule that resolves to a value
wins, a dynamic rule that resolves to nothing falls back to the derived
hint, and models.json override_header still applies last.
- Leave API-key requests unchanged, and keep websocket reuse as native Codex
does: an open connection keeps its handshake hint when the tier changes.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Introduce `AttributeFilePriority` and helper to track priority inherited from auth files
- Preserve file-configured priority attributes and metadata in plugin host during auth refresh
- Apply file priority metadata consistently across synthesizer, token filestore, and management handlers
Closes: #6089
- Keep adjacent text content blocks in the same assistant message during streaming translation
- Reuse active message output item across consecutive text blocks in non-streaming translation
Closes: #6088
- Introduce `hostHTTPOperationBridge` to manage, claim, and cancel host HTTP operations with scoped cleanups
- Scope HTTP operations and streams to specific plugin instances to isolate lifecycles and prevent cross-plugin access
- Add RPC handlers for `MethodHostHTTPOperationOpen` and `MethodHostHTTPCancel`
- Link operation cancellation and resource cleanup to host callback contexts and stream termination
Closes: #6085
- Track credential cooldown deadlines independently from individual model quota recovery deadlines
- Use dedicated credential backoff levels and state instead of inheriting model-specific backoff during 429 handling
- Ensure auth-level quota recovery timestamps only retain previous deadlines when the existing reason is `credential_quota`
Closes: #6083
- Detect `$ref` properties in function response results via `ContainsJSONRef`
- Stringify results containing `$ref` under `response.result` to avoid Gemini and Vertex AI treating them as media references
- Apply helper across Claude, OpenAI responses, and interactions translators for Gemini and Antigravity
Closes: #6065
- Add `RequestID` (unique execution UUID) and `TraceID` (inbound request ID) fields to usage records and plugin API
- Generate unique UUIDs per model attempt in `UsageReporter` while linking to parent trace context
- Expose `execution_id` and `trace_id` in Redis queue usage payloads while preserving legacy `request_id`
- Switch request ID generation to an atomic incrementing 8-character hex counter
- Create unique log files with numeric sequence fallback to prevent overwriting existing logs
- Select the latest log file matching request ID based on modification time and filename sequence in management API
- Sanitize tool call IDs with `SanitizeClaudeToolID` and deduplicate collisions using numeric suffixes
- Track raw tool call IDs to correctly match tool responses from turns
Closes: #6056
- Marshal Codex client catalog as compact single-line JSON without HTML escaping
- Use compact base instructions for non-template models to stay within the 1MiB payload limit
- Keep `apply_patch_tool_type`, `upgrade`, and `availability_nux` present as null instead of deleting them
- Add header definitions and ordering for per-turn control, timing, inline tools, clear-at, dangerous tool use, thinking binding/resumption, and prompt caching evict betas
- Dynamically assemble beta headers based on model capabilities and request body fields matching Claude Code 2.1.280 behavior
Closes: #6054
- Update default Claude CLI version to 2.1.280 in cloaking and device profile
- Add `mid-conversation-tool-changes-2026-07-01` beta header support for supported models
Closes: #6054
- Add `trusted-proxies` configuration option with IP and CIDR validation
- Apply trusted proxies to Gin engine to properly resolve forwarded client IPs
- Record `ResolvedClientIP` in request metadata and usage queue details
Closes: #6024
- Add Claude Opus 5.5 and GPT-6 (Sol and Luna) model entries
- Add native web search capability metadata across Gemini and Antigravity models
- Bump default Codex client version to 0.155.0 in model fetching script