- Corrected Novita pricing from ten-thousandths of a dollar per million tokens.
- Validated pasted keys against the authenticated balance endpoint.
- Made live discovery authoritative and excluded models without positive output limits.
- Enabled Codex Responses Lite for GPT-5.6 models by integrating model discovery flags and wire contract updates.
- Implemented request transformations for streaming and remote compaction, including header injection and image detail stripping.
- Introduced sequential-cutoff logic and atomic reasoning summary events for concurrent stream processing.
- Added comprehensive test suites to validate remote compaction, image handling, and reasoning summary delivery.
- Introduced `getOpenAIPromptCacheKey` to provide a unified identity resolution for both cache keys and affinity headers.
- Enabled `x-grok-conv-id` header support in the OpenAI completions provider for models configured with cache affinity.
- Added comprehensive tests to verify cache affinity header behavior across varied session and cache configuration states.
- Enabled OpenAI pro reasoning mode by integrating reasoning aliases and parameter injection.
- Expanded the model catalog with GPT-5.6 Luna, Sol, Terra, and Meta Muse Spark 1.1.
- Updated model type definitions and provider request transformers to support reasoning configurations.
- Refined model generation scripts to include new pro-reasoning aliases for OpenAI providers.
- Added auto-sealing logic to `FinalizableBlock` to finalize displaceable snapshots when they enter the scrollback area.
- Updated TUI frame emission to publish committed rows and clamp them to segment bounds, ensuring accurate component updates.
- Introduced component tracking and cleanup in event controller tests to prevent resource leaks during finalization.
- Validated state transitions and post-emit synchronization through comprehensive new test suites for transcript and TUI components.
- Added support for GPT-5.6 (Luna, Sol, Terra) models including configuration updates and context window values.
- Implemented automatic effort tier remapping for wire-effort models to ensure proper translation between user-facing tiers and provider requirements.
- Updated Codex request transformers to handle effort shifting and added validation for reasoning configurations.
- Collapsed Devin-specific model variants to unify logical model handling and added comprehensive test coverage for effort resolution.
Cursor GetUsableModels carries no per-model modality metadata; the
reference-less fallback in normalizeCursorModel hardcoded input:
["text"], classifying multimodal families (claude/gpt/codex/gemini) as
vision-blind, so attached images were silently replaced by text
descriptions. Infer modalities from the model family instead, mirroring
inferInputFromGeminiId in discovery/gemini.ts. Bundled references stay
authoritative and text-only families (composer-*, grok-code-*) keep
["text"].
Fixes#4726
Built-in model discovery admitted providers via peekApiKey, which
deliberately never refreshes OAuth rows, so a provider whose only stored
credential was an expired OAuth token was silently dropped from online
discovery and its token was never rotated (model selector 'refresh'
stayed empty for logged-in users).
Resolve built-in discovery keys through an online-only preflight that
refreshes an expired stored OAuth credential, applying the disabled/
configured/targeted provider filters before the side-effecting
resolution so refreshProvider(x) cannot rotate unrelated credentials.
Offline discovery stays peek-only. Under online-if-uncached the
preflight consults the same cache freshness the model manager uses
(2h default TTL, 5min non-authoritative retry) so tokens refresh
exactly when the manager will fetch — a fresh cache never triggers a
token-endpoint call.
Adopted from PR #4896 with two amendments: dropped an unrelated
workflow-notice.md prompt edit, and aligned the preflight cache TTL
with the manager's real 2h default (was 24h, which skipped the refresh
on the common startup path for caches aged 2-24h; regression covered
by the new online-if-uncached tests). Also corrected the stale
'Default: 24h' doc on cacheTtlMs in the catalog.
Fixes#4893
Co-authored-by: roboomp <omp@can.ac>
- Continued LiteLLM rich discovery past /model_group/info when vision metadata is missing.
- Merged later /model/info capability metadata without losing earlier display names.
- Added regression coverage for model_info.supports_vision from LiteLLM proxies.
Fixes#4747
- Replaced tool-based `set_title` invocation with XML-style `<title>` marker tags for session title discovery.
- Implemented robust JSON-unwrapping logic to handle and sanitize title generation outputs.
- Updated model registry in catalog with new model support, provider prefixes, and metadata adjustments.
- Synchronized system prompt documentation and test suites to reflect the new marker-based generation flow.
Resolved LiteLLM dynamic discovery to fall back to bundled catalog references when models.dev has no matching model.
Added rich-endpoint and /v1/models fallback regressions for glm-5.2 reasoning/thinking metadata.
Fixes#4695
Azure Foundry Anthropic routes reject Anthropic structured-output strict tooling for Sonnet 5 utility requests.
Detect Azure Anthropic hosts as strict-tool-incompatible, gate the structured-output beta when strict tools are disabled, and cover the utility header plus tool-schema contracts.
Fixes#4679
Expanded LiteLLM rich discovery filtering from the observed all-team-models row to known unselectable LiteLLM sentinel ids when they have no selectable-model evidence.
Kept real model groups selectable by requiring providers, concrete backend ids, positive limits, or positive capability metadata before treating sentinel-like rows as usable.
Fixes#4655
Filtered unusable all-team-models aggregate rows during LiteLLM rich discovery so placeholder-only /model_group/info responses fall through to /v2/model/info.
Bumped the LiteLLM rich discovery cache namespace and added regression coverage for placeholder-only and mixed model_group responses.
Fixes#4655
- Moved the OpenCode Go DeepSeek V4 max_tokens regression to the generated policy test so the generator source is covered before models.json regeneration.
- Removed the bundled JSON based assertion from the AI request-shape test.
- Updated generated OpenCode Go DeepSeek V4 catalog policy to use max_tokens instead of max_completion_tokens.
- Added regression coverage for deepseek-v4-flash:xhigh tool requests carrying max_tokens and reasoning_effort:max.
Fixes#4647
- Kept the `isAzure` branch on the Responses `supportsStrictMode` field so
bundled `provider: "azure"` entries with an empty baseUrl (35 bundled
entries) still resolve strict-mode supported, matching pre-#4527 behavior
for every built-in Azure deployment.
- Added a regression asserting that a provider-id-only Azure Responses
model emits `strict: true` on the wire.
Refs #4527
- Switched buildOpenAIResponsesCompat to the shared OpenAI strict-mode
detector so buildModel-resolved Responses models no longer materialize
DeepSeek/Cerebras/Together-style OpenAI-compatible hosts to unsupported
while the completions path marks the same backend supported.
- Replaced the corrupted-compat regression with a buildModel-based DeepSeek
Responses regression that proves author-set strict:false survives through
the supported sparse-spec route.
- Updated the changelog to describe the resolved-compat path.
Fixes#4527