Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
161 commits
Select commit Hold shift + click to select a range
baed012
test(providers): add agnes-cn isolation coverage before the registry …
HouMinXi Sep 11, 2026
d0947ba
feat(providers): register agnes-cn against api.agnes-ai.cn
HouMinXi Sep 11, 2026
67be40c
feat(providers): surface Agnes CN card, live models, and free-catalog…
HouMinXi Sep 11, 2026
13e4cfa
test(providers): lock Agnes CN out of the intl credential pool
HouMinXi Sep 11, 2026
b09bfa3
chore(quality): snapshot Agnes CN translate-path host
HouMinXi Sep 11, 2026
a1e6d7f
fix(providers): add free-tier note on the Agnes CN card
HouMinXi Sep 12, 2026
e144ddb
chore(quality): refresh translate-path snapshot after rebase
HouMinXi Sep 12, 2026
2c94cf9
feat(providers): seed Agnes CN with live 3.0 Flash
HouMinXi Sep 12, 2026
30bf6af
fix(nvidia): fail open when a synced model catalog goes stale (#12849…
diegosouzapw Sep 14, 2026
963d3c4
fix(ci): clear three base-reds on release/v3.8.51 — open-sse typechec…
diegosouzapw Sep 14, 2026
0d13ef4
feat(i18n): 8 new locales — Kannada, Malayalam, Odia, Punjabi, Nepali…
diegosouzapw Sep 14, 2026
8f36211
docs(i18n): sync provider and migration counts in the eight new llm.t…
diegosouzapw Sep 14, 2026
8786c17
fix(ci): clear the orphan base-reds on release/v3.8.51 — the #12867 p…
diegosouzapw Sep 14, 2026
895dda3
fix(ci): clear the base-reds on release/v3.8.51 — doc counts, catalog…
diegosouzapw Sep 14, 2026
5ca724d
fix(api): scope batch bulk-delete to the calling API key (#12969)
diegosouzapw Sep 14, 2026
67cb0ac
fix: chain serial quarantine step in npm test script (fixes #13286) (…
KooshaPari Sep 15, 2026
8bad85f
fix(logging): mask *-api-key headers in request-log pipeline (#13273)…
KooshaPari Sep 15, 2026
65f5131
fix(tests): correct stale Jina catalog prefix in custom-models test (…
KooshaPari Sep 15, 2026
04bea60
fix(backend): prune old backups after health-check-repair snapshots (…
KooshaPari Sep 15, 2026
43b2661
feat(mcp): carry context_length through MCP list_models_catalog proje…
KooshaPari Sep 15, 2026
2a6d058
fix: skip non-chat generation models in Test all models (#13409)
KooshaPari Sep 15, 2026
f938a08
fix(resilience): add CJK quota-exhaustion patterns to 429 classifier …
KooshaPari Sep 15, 2026
fdfa921
fix(backend): eval runner: failed calls no longer score as passed + d…
KooshaPari Sep 15, 2026
76c928d
fix(backend): eval runner opts out of output-style and memory injecti…
KooshaPari Sep 15, 2026
3a186c1
fix(dashboard): send provider in body for mini-playground web search …
KooshaPari Sep 15, 2026
38ce449
fix(providers): de-duplicate agy and antigravity model catalogs (#13410)
KooshaPari Sep 15, 2026
1738beb
fix(memory): merge memory into top-level system field instead of unsh…
KooshaPari Sep 15, 2026
fc111dc
feat(cli): make startup readiness budget configurable (#13369) (#13433)
KooshaPari Sep 15, 2026
222fe43
docs(providers): add Microsoft 365 Copilot (BizChat) provider guide (…
KooshaPari Sep 15, 2026
cce3a95
fix(tests): add DISABLE_IOREG_STRATEGY env var for macOS test compati…
KooshaPari Sep 15, 2026
97ae101
fix(combo): use traceId for call log id to prevent UNIQUE constraint …
KooshaPari Sep 15, 2026
bf66589
fix(auth): check model lockout before returning synthetic noauth conn…
KooshaPari Sep 15, 2026
c46ca1d
fix(compression): preserve instruction blocks from lossy engines (#13…
KooshaPari Sep 15, 2026
56fedf9
fix(compression): preserve polarity words and newlines in ultra heuri…
KooshaPari Sep 15, 2026
d4a1470
fix(compression): run user preservePatterns before built-in patterns …
KooshaPari Sep 15, 2026
918546a
fix(resilience): increase requestQueue.maxWaitMs default from 15s to …
KooshaPari Sep 15, 2026
fb3f298
fix(security): empty whitelist allows through to prevent admin lockou…
KooshaPari Sep 15, 2026
a0d8ad7
fix(antigravity): derive stable session ID from credentials for promp…
KooshaPari Sep 15, 2026
0b358db
fix(backend): guard memory_fts_au trigger with WHEN clause to stop FT…
KooshaPari Sep 15, 2026
d6e62ae
fix(free-tiers): remove obsolete Together $25 signup credit (#12526) …
KooshaPari Sep 15, 2026
cd112e3
chore(deps): pin csv-parse to ^7.0.2 via overrides (#13117) (#13300)
KooshaPari Sep 15, 2026
6a55d0a
chore(deps): bump hono from ^4.12.34 to ^4.13.7 (#13148) (#13301)
KooshaPari Sep 15, 2026
93a398f
chore(deps): pin joi to ^18.2.8 via overrides (#13085) (#13302)
KooshaPari Sep 15, 2026
30b5bf1
fix(guardrails): skip credential redaction for base64 image data URLs…
KooshaPari Sep 15, 2026
1cbb77c
fix(analytics): normalize provider aliases to canonical id in usage_h…
KooshaPari Sep 15, 2026
56ae80a
fix(reasoning): expand deepseek-v4 regex to match v4.1+ and add comma…
KooshaPari Sep 15, 2026
3b5ce24
fix(playground): allow Compare columns to scroll independently (#13532)
KooshaPari Sep 15, 2026
2d1a281
fix(providers): add alwaysReasons metadata for reka-flash-3 (#13531)
KooshaPari Sep 15, 2026
4745fca
fix(zed-hosted): map developer role and Gemini enums for Zed proxy (#…
KooshaPari Sep 15, 2026
3311ad2
fix(docs): document OMNIROUTE_READY_TIMEOUT_MS and allowlist the test…
diegosouzapw Sep 15, 2026
c0f92ec
fix(security): resolve findings from omni-code-sec battery (fix/batch…
diegosouzapw Sep 15, 2026
5c1e35b
fix(api): give the #13376 model-test skip a real httpStatus (#13730)
diegosouzapw Sep 15, 2026
f782f3b
chore(skills): regenerate cli-serve after --ready-timeout was added (…
diegosouzapw Sep 15, 2026
9442bde
fix(ci): clear the release/v3.8.51 base-reds on the PR fast path (#13…
dpozimski Sep 15, 2026
d36251c
fix(ci): clear five uncovered base-reds on release/v3.8.51 — auto-com…
diegosouzapw Sep 15, 2026
58f88a8
feat(i18n): 7 new locales — Hausa, Yoruba, Igbo, Amharic, Uzbek, Geor…
diegosouzapw Sep 15, 2026
1d03ba0
fix(api): keep omitted fields on partial updates (#13582)
maxmad64bis Sep 15, 2026
ee3fbaf
fix(proxies): preserve inactive and dead statuses during pool validat…
maxmad64bis Sep 15, 2026
225da11
ci(radar-export): publish on release-branch catalog pushes; daily sch…
diegosouzapw Sep 15, 2026
3af620e
fix(combos): stop dropping live keys and persisting dead ones (#13217)
maxmad64bis Sep 15, 2026
aaf0777
fix(proxies): keep the stored status when a write does not send one (…
maxmad64bis Sep 15, 2026
5cc3362
fix(providers): route Muse Spark 1.3 to the Responses API on OpenCode…
maxmad64bis Sep 15, 2026
ca9254e
fix(opencode): read management token from environment with startup fa…
maxmad64bis Sep 15, 2026
5395618
fix(opencode-plugin-v2): write catalog snapshot atomically via temp f…
maxmad64bis Sep 15, 2026
c0e5b0a
fix(connection-cooldown): skip cooldown for locally rejected token-bu…
maxmad64bis Sep 15, 2026
4c0e45d
fix(models): return 503 with Retry-After when a cold catalog build ex…
maxmad64bis Sep 15, 2026
5a7a3d0
fix(combos): abort combo test probes when the client disconnects (#13…
maxmad64bis Sep 15, 2026
3266d16
fix(call-logs): versioned error_type vocabulary with unknown fail-ope…
maxmad64bis Sep 15, 2026
5169271
fix(call-logs): zod write-point guard for error_type (#13441)
maxmad64bis Sep 15, 2026
831b485
test(batches): rename the two seeded-batch labels that gitleaks repor…
diegosouzapw Sep 15, 2026
cb420db
fix(call-logs): hide search rows without a live provider (#13641)
maxmad64bis Sep 15, 2026
1d17c23
fix(build): stop the client bundle from reaching server-only modules,…
maxmad64bis Sep 15, 2026
215ac43
fix(proxy): keep proxy credentials holding a literal percent (#13605)
maxmad64bis Sep 15, 2026
7cabac4
fix(quota): bound routing caches with shared boundedMap factory (#13280)
maxmad64bis Sep 15, 2026
62cd277
fix(db): persist WAL busy counter across restarts (#13218)
maxmad64bis Sep 15, 2026
104a34c
chore(deps): bump the adm-zip override to ^0.6.1 (#13737)
diegosouzapw Sep 15, 2026
e498c34
fix(security): add Groq, xAI and OpenAI-compatible key shapes to the …
diegosouzapw Sep 15, 2026
b97338a
fix(security): pin the public-only guard on client-supplied image URL…
diegosouzapw Sep 15, 2026
e7f9fec
fix(api): enforce API-key ownership on files and batches — null-owner…
diegosouzapw Sep 15, 2026
c8b24ff
fix(authz): gate the cli-tools status and skills execution routes to …
diegosouzapw Sep 15, 2026
45c54ca
fix(dashboard): require provider free-tier for the Free badge (#13645)
maxmad64bis Sep 15, 2026
b283ed1
fix(api): use shared SOCKS5 flag reader in settings routes (#13646)
maxmad64bis Sep 15, 2026
520428c
fix(resilience): honor user daily-reset clock for non-TPD quota coold…
maxmad64bis Sep 15, 2026
cad0fcc
fix(sse): bound daily quota cooldowns around daylight-saving transiti…
maxmad64bis Sep 15, 2026
ac52d4d
fix(sse): omit synthetic Retry-After and mark retry provenance on dra…
maxmad64bis Sep 15, 2026
6113426
fix(combo): return 502 for non-quota protected-priority stops (#13439)
maxmad64bis Sep 15, 2026
defa0f0
fix(routing): await stale provider-pin clears and gate swallowed erro…
maxmad64bis Sep 15, 2026
53ed8c4
fix(stream-recovery): order-aware in-flight tool-call detection behin…
maxmad64bis Sep 15, 2026
931c9f9
fix(stream-recovery): log recovery traces with continuation attempt (…
maxmad64bis Sep 15, 2026
08fe9e5
fix(usage): skip billing for estimated token usage, bill real output …
maxmad64bis Sep 15, 2026
87d9d82
fix(sse): fail over to sibling connection on stream early EOF (#13153)
maxmad64bis Sep 15, 2026
df87e93
fix(auth): close the JWT_SECRET bootstrap chain — real-peer loopback,…
diegosouzapw Sep 15, 2026
29d66cb
feat(proxies): stop re-serving a proxy that just failed (#13578)
maxmad64bis Sep 15, 2026
238cb1b
feat(proxy-logs): keep the HTTP status the provider actually returned…
maxmad64bis Sep 15, 2026
6922332
feat(proxies): stop re-serving a pool member the provider just refuse…
maxmad64bis Sep 15, 2026
ca312d5
feat(proxies): show how many egress IPs actually served a proxy pool …
maxmad64bis Sep 15, 2026
5cf4316
fix(proxy-health): refused probe responses reset the consecutive-fail…
maxmad64bis Sep 15, 2026
d8c0448
fix(opencode): rotate once when a Responses stream stalls before its …
maxmad64bis Sep 15, 2026
e325888
fix(sse): fail over opencode request on refused-route 403 (#13498)
maxmad64bis Sep 15, 2026
13f44af
fix(sse): pause failover dispatch after repeated transient upstream f…
maxmad64bis Sep 15, 2026
94d27e4
fix(providers): stop parking Mistral connections on a bare 401 with n…
maxmad64bis Sep 16, 2026
c44f5da
fix(i18n): drop the duplicated flag description key and the duplicate…
diegosouzapw Sep 16, 2026
997cd4d
fix(sse): stop retry wave on rate-limited 429 and drain 429 once (#13…
maxmad64bis Sep 16, 2026
8f55d85
fix(ci): clear the release/v3.8.51 base-reds left by the 09-15 batch …
diegosouzapw Sep 16, 2026
b077fc1
Merge remote-tracking branch 'origin/release/v3.8.51' into rework/13399
diegosouzapw Sep 16, 2026
cde49c9
fix(i18n): retranslate the verbatim-English leaves in all 65 catalogs…
diegosouzapw Sep 16, 2026
52a9431
fix(i18n): add agnes-cn description to 15 missing locales; sync provi…
diegosouzapw Sep 16, 2026
d4835c5
fix(sse): skip already-refused route per request on 429 (#13795)
maxmad64bis Sep 16, 2026
79ebbb5
fix(codex): whitelist reasoning object keys before the wire (#13643)
HouMinXi Sep 16, 2026
ce98c30
fix(combos): stop Gemini thinking from failing dashboard combo tests …
HouMinXi Sep 16, 2026
4902ac8
fix(network): skip Chrome TLS impersonation for Groq (#13445)
HouMinXi Sep 16, 2026
67f6c03
fix(embeddings): send stored API key on private-host embeddings nodes…
HouMinXi Sep 16, 2026
2b3847e
fix(sse): strip trailing assistant prefill on official Claude OAuth (…
HouMinXi Sep 16, 2026
d589e6b
fix(providers): clamp SenseNova DeepSeek V4 Flash effort to high (#13…
HouMinXi Sep 16, 2026
d6a0460
fix(providers): declare Agnes official thinking effort tiers (#13655)
HouMinXi Sep 16, 2026
c68b7f5
fix(gemini): send thinkingLevel for 3.8 Flash so thoughts stop eating…
HouMinXi Sep 16, 2026
6ef0f1c
fix(memory): skip FTS rewrite on access-count updates (#13331)
HouMinXi Sep 16, 2026
d7d010b
feat(i18n): blocking key-completeness gate — every locale carries eve…
diegosouzapw Sep 16, 2026
f36fcd8
fix(resilience): extend process crash guard to combo hedge cancels an…
HouMinXi Sep 16, 2026
e7214c7
ci(acceptance): emit a shadow release-acceptance report next to relea…
HouMinXi Sep 16, 2026
7ca6479
chore(ci): clear the last two release/v3.8.51 base-reds (agent-skills…
diegosouzapw Sep 16, 2026
5574eab
fix(api): restore function_call name on non-streaming /v1/responses (…
diegosouzapw Sep 16, 2026
4de7197
fix(security): random per-process self-loop admission bearer (#13679)…
diegosouzapw Sep 16, 2026
c06ac9a
fix(security): remove literal secrets from podman manifest, block CHA…
diegosouzapw Sep 16, 2026
8e3d06b
fix(security): isolate CDP proxy network + auth gate (#13679 PR F) (#…
diegosouzapw Sep 16, 2026
3fd2440
fix(sse): stop re-prepending Kiro tool docs onto every subsequent tur…
diegosouzapw Sep 16, 2026
771c4ce
fix(providers): echo reasoning_content for bai DeepSeek thinking-mode…
diegosouzapw Sep 16, 2026
9e53fad
fix(sse): recognize bare delta.reasoning in combo streaming quality-g…
diegosouzapw Sep 16, 2026
b33c00b
fix(db): cap per-request batch sweep and guard shared files (#13680, …
diegosouzapw Sep 16, 2026
79c4197
fix(security): reject unverifiable X-Cloud-Sig in cloud-sync HMAC che…
diegosouzapw Sep 16, 2026
d7d518a
fix(api): record audio transcription/translation/speech requests in c…
diegosouzapw Sep 16, 2026
61d6152
fix(usage): thread real error/exit-code through callLogs worker failO…
diegosouzapw Sep 16, 2026
0ba661e
fix(providers): surface real Antigravity upstream error detail (#1359…
diegosouzapw Sep 16, 2026
675ab18
fix(api): persist hideAutoCombos/hideNoThinkVariants in settings sche…
diegosouzapw Sep 16, 2026
68927fc
fix(providers): MiniMax-M3 reasoning leaks into delta.content instead…
diegosouzapw Sep 16, 2026
2bbe6e5
fix(sse): stop unhydrated compatible connections routing to the real …
diegosouzapw Sep 16, 2026
2e2dff7
fix(cli): redraw Windows tray icon with dark outline + ship icon.ico …
diegosouzapw Sep 16, 2026
5d1f468
fix(sse): fail closed on background token-refresh for dead proxy pool…
diegosouzapw Sep 16, 2026
edeb76b
fix(sse): stop PII sanitizer splicing OpenRouter metadata into conten…
diegosouzapw Sep 16, 2026
ad4d286
fix(sse): forward cache-creation tokens through the responses usage h…
diegosouzapw Sep 16, 2026
842c32f
fix(compression): keep tool messages through lite redundant-remove (#…
diegosouzapw Sep 16, 2026
d2fadb0
fix(db): reconcile INCREMENTAL auto_vacuum drift via the vacuum sched…
diegosouzapw Sep 16, 2026
57f41f5
fix(sse): frame post-keepalive /v1/responses stream errors with a typ…
diegosouzapw Sep 16, 2026
f5501cf
fix(providers): gemini-web no longer drops system instructions or the…
diegosouzapw Sep 16, 2026
05b44fa
fix(db): stop backoff-reset from busting the model catalog cache (#13…
diegosouzapw Sep 16, 2026
94220af
fix(providers): stop zed-hosted claude-haiku-4-5 thinking from inflat…
diegosouzapw Sep 16, 2026
0459c6d
fix(cli): surface fatal [STARTUP] boot diagnostics without --log (#13…
diegosouzapw Sep 16, 2026
74e44d7
fix(db): defer process.exit(0) by a macrotask on graceful shutdown (#…
diegosouzapw Sep 16, 2026
0dbd7f4
fix(sse): classify missing Chromium as a Z.ai host/config cooldown (#…
diegosouzapw Sep 16, 2026
aeba6b1
fix(routing): publish dashboard events from the round-robin combo loo…
diegosouzapw Sep 16, 2026
9342e4b
fix(sse): accept Responses API custom tool_choice (#13122) (#13775)
diegosouzapw Sep 16, 2026
da58ce5
fix(skills): repair nested malformed schemas in injected skill tools …
diegosouzapw Sep 16, 2026
9578eeb
fix(sse): widen max_tokens/tool_use exemption to lone empty text bloc…
diegosouzapw Sep 16, 2026
694c1b7
fix(cli): add POST /api/mcp/restart and mcp enable/disable subcommand…
diegosouzapw Sep 16, 2026
8f6205e
fix(providers): backfill combo context limit from snapshot after cold…
diegosouzapw Sep 16, 2026
5ff85c6
fix(oauth): fall back to public Code Suggestions on any GitLab Duo di…
diegosouzapw Sep 16, 2026
8939ccb
fix(sse): dynamic-specifier require for wreq-js in Codex WS transport…
diegosouzapw Sep 16, 2026
47032e7
fix(providers): correct Magnific key validation probe path (#12927) (…
diegosouzapw Sep 16, 2026
19b9d05
fix(providers): xAI translators drop legacy function_call and zero to…
diegosouzapw Sep 16, 2026
89304cd
Merge release/v3.8.51 into #13399
diegosouzapw Sep 16, 2026
5d9da87
docs: sync the counts #13399 moves (providers 358→359, free-forever 5…
diegosouzapw Sep 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
57 changes: 55 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -737,6 +737,12 @@ NEXT_PUBLIC_CLOUD_URL=
ENABLE_SOCKS5_PROXY=true
NEXT_PUBLIC_ENABLE_SOCKS5_PROXY=true

# Opt-in feature flag (default off; a dashboard DB override wins over this value): proxy pools
# and per-account rotation stop re-serving a member that just failed (TCP probe refused, or a
# 429 received through it) for a period that doubles on each repeat, up to a cap. No proxy
# status is written. "true" (or 1, yes) enables it; unset keeps plain selection.
# PROXY_SKIP_RECENTLY_FAILED=false

# Standard proxy variables (lowercase variants also supported).
# HTTP_PROXY=http://127.0.0.1:7890
# HTTPS_PROXY=http://127.0.0.1:7890
Expand Down Expand Up @@ -1140,6 +1146,22 @@ PROVIDER_LIMITS_SYNC_SPACING_MS=1500
# Used by: src/lib/db/core.ts::getWalTruncateIntervalMs().
#OMNIROUTE_WAL_TRUNCATE_INTERVAL_MS=21600000

# Frequent wal_checkpoint(PASSIVE) cadence (ms). Set to 0 to disable. Default: 300000 (5m).
# Used by: src/lib/db/walMaintenance.ts.
#OMNIROUTE_WAL_PASSIVE_INTERVAL_MS=300000

# WAL size (MB) above which a PASSIVE tick escalates to wal_checkpoint(TRUNCATE). Default: 256.
# Used by: src/lib/db/walMaintenance.ts.
#OMNIROUTE_WAL_GUARD_MAX_MB=256

# Minimum rows a cleanup must delete before the post-cleanup VACUUM runs. Default: 1000.
# 0 always vacuums when rows were freed. Used by: src/lib/db/cleanup.ts.
#OMNIROUTE_VACUUM_MIN_DELETED_ROWS=1000

# Explicit path to sql-wasm.wasm for the sql.js fallback adapter. Default: auto-detect.
# Used by: src/lib/db/adapters/sqljsAdapter.ts.
#OMNIROUTE_SQLJS_WASM_PATH=

# Skip the Redis-backed auth cache used by API key lookups (forces DB reads).
# Used by: src/lib/db/apiKeys.ts. Set to 1 to disable. Default: enabled.
#OMNIROUTE_DISABLE_REDIS_AUTH_CACHE=0
Expand Down Expand Up @@ -1670,6 +1692,8 @@ CURSOR_USER_AGENT="Cursor/3.4"
# ── TLS client (wreq-js fingerprint proxy) ──
# TLS_CLIENT_TIMEOUT_MS=600000 # Inherits from FETCH_TIMEOUT_MS by default
# TLS_FIRST_BYTE_WATCHDOG_MS=10000 # #12656: bounds time-to-first-byte on the wreq body (0 disables)
# OPENCODE_RESPONSES_STALL_ROTATION=false # #13484 feature flag (Settings → Feature Flags wins): rotate once when a streamed Responses reply stalls before its first byte
# RESPONSES_FIRST_BYTE_TIMEOUT_MS=15000 # #13484: OpenCode Responses first-byte window, only used when the OPENCODE_RESPONSES_STALL_ROTATION flag is on (0 disables)

# ── API Bridge (/v1 proxy server) ──
# API_BRIDGE_PROXY_TIMEOUT_MS=600000 # Proxy hop timeout (default: 10min)
Expand Down Expand Up @@ -1800,6 +1824,13 @@ APP_LOG_TO_FILE=true
# Override only to hand-tune for a known workload.
# HEAP_PRESSURE_THRESHOLD_MB=

# Exit the process after critical resource pressure persists, so a supervisor
# (systemd Restart=always, Docker restart policy) brings back a clean process.
# Accepts 1/true/yes/on. Default: false. Used by: open-sse/utils/resourcePressure.ts.
# OMNIROUTE_PRESSURE_SELF_RESTART=false
# How long (ms) critical pressure must persist before that exit fires. Default: 120000 (2m).
# OMNIROUTE_PRESSURE_SELF_RESTART_AFTER_MS=120000

# ── CLI helpers (bin/cli/) ──
# Override UI language for CLI output. Accepts BCP-47 locale (e.g. en, pt-BR).
# Falls back to LC_ALL / LC_MESSAGES / LANG / en if unset.
Expand All @@ -1817,6 +1848,10 @@ APP_LOG_TO_FILE=true
# Per-attempt HTTP timeout for CLI → server calls (milliseconds). Default: 30000.
# OMNIROUTE_HTTP_TIMEOUT_MS=30000

# How long `omniroute serve` waits for the health endpoint before printing the
# readiness-timeout warning (milliseconds). Also --ready-timeout. Default: 60000.
# OMNIROUTE_READY_TIMEOUT_MS=60000

# Set to 1 to print retry/backoff details to stderr during CLI commands.
# OMNIROUTE_VERBOSE=0

Expand Down Expand Up @@ -1962,6 +1997,12 @@ APP_LOG_TO_FILE=true
# Default: 8000 (8 seconds). On timeout, a last-good 200 is served when available.
# CATALOG_BUILD_TIMEOUT_MS=8000

# Age after which a connection's synced model list stops being authoritative for routing (#12849).
# A stale (or never-timestamped) synced catalog fails open to the provider registry.
# Used by: src/lib/db/models/activeSyncedCatalog.ts
# Default: 2592000000 (30 days)
# OMNIROUTE_SYNCED_CATALOG_STALE_AFTER_MS=2592000000

# ── NanoBanana (Image Generation) ──
# Polling config for async image generation jobs.
# Used by: open-sse/handlers/imageGeneration.ts
Expand Down Expand Up @@ -2198,15 +2239,20 @@ APP_LOG_TO_FILE=true
# proxy — only the operator sets active/inactive (a flaky probe must not strand an
# assigned proxy; #6246). Set "true" to restore the legacy test-and-set behaviour.
# PROXY_HEALTH_AUTO_DEACTIVATE=false
# Opt-in feature flag (default off; a dashboard DB override wins over this value): show,
# under a proxy pool in the dashboard, how many observed egress IPs served its members over
# the last 24 h and how many connections used them (read-only, computed from the proxy log,
# never used for routing). "true" (or 1, yes) enables it.
# PROXY_POOL_EGRESS_OBSERVATION=false

# Allow OAuth and provider validation flows to bypass a pinned proxy and connect
# directly when proxy reachability pre-checks fail. Default: false.
# Also configurable from Dashboard > Settings > Feature Flags.
# OMNIROUTE_CONTROL_PLANE_PROXY_DIRECT_FALLBACK=false

# Rate limit maximum wait time before failing a request (ms). Default: 15000 (15s)
# Rate limit maximum wait time before failing a request (ms). Default: 30000 (30s)
# Used by: open-sse/services/rateLimitManager.ts
# RATE_LIMIT_MAX_WAIT_MS=15000
# RATE_LIMIT_MAX_WAIT_MS=30000

# Limiter-managed execution backstop (Bottleneck `expiration`): bounds a job's
# post-dispatch execution, never queue wait. Must stay ABOVE upstream
Expand Down Expand Up @@ -2997,6 +3043,13 @@ QUOTA_STORE_DRIVER=sqlite
# CHATGPT_WEB_CODEX_CHROME_PATH=/usr/bin/chromium
# CHROME_PATH=/usr/bin/chromium
# CHATGPT_WEB_CODEX_CDP_URL=http://chatgpt-web-codex-browser:9223
# CDP_PROXY_TOKEN required by docker/chatgpt-web-codex-browser/cdp-proxy.mjs (#13679):
# when set, every request to the CDP proxy sidecar must present it as an
# `X-Omni-Cdp-Token` header. Left unset, the proxy keeps forwarding requests
# unauthenticated (network isolation via docker-compose.yml's dedicated
# `chatgpt-web-codex-net` is the default mitigation). Generate with:
# `openssl rand -hex 32`
# CDP_PROXY_TOKEN=
# CHATGPT_WEB_CODEX_TUNNEL_ID=tunnel_0123456789abcdef0123456789abcdef
# CHATGPT_WEB_CODEX_RUNTIME_KEY=
# CHATGPT_WEB_CODEX_CONNECTOR_NAME=OmniRoute Codex v2
Expand Down
17 changes: 14 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -511,9 +511,11 @@ jobs:
- run: node scripts/i18n/check-ui-keys-coverage.mjs --threshold=65
# Real-translation ratchet: a leaf copied verbatim from en.json passes key
# parity above but is still English to the user (es shipped 55% English).
# Advisory in PR-0; flipped to blocking once the backlog is retranslated (PR-4).
- name: i18n real-translation ratio (advisory)
run: node scripts/i18n/check-translation-ratio.mjs --warn
# Blocking since PR-4 retranslated the verbatim-English backlog: the share of
# untranslated leaves per locale may only fall (ratchet baseline in
# config/quality/i18n-translation-baseline.json; `npm run i18n:check-ratio:update`).
- name: i18n real-translation ratio
run: node scripts/i18n/check-translation-ratio.mjs
# #8463: a rewritten English value used to leave its 39 translations behind
# silently (googleOAuthWarning shipped wrong copy in 39 locales for months).
# Key parity above cannot see it — a stale translation counts as covered.
Expand All @@ -531,6 +533,15 @@ jobs:
env:
BASE_REF: ${{ github.base_ref && format('origin/{0}', github.base_ref) || '' }}
run: node scripts/i18n/check-new-key-coverage.mjs
# Absolute complement of the two gates above: every locale must carry exactly the key
# set of en.json, whatever the age of the key. A locale batch is generated from the
# en.json of the day the branch is cut and translates for days while the base keeps
# adding keys — the batch PR adds no key itself, so the new-key gate stays silent and
# 43 absent keys out of ~13,000 still read 99.7 % coverage. Incident 2026-09-15:
# batch 1 (#13044) landed 43 keys short in nine locales, batch 2 (#13660) 10 keys short
# in eight. Fix is `sync-ui-keys --locale=<codes> --translate-markers`.
- name: i18n key completeness (every locale carries every en.json key)
run: node scripts/i18n/check-key-completeness.mjs

# #8038: cheap glossary/protected-terms consistency gate —
# complements i18n-ui-coverage (key parity) and the ICU `i18n` job below
Expand Down
10 changes: 8 additions & 2 deletions .github/workflows/radar-export.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ name: Radar Export
on:
workflow_dispatch: # o operador pode publicar sob demanda (de qualquer ref)
push:
branches: [main] # produção: só o catálogo do main clobra o asset estável
# `main` e a release ativa (default branch) publicam no mesmo asset estável: o
# radar-server só consome o asset, então um merge de catálogo na release que ficasse
# à espera do cron semanal deixava o feed até 7 dias atrás do README (2026-09-14: a
# linha da Together removida em d6e62ae só saiu do feed com dispatch manual).
branches: [main, "release/**"]
paths:
- open-sse/config/freeModelCatalog.data.ts
- open-sse/config/freeModelCatalog.ts
Expand All @@ -19,7 +23,9 @@ on:
- scripts/release/radar-export.mjs
- .github/workflows/radar-export.yml
schedule:
- cron: "17 6 * * 1" # semanal (segunda 06:17 UTC): mantém geradoEm/proveniência frescos
# Diário 03:17 UTC — antes do `radar-feed.timer` do servidor (04:23 UTC), para o ciclo
# do dia já enxergar o export do dia; também mantém geradoEm/proveniência frescos.
- cron: "17 3 * * *"

permissions:
contents: read
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/release-acceptance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Release acceptance

on:
push:
branches: ["release/v*"]
workflow_dispatch:

permissions:
contents: read

concurrency:
group: release-acceptance-${{ github.ref }}
cancel-in-progress: false

jobs:
acceptance:
name: Release acceptance
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-node@v5
with:
node-version: "22"
cache: npm
- run: npm ci
- name: Emit shadow acceptance report
run: |
node scripts/quality/validate-release-acceptance.mjs \
--plan tests/fixtures/release-acceptance/plan-lint.json \
--manifests tests/fixtures/release-acceptance/shadow-manifests \
--out release-acceptance-report.json
continue-on-error: true
- uses: actions/upload-artifact@v4
if: always()
with:
name: release-acceptance-report
path: release-acceptance-report.json
if-no-files-found: ignore
retention-days: 30
7 changes: 7 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,11 @@
# credential; the generic-api-key rule flags the long hyphenated string.
'''omniroute-cheaperinference-sponsor-banner-dismissed-v\d+''',
'''SunbreakWebUI1''',
# Uzbek dashboard catalog (#13727, src/i18n/messages/uz.json `outputTokenDesc`):
# "Yakunlash/javob tokenlari" = "completion/response tokens". The rule reads the
# `...TokenDesc` key as a token assignment and the translated words as its value.
'''Yakunlash/javob''',
# Feature-flag id from #13439 (src/shared/constants/featureFlagDefinitions.ts):
# `key: "PROTECTED_PRIORITY_INFRA_502_ENABLED"` is a flag name, not a credential.
'''PROTECTED_PRIORITY_INFRA_502_ENABLED''',
]
Loading
Loading