All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.2.5 - 2026-09-15
1af464c- ✨ inject x-opencode-session header for OpenCode providers (PR #67 by @shansb)3349bd0- ingress: ✨ Inject gateway identity headers upstream (PR #74 by @jorben)
0.2.4 - 2026-09-09
6e09907- admin: 🐛 parse nested reset credits accurately (PR #64 by @jorben)75027f6- stats: 🐛 Make token dashboard stats atomic (PR #66 by @jorben)2b92928- desktop: 🐛 enforce single instance and unify SQLite URLs (PR #68 by @jorben)3a7b273- admin: 🐛 preserve custom provider models endpoint (#69) (PR #70 by @jorben)61a79a6- deepseek: 🐛 Default non-legacy models to Responses (PR #71 by @jorben)
0.2.3 - 2026-08-29
0.2.2 - 2026-08-25
04d019c- 🐛 strip unsupported Codex output token parameter (PR #47 by @jorben)7752c69- oauth: 🐛 force store false for Codex requests (PR #50 by @jorben)f4f9c7e- 🐛 preserve Codex OAuth metadata across provider requests (PR #53 by @jorben)
0.2.1 - 2026-08-13
30914b4- protocols: ✨ add comprehensive GPT-5.6 protocol support (PR #38 by @jorben)bd12eb9- auth: ✨ Add coordinated OAuth token keepalive (PR #39 by @jorben)2674082- oauth: ✨ Add provider egress profiles and usage windows (PR #40 by @jorben)
18a6426- 🐛 Make non-stream upstream timeout configurable (PR #44 by @jorben)↘️ fixes issue #43 opened by @ddmonster
0.2.0 - 2026-07-08
ff89669- store: ✨ Add per-request cost breakdown and route model-metadata auto-resolution (PR #32 by @jorben)29fd594- ui: ✨ remove OAuth navigation item from sidebar (PR #33 by @HayWolf)
0.1.9 - 2026-07-03
454ac5f- admin,webui: ✨ add route target model auto-discovery with searchable dropdown (PR #28 by @jorben)a60cc7e- routes: ✨ add virtual model metadata (PR #30 by @HayWolf)
ac44de1- store: 🐛 cast AVG and throughput queries to DOUBLE PRECISION for PostgreSQL (PR #24 by @HayWolf)1bd9ccd- ingress: 🐛 disable upstream redirect following to prevent Authorization header stripping (PR #27 by @jorben)2981fd7- ui: 🐛 make Combobox dropdown scrollable inside Radix Dialog (PR #29 by @jorben)
0.1.8 - 2026-06-30
-
due to
d202df8- ✨ pass structured error code through to client responses (PR #18 by @HayWolf):error.type field no longer returns "gateway_error";
clients see protocol-native types (e.g. "rate_limit_error",
"overloaded_error", "RESOURCE_EXHAUSTED"). The non-standard
error.source and error.upstream_status fields are removed.
eed5228- protocols: ✨ Preserve encrypted reasoning content across multi-turn replay (PR #14 by @jorben)e973d71- server: ✨ add per-hop request attempt logging and fix Anthropic output_config field placement (PR #17 by @jorben)d202df8- core: ✨ pass structured error code through to client responses (PR #18 by @HayWolf)cfc089d- models: ✨ Add models.dev catalog with embedded baseline and runtime refresh (PR #20 by @jorben)
f9337e5- desktop: 🐛 Restore missing tray icon (PR #16 by @jorben)1286a84- streaming: 🐛 skip end frame when upstream already sent terminal signal (PR #19 by @jorben)a3a3e9a- ingress: 🐛 add upstream_ttfb_timeout to bound streaming TTFB phase (PR #22 by @jorben)
0.1.7 - 2026-06-26
0.1.6 - 2026-06-24
8e56a1c- ingress: 🐛 inject end frame after stream error and improve admin console UX (PR #9 by @jorben)
0.1.5 - 2026-06-23
d2accf6- ui: ✨ show enabled state in target badges (commit by @jorben)982b5c0- protocol: ✨ preserve image_url.detail across protocol translation (commit by @jorben)
0.1.4 - 2026-06-22
b4d06e4- ingress: ✨ detect and log downstream client disconnects during SSE streaming (commit by @jorben)84c3874- webui: ✨ add cache hit ratio display and conditionally hide fields in request logs (commit by @jorben)
58a2912- telemetry: ♻️ normalise request log status and error_class into typed enums (commit by @jorben)
0.1.3 - 2026-06-22
0.1.2 - 2026-06-22
0.1.1 - 2026-06-21
0.1.0 - 2026-06-20
-
due to
9ffb875- 🐛 correct admin UI routing basename and login redirect (commit by @jorben):Admin console deep links now resolve under
/admin/ui/with a trailing slash -
due to
3c976e1- ✨ unify cross-protocol thinking config with 6-level effort enum and bidirectional budget mapping (commit by @jorben):ThinkingEffort enum now includes Minimal and XHigh variants; consumers pattern-matching on the enum must handle the new arms
-
due to
e944b2f- ✨ introduce database-backed runtime settings with hot-reload (commit by @jorben):environment variables for runtime tuning (body size limits,
routing strategy, upstream timeouts, payload archive config, retention,
epoch poll interval, token stats) are now only read on first start as
seed values; the settings table is the single source of truth thereafter -
due to
70fe0be- ✨ add require_api_key settings toggle for data-plane authentication (commit by @jorben):require_api_key defaults to true — existing
deployments running in anonymous mode must set
TIYGATE_REQUIRE_API_KEY=false or seed API keys to restore
pass-through behavior
0ac7de0- ✨ Ship complete TiyGate AI gateway — multi-protocol transcoding, admin console, and CI/CD (commit by @jorben)accbd30- protocols: ✨ extend IR with thinking, refusal, metadata, and annotations (commit by @jorben)3c976e1- thinking: ✨ unify cross-protocol thinking config with 6-level effort enum and bidirectional budget mapping (commit by @jorben)56019de- store: ✨ tune autovacuum for payload-heavy log tables (commit by @jorben)c19a09f- providers: ✨ add OpenRouter provider integration (commit by @jorben)bc3a558- providers: ✨ add OpenCode providers (commit by @jorben)ec10f7b- webui: ✨ add collapsible JSON tree viewer for request log details (commit by @jorben)2abe00b- config: ✨ add config export and import for backup & restore (commit by @jorben)e944b2f- config: ✨ introduce database-backed runtime settings with hot-reload (commit by @jorben)6fbeabf- config: ✨ extend backup/restore to include settings and selective import (commit by @jorben)ef29075- integration-guide: ✨ use current origin as default base URL in production (commit by @jorben)1dedbce- auth: ✨ add admin brute-force protection and tag-based version display (commit by @jorben)5f94449- admin: ✨ record field-level before/after diff in settings audit (commit by @jorben)e999957- ✨ add OpenAI Images endpoint passthrough support (commit by @jorben)70fe0be- auth: ✨ add require_api_key settings toggle for data-plane authentication (commit by @jorben)c711214- desktop: ✨ add Tauri desktop client with sidecar architecture (commit by @jorben)35469a4- auth: ✨ add passwordless mode to hide logout button (commit by @jorben)1e8556c- tray: ✨ add system tray icon with show/hide/quit controls (commit by @jorben)2c2a2cd- tauri: 🎉 run as menu-bar accessory app on macOS (commit by @jorben)ce86918- ui: ✨ add custom macOS tray icon with template support (commit by @jorben)d3c9e51- desktop: ✨ add remote instance management and switching (commit by @jorben)2da2e08- auth: ✨ scope tokens per-instance to support remote instance auto-login (commit by @jorben)7bb8062- ui: ✨ show instance indicator on login page and enable logout in Tauri (commit by @jorben)
9ffb875- webui: 🐛 correct admin UI routing basename and login redirect (commit by @jorben)8610ef6- protocols: 🐛 preserve tool call args and usage in OpenAI→Messages streaming (commit by @jorben)9508d6a- oltp: 🐛 let Anthropic message_delta usage override message_start (commit by @jorben)b678e9c- gemini: 🐛 resolve thinking field conflict and missing tool result names (commit by @jorben)4316769- protocol: ✅ defer terminal delta until usage arrives when finish precedes usage (commit by @jorben)8a2885d- protocols: 🐛 accumulate usage across stream events to preserve cache read tokens (commit by @jorben)85f99b2- protocols: 🐛 fix gemini streaming tool calls incorrectly mapped to stop on traffic-type metadata (commit by @jorben)e2caab1- protocols: 🐛 preserve tool call arguments in gemini to messages transcode (commit by @jorben)99dc2b1- webui: 🐛 align pagination colors with active theme properties (commit by @jorben)7cc3580- ui: 🐛 handle null and undefined values in JsonViewer (commit by @jorben)6d5d26a- store: 🐛 qualify column name in epoch increment SQL query (commit by @jorben)29b6693- ui: 🐛 auto-migrate stale localhost cache in production (commit by @jorben)96fbc3b- store: 🐛 cast DATE(ts) to TEXT in token stats aggregation query (commit by @jorben)c29928c- store: 🐛 cast average metrics to double precision in SQL aggregation (commit by @jorben)f93ac8d- store: 🔧 embed migration SQL files using rust-embed for packaged builds (commit by @jorben)9cc1f74- webui: 🐛 prevent theme flash on initial load (commit by @jorben)d2103bc- images: 🐛 Use JSON serialization for deterministic snapshot (commit by @jorben)c196fa2- desktop: 🐛 resolve Windows build and runtime issues (commit by @jorben)
26d30df- auth: ♻️ consolidate AuthApplier implementations into crates/auth (commit by @jorben)6a77a51- ui: ♻️ extract useStickyTableScroll hook for sticky table columns (commit by @jorben)
2a8d283- ci: 🔧 add Docker, GitHub Actions workflows and project config (commit by @jorben)bc924f5- 🔧 use env_file for docker-compose service config (commit by @jorben)cca153f- build: 🔧 make webui dependency installation idempotent (commit by @jorben)6ab5ac5- build: 🔧 remove updater artifacts and simplify build pipeline (commit by @jorben)7301840- ci: 🔧 bump macOS runner to macos-26 (commit by @jorben)