- Deduplicated the re-imported changelog bullets from the PR #8403 merge,
keeping the condensed register with only the new #8402 entry.
- getUserHomeCandidates memoizes the WSL home candidate keyed by
platform + WSL markers + USERPROFILE, so a wedged interop pipe costs
one bounded probe per process instead of one 500ms stall per
discovery loader, while env changes (tests, SDK embeddings) still
recompute.
- Generalized thinking loop guard and helper functions to support Gemini, DeepSeek, and Grok model families.
- Replaced `withGeminiThinkingLoopGuard` and related Gemini-specific symbols with generalized counterparts.
- Removed deprecated `enableGeminiThinkingLoopGuard` options and associated tests.
- Updated test suites and agent session logic to use the generalized thinking loop guard and model family tokens.
- Added `isGrok46ModelId` boundary-aware model predicate to the catalog package.
- Included Grok 4.6 models in the thinking-loop guard to prevent runaway reasoning streams.
- Added Anthropic prompt-cache refresh scheduling and state management to keep prompts warm across idle sessions.
- Updated pricing models and database stats tracking to calculate and store cost-weighted cache savings.
- Integrated cache savings metrics and efficiency displays into the stats CLI, dashboard routes, and UI components.
- Added support for package renaming, manifest pointer tracking, and installation migration during CLI updates.
- Set generation temperature to zero for online title generation to prevent garbled names.
- Update system prompt to instruct exact copying of technical terms and names.
- Reject generated titles containing no word characters to prevent punctuation-only sessions.
Together `/login` key validation chat-completed against the hardcoded
model `moonshotai/Kimi-K2.5`, which is not on Together's serverless
catalog. Together rejects it with HTTP 400 `model_not_available`, so no
valid key could ever pass validation.
Switch Together to the model-agnostic `models-endpoint` validation
against `https://api.together.xyz/v1/models`, matching the pattern used
by the other API-key providers.
Fixes#8328
- Differentiate explicit zero monthly limit from malformed positive monthly configurations.
- Reject inferred weekly credits when monthly config has a positive limit that fails parsing, preserving the retain-last-good fallback.
- Add unit test verifying rejection of malformed positive monthly payloads.
- Ensure inferred weekly credits on unified accounts are only used when the monthly probe successfully returns a config without positive monthly quota.
- If the monthly probe fails (transient network error), reject the inferred report so AuthStorage's retain-last-good cache preserves the previous valid snapshot.
- Add unit test verifying network error behavior on unified monthly probe.
- Prefer explicit monthly included quota when weekly credits percentage was only inferred from an omitted field.
- Prevent pure monthly unified billing accounts from reporting phantom weekly credit limits.
- Keep tests clean and fully backward compatible.
- Only infer 0% creditUsagePercent when end > now (active period).
- Reject expired weekly periods without explicit usage data so stale cache fallback is retained until rollover completes.
- Add unit test verifying expired periods without usage percent are rejected.
- Default creditUsagePercent to 0 when a valid weekly currentPeriod is present but the percentage field is omitted by xAI API (such as newly reset weekly cycles with zero usage).
- Default product usage percentage to 0 when omitted.
- Add test coverage for unconsumed weekly periods and update unified billing tests.
Number.parseFloat("3.10") is 3.1, so a future qwen3.10-max flagship would
sort below 3.8 and get its images stripped. Parse major/minor separately and
compare component-wise so 3.10 > 3.8. Locks the contract with a qwen3.10-max
counter-case.
Fixes#8305
The DashScope compatible-mode text-only override from #1859 matched all
qwen*-max ids, so it vetoed image content for qwen3.8-max even though that
model is multimodal in the bundled catalog (image input, #8019). inspect_image
routed to qwen3.8-max therefore received the [image omitted] placeholder and
reported no image.
Narrow isDashscopeCompatibleModeTextOnlyQwen so the -max branch only flags
pre-3.8 SKUs as text-only; coder families stay text-only. 3.8+ -max ids now
send image_url content.
Fixes#8305
- Bound PAX sparse record memory overhead by caching sparse markers and specific keys.
- Update system prompt phrasing and tests for tool inventory and date displays.
- Added Google provider thinking configuration parameters and force-reasoning-off controls.
- Implemented MCP SSE stream resumption using Last-Event-ID and `SSEResumeError`.
- Added support for TAR old-GNU sparse extension blocks, path length checks, and archive entry overrides.
- Restricted external thinking support to specific models and added semver fallback parsing.
- Added the `--external-thinking` CLI flag alongside model capability checks to gate external thinking tool availability.
- Updated Anthropic and Google transports to honor `forceReasoningOff` for native thinking-off controls.
- Renamed the `thoughts` property and parameter to `notes` across think fixtures, tools, and tests.
- Updated system prompt instructions and test suites to verify transport-specific thinking and tool activation.
- Added a markdown template defining a tool-only turn directive for Gemini models.
- Appended the forced tool directive to request contents when using Antigravity Gemini routes with forced tool mode.
- Added support for external thinking and forced reasoning disablement across AI provider options and request transformers.
- Implemented the private scratchpad think tool along with its renderer, system prompt rules, and schema configuration.
- Updated agent session management and SDK tools to support dynamic runtime activation of the think tool via the externalThinking setting.
- Added comprehensive unit tests covering reasoning fallbacks, tool activation, and rendering behavior.