- Added internal protobuf wire codecs, message builders, and protocol definitions for Cursor and Devin providers.
- Deferred loading of OTel SDK and OTLP exporters and added bounded caches to optimize startup and lookup performance.
- Added SQLite-backed parse caching for legacy extension source analysis and streaming file chunk parsing for changelogs.
- Added support for rendering context usage overflow above 100% in the status line component.
Cursor advertises Grok 4.5/4.6 as per-effort sibling ids
(cursor-grok-4.6-low|-medium|-high|-xhigh plus -fast variants), but
VARIANT_COLLAPSE_TABLES had no cursor entry, so the model hub showed 14
unrouted siblings instead of one logical model with effort routing.
GetUsableModels ships no thinkingDetails and the bundled references read
reasoning:false, so the picker also treated them as non-reasoning.
- Add CURSOR_VARIANT_COLLAPSE_TABLE folding each service-tier lane
(standard + -fast) into one logical model with effort routing onto the
live wire ids, mirroring Devin's grok-4-5 collapse.
- Rename the generic devinTierFamily/DevinTierRoutes helper to
tierFamily/TierRoutes now that both Devin and Cursor tables use it.
- Mark versioned cursor-grok-<version> ids as reasoning during discovery
(grok-code-* coding models stay non-reasoning).
Fixes#8803
- Implement the ai& provider registry entry with API-key authentication and login support.
- Add model descriptors, static model seeding, and openai-compatible model discovery for the ai& provider.
- Update the model catalog with ai& provider models, pricing, and updated provider model names.
- Add unit tests for the ai& provider environment resolution, metadata, and dynamic model mapping.
Cursor custom ids can arrive as k3 (or kimi/k3), which
isKimiK3ModelId does not match; the bundled kimi-code catalog defines
k3 as the 1,048,576-token Kimi K3 model while k3-256k is the 256k
SKU, so gate the bare form with an exact-match pattern that keeps
k3-256k at the default window.
Compose the native-1M gate from the shared family parsers
(isKimiK3ModelId, parseGlmModel + semverGte 5.2 floor) so namespaced
ids (moonshotai/kimi-k3, z-ai/glm-5.2) and future GLM versions
(glm-5.10, glm-6) are covered, addressing review feedback. Restore the
Unreleased changelog entry dropped by the applied empty suggestion.
GetUsableModels carries no context-window field, so discovered 1M
models were pinned to the 200k default and OMP compacted long before
the real ceiling. Recover the 1M window from the signals Cursor does
send: "1M" display-name labels across families, natively 1M families
served unlabeled (Kimi K3, GLM 5.2+), and the max-mode flag on
Claude/Gemini ids. Bump the Cursor model-cache namespace so windows
cached before this fix are refetched.
Fixes#4798
Changed the Cursor discovery cache namespace so rows written before cursorMaxMode cannot satisfy fresh-cache reads.
Added a regression test that seeds the old namespace and verifies discovery refetches max-mode metadata.
Fixes#4797
Parsed Cursor GetUsableModels max_mode metadata into catalog models and sent it on Cursor run requests.
Added focused regression coverage for discovery and request payload propagation.
Fixes#4797
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