Commit Graph

2164 Commits

Author SHA1 Message Date
kfiramar
eec5fa3feb Enable native Codex websocket responses on beta-gated models (#1658)
Integrated into release/v3.7.2
2026-04-27 07:11:59 -03:00
Gi99lin
712f1ea3e9 fix(codex): default gpt-5.5 to HTTP transport instead of WebSocket (#1660)
Integrated into release/v3.7.2
2026-04-27 07:11:51 -03:00
Jack
388b84de3c fix(blackbox-web): set isPremium flag to true (#1661)
Integrated into release/v3.7.2
2026-04-27 07:11:43 -03:00
t-way666
9881e190bf fix: resolve MCP server start failure on Windows (#1662)
Integrated into release/v3.7.2
2026-04-27 07:11:35 -03:00
diegosouzapw
4ac4ac3fd4 build(prepublish): make next build bundler configurable
Allow the prepublish script to choose between webpack and turbopack
using the OMNIROUTE_USE_TURBOPACK environment variable.

This keeps the default build path explicit while making it possible to
switch bundlers for packaging and release workflows without editing the
script.
2026-04-27 07:01:23 -03:00
diegosouzapw
cf0f947adb fix(electron): make Windows smoke test non-blocking (continue-on-error)
Windows CI requestSingleInstanceLock() reliably fails because the
USERPROFILE sanitization (needed for Next.js build) persists across
steps. The lock mechanism uses a named pipe tied to userData path,
which doesn't work with the synthetic USERPROFILE.

Linux and macOS smoke tests remain required gates.
2026-04-27 03:00:08 -03:00
diegosouzapw
ae77d1370e fix(electron): pre-create userData dir for Windows + stream logs in CI
Windows smoke test exits code=0 because requestSingleInstanceLock()
fails silently when the APPDATA/<productName> directory doesn't exist.
Pre-create the directory so the lock file can be written.

Also enables ELECTRON_SMOKE_STREAM_LOGS=1 in CI for better debugging.
2026-04-27 02:48:25 -03:00
diegosouzapw
4d48454c11 fix(electron): add --no-sandbox and sandbox env for CI smoke tests
Linux: SUID sandbox error (chrome-sandbox needs root:4755)
Windows: silent exit 0 without sandbox bypass

Adds --no-sandbox, --disable-gpu, --disable-dev-shm-usage CLI args
and ELECTRON_DISABLE_SANDBOX=1 env var when CI=true is detected.
2026-04-27 02:33:35 -03:00
diegosouzapw
c9fc36ca14 feat(network): add guarded remote image fetch utility
Centralize remote image downloads behind a shared helper that
validates outbound URLs, enforces redirect and size limits, and
applies request timeouts before bytes are read.

Wire the helper into image generation and vision bridge flows so
remote image inputs and result URLs follow the same fetch policy and
block redirects to private hosts. Update key management routes to use
structured logging and document the WebSocket bridge secret in the
example environment file.
2026-04-27 02:25:46 -03:00
Diego Rodrigues de Sa e Souza
3ff6137767 Merge pull request #1629 from diegosouzapw/release/v3.7.1
Release v3.7.1
v3.7.1
2026-04-27 01:48:18 -03:00
diegosouzapw
cbe7358dc8 chore(release): v3.7.1 — all changes in ONE commit 2026-04-27 01:47:54 -03:00
diegosouzapw
3008ba9a13 fix(transport): cap streaming logs and parse fragmented responses (#1647) 2026-04-27 01:45:36 -03:00
diegosouzapw
f14679f7a5 docs(changelog): add entries for merged PRs #1645 and #1646 2026-04-27 01:19:53 -03:00
Raxxoor
97912c7d9c fix(transport): harden GitHub and Kiro streaming (#1645)
Integrated into release/v3.7.1 — fixes GitHub executor concurrency bug, hardens Kiro streaming, adds defensive tool input parsing
2026-04-27 01:09:23 -03:00
backryun
725ec7f2a9 fix:Update Build env dependencys (#1646)
Integrated into release/v3.7.1 — CI dependency updates and Node 24.15.0 bump
2026-04-27 01:08:49 -03:00
diegosouzapw
c26c3a46a9 docs(changelog): add entries for #1643 and #1638 fixes 2026-04-27 00:37:31 -03:00
diegosouzapw
19edb8efa4 fix(claude): stabilize billing header fingerprint for prompt-cache affinity (#1638)
The billing header fingerprint was computed from the first user message text
via computeFingerprint(), which changes every conversation turn. This mutated
the system[] prefix on each request, invalidating Anthropic's prompt-cache
prefix and forcing ~100% cache_create (vs 96% cache_read with stable prefix).

Now uses a per-day SHA-256 hash of the date + ccVersion, keeping the billing
header format while preserving prompt-cache prefix stability across turns.

Includes 6 unit tests.
2026-04-27 00:37:25 -03:00
diegosouzapw
52d5b86e88 fix(codex): use per-conversation session_id as prompt_cache_key (#1643)
The prompt_cache_key was derived from the account-wide workspaceId, meaning
all conversations from the same OAuth account shared one cache partition.
The official Codex CLI uses conversation_id (a unique UUID per session).

Priority: body.session_id > body.conversation_id > workspaceId.
Session IDs are captured BEFORE deletion from the body.

Includes 10 unit tests.
2026-04-27 00:37:15 -03:00
diegosouzapw
738e108d06 docs(changelog): add entries for merged PRs #1641, #1642, #1640, #1639, #1644 2026-04-27 00:04:07 -03:00
diegosouzapw
78b845b68c feat(account-fallback): add daily quota lockout for quota_exhausted errors (#1644)
When a provider returns 429 with quota_exhausted reason, set cooldown until
tomorrow 00:00 instead of exponential backoff. Includes isDailyQuotaExhausted()
detection in chat handler and unit tests.

Co-authored-by: clousky2020 <clousky2020@users.noreply.github.com>
2026-04-27 00:02:44 -03:00
Prateek Rungta
56ae1b8246 fix: package Electron runtime deps (#1639)
Integrated into release/v3.7.1 — fixes Electron installer shipping empty node_modules. Adds separate extraResources FileSet, CI smoke test job, and cross-platform packaged app validation script. Closes #1636.
2026-04-26 23:59:51 -03:00
Dendy Adi Nirwana
314cad79ba fix(codex): avoid startup crash when wreq-js is unavailable (#1640)
Integrated into release/v3.7.1 — lazy-loads wreq-js WebSocket transport so server boots even when native module is unavailable. Fixes #1612.
2026-04-26 23:59:30 -03:00
Slavic Kozyuk
4eef082cf3 fix(usage): correct MiniMax token plan quota display (#1642)
Integrated into release/v3.7.1 — fixes inverted MiniMax quota display for token_plan/remains endpoint and rounds floating-point percentages.
2026-04-26 23:57:55 -03:00
Raxxoor
acf6ad4ba0 fix: route newer GitHub GPT models through Responses (#1641)
Integrated into release/v3.7.1 — routes gpt-5.4-nano, gpt-5.4-mini, gpt-5.4, and gpt-5.5 through the Responses API on GitHub Copilot.
2026-04-26 23:57:37 -03:00
diegosouzapw
2601e0e49d fix(migration): prevent compat-renamed version slot from shadowing new migrations (#1637)
After reconcileRenumberedMigrations() rewrites a legacy row (e.g. 028→029),
verify the old version slot is clear. A residual row at the old version
would cause getAppliedVersions() to skip the new migration file at that
version number (028_create_files_and_batches.sql).

Also adds 'batches' table to PHYSICAL_SCHEMA_SENTINELS for physical
schema recovery on upgrade paths.
2026-04-26 23:29:25 -03:00
diegosouzapw
f00e9a1272 fix(postinstall): extend native module repair to cover wreq-js for pnpm global installs (#1634)
- Add fixWreqJsBinary() to postinstall.mjs with 3-strategy repair:
  1. Copy platform binary from root node_modules
  2. Copy entire rust/ directory (all platform binaries)
  3. npm rebuild wreq-js fallback
- Fixes macOS arm64 global pnpm installs shipping only Linux binaries
- Adds reasoning replay cache feature for DeepSeek V4 (#1628)
- Updates CHANGELOG.md with both fixes
2026-04-26 20:15:47 -03:00
diegosouzapw
cabdfb04e7 fix(cache): replay cached reasoning for tool-calling think models
Prevent upstream 400 failures when clients omit prior
reasoning_content in multi-turn tool-calling conversations.

Capture reasoning_content from streaming and non-streaming assistant
responses, persist it in a memory-plus-SQLite cache keyed by
tool_call_id, and re-inject it on later requests when available.

Add the reasoning cache migration, service layer, authenticated API
endpoints, dashboard tab, and unit coverage to support inspection,
cleanup, and crash recovery.
2026-04-26 18:53:54 -03:00
diegosouzapw
e30969fecd fix(electron): cherry-pick macOS plist and Windows EPERM build fixes from main
Cherry-pick of dbd4b0a7 to keep release/v3.7.1 in sync with main.
2026-04-26 17:45:06 -03:00
diegosouzapw
dbd4b0a7d2 fix(electron): resolve macOS plist mimeType and Windows EPERM build failures
- Override plist to v4.0.0 which passes mandatory mimeType to DOMParser
- Add USERPROFILE sanitization on Windows to avoid EPERM on junction points
- Add NPM_CONFIG_LEGACY_PEER_DEPS to Electron workflow install step
v3.7.0
2026-04-26 17:37:55 -03:00
diegosouzapw
71745820ed fix(docker): set NPM_CONFIG_LEGACY_PEER_DEPS and remove duplicate COPY (#1630)
Cherry-pick from PR #1630 by @rdself. Fixes Docker build failures caused by
lockfile peer dependency mismatch during npm ci.
2026-04-26 16:09:25 -03:00
diegosouzapw
abeb78b95c fix: integrate PRs #1630 (Docker build) and #1631 (Antigravity model cleanup), fix test regression
- PR #1630: Set NPM_CONFIG_LEGACY_PEER_DEPS=true in Dockerfile, remove duplicate COPY
- PR #1631: Hide deprecated gemini-claude-* models from catalogs, redirect to Claude 4.6
- Fix provider-models-route test to match renamed model display name
- Update CHANGELOG.md with both PR entries
2026-04-26 16:03:36 -03:00
backryun
4692621e4f fix(antigravity): hide deprecated Gemini-Claude models (#1631)
fix(antigravity): hide deprecated Gemini-Claude models, redirect legacy aliases to Claude 4.6 — integrated into release/v3.7.1
2026-04-26 15:59:07 -03:00
Randi
1c86cd5fec [Urgent] fix: include npm config in Docker install layer (#1630)
fix: include NPM_CONFIG_LEGACY_PEER_DEPS in Docker builder layer — integrated into release/v3.7.1
2026-04-26 15:58:52 -03:00
diegosouzapw
fbf129da56 chore(release): bump to v3.7.1 — changelog, docs, version sync 2026-04-26 15:03:59 -03:00
Aleksandr
0c90c9768b Add Codex GPT-5.5 support (#1617)
Integrated into release/v3.7.1
2026-04-26 14:56:25 -03:00
diegosouzapw
dd67b25df1 fix(cli-tools): preserve opencode config and raw key copy (#1626)
- Use jsonc-parser to update only provider.omniroute in opencode.json,
  preserving MCP servers, comments, and other provider entries
- Add /api/cli-tools/keys endpoint returning raw keys for CLI tools UI
  (session-auth protected via requireCliToolsAuth)
- Fix OpenCode guide step 3 to use ICU-style {baseUrl} placeholder
  instead of broken {{baseUrl}} across all 40+ locales
- Restore valid OpenCode light/dark SVG logos (were broken HTML downloads)
- Add customCliTab translation key to en.json
- Add modelLabels support for human-readable model names in config
- Fix 9 additional locale files (bn, fa, gu, in, mr, sw, ta, te, ur)
  that were added after the original PR and still had double-braces

Co-authored-by: JasonLandbridge <JasonLandbridge@users.noreply.github.com>
2026-04-26 14:26:34 -03:00
diegosouzapw
accb58f5b2 fix: per-model rate limiting for GitHub Copilot provider (#1624)
- Add 'github' to hasPerModelQuota() so 429 on one model doesn't lock the
  entire connection — same pattern already used for Gemini
- Add 'github' to getLimiterKey() for model-scoped Bottleneck rate limiter
  keys (github:connectionId:model)
- Add unit tests for hasPerModelQuota, shouldMarkAccountExhaustedFrom429,
  lockModelIfPerModelQuota (account-fallback-service.test.ts)
- Add integration test for model-scoped limiter keys (rate-limit-manager.test.ts)

Co-authored-by: slewis3600 <slewis3600@users.noreply.github.com>
2026-04-26 14:24:59 -03:00
diegosouzapw
d08301de8c fix(types): add explicit types to sync-env test helpers and dynamic import cast
Resolves 7 TypeScript errors: implicit 'any' on rootDir parameters and
unknown property 'rootDir' on the dynamically imported syncEnv options.
2026-04-26 14:09:44 -03:00
diegosouzapw
9c9f2b9d45 docs(env): add OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS to .env.example (#1623)
Makes the self-hosted provider URL allowlist more discoverable for users
running LM Studio, Ollama, vLLM, Llamafile, and other local providers.
2026-04-26 13:03:18 -03:00
diegosouzapw
05a50fcf53 fix(encryption): prevent STORAGE_ENCRYPTION_KEY regeneration on upgrade (#1622)
- sync-env.mjs: add hasEncryptedCredentials() guard before generating
  STORAGE_ENCRYPTION_KEY, matching the existing guard in bootstrap-env.mjs
- bootstrap-env.mjs: add decrypt-probe diagnostic on startup to detect
  key mismatch and log actionable recovery instructions
- bin/omniroute.mjs: add 'reset-encrypted-columns' CLI recovery command
  that nulls encrypted credential columns while preserving provider config
- tests/unit/sync-env.test.ts: isolate tests with DATA_DIR override

Root cause: postinstall → syncEnv() generated fresh crypto secrets into
the package-local .env on every 'npm install -g' upgrade, since the
package directory is wiped and recreated. The bootstrap-env guard never
triggered because sync-env already filled in the new keys. The DB still
contained credentials encrypted under the previous key, making them
permanently unrecoverable (AES-GCM auth-tag mismatch → silent 401s).
2026-04-26 12:57:38 -03:00
diegosouzapw
744a5606e4 feat(i18n): expand locale coverage with nine new language packs
Add Bengali, Persian, Gujarati, Indonesian alt, Marathi,
Swahili, Tamil, Telugu, and Urdu message bundles to the app's
locale configuration.

Extend RTL locale support for Persian and Urdu and update project
docs to reflect the broader 40+ language availability.
2026-04-26 11:43:51 -03:00
diegosouzapw
aa6b2f7567 fix(cli-tools): prevent React crash from object error in Apply handler
Two root causes fixed:
1. Schema: cliModelConfigSchema.apiKey was z.string().optional() but
   the frontend sends null when cloudEnabled is true. Zod rejects null
   for optional strings → validation 400 with structured error object.
   Fix: z.string().nullable().optional()

2. Frontend: All 25 tool card error handlers used data.error directly
   as React children. When data.error is an object ({message, details}),
   React crashes with Error #31 (Objects are not valid as React child).
   Fix: extract data.error.message when data.error is an object.
2026-04-26 11:04:52 -03:00
diegosouzapw
167404f19e fix(i18n): replace 83 placeholder values in usage/evals namespace
Replace Title Case placeholder values (e.g. 'Eval Controls Title',
'Suite Builder Case Name Label') with proper English text across all
31 locale files. These placeholder keys were auto-generated from
camelCase key names but never populated with meaningful values.
2026-04-26 10:47:57 -03:00
diegosouzapw
a691893413 fix(i18n): add 5 missing health namespace keys for rate limit status
Add limitExhausted, learnedFromHeaders, remainingOfLimit, throttleStatus,
and lastHeaderUpdate keys to all 31 locale files. These keys are used by
the health dashboard rate limit status section and were causing
MISSING_MESSAGE errors in production.
2026-04-26 10:18:11 -03:00
diegosouzapw
213d38cd50 fix(i18n): add 14 missing logs.* translation keys for ActiveRequestsPanel
Add runningRequests, runningRequestsDesc, model, provider, account,
elapsed, count, payloads, viewPayloads, activeCount, clientPayload,
upstreamPayload, upstreamNotSentYet, runningRequestDetailMeta to all
31 locale files (en + 30 translations).
2026-04-26 09:53:39 -03:00
diegosouzapw
d179ace708 fix(codex): make wreq-js import lazy to prevent startup crash (#1612) 2026-04-26 09:53:10 -03:00
Diego Rodrigues de Sa e Souza
6df01aeb34 chore(release): v3.7.0
Release v3.7.0
2026-04-26 04:34:46 -03:00
diegosouzapw
e30b706e66 Merge remote-tracking branch 'origin/main' into release/v3.7.0
# Conflicts:
#	src/i18n/messages/pt.json
2026-04-26 04:34:28 -03:00
diegosouzapw
6dc5bb9437 docs(release): refresh v3.7.0 docs for expanded provider and MCP counts
Update release notes and project documentation to reflect the
current 160+ provider catalog, 29-tool MCP server footprint, and
newly shipped v3.7.0 features and fixes.

This keeps public-facing docs, architecture references, and agent
guidance aligned with the actual release contents and supported
capabilities.
2026-04-26 04:05:09 -03:00
diegosouzapw
ead269d30d fix: clear INITIAL_PASSWORD and JWT_SECRET in integration tests
CI sets INITIAL_PASSWORD and JWT_SECRET env vars, which makes
isAuthRequired() return true even with a fresh temp DB. The tests
call route handlers directly without session cookies, so auth must
be fully disabled by clearing all auth-related env vars.
2026-04-26 03:49:10 -03:00