Commit Graph

1520 Commits

Author SHA1 Message Date
Diego Rodrigues de Sa e Souza
28d57bf5f8 ci(quality): fix scanner install + size-limit preset, promote codeqlAlerts to blocking (#3945)
FIX 1 — security scanner install (gitleaks/osv/actionlint/zizmor):
the step ran under bash -e and aborted before the $GITHUB_PATH export when
'go install ...gitleaks/v8@latest' failed/produced a non-working binary, so no
scanner landed on PATH and every check self-skipped. Rewritten to set +e,
install from official release downloads, ALWAYS export $HOME/.local/bin, and
print diagnostics. Validated only on the next CI run (binaries install in CI).

FIX 2 — size-limit bundleSize: add @size-limit/file devDependency (the correct
preset for the plain FILE-size .size-limit.json) + allowlist entry. check:bundle-size
now measures the 4 bin entries via the preset (bundleSize=5601) instead of erroring
on the missing preset / falling back to fs.statSync.

FIX 3 — codeqlAlerts promoted to BLOCKING: check-codeql-ratchet.mjs now reads
metrics.codeqlAlerts.value, exits 1 ONLY on a real regression (measured > baseline),
and exits 0 (graceful skip) on any measurement failure (gh absent / no auth /
no repo / API error) so missing infra never blocks. Baseline seeded codeqlAlerts=0
(repo has 0 open alerts). Blocking step wired in the quality-gate job with
security-events:read; the duplicate advisory step removed from quality-extended.
New TDD: evaluateCodeqlRatchet (5 cases).
2026-06-15 21:38:31 -03:00
Randi
b250e08d77 fix in-flight request payload sync (#3940)
Integrated into release/v3.8.26 — keep pendingById in sync with the queue detail (Object.assign in place). Validated alongside #3937: typecheck:core clean, 42/42 request-logger + lifecycle tests, eslint 0 errors, file-size OK.
2026-06-15 21:03:26 -03:00
NOXX - Commiter
d88ae9c157 fix(perplexity-web): update request payload to schema v2.18 to fix HTTP 400 (#3938)
Integrated into release/v3.8.26 — Perplexity-web schema v2.18 payload fix for HTTP 400. Validated: 24/24 perplexity tests, typecheck:core clean, file-size rebaselined (perplexity-web.ts 868->939, justified).
2026-06-15 21:01:45 -03:00
Randi
e13496932c fix(stream): persist mid-stream failures (#3937)
Integrated into release/v3.8.26 — mid-stream failure persistence (follow-up to #3879). Validated locally: typecheck:core clean, 75/75 stream/usage tests, eslint 0 errors, file-size + any-budget OK.
2026-06-15 20:58:15 -03:00
Diego Rodrigues de Sa e Souza
f3679019ab fix(compression): preserve upstream prompt cache for memory + compression (#3890) (#3936) 2026-06-15 20:05:23 -03:00
Randi
cdefc98327 fix: stabilize reasoning streams and request logs (#3879)
Integrated into release/v3.8.26 (reconciled cc-defaults UI with #3921)
2026-06-15 19:57:26 -03:00
NOXX - Commiter
2b886906a5 feat(media): Vertex AI (Google) speech, transcription, music & video generation (#3929)
Integrated into release/v3.8.26
2026-06-15 19:52:55 -03:00
Diego Rodrigues de Sa e Souza
28c7ced2ec fix(providers): register BytePlus ModelArk so its API key validates (#3877) (#3935) 2026-06-15 19:49:51 -03:00
Diego Rodrigues de Sa e Souza
17fee53dbd fix(providers): correct Nous Research key validation probe model + accept non-auth 4xx (#3881) (#3934) 2026-06-15 19:43:22 -03:00
diego-anselmo
a5e704f7d6 fix(sse): anuncia role assistant no 1º delta do stream Responses→Chat (#3911)
Integrated into release/v3.8.26
2026-06-15 19:41:41 -03:00
NOXX - Commiter
bb45ddf901 fix(vertex): add generative-language scope so SA-JSON model discovery works (#3922)
Integrated into release/v3.8.26
2026-06-15 19:40:47 -03:00
Diego Rodrigues de Sa e Souza
a03426d5ca test: reconcile runtime-timeouts keepAlive baseline to 4000 after #3907 source revert (#3933)
PR #3907 lowered the test assertions for fetchKeepAliveTimeoutMs from 4000 to
1000 expecting DEFAULT_FETCH_KEEPALIVE_TIMEOUT_MS to drop to 1000, but the source
change was reverted on review (kept at 4000, with keepAliveMaxTimeout pinning
instead). The test was left asserting 1000, turning the unit suite red
release-wide. Align the assertions back to the shipped source value (4000).
2026-06-15 19:37:57 -03:00
Diego Rodrigues de Sa e Souza
e697538beb docs: sync all documentation to v3.8.24 + count-guard & wiki/prose CI (#3804)
Integrated into release/v3.8.26 — reconciled: kept #3900's superset wiki-sync, dropped the superseded sync-wiki-home; counts taken from the newer canonical release docs; net-new value = vale/markdownlint docs-lint infra + 7 new docs (Notion/Obsidian/Plugin-Marketplace/Cost-Tracking/Free-Provider-Rankings/Feature-Flags/Egress-Policy) + check-docs-counts-sync guard.
2026-06-15 15:18:16 -03:00
Diego Rodrigues de Sa e Souza
be82146d37 ci(quality): enforce stale-allowlist on check-known-symbols (Fase 6A.3 follow-up) (#3899)
Integrated into release/v3.8.26
2026-06-15 14:10:58 -03:00
Diego Rodrigues de Sa e Souza
f8131c8a19 fix(test): de-flake pipeline-payloads via per-test re-seed + honest reset (#3893)
Integrated into release/v3.8.26
2026-06-15 14:10:55 -03:00
Innokentiy Solntsev
fd7a5d68ae fix(providers): prevent zombie-socket hangs for zai/glm and tighten default keepAlive (#3907)
Integrated into release/v3.8.26 (zai validator; global keepAlive change reverted on review)
2026-06-15 14:06:48 -03:00
Felipe Almeman
9d846f3680 fix(proxy): direct-connection fallback for control-plane ops when a pinned proxy is unreachable (#3906)
Integrated into release/v3.8.26
2026-06-15 14:05:07 -03:00
Hernan Javier Ardila Sanchez
a475389b98 fix(opencode-plugin): drop CJS bundle to fix OpenCode plugin loader (#3883)
Integrated into release/v3.8.26 (scoped to the ESM-only loader fix)
2026-06-15 12:39:36 -03:00
Abhishek Divekar
6c1c055a20 feat(combo): add sticky round-robin target limit (#3846)
Integrated into release/v3.8.26
2026-06-15 12:33:15 -03:00
Jack Smith
4caa8451f4 Fix/generate models alias lookup (#3870)
Integrated into release/v3.8.26
2026-06-15 12:24:41 -03:00
Jack Smith
97d589864e Fix/candidate pool empty array (#3871)
Integrated into release/v3.8.26
2026-06-15 12:23:46 -03:00
Randi
fbdce3a941 feat: add OpenRouter connection presets (#3878)
Integrated into release/v3.8.26
2026-06-15 12:21:41 -03:00
Diego Rodrigues de Sa e Souza
3424155143 ci(docs): automate GitHub wiki sync (add missing pages + cover counts) (#3900)
The wiki has no native generator and drifts each release — it lacked SUPPLY_CHAIN
plus 24 other docs pages, and the cover counts went stale (212+/14/37 vs 226/15/87).

Adds:
  - scripts/docs/sync-wiki.mjs — adds docs/ pages missing from the wiki (curated;
    internal reports/plans/index excluded) and syncs the four Home.md cover counts.
    Matches the hand-curated, non-deterministic wiki page names by a normalized fuzzy
    key and writes the EXISTING name, so it never creates duplicate pages. Overwriting
    existing-page content is opt-in (--update-existing) and intentionally OFF by
    default: several docs sources still carry stale counts (e.g. ARCHITECTURE.md says
    "177 providers / 37 MCP tools" while the wiki cover is 226/87), so a blind overwrite
    would REGRESS the wiki. Full parity is gated on regenerating those sources — see
    docs/ops/DOCUMENTATION_AUDIT_REPORT.md.
  - .github/workflows/wiki-sync.yml — runs the sync on every push to main that touches
    docs/ (or a count source) + workflow_dispatch, pushing via GITHUB_TOKEN.
  - tests/unit/sync-wiki.test.ts — pure-function coverage (8 tests).

The first run already pushed the 25 missing pages to the wiki.
2026-06-15 12:08:44 -03:00
Diego Rodrigues de Sa e Souza
320a9d3f29 chore(repo): nest quality-gate state under config/quality, declutter root (#3896)
Move the committed quality-gate state files out of the repo root into
config/quality/ and the v3.8.24 documentation audit into docs/ops/, then
re-point every gate script, test and .gitignore entry at the new paths.
Refresh docs/architecture/REPOSITORY_MAP.md (stale since v3.8.2) to match
the current layout.

Moved -> config/quality/:
  quality-baseline.json, complexity-baseline.json, duplication-baseline.json,
  file-size-baseline.json, test-discovery-baseline.json,
  dependency-allowlist.json, .license-allowlist.json
  (generated quality-metrics.json now written here too; still gitignored)

Moved -> docs/ops/:
  DOCUMENTATION_AUDIT_REPORT.md (+ meta.json entry + fabricated-docs skip)

Path updates: check-{complexity,duplication,file-size,test-discovery,deps,
licenses,dead-code,cognitive-complexity,type-coverage}.mjs, check-quality-
ratchet.mjs, collect-metrics.mjs, check-tracked-artifacts.mjs (+ its test and
check-deps test). Also gitignore /logs/ (was untracked-not-ignored).

Tracked root files: 56 -> 48. Tool configs left in root on purpose: most are
auto-discovered there, and the tsconfig variants have location-relative
files:[] arrays that would need 46 path rewrites for a 2-file gain.
2026-06-15 11:32:45 -03:00
Diego Rodrigues de Sa e Souza
35dbf0eea1 Release v3.8.25 (#3866)
* chore(release): continue v3.8.25 development cycle after main code-sync (r5)

main fast-forwarded to release/v3.8.25 (#3863): unblocked Build+Docker via
#3864, plus #3837 (mimocode proxy) and #3862 (trivy bump). This marker
re-opens the umbrella PR for further v3.8.25 work. No version bump.

* fix(db): persist the Keep-latest-backups retention setting (#3834) (#3867)

* fix(oauth): clear GitLab Duo setup message instead of 500 (#3861) (#3868)

* test(oauth): prove refresh_token preserved on real gemini-cli/antigravity dispatch (#3850) (#3869)

* feat(compression-ui): unified compression config UI — per-engine pages + combos editor + menu + WS default-on (#3860)

Integrated into release/v3.8.25 — feat(compression-ui): unified compression configuration UI (Compression Hub + per-engine Lite/Aggressive/Ultra pages + combos editor + sidebar entry + live-WS default-on). File-size re-baselined for sidebarVisibility.ts/chatCore.ts growth; orphan ws test relocated to a collected path.

* docs(changelog): complete the v3.8.25 release notes + credit all contributors

Audited every commit since v3.8.24 and filled the gaps the [3.8.25] section
was missing: a New Features section (compression engines + Compression Studios
#3848, compression UI #3860, injection-guard #3857, kiro discovery #3836, Veo
#3839, mimocode proxy #3837, Arena ELO flag #3821), 9 more Fixed entries
(#3811/#3807/#3759/#3849/#3838/#3835/#3814/#3820/#3819), a Security section
(CCR IDOR #3859, supply-chain #3824), and an Internal/Quality section. Every
contributor and issue reporter is now credited.

* docs(changelog): restore + complete the v3.8.25 release notes

Re-adds CHANGELOG.md (a prior server-side commit accidentally dropped it) with
the complete, audited [3.8.25] section: New Features, the full Fixed list,
Security & Hardening, and Internal/Quality — every contributor and issue
reporter credited.

* chore(release): finalize v3.8.25 — reconcile CHANGELOG + i18n mirrors, document OMNIROUTE_MAX_PENDING_MIGRATIONS, green the unit suite

Release-gate reconciliation for v3.8.25:
- CHANGELOG: dated 2026-06-14, linked #3826, rolled up file-size re-baselines (#3823/#3833),
  recorded the test-greening; re-synced all 41 i18n CHANGELOG mirrors.
- Documented OMNIROUTE_MAX_PENDING_MIGRATIONS (#3416) in .env.example + ENVIRONMENT.md.
- Greened the unit suite (was merged red on 4 CI shards): aligned 10 stale tests to this
  cycle's intended behavior (#3838/#3822/#3501/SOCKS5/Vertex-Express/Antigravity) and the
  same-provider 503 fall-through test; de-flaked the compression benchmark reproducibility
  and ServiceSupervisor crash tests. No production code changed.

* ci(security): clear OpenSSF Scorecard code-scanning noise + harden workflow token permissions

The Security tab held 155 open alerts, ALL from the advisory OpenSSF Scorecard tool
(#3824) — supply-chain/posture scores, not code vulnerabilities — which drowned out
real CodeQL findings.

- scorecard.yml: stop uploading SARIF to the code-scanning tab (drop the upload-sarif
  step + the now-unused security-events: write). The run still produces the OpenSSF
  badge (publish_results) and a downloadable SARIF artifact.
- TokenPermissions hardening (the high-severity, genuinely-valuable subset): set each
  workflow's top-level token to read-only and grant the exact writes at the job level
  that needs them — npm-publish (id-token/packages on publish jobs), docker-publish
  (packages on build), electron-release (contents on build/release, id-token/packages
  on publish-npm), build-fork (packages on build), claude (empty top-level; job grants
  its own). The 155 existing alerts were dismissed.

Not adopting repo-wide SHA-pinning (143 PinnedDependencies advisories) — declined.

* test(integration): align stale wiring/socks5 integration tests to this cycle's behavior

These were red on the CI Integration job (pre-existing). No production code changed:
- integration-wiring: the combos page no longer renders a per-page EmailPrivacyToggle
  (#3822 consolidated it into Settings → Appearance); the provider-detail test-result
  masking and upstream-proxy copy moved to decomposed components (#3501
  BatchTestResultsModal / UpstreamProxyCard) — assertions now read the owning files.
- api-routes-critical: SOCKS5 is now enabled by default (opt-out), so the disabled-
  rejection test must set ENABLE_SOCKS5_PROXY=false explicitly (an unset env now means
  enabled).

(The ~32 live-Gemini integration tests are gated on OMNIROUTE_API_KEY and skip in CI;
they only 'fail' locally when that key is present without a running server.)
2026-06-15 03:32:11 -03:00
PizzaV
f42e8fa751 feat(mimocode): per-account proxy support for multi-account round-robin (#3837)
Integrated into release/v3.8.25 — feat(mimocode): per-account proxy for multi-account round-robin (runWithProxyContext per account, keyed by fingerprint). Orphan test relocated to a collected vitest path (14/14 green).
2026-06-14 21:30:02 -03:00
Diego Rodrigues de Sa e Souza
337cd18932 fix(sse): clamp Gemini thinking budget to model cap (#3842) (#3865) 2026-06-14 21:27:25 -03:00
Diego Rodrigues de Sa e Souza
cbb332d355 Fase 7 finalize — 3 catracas advisory→bloqueante + re-baseline consciente v3.8.25 (#3809)
Integrated into release/v3.8.25 — Fase 7 finalize: 3 catracas advisory→bloqueante (dead-code/cognitive-complexity/type-coverage) + re-baseline consciente.
2026-06-14 18:06:56 -03:00
Diego Rodrigues de Sa e Souza
931afe3482 Fase 8 · Bloco B — suíte de correção (property + golden + SSE-correctness) (#3808)
Integrated into release/v3.8.25 — Fase 8 Bloco B (property + golden + SSE-correctness).
2026-06-14 18:02:51 -03:00
Diego Rodrigues de Sa e Souza
cf5898205a fix(security): CCR cross-tenant IDOR — scope store per-principal + bound memory (#3859)
Integrated into release/v3.8.25 — fix(security): CCR cross-tenant IDOR (scope store per-principal + bound memory).
2026-06-14 18:02:36 -03:00
Diego Rodrigues de Sa e Souza
d728bfbb1e Fase 8 · Bloco D — injection-guard em todas as rotas LLM + red-team (#3857)
Integrated into release/v3.8.25 — Fase 8 Bloco D (injection-guard em todas as rotas LLM + red-team).
2026-06-14 18:02:18 -03:00
Diego Rodrigues de Sa e Souza
d3146a1751 Fase 8 · Bloco C — resiliência runtime (chaos + heap-growth + k6 soak) (#3854)
Integrated into release/v3.8.25 — Fase 8 Bloco C (resilience: chaos + heap-growth + k6 soak).
2026-06-14 18:02:08 -03:00
Diego Rodrigues de Sa e Souza
4ffc55cfe4 feat(compression): compression engines + async pipeline + Compression Studios (#3848)
Integrated into release/v3.8.25.
2026-06-14 10:45:22 -03:00
Diego Rodrigues de Sa e Souza
c8b9544d54 test(proxy): guard per-connection direct bypass over global proxy (#2996) (#3853) 2026-06-14 10:33:22 -03:00
Diego Rodrigues de Sa e Souza
7c080941d1 feat(connections): per-connection disable-cooldown opt-out (#2997) (#3852) 2026-06-14 10:32:26 -03:00
NOXX - Commiter
948cf1f92c feat(kiro): live per-account model discovery via ListAvailableModels (#3836)
Kiro's catalog is per-account / per-tier (and admin-curated for IAM Identity Center
orgs), which the static registry can't reflect. The models route now discovers the
live list from the CodeWhisperer ListAvailableModels API with the stored OAuth token
(Builder ID / social and IdC accounts; profileArn only as a retry to avoid 403,
region-matched with us-east-1 fallback), falling back to the static registry catalog
when the token is missing/expired or the upstream is unavailable so import never breaks.

Integrated into release/v3.8.25.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-06-14 10:30:32 -03:00
NOXX - Commiter
ed0638c0f1 feat(gemini/vertex): surface Veo video models in dynamic discovery (#3839)
Gemini / Vertex / Vertex AI Express already discover their catalog dynamically from
v1beta/models, but video (Veo) models use predictLongRunning, which was not mapped —
so they never surfaced. parseGeminiModelsList now recognizes predictLongRunning and
exposes Veo video models alongside chat/image/embedding/audio.

Integrated into release/v3.8.25.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-06-14 10:28:48 -03:00
Abhishek Divekar
2a26fea530 fix(quota): surface OpenCode Go missing-quota-API as a latched diagnostic (#3838)
Diagnostic mitigation: OpenCode Go has no public quota API today (the configured
endpoints return 404 / Z.ai 401). The fetcher now logs a single latched (per-process)
404 warning pointing at the upstream tracking issues, caches the "endpoint unavailable"
result for 5 minutes to avoid hammering, and fails open. The dashboard messaging is
clarified with the OMNIROUTE_OPENCODE_GO_QUOTA_URL override hint.

Integrated into release/v3.8.25.

Co-authored-by: Abhishek Divekar <adivekar@utexas.edu>
2026-06-14 10:27:39 -03:00
lukmanc405
058946bd04 fix(models): don't auto-hide transient (rate-limited/timeout) failures on Test All (#3849)
With Auto-hide failed models on (default), a Test All sweep across 10+ models in
parallel reliably trips per-account rate limits on subscription-tier providers, and
the 429'd/timed-out models were auto-hidden — silently removing working models from
/v1/models with no easy recovery. evaluateTestAllEntry now surfaces transient failures
(rateLimited/isTimeout) as an 'error' icon but keeps them visible; only genuine
(non-transient) failures are still auto-hidden.

Integrated into release/v3.8.25.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-06-14 10:25:55 -03:00
NOXX - Commiter
bcb7ed00c7 fix(pricing): add missing Kiro model pricing rows (#3835)
The kiro table in DEFAULT_PRICING was missing models the Kiro registry serves
(most visibly claude-sonnet-4.6), so getPricingForModel() returned null and their
usage cost was reported as $0.00. Adds the missing rows.

Integrated into release/v3.8.25.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-06-14 10:24:24 -03:00
Tubagus
5ace548bc5 fix(combo): return replay response in round-robin streaming path (#3811)
A round-robin combo serving a streaming response returned a 500
(TypeError: ReadableStream is locked). validateResponseQuality() peeks streaming
bodies via getReader(), which locks result.body and returns an unlocked replay in
quality.clonedResponse. The priority strategy already returns
`quality.clonedResponse ?? result`, but the round-robin success path returned the
locked original. This mirrors the priority strategy so the body pipes downstream.

Added a regression test (#3811) that fails (body locked) without the fix.

Integrated into release/v3.8.25.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-06-14 09:42:59 -03:00
Diego Rodrigues de Sa e Souza
70319eb831 fix(combo): sessionless combo stickiness + reasoning-aware readiness (#3825) (#3847) 2026-06-14 09:04:28 -03:00
Randi
31e4e46ef9 Expose Arena ELO sync in feature flags (#3821)
Adds ARENA_ELO_SYNC_ENABLED to the Dashboard Feature Flags registry (DB-overridable),
routes Arena ELO startup/status checks through the shared feature-flag resolver while
preserving the existing env fallback, and refreshes env docs (adds the missing
STREAM_READINESS_TIMEOUT_MS example) so env/doc sync stays green.

Integrated into release/v3.8.25.

Co-authored-by: R.D. <rogerproself@gmail.com>
2026-06-14 08:45:02 -03:00
Randi
ebf06b5e6c fix(reasoning): map max effort to xhigh by default (#3826)
Reuse the xhigh opt-out policy for OpenAI-compatible `max` normalization: non-Claude
providers map `max` to `xhigh` unless the target model explicitly opts out (DeepSeek
via OpenRouter supports xhigh), downgrading to `high` only on explicit opt-outs.
Resolves common Claude aliases (anthropic/claude-opus-4.6, anthropic.claude-opus-4-6,
short/dated/-thinking variants) back to the canonical Claude xhigh-support list, and
keeps literal `max` pass-through for native Claude/CC providers that support it. Also
moves the mistral/github reasoning-effort rejection ahead of normalization (it was
previously dead code for `max`). Includes the v3.8.25 release file-size re-baseline.

Integrated into release/v3.8.25.

Co-authored-by: R.D. <rogerproself@gmail.com>
2026-06-14 08:43:45 -03:00
Diego Rodrigues de Sa e Souza
e2d171c63e test(combo): cover skipProviderBreaker consumer gate (#2743 gap d) (#3832) 2026-06-14 02:07:10 -03:00
Diego Rodrigues de Sa e Souza
5875c7993f fix(providers): surface real Devin error + fix Windsurf auth instructions (#3324) (#3829) 2026-06-14 02:05:22 -03:00
Diego Rodrigues de Sa e Souza
c9e24ae48c fix(grok-web): clearer 403 message for anti-bot/IP-reputation blocks (#3474) (#3830) 2026-06-14 02:04:12 -03:00
Diego Rodrigues de Sa e Souza
3e79d92744 fix(db): env-overridable mass-pending-migrations threshold (#3416) (#3827) 2026-06-14 02:02:56 -03:00
Diego Rodrigues de Sa e Souza
01c8f2d3dd test(proxy): cover Vercel-relay proxyFetch path (#2743 gap c) (#3831) 2026-06-14 02:02:30 -03:00
Diego Rodrigues de Sa e Souza
c29e83a0ba fix(cli): surface 'omniroute runtime repair' in native-module errors (#3476) (#3828) 2026-06-14 02:02:02 -03:00