Commit Graph

2137 Commits

Author SHA1 Message Date
Jan Leon
92c511550d chore(duplication): share relay stream finalizer (#5497) 2026-06-29 21:58:46 -03:00
Jan Leon
b9fd69ecf3 chore(duplication): share settings transform schemas (#5496) 2026-06-29 21:58:44 -03:00
Jan Leon
21f8e44f3e chore(duplication): share media generation route helpers (#5493) 2026-06-29 21:58:41 -03:00
Jan Leon
1783f89456 chore(duplication): share version manager request parsing (#5492) 2026-06-29 21:58:38 -03:00
Jan Leon
3bc0d5feeb chore(duplication): share redis runtime helpers (#5490) 2026-06-29 21:58:35 -03:00
Jan Leon
15eeaa31c5 chore(duplication): share batch response formatter (#5488) 2026-06-29 21:58:32 -03:00
Jan Leon
e124b50922 chore(duplication): share provider specific validation (#5485) 2026-06-29 21:58:30 -03:00
Jan Leon
e019ed4916 chore(duplication): share recharts donut card (#5484) 2026-06-29 21:58:27 -03:00
Jan Leon
b3747c3a92 chore(duplication): share vscode tokenized request helper (#5479) 2026-06-29 21:58:21 -03:00
Jan Leon
bbd9a776db chore(duplication): share auth zip extractors (#5475) 2026-06-29 21:58:18 -03:00
Jan Leon
09fa9905f2 chore(duplication): share vscode metadata helpers (#5471) 2026-06-29 21:58:16 -03:00
Jan Leon
467736a1b4 chore(dead-code): remove unused prompt cache control helper (#5466) 2026-06-29 21:56:23 -03:00
Jan Leon
a003b1fdc4 chore: remove unused headroom log tail export (#5464) 2026-06-29 21:56:20 -03:00
Jan Leon
749128195a chore: remove unused gamification streak exports (#5463) 2026-06-29 21:56:17 -03:00
Diego Rodrigues de Sa e Souza
73f9580c8e fix(db): EBUSY-safe database import on Windows (#5406) (#5507)
Closes #5406
2026-06-29 21:21:25 -03:00
Diego Rodrigues de Sa e Souza
2a8309ba4a fix(dashboard): render onboarding wizard on /providers/new (#5427) (#5505)
Closes #5427
2026-06-29 21:18:02 -03:00
Diego Rodrigues de Sa e Souza
29bdb8dfde fix(services): runNpm shell on win32 + prefix via env for Node 24 EINVAL (#5379) (#5474)
Node 24 refuses execFile of npm.cmd without a shell (nodejs/node#52554),
so embedded-service install (9Router/CLIProxy) failed with spawn EINVAL on
Windows. runNpm now enables shell on win32 only; to stay Hard-Rule-#13 safe
under a shell, the install --prefix is passed via npm_config_prefix (env)
instead of an argv path (survives spaces), and the user-supplied version is
constrained by SERVICE_VERSION_PATTERN at the route boundary.
2026-06-29 20:45:30 -03:00
Jan Leon
d084b9ce75 chore: remove unused cloud agent input types (#5373)
Integrated into release/v3.8.42
2026-06-29 19:22:33 -03:00
Jan Leon
a7a62638ae chore: remove unused usage types (#5397)
Integrated into release/v3.8.42
2026-06-29 19:20:52 -03:00
Jan Leon
79c39e7dc9 chore: remove unused api key type (#5395)
Integrated into release/v3.8.42
2026-06-29 19:20:02 -03:00
Jan Leon
3c28b936ba chore: remove unused webhook delivery detail export (#5372)
Integrated into release/v3.8.42
2026-06-29 19:15:28 -03:00
Jan Leon
655fccade8 chore: remove unused a2a routing logger readers (#5374)
Integrated into release/v3.8.42
2026-06-29 19:15:25 -03:00
Jan Leon
3578711bc1 chore: remove unused cloud agent result schemas (#5375)
Integrated into release/v3.8.42
2026-06-29 19:15:22 -03:00
Jan Leon
4b82560b20 chore: remove unused v1 search response schema (#5376)
Integrated into release/v3.8.42
2026-06-29 19:15:19 -03:00
Jan Leon
f91eb281f8 chore: remove unused sse model legacy helpers (#5377)
Integrated into release/v3.8.42
2026-06-29 19:15:16 -03:00
Jan Leon
eaff010f96 chore: remove unused sse logger helpers (#5378)
Integrated into release/v3.8.42
2026-06-29 19:15:13 -03:00
Jan Leon
f2d7aa9303 chore: remove unused shared logger default export (#5380)
Integrated into release/v3.8.42
2026-06-29 19:15:10 -03:00
Jan Leon
8e8d08ea15 chore: remove unused agent skills schema types (#5381)
Integrated into release/v3.8.42
2026-06-29 19:15:07 -03:00
Jan Leon
5c66eb9494 chore: remove unused audit action type (#5382)
Integrated into release/v3.8.42
2026-06-29 19:15:04 -03:00
Jan Leon
1970e7bad8 chore: remove unused memory schema types (#5383)
Integrated into release/v3.8.42
2026-06-29 19:15:00 -03:00
Jan Leon
52f2575fac chore: remove unused kiro social schema (#5384)
Integrated into release/v3.8.42
2026-06-29 19:14:57 -03:00
Jan Leon
272fccc55c chore: remove unused memory schema types (#5387)
Integrated into release/v3.8.42
2026-06-29 19:14:48 -03:00
Jan Leon
b52bb6d2c4 chore: remove unused codex auth input type (#5388)
Integrated into release/v3.8.42
2026-06-29 19:14:45 -03:00
Jan Leon
2c8f9c594f chore: remove unused skills schema types (#5389)
Integrated into release/v3.8.42
2026-06-29 19:14:42 -03:00
Jan Leon
589c0a5b81 chore: remove unused batch provider type (#5390)
Integrated into release/v3.8.42
2026-06-29 19:14:39 -03:00
Jan Leon
53ebc39c3e chore: remove unused status hex key type (#5391)
Integrated into release/v3.8.42
2026-06-29 19:14:36 -03:00
Jan Leon
d650117c23 chore: remove unused skillssh skill type (#5392)
Integrated into release/v3.8.42
2026-06-29 19:14:33 -03:00
Jan Leon
44757af4cb chore: remove unused provider types (#5393)
Integrated into release/v3.8.42
2026-06-29 19:14:30 -03:00
Jan Leon
34510fb8d4 chore: remove unused combo types (#5396)
Integrated into release/v3.8.42
2026-06-29 19:14:27 -03:00
Jan Leon
a4c0a95c10 chore: remove unused settings types (#5398)
Integrated into release/v3.8.42
2026-06-29 19:14:25 -03:00
Jan Leon
be97882b58 chore: remove unused notion client type (#5399)
Integrated into release/v3.8.42
2026-06-29 19:14:21 -03:00
Jan Leon
7bd0bc8bca chore: remove unused codegraph exports (#5400)
Integrated into release/v3.8.42
2026-06-29 19:14:18 -03:00
Jan Leon
537b565da2 chore: remove unused playground row type (#5401)
Integrated into release/v3.8.42
2026-06-29 19:14:15 -03:00
Jan Leon
898e8d0fb4 chore: remove unused quota schema types (#5402)
Integrated into release/v3.8.42
2026-06-29 19:14:13 -03:00
Jan Leon
4149dcfcdc chore: remove unused memory schema aliases (#5403)
Integrated into release/v3.8.42
2026-06-29 19:14:10 -03:00
Jan Leon
27a33bea09 chore: remove unused qdrant schema aliases (#5404)
Integrated into release/v3.8.42
2026-06-29 19:13:48 -03:00
Diego Rodrigues de Sa e Souza
78f09c8d9f Release v3.8.41 (#5327)
Release v3.8.41 — 52 commits since v3.8.40 (19 CHANGELOG bullets, 11 contributors).

All gating CI green: Unit×8, Coverage×8, Vitest, Package Artifact, Quality Ratchet, CodeQL, Lint, Docs Sync (Strict), Node 24/26 compat, E2E×9, Integration, Electron smoke.

Advisory checks overridden (main unprotected): PR Test Policy = test-masking heuristic on the cumulative 52-commit assert delta (legitimate dead-code-sweep removals + consolidations, reviewed per-PR); SonarCloud/SonarQube = new-code maintainability/coverage quality gate (CodeQL/Semgrep/Security/npm-audit/Dependabot all clean — not a security finding).
2026-06-29 16:51:03 -03:00
Diego Rodrigues de Sa e Souza
7c23dab64d Release v3.8.40
v3.8.40 cycle integration → main. All test gates green (Unit/Integration/Coverage/Node-compat/Quality-Ratchet). The only red check, 'PR Test Policy', is the test-masking heuristic firing on the cumulative ~57-commit release diff (legitimate assert consolidations already reviewed per-PR — Gemini CLI removal #5246, retired GPT models #5280, provider catalog refreshes); overridden with --admin per the documented release-PR convention. CodeQL/SonarQube advisory scans non-blocking; #5278's code already passed CodeQL on main. Homologated on VPS 192.168.0.15 (v3.8.40 healthy).
2026-06-29 08:40:06 -03:00
Arthur Bodera
1c18be4f8f fix: centralize public origin checks for proxied dashboards (#5278)
Centralizes browser-mutation origin validation into `src/server/origin/publicOrigin.ts` and wires it through the authz pipeline, replacing the per-route same-origin-only check that 403'd dashboard mutations when served behind a reverse proxy on a different public origin. The new module resolves the allowed public origin from configured base-URL env vars or trusted forwarded headers (only when OMNIROUTE_TRUST_PROXY is set AND the peer is loopback/LAN via peer-stamp), validates Sec-Fetch-Site metadata, and sanitizes Host/Forwarded inputs (rejects control chars, userinfo, path/query in Host).

Reviewed sound; validated locally: authz/public-origin + pipeline suites 27/27 green (incl. invalid-origin reject + configured-origin accept), typecheck clean. Maintainer fix-up: moved the new test from tests/unit/server/ (not collected by any runner — orphan-test gate fail) into tests/unit/authz/. Remaining red CI shards are the pre-existing #4076 Dockerfile heap base-red on `main` (unrelated; de-brittled in the v3.8.40 release line).

Co-authored-by: Thinkscape <Thinkscape@users.noreply.github.com>
2026-06-29 01:43:14 -03:00
Diego Rodrigues de Sa e Souza
dc40911583 Release v3.8.39 (#5164)
* chore(release): open v3.8.39 development cycle

* docs(changelog): backfill 5 v3.8.38 bullets merged after release finalize

These PRs squash-merged into release/v3.8.38 between the CHANGELOG finalize
(ff57be32f) and the merge-to-main (ae6e2342d), so they shipped in the v3.8.38
tag but had no bullet:

- feat(compression): Ionizer engine (lossy JSON-array sampling + CCR) (#5148)
- fix(sse): preserve non-stream reasoning fields (#5155, @rdself)
- fix(i18n): add missing English UI labels (#5153, @rdself)
- test(combo): gated live smoke (#5151) + release-expectations refresh (#5150, @KooshaPari)

(#5129 exact-host Anthropic baseUrl is already covered by the #5130 bullet — same CodeQL #674.)
Synced 41 i18n CHANGELOG mirrors.

* feat(compression): TOON best-of-N candidate encoder + encoder A/B table (#5163)

Integrated into release/v3.8.39. TOON best-of-N candidate encoder (GCF default, fail-open). 17/17 unit tests pass on merge result; CI reds were base-stale + Quality Ratchet DRIFT.

* fix(zenmux): normalize vendor-prefixed GLM system roles (#5158)

Integrated into release/v3.8.39. ZenMux vendor-prefixed GLM system-role normalization; 12/12 role-normalizer tests pass on merge result. CI reds base-stale.

* [codex] fix xAI OAuth test and reasoning effort (#5157)

Integrated into release/v3.8.39. xAI reasoning-effort normalization (max/xhigh→high) + OAuth test config; 46/46 xai-translator tests pass on merge result. CI reds base-stale.

* docs(i18n): add Traditional Chinese (zh-TW) README and update zh-CN to latest (#5162)

Integrated into release/v3.8.39. Traditional Chinese (zh-TW) README + zh-CN refresh; docs-only.

* test(security): guard PII redaction stays opt-in (default off) + Hard Rule #20 (#5159)

Integrated into release/v3.8.39. PII opt-in regression guard + Hard Rule #20; rebased to strip base-drift (+81/-1). 5/5 guard tests pass; flip-proof verified.

* test(combo): deterministic context-relay universal-handoff coverage (closes phase-2 TODO) (#5168)

Integrated into release/v3.8.39. Deterministic context-relay universal-handoff coverage (3 tests); 3/3 pass on merge result.

* docs(i18n): full sync zh-TW and zh-CN README with canonical English v3.8.39 (#5171)

Integrated into release/v3.8.39. Full zh-TW docs tree + zh-CN sync with canonical English v3.8.39; docs-only.

* fix(serve): honour HOSTNAME from .env instead of hardcoding 0.0.0.0 (#5134) (#5170)

Integrated into release/v3.8.39. HOSTNAME env override in serve (#5134) + regression test (4/4, TDD flip-proof verified).

* fix(sse): resolve nameless deepseek-web tool blocks via parameter-schema match (#5154) (#5173)

Integrated into release/v3.8.39. Schema-based nameless deepseek-web tool-block resolution (#5154); 6/6 tests pass on merge result (incl. ambiguous/no-match negatives + named-tag no-regression).

* fix(sse): normalize array user content for Command Code to avoid upstream 400 (#5166) (#5174)

Integrated into release/v3.8.39. Normalize array user content for Command Code (#5166, user-array/400 symptom); 4/4 tests pass on merge result.

* fix(sse): defer </think> close so it never leaks before tool_calls (#5123) (#5175)

Integrated into release/v3.8.39. Defer </think> close so it never leaks before tool_calls (#5123); 4/4 tests pass (incl. #4633 no-regression). CHANGELOG synced to keep all 3 v3.8.39 fixes.

* fix(dashboard): use amber for home update-step warning icon (#5176)

Integrated into release/v3.8.39. Amber for home update-step warning icon; 1/1 UI test.

* fix(api): LAN/Tailscale dashboard — host-aware CSP + GET-exempt version route + combo field errors (#5083) (#5177)

Integrated into release/v3.8.39. Host-aware CSP (ReDoS/injection-safe host validation) + GET-exempt /api/system/version (POST/spawn stays LOCAL_ONLY, exact-match safe-methods-only) + COMBO_002 firstField. 44/44 tests + route-guard membership gate green. CHANGELOG synced to keep all 4 v3.8.39 fixes.

* fix(api): replace #5083 global middleware CSP with declarative ws: scheme (#5083)

Follow-up to PR #5177 (merged): that version implemented the LAN-CSP fix (Bug 1)
with a new global `src/middleware.ts` + `src/server/csp.ts`, which contradicts the
project's documented architecture — 'No global Next.js middleware — interception is
route-specific' (CLAUDE.md / AGENTS.md) — and was merged unverified (middleware vs
next.config header precedence was never confirmed in a real build).

This replaces that approach with the minimal, declarative equivalent:
  • next.config.mjs: connect-src now permits the bare `ws:` scheme (symmetric with the
    bare `wss:` already allowed) so the dashboard can reach its own Live WS server from
    a LAN/Tailscale host. No middleware.
  • Removes src/middleware.ts, src/server/csp.ts, and tests/unit/csp-host-aware.test.ts.
  • Adds tests/unit/csp-lan-ws-5083.test.ts (incl. a guard asserting src/middleware.ts
    does NOT exist, so the global-middleware approach cannot silently return).

Bugs 2 (GET-exempt /api/system/version) and 3 (COMBO_002 field surfacing) from #5177
are unaffected and remain in place.

Co-authored-by: KooshaPari <KooshaPari@users.noreply.github.com>

* test(combo): end-to-end quota-share DRR routing-decision coverage (matrix parity) (#5179)

Integrated into release/v3.8.39. Quota-share DRR routing-decision coverage (matrix parity); 2/2 pass on merge result.

* feat(agent-bridge): graceful cert-install fallback with manual guide for containers (#4546) (#5178)

Integrated into release/v3.8.39. Agent-bridge graceful cert-install fallback + manual guide (#4546); 6/6 tests pass on merge result.

* fix(antigravity): family-scoped quota lockout (gemini/claude buckets) (#5180)

Integrated into release/v3.8.39 — family-scoped antigravity quota lockout. Rebased from v3.8.37 + validated (vitest 5/5, typecheck clean, full combo-matrix green, model-lockout 99/0). Same-model cross-account retry (chat.ts) deferred pending live antigravity VPS validation.

* fix(cli): force NODE_ENV to match dev/start run mode in custom Next server (#5189)

Integrated into release/v3.8.39. Force NODE_ENV to match dev/start run mode in custom Next server; 2/2 source-scan+ordering tests pass on merge result.

* feat(compression): CCR ranged/grep/stats retrieval (ReDoS-safe, backward-compat) (#5187)

Integrated into release/v3.8.39. CCR ranged/grep/stats retrieval (safe-regex ReDoS guard + length/match caps); 17/17 tests pass on merge result.

* docs(combo): sync all combo/routing-strategy docs to current state + document test coverage (#5185)

Integrated into release/v3.8.39. Combo/routing-strategy docs sync; docs-only.

* fix(mcp): return 404 (not 400) for unknown Streamable HTTP session id (#5169) (#5191)

* fix(api): respect blocked Auto (Zero-Config) provider in /v1/models catalog (#5192) (#5194)

* test(combo): deterministic context-relay codex quota-handoff coverage (closes last gap) (#5195)

* test(ci): wire antigravity-quota-family under test:vitest (fix test-discovery orphan) (#5196)

* fix(oauth): antigravity login no longer hangs — fire-and-forget onboarding + bounded post-exchange (#5193)

Antigravity OAuth hang fix (no-PKCE/no-openid + bounded post-exchange + exchange-500 fix). Includes #5200 (Koosha) revert + owner rebaseline to keep documented comments. Integrated into release/v3.8.39.

* feat(oauth): remote Antigravity login via local helper + paste-credentials (#5203)

Remote Antigravity login: local helper (omniroute login antigravity) + paste-credentials. Integrated into release/v3.8.39.

* fix(translator): accept Claude Messages shape in non-stream malformed-200 guard (#5156)

Integrated into release/v3.8.39

* fix(cli): default dev bundler to Turbopack (16.2.x panic no longer reproduces) (#5206)

Integrated into release/v3.8.39

* fix(cli): auto-calibrate server V8 heap from physical RAM (#5172) (#5213)

The server was spawned with a fixed --max-old-space-size=512 (omniroute serve)
or no heap flag at all (Electron), so RAM-rich boxes still OOM-crashed under
load (Ineffective mark-compacts near heap limit ~500MB) with many providers/
accounts and large model catalogs. New calibrateHeapFallbackMb(os.totalmem())
defaults the heap to ~35% of RAM clamped [512,4096], wired into serve.mjs and
electron/main.js. Explicit OMNIROUTE_MEMORY_MB still wins (#2939 unchanged).

Also addresses #5160 (same OOM root); #5152 (docker) benefits via the same knob.

Closes #5172

* fix(proxy): coalesce fast-fail health probes (#5208)

Integrated into release/v3.8.39

* fix(proxy): close dispatchers when clearing cache (#5202)

Integrated into release/v3.8.39

* fix(cli): raise dev server Node heap limit to 8GB to prevent OOM (#5198)

Integrated into release/v3.8.39

* fix(auth): allow synthetic no-auth fallback for mimocode (#5205)

Integrated into release/v3.8.39

* fix(oauth): preserve Antigravity refresh_token on empty/omitted upstream response (#3850) (#5214)

Google's OAuth refresh tokens are non-rotating: the refresh response usually
omits refresh_token and occasionally returns it as an empty string. The
Antigravity executor used `typeof tokens.refresh_token === "string" ? ... `
which accepts "" (typeof "" === "string") and overwrote the stored token with
empty, nulling it on first refresh. Now treats non-string OR empty as absent and
preserves credentials.refreshToken, matching refreshGoogleToken semantics.

Closes #3850

* fix(responses): normalize non-array input (#5204)

Integrated into release/v3.8.39

* fix(stream): normalize safety finish reasons via shared helper (#5197)

Integrated into release/v3.8.39

* fix(request-logger): never render negative '(-100%)' compression badge (#5201)

Integrated into release/v3.8.39

* fix(combo): reject empty responses api output (#5207)

Integrated into release/v3.8.39 — combo failover now rejects empty Responses API output (validateQuality). Baseline rebaseline dropped (main-measured drift; maintainer rebaselines at release).

* fix(pwa): prefer cached navigation before offline page (#5209)

Integrated into release/v3.8.39 — PWA service worker prefers cached navigation before offline page (#5165).

* chore(release): v3.8.39 — 2026-06-28

* chore(release): rebaseline openapi+i18n coverage ratchet drift for v3.8.39

---------

Co-authored-by: Arthur Bodera <abodera@gmail.com>
Co-authored-by: Nguyen Minh <lop123thcs@gmail.com>
Co-authored-by: lunkerchen <labanchen@gmail.com>
Co-authored-by: Ankit <177378174+anki1kr@users.noreply.github.com>
Co-authored-by: KooshaPari <KooshaPari@users.noreply.github.com>
Co-authored-by: Ardem2025 <ardemb22@gmail.com>
Co-authored-by: backryun <bakryun0718@proton.me>
Co-authored-by: Anton <39598727+NomenAK@users.noreply.github.com>
Co-authored-by: KooshaPari <42529354+KooshaPari@users.noreply.github.com>
Co-authored-by: Wilson <pedbookmed@gmail.com>
Co-authored-by: Randi <55005611+rdself@users.noreply.github.com>
2026-06-28 06:58:29 -03:00