Commit Graph

1717 Commits

Author SHA1 Message Date
diegosouzapw
56608a4654 feat(ui): add batch processing dashboard page and translations 2026-04-21 19:01:48 -03:00
diegosouzapw
8bb1c83479 chore: merge release/v3.7.0 2026-04-21 18:47:17 -03:00
Hernan Javier Ardila Sanchez
b709dca2d6 feat(vision-bridge): add automatic image description fallback for non-vision models (#1476)
* feat(vision-bridge): add automatic image description fallback for non-vision models

Implements VisionBridgeGuardrail (priority 5) that intercepts image-bearing
requests to non-vision models, extracts descriptions via a configurable
vision model (default: gpt-4o-mini), and replaces images with text before
forwarding. Fails open on any error.

- Add VisionBridgeGuardrail class extending BaseGuardrail
- Add visionBridgeHelpers: extractImageParts, callVisionModel, replaceImageParts, resolveImageAsDataUri
- Add visionBridgeDefaults with configurable settings
- Register VisionBridgeGuardrail in GuardrailRegistry at priority 5
- Add 51 unit tests covering all spec scenarios (VB-S01 through VB-S10)
- Dependency injection for getSettings and callVisionModel (testable without SQLite)

Closes diegosouzapw/OmniRoute#1424

* fix(vision-bridge): resolve Anthropic API, parallel processing, provider keys, structuredClone
2026-04-21 18:14:24 -03:00
diegosouzapw
b925be2758 fix: update prompt injection test for fail-closed policy 2026-04-21 17:54:37 -03:00
Markus Hartung
2e36599d40 fix: resolve code rebase issues 2026-04-21 22:53:19 +02:00
diegosouzapw
0d852ab3e0 fix: restore local test fixes for encryption and resilience 2026-04-21 17:46:47 -03:00
cloudy
de1bea8227 fix: deduplicate case-variant anthropic-version header in Claude Code patch (#1481)
Integrated into release/v3.7.0
2026-04-21 17:18:29 -03:00
Markus Hartung
03769eb0ea feat: add support for OpenAI batch processing 2026-04-21 15:12:12 +02:00
clousky
0c24ab45af test(settings-api): add test harness for proper isolation
- create createSettingsApiHarness function with temp directory setup
- add beforeEach/afterEach hooks for storage reset between tests
- add after hook for cleanup
- use dynamic imports after env setup to ensure proper initialization
2026-04-21 16:16:53 +08:00
Marcus Bearden
496114ae8b fix(sse): enable tool calling for GPT OSS and DeepSeek Reasoner models (#1455)
Integrated into release/v3.7.0
2026-04-21 04:50:00 -03:00
Paijo
ceca26ae87 fix(encryption): return null on decryption failure to prevent sending encrypted tokens to providers (#1462)
Integrated into release/v3.7.0
2026-04-21 04:49:57 -03:00
Paijo
20f04574e5 fix: resolve skills, memory, and encryption system issues (#1456)
Integrated into release/v3.7.0
2026-04-21 04:48:32 -03:00
diegosouzapw
1d3d99bb9e fix(combo): resolve cross-provider thinking 400 and http clipboard (#1444)
Integrated into release/v3.7.0
2026-04-21 04:36:16 -03:00
Randi
b38e57d452 refactor: unify resilience controls (#1449)
Integrated into release/v3.7.0
2026-04-21 04:13:28 -03:00
oyi77
763d353f5c fix(encryption): return null on decryption failure to prevent sending encrypted tokens to providers
- When decrypt() encounters a malformed encrypted value (invalid format), return null instead of the ciphertext
- When decrypt() fails due to decryption error (wrong key, auth tag mismatch), return null instead of the ciphertext
- This prevents encrypted tokens from being sent to upstream APIs
- Fixes [400]: Improperly formed request errors when routing to Kiro and other providers with unavailable credentials
- Updated test expectations to match the new correct behavior: decrypt returns null on any failure
2026-04-21 03:24:35 +07:00
clousky2020
d6cbdc1580 feat: add ModelScope provider with circuit breaker and daily quota lock (#1430)
Integrated into release/v3.7.0. Thanks @clousky2020 for this massive and important contribution! 🎉 We've translated the deprecation comments to English for consistency, and it is now officially merged into the release branch. Great work on the ModelScope integration and Circuit Breaker!
2026-04-19 21:13:45 -03:00
Diego Rodrigues de Sa e Souza
3432dfd280 Release v3.6.9 (#1404)
* test: resolve typescript strictness complaints in unit tests

* Update Claude Code obfuscation to version 2.1.114 (#1403)

* fix(cloud-code): scope thinking stripping to executor boundaries (#1401)

* fix(cloud-code): scope thinking stripping to executors

* fix(cloud-code): guard antigravity normalized body

* Update Claude Code obfuscation to version 2.1.114

- Update Claude Code version from 2.1.87 to 2.1.114
- Update X-Stainless-Package-Version from 0.80.0 to 0.81.0
- Add new beta flags: redact-thinking-2026-02-12, advisor-tool-2026-03-01, advanced-tool-use-2025-11-20
- Add missing headers: anthropic-version, anthropic-dangerous-direct-browser-access, x-app, X-Stainless-Timeout
- Add all X-Stainless-* headers (Arch, Lang, OS, Runtime, Runtime-Version, Retry-Count)
- Fix accept-encoding header: identity -> gzip, deflate, br, zstd
- Add connection: keep-alive header
- Update tool name mapping: add lsp, apply_patch, websearch

These changes ensure that requests from OpenCode through Omniroute are indistinguishable from genuine Claude Code 2.1.114 requests, allowing proper authentication with Anthropic's API without triggering extra credits errors.

* fix: resolve CodeQL password hash alert and TruffleHog CI failure

---------

Co-authored-by: Randi <55005611+rdself@users.noreply.github.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: Nikolay Popov <ekklesio.dev@gmail.com>
Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>

* fix(claude-code): scope obfuscation to cli clients and fix tests

* docs(workflows): enforce PR merge instead of manual close

* docs(changelog): update 3.6.9 notes with missing PR 1403 and fixes

* docs(workflows): update generate-release to use full changelog for PR body

* fix(tsc): silence baseUrl deprecation warnings for TS 5.5+

* fix(chatcore): apply proactive compression before provider translation (#1406)

Integrated into release/v3.6.9

* docs(changelog): add PR 1406

* Makes text visible in dark-mode (#1409)

Integrated into release/v3.6.9

* docs(changelog): add PR 1409

* chore: save local work

* chore(release): sync version references to 3.6.9

* fix(codex): prevent proactive token refresh consumption and strip background parameter

* ci: shard long-running suites and relax timeouts

* ci: allow manual CI dispatch for release branches

* feat(skills): provider-aware marketplace UX, scored AUTO injection, and memory pipeline hardening (#1411)

* fix/400 for GeminiCLI(add "ref" in GEMINI_UNSUPPORTED_SCHEMA_KEYS)

* feat(cc-compatible): align request shape with Claude CLI

* fix(cc-compatible): add Claude CLI system skeleton for OpenAI input

* preserve reasoning when translating chat to responses (#1414)

Integrated into release/v3.6.9

* fix(skills): optimize AUTO scoring and include Responses input context (#1418)

Integrated into release/v3.6.9

* chore: fix TS errors and update review-prs workflow

* fix(api): stop sending unsupported Gemini and Codex parameters

Prevent Gemini request translation from injecting default
thoughtSignature values that the upstream API strictly validates and
rejects. Only preserve real signatures resolved from prior upstream
responses, and strip additionalProperties from Gemini function schemas
to avoid 400 "Unknown name" errors.

Also remove fallback-injected session_id and conversation_id fields
before sending Codex requests, and restore compatibility with the
legacy OUTBOUND_SSRF_GUARD_ENABLED flag when determining whether
private provider URLs are allowed.

Updates the Gemini translator and regression tests for issue #1410
and related 400 error cases.

* fix(core): stabilization fixes for token refresh, usage translation, and testing

- Update Codex token refresh detection logic
- Mark provider connections invalid on unrecoverable refresh error
- Fix Claude usage translation under-reporting cached tokens
- Update test expectations
- Update CHANGELOG.md for v3.6.9

* fix(auth): reload fresh token state and unify expiry persistence

Refresh checks now re-read the latest stored provider connection before
attempting rotation so they do not use stale refresh tokens captured by
an earlier sweep.

Token updates also persist both expiresAt and tokenExpiresAt across the
health check, usage-limit refresh path, and SSE refresh flow. This keeps
known token expiry metadata in sync and avoids interval-based refreshes
for connections whose tokens are still valid well into the future.

* fix: resolve SSRF environment static evaluation bug (#1427)

Fix import aliases and strict TS typings for tests and ACP agents.

* test: resolve remaining strict type errors in test files

* test: fix provider service assertion for anthropic-compatible header

* fix(codex): respect openaiStoreEnabled setting during native passthrough (#1432)

* fix(codex): fix token refresh unrecoverable detection for expired tokens

* fix(ci): restore release v3.6.9 build and flaky tests

* fix(cc-compatible): trim default OpenAI system skeleton (#1433)

Integrated into release/v3.6.9

* fix: prevent masked API keys from being written to CLI tool configs (#1435)

* feat: mark Qwen provider as deprecated and add deprecation warning to CLI tool (#1437)

* docs(changelog): comprehensive v3.6.9 update with all 59 commits since v3.6.8

* test(ci): align qwen guide settings assertions

* fix(security): resolve CodeQL alert 163 for incomplete URL sanitization in Qwen CLI settings

---------

Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
Co-authored-by: Nikolay Popov <74762779+nikolay-popov-ideogram@users.noreply.github.com>
Co-authored-by: Randi <55005611+rdself@users.noreply.github.com>
Co-authored-by: Nikolay Popov <ekklesio.dev@gmail.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Tim Massey <tim-massey@users.noreply.github.com>
Co-authored-by: Paijo <oyi77@users.noreply.github.com>
Co-authored-by: dail45 <dail45@yandex.ru>
Co-authored-by: R.D. <rogerproself@gmail.com>
2026-04-19 19:50:30 -03:00
Randi
5be86907d7 preserve reasoning when translating chat to responses (#1414)
Integrated into release/v3.6.9
2026-04-19 06:46:54 -03:00
Diego Rodrigues de Sa e Souza
b191842d98 Merge pull request #1392 from diegosouzapw/release/v3.6.9
chore(release): v3.6.9 — Bug Fixes and PR Integrations
2026-04-18 17:16:31 -03:00
Randi
293290e12a fix(cloud-code): scope thinking stripping to executor boundaries (#1401)
* fix(cloud-code): scope thinking stripping to executors

* fix(cloud-code): guard antigravity normalized body
2026-04-18 17:15:59 -03:00
diegosouzapw
bb1e70acab test: align codex passthrough assertion with explicit store retention policy 2026-04-18 17:08:15 -03:00
diegosouzapw
860d596c3b fix: resolve combo-routing-engine test regression and TS errors 2026-04-18 16:53:26 -03:00
diegosouzapw
f979c606fe test: fix store assertion for codex responses 2026-04-18 15:46:25 -03:00
diegosouzapw
4a50b2eb6a chore(release): v3.6.9 — finalize PR integrations and test fixes 2026-04-18 15:35:21 -03:00
Benson K B
f3ae67473b fix(combo): fallback to next model on all-accounts-rate-limited 503 (#1398)
Integrated into release/v3.6.9
2026-04-18 15:35:21 -03:00
diegosouzapw
ecab0edad1 fix(security): Resolve CodeQL alerts (#151, #154, #155-#159)
- Fix insecure randomness in usage service
- Add CodeQL suppression for intentional SHA-512 checksum in callLogArtifacts
- Replace URL string prefix matching with strict hostname validation in tests
- Remove scratch scripts with sensitive data logging
2026-04-18 11:51:24 -03:00
diegosouzapw
d42842ba25 chore: fix CodeQL alerts and missing docker postinstall 2026-04-18 11:44:20 -03:00
Benson K B
4a560c0b1c feat(cli): add direct config save for Qwen Code (#1394)
Integrated into release/v3.6.9
2026-04-18 10:59:11 -03:00
Benson K B
891189bbf3 feat(cli): derive Claude CLI model defaults from provider registry dynamically (#1393)
Integrated into release/v3.6.9
2026-04-18 10:49:34 -03:00
diegosouzapw
01ae037205 test(cli): resolve strict null checks in Qoder unit tests 2026-04-18 10:29:30 -03:00
diegosouzapw
f53caa93b6 fix: Qoder PAT validation treats 500 error as bypass to avoid false negatives (#1391)
fix: proxy context correctly inherited during token refresh to avoid expiration loops (#1390)
2026-04-18 10:18:36 -03:00
diegosouzapw
c8679b0c79 chore(release): v3.6.9 — changelog, docs, version sync 2026-04-18 09:16:27 -03:00
diegosouzapw
c03a5a4443 fix: resolve CodeQL security alerts (#151, #152, #154, #155-#159)
- #155-#159 (Incomplete URL substring sanitization):
  Replaced partial `startsWith()` matching on URLs in test assertions and mocks with strict `new URL(url).hostname` parsing.
- #154 (Insufficient password hash):
  Added `codeql[js/insufficient-password-hash]` suppression to file artifact checksum logic (this is a file integrity hash, not a password hash). Switched back to sha256 to avoid unnecessary sha512 overhead.
- #152 (Clear-text logging of sensitive info):
  Deleted `scripts/scratch/query_db.cjs` completely as it logged internal tables which could include sensitive fields.
- #151 (Insecure randomness):
  Switched `globalThis.crypto.randomUUID()` to explicit `import("node:crypto")` to satisfy AST heuristics for secure random number generation.
2026-04-18 04:58:15 -03:00
diegosouzapw
7e1e0e362e feat: implement #1350 #1367 #1369 — persistent API key, backup pruning, GPU optimization
#1350 — Persist API-Key via Docker volume:
- isValidApiKey() now checks OMNIROUTE_API_KEY/ROUTER_API_KEY env vars
  before querying SQLite, making keys survive container restarts/restores
- Env-var keys bypass DB entirely — no regeneration needed

#1367 — Limit Database Backup Count:
- Already implemented: UI controls (keepLatest, retentionDays) in
  SystemStorageTab + backend cleanupDbBackups() with DB_BACKUP_MAX_FILES
- Closed as already resolved

#1369 — Reduce GPU usage:
- Removed backdrop-blur-xl from Sidebar.tsx and Header.tsx
- Made --color-sidebar CSS vars fully opaque (eliminates GPU compositing)
- Added data memoization to RequestLoggerV2/ProxyLogger via
  logsSignatureRef — skips setLogs when data unchanged (~80% fewer re-renders)

Tests: 36/36 pass, typecheck:core pass
2026-04-18 04:54:59 -03:00
diegosouzapw
15abfe61ec chore: fix CodeQL alerts and missing docker postinstall 2026-04-18 04:15:33 -03:00
diegosouzapw
857b692aac test: avoid cooldown retry flake in chat integration 2026-04-18 02:18:23 -03:00
diegosouzapw
738353a0e7 test: stabilize cooldown-aware retry unit 2026-04-18 02:06:13 -03:00
diegosouzapw
4a6e915ebd test: stabilize settings toggles e2e 2026-04-18 01:43:51 -03:00
diegosouzapw
004ed83689 test: fix integration tests resolving limits from CI environments 2026-04-18 00:06:10 -03:00
diegosouzapw
c8828b8a42 fix(build): unblock release build and settings state updates
Add targeted TypeScript annotations and module declarations to reduce
type errors in open-sse services, executors, and shared utilities while
temporarily disabling checking in legacy files that still need migration.

Reset stale `.next/standalone` output before isolated builds so release
artifacts are generated from a clean state.

Update the dashboard proxy settings UI to bypass cached settings reads
and immediately roll back debug mode when the PATCH request fails, which
prevents stale data and inconsistent toggle state.
2026-04-17 23:21:02 -03:00
Paijo
0357a18cea fix: replace unit test with integration test for proactive context compression (#1378)
Integrated into release/v3.6.8
2026-04-17 21:02:26 -03:00
diegosouzapw
949a7a618f test: update Antigravity usage fetcher test URLs for CC compatible toggle parity 2026-04-17 17:15:32 -03:00
diegosouzapw
ea67216bf2 refactor: Split CLI runner and decouple migration engine for extensibility
Closes #1358
2026-04-17 17:02:00 -03:00
diegosouzapw
1e3ac5fff7 feat: add CC Compatible connection-level 1M context toggle
Closes #1357
2026-04-17 16:59:18 -03:00
diegosouzapw
792a1cb2ab feat: Support xhigh only on Claude models that expose it
Closes #1356
2026-04-17 16:58:27 -03:00
diegosouzapw
8cf78ddf00 feat(auth): enforce dashboard sessions for management routes
Require dashboard session cookies on protected management APIs and
reject bearer API keys with explicit 403 responses to prevent
privilege escalation across provider, settings, and model alias routes.

Add a dedicated payload rules management surface with dashboard UI,
OpenAPI documentation, route normalization, and tests for hot-reloaded
runtime updates.

Consolidate provider catalog metadata for dashboard pages, add
Perplexity web-cookie provider support, retire the legacy provider
creation page, and improve upstream proxy handling.

Harden startup and runtime behavior by moving cloud sync bootstrap to
server instrumentation, skipping background services during build/test,
making models.dev sync abortable, pruning isolated build artifacts, and
improving DB backup and recovery safeguards.
2026-04-17 16:45:27 -03:00
diegosouzapw
4ae488b25b feat(runtime): add hot-reloadable guardrails and model diagnostics
Introduce a runtime settings layer that hydrates persisted config at startup
and reapplies aliases, payload rules, cache behavior, CLI compatibility,
usage tuning, and related switches when settings change or SQLite updates.

Replace the legacy prompt injection middleware path with a guardrail
registry that supports prompt injection detection, PII masking, disabled
guardrail overrides, and post-call response handling across the chat
pipeline.

Add a metadata registry for model catalog and alias resolution so catalog
endpoints return enriched capabilities plus diagnostic headers and typed
alias errors instead of ad hoc responses.

Convert unsupported built-in web_search tools into an OmniRoute fallback
tool, execute them through builtin skills, and preserve Responses API
function call output with sanitized usage fields.

Centralize provider header fingerprints for GitHub, Cursor, Qwen, Qoder,
Kiro, and Antigravity, and migrate management passwords from env or
plaintext storage into persisted bcrypt hashes during startup and login.
2026-04-17 11:56:52 -03:00
diegosouzapw
dc6d9e2e4b feat(core): add payload rules, tag routing, and scheduled budgets
Introduce runtime-configurable payload mutation/filter rules with file
reload support and a settings API so upstream request bodies can be
customized per model and protocol without restarts.

Expand search support with Google PSE, Linkup, SearchAPI, and SearXNG,
including validation, routing, analytics costing, MCP schema updates,
and search-type-aware provider selection. Update Pollinations to support
anonymous access, endpoint failover, and the latest public model lineup.

Add OmniRoute response metadata headers/SSE comments, per-connection
model exclusion rules, combo tag-based routing, buffered spend writes,
and scheduled daily/weekly/monthly budget resets. Update model catalog
and dashboard UIs to surface source labels and hide models excluded by
all active connections.
2026-04-17 09:00:32 -03:00
diegosouzapw
14d18d27b1 feat(providers): expose antigravity preview aliases and gemini cli onboarding
Centralize Antigravity public model definitions and use the
client-visible preview aliases in provider discovery, model catalog
responses, and default alias seeding.

Add Gemini CLI managed-project onboarding with retries when
loadCodeAssist does not return a project, and update Gemini CLI header
fingerprints to match newer native clients.

Improve non-stream handling by converting NDJSON event payloads into
SSE-compatible parsing for stream=false requests, add PUT support for
the settings API, expand Gemini schema cleanup for local refs and
unsupported keys, and include Anthropic beta headers for API-key
requests.
2026-04-16 23:25:58 -03:00
diegosouzapw
7b51ccd9e4 feat(antigravity): add client model aliases and signature bypass modes
Expose client-visible Antigravity preview model aliases while resolving
them back to upstream IDs for execution and provider discovery. Refresh
the Antigravity user agent from cached latest release metadata so model
discovery and requests track current CLI versions more reliably.

Add configurable Gemini thought signature cache modes in settings to
allow validated client-provided signatures in bypass flows while
preserving the existing stored-signature behavior by default.

Also centralize Anthropics header/version constants, enrich image model
catalog metadata with input and output modalities, add dashboard image
input support for advanced image providers, and exclude task docs from
Next standalone tracing to keep isolated builds stable.
2026-04-16 20:53:35 -03:00