Repository navigation
Stravia v0.3.1
Removed
- Breaking: Removed the Anthropic
claude-codeOAuth channel, including subscription sign-in, token refresh, curated model discovery, and allowance monitoring. Anthropic API-key access and Claude Code client configuration remain supported. Existing subscription connections, credentials, and history are retained, but the removed channel is unavailable; configure an Anthropic API-key connection and rebind its Routes to resume inference.
Added
-
Debug now collects process CPU/RSS, SQLx query and connection-acquisition histograms, named execution timings, and observation queue/cache gauges. A single tracing span pipeline supplies both Prometheus aggregates and a bounded Chrome Trace JSON timeline, downloadable by administrators from Settings without another listener. The timeline preserves async parent relationships, reports dropped and incomplete spans, and does not pretend to be a CPU profile. SQL text and request contents are excluded from performance exports.
-
Cline Pass is now served by the embedded base Vendor's
cline-passcatalog Profile — standard OpenAI-compatible access with API-key authentication plus subscription allowance monitoring — and no dedicated plugin package is built or required. Aclinepassplugin previously imported from a local package is not migrated or uninstalled automatically; recreate the connection as a basecline-passProvider, rebind its Routes, then uninstall the old plugin in Vendor Plugins.
Changed
-
Updated compatible Rust and WebUI dependencies, including Tauri 2.11.2, Wasmtime 49, RMCP 3.5, Svelte 5.57, and Vite 8.3.
-
The single Debug switch and Debug Trace cleanup action now live in Settings → Diagnostics instead of Request History. The switch controls performance sampling and wire capture together, requires confirmation when enabled, and resets after restart. Disabling freezes performance data, marks active spans incomplete, and preserves the capture decisions of in-flight requests.
-
Supported Thinking Levels now use the union of non-hidden mappings across enabled Route targets instead of their intersection. The model editor, model discovery, client configuration exports, and Media Understanding level selection expose a level when at least one enabled target supports it. Disabled targets remain excluded; runtime matching still uses the selected target's own mapping.
-
Protected reasoning now survives account, deployment, and proxy changes within the same protocol unless the destination has already rejected that payload. Cross-protocol replay and Gemini model changes still strip incompatible protected reasoning. Rejections trigger at most two pre-output recovery requests without consuming the Target retry budget or putting the Target into cooldown; successful recovery remembers rejected payloads until restart. These additional upstream requests may consume provider quota.
Fixed
-
Desktop performance exports now report the saved file path after the native download completes, or show a cancellation/failure message instead of silently saving files without feedback.
-
History restoration avoids repeated ancestor reads and unrelated SQLite reference scans, reducing cold-cache work for long conversations without changing stored history or replay semantics. Performance exports now attribute SQL timings to named operations and include cache hit/miss counts and timeline work measurements.
-
The bundled base plugin now updates on startup when its version is unchanged but its component digest differs, including when the previous bundled artifact is unavailable. Identical components are not reinstalled; downgrades and locally installed replacements remain excluded from automatic updates.
-
Startup recovery now uses run/status indexes for Model Turn and Target Attempt observations on SQLite and PostgreSQL, avoiding repeated full-table scans as request history grows. Existing databases receive the indexes through an incremental migration without deleting history.
-
Overview and Usage analytics latency charts now use actual timestamps for horizontal positions, preventing lines from doubling back when a 24-hour window includes the same clock time on consecutive days. Localized axis and tooltip labels and gaps for periods without requests are preserved.
-
The request-history model filter now lists each Route by its effective display name and shows the same name for the applied selection, so Routes without a display name appear by Model ID instead of exposing the internal Route ID or reading as "All". Filter requests still send the Route ID unchanged.
-
Interrupted interaction chains retain their last request activity time instead of reappearing in recent activity when a delayed disconnect, idle timeout, restart recovery, or terminal cleanup is detected. Diagnostic events still record the actual detection time; previously stored timestamps are not backfilled.
-
Client-owned tool arguments now remain verbatim across Chat Completions and Responses delivery, streaming completion, stored history, and client replay, including empty or malformed JSON. Response hooks no longer fail a completed upstream call solely because client arguments are invalid; platform tool argument errors instead return an error tool result without executing the tool. Credential protection retains decoded-string handling for incomplete JSON and fails closed when outbound escapes cannot be safely interpreted. Object-only protocol conversions reject unrepresentable arguments rather than fabricating empty objects.
-
Command Code and other known plugin-owned protocols now apply target-specific thinking-history replay independently of host codec registration. Client-replayed Responses reasoning no longer causes a local HTTP 400 after history compaction or edits; readable reasoning and tool-result associations are preserved without relaxing protocol validation or history matching.
-
Replayed reasoning is no longer turned into ordinary assistant text on targets whose native reasoning field accepts unsigned reasoning, such as Chat Completions
reasoning_contentand Command Code. Previously the model could treat that reasoning as text it had already said and stop producing reasoning. Anthropic, Bedrock, and Responses history without a replayable reasoning id still falls back to text. -
Protected-reasoning recovery first removes only unverified reasoning, then all protected reasoning if necessary. Anthropic, Bedrock, and Gemini signature rejections now trigger this recovery.
-
Chat Completions upstream requests no longer include internal gateway request fields (
__stravia_*, such as the generation session ID) in the request body.
Full Changelog: v0.3.0...v0.3.1