Diego Rodrigues de Sa e Souza
c3fe96e221
Merge pull request #44 from diegosouzapw/feature/release-0.6.0
...
chore: release v0.6.0
v0.6.0
2026-02-16 00:23:19 -03:00
diegosouzapw
1c6541f25d
chore: bump version to 0.6.0 and update changelog
2026-02-16 00:22:55 -03:00
diegosouzapw
9f8dfa1398
feat: add costs page and enhance health provider status display
...
Add dedicated Costs page combining Budget and Pricing tabs with a
sidebar navigation layout. Improve Health page provider section with
status legend (Healthy/Recovering/Down) and import AI_PROVIDERS
constants for richer provider display.
2026-02-15 23:01:27 -03:00
diegosouzapw
e4db9bff0e
feat: add provider metrics display and model import for passthrough providers
...
- Fetch and display request metrics (success rate, latency, total requests) on provider overview cards
- Create /api/provider-metrics endpoint to aggregate stats from request logs
- Add /api/providers/[id]/import-models endpoint to import models from provider's /models API
- Add "Import from /models" button on passthrough provider detail pages
- Include proper PropTypes for new metrics and alias fields
2026-02-15 21:53:27 -03:00
diegosouzapw
54aba4c087
feat: redesign app icons with network node graph and new color scheme
...
Replace text-based "9" favicon with a network/router node graph design
across all icon sizes. Add apple-touch-icon and icon-192 SVG assets.
Update brand gradient from orange (#f97815) to red (#E54D5E).
2026-02-15 20:56:48 -03:00
Diego Rodrigues de Sa e Souza
c2542b75f6
Merge pull request #43 from diegosouzapw/feature/release-0.5.0
...
chore: release v0.5.0
v0.5.0
2026-02-15 19:03:37 -03:00
diegosouzapw
6572f2a1b6
chore: bump version to 0.5.0 and update changelog
2026-02-15 19:03:18 -03:00
Diego Rodrigues de Sa e Souza
2ad23f3b3c
Merge pull request #42 from diegosouzapw/feature/ajustes-cosmeticos
...
feat: v0.5.0 - Dashboard refinements, evals framework, and combo strategies
2026-02-15 18:57:29 -03:00
diegosouzapw
fa9687ae0d
feat: Implement API key usage for EvalsTab LLM calls, enhance model filtering with provider aliases, and remove the random routing strategy option.
2026-02-15 18:56:33 -03:00
diegosouzapw
0ed7738c7c
feat: add LLM evaluation framework with golden set testing
...
Introduce built-in eval system for testing LLM response quality against
golden sets. Includes eval runner with 4 match strategies (exact,
contains, regex, custom), a pre-loaded 10-case golden set, REST API
endpoints for managing and running suites, and a dashboard UI under
Analytics → Evals with real-time progress tracking and pass rate
summaries. Also adds OpenAPI tags for Audio, Moderations, and Rerank.
2026-02-15 18:37:18 -03:00
diegosouzapw
a43b1c9218
feat: add random, least-used, and cost-optimized combo strategies
...
Extend combo routing with 3 new model selection strategies beyond the
existing priority, weighted, and round-robin options:
- random: Fisher-Yates shuffle for uniform distribution
- least-used: sorts models by request count via comboMetrics
- cost-optimized: sorts models by pricing (cheapest first)
Also enhance the dashboard provider cards with model counts and
clickable detail views for selected providers.
2026-02-15 16:57:00 -03:00
diegosouzapw
413a9f2a69
feat: add ModelAvailabilityBadge component and retheme landing page
...
- Add compact ModelAvailabilityBadge with popover for model status
monitoring, cooldown clearing, and auto-refresh polling
- Retheme landing page from warm orange tones to cool blue-grey palette
across FlowAnimation, Footer, and related components
- Update accent color from orange (#f97815) to rose (#E54D5E)
2026-02-15 16:26:01 -03:00
diegosouzapw
14714aa9f5
feat: refactor dashboard with shared UI component library
...
Introduce reusable shared components (Button, Card, Modal, Table,
StatusBadge, EmptyState) and refactor dashboard pages to use them.
Extract client components from server pages, centralize provider
constants, and update CI Node.js matrix from 18 to 20.
2026-02-15 16:11:56 -03:00
Diego Rodrigues de Sa e Souza
ac4df197c3
Merge pull request #41 from diegosouzapw/fix/chat-completions-then-error
...
fix(api): resolve TypeError in chat/completions route
2026-02-15 13:25:28 -03:00
diegosouzapw
06826d4c86
fix(api): resolve TypeError in chat/completions ensureInitialized
...
initTranslators() is a no-op stub (translators self-register via static
imports). Wrapping the call with Promise.resolve() ensures .then() works
even when the function returns undefined instead of a Promise.
2026-02-15 13:24:54 -03:00
Diego Rodrigues de Sa e Souza
78b0782129
Merge pull request #40 from diegosouzapw/fix/ci-lint-build-errors
...
fix(ci): resolve build and lint failures
v0.4.0
2026-02-15 12:56:44 -03:00
diegosouzapw
5c92f05079
fix(ci): resolve build and lint failures
...
- Remove non-existent DarkTooltip/CostTooltip exports from analytics/index.js
- Fix setState-in-effect in ProxyTab.js (inline fetch in useEffect)
- Fix anonymous default export warning in prettier.config.mjs
- Remove @ts-check from promptInjectionGuard.js (SanitizeResult type mismatch)
2026-02-15 12:56:09 -03:00
Diego Rodrigues de Sa e Souza
16cdb345a0
Merge pull request #39 from diegosouzapw/feature/v0.4.0-action-items
...
feat: implement 26 action items + bump v0.4.0
2026-02-15 12:34:45 -03:00
diegosouzapw
0e238a61fb
feat(core): implement 26 action items from critical analysis + bump v0.4.0
...
- Security: AES-256-GCM encryption for API keys/tokens, CI security audit
- Accessibility: ARIA labels, aria-live regions, skip-to-content, contrast utility
- Components: Tooltip, CloudSyncStatus, SystemMonitor, StreamTracker
- Utils: costEstimator, promptInjectionGuard middleware, Zod validation schemas
- Docs: openapi.yaml +9 routes, API_REFERENCE internal APIs, version bumps
- Quality: coverage thresholds 60/50/50, error handling improvements
2026-02-15 12:33:56 -03:00
Diego Rodrigues de Sa e Souza
6964904bac
Merge pull request #38 from diegosouzapw/feature/phase10-docs-ux-cleanup
...
feat(phase10): docs restructuring, component decomposition, and cleanup
2026-02-15 11:54:27 -03:00
diegosouzapw
597c590a1d
feat(phase10): docs restructuring, component decomposition, and cleanup
...
- Split README (1326→211 lines): USER_GUIDE, API_REFERENCE, TROUBLESHOOTING
- Expand CONTRIBUTING.md (112→273 lines)
- Extract RequestLoggerDetail from RequestLoggerV2 (910→665 lines)
- Extract ProxyLogDetail from ProxyLogger (677→519 lines)
- Add accessibility attrs (aria-label, role=dialog) to extracted modals
- Migrate not-found.js inline styles to TailwindCSS gradient classes
- Remove continue-on-error from E2E CI step
- Add PolicyEngine class with glob-based policy matching
- Create a11yAudit.js (WCAG rule checker)
- Fix policyEngine test import path
2026-02-15 11:53:40 -03:00
Diego Rodrigues de Sa e Souza
a94b6a8d8c
Merge pull request #37 from diegosouzapw/feat/phase-9-llm-intelligence
...
feat(gateway): Phase 9 — LLM Gateway Intelligence
2026-02-15 11:05:37 -03:00
diegosouzapw
b08fb31a28
feat(gateway): Phase 9 — LLM Gateway Intelligence
...
9.1 — Semantic Cache
- New: src/lib/semanticCache.js — Two-tier cache (in-memory LRU + SQLite)
- Signature = SHA-256(model + normalized messages + temperature + top_p)
- Only caches non-streaming, temperature=0 requests
- X-OmniRoute-No-Cache: true header bypass
- Response headers: X-OmniRoute-Cache: HIT/MISS
- DB table: semantic_cache with indexes on signature and model
- New: src/app/api/cache/route.js — GET stats, DELETE clear
9.2 — Request Idempotency
- New: src/lib/idempotencyLayer.js — In-memory 5s dedup window
- Reads Idempotency-Key or X-Request-Id headers
- Returns cached response with X-OmniRoute-Idempotent: true header
- Ephemeral by design (no SQLite)
9.3 — Progress Tracking in Streaming
- New: open-sse/utils/progressTracker.js
- Emits SSE 'event: progress' with tokens_generated + elapsed_ms
- Opt-in via X-OmniRoute-Progress: true header
- Supports AbortSignal cancellation
- Final event includes done: true
Integration:
- chatCore.js: idempotency check → cache check → provider call → cache store → idempotency save
- Streaming path: optional progress transform chain
- DB: semantic_cache table added to db/core.js schema
Tests: 320 pass (+25 new) | Build: success
2026-02-15 11:04:51 -03:00
Diego Rodrigues de Sa e Souza
5bfd621438
Merge pull request #36 from diegosouzapw/feat/phase-8-missing-flows
...
feat(pages): Phase 8 — Missing Flows & Pages
2026-02-15 10:48:54 -03:00
diegosouzapw
034f1a7e1d
feat(pages): Phase 8 — Missing Flows & Pages
...
8.1 — 403 Forbidden Page
- New: src/app/forbidden/page.js
- Gradient code + Access Denied message + Dashboard link
- Consistent design with not-found.js
8.2 — Password Recovery Flow
- New: src/app/forgot-password/page.js
- Two methods: CLI reset + manual database reset
- Added 'Forgot password?' link to login page
8.3 — Health/Status Dashboard
- New: src/app/(dashboard)/dashboard/health/page.js
- New: src/app/api/monitoring/health/route.js
- Cards: Uptime, Version, Memory, Provider count
- Provider health (circuit breaker states with color coding)
- Rate limit status table
- Active lockouts list
- Auto-refresh every 15s
- Added Health nav link to Sidebar
8.4 — Maintenance Banner
- New: src/shared/components/MaintenanceBanner.js
- Auto-detects server health issues every 10s
- Shows/hides automatically, dismissible
- Wired into DashboardLayout
8.5 — Empty States
- Verified EmptyState component applied in 6+ pages
- Providers page has its own empty handling
Bonus:
- Fixed stale GitHub link in Sidebar (decolua → diegosouzapw)
Tests: 295 pass | Build: success
2026-02-15 10:46:11 -03:00
Diego Rodrigues de Sa e Souza
bc95095f82
Merge pull request #35 from diegosouzapw/refactor/phase-7-api-code-quality
...
feat(api): Phase 7 — API & Code Quality
2026-02-15 10:16:34 -03:00
diegosouzapw
7cf8ae8db6
feat(api): Phase 7 — API & Code Quality
...
7.1 — Consolidated rate-limit routes
- Merged rate-limit/ and rate-limits/ into rate-limits/route.js
- GET returns connections + overview + lockouts + cacheStats (unified)
- POST handles toggle protection
- Old rate-limit/ now redirects 308 → rate-limits/
- Updated frontend fetch URL in providers/[id]/page.js
7.2 — Zod schema for provider constants
- New: src/shared/validation/providerSchema.js
- Validates FREE_PROVIDERS, OAUTH_PROVIDERS, APIKEY_PROVIDERS at module load
- Catches config drift (invalid colors, missing fields) at startup
7.3 — TailwindCSS error pages
- Converted not-found.js inline styles → Tailwind classes
- Converted global-error.js inline styles → Tailwind classes
- Replaced JS hover handlers with Tailwind hover: utilities
7.4 — Fixed GitHub link in privacy page
- decolua/omniroute → diegosouzapw/OmniRoute
7.5 — Already completed in Phase 5
Tests: 295 pass | Build: success
2026-02-15 10:15:44 -03:00
Diego Rodrigues de Sa e Souza
05e93fa9b0
Merge pull request #34 from diegosouzapw/fix/phase-6-6-sse-dedup-analysis
...
fix(sse): resolve ghost import in chatHelpers.js (Phase 6.6)
2026-02-15 08:17:00 -03:00
diegosouzapw
1acaf66dd0
fix(sse): resolve ghost import in chatHelpers.js
...
chatHelpers.js imported detectFormat/getTargetFormat/getModelTargetFormat
from '../services/translator.js' which does not exist.
Fixed to import from canonical sources:
- detectFormat, getTargetFormat → @omniroute/open-sse/services/provider.js
- getModelTargetFormat, PROVIDER_ID_TO_ALIAS → @omniroute/open-sse/config/providerModels.js
Phase 6.6 analysis: src/sse/ is an intentional adapter layer over
open-sse/ (not duplication). No further deduplication needed.
2026-02-15 08:16:26 -03:00
Diego Rodrigues de Sa e Souza
1cee3ec8ff
Merge pull request #33 from diegosouzapw/refactor/phase-5-6-architecture
...
refactor(phase5-6): domain persistence, policy engine, OAuth extraction
2026-02-15 08:12:56 -03:00
diegosouzapw
33c28f73db
refactor(phase5-6): domain persistence, policy engine, OAuth extraction, proxy decoupling
...
Phase 5 — Foundation & Security:
- SQLite domain state persistence (5 tables, 4 modules: fallback, budget, lockout, circuit breaker)
- Write-through cache pattern for state survival across restarts
- Race condition fix in route.js (Promise-based singleton)
- Default password hardening (.env.example)
- Server init error handling improvement
Phase 6 — Architecture Refactoring:
- OAuth providers extracted into 12 individual modules (providers.js 1051→144 lines)
- Policy Engine (lockout→budget→fallback) with evaluateRequest/evaluateFirstAllowed
- Deterministic round-robin via persistent counter Map
- Telemetry window fix with proper recordedAt timestamps
- Proxy decoupled from API settings (direct import vs HTTP self-fetch)
Tests: 295 pass (22 new: domain-persistence 16, policy-engine 6)
Docs: CHANGELOG, README, ARCHITECTURE.md updated
2026-02-15 08:12:12 -03:00
diegosouzapw
25f4f5987c
Merge feature/release-0.3.0: docs and changelog for v0.3.0 release
v0.3.0
2026-02-15 02:06:36 -03:00
diegosouzapw
4269c25a9f
docs: update CHANGELOG, README, and ARCHITECTURE for v0.3.0 release
...
- CHANGELOG.md: comprehensive v0.3.0 entry with security hardening, domain layer,
pipeline wiring, 9 API routes, frontend 100% coverage, rate limit overhaul
(4 phases), ADRs, compliance, eval framework, 273+ tests
- README.md: add 10 new feature rows (circuit breaker, anti-thundering herd,
resilience profiles/UI, cost budgets, telemetry, correlation IDs, compliance,
model availability, eval framework), update tech stack and release example
- ARCHITECTURE.md: add domain layer modules, resilience modules, 11 new API
routes, usageDb decomposition note, update date
2026-02-15 02:06:14 -03:00
diegosouzapw
87b36dc197
Merge feature/rate-limit-overhaul: rate limit overhaul (4 phases)
2026-02-15 01:47:14 -03:00
diegosouzapw
6e29bd1197
feat(resilience): rate limit overhaul — exponential backoff, circuit breaker, anti-thundering herd, Resilience UI
...
Phase 1: Error classification + provider profiles (constants, providerRegistry, accountFallback)
Phase 2: Circuit breaker integration in combo pipeline (combo.js)
Phase 3: Anti-thundering herd mutex + auto rate limits for API key providers (auth.js, rateLimitManager)
Phase 4: Frontend Resilience tab with Circuit Breaker, Provider Profiles, Rate Limit cards
Tests: 63/63 passing (error-classification, combo-circuit-breaker, thundering-herd, rate-limit-enhanced)
2026-02-15 01:42:50 -03:00
diegosouzapw
5db6676319
feat: detect and handle unrecoverable refresh token errors by marking connections as expired and requiring re-authentication.
2026-02-14 22:04:00 -03:00
Diego Rodrigues de Sa e Souza
d08b3889d3
Merge pull request #32 from diegosouzapw/feature/frontend-100-coverage
...
feat(frontend): 100% backend API coverage — 7 batches
2026-02-14 21:05:32 -03:00
diegosouzapw
443e5b7b62
feat(frontend): 100% backend API coverage — 7 batches
...
Batch A: Fix Breadcrumbs (usePathname), rewrite ComplianceTab (DataTable+FilterBar+ColumnToggle), delete dead code (a11yAudit.js, policyEngine.js), wire toast notifications (Combos, Providers)
Batch B: ModelAvailabilityPanel — cooldown badges, clear action, auto-refresh
Batch C: BudgetTab — spend cards, progress bars, budget limits form
Batch D: FallbackChainsEditor — color-coded provider chains, create/delete
Batch E: PoliciesPanel — circuit breaker states, locked identifiers, force unlock
Batch F: EvalsTab — expandable suites, run eval, DataTable results
Batch G: TokenHealthBadge + /api/token-health — OAuth health in header
8 new files, 9 modified, 2 deleted. Build passes (exit 0).
2026-02-14 21:04:51 -03:00
Diego Rodrigues de Sa e Souza
b87e04db22
Merge pull request #31 from diegosouzapw/feature/cleanup-and-tests
...
chore: integration wiring tests + branch cleanup
2026-02-14 20:24:01 -03:00
diegosouzapw
4341254b5d
chore: add integration wiring tests + branch cleanup
...
Batch 5 — Cleanup + Tests:
- Delete 4 stale local branches
- Prune 18 stale remote refs
- Add integration-wiring.test.mjs: 44 tests across 12 suites
verifying all 5 batches of pipeline/API/UI integration
All 44/44 tests pass.
2026-02-14 20:23:46 -03:00
Diego Rodrigues de Sa e Souza
6718b23d57
Merge pull request #30 from diegosouzapw/feature/page-integration
...
feat(ui): wire budget/telemetry/compliance into dashboard pages
2026-02-14 20:21:28 -03:00
diegosouzapw
e3fc9387be
feat(ui): wire budget/telemetry/compliance into dashboard pages
...
Batch 4 — Page Integration:
- Usage page: add BudgetTelemetryCards (latency p50/p95/p99, cache, system health)
- Settings page: add ComplianceTab (audit log), CacheStatsCard (prompt cache + flush)
- Combos page: replace inline empty state with EmptyState component
3 new components, 3 page modifications. Build verified: exit code 0
2026-02-14 20:21:15 -03:00
Diego Rodrigues de Sa e Souza
c094c9c678
Merge pull request #29 from diegosouzapw/feature/barrel-exports-layout
...
feat(ui): export 6 shared components + notificationStore, wire into layout
2026-02-14 20:15:48 -03:00
diegosouzapw
388f06c74f
feat(ui): export 6 shared components + notificationStore, wire into layout
...
Batch 3 — Barrel Exports + Layout:
- shared/components/index.js: export Breadcrumbs, EmptyState, NotificationToast,
FilterBar, ColumnToggle, DataTable
- store/index.js: export useNotificationStore
- DashboardLayout.js: render <Breadcrumbs/> between Header and content,
render <NotificationToast/> as global fixed overlay
Build verified: exit code 0
2026-02-14 20:15:33 -03:00
Diego Rodrigues de Sa e Souza
91f6750d59
Merge pull request #28 from diegosouzapw/feature/api-routes
...
feat(api): create 9 API routes for backend module access
2026-02-14 20:11:42 -03:00
diegosouzapw
7e066df6cd
feat(api): create 9 API routes for backend module access
...
Batch 2 — API Routes:
- /api/cache/stats — GET cache stats, DELETE flush
- /api/models/availability — GET availability report, POST clear cooldown
- /api/telemetry/summary — GET p50/p95/p99 latency metrics
- /api/usage/budget — GET cost summary, POST set budget per key
- /api/fallback/chains — GET/POST/DELETE fallback chain management
- /api/compliance/audit-log — GET filterable audit log
- /api/evals — GET list suites, POST run suite
- /api/evals/[suiteId] — GET suite details
- /api/policies — GET circuit breaker + lockout status, POST force-unlock
Build verified: exit code 0
2026-02-14 20:11:27 -03:00
Diego Rodrigues de Sa e Souza
33f8123835
Merge pull request #27 from diegosouzapw/feature/pipeline-wiring
...
feat(pipeline): wire 7 backend modules into request pipeline
2026-02-14 20:07:02 -03:00
diegosouzapw
e87067f2fb
feat(pipeline): wire 7 backend modules into request pipeline
...
Batch 1 — Pipeline Wiring:
- server-init.js: initialize compliance audit_log, run expired log cleanup, log server.start
- chat.js: wire circuitBreaker (provider resilience), modelAvailability (TTL cooldowns),
requestTelemetry (7-phase lifecycle), requestId, costRules (budget check/record),
compliance audit logging. All wiring is non-breaking with try/catch guards.
- proxy.js: replace bare fetch() with fetchWithTimeout (5s timeout on /api/settings),
add X-Request-Id header for end-to-end tracing
- 307/307 tests pass, build succeeds
2026-02-14 20:06:44 -03:00
diegosouzapw
a9a85fdc1b
fix: add Record type annotation to getAllFallbackChains result
2026-02-14 19:43:19 -03:00
Diego Rodrigues de Sa e Souza
31c09f08e1
Merge pull request #26 from diegosouzapw/fix/eslint-v9-compatibility
...
fix: downgrade ESLint v10→v9 for eslint-config-next compatibility
2026-02-14 19:36:19 -03:00