Skip to content
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
1368 commits
Select commit Hold shift + click to select a range
544ae2d
fix(api): accept a missing status query-param on GET /api/plugins ins…
diegosouzapw Jul 24, 2026
73762b1
fix(backend): stop prompt-cache affinity from silently reordering an …
diegosouzapw Jul 24, 2026
1f58a29
fix(api): estimate inline base64 image tokens instead of counting the…
diegosouzapw Jul 24, 2026
09e9ece
fix(resilience): treat an unreachable-proxy ECONNREFUSED as a circuit…
diegosouzapw Jul 24, 2026
1cafd32
fix(dashboard): persist compression engine detail settings (Headroom …
diegosouzapw Jul 24, 2026
b8901b6
feat(db): persist caller session tag into call_logs for per-session c…
diegosouzapw Jul 25, 2026
53a91b3
feat(api): quota-aware fallback routing for web-fetch providers (#829…
diegosouzapw Jul 25, 2026
9a0e764
feat(cli): replace ANTHROPIC_SMALL_FAST_MODEL with Fable default (#8343)
leszek3737 Jul 25, 2026
58ab8b1
Clicking a provider card hitting back loses scroll position (#8349)
swingtempo Jul 25, 2026
9dcbbd1
fix(i18n): restore brand proper nouns and unify terminology in zh-CN …
ikelvingo Jul 25, 2026
5d9ace6
feat(providers): map upstream reasoning-level metadata in openai-comp…
diegosouzapw Jul 25, 2026
49ccc73
docs(claude-code): document unprefixed model IDs and the Ambiguous mo…
dvirarad Jul 25, 2026
73c5e27
i18n(zh-TW): translate missing Reasoning Routing strings (#8423)
MumuTW Jul 25, 2026
4528fc4
fix(auth): exclude local CLI providers from tokenHealthCheck expirati…
MumuTW Jul 25, 2026
3432579
fix(oauth): add devin-cli and agy entries to OAUTH_TEST_CONFIG (#8427)
MumuTW Jul 25, 2026
7cc922b
fix(dashboard): preserve connection health visual on last routed topo…
MumuTW Jul 25, 2026
88180d0
feat(providers): add missing opencode-go reasoning effort variants (#…
Prudhvivuda Jul 25, 2026
0d92be2
test(e2e): contract test for the full provider journey (#8330) (#8444)
HoneyTyagii Jul 25, 2026
592defd
chore(deps): bump codecov/codecov-action from 5.5.5 to 7.0.0 (#8452)
dependabot[bot] Jul 25, 2026
2129aa8
chore(deps): bump github/codeql-action/analyze from 4.37.1 to 4.37.3 …
dependabot[bot] Jul 25, 2026
2a02d63
chore(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#8454)
dependabot[bot] Jul 25, 2026
fb6b8e5
chore(deps): bump github/codeql-action/init from 4.37.1 to 4.37.3 (#8…
dependabot[bot] Jul 25, 2026
94125e0
chore(deps): bump actions/setup-python from 6 to 7 (#8456)
dependabot[bot] Jul 25, 2026
11f7ba2
fix(sse): record tool calls into shared state for openai->openai-resp…
hartmark Jul 25, 2026
9096428
feat: add Claude Opus 5 support (#8464)
backryun Jul 25, 2026
1930b09
chore(sse): drop deprecated baseUrl from open-sse tsconfig for TS 7.0…
backryun Jul 25, 2026
8eebda1
refactor(sse): resolve open-sse utils/translator type diagnostics for…
backryun Jul 25, 2026
3f2bf86
fix(sse): call the real abort-signal helper in the Gemini Business ex…
backryun Jul 25, 2026
5a20314
refactor(sse): declare the executor execute() result contract (#8489)
backryun Jul 25, 2026
7a8f915
test(sse): repair two base-red gates on release/v3.8.49 (#8490)
backryun Jul 25, 2026
e0aef4d
fix(translator): set status:completed on Responses input items to sat…
diegosouzapw Jul 25, 2026
24142a8
fix(providers): expose base-URL override for Kimi/Moonshot CN-region …
diegosouzapw Jul 25, 2026
55ff236
fix(providers): repoint zai-web executor to chat.z.ai v2 chat-complet…
diegosouzapw Jul 25, 2026
13cc128
fix(cli): fall back to node:sqlite when better-sqlite3 is unavailable…
diegosouzapw Jul 25, 2026
6127781
fix(backend): compute AgentBridge diagnose DNS check per-agent instea…
diegosouzapw Jul 25, 2026
6cad24e
fix(api): probe provider alias in models.dev reverse capability looku…
diegosouzapw Jul 25, 2026
9ced2e9
fix(sse): stop stream readiness from treating a choices-less error fr…
diegosouzapw Jul 25, 2026
3070925
fix(sse): stop combo's aggregated failure response from mixing fields…
diegosouzapw Jul 25, 2026
ec0be07
chore(deps): patch js-yaml + postcss for 2 high Dependabot alerts (#8…
diegosouzapw Jul 25, 2026
278640b
chore(ci): resync stale no-explicit-any suppression count for proxy-r…
MumuTW Jul 25, 2026
d06d3fb
test(sse): update three backoff assertions stale since the #8396 cool…
MumuTW Jul 25, 2026
c447be4
fix(db): classify compressionDetailNormalizers as db-internal in chec…
MumuTW Jul 25, 2026
cc63ac9
test(sse): register #8396 and #8376 unit tests in stryker tap.testFil…
MumuTW Jul 25, 2026
4053e23
chore(quality): rebaseline file-size for inherited base growth (#8561)
fenix007 Jul 25, 2026
1d7878d
chore(quality): rebaseline complexity/cognitive to v3.8.49 tip drift
ikelvingo Jul 26, 2026
f60c9fe
chore(quality): rebaseline complexity/cognitive for v3.8.49 merge-tra…
ikelvingo Jul 26, 2026
a51cd06
fix(resilience): honor comboCooldownWait for every combo strategy (#8…
DinonowDev Jul 26, 2026
06326a3
refactor(sse): stop three executors shadowing BaseExecutor.buildHeade…
backryun Jul 26, 2026
1bd1af2
refactor(sse): narrow three result unions via type predicates (#8499)
backryun Jul 26, 2026
fd739ab
refactor(sse): restore three executor types the runtime already relie…
backryun Jul 26, 2026
0312fe2
refactor(guardrails): narrow the documented void return at the dispat…
backryun Jul 26, 2026
2cf462c
refactor(sse): type the rerank response adapter's options parameter (…
backryun Jul 26, 2026
d628105
refactor(sse): retag the designer-web result unions with string discr…
backryun Jul 26, 2026
647afe3
refactor(sse): declare the multipart/gRPC frame bodies as ArrayBuffer…
backryun Jul 26, 2026
11f79b6
refactor(sse): stop isClaudeEventPayload claiming a narrowing it neve…
backryun Jul 26, 2026
6b5e7d5
fix(devin-cli): update ACP JSON-RPC protocol for Devin CLI 3000.2.x (…
MumuTW Jul 26, 2026
56185a8
refactor(dashboard): clear file-size base-red by extracting provider-…
MumuTW Jul 26, 2026
f0b08f9
chore(usage): decompose services/usage.ts into per-provider usage/* l…
MumuTW Jul 26, 2026
074fd6d
chore(validation): decompose providers/validation.ts into validation/…
MumuTW Jul 26, 2026
533f805
chore(token-refresh): decompose services/tokenRefresh.ts into tokenRe…
MumuTW Jul 26, 2026
1a70795
chore(combo): extract pure error predicates and quota status helpers …
MumuTW Jul 26, 2026
c06cd83
fix(sse): shallow per-target copy for the combo attempt body (#7847) …
MumuTW Jul 26, 2026
1cfbfc0
fix(sse): estimate tokens from the object and count JSON length witho…
MumuTW Jul 26, 2026
4bf47c9
chore(perf): add deterministic request-body heap benchmark (#7847) (#…
MumuTW Jul 26, 2026
cbdf1fc
fix(backend): bound the client raw request snapshot instead of deep-c…
MumuTW Jul 26, 2026
4c9292e
chore(i18n): normalize zh-TW terminology and sync stale README figure…
MumuTW Jul 26, 2026
7b3ef47
fix(providers): persist runtime-discovered Antigravity projectId to t…
diegosouzapw Jul 26, 2026
a784c52
fix(api): warn (never reject) when a combo name shadows a real model …
diegosouzapw Jul 26, 2026
fae1066
fix(api): expose responses-format models on all VS Code Ollama listin…
diegosouzapw Jul 26, 2026
2d48bb6
fix(hyperagent): default 1M context for fable/opus/sonnet (#8496)
artickc Jul 26, 2026
26d50f1
feat(adobe-firefly): reference image attach + /v1/images/edits (follo…
artickc Jul 26, 2026
a08b5cd
fix(notion-web): mint fresh thread for new OpenAI sessions with same …
artickc Jul 26, 2026
5bffb57
fix(providers): honor Extra API Keys rotation in OpencodeExecutor (#8…
Prudhvivuda Jul 26, 2026
ac5691f
fix(providers): resolve native vision for path-shaped multimodal mode…
Prudhvivuda Jul 26, 2026
ca79344
fix(cli): backup create/auto enable β€” remove option-shadowing legacy …
maxmad64bis Jul 26, 2026
a095ebc
feat: read INITIAL_PASSWORD env var during setup (#8439)
linhdmn Jul 26, 2026
3be0a5d
fix: combo input-bound, Responses->Chat image strip, qwen-web toolCal…
herjarsa Jul 26, 2026
2614e8a
feat(cli-tools): add all Hermes Agent auxiliary model roles (#8543)
leszek3737 Jul 26, 2026
d4b9ce6
fix(kiro): harden auth flows, quota lookup, and model discovery (#8565)
nguyenha935 Jul 26, 2026
5552650
fix(chatgpt-web): recover async images via conversation-poll fallback…
sadruzzahan Jul 26, 2026
63341f2
feat(combos): add select all / unselect all in Browse Catalog (#8526)
JoshimOfficial Jul 26, 2026
8115867
fix(dashboard): include OMNIROUTE_BASE_PATH in displayed API base URL…
rqzbeh Jul 26, 2026
6c93e74
feat(jobs): execute the backup-schedule.json cron server-side (#8513)…
maxmad64bis Jul 26, 2026
f6f0303
feat(log): Added new visual scrolling log page (#8354)
hartmark Jul 26, 2026
da20b96
feat(providers): weekly quota for xAI OAuth (Grok) (#8471)
allanvb Jul 26, 2026
f3fa27f
fix(backend): fail closed when capability filters empty the combo poo…
Prudhvivuda Jul 26, 2026
a61ed5d
fix(oauth): actionable guidance for LAN-origin loopback mismatches (c…
diegosouzapw Jul 26, 2026
763ed82
fix(guardrails): Vision Bridge describe-fallback ignores unreachable …
guhcostan Jul 26, 2026
553a073
fix(sse): label HTTP 499 disconnects as client_disconnected (#8552)
DinonowDev Jul 26, 2026
e73c5a6
[BUG] enforceOutputTokenBudget ignores combo-resolved context limit, …
RCrushMe Jul 26, 2026
c9be34a
fix(cursor): bridge native TodoWrite completions (#8432)
makcimbx Jul 26, 2026
7faec93
fix(resilience,translator): three release/v3.8.49 base-red regression…
diegosouzapw Jul 26, 2026
e4cd478
test(antigravity): align catalog tests with #8013/#8123 model realign…
diegosouzapw Jul 26, 2026
4cd1bbc
fix(sse): export PROVIDER_BREAKER_FAILURE_STATUSES β€” fix ReferenceErr…
diegosouzapw Jul 26, 2026
1f04333
merge: resolve conflicts for #7904 local corpus context (#8685)
diegosouzapw Jul 26, 2026
7c0d2c7
docs(env): document NEXT_PUBLIC_OMNIROUTE_BASE_PATH and OMNIROUTE_BAC…
MumuTW Jul 26, 2026
a096116
fix(quality): register the #8494 covering test in stryker tap.testFil…
diegosouzapw Jul 26, 2026
0fd5384
chore(quality): update baselines after v3.8.49 merge-train (#8686)
diegosouzapw Jul 26, 2026
7f8a59a
fix: repair five base-red failures on release/v3.8.49 (#8706)
diegosouzapw Jul 26, 2026
5be61db
feat(sse): relay upstream 4xx error bodies verbatim on the Anthropic …
diegosouzapw Jul 26, 2026
6389c5b
fix(sse): clamp max_tokens to the model output cap on every path (#8698)
diegosouzapw Jul 26, 2026
6706d5f
fix(api): serve /v1/models stale-first and sanitize its error bodies …
diegosouzapw Jul 26, 2026
cd9a631
feat: Claude Code discovery aliases (surface non-Claude models in the…
diegosouzapw Jul 26, 2026
ed7db3e
feat(dashboard): copy-paste settings.json block for Claude Code disco…
diegosouzapw Jul 26, 2026
96c3b94
Train 1D: merge via --admin on .113 validation
Dingding-leo Jul 27, 2026
dd34520
Train 1D: merge via --admin on .113 validation
backryun Jul 27, 2026
0cf8223
Train 1D: merge via --admin on .113 validation
backryun Jul 27, 2026
847d1ad
Train 1D: merge via --admin on .113 validation
backryun Jul 27, 2026
f93da3f
Train 1D: merge via --admin on .113 validation
Dingding-leo Jul 27, 2026
da24c58
Train 1D: merge via --admin on .113 validation
backryun Jul 27, 2026
b59127e
Train 1D: merge via --admin on .113 validation
backryun Jul 27, 2026
c544c2c
Train 1D: merge via --admin on .113 validation
backryun Jul 27, 2026
9f5be22
Train 1D: merge via --admin on .113 validation
Dingding-leo Jul 27, 2026
7e2c687
Train 1D: merge via --admin on .113 validation
Dingding-leo Jul 27, 2026
0f87482
Train 1D: merge via --admin on .113 validation
backryun Jul 27, 2026
419f8b4
Train 1D: merge via --admin on .113 validation
Dingding-leo Jul 27, 2026
4a332fe
Train 1D: merge via --admin on .113 validation
Dingding-leo Jul 27, 2026
6e420e5
Train 1D: merge via --admin on .113 validation
rinseaid Jul 27, 2026
d78a836
Train 1D: merge via --admin on .113 validation
fuko2935 Jul 27, 2026
899d198
Train 1D: merge via --admin on .113 validation
Dingding-leo Jul 27, 2026
f9899c5
Train 1D: merge via --admin on .113 validation
diegosouzapw Jul 27, 2026
1cbe8c4
Train 1D: merge via --admin on .113 validation
MumuTW Jul 27, 2026
cc53f45
Train 1D: merge via --admin on .113 validation
SteeleHu Jul 27, 2026
b46bb6d
feat(quality): temporary relax of complexity/file-size ratchets for v…
diegosouzapw Jul 27, 2026
5f365ba
feat(db): let the migration runner scan extra namespaced directories …
diegosouzapw Jul 27, 2026
9977492
fix(db): repair the extra-migration-dirs test and env contract on CI …
diegosouzapw Jul 27, 2026
1011500
perf(api): skip the full catalog build for quota-exclusive keys (#8771)
diegosouzapw Jul 27, 2026
4f3971f
fix(providers): handle space-separated search queries via matchesAnyT…
maxmad64bis Jul 27, 2026
13e15e9
refactor(sse): guard the KIE task-id and callback-url reads at their …
backryun Jul 27, 2026
6ca33ef
fix(autoCombo): fallback to base model intelligence for -free alias m…
Dingding-leo Jul 27, 2026
809e6d1
fix(autoCombo): use longest pattern match in static fitness table (#8…
Dingding-leo Jul 27, 2026
116d583
refactor(sse): declare the ArrayBuffer backing on media byte producer…
backryun Jul 27, 2026
722de9d
fix(dashboard): broken icon allignment in `SegmentedControl.tsx` (#8679)
0x2f0 Jul 27, 2026
f2ad55b
fix(providers): deprecate Monster API provider (fixes #8676) (#8691)
Dingding-leo Jul 27, 2026
7d67912
Dependabot updates (#8695)
justdoGIT Jul 27, 2026
f2d7e9a
fix(executors): pass TimeoutError reason to controller.abort() in 7 n…
diegosouzapw Jul 27, 2026
7db3ba6
fix(sse): stop thrashing the provider prompt cache for caching-aware …
diegosouzapw Jul 27, 2026
8512898
docs(codex): document session affinity and stream idle for long tasks…
DinonowDev Jul 27, 2026
ba28e49
fix(oauth): show GitLab Duo setup before authorize error (#8710)
DinonowDev Jul 27, 2026
f35579a
fix(sse): fall back to target provider for combo compression limits (…
DinonowDev Jul 27, 2026
1f3f43e
fix: hydration mismatch, duplicate React keys, and missing ponytail i…
Mananz90 Jul 27, 2026
296765f
fix(db): preserve readonly and existing-file semantics in node:sqlite…
epsilonode Jul 27, 2026
46d577c
Create AMIT (#8727)
amitgolan60-coder Jul 27, 2026
644da29
fix(sse): hide synthetic OpenAI startup reasoning (#8729)
rinseaid Jul 27, 2026
0c1654b
fix(guardrails): check feature flag helper in PIIMasker to honor DB o…
Dingding-leo Jul 27, 2026
eedade9
fix(sse): report a stream that completes without any content (#8732)
backryun Jul 27, 2026
2a0b175
chore(ci): add release PR build gate (#8735)
ekinnee Jul 27, 2026
5840d09
fix(plugins): delete the generated host script synchronously so plugi…
MumuTW Jul 27, 2026
2f4aff3
Stabilize Notion web sessions and JSON output (#8751)
0xheycat Jul 27, 2026
6bdfd54
feat(providers): live monthly credit quota for Firecrawl (#8759)
allanvb Jul 27, 2026
b61f28b
fix(sse): update ANTHROPIC_PING heartbeat data payload to {"type":"pi…
Dingding-leo Jul 27, 2026
2247517
fix(cloudflare-ai): sync missing free catalog models (fixes #8725) (#…
Dingding-leo Jul 27, 2026
474a3df
fix(bedrock): preserve additionalModelRequestFields in converse paylo…
Dingding-leo Jul 27, 2026
68095ad
fix(docs): use correct kebab-case CLI flags in OpenCode guide (take 2…
swingtempo Jul 27, 2026
82bed08
docs(podman): clarify Podman Machine deployment (#8569)
shixi-li Jul 27, 2026
dfd4d33
fix(backend): add error.code to synthOpenAIErrorChunk for guard compa…
marceli1404 Jul 27, 2026
803e737
feat(ci): block stale UI translations when an English value is rewrit…
diegosouzapw Jul 27, 2026
585ba4f
fix(video): validate Veo AI Free artifacts before success (#8581)
brunnolouzada Jul 27, 2026
1d44ee0
refactor(sse): extract combo dispatch prelude into combo/dispatchPrel…
MumuTW Jul 27, 2026
eadb28c
refactor(tls): update TLSClient instantiation to use buildNativeTlsCl…
DinonowDev Jul 27, 2026
41fe8dc
chore(quality): rebank file-size shrinks on release/v3.8.49 tip (#8585)
MumuTW Jul 27, 2026
094f583
fix(routing): exclude locked-out models from auto-combo candidates (#…
Prudhvivuda Jul 27, 2026
4d24c0c
fix(api): prevent silent lost updates on concurrent settings writes (…
Prudhvivuda Jul 27, 2026
92c18a1
fix(providers): persist perplexity-web Set-Cookie session rotations (…
Prudhvivuda Jul 27, 2026
df9550f
fix(cli): prepare Next.js cache dir on Android/Termux before serve (#…
DinonowDev Jul 27, 2026
d54a659
test(context): isolate context-manager suite from local DATA_DIR (#8596)
DinonowDev Jul 27, 2026
39e7772
fix(auto-combo): short-circuit expandAutoComboCandidatePool when mode…
mikeiagents Jul 27, 2026
20aa796
fix(sse): route task-aware defaults by intent, fix fitness pattern sh…
MumuTW Jul 27, 2026
ea678da
fix(auth): tag internal/loopback-origin failed logins in the audit lo…
Prudhvivuda Jul 27, 2026
bca3094
feat(providers): flatten multi-turn history for gemini-web (#8371) (#…
Prudhvivuda Jul 27, 2026
685e598
fix(providers): declare explicit OpenCode plugin feature-flag default…
Prudhvivuda Jul 27, 2026
052cab3
fix(providers): complete OpenCode Go effort alias exposure (#8610)
excessivechaos Jul 27, 2026
71f80ae
fix(ci): use webpack fallback for Node 26 compat build to stop OOM (#…
Prudhvivuda Jul 27, 2026
b676c5f
feat(ci): automate ratchet shrink-banking so caps stop outliving thei…
MumuTW Jul 27, 2026
7ac42d6
fix(resilience): report local queue expiry as unavailable (#8613)
excessivechaos Jul 27, 2026
bb5cb51
fix(docker): honor OMNIROUTE_BASE_PATH behind reverse-proxy subpaths …
DinonowDev Jul 27, 2026
dd22d9c
fix(resilience): recover idle wedged limiters (#8616)
excessivechaos Jul 27, 2026
9108955
fix(claude): classify native subscription quota 429 (#8628)
costaeder Jul 27, 2026
01c0f8a
fix(providers): recover Kimi after quota reset (#8632)
glazec Jul 27, 2026
5cf3d1f
fix(windows): request shell when spawning bare qoder binary name on W…
Dingding-leo Jul 27, 2026
6601ae3
fix(middleware): declare withInjectionGuard's context parameter optio…
backryun Jul 27, 2026
1055d14
refactor(sse): peel the bare Response off handleChatCore's union in r…
backryun Jul 27, 2026
44c0392
fix(autoCombo): handle missing model_capabilities table in taskFitnes…
Dingding-leo Jul 27, 2026
cf66338
chore(skills): regenerate cli-backup-sync SKILL.md to match catalog (…
MumuTW Jul 27, 2026
cd7a492
chore(quality): re-pin file-size ceilings after merge-train 1H + fix …
diegosouzapw Jul 27, 2026
0eeb8f4
refactor(sse): extract combo target resolution into combo/targetResol…
MumuTW Jul 27, 2026
352d48f
test(pack): list ensureAndroidCacheDir.mjs in the pack-artifact fixture
diegosouzapw Jul 28, 2026
f3a78d6
fix(sse): compact Responses multi-turn images before context hard-rej…
Prudhvivuda Jul 28, 2026
6afec74
deps: bump electron from 43.1.1 to 43.2.0 in /electron (#8782)
dependabot[bot] Jul 28, 2026
aecf2fc
deps: bump the production group across 1 directory with 18 updates (#…
dependabot[bot] Jul 28, 2026
2bd5076
fix(resilience): add UND_ERR_SOCKET to PROXY_UNREACHABLE_ERROR_CODES …
Dingding-leo Jul 28, 2026
f848764
fix(resilience): keep resource 404s from cooling models (#8756)
wilsonicdev Jul 28, 2026
530221a
fix(hyperagent): sticky thread for agentic tool loops (Claude Code) (…
artickc Jul 28, 2026
8e5dc0d
fix(client): rewrite absolute fetch/EventSource paths under basePath …
rqzbeh Jul 28, 2026
1bb3093
chore(quality): re-pin chatCore.ts ceiling after merge-train 2
diegosouzapw Jul 28, 2026
1c21431
fix(combo): fail open when strict context filter empties unknown-only…
DinonowDev Jul 28, 2026
4d66dd1
fix(resilience): honor Cloudflare 1010 retryable:false β€” skip COOLDOW…
DinonowDev Jul 28, 2026
0e14d66
fix(dashboard): restore Usage Model Breakdown column sorting (#8769) …
DinonowDev Jul 28, 2026
3e6684e
fix(api): treat cx/* and codex/* as equivalent API-key model permissi…
Prudhvivuda Jul 28, 2026
2538565
fix(sse): pass real response payload into plugin onResponse hooks (#8…
Prudhvivuda Jul 28, 2026
308d3f0
fix(types): export web executor types from their module (#8810)
backryun Jul 28, 2026
1b1e962
fix(types): preserve reasoning policy record shapes (#8811)
backryun Jul 28, 2026
5f5f4a5
fix(types): preserve compression detail config shapes (#8812)
backryun Jul 28, 2026
0bd7cea
fix(types): declare virtual chaos combo config (#8815)
backryun Jul 28, 2026
ff168ab
fix(electron): use NEXT_DIST_DIR when stripping stale native modules …
NBN-N3 Jul 28, 2026
6a59c09
feat(search): add Firecrawl search provider (#8814)
allanvb Jul 28, 2026
53f8284
fix(api): enforce image generation API key auth (#8306)
fenix007 Jul 28, 2026
b53bd96
fix(security): remove quadratic trailing-slash trim in Alibaba endpoi…
diegosouzapw Jul 28, 2026
d6c0693
chore(quality): re-pin ceilings after merge-train 3 + register CF-101…
diegosouzapw Jul 28, 2026
07ce14c
fix(types): type memory skills injection logger (#8816)
backryun Jul 28, 2026
6133939
fix(types): align web fallback contracts (#8819)
backryun Jul 28, 2026
67d13dc
fix(types): declare idempotency input contracts (#8820)
backryun Jul 28, 2026
b4776a2
test(quality): fail loudly when a source-scanning guard is negative-o…
MumuTW Jul 28, 2026
71c5a75
docs: replace outdated Polish docs with translation from latest Engli…
leszek3737 Jul 28, 2026
2f5e185
fix(types): normalize Kie transcription results (#8824)
backryun Jul 28, 2026
d30f484
fix(reasoning): sanitize streamed K3 think tags (#8821)
rinseaid Jul 28, 2026
18c1a2b
docs: restore the Polish API_REFERENCE removed by #8823 (#8831)
diegosouzapw Jul 28, 2026
c8f1d62
fix(dashboard): surface quota pool delete failures instead of failing…
diegosouzapw Jul 28, 2026
aa85fa0
feat(api): prompt-cache health summary endpoint and analytics tab (#8…
diegosouzapw Jul 28, 2026
3b515d9
fix(api): stop /v1/models rebuilding the catalog on almost every requ…
diegosouzapw Jul 28, 2026
0809c73
fix(providers): correct Codex GPT-5.6 context window (#8838)
TitoTFP Jul 28, 2026
85f1d78
fix(ghe-copilot): route OpenAI-native models via Responses API (#8835)
hppsc1215 Jul 28, 2026
2675b65
fix(cli): escape claude args and stop aborting on exit in omniroute l…
sumanxg Jul 28, 2026
38cee62
fix(antigravity): discover projectId during token refresh (#8842)
HouMinXi Jul 28, 2026
7193b0a
feat(oauth): support web client type for remote Google OAuth (#8845)
HouMinXi Jul 28, 2026
ed6a19e
fix(ci): raise the git ls-files buffer in check:tracked-artifacts (#8…
diegosouzapw Jul 28, 2026
f1fcdbf
fix(executors): route current Claude generations through Vertex partn…
wgordon17 Jul 28, 2026
8e0d7e4
fix(cli): escape codex args and stop aborting on exit in launch-codex…
sumanxg Jul 28, 2026
26a7783
chore(changelog): reconcile v3.8.49 β€” aggregate 584 fragments, restor…
diegosouzapw Jul 28, 2026
ec0edef
fix(token-refresh): discover projectId during token refresh (#8860)
HouMinXi Jul 28, 2026
85b9c17
feat: Xiaomi MiMo Token Plan provider + per-connection API protocol s…
diegosouzapw Jul 28, 2026
7f83b4b
fix(oauth): support Test Connection for xAI OAuth (#8862)
allanvb Jul 28, 2026
832d713
fix(combo): clean up stale connectionId refs after provider delete (#…
HouMinXi Jul 28, 2026
bf77648
fix(autoRouting): recognize auto/\<family\> combos in classifyAutoMod…
rafaeldrincon Jul 28, 2026
fff11cb
fix(adobe-firefly): default gpt-image detailLevel to maximal (5) (#8863)
artickc Jul 28, 2026
43625ec
chore(changelog): aggregate the tail of v3.8.49 (6 fragments, 5 PRs c…
diegosouzapw Jul 28, 2026
66997a6
fix(logs): avoid giant provider pills for failed auto family requests…
rafaeldrincon Jul 28, 2026
9c904dd
chore(changelog): aggregate #8867 and credit @rafaeldrincon
diegosouzapw Jul 28, 2026
f118f69
chore(changelog): v3.8.49 reconciliation β€” 200 missing bullets + 22 r…
diegosouzapw Jul 28, 2026
1b11c96
chore(quality): v3.8.49 pre-flight β€” clear 4 base-reds, absorb cycle …
diegosouzapw Jul 28, 2026
4b32a2c
test(codex): align the Responses HTTP e2e to the #8507 input-item con…
diegosouzapw Jul 28, 2026
99279b0
docs(release): v3.8.49 feature-documentation sync
diegosouzapw Jul 28, 2026
ff9d39d
chore(release): back-merge main into release/v3.8.49
diegosouzapw Jul 28, 2026
e5eefca
chore(release): v3.8.49 β€” clear the release-PR CI in one pass
diegosouzapw Jul 28, 2026
e4484b5
chore(quality): close the last two release-PR reds
diegosouzapw Jul 28, 2026
a899236
test(db): reword the driverFactory skip comment so the gate stops cou…
diegosouzapw Jul 28, 2026
f9fbb54
fix(dashboard): unbreak the vitest:ui gate β€” 2 real production bugs +…
diegosouzapw Jul 29, 2026
0ffc08b
test(e2e): repair the four shards the first green Build finally exerc…
diegosouzapw Jul 29, 2026
1932c59
fix(dashboard): stop the /home quick-start cards from prefetching too
diegosouzapw Jul 29, 2026
930018f
refactor(dashboard): shrink HomePageClient back under the size gate
diegosouzapw Jul 29, 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
  •  
  •  
  •  
4 changes: 3 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,9 @@ NEXT_PUBLIC_CLOUD_URL=
#OMNIROUTE_CROF_USAGE_URL=https://crof.ai/usage_api/
#OMNIROUTE_CODEWHISPERER_BASE_URL=https://codewhisperer.us-east-1.amazonaws.com
#OMNIROUTE_OPENCODE_QUOTA_URL=https://opencode.ai/zen/go/v1/quota
#OMNIROUTE_OPENCODE_GO_QUOTA_URL=https://api.z.ai/api/monitor/usage/quota/limit
# OpenCode Go has no public quota API β€” this has no default and stays
# unset unless you explicitly opt in to a self-hosted/mirrored endpoint:
#OMNIROUTE_OPENCODE_GO_QUOTA_URL=
#OMNIROUTE_OPENCODE_GO_DASHBOARD_URL=https://opencode.ai/workspace
#OMNIROUTE_OLLAMA_CLOUD_USAGE_URL=https://ollama.com/settings

Expand Down
9 changes: 9 additions & 0 deletions .env.homolog.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# HomologaΓ§Γ£o E2E real β€” copie para .env.homolog (NUNCA commitar o real)
HOMOLOG_BASE_URL=http://192.168.0.15:20128
# Senha de management do dashboard da VPS (a mesma do /login)
HOMOLOG_ADMIN_PASSWORD=
# Deixe vazio: a suΓ­te cria uma API key efΓͺmera via admin e revoga no fim.
# SΓ³ preencha para depurar uma camada isolada com uma key fixa.
HOMOLOG_API_KEY=
# Tier crΓ­tico (chat real, max_tokens=5). Demais providers: sΓ³ validaΓ§Γ£o de catΓ‘logo.
HOMOLOG_CRITICAL_PROVIDERS=openai,anthropic,gemini,codex,grok,glm,deepseek,openrouter
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,15 @@ updates:
update-types: ["version-update:semver-major"]
- dependency-name: "eslint-config-next"
update-types: ["version-update:semver-major"]
# typescript majors are peer-blocked by typescript-eslint, which pins a hard
# upper bound (8.64.0 β†’ peerDependencies.typescript ">=4.8.4 <6.1.0"). A TS 7
# bump therefore violates the peer and takes down the whole toolchain at once β€”
# #7068 grouped it with 6 harmless bumps and turned Build + Lint + Quality Ratchet
# + Unit (6/8, 8/8) + Integration (1/2, 2/2) + dast-smoke red in one shot, blocking
# the innocuous updates riding along with it. Un-ignore once typescript-eslint
# widens the peer, and migrate TS majors intentionally (own PR, own CI run).
- dependency-name: "typescript"
update-types: ["version-update:semver-major"]
# jscpd v5 is a Rust rewrite (native binary, no Node.js programmatic API).
# scripts/check/check-duplication.mjs is deliberately pinned to jscpd@4 (it
# parses jscpd-report.json against a frozen baseline). A v5 major would break
Expand Down
125 changes: 111 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ jobs:
docs: ${{ steps.classify.outputs.docs }}
i18n: ${{ steps.classify.outputs.i18n }}
workflow: ${{ steps.classify.outputs.workflow }}
testsOnly: ${{ steps.classify.outputs.testsOnly }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
with:
Expand Down Expand Up @@ -124,11 +125,23 @@ jobs:
- run: npm run check:route-guard-membership
- run: npm run check:test-discovery
- run: npm run check:tracked-artifacts
# WS1.7 (v3.8.49 plan): Dockerfile lint (hadolint, pinned by digest).
# failure-threshold=error keeps the 5 pre-existing warnings (DL3008/DL3003/
# DL3016 version pinning / WORKDIR) visible without blocking; any ERROR fails.
- name: hadolint (Dockerfile)
run: docker run --rm -i hadolint/hadolint@sha256:27086352fd5e1907ea2b934eb1023f217c5ae087992eb59fde121dce9c9ff21e hadolint --failure-threshold error - < Dockerfile
- run: npm run check:lockfile
- run: npm run check:licenses
# check:docs-sync is run by the docs-sync-strict job (via check:docs-all) and the
# husky pre-commit hook; the standalone copy here was redundant (ROI dedup).
- run: npm run typecheck:core
# #7033: typecheck:core's curated file allowlist does not cover
# src/app/(dashboard) TSX (and next.config.mjs sets ignoreBuildErrors:
# true, so `next build` never type-checks it either) β€” orphaned
# identifiers there (see #6625/#6909) were invisible to CI. This gate
# runs tsc scoped to the dashboard tree against a frozen baseline of
# pre-existing errors; only NEW errors fail it.
- run: npm run check:dashboard-typecheck
# typecheck:noimplicit:core dropped from this job (2026-07 optimize):
# it was advisory (continue-on-error) and largely subsumed by the blocking
# check:type-coverage ratchet in quality-gate. Local: npm run typecheck:noimplicit:core.
Expand All @@ -148,7 +161,7 @@ jobs:
# The coverage.* metrics degrade gracefully: the download is continue-on-error and
# the ratchet runs with --allow-missing, so absent coverage is skipped, not failed.
# Path filter: code-only β€” pure docs/i18n PRs have nothing for these ratchets to guard.
if: ${{ !cancelled() && (github.event_name != 'pull_request' || (github.event.pull_request.draft == false && needs.changes.outputs.code == 'true' && (needs.lint.result == 'success' || needs.lint.result == 'failure'))) }}
if: ${{ !cancelled() && !contains(github.event.pull_request.labels.*.name, 'hotfix') && (github.event_name != 'pull_request' || (github.event.pull_request.draft == false && needs.changes.outputs.code == 'true' && (needs.lint.result == 'success' || needs.lint.result == 'failure'))) }}
# security-events: read lets the CodeQL ratchet read open code-scanning alerts
# via `gh api .../code-scanning/alerts`. contents: read keeps checkout working.
permissions:
Expand Down Expand Up @@ -258,7 +271,7 @@ jobs:
# P3 (plano mestre): a release-PR viva fica DRAFT o ciclo inteiro β€” jobs pesados pulam
# drafts (ciclo v3.8.44: 123 runs pesados re-disparados por merges na release, 88 cancelados).
# Path filter: code-only (scanners/ratchets target production surface).
if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.draft == false && needs.changes.outputs.code == 'true') }}
if: ${{ !contains(github.event.pull_request.labels.*.name, 'hotfix') && (github.event_name != 'pull_request' || (github.event.pull_request.draft == false && needs.changes.outputs.code == 'true')) }}
steps:
# fetch-depth: 0 β€” the OpenAPI breaking-change gate (oasdiff) reads the base
# spec via `git show <base_ref>:docs/openapi.yaml`; a shallow clone
Expand Down Expand Up @@ -609,12 +622,26 @@ jobs:
- name: Assert dist/server.js exists
run: test -f dist/server.js || (echo "dist/server.js missing β€” build:cli did not assemble correctly" && exit 1)
- run: npm run check:pack-artifact
# WS1.2 (#7065 class): pack the real tarball, install it into a clean prefix and
# BOOT it to a healthy /api/monitoring/health β€” the gate that structure checks
# cannot provide (3 releases shipped boot-crashing tarballs with green lists).
- name: Boot-smoke the packed tarball
run: npm run check:pack-boot

electron-package-smoke:
name: Electron Package Smoke
runs-on: ubuntu-latest
timeout-minutes: 25
name: Electron Package Smoke (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 30
needs: build
# WS1.5 (v3.8.49 plan): the Electron rebuild/spawn path previously executed for
# the FIRST time on the release tag β€” the v3.8.48 Windows bug (npx.cmd spawned
# without shell, CVE-2024-27980 behavior change) could only surface at release.
# windows-latest runs prepare:bundle (the ABI rebuild + spawn plan) per release
# PR; ubuntu keeps the full pack + headless smoke.
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
env:
JWT_SECRET: ci-build-secret-with-sufficient-length-for-validation
CSC_IDENTITY_AUTO_DISCOVERY: "false"
Expand All @@ -640,9 +667,21 @@ jobs:
working-directory: electron
run: npm install --no-audit --no-fund
- name: Pack Electron app
if: runner.os == 'Linux'
working-directory: electron
run: npm run pack
# ADVISORY while the new Windows leg matures (repo convention, dast-smoke
# precedent): its first-ever real run (2026-07-15, run 29457533565) died in
# 0.7s with the error swallowed by pwsh β€” bash shell captures stderr and
# continue-on-error keeps the heavy gate green while we harden it (#7336).
- name: Prepare Electron standalone (Windows ABI rebuild + spawn path)
if: runner.os == 'Windows'
working-directory: electron
continue-on-error: true
shell: bash
run: npm run prepare:bundle 2>&1
- name: Smoke packaged Electron app
if: runner.os == 'Linux'
env:
ELECTRON_SMOKE_TIMEOUT_MS: 60000
run: xvfb-run -a npm run electron:smoke:packaged
Expand Down Expand Up @@ -725,12 +764,23 @@ jobs:
- uses: ./.github/actions/npm-ci-retry
# The second test runner (CLAUDE.md: "Both test runners must pass") β€” was never
# wired into CI until the 2026-06-09 quality audit (Fase 6A.2).
- run: npm run test:vitest
# vitest:ui is RED today (14 fails β€” UI component drift accumulated while the
# suite never ran in CI). Informational until the Fase 6A triage (2026-06-16+)
# fixes the components/tests; then drop continue-on-error to make it blocking.
- run: npm run test:vitest:ui
# WS5.2/5.3 (v3.8.49 plan): JUnit output feeds Trunk Flaky Tests (advisory upload
# below). node:test stays OUT of the first wave (fd1-sensitive reporter stream).
- run: npm run test:vitest -- --reporter=default --reporter=junit --outputFile.junit=trunk-junit/vitest-mcp.xml
# vitest:ui went back to 870/870 green in the v3.8.49 quality plan (WS6.1,
# PR #7127 — 69 fails triaged: matchMedia polyfill, node:test→vitest migration,
# CompareTab D22 cap). Promoted to BLOCKING per the plan's post-merge step.
- run: npm run test:vitest:ui -- --reporter=default --reporter=junit --outputFile.junit=trunk-junit/vitest-ui.xml
# Trunk Flaky Tests upload β€” advisory (never blocks), own-origin only (fork PRs
# have no TRUNK_TOKEN). Pinned by SHA (tag v2.1.2).
- name: Upload test results to Trunk (advisory)
if: ${{ always() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
continue-on-error: true
uses: trunk-io/analytics-uploader@385f1ccdf345b4532dc4b6c665dd432b702b8e28 # v2.1.2
with:
junit-paths: trunk-junit/**/*.xml
org-slug: omniroute
token: ${{ secrets.TRUNK_TOKEN }}

# Node 24/26 compatibility matrices moved to .github/workflows/nightly-compat.yml
# (plano mestre testes+CI, Eixo D2 β€” they cost ~28% of every heavy run to catch a
Expand All @@ -739,9 +789,12 @@ jobs:
test-coverage:
name: Coverage
runs-on: ubuntu-latest
timeout-minutes: 10
# 10min was sized before #7114 added the lcov reporter (Codecov/Sonar need it);
# merging 8 shard JSONs + text+json+lcov now takes ~10-12min β€” three consecutive
# release-tip runs died at exactly 10m as job-timeout "cancelled" (2026-07-15/16).
timeout-minutes: 20
needs: test-unit
if: ${{ !cancelled() && needs.test-unit.result == 'success' }}
if: ${{ !cancelled() && needs.test-unit.result == 'success' && !contains(github.event.pull_request.labels.*.name, 'hotfix') }}
env:
JWT_SECRET: ci-test-secret-with-sufficient-length-for-validation
API_KEY_SECRET: ci-test-api-key-secret-long
Expand Down Expand Up @@ -789,6 +842,7 @@ jobs:
--merge-async \
--reporter=text-summary \
--reporter=json-summary \
--reporter=lcov \
--exclude=tests/** \
--exclude=**/*.test.* \
--check-coverage \
Expand All @@ -810,6 +864,18 @@ jobs:
> coverage/coverage-report.md
fi
cat coverage/coverage-report.md >> "$GITHUB_STEP_SUMMARY"
# WS5.6 (D7, v3.8.49 plan): patch coverage on the PR diff via Codecov β€”
# informational during calibration (codecov.yml sets informational: true);
# promote to blocking only after ~2 weeks without false blocks. The lcov
# reporter above also fixes coverage/lcov.info being silently absent
# (if-no-files-found: warn) β€” Sonar consumes the same file.
- name: Upload coverage to Codecov (informational)
if: always()
uses: codecov/codecov-action@04b047e8bb82a0c002c8312c1c880fbc6a999d45 # v5
with:
files: coverage/lcov.info
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
- name: Upload coverage artifacts
if: always()
uses: actions/upload-artifact@v7
Expand Down Expand Up @@ -960,7 +1026,12 @@ jobs:
# ~33%. Playwright browser is cached across runs (~1.5min saved per shard).
# Heavy shard target: ≀20min (was ~40min). Timeout 45min to cover slow runners.
timeout-minutes: 45
needs: build
needs: [build, changes]
# WS3.1 hotfix fast-lane: the 9-shard E2E matrix is the CI critical path (~25min).
# It skips for (a) PRs labeled `hotfix` (entry policy in docs/ops/RELEASE_CHECKLIST.md:
# production-broken only, full-suite evidence from the previous green run linked in the
# PR) and (b) tests-only diffs outside tests/e2e/ (cannot change the served app).
if: ${{ needs.changes.outputs.testsOnly != 'true' && !contains(github.event.pull_request.labels.*.name, 'hotfix') }}
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -995,7 +1066,33 @@ jobs:
- name: Extract Next.js build artifact
run: |
tar -xzf /tmp/e2e-build.tar.gz
- run: npx playwright test tests/e2e/*.spec.ts --shard=${{ matrix.shard }}/9
# WS4.1: duration-balanced shards (LPT over config/quality/e2e-timings.json).
# Measured skew of plain --shard was 14Γ— (24m47s vs 1m47s) β€” E2E was the CI
# critical path. The balancer self-verifies completeness and exits non-zero on
# any inconsistency, falling back to plain --shard (never fewer specs).
- name: Run E2E tests (duration-balanced shard)
env:
SHARD: ${{ matrix.shard }}
PLAYWRIGHT_JUNIT_OUTPUT_NAME: junit-e2e-results.xml
run: |
if FILES=$(node scripts/quality/balance-e2e-shards.mjs "$SHARD" 9); then
if [ -z "$FILES" ]; then echo "[e2e-balance] shard $SHARD has no files"; exit 0; fi
echo "[e2e-balance] shard $SHARD runs:"; echo "$FILES"
# shellcheck disable=SC2086 β€” FILES is our own newline-separated path list
npx playwright test $(echo "$FILES" | tr '\n' ' ') --reporter=line,junit
else
echo "[e2e-balance] balancer unavailable β€” plain --shard fallback"
npx playwright test tests/e2e/*.spec.ts --shard="$SHARD"/9 --reporter=line,junit
fi
# WS5.2/5.3: Trunk Flaky Tests upload β€” advisory, own-origin only, SHA-pinned.
- name: Upload test results to Trunk (advisory)
if: ${{ always() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
continue-on-error: true
uses: trunk-io/analytics-uploader@385f1ccdf345b4532dc4b6c665dd432b702b8e28 # v2.1.2
with:
junit-paths: junit-e2e-results.xml
org-slug: omniroute
token: ${{ secrets.TRUNK_TOKEN }}

test-integration:
name: Integration Tests (${{ matrix.shard }}/2)
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/dast-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ jobs:
# ADVISORY while this new gate matures (repo convention: advisory -> blocking).
# Flip to blocking (remove continue-on-error) once it's proven stable across a few PRs.
continue-on-error: true
timeout-minutes: 12
# Build CLI bundle alone varies 6-11min on GitHub-hosted runners (3 consecutive
# timeouts observed on 2026-07-14 with the old 12min cap killing schemathesis
# mid-run) β€” 25min leaves real headroom for the actual DAST steps.
timeout-minutes: 25
env:
JWT_SECRET: ci-build-secret-with-sufficient-length-for-validation
API_KEY_SECRET: ci-api-key-secret-with-sufficient-length-aaaa
Expand Down
Loading
Loading