mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-03 13:52:09 +03:00
8c11acaa33d0becc2add80b063d2a94de202f981
17 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
46e5aa5522 |
refactor(api): consolidate auth routing and provider config handling
Centralize optional API key capability checks so dashboard forms and provider schemas share the same rules, including keyless Pollinations support and cloud-agent batch testing mode. Also align auto-combo config on `routerStrategy`, keep legacy combo reads compatible, preserve MCP routes as management APIs, narrow `require-login` public access to readonly/bootstrap flows, and make cloud-agent CORS reflect the request origin for credentialed requests. |
||
|
|
99c6dc7fd6 |
Release v3.7.9 (#1917)
* chore(release): v3.7.9 — gemini-cli cloud code separation * chore(provider): Update Jina AI model catalog (#1874) Integrated into release/v3.7.9 * docs: update CHANGELOG for PR 1874 and retroactive credits * fix: resolve stream defaults and codex prompt mapping (#1873, #1872) * chore(compression): start caveman compression update * feat(compression): expand caveman compression and analytics pipeline Add caveman intensity levels, output mode instructions, validation, and preview diffs across the compression pipeline. Extend MCP and dashboard settings to support auto-trigger mode, system prompt preservation, MCP description compression, and caveman rule metadata. Record richer compression analytics with receipt fields, validation fallbacks, output mode data, and add the related database migration. Improve preservation handling for code, URLs, markdown, math, and other protected content while adding broad unit, integration, and golden-set coverage for caveman parity and compression behavior. * feat(compression): expose rule intensities and track usd savings Add estimated USD savings to compression analytics so saved tokens can be reported in cost terms alongside existing token metrics. Expose caveman rule intensity metadata for settings consumers and add a settings API route alias for rule lookup. Also preserve system prompts when aggressive compression falls back to lite mode. * feat(compression): RTK compression roadmap (#1889) * chore(rtk): initialize compression roadmap branch * feat(compression): add RTK engine and compression combos Introduce RTK command-aware tool-output compression alongside stacked RTK -> Caveman pipelines for mixed prompt contexts. Add engine registration, declarative RTK filter packs, language-aware Caveman rule loading, compression combo persistence and assignments, analytics grouped by engine/combo, and new MCP/API endpoints for configuration, previews, filters, and combo management. Expose the new capabilities in the dashboard with dedicated Context & Cache pages for Caveman, RTK, and compression combos, and update docs, i18n strings, migrations, and tests to cover the expanded compression surface. * feat(compression): expand RTK DSL, filter catalog, and recovery APIs Add RTK parity features across the compression pipeline, dashboard, and management APIs. This expands the built-in filter catalog, adds trust-gated custom filter loading, inline filter verification, code stripping, smarter detection, and optional redacted raw-output retention for authenticated recovery. Also extend Caveman with file-based multilingual rule packs, localized output-mode instructions, stricter preview/config schemas, engine registry metadata, analytics fields, and broad unit test coverage for RTK, rule loading, and stacked compression behavior. * fix(auth): protect oauth routes and health reset operations Require authenticated dashboard access for OAuth endpoints that can create or import provider connections when login enforcement is enabled. Move `/api/monitoring/health` to the readonly public route list so safe methods remain public while DELETE now returns 401 for anonymous requests. Also update Next.js native `.node` handling to avoid webpack parse failures from external packages such as ngrok and keytar, and add coverage for the new auth behavior. * build(compression): ship RTK rule and filter assets with app bundles Include compression JSON assets in Next output tracing, prepublish copies, and pack artifact policy checks so standalone and packaged builds can load RTK filters and caveman rule packs at runtime. Also harden compression runtime behavior by resolving alternate asset directories, scoping rule cache entries by source path, carrying RTK raw output pointers through stacked runs, degrading oversized preview diffs, and applying combo language/output mode defaults during chat routing. Add coverage for packaging rules, provider-scoped model parsing, smart truncate edge cases, raw output retention, and combo-driven compression behavior. * docs(workflows): update local repo paths to OmniRoute Replace outdated `/home/diegosouzapw/dev/proxys/9router` references with the current `OmniRoute` directory across deploy, release, and version bump workflow guides so local command examples match the renamed repository layout * feat(compression): complete RTK parity coverage * test(build): align next config assertions --------- Co-authored-by: diegosouzapw <diego.souza.pw@gmail.com> * feat(compression): expand caveman parity and MCP metadata compression Compress MCP registry and list metadata descriptions for tools, prompts, resources, and resource templates while keeping tool-response bodies unchanged. Expose those savings in compression status as `mcp_metadata_estimate` metadata rather than provider usage. Add Caveman rule-pack support for custom regex flags and match-specific replacement maps, update English rules for upstream parity, and tighten article and pleasantry handling. Also process RTK multipart text blocks independently so mixed media content compresses safely without duplicating output. * feat(compression): unify config validation and persist MCP savings Centralize compression config schemas across settings, preview, RTK, and combo APIs to enforce consistent validation for stacked pipelines and engine-specific options. Expand caveman and stacked compression behavior by applying default combos at runtime, surfacing validation and fallback metadata, and exposing aggressive and ultra adapter schemas for configuration UI and tests. Persist MCP description compression snapshots into analytics without counting them as provider usage, and extend the dashboard with the new RTK controls and localized labels. * fix(auth): require dashboard management auth for compression preview Block preview requests unless they come from a valid management session token so protected settings cannot be probed through the preview API. Add unit coverage for unauthenticated requests, invalid bearer tokens, and successful authenticated preview execution. * fix(compression): preserve stacked defaults and secure metadata routes Only apply saved default compression combos when they contain a stacked pipeline so seeded Caveman-only defaults do not replace the builtin stacked behavior. Also require management auth for compression language pack and rules metadata endpoints, and defer usage receipt attachment until compression analytics writes have completed to keep analytics records consistent. * fix(compression): align seeded standard savings combo with stacked default Update the seeded default compression combo to use the RTK then Caveman pipeline in both fresh installs and upgraded databases. Add a targeted migration and runtime guard that only rewrites the legacy seeded record when its original metadata and single-step pipeline still match, preserving user-customized default combos. Refresh docs and tests to reflect the stacked default and expanded RTK filter catalog. * docs(compression): document RTK+Caveman stacked savings ranges Refresh the compression docs and README to describe the default stacked pipeline in terms of eligible-context savings instead of the older generic token-saving range. Add upstream RTK and Caveman benchmark references, explain the multiplicative savings math behind the stacked default, and update feature summaries plus package metadata to match the revised positioning. * feat(image-gen): add NanoGPT image generation provider (#1899) Integrated into release/v3.7.9 * fix(codex): sanitize raw responses input (#1895) Integrated into release/v3.7.9 * Fix combo provider breaker profile handling (#1891) Integrated into release/v3.7.9 * fix(combos): align strategy contracts (#1892) Integrated into release/v3.7.9 * feat(proxy): move proxy configuration to dedicated System → Proxy page (#1907) Integrated into release/v3.7.9 * feat: add K/M/B/T cost shortener to prevent UI overflow (#1902) Integrated into release/v3.7.9 * feat(providers): implement bulk paste for extra API keys (#1916) Integrated into release/v3.7.9 * fix(migrations): treat duplicate-column ALTER as no-op (#1886) Integrated into release/v3.7.9 * fix(analytics): robust model pricing resolution, dark mode charts and SQL aggregation fixes (#1896) Integrated into release/v3.7.9 (migration renumbered to 044) * fix(oauth): per-connection mutex for rotating refresh tokens (#1885) Integrated into release/v3.7.9 * fix: resolve 3 bugs — Codex tool normalization (#1914), image gen proxy (#1904), zero-arg MCP tools (#1898) - fix(codex): flatten Chat Completions tool format to Responses format in normalizeCodexTools. Prevents 'Missing required parameter: tools[0].name' upstream errors when clients send {type:'function', function:{name,...}} instead of {type:'function', name,...}. - fix(proxy): add proxy-aware execution context to image generation route. Image requests now correctly use proxy settings from the connection's ProxyRegistry assignment, matching the pattern used by chat pipeline. - fix(translator): inject properties:{} into zero-argument MCP tool schemas during Anthropic→OpenAI translation. OpenAI strict mode requires explicit properties even for empty object schemas. Closes #1914, Closes #1904, Closes #1898 * chore(release): v3.7.9 — all changes in ONE commit * fix: allow local ollama provider connections (#1893) * fix(copilot): emit compatible reasoning text deltas (#1919) Integrated into release/v3.7.9 * fix(api-manager): show validation errors inline in modals, not behind backdrop (#1920) Integrated into release/v3.7.9 * docs: update changelog and pr body with merged prs * fix(providers): route agentrouter through anthropic endpoint headers Update the AgentRouter provider registry to use the Claude-compatible messages API and required Anthropic-style authentication headers. This bypasses unauthorized_client_error responses and exposes the supported model list through passthrough configuration. Also update the changelog and release PR notes to document the fix for #1921 * feat(logs): show compression tokens in request log UI (#1923) * docs: add PR #1923 to changelog --------- Co-authored-by: diegosouzapw <diego.souza.pw@gmail.com> Co-authored-by: backryun <bakryun0718@proton.me> Co-authored-by: Aculeasis <42580940+Aculeasis@users.noreply.github.com> Co-authored-by: Raxxoor <manker_lol@hotmail.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: Tubagus <54710482+0xtbug@users.noreply.github.com> Co-authored-by: smartenok-ops <smartenok@gmail.com> Co-authored-by: Gi99lin <74502520+Gi99lin@users.noreply.github.com> Co-authored-by: ivan-mezentsev <ivan@mezentsev.me> Co-authored-by: Andrew Munsell <andrew@wizardapps.net> |
||
|
|
f3226b7f8d |
feat: integrate 1proxy free proxy marketplace (closes #1788) (#1847)
Integrated into release/v3.7.8 |
||
|
|
24ffdde03d |
Release v3.7.5 (#1753)
* docs(changelog): record PR #1748 for next release * fix(models): apply blocked providers filter to non-chat catalog models (#1752) * chore(release): v3.7.5 — integrate ngrok tunnel and fix models filter (#1753, #1752) * chore(release): update changelog format for v3.7.5 * Speed up endpoint initial render * Address endpoint review feedback * Add endpoint loading model translations * fix: resolve build issues and implement memory UPSERT logic (#1763) * fix: resolve build issues for v3.7.5 and apply memory/translation fixes 1. antigravityHeaders.ts: restore ANTIGRAVITY_LOAD_CODE_ASSIST_* exports for oauth.ts compatibility 2. next.config.mjs: add @ngrok/ngrok to serverExternalPackages and webpack externals to handle native .node modules 3. Memory system: UPSERT logic to prevent duplicate entries with same apiKeyId + key 4. Chinese translations: complete CLI tools and memory dashboard localizations 5. Test fixes: unique keys for pagination tests to comply with unique constraint Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address Gemini Code Assist review feedback 1. store.ts: add expires_at to UPDATE statement in UPSERT logic - Previously, expires_at was not being persisted to database on update - This caused state mismatch between returned Memory object and actual DB row 2. package-lock.json: revert react-markdown registry to official npmjs.org - Mirror-specific registry URL (npmmirror.com) should not be in lockfile Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * fix(antigravity): normalize Gemini bridge payloads (#1769) * fix(antigravity): normalize Gemini bridge payloads Clamp Claude bridge output tokens, use Gemini-valid system roles and tool names, and serialize antigravity requests from a cloned body so Cloud Code payload shaping stays valid. * fix(cli): stop fallback after unsafe known paths Preserve known-path security checks by stopping command discovery when a configured CLI path is suspicious or non-executable, instead of falling through to PATH discovery. * test(memory): make query result assertion deterministic Avoid relying on database result ordering when checking filtered memory keys so the unit suite remains stable across runs. * fix(review): preserve safe cloning and CLI reasons Handle non-cloneable antigravity request bodies without throwing and preserve specific CLI known-path failure reasons instead of masking them as not_found. * fix(sse): propagate AbortSignal to pre-fetch semaphore and rate-limit awaits (#1771) When a combo target takes too long, the request-level deadline fires and calls abortController.abort() on the stream controller, but the abort signal never reaches pending awaits in acquireAccountSemaphore() or withRateLimit(). These awaits sit between stream controller creation and executor.execute(), causing requests to hang indefinitely past the 600s deadline. Pass streamController.signal to both functions so they can respond to abort events and terminate early when the request deadline expires. Signed-off-by: wucm667 <stevenwucongmin@gmail.com> * Fix model sync import handling (#1755) * Fix model sync import handling * Align model import storage semantics * Address model review feedback * fix(codex): stabilize copilot responses reasoning and tool replay (#1750) * chore(xiaomi): Update Xiaomi provider model list (#1759) * Move DB health to management API (#1757) * Move DB health to management API * Address DB health review feedback * fix(kiro): support organization IDC OAuth with regional endpoints and refresh (#1754) * fix(kiro): support organization IDC OAuth with regional endpoints and refresh * fix(kiro): refresh IDC tokens with stored region --------- Co-authored-by: ngocdb <ngocdb@ngocdb.local> * chore(workflows): add strict PR contributor credit policy - Add ABSOLUTE PROHIBITION section to review-prs.md - Add PR PROHIBITION rule to resolve-issues.md - Add contributor credit rule to AGENTS.md Review Focus - Based on audit finding: 37 PRs had code absorbed without merge credit * chore(release): acknowledge 29 community contributors with retroactive credit This commit formally recognizes 29 contributors whose code was manually integrated across releases v3.4.0 through v3.7.4 without proper GitHub merge credit. Their PRs were resolved locally due to merge conflicts but closed instead of merged, preventing them from appearing in the Contributors graph. We have updated our workflows to ensure this never happens again. Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Benson K B <4044180+benzntech@users.noreply.github.com> Co-authored-by: clousky2020 <33016567+clousky2020@users.noreply.github.com> Co-authored-by: Raxxoor <7317522+dhaern@users.noreply.github.com> Co-authored-by: Jason Landbridge <15127381+JasonLandbridge@users.noreply.github.com> Co-authored-by: slewis3600 <35925982+slewis3600@users.noreply.github.com> Co-authored-by: Markus Hartung <12826053+hartmark@users.noreply.github.com> Co-authored-by: Hernan Javier Ardila Sanchez <204746071+herjarsa@users.noreply.github.com> Co-authored-by: 3_1_3_u <5846351+andruwa13@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: i1hwan <35260883+i1hwan@users.noreply.github.com> Co-authored-by: xandr0s <1709302+xandr0s@users.noreply.github.com> Co-authored-by: backryun <24198422+backryun@users.noreply.github.com> Co-authored-by: Owen <36758131+kang-heewon@users.noreply.github.com> Co-authored-by: Ravi Tharuma <25951435+RaviTharuma@users.noreply.github.com> Co-authored-by: Chris <3751981+christopher-s@users.noreply.github.com> Co-authored-by: Wellington Fonseca <5421548+wlfonseca@users.noreply.github.com> Co-authored-by: Ethan Hunt <136065060+only4copilot@users.noreply.github.com> Co-authored-by: tombii <6607822+tombii@users.noreply.github.com> Co-authored-by: AndrewDragonIV <7906124+AndrewDragonIV@users.noreply.github.com> Co-authored-by: Danh Thanh <50534210+dt418@users.noreply.github.com> Co-authored-by: Will F <30637450+willbnu@users.noreply.github.com> Co-authored-by: defhouse <232128212+defhouse@users.noreply.github.com> Co-authored-by: Skydwest <186351198+mercs2910@users.noreply.github.com> Co-authored-by: zenobit <6384793+zen0bit@users.noreply.github.com> Co-authored-by: Ivan <16905671+razllivan@users.noreply.github.com> Co-authored-by: foxy1402 <45601526+foxy1402@users.noreply.github.com> Co-authored-by: Luan Dias <65574834+luandiasrj@users.noreply.github.com> Co-authored-by: Sergei Korolev <891832+knopki@users.noreply.github.com> Co-authored-by: dail45 <69967573+dail45@users.noreply.github.com> * fix(combo): include 429 in provider circuit breaker to stop infinite retry on exhausted quotas (#1767) Previously, PROVIDER_FAILURE_ERROR_CODES only included {408, 500, 502, 503, 504}, meaning 429 responses never counted toward the circuit breaker threshold. This caused exhausted accounts to be retried every 3-5 seconds indefinitely instead of being blocked by the provider breaker. Adding 429 ensures persistent rate limiting triggers the circuit breaker after the configured failure threshold, giving the provider time to recover. * fix(claude): respect client thinking/effort params to prevent forced quota drain (#1761) Previously, OmniRoute unconditionally injected thinking: {type: 'adaptive'} and output_config: {effort: 'high'} for Claude Opus 4.7 in Claude Code client requests. This caused Claude Max 5h quota to drain in ~15 minutes. Now checks the original client body: if thinking or output_config are explicitly set (even to null or a different value), the injection is skipped. Users can opt-out by sending thinking: null or output_config: {effort: 'low'}. * Add MseeP.ai badge to README.md (#1727) Integrated into release/v3.7.5 * chore(docs): update CHANGELOG for PR #1727 * fix(tests): update stream-utils assertion for responses api compliance * feat: Fix support for claude-cli using Gemini provider (#1779) Integrated into release/v3.7.5 * fix(codex): align client identity metadata (#1778) Integrated into release/v3.7.5 * fix(blackbox-web): correct cookie name and populate session/subscription fields (#1776) Integrated into release/v3.7.5 * Fix Codex /responses/compact passthrough (#1777) Integrated into release/v3.7.5 * test(reasoning-cache): isolate DB state using mkdtempSync to prevent 401 middleware errors * chore(release): v3.7.5 — integrate remaining PRs and finalize stability * chore(config): remove local patch artifacts and trim workspace config Delete temporary patch scripts and local OMC session files that should not ship with the repository. Also remove the Next.js config file and expand editor and TypeScript exclusions to ignore large local workspace directories and reduce unnecessary indexing. * fix(antigravity): cap Claude bridge output tokens (#1785) Integrated into release/v3.7.5 * fix(codex): stabilize Copilot responses replay state (#1791) Integrated into release/v3.7.5 * fix(chatgpt-web): restore validator + expand model catalog to ChatGPT Plus tier (#1792) Integrated into release/v3.7.5 * fix(antigravity): scrub internal OmniRoute headers (#1794) Integrated into release/v3.7.5 * fix(grok-web): fix Grok validator and cookie parsing (#1793) Integrated into release/v3.7.5 * chore(release): v3.7.5 — finalize changelog for LTS patch * feat(api-keys): add rename support in permissions modal Add an editable key name field at the top of the permissions modal, allowing users to rename API keys alongside existing permission settings. The backend already supported name updates via PATCH /api/keys/:id — this wires the UI to send the name field and refreshes the key list on success. Changes: - Add keyName state and text input to PermissionsModal - Update handleUpdatePermissions to validate and send name in PATCH body - Add integration test for rename via PATCH (valid, empty, too-long names) - Update E2E mock to handle PATCH requests * chore(release): finalize v3.7.5 LTS release with schema and db initialization fixes * test: fix json escaping in stream-utilities test * fix(build): restore next.config.mjs that was accidentally deleted * fix(sse): decrement pending requests on passthrough mode failure (#1798) Integrated into release/v3.7.5 * fix(grok-web): repair validator probe + accept full cookie blobs (#1793) Integrated into release/v3.7.5 * docs(i18n): sync documentation updates to 40 languages --------- Signed-off-by: wucm667 <stevenwucongmin@gmail.com> Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> Co-authored-by: R.D. <rogerproself@gmail.com> Co-authored-by: clousky2020 <33016567+clousky2020@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: cloudy <37777261+uwuclxdy@users.noreply.github.com> Co-authored-by: wucm667 <109257021+wucm667@users.noreply.github.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: ivan-mezentsev <ivan@mezentsev.me> Co-authored-by: backryun <bakryun0718@proton.me> Co-authored-by: Dao Bao Ngoc <42265865+daongoc315@users.noreply.github.com> Co-authored-by: ngocdb <ngocdb@ngocdb.local> Co-authored-by: Benson K B <4044180+benzntech@users.noreply.github.com> Co-authored-by: Raxxoor <7317522+dhaern@users.noreply.github.com> Co-authored-by: Jason Landbridge <15127381+JasonLandbridge@users.noreply.github.com> Co-authored-by: slewis3600 <35925982+slewis3600@users.noreply.github.com> Co-authored-by: Markus Hartung <12826053+hartmark@users.noreply.github.com> Co-authored-by: Hernan Javier Ardila Sanchez <204746071+herjarsa@users.noreply.github.com> Co-authored-by: 3_1_3_u <5846351+andruwa13@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: i1hwan <35260883+i1hwan@users.noreply.github.com> Co-authored-by: xandr0s <1709302+xandr0s@users.noreply.github.com> Co-authored-by: backryun <24198422+backryun@users.noreply.github.com> Co-authored-by: Owen <36758131+kang-heewon@users.noreply.github.com> Co-authored-by: Ravi Tharuma <25951435+RaviTharuma@users.noreply.github.com> Co-authored-by: Chris <3751981+christopher-s@users.noreply.github.com> Co-authored-by: Wellington Fonseca <5421548+wlfonseca@users.noreply.github.com> Co-authored-by: Ethan Hunt <136065060+only4copilot@users.noreply.github.com> Co-authored-by: tombii <6607822+tombii@users.noreply.github.com> Co-authored-by: AndrewDragonIV <7906124+AndrewDragonIV@users.noreply.github.com> Co-authored-by: Danh Thanh <50534210+dt418@users.noreply.github.com> Co-authored-by: Will F <30637450+willbnu@users.noreply.github.com> Co-authored-by: defhouse <232128212+defhouse@users.noreply.github.com> Co-authored-by: Skydwest <186351198+mercs2910@users.noreply.github.com> Co-authored-by: zenobit <6384793+zen0bit@users.noreply.github.com> Co-authored-by: Ivan <16905671+razllivan@users.noreply.github.com> Co-authored-by: foxy1402 <45601526+foxy1402@users.noreply.github.com> Co-authored-by: Luan Dias <65574834+luandiasrj@users.noreply.github.com> Co-authored-by: Sergei Korolev <891832+knopki@users.noreply.github.com> Co-authored-by: dail45 <69967573+dail45@users.noreply.github.com> Co-authored-by: MseeP.ai <mseep@skydeck.ai> Co-authored-by: Markus Hartung <mail@hartmark.se> Co-authored-by: Raxxoor <manker_lol@hotmail.com> Co-authored-by: Jack <5443152+hijak@users.noreply.github.com> Co-authored-by: Sergey Morozov <tr0st@bk.ru> Co-authored-by: payne <baboialex95@gmail.com> Co-authored-by: Antigravity Assistant <bot@antigravity.local> Co-authored-by: Andrew Munsell <andrew@wizardapps.net> |
||
|
|
47468636e4 |
feat(dashboard): expand observability and provider tooling
Unify audit access under the logs experience and add richer active request visibility with sanitized client and provider payload previews. Expose provider warnings from upstream responses in compliance audit logs, surface learned rate-limit header data in health monitoring, and add MCP cache stats and cache flush tools with test coverage. Also add local provider catalog support for SD WebUI and ComfyUI, include video generation in endpoint docs and UI, add eval run storage migrations, and refresh docs and translations to match the expanded feature set. |
||
|
|
b38e57d452 |
refactor: unify resilience controls (#1449)
Integrated into release/v3.7.0 |
||
|
|
48467bc514 |
feat(core): add db health checks and provider interoperability
Add automated SQLite health diagnostics with optional auto-repair, startup and scheduled execution, authenticated API routes, an MCP tool, and dashboard visibility for status and repair actions. Improve provider compatibility by adding Cursor usage fetching and v3.1.0 parity headers, introducing a per-connection Codex Responses store opt-in with session fallback, fixing Codex non-stream combo and SSE translation behavior, sanitizing Gemini googleSearch tool payloads and Qwen thinking tool_choice handling, and hardening cleanup and call log storage paths. |
||
|
|
ea61d00cf7 |
feat: v3.6.4 — Combo Builder v2, Composite Tiers, P2C Credentials, Observability Layer
## New Features - Combo Builder v2 wizard UI (multi-stage: Basics → Steps → Strategy → Review) - Combo Step Architecture Schema v2 (ComboModelStep, ComboRefStep, pinned accounts) - Composite Tiers system for tiered model routing with fallback chains - Model Capabilities Registry (unified resolver merging specs + registry + synced data) - Observability module (buildHealthPayload, buildTelemetryPayload, buildSessionsSummary) - Session & Quota Monitor panels on Health dashboard - Combo Health per-target analytics via resolveNestedComboTargets() - Combo Builder Options API (GET /api/combos/builder/options) ## Performance - Middleware lazy loading (apiAuth, db/settings, modelSyncScheduler) - E2E auth bypass mode (NEXT_PUBLIC_OMNIROUTE_E2E_MODE) ## Bug Fixes - P2C credential selection with quota headroom awareness - Fixed-account combo steps bypass model cooldowns/circuit breakers - Combo metrics per-target tracking (byTarget with executionKey) - Call logs schema expansion (7 new columns + composite index) - Quota monitor lifecycle enrichment (status, snapshots, summary) - Codex quota fetcher hardening ## Maintenance - DB migration 021 (combo_call_log_targets) - Combo CRUD normalization on read - Playwright config + build script improvements - OpenAPI spec version sync to 3.6.4 ## Tests - 16 new test suites + 12 existing test updates - 86 files changed, +8318 -1378 lines |
||
|
|
1442c47bbb |
chore(release): v3.5.6 — email masking, model toggle, OpenRouter registries & bug fixes (#1080)
* fix(minimax): switch auth from x-api-key to Authorization Bearer (#1076) Integrated into release/v3.5.6 — MiniMax auth fix with authHeader consistency normalization * feat(CI,i18n): autogenerate language files + Add missing strings (#1071) Integrated into release/v3.5.6 — i18n translations for memory, skills, and missing keys across 31 languages * fix(ci): restore i18n continue-on-error, remove auto-commit race condition * fix(husky): load nvm in hooks for VS Code compatibility * fix(husky): gracefully skip hooks when npm is not in PATH * fix: convert OpenAI function tool_choice to Claude tool format (#1072) * fix: prevent EPIPE feedback loop filling logs at GB/s (#1006) * fix: fallback to native fetch when undici dispatcher fails (#1054) * fix: improve Qoder PAT validation with actionable error messages (#966) - Add QODER_PERSONAL_ACCESS_TOKEN env var fallback for both validation and execution - Pre-flight ping check to diagnose connectivity issues (Docker/proxy) - Detect encrypted auth blobs from ~/.qoder/.auth/user and guide to website PAT - Clear error messages for auth failures with link to integrations page - Treat non-auth 4xx as auth-pass (request format issue, not token issue) - Update tests to cover new validation paths (23 tests, all passing) * feat: Improve the Chinese translation (#1079) Integrated into release/v3.5.6 * chore(release): v3.5.6 — i18n updates and credential security fixes * fix(ci): resolve e2e and docs-sync pipeline failures * fix(security): bump next to 16.2.3 to resolve SNYK-JS-NEXT-15954202 * fix: guard Memory/Cache UI against null toLocaleString crash (#1083) * fix: translate OpenAI tool_choice type 'function' to Claude 'tool' format (#1072) * fix: pass custom baseUrl in provider API key validation (#1078) * docs: update CHANGELOG with v3.5.6 bug fixes and security patches * docs: rewrite implement-features workflow with 5-phase harvest-research-report-plan-execute pipeline * docs: organize _ideia/ into viable/defer/notfit + add Phase 2.5 auto-response workflow * docs: implementation plans for #1025, #750, #960, #1046 + close already-implemented #833, #973, #982 * feat: mask email addresses in dashboard for privacy (#1025) * feat: add OpenRouter and GitHub to embedding/image provider registries (#960) * feat: add model visibility toggle and search filter to provider page (#750) * docs: move implemented features to notfit, update task plans status * chore: untrack _ideia/ and _tasks/ from git — private/internal only * chore(release): bump to v3.5.6 — changelog, docs, version sync & any-budget fix * fix: remove explicit .ts extension in qoderCli import that caused 500 error in production build --------- Co-authored-by: Jean Brito <jeanfbrito@gmail.com> Co-authored-by: zenobit <zenobit@disroot.org> Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> Co-authored-by: Ethan Hunt <136065060+only4copilot@users.noreply.github.com> |
||
|
|
581ff5fc73 | docs: update system documentation and sync i18n for v3.5.5 | ||
|
|
095c84ac16 | fix(providerRegistry): remove duplicate claude-haiku-4-5-20251001 from anthropic provider to prevent ambiguous model resolution | ||
|
|
192c06cadf |
feat(api): add external pricing sync with LiteLLM source
Add a 3-tier pricing resolution system: user overrides > synced external > hardcoded defaults. New files: - src/lib/pricingSync.ts: sync engine (fetch LiteLLM, transform, store in pricing_synced namespace) - src/app/api/pricing/sync/route.ts: POST (trigger sync), GET (status), DELETE (clear synced) - tests/unit/pricing-sync.test.mjs: 12 unit tests for transform logic - open-sse/mcp-server/__tests__/pricingSync.test.ts: 11 vitest tests for MCP schema Modified files: - src/lib/db/settings.ts: getPricing() now merges 3 layers (defaults → synced → user) - src/server-init.ts: init pricing sync on startup when PRICING_SYNC_ENABLED=true - src/lib/localDb.ts: re-export pricing sync functions - open-sse/mcp-server/schemas/tools.ts: add omniroute_sync_pricing tool definition - open-sse/mcp-server/tools/advancedTools.ts: add handleSyncPricing handler - open-sse/mcp-server/server.ts: register omniroute_sync_pricing tool Opt-in (PRICING_SYNC_ENABLED=false by default), user overrides are never touched, graceful fallback on fetch failure, zero new dependencies. |
||
|
|
baa0208fa9 | feat: v2.0.0 - MCP server, A2A agent, proxy improvements and docs update | ||
|
|
0d8f28a4a4 | feat: Introduce A2A lifecycle management, add type safety to ComfyUI and stream handling, and update various handlers and translators. | ||
|
|
33dfbf0177 |
refactor: harden open-sse services, eliminate any casts, add dashboard pages
- Replace all `as any` casts in MCP advancedTools with typed helpers (toRecord, toString, toNumber) - Harden open-sse services: rateLimitManager, sessionManager, usage, roleNormalizer, signatureCache, comboMetrics - Improve responseSanitizer and responseTranslator type safety - Remove deprecated openai-responses request translator - Add dashboard pages: /a2a, /mcp, /auto-combo with live data - Improve error/loading/not-found pages with consistent design - Add root loading.tsx and typecheck tsconfig variants - Add check-t11-any-budget.mjs audit script |
||
|
|
5ecef5c90c |
feat: normalize quota and combos API responses with shared contracts
Introduce `normalizeQuotaResponse` and `normalizeCombosResponse` helpers to handle varying API response shapes (array vs wrapped object) consistently across MCP server and advanced tools. Add optional `meta` field to checkQuotaOutput schema and update sourceEndpoints to reflect current API routes. |
||
|
|
e18cfe1d80 |
feat: add Phase 3 advanced MCP tools and A2A smart routing skill
Register 8 new advanced MCP tools (simulate_route, set_budget_guard, set_resilience_profile, test_combo, get_provider_metrics, best_combo_for_task, explain_route, get_session_snapshot) with their handler implementations. Add A2A smart routing skill that routes prompts through the OmniRoute pipeline with routing explanation, cost envelope, and resilience trace metadata. |