diegosouzapw
896ce9c0e2
feat(release): v2.7.3 — fix Codex direct API weekly quota fallback
...
- fix(codex): resolveQuotaWindow() prefix-matches 'weekly' → 'weekly (7d)' cache keys
- fix(codex): applyCodexWindowPolicy() enforces useWeekly/use5h toggles in direct API
- 4 new regression tests, 766 total passing
- Closes #440
v2.7.3
2026-03-18 08:41:13 -03:00
Diego Rodrigues de Sa e Souza
82934132e9
Merge pull request #441 from rexname/fix/issue-440-direct-api-fallback
...
fix(codex): block weekly-exhausted accounts in direct API fallback
2026-03-18 08:40:19 -03:00
rexname
a2012b70de
chore(review): harden window normalization and deterministic quota matching
2026-03-18 14:17:37 +07:00
rexname
bcfeba8a57
fix(codex): enforce weekly quota blocking for direct API fallback
2026-03-18 13:57:25 +07:00
diegosouzapw
d3dfd9ce57
feat(release): v2.7.2 — fix light mode contrast in logs UI
...
- fix(logs): text colors in filter buttons + combo badge now have dark: variants
- Bumped version to 2.7.2
- Updated CHANGELOG and openapi.yaml
v2.7.2
2026-03-18 00:42:22 -03:00
Diego Rodrigues de Sa e Souza
aa06d5d356
Merge pull request #433 from diegosouzapw/fix/issue-378-logs-light-mode-contrast
...
Merged fix for light mode contrast in filter buttons and combo badge. Thanks @rdself for the great bug report!
2026-03-18 00:41:28 -03:00
diegosouzapw
448c8a29e1
fix(logs): fix light mode contrast in filter buttons and combo badge ( #378 )
...
- text-red-400 → text-red-700 dark:text-red-400 (error filter, recording button)
- text-emerald-400 → text-emerald-700 dark:text-emerald-400 (ok filter)
- text-violet-300 → text-violet-700 dark:text-violet-300 (combo filter)
- combo row badge: violet-700 → violet-800 dark:violet-300, stronger border
Fixes #378
2026-03-17 16:46:27 -03:00
diegosouzapw
928b7120f4
feat(release): v2.7.1 — unified web search routing + Next.js 16.1.7 security
...
- POST /v1/search: 5 providers (Serper, Brave, Perplexity, Exa, Tavily), 6,500+ free/mo
- Search analytics dashboard tab + GET /api/v1/search/analytics
- db: request_type column on call_logs (migration 007)
- Next.js 16.1.7: 6 CVEs fixed (critical: CVE-2026-29057 HTTP request smuggling)
- docs/openapi.yaml: bumped to 2.7.1
v2.7.1
2026-03-17 16:27:31 -03:00
diegosouzapw
a3deacd718
feat: Implement historical model latency and success rate tracking for auto-combo routing and update Claude and Deepseek pricing and model registrations.
2026-03-17 16:18:36 -03:00
diegosouzapw
78959fffbd
Merge branch 'main' of https://github.com/diegosouzapw/OmniRoute
2026-03-17 16:18:12 -03:00
Diego Rodrigues de Sa e Souza
1788616e52
Merge pull request #431 from diegosouzapw/dependabot/npm_and_yarn/next-16.1.7
...
Security update merged: Next.js 16.1.7 fixes 6 CVEs including critical CVE-2026-29057 (HTTP request smuggling). No breaking changes.
2026-03-17 16:18:01 -03:00
Diego Rodrigues de Sa e Souza
c61e6d0777
Merge pull request #432 from Regis-RCR/feat/search-provider-routing
...
Merged with dashboard improvements: SearchAnalyticsTab + /api/v1/search/analytics endpoint — PR review complete by Antigravity.
2026-03-17 16:17:39 -03:00
diegosouzapw
a3bc7620b1
feat(integration): integrate ClawRouter services into active pipeline
...
- intentClassifier → engine.ts selectProvider()
When taskType is 'default', classifies prompt via multilingual keyword
detection (9 langs) and uses detected intent (code/reasoning/simple/medium)
for 6-factor task fitness scoring.
- emergencyFallback → chatCore.ts error path (after T5 intra-family fallback)
On HTTP 402 or budget-exhaustion keywords, attempts one redirect to
nvidia/gpt-oss-120b ($0.00/M) before returning error to combo router.
Skipped for streaming requests and tool-calling requests.
- AutoComboConfig.routerStrategy field added
Allows per-combo strategy override ('rules' | 'cost' | 'latency')
Note: requestDedup was already integrated in chatCore.ts (line 387-430)
Branch: feat/clawrouter-improvements
2026-03-17 15:22:12 -03:00
diegosouzapw
8064c588dc
docs(i18n): sync v2.7.0 release notes to 29 language READMEs
...
New in v2.7.0: pluggable RouterStrategy, multilingual intent detection,
request deduplication, new providers (Grok-4 Fast, GLM-5/Z.AI,
MiniMax M2.5, Kimi K2.5). Native translations for de/es/fr/it/ru/zh-CN/ja/ko/ar/pt-BR/pt.
2026-03-17 15:11:09 -03:00
Regis
564e983c68
feat(search): add unified web search routing with 5 providers
...
Add POST /v1/search — a unified search endpoint routing queries across
5 providers (Serper, Brave, Perplexity Search, Exa, Tavily) with
automatic failover, in-memory caching, and request coalescing.
No open-source AI gateway offers unified search routing. This chains
free tiers for 5,500+ searches/month with zero downtime.
Providers: Serper ($0.001/q, 2500/mo free), Brave ($0.005/q, 1000/mo),
Perplexity Search ($0.005/q), Exa ($0.007/q, 1000/mo), Tavily
($0.008/q, 1000/mo). Auto-select picks cheapest with credentials.
Architecture follows existing patterns:
- searchRegistry.ts (same as embeddingRegistry.ts)
- search.ts handler (same as embeddings.ts)
- route.ts (same as /v1/embeddings/route.ts)
- searchCache.ts (bounded TTL cache + request coalescing)
Schema finalized — all future fields defined as optional with safe
defaults. No breaking changes when implementing content extraction,
answer synthesis, or ranking.
Key features:
- Per-provider request builders and response normalizers
- Enriched response: display_url, score, favicon_url, content block,
metadata, answer block, errors array, upstream_latency_ms metrics
- Cost-sorted auto-select with failover on 429/5xx/timeout
- Credential fallback (perplexity-search reuses perplexity chat key)
- Cache key includes all result-affecting parameters
- max_results clamped to provider limits, sanitized error responses
- Factored validators (validateSearchProvider factory)
- CORS headers on all responses
- Dashboard: Search & Discovery section, search provider template
- DB migration 007: request_type column in call_logs
- 28 unit tests (registry, cache, coalescing, validation)
2026-03-17 18:28:35 +01:00
diegosouzapw
e1da181740
fix(publish): also remove app/electron/ (contains app.asar binary) to prevent Z_DATA_ERROR
2026-03-17 14:25:48 -03:00
diegosouzapw
c63209200e
fix(publish): remove app/vscode-extension/ after build to prevent Z_DATA_ERROR in npm pack
2026-03-17 14:13:15 -03:00
diegosouzapw
737808cf53
fix(npm): exclude app/vscode-extension/ from package to prevent Z_DATA_ERROR during publish
2026-03-17 13:50:06 -03:00
diegosouzapw
a197bb7736
fix(routerStrategy): use .ts extension in imports for Next.js App Router bundle compatibility
2026-03-17 13:15:47 -03:00
dependabot[bot]
f9dd967bc5
deps: bump next from 16.1.6 to 16.1.7
...
Bumps [next](https://github.com/vercel/next.js ) from 16.1.6 to 16.1.7.
- [Release notes](https://github.com/vercel/next.js/releases )
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js )
- [Commits](https://github.com/vercel/next.js/compare/v16.1.6...v16.1.7 )
---
updated-dependencies:
- dependency-name: next
dependency-version: 16.1.7
dependency-type: direct:production
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-03-17 16:14:44 +00:00
diegosouzapw
44e4d55a66
feat(release): merge feat/clawrouter-improvements — v2.7.0
v2.7.0
2026-03-17 13:12:41 -03:00
diegosouzapw
095c84ac16
fix(providerRegistry): remove duplicate claude-haiku-4-5-20251001 from anthropic provider to prevent ambiguous model resolution
2026-03-17 13:10:23 -03:00
diegosouzapw
e063eae727
feat(clawrouter): implement 14 ClawRouter-inspired features
...
PRICING UPDATES (01-09):
- xAI Grok-4 family: grok-4-fast-non-reasoning (/usr/bin/bash.20/$0.50/M, 1143ms),
grok-4-fast-reasoning, grok-4-1-fast-*, grok-4-0709, grok-3, grok-3-mini
- Z.AI GLM-5 family: glm-5 + glm-5-turbo (128k maxOutput, $1.00/$3.20/M)
- Gemini Flash Lite: price corrected $0.15→$0.10 / $1.25→$0.40 (per ClawRouter)
- Gemini 3.1 Pro: new flagship (1.05M context, aliased as gemini-3.1-pro)
- Anthropic Claude 4.5/4.6: haiku-4.5 ($1/$5), sonnet-4.6 ($3/$15), opus-4.6 ($5/$25)
- DeepSeek native section: deepseek-chat/v3/v3.2 ($0.28/$0.42), deepseek-reasoner ($0.55/$2.19)
- Kimi K2.5 Moonshot: kimi-k2.5 ($0.60/$3.00, 262k ctx), moonshot-kimi-k2.5 alias
- MiniMax M2.5: minimax-m2.5 ($0.30/$1.20, 204k ctx, reasoning+tools)
- NVIDIA free tier: gpt-oss-120b at $0.00/M via emergencyFallback.ts
INFRASTRUCTURE FEATURES (10-14):
- feat(router): add intentClassifier.ts for multilingual intent detection (9 langs)
Detects code/reasoning/simple in EN, PT-BR, ES, ZH, JA, RU, DE, KO, AR
- feat(dedup): add requestDedup.ts for concurrent request deduplication
SHA-256 hash, skip streaming, skip high-temperature, 60s failsafe TTL
- feat(autoCombo): add routerStrategy.ts pluggable strategy system
RouterStrategy interface, RulesStrategy (6-factor) + CostStrategy, registry
- feat(fallback): add emergencyFallback.ts budget-exhaustion detector
Triggers on HTTP 402 or budget keywords, redirects to nvidia/gpt-oss-120b
- feat(taskFitness): add fitness scores for Grok-4, Kimi K2.5, GLM-5,
MiniMax M2.5, DeepSeek V3.2, Gemini 3.1 Pro across all task categories
PROVIDERS:
- providers.ts: add Z.AI (zai) provider entry for GLM-5 API key connections
All features on branch: feat/clawrouter-improvements
Source: github.com/BlockRunAI/ClawRouter analysis (2026-03-17)
2026-03-17 10:43:12 -03:00
diegosouzapw
f02c5b5c69
fix(install/v2.6.10): Windows better-sqlite3 prebuilt download ( #426 )
...
npm version patch run BEFORE staging files — this is an ATOMIC commit.
Adds Strategy 1.5 to scripts/postinstall.mjs:
- Uses @mapbox/node-pre-gyp install --fallback-to-build=false
(bundled within better-sqlite3) to download the correct prebuilt
binary for the current OS/arch (win32-x64/arm64, darwin-x64/arm64)
WITHOUT requiring node-gyp, Python, or MSVC build tools.
- Tries node-pre-gyp.cmd (Windows) or node-pre-gyp (Unix) from .bin/
with fallback to direct path in @mapbox/node-pre-gyp/bin/
- Falls back to npm rebuild only if prebuilt download fails.
- Windows-specific error: shows Option A (npx node-pre-gyp) and
Option B (rebuild) with Visual Studio Build Tools links.
Fixes : #426 (better_sqlite3.node is not a valid Win32 application)
v2.6.10
2026-03-17 10:09:45 -03:00
diegosouzapw
838f1d645c
fix(v2.6.9): CI budget checks, #409 file attachments, atomic release workflow
...
Includes version bump — v2.6.9 — committed ATOMICALLY with all changes:
fixes:
- fix(ci/t11): Remove 'any' from comments in openai-responses.ts + chatCore.ts
(\bany\b regex counted comment text as explicit any violations)
- fix(chatCore/#409): Normalize unsupported content part types before forwarding
Cursor sends {type:'file'} for .md attachments; Copilot/OpenAI providers reject
with 'type has to be either image_url or text'. Now: file/document→text block,
unknown types dropped with debug log. Fixes claude-* models via github-copilot.
workflow:
- chore(generate-release): ATOMIC COMMIT RULE — npm version patch MUST run before
feature commits so the release tag always points to a commit with full changes
v2.6.9
2026-03-17 09:09:01 -03:00
diegosouzapw
ce2c30c437
chore(release): v2.6.8 — combo agents, auto-update, detailed logs, MITM Kiro
v2.6.8
2026-03-17 08:58:03 -03:00
diegosouzapw
d56fae0a7b
feat: combo agents, auto-update UI, detailed logs, MITM Kiro ( #399 #401 #320 #378 #336 )
...
DB Migrations (zero-breaking, ADD COLUMN DEFAULT NULL + new table):
- 005_combo_agent_fields.sql: system_message, tool_filter_regex, context_cache_protection on combos
- 006_detailed_request_logs.sql: ring-buffer table (500 entries) for full pipeline body capture
Features:
- #399 System Message Override + Tool Filter Regex per Combo
- applyComboAgentMiddleware() injected into handleComboChat/handleRoundRobinCombo
- Supports both OpenAI and Anthropic tool name formats
- #401 Context Caching Protection (Stateless)
- injectModelTag() appends <omniModel>provider/model</omniModel> to responses
- extractPinnedModel() reads tag from history and pins model for session
- #320 Auto-Update via Settings
- GET /api/system/version — current vs latest npm
- POST /api/system/update — fire-and-forget npm install + pm2 restart
- #378 Detailed Request Logs
- saveRequestDetailLog() captures bodies at 4 pipeline stages (opt-in toggle)
- GET/POST /api/logs/detail — list logs + enable/disable toggle
- #336 MITM Kiro IDE
- src/mitm/targets/kiro.ts: MitmTarget profile for api.anthropic.com interception
2026-03-17 08:53:41 -03:00
diegosouzapw
e45ef00bef
chore(release): v2.6.7 — SSE fixes, local provider_nodes, proxy registry
...
PRs merged: #414 (deps) #415 #417 #419 #420 #421 (SSE fixes)
#418 (Claude passthrough) #422 #416 #423 (local nodes)
#427 (strip empty blocks) #428 (OAuth refreshable)
#429 (proxy registry)
Contributors: @prakersh, @Regis-RCR, @dependabot
v2.6.7
2026-03-17 08:17:11 -03:00
diegosouzapw
e9f31f7394
Merge pull request #429 from contributor branch
2026-03-17 08:14:05 -03:00
diegosouzapw
7c10a98eb2
Merge pull request #428 from contributor branch
2026-03-17 08:14:04 -03:00
diegosouzapw
f260483101
Merge pull request #427 from contributor branch
2026-03-17 08:14:03 -03:00
diegosouzapw
389e6e5c9e
Merge pull request #423 from contributor branch
2026-03-17 08:14:02 -03:00
diegosouzapw
1cfd5866be
Merge pull request #422 from contributor branch
2026-03-17 08:14:02 -03:00
diegosouzapw
c7ceac7f41
Merge pull request #421 from contributor branch
2026-03-17 08:14:01 -03:00
diegosouzapw
cd6eca0424
Merge pull request #420 from contributor branch
2026-03-17 08:14:00 -03:00
diegosouzapw
8c6136fea0
fix(sse): generate fallback call_id for tool calls with missing IDs ( #419 )
...
Co-authored-by: Prakersh Maheshwari <prakersh@users.noreply.github.com >
2026-03-17 08:11:53 -03:00
Diego Rodrigues de Sa e Souza
9644444028
Merge pull request #418 from prakersh/fix/claude-to-claude-passthrough
...
fix(sse): add Claude-to-Claude passthrough for anthropic-compatible providers
2026-03-17 08:09:44 -03:00
Diego Rodrigues de Sa e Souza
9c4154291d
Merge pull request #417 from prakersh/fix/orphaned-tool-result-filter
...
fix(sse): filter orphaned tool results after context compaction
2026-03-17 08:09:41 -03:00
Diego Rodrigues de Sa e Souza
533f5f6da6
Merge pull request #416 from Regis-RCR/feat/audio-provider-nodes
...
feat(audio): route audio requests to local provider_nodes
2026-03-17 08:09:38 -03:00
Diego Rodrigues de Sa e Souza
1b8de756cd
Merge pull request #415 from prakersh/fix/empty-tool-name-loop
...
fix(sse): skip empty-name tool calls in Responses API translator
2026-03-17 08:09:28 -03:00
Diego Rodrigues de Sa e Souza
650b415537
Merge pull request #414 from diegosouzapw/dependabot/npm_and_yarn/development-cc00f57801
...
deps: bump the development group with 4 updates
2026-03-17 08:09:25 -03:00
rexname
04b50329fc
fix(proxy): address PR review findings for auth, credentials, and health stats
2026-03-17 16:58:44 +07:00
Regis
25aab8c55c
feat(audio): route audio requests to local provider_nodes
...
Audio endpoints (/v1/audio/speech and /v1/audio/transcriptions) only
supported hardcoded providers from audioRegistry.ts. Local inference
backends configured as provider_nodes (e.g., MLX-Audio, oMLX) could
not serve audio through OmniRoute.
This adds a Phase 3 fallback in the audio model parser that consults
provider_nodes from the database. Local providers with api_type=openai
are automatically available for audio routing via their prefix
(e.g., mlx-audio/tts-model, omlx/whisper-large-v3-turbo).
Design: injection pattern — Next.js route handlers load provider_nodes
(async DB query) and pass them to the sync parser as a parameter.
No cross-workspace imports, no breaking changes to existing parsers.
Changes:
- Add buildDynamicAudioProvider() in audioRegistry.ts
- Add Phase 3 (provider_nodes prefix match) to parseAudioModel()
- Extend parseSpeechModel/parseTranscriptionModel with optional
dynamicProviders parameter (backward compatible)
- Load and inject provider_nodes in speech/transcription route handlers
- Dynamic providers use authType=none (local, no credentials needed)
2026-03-17 09:24:18 +01:00
Oleg Saprykin
ceda2e70c1
fix(api): add refreshable: true to claude OAuth test config
...
Claude OAuth tokens are short-lived and require refresh. The runtime
HealthCheck (open-sse) already refreshes them successfully, but the
Dashboard test endpoint was missing `refreshable: true` in its config.
This caused the Dashboard to show "auth failed / Token expired" for
Claude providers even though the tokens were being refreshed correctly
at runtime. The codex provider already had this flag set.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-17 10:47:35 +03:00
Oleg Saprykin
2908303d4b
fix(sse): strip empty text content blocks before translation
...
Anthropic API rejects requests containing {"type":"text","text":""} with
400 "text content blocks must be non-empty". Some clients like LiteLLM
passthrough and @ai-sdk/anthropic may forward empty text blocks as-is.
Filter out empty text content blocks from messages before calling
translateRequest, similar to how empty-name tools are already stripped.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-17 10:46:24 +03:00
diegosouzapw
a9f69711c6
fix(build): remove node: protocol prefix from all src/ imports (#turbopack-compat)
...
Turbopack (Next.js 15) does not process node: URL prefixes correctly when
bundling server-side files that get transitively included. Removed the node:
prefix from 17 files:
- src/lib/db/migrationRunner.ts (node:fs, node:path, node:url)
- src/lib/db/core.ts (node:path, node:fs)
- src/lib/db/backup.ts (node:path, node:fs)
- src/lib/db/prompts.ts (node:fs)
- src/lib/dataPaths.ts (node:path, node:os)
- src/app/api/settings/route.ts
- src/app/api/storage/health/route.ts
- src/app/api/oauth/[provider]/[action]/route.ts
- src/app/api/db-backups/{exportAll,import,export}/route.ts
- src/shared/middleware/correlationId.ts
- src/shared/utils/requestId.ts
- src/lib/apiBridgeServer.ts
- src/lib/cacheLayer.ts
- src/lib/semanticCache.ts
- src/lib/oauth/providers/kimi-coding.ts
Also updated generate-release.md: Docker Hub sync and dual-VPS deploy
are now mandatory steps in every release.
v2.6.6
2026-03-17 04:24:46 -03:00
diegosouzapw
a8ab16a720
chore(release): v2.6.5 — reasoning params filter, local 404 fix, Kilo Gateway, dep bumps
...
- fix(sse): strip unsupported params for o1/o1-mini/o1-pro/o3/o3-mini (PR #412 @Regis-RCR)
- fix(sse): model-only lockout (5s) for local provider 404 (PR #410 @Regis-RCR)
- feat(api): Kilo Gateway provider — 335+ models, alias 'kg' (PR #408 @Regis-RCR)
- deps: better-sqlite3 12.8, undici 7.24.4, https-proxy-agent 8 (PR #413 )
v2.6.5
2026-03-17 03:05:45 -03:00
rexname
8091b6b508
feat: implement proxy registry, management APIs, docs, and test hardening
2026-03-17 13:05:27 +07:00
Diego Rodrigues de Sa e Souza
a00ef0fc7e
Merge pull request #413 from diegosouzapw/dependabot/npm_and_yarn/production-4d4ff746af
...
deps: bump the production group with 5 updates
2026-03-17 03:03:49 -03:00
Diego Rodrigues de Sa e Souza
5ce6d615a4
Merge pull request #408 from Regis-RCR/feat/kilo-gateway-provider
...
feat(api): add Kilo Gateway provider
2026-03-17 03:03:47 -03:00