Commit Graph

1541 Commits

Author SHA1 Message Date
Witroch4
58d317d223 [codex] add per-key local usage command (#4034)
Integrated into release/v3.8.27 — per-key local @@om-usage command (cached quota, no upstream routing). Rebased onto modularized schemas/keys.ts + file-size rebaseline. Thanks @Witroch4!
2026-06-17 00:07:12 -03:00
Randi
3410beb7f5 Refine compression settings, storage labels, and sidebar grouping (#4033)
Integrated into release/v3.8.27 — relocate Token Saver into Compression Settings (controlled component), reorder Security/Authz tabs, storage labels + i18n relabel. Thanks @rdself!
2026-06-16 23:43:09 -03:00
Diego Rodrigues de Sa e Souza
618c95bbf9 fix(ci): scope TIA to node:test unit files only (mirror test:unit glob) (#4035)
Integrated into release/v3.8.27 — scopes the advisory TIA step to the test:unit node:test glob, fixing the 99 false failures. +4 TDD.
2026-06-16 23:42:47 -03:00
Diego Rodrigues de Sa e Souza
7ef71aad3c feat(dashboard): real circuit-breaker state in the Combo Live cascade (U1b) (#4029)
Overlays real provider circuit-breaker state (GET /api/monitoring/health) onto the Combo Live cascade as a 'CB: OPEN · 41s' badge. Pure enrichRunWithBreakers + fail-soft useProviderBreakerHealth poll; graceful when health is absent. +13 tests. Integrated into release/v3.8.27.
2026-06-16 19:22:15 -03:00
Randi
b2479d8d2a fix(api): return 400 (not 500) for malformed JSON on /api/auth/login (#4031)
Wrap request.json() so a malformed/non-JSON login body returns a structured 400 instead of falling through to the 500 catch. Fixes the schemathesis high-risk-endpoint DAST finding (verified: schemathesis step now passes). +TDD test. Integrated into release/v3.8.27.
2026-06-16 19:21:27 -03:00
Diego Rodrigues de Sa e Souza
dd374df312 fix: restore unit regressions dropped by lossy schema/registry modularizations (#4030)
Restores schema fields (combo reasoningTokenBuffer, budget-0 #3537, openrouter preset, proxy family #3777, resilience degradation/providerCooldown), qwen-web v2 endpoint+catalog, mimocode models key — all dropped by #3988/#3993 — and aligns 3 tests to #3941/#3993. Verified: 8 failing regression tests on release tip -> 131/131 green on this branch. Integrated into release/v3.8.27.
2026-06-16 19:06:31 -03:00
Randi
6f4914f7d6 refactor(dashboard): settings UI layout + API Keys naming (#4020)
Presentation/relabel refactor of the Settings dashboard (API Manager -> API Keys), card relocations, Toggle adoption, present-but-disabled engine steps. Auth-file changes are string/comment-only (no behavior change). Integrated into release/v3.8.27.
2026-06-16 18:53:23 -03:00
Randi
e68cd47470 fix(dashboard): Playground Compare tab loading + HTTP method guard (#4024)
randomUUID non-HTTPS fallback + static CompareTab import; raw HTTP TRACE->405 method guard wired into dev + standalone servers. Integrated into release/v3.8.27.
2026-06-16 18:46:09 -03:00
Diego Rodrigues de Sa e Souza
ad067a193e fix(opencode): map x-session-affinity to x-opencode-session for custom providers (#4022) (#4028) 2026-06-16 18:37:25 -03:00
Diego Rodrigues de Sa e Souza
e096a4c937 feat(sse): delegated Anthropic Context Editing for Claude (clear_tool_uses) (#4021)
Opt-in Claude-only delegated compression: injects context_management.clear_tool_uses_20250919 at the Claude pre-serialization chokepoint (composes with clear_thinking, thinking first), threaded via ExecuteInput from handleChatCore. Pure edit-builder + 11 tests (7 unit + 4 e2e fetch-capture). Beta context-management-2025-06-27 already advertised; allowlist done. Telemetry/400-fallback/claude-web coverage deferred.
2026-06-16 18:32:12 -03:00
Diego Rodrigues de Sa e Souza
918630bfd8 feat(api): advertise combo capabilities on import surfaces (#3979) (#4027) 2026-06-16 18:10:47 -03:00
Diego Rodrigues de Sa e Souza
86585c48c6 fix(guardrails): preserve original image when vision-bridge describe fails (#4012) (#4026) 2026-06-16 18:03:32 -03:00
Diego Rodrigues de Sa e Souza
94727b928b fix(sse): preserve Kiro streaming finish_reason tool_calls (#3980) (#4025) 2026-06-16 17:58:13 -03:00
Diego Rodrigues de Sa e Souza
65f9ce7edf feat(ci): Quality Gate v2 — Onda 0 + Onda 1 (gate flips, TIA, SAST, DAST-smoke, mutation infra) (#4016)
* docs(ops): add quality-gate assessment + replication playbook (Fase 9 foundation)

* feat(ci): flip oasdiff breaking-change gate to blocking (ratchet)

* docs(ops): deliver main branch-protection ruleset for owner to apply

* fix(ci): run typecheck:core in PR->release fast-gates (close fast-gates hole, part 1)

* perf(mutation): enable Stryker incremental mode + cache (scales the 60/80 rollout)

* feat(ci): commit CodeQL advanced config (security-extended), replacing default-setup

* feat(ci): version semgrep SAST workflow (owasp/secrets), advisory

* feat(quality): TIA test-impact map builder (import-graph; map built at runtime, gitignored)

* feat(quality): TIA impacted-test selector with run-all fail-safe

* fix(ci): run TIA-impacted unit tests in PR->release fast-gates (build map at runtime, fail-safe full)

* feat(ci): DAST-smoke per-PR (schemathesis subset + promptfoo injection-guard, blocking)

* fix(ci): unbreak Fase 9 PR CI (MDX frontmatter, CodeQL conflict, dast-smoke advisory)

- Add MDX frontmatter to docs/ops/{BRANCH_PROTECTION_MAIN,QUALITY_GATE_PLAYBOOK}.md.
  fumadocs rejects frontmatter-less docs -> 'npm run build' failed -> broke dast-smoke's
  build step (the release fast-gates never runs build, so this only surfaced on the PR).
- codeql.yml: workflow_dispatch-only until the owner switches repo CodeQL Default->Advanced
  (advanced configs cannot be processed while default setup is enabled; documented inline).
- dast-smoke.yml: job-level continue-on-error (advisory) so this brand-new gate matures
  before it blocks (repo convention: advisory -> blocking).

* ci(quality): make TIA unit-test step advisory until release test-debt is cleared

release/v3.8.27 carries ~17 pre-existing failing unit tests (budget #3537, apiKey
#3552, several Zod schemas, Puter/Qwen executors, mimocode entry, etc.) unrelated to
this PR — the new 'run tests on PR->release' gate surfaced them. Per the repo's
advisory->blocking convention, this step enters advisory (it still runs + reports)
so pre-existing debt doesn't block the gate program. typecheck:core stays blocking.
Flip to blocking (remove continue-on-error) once the release suite is green.
2026-06-16 17:27:36 -03:00
Diego Rodrigues de Sa e Souza
599c10b048 fix(sse): guard model-less registry entries in getUnsupportedParams (mimocode) (#4015)
Real bugfix: guard model-less registry entries (mimocode) in getUnsupportedParams so handleChatCore no longer throws 'entry.models is not iterable' / reports 'All models failed' for unrelated requests. Includes a regression test. Fast QG green.
2026-06-16 16:36:42 -03:00
Diego Rodrigues de Sa e Souza
33493586b4 feat(compression): capture per-engine analytics (#3960) + Lite schema fix (#3952) (#4018)
Captures the net-new value from #3960 (per-engine breakdown analytics) and #3952 (Lite engine schema fix) onto release/v3.8.27. Fast QG green; 622/622 compression+analytics tests pass.
2026-06-16 16:31:04 -03:00
diegosouzapw
6878d880f0 test(dashboard): rehome #3972 logs auto-refresh test so a runner collects it
tests/unit/request-logger-autorefresh-visibility-3972.test.tsx (added by #3972
via #3997) sat at the top level of tests/unit/ as a .tsx vitest test, which NO
runner collects: the node runner only globs *.test.ts, and test:vitest:ui only
runs tests/unit/ui. So the #3972 regression guard never executed in CI and
check:test-discovery was red release-wide. Move it under tests/unit/ui/ (the
collected vitest:ui path) and fix the relative import depth. Verified: the test
now runs and passes (2/2), and check:test-discovery is green.
2026-06-16 16:08:49 -03:00
Diego Rodrigues de Sa e Souza
d691f11230 feat(sse): real LLMLingua-2 ONNX compression engine (stable) (#4014)
Integrated into release/v3.8.27.

Adjustments before merge:
- Synced with the current release tip (was 11 commits behind).
- Added the 3 LLMLingua-2 ONNX optional-runtime deps to dependency-allowlist.json
  (@atjsh/llmlingua-2, @tensorflow/tfjs, js-tiktoken) — the only gate that was red.
- socks was allowlisted directly on release (separate fix d7db5c73d; it was declared
  by #4004 but never allowlisted, leaving check:deps red release-wide).

Verified locally: check:deps OK, file-size OK, public-creds OK, provider-consistency
161/232/0, typecheck:core clean, 24/24 LLMLingua tests pass. The only remaining Fast-QG
red is the pre-existing #3972 orphan test (request-logger-autorefresh-visibility-3972.test.tsx),
which is release-wide and unrelated to this PR.
2026-06-16 16:06:18 -03:00
Demiurge The Single
02302131fb fix(live-ws): bridge sidecar events to dashboard (#4004)
Integrated into release/v3.8.27 — repair LiveWS sidecar (startup, same-origin /live-ws, main→sidecar compression.completed bridge, early-msg queue). Fixed the cookie-parse regex (\s) + added a focused unit test; baseline bumped for the non-blocking chatCore bridge.
2026-06-16 13:15:25 -03:00
NOXX - Commiter
0bc670e414 feat(openai): honor custom base URL in model discovery + complete openai/codex pricing (#4005)
Integrated into release/v3.8.27 — openai model-discovery honors custom base URL (SSRF-guarded) + pricing rows for new openai/codex models. Tested + baselines bumped.
2026-06-16 13:08:37 -03:00
NOXX - Commiter
e3ec10bc2a fix(default-executor): honor custom providerSpecificData.baseUrl for OpenAI-format providers (#4002)
Integrated into release/v3.8.27 — honor custom providerSpecificData.baseUrl in DefaultExecutor (openai-format), tested.
2026-06-16 13:06:38 -03:00
Paijo
05213ac6a2 refactor: modularize schemas (non-stacked) (#3988)
Modularize validation schemas (#3594). Integrated into release/v3.8.27 after rebase (reconciled the merged hiddenSidebarGroupLabels #3971 + intelligenceSyncRequestSchema into the new modules) + behavior verification (typecheck, 195 schema/settings/validation tests, build 556/556).

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-06-16 11:18:40 -03:00
diegosouzapw
670d54c704 fix(registry): restore byteplus + mimocode dropped by #3993 modularization
The provider-registry modularization (#3993) was cut from a base predating the
byteplus (#3877) and mimocode (#3837) registry entries, so merging it silently
dropped both providers (getRegistryEntry returned undefined → validation reported
'not supported'). Re-add them as registry modules in the new structure; registered
count 159→161, provider-consistency 161/232/0.

Also align the pre-existing qwen-web validator test to #3958: since the validator
now requires a real `user` object in the 200 body, the mock must carry one.
2026-06-16 11:08:08 -03:00
NOXX - Commiter
9cd9ae511e fix(perplexity-web): parse schematized diff_block stream so answers aren't empty (#4001)
Integrated into release/v3.8.27 — schematized diff_block parsing follow-up to #3938.
2026-06-16 10:42:38 -03:00
Randi
bba97cfc60 大量UI显示和i18n优化 (#3973)
Integrated into release/v3.8.27
2026-06-16 09:57:21 -03:00
Randi
09278297ae fix(db): persist backup retention days (#3970)
Integrated into release/v3.8.27
2026-06-16 09:49:04 -03:00
thezukiru
f785521832 fix(qwen-web): cookie validation false-positive - check response body for user object (#3958)
Integrated into release/v3.8.27
2026-06-16 09:47:53 -03:00
Diego Rodrigues de Sa e Souza
3ad2649d62 fix(executor): strip stream_options on non-streaming requests (#3884) (#4000)
Clients that send stream_options:{include_usage:true} regardless of stream (e.g. the OpenAI Python SDK) had it passed through on non-streaming calls; NVIDIA NIM rejected it with 400 'Stream options can only be defined when stream=True'. DefaultExecutor.transformRequest only injected/cleared stream_options on the streaming branch and never stripped a client-sent value when stream=false. Add a !stream strip branch; the streaming injection path is unchanged. Global to openai-compat providers.
2026-06-16 09:47:24 -03:00
WormAlien
2d498c28ae fix(vision-bridge): force bridge for tokenrouter deepseek models (#3946)
Integrated into release/v3.8.27
2026-06-16 09:46:02 -03:00
Felipe Sartori
5714640546 feat(providers): add model search filter to provider dashboard (#3950)
Integrated into release/v3.8.27
2026-06-16 09:44:39 -03:00
Diego Rodrigues de Sa e Souza
23c03b07c7 fix(claude): forward client tool-search-tool anthropic-beta on the Claude OAuth path (#3974) (#3999)
The client-negotiated anthropic-beta: tool-search-tool-2025-10-19 was dropped on both Claude code paths (default executor rebuilt from static ANTHROPIC_BETA_CLAUDE_OAUTH; selectBetaFlags only read the client beta to gate thinking/effort), so claude.ai rejected deferred-tool requests with 400 'Tool reference not found'. Add an allowlist-merge (mergeClientAnthropicBeta) that unions the client's allowlisted betas into the outbound set on both paths, preserving #3415 (no forced thinking/effort).
2026-06-16 09:44:05 -03:00
Randi
18aa874a4f Add provider auth visibility controls (#3953)
Integrated into release/v3.8.27
2026-06-16 09:43:11 -03:00
Diego Rodrigues de Sa e Souza
ef64392e06 fix(combo): shuffle strict-random fallback remainder to spread load (#3959) (#3998)
strict-random shuffled only the deck-selected slot 0 and left the fallback remainder in fixed priority order, so after a failing deck pick the chain always fell through to the same top-priority model — a persistently-failing model was retried on essentially every request and fallback load never spread across peers. Shuffle the remainder too (like the random strategy).
2026-06-16 09:38:31 -03:00
Veier04
57bbd8b9f3 feat(compression): add Indonesian caveman rules and language pack (#3975)
Integrated into release/v3.8.27

(cherry picked from commit c9b5b1a892)
2026-06-16 09:36:37 -03:00
Diego Rodrigues de Sa e Souza
bb40fbba09 fix(dashboard): logs auto-refresh reads live visibility, not a stale mount ref (#3972) (#3997)
The auto-refresh interval gated each tick on visibleRef, seeded once at mount and updated only by a visibilitychange event. A tab mounted while document.visibilityState is 'hidden' (background load, bfcache, embedded/proxied webviews) with no later visibilitychange left the ref false forever, so the interval ticked but never fetched — only the manual button worked. Read the live document.visibilityState in the tick instead.
2026-06-16 09:32:19 -03:00
Diego Rodrigues de Sa e Souza
074f6188de fix(providers): fetch live /models for LLM7 and BytePlus (#3976) (#3996)
llm7 and byteplus carry a real modelsUrl but were not classified by any live-fetch branch of the model-import route, so their hardcoded 4-entry registry catalog was served (source local_catalog) instead of the upstream catalog. Add both to NAMED_OPENAI_STYLE_PROVIDERS so the route probes <baseUrl>/models and serves the live list, falling back to the local catalog only on fetch failure.
2026-06-16 09:24:40 -03:00
Diego Rodrigues de Sa e Souza
314b6f1870 fix(resilience): respect connection cooldown stored as numeric epoch (#3954) (#3995)
rate_limited_until is a TEXT column, but setConnectionRateLimitUntil (Antigravity full-quota path) persists a raw epoch number that SQLite coerces to a numeric string ("1781696905131.0"). The selection predicate isAccountUnavailable then did new Date("1781696905131.0") -> NaN, so the cooling connection was never skipped and the router kept dispatching to rate-limited accounts. Normalize numeric-epoch strings (and number/Date/ISO) via a shared cooldownUntilMs() helper in isAccountUnavailable / getEarliestRateLimitedUntil / filterAvailableAccounts / parseFutureDateMs. ISO behavior preserved.
2026-06-16 09:20:28 -03:00
Diego Rodrigues de Sa e Souza
73205a2427 ci(quality): flip require-tighten + osv + Trivy to blocking (v3.8.27 cycle-end) (#3984) 2026-06-16 09:13:38 -03:00
Randi
2c193636c8 Capture actual upstream provider requests (#3941)
Integrated into release/v3.8.27
2026-06-16 09:12:31 -03:00
Randi
ac0b7add27 Gate control-plane proxy direct fallback (#3963)
Integrated into release/v3.8.27
2026-06-16 09:12:28 -03:00
Randi
b05aea5355 feat: add sidebar group separator toggles (#3971)
Integrated into release/v3.8.27
2026-06-16 09:12:24 -03:00
Randi
7737bfea77 Refine provider quota card display (#3969)
Integrated into release/v3.8.27
2026-06-16 09:12:21 -03:00
Diego Rodrigues de Sa e Souza
a9d73bcbfb fix(security): polynomial ReDoS in comboAgentMiddleware regex (#3982)
* fix(security): eliminate polynomial ReDoS in comboAgentMiddleware <omniModel> regex (CodeQL js/polynomial-redos)

CACHE_TAG_PATTERN wrapped the tag in an unbounded `(?:\\n|\n|\r)*` prefix/suffix.
On an unanchored `.test()`/`.exec()` that is O(n²) on inputs with many newlines
(CodeQL js/polynomial-redos, alerts #612/#613). The surrounding runs are irrelevant
to detecting/capturing the tag, so the detection pattern now matches only the core
`<omniModel>([^<]+)</omniModel>`; the global strip pattern still consumes the
wrapping newlines (combo.ts streaming, #531) but BOUNDED ({0,16}) so it stays linear.

Behavior preserved: detection, model extraction, multi-tag stripping (#454) and
blank-line cleanup all unchanged (107 related tests green). Adds ReDoS-safety
regression tests (50k-newline inputs complete in <1ms).

* docs(changelog): add #3982 ReDoS fix to [3.8.27]
2026-06-16 08:42:58 -03:00
Diego Rodrigues de Sa e Souza
4d21044ba5 fix(release): post-merge quality gates to main for v3.8.26 (#3964)
Cherry-picks #3961 + #3962 from release/v3.8.26 to main (parity before tagging).
2026-06-16 02:33:19 -03:00
Diego Rodrigues de Sa e Souza
81a37b67ed Release v3.8.26 (#3875)
OmniRoute v3.8.26 — see CHANGELOG.md [3.8.26] for the full notes.

Highlights: Vertex AI media generation (#3929), GLM-5.2 effort-tier routing (#3885),
sticky round-robin combos (#3846), OpenRouter connection presets (#3878), compression
prompt-cache fix (#3936/#3890), and a security pass (form-data/vite + workflow hardening, #3949).

Co-authored-by: artickc <artickc@users.noreply.github.com>
Co-authored-by: rdself <rdself@users.noreply.github.com>
Co-authored-by: herjarsa <herjarsa@users.noreply.github.com>
Co-authored-by: Jack Smith <16862258+YunyunZhai@users.noreply.github.com>
Co-authored-by: dhaern <dhaern@users.noreply.github.com>
Co-authored-by: adivekar-utexas <adivekar-utexas@users.noreply.github.com>
Co-authored-by: megamen32 <megamen32@users.noreply.github.com>
Co-authored-by: zhiru <zhiru@users.noreply.github.com>
Co-authored-by: insoln <insoln@users.noreply.github.com>
Co-authored-by: diego-anselmo <diego-anselmo@users.noreply.github.com>
2026-06-16 01:00:40 -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