Commit Graph

4698 Commits

Author SHA1 Message Date
Diego Rodrigues de Sa e Souza
103236db7c fix(release): round-2 CI findings — LocaleAutoDetect refresh gating + ratchet tighten
- fix(i18n): LocaleAutoDetect (#5979) refreshed the router on EVERY cookie-less
  first visit, even when the detected locale matched the server-rendered
  <html lang> — re-navigating mid-interaction (flaky e2e 'execution context
  destroyed' + visible flash for new visitors). Refresh now only fires when
  the locale actually differs; regression test added.
- quality: tighten openapiCoverage.pct 36.9->39.3 (require-tighten gate on the
  release PR; value measured by the CI Quality Ratchet on 00c55afcb)
- quality(file-size): shrink the ProxyRegistryManager TDZ note to fit the
  1117-line freeze (prettier reflow added a line at commit time)
- changelog bullet + 42 i18n mirrors re-synced
2026-07-04 11:29:15 -03:00
Diego Rodrigues de Sa e Souza
00c55afcb6 fix(release): v3.8.44 one-pass release-PR CI sweep
- fix(dashboard): /dashboard/system/proxy 500'd on EVERY render — #5918 put
  useProxyBatchOperations(load) before the const load declaration (TDZ
  ReferenceError, digest 539380095). Hook block moved after load; SSR
  renderToString regression test added (the exact crash mode).
- fix(server): TRACE/TRACK/CONNECT crashed Next's middleware adapter
  (undici cannot represent them) into a raw 500 on every route — the raw
  HTTP method guard now answers 405 + Allow up-front (dast-smoke
  Schemathesis finding on /api/keys/{id}/devices); guard test added.
- fix(api): restore Zod validation on the provider-scoped chat route via a
  .passthrough() schema preserving #5907's relaxed semantics (t06 gate).
- docs(openapi): /api/keys/{id}/devices 401 now refs the management error
  envelope (Schemathesis schema-conformance).
- quality: rebaseline i18nUiCoverage 77.5->76.8 (+~1352 new en.json UI keys
  from the cycle await the async translation workflow; v3.8.39 precedent).
- CodeQL: dismissed 2 incomplete-url-substring FPs on unit-test asserts
  (v3.8.35 precedent) with Hard Rule #14 justifications.
- changelog: bullets for the above + 42 i18n mirrors re-synced
2026-07-04 10:40:48 -03:00
Diego Rodrigues de Sa e Souza
babb759441 chore(release): v3.8.44 — 2026-07-04
Release reconciliation + close (generate-release Phases 0a/1):
- CHANGELOG [3.8.44]: 21 PR refs added to existing bullets, 62 new bullets
  (incl. restoration of ~10 bullets erased by the stale-branch merge in
  1f6ec5bc8), 3 Maintenance rollups, #6061/#6130 credit fixes, 🙌 Contributors
  table (35 external contributors) — coverage 144/153 cycle commits by #ref
- 42 docs/i18n CHANGELOG mirrors synced (EN content; i18n workflow translates)
- README: What's New refreshed for v3.8.44 highlights
- build scope: exclude electron/node_modules + electron/dist-electron + .build
  from tsconfig (local build-output leak poisoned next build with 8GB OOM —
  same class as the 2026-06-25 incident; scope 14765→5207, gate green)
- quality: cyclomatic baseline 2026→2028 (+2 inherited end-of-cycle drift;
  verified the release-captain code fixes add 0 new violations)
2026-07-04 09:05:01 -03:00
Diego Rodrigues de Sa e Souza
979a7c63e9 fix(release): v3.8.44 Phase-0 pre-flight — base-red sweep + ratchet absorption
- fix(models): stop resolveProviderAlias at registered provider ids so oc/
  reaches the no-auth opencode provider again (#2901 contract, regressed by
  #5918's transitive chain; transitivity kept across alias-only hops)
- fix(auggie): handle async EPIPE 'error' events on child stdin so a
  fast-exiting CLI surfaces a sanitized error instead of crashing (both
  spawn sites); deflakes auggie-executor tests
- test: align provider family count 166->167 (Kenari #6104), regenerate
  translate-path golden on Linux (+kenari), opencode quota scope
  provider->connection (#6061)
- quality(test-masking): add _deletedWithReplacement allowlist support to
  check-test-masking.mjs (deletion exempt ONLY when the declared replacement
  test exists in HEAD; 5 new gate unit tests) + reduction allowlist entries
  for the verified #5958/#6088/#5816 migrations + targetExhaustion->
  combo-target-exhaustion replacement (#5976, 21 cases/52 asserts vs 13/37)
- quality(file-size): absorb v3.8.44 cycle drift (oauth route 960,
  providerLimits 998, chat 1662, auth 2426) with justification; #6158 will
  restore the oauth-route freeze
- changelog: bullets for the above + the #6155 cooling-panel build fix
2026-07-04 06:39:21 -03:00
Diego Rodrigues de Sa e Souza
5ca28f2ff7 fix(dashboard): resolve broken Card import breaking next build (base-red from #6061) (#6155)
* fix(dashboard): resolve broken Card import breaking next build (base-red from #6061)

CoolingConnectionsPanel imported `Card` from `@/components/ui/card`, a path
that does not exist in this repo (there is no shadcn-style `src/components/ui/`).
The PR->release fast-gates do not run `next build`, so the broken import slipped
in and `next build` failed with:

  Module not found: Can't resolve '@/components/ui/card'

Fix: the <Card> here was only a styled container, so replace it with a <div>
carrying the equivalent Tailwind classes (border/bg/padding + rounded-card
shadow-sm). Also normalize the file from CRLF to LF (it shipped with CRLF).

Adds a vitest/jsdom regression test (tests/unit/ui/CoolingConnectionsPanel.test.tsx)
that fails-without-fix (Vite: 'Failed to resolve import @/components/ui/card')
and passes with it, plus renders/empty-state coverage. Rule #18.

* fix(dashboard): stop client CoolingConnectionsPanel dragging server DB barrel into browser bundle

Second base-red from #6061, surfaced once the broken Card import was fixed:

  ./node_modules/ioredis/built/connectors/StandaloneConnector.js
  Module not found: Can't resolve 'net'
  Import trace: ioredis <- rateLimiter.ts <- apiKeys.ts <- @/lib/localDb
                <- CoolingConnectionsPanel.tsx (a "use client" component)

The client panel imported `formatResetCountdown` from `@/lib/localDb` — the
server-side DB re-export barrel — which transitively pulls better-sqlite3/ioredis
(node:net) into the browser bundle. That violates the CLAUDE.md rule 'never
barrel-import from localDb'.

`formatResetCountdown` is a pure date-formatting function, so move its
implementation to the client-safe `@/shared/utils/formatting` (alongside
formatTime/formatDuration) and re-export it from db/providers/rateLimit.ts for the
existing server callers + barrel. The panel now imports it directly from the
shared util — no server code in the client bundle.

Tests (Rule #18):
- tests/unit/format-reset-countdown.test.ts (node:test, blocking test:unit) —
  pure-function coverage: null/past/invalid, s, m+s, h+m, ISO string.
- tests/unit/ui/CoolingConnectionsPanel.test.tsx mock updated to the new module.
2026-07-04 06:35:07 -03:00
Diego Rodrigues de Sa e Souza
415d159c80 fix(oauth): graceful 400 for keychain-import-only providers (zed) (#6041) (#6054)
Graceful 400 for keychain-import-only providers on OAuth route (zed, #6041). Integrated into release/v3.8.44.
2026-07-04 01:00:58 -03:00
Diego Rodrigues de Sa e Souza
dc2efa5e63 feat(resilience): throttle concurrent upstream quota fetches — closes #6009 (#6058)
Throttle concurrent upstream quota fetches (#6009). Integrated into release/v3.8.44.
2026-07-04 00:58:55 -03:00
Diego Rodrigues de Sa e Souza
2fa47b7b2c feat(sse): per-request Auto-Combo controls (X-OmniRoute-Mode / X-OmniRoute-Budget) — closes #6023 #6024 #6025 (#6057)
Per-request Auto-Combo controls (X-OmniRoute-Mode / X-OmniRoute-Budget). Integrated into release/v3.8.44.
2026-07-04 00:57:33 -03:00
Diego Rodrigues de Sa e Souza
016fec3c82 feat(providers): add Kenari OpenAI-compatible gateway (#6104)
Add Kenari OpenAI-compatible gateway (BYOK). Integrated into release/v3.8.44.
2026-07-04 00:56:05 -03:00
Diego Rodrigues de Sa e Souza
c900bbb67a fix(providers): strip thinking param for minimax-m2.7 on NVIDIA NIM (#6102)
Strip unsupported thinking param for minimax-m2.7 on NVIDIA NIM. Integrated into release/v3.8.44.
2026-07-04 00:37:10 -03:00
Diego Rodrigues de Sa e Souza
402d9dea81 feat(models): add claude-sonnet-5 to Antigravity catalog (#6103)
Add claude-sonnet-5 to Antigravity catalog. Integrated into release/v3.8.44.
2026-07-04 00:35:34 -03:00
Diego Rodrigues de Sa e Souza
0cc32565aa fix(mitm): guard against concurrent MITM server starts (#6107)
Guard against concurrent MITM server starts (#2316). Integrated into release/v3.8.44.
2026-07-04 00:32:40 -03:00
Diego Rodrigues de Sa e Souza
d927f2d31f fix(translator): strip Responses-only truncation field before Chat Completions forwarding (#6109)
Strip Responses-only truncation field before Chat Completions forwarding (#2311). Integrated into release/v3.8.44.
2026-07-04 00:30:04 -03:00
Chirag Singhal
d8e4eeef5d fix(onboarding): route provider-details link by node id, not provider slug (#6145) (#6145)
Route onboarding provider-details link by node id (#6145). Integrated into release/v3.8.44.
2026-07-04 00:26:15 -03:00
derhornspieler
81f5bce4be fix(cli): give setup-claude a fallback profile generator like setup-codex (#6138)
Give setup-claude a fallback profile generator like setup-codex. Integrated into release/v3.8.44.
2026-07-04 00:23:09 -03:00
Raxxoor
65bec99c3c fix(glm): suppress </think> close marker leak in GLM Anthropic transport (#6133)
Suppress </think> close-marker leak in GLM Anthropic transport. Integrated into release/v3.8.44.
2026-07-04 00:22:15 -03:00
janeza2
c51693b1a3 fix(provider-limits): close TOCTOU race in quota recovery clear (I2) (#6139)
Close TOCTOU race in quota recovery clear via CAS primitive (I2 from #6128). Integrated into release/v3.8.44.
2026-07-04 00:16:12 -03:00
backryun
d3edbb5535 fix(repo): remove Windows case-conflicting DESIGN duplicate (#6140)
Remove stale root DESIGN.md (Windows case-conflict with design.md). Integrated into release/v3.8.44.
2026-07-04 00:11:47 -03:00
Diego Rodrigues de Sa e Souza
4a7602f96d chore(quality): rebaseline residual eslint + file-size drift (v3.8.44)
Residual drift on release tip 716041223 (moving target): eslintWarnings 4270->4279
(+9 as the branch advanced past the prior rebaseline) and testFrozen/frozen file-size
caps for providerLimits.ts (955->982), accountFallback.ts (1790->1864) and
sse-auth.test.ts (1553->1600). All inherited from parallel-session merges (e.g. #6128);
the two production god-files ideally warrant decomposition rather than a bump (tracked
as debt). No production code touched.
2026-07-03 23:57:56 -03:00
Devin
e42e55426e i18n(zh-CN): translate CHANGELOG entries and section headings (#6043)
Adopt zh-CN as a translated locale: translate CHANGELOG + supporting docs. Integrated into release/v3.8.44.
2026-07-03 23:57:35 -03:00
Diego Rodrigues de Sa e Souza
926b08aa80 chore docs 2026-07-03 23:54:44 -03:00
Milan Soni
cfd1f7219a docs: Normalize mixed-language documentation content (#6105)
Normalize mixed-language documentation to English. Integrated into release/v3.8.44.
2026-07-03 23:53:48 -03:00
janeza2
716041223e fix(provider-limits): clear transient rate-limit state when quota recovers (#6128)
Clear transient rate-limit state when quota recovers. Integrated into release/v3.8.44.
2026-07-03 20:29:04 -03:00
NOXX - Commiter
8cded07233 feat(build): backend-only fast build (skip the dashboard frontend) (#6119)
Backend-only fast build (skip dashboard frontend). Integrated into release/v3.8.44.
2026-07-03 20:21:11 -03:00
KooshaPari
e9d83e7c3f fix(accountFallback): persist per-account 429 cascade + classify 'Monthly usage limit. Resets in N days.' (#6061)
Persist per-account 429 cascade + classify 'Monthly usage limit. Resets in N days'. Integrated into release/v3.8.44.
2026-07-03 19:58:09 -03:00
Diego Rodrigues de Sa e Souza
e2672466c5 chore(quality): rebaseline v3.8.44 release-green drift (eslint/cognitive/cyclomatic/file-size)
Measured on release tip 32e4c906e during the #6131/#5975 release-green pass:
eslintWarnings 4256->4270 (+14), cognitiveComplexity 861->867 (+6), cyclomatic
count 2015->2026 (+11), and testFrozen caps for models-catalog-route (1507->1600),
perplexity-web (959->999), route-edge-coverage (1234->1241, my #5975 comment +7).
Inherited cycle drift (the Quality Ratchet does not run on PR->release fast-gates);
compression 'bun not found' is a local-env false and codeql is within baseline, so
neither is rebaselined. No production code touched.
2026-07-03 19:46:22 -03:00
Ankit
d072db21e6 fix(combos): expand OpenCode/MiMo fingerprint accounts in combo builder (#6087) (#6092)
Expand OpenCode/MiMo fingerprint accounts in combo builder (#6087). Integrated into release/v3.8.44.
2026-07-03 19:44:12 -03:00
Arthur Bodera
8c3bcf06b8 fix(auth): persist quota preflight account lockouts (#6090)
Persist quota preflight account lockouts until reset window. Integrated into release/v3.8.44.
2026-07-03 19:41:16 -03:00
PizzaV
421a1ec5bc fix(combo): expand fingerprint-based providers into per-fingerprint combo targets (#6082)
Expand fingerprint-based providers into per-fingerprint combo targets. Integrated into release/v3.8.44.
2026-07-03 19:39:04 -03:00
Semianchuk Vitalii
32e4c906ef fix: reqId ReferenceError in safety-net redirect, dead code, filename typo (#6097)
Fix reqId ReferenceError in safety-net combo redirect + dead-code + DESING→DESIGN rename. Integrated into release/v3.8.44.
2026-07-03 18:56:42 -03:00
Ankit
631c6c4dc3 fix(compression): send patch-only to PUT /api/settings/compression in CompressionHub (#6039) (#6077)
Send patch-only to PUT /api/settings/compression in CompressionHub (#6039). Integrated into release/v3.8.44.
2026-07-03 18:54:13 -03:00
Ankit
00d97cab74 fix(codex): use access_token.exp instead of id_token.exp for import expiresAt (#6075) (#6084)
Prefer access_token.exp over id_token.exp for Codex auth import (#6075). Integrated into release/v3.8.44.
2026-07-03 18:52:32 -03:00
Diego Rodrigues de Sa e Souza
f9b2fb4138 fix(security): persist IP filter config + enforce it in the authz pipeline (#6131) (#6132)
Integrated into release/v3.8.44 — IP filter persistence + authz-pipeline enforcement (closes #6131). HARD-neutro: validate-release-green on the merge shows the same 3 pre-existing base-reds as the release baseline (test-masking cycle-wide, unit red-herring, integration batch-E2E env); #6131's own tests + ip-filter/pipeline suites all green.
2026-07-03 18:50:29 -03:00
KooshaPari
c02f8d5c2c fix: keep Claude tool results adjacent (#6035)
Reattach OpenAI tool_result adjacent to tool_use before Claude send (#6026). Integrated into release/v3.8.44.
2026-07-03 18:42:16 -03:00
Arthur Bodera
f884c407bd fix(combo): prefer known context capacity over unknown (#6088)
When a combo filters a target for exceeding a known context limit, prefer remaining known-compatible targets over unknown-metadata ones. Regression guard: combo-context-window-filter.test.ts.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 17:10:38 -03:00
Arthur Bodera
9c2fbf577c fix(models): normalize GLM-5.2 provider context (#6091)
Hosted GLM-5.2 provider aliases now respect their declared context caps instead of inheriting the native 1M; native/bare + verified OpenCode/ZenMux routes stay at 1M. Regression guards added.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 17:08:45 -03:00
backryun
91cda11c83 fix(providers): update Gemini Web cookies and models (#6095)
Refresh Gemini Web cookie handling + model catalog. Regression guard: gemini-web.test.ts.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 16:55:12 -03:00
backryun
caeee8970d fix(providers): update Perplexity Web models (#6106)
Refresh the Perplexity Web model catalog + mode/model_preference mappings to the current live set. Regression guard: perplexity-web.test.ts.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 16:50:58 -03:00
Diego Rodrigues de Sa e Souza
1f1fda7cf5 fix(config): externalize ws for copilot-m365-web executor (#6130, closes #6062)
Re-lands the #6098 ws-externalization fix onto release/v3.8.44 (it had merged to main by mistake and was reverted). Externalize ws/bufferutil/utf-8-validate so the copilot-m365-web WebSocket masking path works at runtime.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 16:42:58 -03:00
Diego Rodrigues de Sa e Souza
dbc0cdbe1b test(embeddings): pin seeded connection to direct egress in route-edge-coverage (#5975 collateral)
#5975 made the embeddings service honor the connection-level proxy. The pre-existing
route-edge-coverage embeddings edge-case tests seed an openai connection while the
settings-proxy suite has left a provider-level proxy (provider.local:8080) in the shared
DATA_DIR that resetStorage() does not clear — inert before #5975, but now the leaked
proxy fast-fails the embedding upstream with PROXY_UNREACHABLE.

These tests do not exercise proxying, so seedOpenAIConnection now pins the connection to
proxyEnabled:false, making resolveProxyForConnection return a direct egress regardless of
leaked global proxyConfig. No assertions weakened; 16/16 in the file pass. Regression
surfaced by the concurrency=1 full-suite run; passes on #5975's parent, red after it.
2026-07-03 16:13:39 -03:00
KooshaPari
439f28d456 fix(ci): harden provider translate-path golden across CI runners (#6076)
Normalize OS/arch-derived request headers (X-Stainless-Os/Arch, (OS;arch) UAs, and Antigravity's os.platform()-derived platform substring) in the golden so the test is runner-independent. Fixes the Mac-literal Antigravity UA that would have failed on Linux CI. Supersedes stale #6002.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 16:05:15 -03:00
KooshaPari
1f6ec5bc86 feat(minimax): extract M3 reasoning_content on OpenAI-format tiers (#6073)
MiniMax M3 leaks raw <think>...</think> into content on 8 OpenAI-format provider tiers; extract it into reasoning_content, leaving the direct minimax/minimax-cn (Claude-format) tiers untouched. Replacement for the stale #5804 branch.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 16:01:31 -03:00
Paijo
ad58bc15d6 feat(proxy): batch delete, auto-test, health scheduler + transitive alias fix (#5918)
Proxy-registry batch management (batch-delete, auto-test, background health scheduler) + fix resolveProviderAlias to follow the alias chain transitively (oc -> opencode -> opencode-zen). Probe target now operator-configurable via PROXY_HEALTH_TEST_URL. Scope-creep files from the original branch dropped.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 13:31:44 -03:00
Chewji
9c6a3640fd fix(registry): update grok-cli model context lengths (#5913)
grok-build 128k→256k, grok-composer-2.5-fast 128k→200k to match actual Grok CLI /context capacities so context-aware routing stops filtering these models out. Registry-only.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
2026-07-03 12:53:26 -03:00
Diego Rodrigues de Sa e Souza
29e04b7089 fix(providers): strip orphan tool_result on Antigravity MITM path (#6026) (#6115) 2026-07-03 12:50:26 -03:00
Diego Rodrigues de Sa e Souza
2a20e5ca47 fix(providers): emulate OpenAI tool_calls in GitLab Duo executor (#6051) (#6111)
Co-authored-by: felssxs <felssxs@users.noreply.github.com>
2026-07-03 12:49:56 -03:00
Diego Rodrigues de Sa e Souza
513e3b0047 Merge pull request #6110 from diegosouzapw/fix/release-envdoc-bifrost-port
fix(ci): document BIFROST_PORT — clear env-doc-sync base-red blocking the PR queue
2026-07-03 12:11:10 -03:00
Diego Rodrigues de Sa e Souza
8d7e3e28f2 fix(ci): document BIFROST_PORT to clear env-doc-sync base-red
The Bifrost embedded-service merge referenced process.env.BIFROST_PORT
(src/lib/services/bootstrap.ts, default 8080) without adding it to
.env.example / ENVIRONMENT.md, so check:env-doc-sync failed on the release
tip and reddened Fast Quality Gates for every open PR->release. Docs-only.
2026-07-03 12:10:07 -03:00
Diego Rodrigues de Sa e Souza
d0be015e38 Merge pull request #5912 from chirag127/fix/pnpm11-allowbuilds-workspace
fix(install): pnpm 11 ERR_PNPM_IGNORED_BUILDS — add allowBuilds to pnpm-workspace.yaml
2026-07-03 10:29:08 -03:00
Diego Rodrigues de Sa e Souza
556f191d30 feat(services): promote Bifrost to embedded/supervised service (#5670) (#5817)
Promotes Bifrost (@maximhq/bifrost — Go AI-gateway) from an env-only relay
sidecar to a first-class embedded/supervised service, matching the existing
cliproxy/9router model. Implements item #2 of #5670; the broader RouterBackend
contract (items #1, #3-#5) stays out of scope.

- Installer (npm-style, ninerouter model): install/update/getInstalledVersion/
  getLatestVersion (1h cache)/resolveSpawnArgs (Go single-dash flags, pinned
  BIFROST_TRANSPORT_VERSION), needsApiKey=false
- Bootstrap SERVICES entry (healthPath /v1/models) + spawn-args factory branch
- Migration 113 seeds the version_manager row (not_installed, port 8080,
  auto_update=1, provider_expose=1)
- 7 lifecycle API routes under /api/services/bifrost/ (verbatim from cliproxy,
  errors sanitized) — loopback-only via existing LOCAL_ONLY_API_PREFIXES
- Shared [name]/logs branch for bifrost
- Dashboard tab + registration in the services page shell
- Relay auto-wiring: getBifrostRoutingConfig defaults BIFROST_BASE_URL to the
  supervised port when the instance is running; explicit env still wins; the
  env-only relay path (/v1/relay/.../bifrost) stays unchanged (compat layer)
- Docs (EMBEDDED-SERVICES, openapi) + unit tests (installer/route-guard/routing,
  19 tests) + RUN_SERVICES_INT-gated integration lifecycle

Note: the actual Go-binary install/start/health path requires a documented VPS
live-test before merge (Hard Rule #18 / spec section 7); the gated integration
harness is the vehicle for that run.
2026-07-03 09:05:41 -03:00