From 1c59906b499a5bd4b1a2572c2f0496335cf07c91 Mon Sep 17 00:00:00 2001 From: infosave2007 Date: Sat, 8 Aug 2026 16:12:17 +0300 Subject: [PATCH] chore: bump v0.2.43 --- CHANGELOG.md | 39 +++++++++++++++++++++++++++++++++++++++ Cargo.lock | 2 +- Cargo.toml | 2 +- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af420bc..f872a0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,45 @@ All notable changes to this project are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/). +## [0.2.43] - 2026-08-08 + +### Added +- **API keys actually gate the gateway.** Configured `[[api_keys]]` now enforce auth on + `/v1`, `/route` and `/mcp` (Bearer or `x-api-key`), attribute every request to the key's + account in stats, apply per-key rate limits (`rate_per_min` → 429 with `Retry-After`) and + per-key monthly budgets (`monthly_budget_usd` → 429 `insufficient_quota`). No keys + configured = open mode, as before. +- **Auto-detected tool support for managed local servers**: `cortiq serve` ≥ 0.5.63 + advertises the loaded model's capabilities in `/healthz`; the gateway reads the handshake + when the server becomes healthy, so a local model whose chat template can drive tool + calling serves agent (tools) traffic with zero manual configuration. Manual override: + `caps = ["tools"]` on the `[[cmf.servers]]` entry (also the fallback for older serves). +- **OpenRouter balance on the dashboard** (when an OpenRouter key is configured): the + remaining credit is a KPI card, red under $5. +- **Harness snippets for every OS** on the API-keys page: Linux/macOS and Windows variants + per harness, an install command chip when the harness is missing, and a paste-your-key + field that substitutes the real key into every snippet. +- Deploy guide (`docs/DEPLOY.md`, Russian mirror): systemd/launchd/Windows service, nginx and + Caddy TLS fronting, security checklist, backup list. + +### Fixed +- Capability filtering widens the tier chain instead of killing the request: when an AUTO + route's chain has no model with the required capabilities (tools), the gateway escalates + through medium→high chains and then the rest of the pool instead of returning + "No healthy model available". Explicit pins still fail loudly. +- Semantic-cache threshold no longer renders as `0.9200000166893005` (f32→f64), the cache + settings card shows live entries/hits/saved-$ and warns when no embedding model exists. +- Key-page snippets survive being pasted into a real interactive zsh (no `#` comment lines, + no history-expansion `!`), and the install chips are readable in the light theme. +- Stats log growth is bounded: `[stats] max_file_mb` (default 16) folds old JSONL records + into the sidecar totals file — per-account all-time and month spend survive compaction + and restarts. + +### Breaking +- If your config already lists `[[api_keys]]` but your clients never send keys, requests + will now be rejected with 401 — either remove the keys from the config or start sending + `Authorization: Bearer `. + ## [0.2.42] - 2026-08-08 ### Added diff --git a/Cargo.lock b/Cargo.lock index 7411984..855ba5e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -285,7 +285,7 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "cortiq-gateway" -version = "0.2.42" +version = "0.2.43" dependencies = [ "anyhow", "arc-swap", diff --git a/Cargo.toml b/Cargo.toml index 3052eca..982c71e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cortiq-gateway" -version = "0.2.42" +version = "0.2.43" edition = "2021" rust-version = "1.75" license = "Apache-2.0"