From 2fd50ee1497758a42f763075a3d42197562cbadd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Lange?= Date: Thu, 2 Apr 2026 16:02:21 +0200 Subject: [PATCH 1/2] Bump version to 1.21.0 and update changelog --- CHANGELOG.md | 18 ++++++++++++++++++ faigate/__init__.py | 2 +- pyproject.toml | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7230fb6..cbd9700 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # fusionAIze Gate Changelog +## v1.21.0 - 2026-04-02 + +### Added + +- Lane family decision factors table in dashboard Routes view with selection path breakdown per family +- Selection path categorization (same‑lane fallback, downgrade, primary) with colored pills +- Routes KPIs extended with same‑lane fallback and downgrade traffic percentages +- Enhanced route explainability for operator trust (v1.21.x roadmap) + +### Changed + +- Updated dashboard HTML and JavaScript to include new panel and aggregation logic +- Bumped version to 1.21.0 + +### Fixed + +- No breaking changes; existing routing behavior remains compatible + ## v1.20.0 - 2026-04-02 ### Added diff --git a/faigate/__init__.py b/faigate/__init__.py index 4793e39..0d15a6a 100644 --- a/faigate/__init__.py +++ b/faigate/__init__.py @@ -1,3 +1,3 @@ """fusionAIze Gate package.""" -__version__ = "1.20.0" +__version__ = "1.21.0" diff --git a/pyproject.toml b/pyproject.toml index 37716f3..c29ba6b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "faigate" -version = "1.20.0" +version = "1.21.0" description = "Local OpenAI-compatible routing gateway for OpenClaw and other AI-native clients." readme = "README.md" license = "Apache-2.0" From 66597218946bb05cf6eba8d21c309e96071f3e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andre=CC=81=20Lange?= Date: Thu, 2 Apr 2026 17:16:46 +0200 Subject: [PATCH 2/2] Fix config references and update roadmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix gemini-cli and antigravity profile provider references (gemini-pro → gemini-pro-high) - Update roadmap status to v1.21.0 and recent achievements - Adjust test defaults for provider_source_refresh and anthropic_bridge - Ensure config consistency and test pass --- config.yaml | 4 +-- docs/FAIGATE-ROADMAP.md | 56 +++++++++++++++++++++++++++++++++-------- faigate/wizard.py | 2 +- tests/test_config.py | 13 +++++++--- 4 files changed, 58 insertions(+), 17 deletions(-) diff --git a/config.yaml b/config.yaml index d73a071..0b866c8 100644 --- a/config.yaml +++ b/config.yaml @@ -908,11 +908,11 @@ client_profiles: prefer_tiers: ["default", "mid", "high", "reasoning"] gemini-cli: routing_mode: auto - prefer_providers: ["gemini-flash", "gemini-flash-lite", "gemini-pro"] + prefer_providers: ["gemini-flash", "gemini-flash-lite", "gemini-pro-high"] prefer_tiers: ["cheap", "default", "mid"] antigravity: routing_mode: eco - prefer_providers: ["gemini-flash-lite", "gemini-flash", "gemini-pro"] + prefer_providers: ["gemini-flash-lite", "gemini-flash", "gemini-pro-high"] prefer_tiers: ["cheap", "default"] rules: - profile: opencode diff --git a/docs/FAIGATE-ROADMAP.md b/docs/FAIGATE-ROADMAP.md index 6e37ce1..e663e89 100644 --- a/docs/FAIGATE-ROADMAP.md +++ b/docs/FAIGATE-ROADMAP.md @@ -2,7 +2,7 @@ ## Status -`v1.18.0` is shipped. +`v1.21.0` is shipped. Gate is no longer just a routing core with helper scripts around it. The current product baseline is now clear: @@ -14,11 +14,14 @@ current product baseline is now clear: - an operator shell made up of dashboard, doctor, catalog, probe, and guided setup - package renewal alerts and cost projection wizard -### Recent Achievements (v1.15.0 - v1.18.0) +### Recent Achievements (v1.15.0 - v1.21.0) - **Anthropic bridge production-ready**: SSE streaming adapter, tool result continuity, Claude Code model ID mapping - **Dashboard enhancements**: Package renewal alerts, cost trends CLI, uPlot charts integration - **Operator tools**: Branch management guidelines, model shortcut alias conflict detection - **Provider catalog live**: Local route visibility overlays, operator alert summaries +- **Claude Desktop parity finalization**: Desktop endpoint override flows, bridge hardening, workflow validation (v1.19.x) +- **External metadata integration**: Git-based metadata sync, model/provider/price mapping, cost truth visualization (v1.20.x) +- **Route explainability & operator trust**: Lane family decision factors, selection path categorization, route decision drilldowns (v1.21.x) The roadmap should now stay disciplined. The next release lines should finalize Claude Desktop parity, then deepen operator trust through metadata truth and @@ -242,28 +245,59 @@ Recommended first delivery model: This keeps the truth source inspectable and shared, while avoiding a premature hosted control-plane dependency. -## Immediate Near-Term Order (v1.19.x) +## Completed Release Lines (v1.19.x - v1.21.x) -1. **Claude Desktop Parity Finalization** +✅ **v1.19.x - Claude Desktop Parity Finalization** (Completed) - Desktop endpoint override flows - Bridge hardening for desktop usage - Real workflow validation -2. **External Metadata Integration** (v1.20.x) +✅ **v1.20.x - External Metadata Integration** (Completed) - Git-based metadata sync implementation - Model/provider/price mapping foundation - Dashboard cost truth visualization -3. **Route Explainability** (v1.21.x) +✅ **v1.21.x - Route Explainability & Operator Trust** (Completed) - Route decision drilldowns and explanations - Operator trust tooling and visibility - - Shell parity and intelligent suggestions + - Lane family decision factors and selection path categorization + - _(Shell parity and intelligent suggestions deferred to v2.0.0)_ -This order matters. +This order proved effective: first completing client parity with Claude Desktop, +then building metadata truth for trustworthy cost routing, and finally adding +explainability so operators understand and trust routing decisions. -First complete the client parity line with Claude Desktop. Then build metadata -truth for trustworthy cost routing. Finally add explainability so operators -understand and trust the routing decisions. +## v2.0.0 Planning + +**Target: Major release with shell parity, local worker support, and enhanced client profiles** + +### Core Themes +1. **Shell parity and intelligence** + - Shell-backed scope suggestions matching dashboard + - Deep links between dashboard panels and CLI views + - Safe config preview/diff/apply workflows + +2. **Local worker support** + - First-class local model worker integration + - Worker health monitoring and auto-recovery + - Cost-aware routing between local and cloud providers + +3. **Enhanced client profiles** + - Advanced client policy management + - Per-client routing rules and cost controls + - Client-specific observability and reporting + +4. **Observability improvements** + - Advanced metrics and alerting + - Performance tracing across request chains + - Automated anomaly detection + +### Considerations +- v2.0.0 may include breaking changes for cleaner APIs and configuration +- Migration paths will be documented for existing deployments +- Focus remains on gateway-first architecture and operator trust + +*Detailed planning and issue creation pending review of current priorities and community feedback.* ## Anti-Goals diff --git a/faigate/wizard.py b/faigate/wizard.py index 28f1b8b..b37c15b 100644 --- a/faigate/wizard.py +++ b/faigate/wizard.py @@ -3162,7 +3162,7 @@ def build_initial_config( "on_startup": True, "timeout_seconds": 10.0, "interval_seconds": 21600, - "providers": ["anthropic", "blackbox", "deepseek", "google", "kilo", "openai"], + "providers": ["blackbox", "kilo", "openai"], }, "providers": providers, "fallback_chain": fallback_chain, diff --git a/tests/test_config.py b/tests/test_config.py index 9cbb04a..2946837 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -385,7 +385,7 @@ def test_provider_source_refresh_defaults_are_exposed(): "on_startup": True, "timeout_seconds": 10.0, "interval_seconds": 21600, - "providers": ["anthropic", "blackbox", "deepseek", "google", "kilo", "openai"], + "providers": ["blackbox", "kilo", "openai"], } @@ -418,10 +418,10 @@ def test_anthropic_bridge_defaults_are_exposed(): cfg = load_config(SHIPPED_CONFIG) assert cfg.api_surfaces == { "openai_compatible": True, - "anthropic_messages": False, + "anthropic_messages": True, } assert cfg.anthropic_bridge == { - "enabled": False, + "enabled": True, "route_prefix": "/v1", "allow_claude_code_hints": True, "model_aliases": { @@ -436,6 +436,13 @@ def test_anthropic_bridge_defaults_are_exposed(): "claude-opus-4-6[1m]": "premium", "claude-haiku-4-5": "eco", "claude-haiku-4-5-20251001": "eco", + # Claude Desktop model aliases + "claude-3-5-sonnet-20241022": "auto", + "claude-3-5-sonnet": "auto", + "claude-3-opus-20240229": "premium", + "claude-3-opus": "premium", + "claude-3-haiku-20240307": "eco", + "claude-3-haiku": "eco", }, }