Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
207 commits
Select commit Hold shift + click to select a range
ec4ff6f
fix(db): persist WAL busy counter across restarts
Sep 10, 2026
d6a6107
fix(quota): align AUTH window labels with usage API and clarify 503 (…
RaviTharuma Sep 10, 2026
a152eb9
fix(resilience): stop unbounded queue that hangs 6min until Aborted (…
maxmad64bis Sep 10, 2026
955b28e
feat(dashboard): badge a conversation that never reached a clean stop…
hartmark Sep 10, 2026
81bf3cc
docs(checks): keep doc counts honest — headings, rankings, catalog, w…
maxmad64bis Sep 10, 2026
d86cf75
fix(quality): register 4 drifted covering tests in stryker tap.testFi…
diegosouzapw Sep 10, 2026
393cfdd
fix(test): make the ToS heading guard actually require the parenthese…
diegosouzapw Sep 10, 2026
0549dcf
fix(api): scope batch bulk-delete to the calling API key (#13211)
diegosouzapw Sep 10, 2026
fd27ff0
chore(deps): drain the Dependabot queue — 10 of 13 alerts (#13213)
diegosouzapw Sep 10, 2026
ee21e7d
fix(a2a): build the status agent card from the request that asked for…
ntdatt812 Sep 10, 2026
e1a1290
fix(compression): keep tool_result blocks first when aging annotates …
ntdatt812 Sep 10, 2026
5df94f8
fix(bedrock): resolve context limits for every vendor prefix, not jus…
ntdatt812 Sep 10, 2026
a6f2821
fix(logs): match the in-memory call-log filter to the SQL one it re-a…
ntdatt812 Sep 10, 2026
4edc3d5
fix(azure): match the generation, not one release, for max_completion…
ntdatt812 Sep 10, 2026
1929aa6
fix(validation): accept a null dailyQuotaResetTimezone (#13066) (#13083)
ntdatt812 Sep 10, 2026
0a314c8
fix(translator): treat contentSchema and unevaluatedItems as schema s…
ntdatt812 Sep 10, 2026
f2d5728
fix(dashboard): test Responses nodes on /v1/responses, not chat compl…
ntdatt812 Sep 10, 2026
403a1a6
fix(guardrails): mask PII inside a tool_result's nested content (#12930)
ntdatt812 Sep 10, 2026
567abb5
fix(security): scan the text a tool_result carries (#13101)
ntdatt812 Sep 10, 2026
751247a
fix(security): scan both ends of an oversized body, not just the fron…
ntdatt812 Sep 10, 2026
9a56147
fix(skills): read positionals declared with .addArgument() (#13009)
ntdatt812 Sep 10, 2026
2b9e7fb
feat(providers): add GreenPT as an OpenAI-compatible provider (#13024)
ntdatt812 Sep 10, 2026
22473de
feat(providers): add EURouter as an OpenAI-compatible gateway (#12985…
ntdatt812 Sep 10, 2026
af49d49
fix(stream): accept the buffer size glm.ts has been passing since #12…
ntdatt812 Sep 10, 2026
edfcb8b
fix(test): resolve the WebDAV handler path with fileURLToPath (#13196)
anhtahaylove Sep 11, 2026
178d252
fix(test): cap local unit-test concurrency at 4 to avoid exhausting c…
anhtahaylove Sep 11, 2026
a1b9b02
fix(telegram): authenticate webhook deliveries with the Telegram secr…
anhtahaylove Sep 11, 2026
658153c
fix(stream): release the upstream body when the JSON-to-SSE sniff tim…
anhtahaylove Sep 11, 2026
30c96d4
fix(telegram): bound the per-user API key cache (#13166)
anhtahaylove Sep 11, 2026
a3fa6cf
fix(traffic-inspector): release WS subscriber and ping timer on a dea…
anhtahaylove Sep 11, 2026
66330cc
fix(compression): pass a URL object when spawning the LLMLingua worke…
anhtahaylove Sep 11, 2026
b1733d3
fix(plugins): make SIGKILL escalation idempotent per child (#13092)
anhtahaylove Sep 11, 2026
85a5126
fix(compression): terminate idle workers on eviction (#13091)
anhtahaylove Sep 11, 2026
6761897
fix(gamification): close the badge SSE stream when the signal is alre…
anhtahaylove Sep 11, 2026
99fb441
fix(db): release process listeners when a node:sqlite adapter closes …
anhtahaylove Sep 11, 2026
d61b172
fix(cli-helper): clear the log stream timeout on the abort path (#13114)
anhtahaylove Sep 11, 2026
e1cfdb5
fix(acp): release listeners, timers and sessions on every sendPrompt …
anhtahaylove Sep 11, 2026
20abd89
fix(acp): bound session output buffers and reset stderr per prompt (#…
anhtahaylove Sep 11, 2026
9f0d54a
fix(combo): parse numeric-epoch rateLimitedUntil in hasFutureRateLimi…
maxmad64bis Sep 11, 2026
3156643
fix(opencode): require an http(s) baseURL in both OpenCode plugins (#…
maxmad64bis Sep 11, 2026
cc4f7ed
fix(logging): prefer the pipeline over the raw bodies in call-log sto…
maxmad64bis Sep 11, 2026
a19bb22
fix(providers): lock opencode model on upstream 400 model-unavailable…
maxmad64bis Sep 11, 2026
cfa2fc7
fix(sse): rotate opencode accounts on transient 5xx (#12975)
maxmad64bis Sep 11, 2026
abe234e
fix(gamification): durable action-count badges that survive xp_audit_…
pacocartones Sep 11, 2026
4309a2f
fix(antigravity): preserve thought token usage (#13055)
pacocartones Sep 11, 2026
a0c52ba
fix(images): fall through combo edit targets on /v1/images/edits (#12…
pacocartones Sep 11, 2026
616d54c
fix(config): persist background-degradation entry deletions (#12647)
pacocartones Sep 11, 2026
2e10346
docs(reference): sync FEATURE_FLAGS.md with featureFlagDefinitions (#…
pacocartones Sep 11, 2026
3198c54
fix(orchestration): emit the real task status on non-status updates (…
pacocartones Sep 11, 2026
02884ed
fix(db): auto-clean conversation_turn_nodes and orphaned conversation…
pacocartones Sep 11, 2026
00421fd
fix(devin): accept Windows sandbox paths in the agentic home check (#…
pacocartones Sep 11, 2026
a606df0
fix(video): clamp estimateJpegFrameBytes, reuse the shared JPEG prefi…
pacocartones Sep 11, 2026
7ad5e11
fix(api-manager): accessible loading status on the skeleton gate (#12…
pacocartones Sep 11, 2026
b23b0ca
fix(gemini): strip prefixItems from Gemini tool schemas (#12540)
pacocartones Sep 11, 2026
0831d48
fix(audio): resolve combo names on /v1/audio/translations (#12536)
pacocartones Sep 11, 2026
e09cb5a
chore(lifecycle): gate DEFAULT_DEGRADATION_MAP against retired ids (#…
pacocartones Sep 11, 2026
afd2d99
fix(rerank): clamp Voyage top_k and honor NVIDIA return_documents (#1…
pacocartones Sep 11, 2026
7cd2fab
fix(routing): honor edited custom-node API type (#12358)
pacocartones Sep 11, 2026
6caf836
fix(providers): include Agnes model in video polling (#12356)
pacocartones Sep 11, 2026
16c68ba
feat(gamification): pay the documented streak and badge XP rewards (#…
pacocartones Sep 11, 2026
3f62e43
test(compression): assert idle eviction terminates at the resource le…
diegosouzapw Sep 11, 2026
374bbe3
fix(i18n): translate the home Recent Requests panel and topology lege…
pacocartones Sep 11, 2026
ba1ee66
fix(i18n): quote raw <name> in the auto-sync profiles description (#1…
pacocartones Sep 11, 2026
c75e293
fix(api): thread X-OmniRoute-Fallback-Attempts through combo chat (#1…
HouMinXi Sep 11, 2026
a31c788
fix(chatcore): restore provider failure classification and credential…
HouMinXi Sep 11, 2026
f0b83b8
fix(grok-cli): park a 402 on the empty Grok Build login, not grok-4.6…
HouMinXi Sep 11, 2026
541a648
fix(resilience): classify Cline 401 as refreshable OAuth (#12594) (#1…
HouMinXi Sep 11, 2026
fc3ce83
fix(db): resolve sql-wasm.wasm across global and hoisted layouts (#12…
HouMinXi Sep 11, 2026
49b6c3e
fix(combo): stop quota-weighted routing onto out-of-credit connection…
HouMinXi Sep 11, 2026
aedc506
fix(docs): keep operator-internal security writeups out of public /do…
HouMinXi Sep 11, 2026
9adc2f8
fix(dashboard): list and purge leftover gemini-cli rows (#13197)
HouMinXi Sep 11, 2026
9b4210a
feat(providers): Agnes 3.0 Flash catalog, CN host, live /v1/models (#…
HouMinXi Sep 11, 2026
0cd88ec
fix(models): give Gemini 3.8 Flash its own output spec (#13195)
HouMinXi Sep 11, 2026
1714214
fix(dashboard): expose Volcano console cookie field and unwrap error …
HouMinXi Sep 11, 2026
f4fd919
fix(catalog): degrade unknown combo targets in LCD modalities (#12613…
HouMinXi Sep 11, 2026
d92bc8e
feat(sse): restore GPT-6 Astra effort aliases and Codex 0.153.4 pin (…
HouMinXi Sep 11, 2026
6788b43
fix(combos): keep dashboard combo tests off reasoning and rate limits…
HouMinXi Sep 11, 2026
73dee8d
fix(vision): honor Custom Models vision flag on advertised aliases (#…
HouMinXi Sep 11, 2026
0c2a5f3
fix(i18n): translate pre-existing __MISSING__ keys for combo.sort and…
HouMinXi Sep 11, 2026
d2bc688
fix(i18n): backfill missing usage.kiloPass strings in 39 locales (#12…
HouMinXi Sep 11, 2026
b85185d
chore(quality): clear the ESLint errors the 2026-09-11 batch introduc…
diegosouzapw Sep 11, 2026
00f16a2
chore(quality): drop two stale ESLint suppression entries (#13384)
diegosouzapw Sep 11, 2026
0b56765
chore(quality): retighten the chat.ts unused-vars suppression to 8 (#…
diegosouzapw Sep 11, 2026
359b9b5
fix(db): self-heal under sustained memory pressure, VACUUM gate, WAL …
HouMinXi Sep 11, 2026
c4eafaa
fix(auth): probe a pinned inactive connection after quota top-up (#13…
HouMinXi Sep 11, 2026
fe73a3a
fix(responses): wrap forced-non-streaming web_search JSON as SSE (#13…
HouMinXi Sep 11, 2026
f1fc54e
fix(api): close DNS-rebinding SSRF gap in webhook outbound-URL guard …
diegosouzapw Sep 12, 2026
2ecb3d5
test(combo): freeze the clock where quota-weighted scores are compare…
diegosouzapw Sep 12, 2026
9982e37
fix(guardrails): stop Vision Bridge from re-selecting a model locked …
diegosouzapw Sep 12, 2026
c79caa9
fix(db): scope model-hidden overrides by modality (#12172) (#13258)
diegosouzapw Sep 12, 2026
0b7a6ab
fix(usage): fail closed on budget enforcement for unpriced auto alias…
diegosouzapw Sep 12, 2026
907ffcc
fix(dashboard): refresh the providers list after deleting a compatibl…
diegosouzapw Sep 12, 2026
ced6ee7
fix(providers): scope TinyCMS DOM shims to the call, not the process …
diegosouzapw Sep 12, 2026
8d52dca
fix(cli): run Node runtime guard before heavy import chain (#12296) (…
diegosouzapw Sep 12, 2026
15b2687
fix(dashboard): allow deleting the last extra-upstream-header row eve…
diegosouzapw Sep 12, 2026
d3a5962
fix(electron): relativize standalone symlink targets for Windows mani…
diegosouzapw Sep 12, 2026
10099d0
fix(db): scope local-provider apiKey dedup to base URL for multi-acco…
diegosouzapw Sep 12, 2026
480b190
fix(providers): minimax-m3 collapses manual thinking.type:enabled to …
diegosouzapw Sep 12, 2026
954f12b
fix(providers): correct opencode-zen muse-spark context length and Re…
diegosouzapw Sep 12, 2026
6207868
fix(cli): setup-opencode respects --api-key/OMNIROUTE_API_KEY over co…
diegosouzapw Sep 12, 2026
bc28bb0
fix(api): enforce API key policy on ElevenLabs proxy routes (#12574) …
diegosouzapw Sep 12, 2026
d0b22dd
fix(open-sse): write Adobe Firefly session tokens and cookie jars wit…
diegosouzapw Sep 12, 2026
57a37ed
fix(docker): bind app/sidecar compose ports to loopback by default (#…
diegosouzapw Sep 12, 2026
b8b638e
fix(api): remove hardcoded wildcard CORS in openai-to-gemini-sse.ts (…
diegosouzapw Sep 12, 2026
b3bee58
fix(api): create DB export temp paths with mkdtemp instead of predict…
diegosouzapw Sep 12, 2026
cb55187
chore(ci): make worktrees carry the hooks that enforce the identity g…
diegosouzapw Sep 12, 2026
0431db3
fix(tests): align model-sync log assertion to shipped path redaction …
diegosouzapw Sep 12, 2026
2e872c5
fix(dashboard): surface combined-pipeline error in Compression Studio…
diegosouzapw Sep 12, 2026
39abab6
fix(dashboard): honor active compression profile in effective-pipelin…
diegosouzapw Sep 12, 2026
7a938fe
fix(sse): surface an error for a truly empty Claude stream (#12398) (…
diegosouzapw Sep 12, 2026
660137b
fix(routing): recognize CLIProxyAPI unknown-provider 400 as fallback-…
diegosouzapw Sep 12, 2026
a5db197
fix(routing): stop round-robin combo opencode targets from collapsing…
diegosouzapw Sep 12, 2026
13ee0f1
fix(sse): cap HuggingChat NDJSON body size and bound the read loop (#…
diegosouzapw Sep 12, 2026
c5707e6
fix(sse): require Responses-shaped body before native OpenAI-compatib…
diegosouzapw Sep 12, 2026
02128f3
fix(sse): register Arcee AI in the executor provider registry (#12784…
diegosouzapw Sep 12, 2026
8751f11
fix(routing): stop reactive-compaction log from lying when compressio…
diegosouzapw Sep 12, 2026
0569f42
fix(providers): route opencode-go/gpt-5.6-luna to /responses (#12196)…
diegosouzapw Sep 12, 2026
1361a9d
fix(sse): add first-byte watchdog to the TLS-fingerprint transport (#…
diegosouzapw Sep 12, 2026
57d9e74
fix(dashboard): surface auth-required banner for guest-session databa…
diegosouzapw Sep 12, 2026
2cb02d2
fix(sse): exempt tiny-budget reasoning probes and trace persisted-coo…
diegosouzapw Sep 12, 2026
bdc2fb7
fix(oauth): warn before the dead localhost:8080 redirect in antigravi…
diegosouzapw Sep 12, 2026
8c5eff1
fix(oauth): align codebuddy-cn OAuth User-Agent with chat/usage (#127…
diegosouzapw Sep 12, 2026
2acae48
fix(sse): route shell-reported Auggie CLI-not-found through the actio…
diegosouzapw Sep 12, 2026
0bdbe48
fix(providers): stop devin-cli spawn error from double-closing SSE co…
diegosouzapw Sep 12, 2026
f5e8c14
fix(sse): parse Ollama Cloud's current usage markup (#12749) (#13260)
diegosouzapw Sep 12, 2026
84bc929
chore(quality): rebaseline imageGeneration.ts for the #12945 image-on…
diegosouzapw Sep 12, 2026
01a66e2
fix(ci): clear two base-reds on release/v3.8.51 — mutation-coverage g…
diegosouzapw Sep 12, 2026
95ebed7
test(plugin): wait for the v2 lazy-refresh tier instead of sleeping p…
diegosouzapw Sep 12, 2026
fb8f7d7
chore(deps): patch toml and esbuild in the opencode plugin lockfiles …
diegosouzapw Sep 12, 2026
1fb7d5d
fix(providers): refresh Trae's stale Referer/Origin and forward user …
diegosouzapw Sep 12, 2026
b97bc59
fix(docker): require a per-session token on the VNC browser CDP bridg…
diegosouzapw Sep 12, 2026
6dc6692
chore(electron): prune the root-level files of every translated docs …
diegosouzapw Sep 12, 2026
db6feb6
fix(auth): dashboard session requires the authenticated claim — Curso…
diegosouzapw Sep 12, 2026
7741aef
fix(i18n): add the Phase 3 orchestration keys to the nine EU locales …
diegosouzapw Sep 12, 2026
1b2dd3d
fix(a2a): accept dashboard session auth on /a2a route (#12888) (#13271)
diegosouzapw Sep 12, 2026
cf2d29d
fix(memory): authenticate internal /v1/rerank loopback call (#12745) …
diegosouzapw Sep 12, 2026
152d951
fix(cache): include tool_choice/tools/response_format in semantic cac…
diegosouzapw Sep 12, 2026
f7dbfc8
chore(tests): revive 51 vitest files parked behind a closed tracker (…
diegosouzapw Sep 14, 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
e240b04
merge: release/v3.8.51 into rework/13218
diegosouzapw Sep 15, 2026
7ef3aee
fix(db): never write the WAL busy counter on the busy path
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
de0d09f
Merge release/v3.8.51 into #13218
diegosouzapw Sep 15, 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
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ docs/i18n/**
# so without this rule these land in /app/docs and become readable through the
# dashboard's Docs viewer at runtime.
docs/superpowers/**
# Operator-internal security writeups: git only, not the image or /docs catalog.
docs/security/STEALTH_GUIDE.md
docs/security/SOCKET_DEV_FINDINGS.md
docs/security/MITM-TPROXY-DECRYPT.md
docs/security/PUBLIC_CREDS.md
docs/diagrams/**/*.png
docs/diagrams/**/*.jpg
docs/diagrams/**/*.jpeg
Expand Down
82 changes: 78 additions & 4 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,21 @@ DISABLE_SQLITE_AUTO_BACKUP=false
# Host port for the compose Redis sidecar. Default: 6379.
# REDIS_PORT=6379

# Host interface docker-compose publishes the app's own ports (dashboard,
# API, live-WS) on for the base/web/cli/host profiles and docker-compose.prod.yml.
# Default: 127.0.0.1 (loopback only). Combined with REQUIRE_API_KEY=false
# (the default below), an unqualified publish spec would expose the anonymous
# /v1 LLM proxy to your whole LAN/WAN. Only set this to 0.0.0.0 once you've
# confirmed REQUIRE_API_KEY=true, or that a reverse proxy in front of this
# instance already enforces its own authentication. (#12568)
# APP_BIND_HOST=127.0.0.1
# Host interface docker-compose publishes the Qdrant memory sidecar on.
# Default: 127.0.0.1 (loopback only). Same LAN-exposure reasoning as Redis.
# QDRANT_BIND_HOST=127.0.0.1
# Host interface docker-compose publishes the Bifrost router sidecar on.
# Default: 127.0.0.1 (loopback only). Same LAN-exposure reasoning as Redis.
# BIFROST_BIND_HOST=127.0.0.1

# ═══════════════════════════════════════════════════════════════════════════════
# 3. NETWORK & PORTS
# ═══════════════════════════════════════════════════════════════════════════════
Expand Down Expand Up @@ -373,6 +388,8 @@ AUTH_COOKIE_SECURE=false
# Require an API key for all /v1/* proxy endpoints.
# Used by: API middleware — rejects unauthenticated requests to the proxy API.
# Default: false | Set true for multi-user/public deployments.
# Leaving this false is only safe when the app is reachable on loopback only
# (see APP_BIND_HOST above) or sits behind a reverse proxy doing its own auth.
REQUIRE_API_KEY=false

# Allow revealing full API key values in the Dashboard UI.
Expand Down Expand Up @@ -1123,6 +1140,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 @@ -1175,6 +1208,11 @@ CODEX_OAUTH_CLIENT_ID=app_EMoamEEZ73f0CkXaXp7hrann
# Trae OAuth token override. Used by: open-sse/executors/trae.ts.
# TRAE_TOKEN=

# Trae web client Origin/Referer override (fleet-wide bump if Trae moves hosts
# again without a code change). Default: https://work.trae.ai.
# Used by: open-sse/executors/trae.ts.
# TRAE_WEB_ORIGIN=https://work.trae.ai

# ── Gemini / Antigravity (Google-based) ──
# These providers ship public OAuth client_id/secret values embedded in their
# public CLIs. Defaults are baked into the code via
Expand Down Expand Up @@ -1311,7 +1349,8 @@ CLAUDE_USER_AGENT="claude-cli/2.1.258 (external, cli)"
# stream with a misleading 400 out-of-extra-usage placeholder. Set to true to
# forward the original names verbatim (debugging only).
# CLAUDE_DISABLE_TOOL_NAME_CLOAK=false
CODEX_USER_AGENT="codex-cli/0.144.1 (Windows 10.0.26200; x64)"
# Optional override; leave unset to follow the shared Codex client version.
# CODEX_USER_AGENT="codex-cli/0.153.4 (Windows 10.0.26200; x64)"
GITHUB_USER_AGENT="GitHubCopilotChat/0.54.0"
ANTIGRAVITY_USER_AGENT="antigravity/2.0.1 linux/arm64 google-api-nodejs-client/10.3.0"
KIRO_USER_AGENT="AWS-SDK-JS/3.0.0 kiro-ide/1.0.0"
Expand All @@ -1331,7 +1370,7 @@ CURSOR_USER_AGENT="Cursor/3.4"

# Override Codex client version sent in headers independently of the
# CODEX_USER_AGENT string. Used by: open-sse/config/codexClient.ts.
# CODEX_CLIENT_VERSION=0.144.1
# CODEX_CLIENT_VERSION=0.153.4
#
# Override the advertised Claude Code client version independently of
# CLAUDE_USER_AGENT. Anthropic gates some models (Fable 5.1) on this
Expand Down Expand Up @@ -1646,6 +1685,7 @@ 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)

# ── API Bridge (/v1 proxy server) ──
# API_BRIDGE_PROXY_TIMEOUT_MS=600000 # Proxy hop timeout (default: 10min)
Expand Down Expand Up @@ -1776,6 +1816,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 @@ -1793,6 +1840,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 @@ -1938,6 +1989,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 @@ -2077,6 +2134,13 @@ APP_LOG_TO_FILE=true
# Management key for an externally managed instance. Embedded instances use
# OmniRoute's encrypted service key.
# CLIPROXYAPI_MANAGEMENT_KEY=
# Host interface docker-compose publishes the cliproxyapi sidecar on (the
# --profile cliproxyapi Docker service, port 8317). Default: 127.0.0.1
# (loopback only) — its data volume holds provider OAuth/API credentials, and
# the pinned image has no env-based data-plane api-keys override (only a
# mounted config.yaml), so an unqualified publish spec would put a
# credential-bearing service on your whole LAN. (#12578)
# CLIPROXY_BIND_HOST=127.0.0.1

# ── Mux embedded service ──
# Override the port where the embedded Mux (coder/mux) agent-orchestration
Expand Down Expand Up @@ -2173,9 +2237,9 @@ APP_LOG_TO_FILE=true
# 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 @@ -2721,6 +2785,10 @@ PLAYGROUND_COMPARE_MAX_COLUMNS=4
# MEMORY_VEC_TOP_K=20 # default top-K for vector search
# MEMORY_RRF_K=60 # RRF k constant (sqlite-vec hybrid recipe)
# HF_HUB_ENDPOINT=https://huggingface.co # override Hugging Face Hub base URL for static potion downloads
# Test/diagnostic seam (src/lib/memory/vectorStore.ts) — forces getVectorStore() to
# return null (simulates a cloud/WASM environment without sqlite-vec), degrading
# memory retrieval to FTS5 keyword search. Default off; leave unset in production.
# VECTOR_STORE_DISABLE_VEC=false
# TV6 typed memory decay (OPT-IN, default off — the sweep DELETES decayed memories)
# MEMORY_TYPED_DECAY_ENABLED=false # master switch for the destructive sweep (default off)
# MEMORY_TYPED_DECAY_EPISODIC_DAYS=30 # episodic TTL in days; 0 = episodic immune too
Expand Down Expand Up @@ -2990,6 +3058,7 @@ QUOTA_STORE_DRIVER=sqlite
# OMNIROUTE_VNC_READY_MS=45000
# OMNIROUTE_VNC_HARVEST_MS=20000
# OMNIROUTE_VNC_CHROMIUM_ARGS=--remote-debugging-port=9222 --no-first-run --no-default-browser-check
# OMNIROUTE_VNC_NETWORK=omniroute-vnc-browser-login

# ─────────────────────────────────────────────────────────────────────────────
# Data-dir alias (optional — open-sse/services/notionThreadSessions.ts)
Expand Down Expand Up @@ -3070,6 +3139,11 @@ QUOTA_STORE_DRIVER=sqlite
# Telegram Mini App bridge. The update endpoint remains disabled while the bot
# token is unset. Used by: src/lib/telegram/* and src/app/api/telegram/update/route.ts.
# TELEGRAM_BOT_TOKEN=
# Shared secret registered with setWebhook and echoed back by Telegram as the
# X-Telegram-Bot-Api-Secret-Token header. REQUIRED for the webhook path: without
# it the webhook is rejected with 503, because an unauthenticated update lets any
# caller mint API keys and spend upstream quota. The Mini App path does not use it.
# TELEGRAM_WEBHOOK_SECRET=
# TELEGRAM_DEFAULT_MODEL=auto/chat
# TELEGRAM_BOT_API_BASE=https://api.telegram.org
# TELEGRAM_WEBHOOK_TIMEOUT_MS=60000
Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,12 @@ jobs:
- run: npm run check:test-discovery
- run: npm run check:radar-sentinels
- run: npm run check:tracked-artifacts
# A test parked in vitest.config.ts's exclude list does not run, and looks like
# coverage to whoever reads the tree. 62 files accumulated behind a comment pointing
# at #8618 — closed in August while the list grew to 62; 51 of them passed when
# finally measured (#13204). This gate requires every exclusion to name a tracker and
# to appear in config/quality/vitest-exclusions.json, so the debt stays reviewable.
- run: npm run check:vitest-exclusions
# (gap 30) Also lives in quality.yml's PR-only "Merge integrity" job — because the
# CHANGELOG half of that job needs a base to diff against. This half does NOT: the
# generator either reproduces the committed SKILL.md files or it does not.
Expand Down Expand Up @@ -515,6 +521,16 @@ jobs:
env:
BASE_REF: ${{ github.base_ref && format('origin/{0}', github.base_ref) || '' }}
run: node scripts/i18n/check-ui-value-drift.mjs
# Sibling of the drift gate above. That one catches an English value that was
# REWRITTEN; this one catches an English key that was ADDED while some locales never
# got it. The coverage gate at the top of this job cannot: it is a percentage per
# locale, and 11 absent keys out of ~13,000 leaves coverage at 99.9%. Incident: the
# Phase 3 canvas keys were translated across the 42 locales that existed, then the EU
# batch (#13044) took the repo to 51 and the nine newcomers shipped untranslated.
- name: i18n new-key coverage (a new key must reach every locale)
env:
BASE_REF: ${{ github.base_ref && format('origin/{0}', github.base_ref) || '' }}
run: node scripts/i18n/check-new-key-coverage.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
Loading
Loading