Skip to content

Release v3.8.34 - #4614

Merged
diegosouzapw merged 49 commits into
mainfrom
release/v3.8.34
Jun 23, 2026
Merged

diegosouzapw merged 49 commits into
mainfrom
release/v3.8.34

Conversation

@diegosouzapw

@diegosouzapw diegosouzapw commented Jun 22, 2026 •

Copy link
Copy Markdown
Collaborator

Release v3.8.34 — release/v3.8.34 → main. Living release notes — finalized at release time.

[3.8.34] — 2026-06-22

✨ New Features

  • feat(executors): Microsoft 365 Copilot pure framing + connection helpers — adds the request/response framing and connection helpers to support m365.cloud.microsoft/chat for individual M365 plans. (#4696 — thanks @skyzea1 / @diegosouzapw)
  • feat(compression): per-request x-omniroute-compression header (Phase 3) — a request header now overrides the compression plan with the highest precedence (request-header > routing > profile > auto-trigger > Default > off), accepting off / default / engine:<id> / <combo>. The response echoes X-OmniRoute-Compression: <mode>; source=<source>. (#4645 — thanks @diegosouzapw)
  • feat(audio): MiniMax T2A v2 TTS dispatch in audioSpeech — adds MiniMax text-to-speech dispatch (port of upstream perf(db): selective column fetching for call logs query #1043). (#4553 — thanks @diegosouzapw)
  • feat(opencode): OpenCode Go DeepSeek reasoning variants — registers the Go DeepSeek reasoning model variants. (#4647 — thanks @DevEstacion)
  • feat(quota): quota scraping for OpenCode Go and Ollama Cloud — surfaces quota windows for the OpenCode Go and Ollama Cloud providers. (#4642 — thanks @JxnLexn)
  • feat(settings): expose stream recovery feature flags — surfaces the stream-recovery toggles in settings. (#4586 — thanks @rdself)
  • feat(providers): optional model ID for custom API-key validation — custom API-key connection tests can now specify the model ID used to validate the key. (#4555 — thanks @diegosouzapw)

🐛 Fixed

  • fix(db): scheduled cleanup actually runs + queries target the real tables (DB-bloat / OOM) — runAutoCleanup was never scheduled, so retention cleanup never executed and tables (compression_analytics, usage_history, …) grew unbounded into multi-GB SQLite files driving high RSS. Worse, several cleanup queries referenced wrong table/column names (call_logs.created_at→timestamp, compression_analytics.created_at→timestamp, mcp_audit_log→mcp_tool_audit, a2a_events→a2a_task_events, memory_entries→memories), so even a manual run silently no-op'd or errored. Fixed the five queries to match the real schema, added cleanupProxyLogs, and wired a startCleanupScheduler (startup + every 6h, VACUUM after deletes) into server-init alongside the existing budget-reset and reasoning-cache jobs. (#4691, extracted from #4428 — thanks @oyi77 / @diegosouzapw)
  • fix(routing): include all noAuth models in auto-combos + add reka-flash + best-free template — noAuth provider models are no longer skipped when building auto-combos, reka-flash is registered, and a best-free combo template is added. (#4621 — thanks @oyi77)
  • fix: noAuth provider validation + Kimi executor routing — corrects noAuth provider membership checks and removes a mis-routed Kimi alias. (closes fix(routing): noAuth provider gaps in auto-combos + missing reka-flash model alias #4620) (#4699 — thanks @oyi77)
  • fix(executors): Firecrawl web_fetch 500 with include_metadata=true — fixes a crash when Firecrawl web_fetch is invoked with metadata extraction enabled. (#4692 — thanks @ponkcore)
  • fix(proxy): apply pipelining:0 + connections cap to the direct dispatcher — same-provider concurrent requests no longer serialize behind a long/streaming request on the direct path. (#4684 — thanks @jeffer1312 / @diegosouzapw)
  • fix(telemetry): back off live-WS event forwarding when the sidecar is unreachable — stops repeatedly attempting to connect to LIVE_WS_PORT when live monitoring is not configured. (#4687 — thanks @FikFikk / @diegosouzapw)
  • fix(api): serve GET /v1/models/{model} as JSON, not the HTML dashboard — the per-model endpoint (IDs with slashes via a catch-all route) now returns JSON, unbreaking Claude Code. (#4677 — thanks @papajo / @diegosouzapw)
  • fix(executors): robust deepseek-web tool-call parsing and agentic context retention — hardens DeepSeek-web tool-call parsing and preserves agentic context across turns. (#4644 — thanks @BugsBag)
  • fix(cli): authenticate omniroute logs and honor the active context — the logs command now authenticates and respects the active context. (#4638 — thanks @Rahulsharma0810)
  • fix(stream): estimate input tokens when upstream reports prompt_tokens=0 — input token usage is estimated when the upstream omits it. (#4615 — thanks @adivekar-utexas)
  • fix(plugin): auto-prefix providerId with opencode- for OpenCode 1.17.8+ native gate — adapts provider IDs to the OpenCode 1.17.8+ native provider gate. (#4527 — thanks @herjarsa)
  • fix(catalog): shorten no-thinking gateway prefix to no-think/ — renames the no-thinking gateway prefix. (#4525 — thanks @Rahulsharma0810)
  • fix(models): unknown max output limits no longer default to 8192 — models without synced/registry/static maxOutputTokens resolve the limit as unknown instead of a generic 8192 cap; clamping/injection only happens when a real cap is known. (#4584 — thanks @rdself)
  • fix(resilience): respect upstream retry-hint toggle — honors the configured toggle for upstream retry hints. (#4585 — thanks @rdself)
  • fix(providers): show revealed connection API keys — fixes revealing stored connection API keys in the UI. (#4583 — thanks @rdself)
  • fix(logs): make active-request stale sweep configurable — exposes the stale-request sweep interval as a setting. (#4599 — thanks @rdself)
  • fix(resilience): retain provider cooldowns for the configured max window — cooldowns persist for the configured maximum window. (#4588 — thanks @KooshaPari)
  • fix(resilience): reject invalid provider cooldown bounds — validates cooldown bound configuration. (#4589 — thanks @KooshaPari)
  • fix(combo): preserve production combo metrics on shadow eviction — shadow eviction no longer drops production combo metrics. (#4590 — thanks @KooshaPari)
  • fix(combo): exclude exhausted connections from auto scoring — exhausted connections are no longer scored as auto-combo candidates. (#4592 — thanks @KooshaPari)
  • fix(relay): apply IP rate limit to the Bifrost sidecar — extends IP rate limiting to the Bifrost relay sidecar. (#4593 — thanks @KooshaPari)
  • fix(bifrost): finalize SSE relay usage after stream — finalizes relay usage accounting once the SSE stream completes. (#4612 — thanks @KooshaPari)
  • fix(quota): expose Bailian quota windows — surfaces Bailian provider quota windows. (#4610 — thanks @KooshaPari)
  • fix(dashboard): gate home topology live-WS networking behind widget visibility — the home dashboard no longer starts topology polling / live sockets when topology is hidden. (#4618, #4606 — thanks @KooshaPari)
  • fix(dashboard): isolate the quota widget refresh clock — the quota widget refresh no longer drives unrelated re-renders. (#4611 — thanks @KooshaPari)
  • fix(dashboard): memoize compatible provider groups — avoids recomputing compatible provider groups on every render. (#4613 — thanks @KooshaPari)
  • fix(cli): align omniroute data dir and env loading with the runtime — the CLI's data-dir/env loading no longer drifts from the server runtime configuration. (#4619, #4607 — thanks @KooshaPari)
  • fix(api/settings): prevent cached /api/settings responses — disables caching on the settings endpoint (port from 9router#951). (#4566 — thanks @diegosouzapw)
  • fix(executors): strip temperature for the GitHub Copilot gpt-5.4 family — removes the unsupported temperature param for Copilot gpt-5.4 models (port from 9router#612). (#4564 — thanks @diegosouzapw)
  • fix(dashboard): keep play_arrow spinning on provider "Test All" buttons — fixes the spinner state on the provider test buttons (port from 9router#715). (#4563 — thanks @diegosouzapw)
  • fix(dashboard): surface manual config CTA when Open Claw CLI auto-detect fails — shows a manual-config call-to-action on the Open Claw CLI card when auto-detection fails. (#4562 — thanks @diegosouzapw)
  • fix(oauth): update Qwen OAuth URLs from chat.qwen.ai to qwen.ai — refreshes the Qwen OAuth endpoints (port of fix: update Qwen OAuth URLs from chat.qwen.ai to qwen.ai (closes #572) decolua/9router#683). (#4561 — thanks @diegosouzapw)

📝 Maintenance

  • refactor(imageGeneration): extract 8 provider families to co-located files — splits the image-generation module into eight co-located per-provider files with no behavioral change. (#4609 — thanks @KooshaPari)
  • deps: bump production + development groups; migrate js-yaml to v5 (ESM) — dependency bumps plus a js-yaml v4→v5 migration to the ESM-only namespace import. (#4697 — thanks @diegosouzapw)
  • chore(quality): release-green pre-flight validator + nightly signal — new npm run check:release-green (scripts/quality/validate-release-green.mjs) reproduces the release-equivalent validation (full unit + vitest + ratchets + typecheck + lint, optional --with-build package-artifact) against the current working tree and classifies each red as HARD (real defect) vs DRIFT (ratchet, rebaselined at release) — purely diagnostic, never blocking contributors. A new nightly-release-green workflow runs it on the active release branch and opens/updates a tracking issue on hard failures. Closes the gap where the full gate (ci.yml) only ran on the release PR, so reds accrued silently on release/** and surfaced in layers at release time. (#4622 — thanks @diegosouzapw)
  • chore(quality): reconcile file-size baseline for fix(executors): robust deepseek-web tool-call parsing and agentic context retention #4644 (deepseek-web.ts 1117→1125) — rebaselines the file-size gate after the deepseek-web hardening. (#4695 — thanks @diegosouzapw)

🙌 Contributors

Thanks to everyone whose work landed in v3.8.34:

Contributor Highlights
@KooshaPari dashboard perf + resilience cooldowns + bifrost relay + image-gen refactor (#4583/#4588-4593/#4606/#4609-4613/#4618/#4619)
@rdself stream-recovery flags, output-cap handling, retry-hint toggle, stale-sweep config (#4583-4586/#4599)
@oyi77 DB cleanup/OOM fix + noAuth auto-combos + reka-flash (#4428/#4621/#4699)
@DevEstacion OpenCode Go DeepSeek reasoning variants (#4647)
@Rahulsharma0810 no-think gateway prefix + authenticated omniroute logs (#4525/#4638)
@JxnLexn OpenCode Go + Ollama Cloud quota scraping (#4642)
@BugsBag deepseek-web tool-call parsing + context retention (#4644)
@herjarsa OpenCode 1.17.8+ providerId prefix (#4527)
@adivekar-utexas input-token estimation when prompt_tokens=0 (#4615)
@ponkcore Firecrawl web_fetch metadata 500 fix (#4692)
@skyzea1 M365 Copilot support request (#4042 → #4696)
@jeffer1312 direct-dispatcher serialization report (#4580 → #4684)
@FikFikk live-WS connect-when-disabled report (#4604 → #4687)
@papajo /v1/models/{model} HTML-not-JSON report (#4674 → #4677)
@diegosouzapw maintainer — ports, compression Phase 3, M365, release tooling

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request bumps the project version from 3.8.33 to 3.8.34 across various configuration files, package manifests (including package.json and package-lock.json files in the root, electron, and open-sse directories), the OpenAPI specification, and localized changelogs. I have no feedback to provide as there are no review comments and the changes are standard version bumps.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

@github-actions

github-actions Bot commented Jun 22, 2026 •

Copy link
Copy Markdown
Contributor

CI Coverage Report

  • Coverage job: success
  • PR test policy: success

Coverage artifact was not available for this run.

…C+D) (#4622)

C — scripts/quality/validate-release-green.mjs (npm run check:release-green):
reproduces the release-equivalent validation (typecheck, eslint, db-rules,
public-creds, full unit, vitest, ratchets, optional --with-build package-artifact)
against the current working tree and classifies each red as HARD (real defect,
exit 1) vs DRIFT (ratchet — reported, never affects exit / never blocks). Pure
helpers exported + orchestration behind a direct-run guard; unit-tested.

D — .github/workflows/nightly-release-green.yml: runs C on the active release
branch nightly (and on workflow_dispatch) and opens/updates a single tracking
issue on HARD failures. Never a required check, never touches a contributor PR.

Closes the gap where the full gate (ci.yml) only ran on the release PR, so reds
accrued silently on release/** and surfaced in 40-min layers at release time.
Non-blocking by construction; drift is the maintainer's to rebaseline at release.

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
rdself and others added 23 commits June 22, 2026 17:04
…ative gate (#4527)

Integrated into release/v3.8.34 (supersedes #4445)
…4564)

Integrated into release/v3.8.34 (rebuilt onto tip)
Integrated into release/v3.8.34 (rebuilt onto tip)
…9router#951) (#4566)

Integrated into release/v3.8.34 (rebuilt onto tip)
…4553)

Integrated into release/v3.8.34 (rebuilt onto tip)
…ect fails (#4562)

Integrated into release/v3.8.34 (rebuilt onto tip)
Integrated into release/v3.8.34 (rebuilt onto tip)
Integrated into release/v3.8.34 (rebuilt onto tip)
Integrated into release/v3.8.34 (rebuilt onto tip)
Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)
Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)
Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)
…s=0 (#4615)

Integrated into release/v3.8.34 (rebuilt onto tip)
Integrated into release/v3.8.34 (rebuilt — kept only the prefix rename, dropped stale-base reverts)
Integrated into release/v3.8.34 (rebuilt onto tip; merge before #4612)
Integrated into release/v3.8.34 (rebuilt + reconciled with #4593)
…e 3) (#4645)

* docs(compression): Phase 3 per-request header design spec

Approved brainstorming output for the x-omniroute-compression header:
header-first precedence, name-first combo matching (Decision A), explicit
value bypasses auto-trigger (Decision B), DerivedPlan.source, and the
X-OmniRoute-Compression response header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): Phase 3 per-request header implementation plan

4-task TDD plan (resolver header-first + source, parser, chatCore wiring +
response header, docs/file-size) with full code and exact commands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): header-first resolver + plan source (Phase 3 core)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): resolveCompressionHeader parser (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): wire x-omniroute-compression header + response header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(compression): extract plan-resolution leaf (planResolution.ts) under size cap (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): document x-omniroute-compression header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(compression): harden named-combo map + trim engine: header id (Phase 3 review)

Addresses gemini-code-assist review on #4645:
- Extract buildNamedComboLookup (pure) so a blank/whitespace/null combo name
  contributes only its id key (no '' key, no throw that disables all combos).
- Trim the engine:<id> header value so 'engine: rtk' resolves.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
Integrated into release/v3.8.34 (rebuilt + opt-in gate fix)
diegosouzapw and others added 16 commits June 22, 2026 17:38
…#4563)

Integrated into release/v3.8.34 (rebuilt onto tip; UI-cosmetic per owner)
…(extracted from #4428) (#4691)

Integrated into release/v3.8.34 (cleanup core extracted from #4428, credit @oyi77)
… unreachable (#4604) (#4687)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
#4674) (#4677)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
…text retention (#4644)

Integrated into release/v3.8.34
Integrated into release/v3.8.34 (authored by Rahul Sharma, AI co-author trailer stripped per project policy)
…cher (#4580) (#4684)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
…sh + best-free template (#4621)

Integrated into release/v3.8.34 (dead getFirstRegistryModelId dropped, rebuilt onto tip)
Integrated into release/v3.8.34 (adapted onto #4606's extracted topology section: default-hidden flip + enabled gate on useLiveDashboard)
) (#4619)

Integrated into release/v3.8.34 (data-dir.mjs refactor reconciled with #4607; loadEnvFile aligned to getDefaultDataDir)
Integrated into release/v3.8.34 (Ollama Cloud + OpenCode Go dashboard quota scraping; rebuilt onto tip, gates green: typecheck/public-creds/file-size/lint/docs-sync + 31 tests)
…#4697)

Incorporates Dependabot #4667 + #4668 + js-yaml v5 ESM migration into release/v3.8.34
Comment thread open-sse/services/opencodeOllamaUsage.ts Fixed
oyi77 and others added 4 commits June 22, 2026 19:51
Integrated into release/v3.8.34 (noAuth in NOAUTH_PROVIDERS dynamic check + remove misrouted kimi web alias; 9 tests)
…files (#4609)

Integrated into release/v3.8.34 (extraction completed: added missing imports/exports per module, main imports handlers locally; 145 image-gen tests pass, typecheck/cycles/file-size green)
…elease-green reds

- Finalize CHANGELOG [3.8.34] (43 bullets, full contributor attribution) + seed i18n mirrors
- Rebaseline inherited cycle drift surfaced by release-green pre-flight: eslint warnings
  3900->3907, cognitive-complexity 797->801 (release-finalize touches no prod code; all
  drift is from this cycle's contributor merges)
- fix(providers): keep reka-flash-3 as the Reka provider default. #4621 inserted reka-flash
  at the head of the model list, silently changing the default from reka-flash-3 (the
  free-tier model) to reka-flash; reorder so reka-flash-3 stays default, reka-flash retained.
- test: align provider-models-config / provider-models-route / web-cookie-providers-new with
  #4621 (reka-flash now in the Reka catalog) and #4699 (the `kimi` API-key provider correctly
  falls through to DefaultExecutor instead of KimiWebExecutor)
- chore(quality): allowlist the COMPRESSION_GUIDE doc name in check-fabricated-docs
  (false-positive env-var match; docs/compression/COMPRESSION_GUIDE.md exists)
Surfaced only on the release PR (these gates don't run on PR->release fast-gates):

- fix(quota): complete HTML-comment sanitization in opencodeOllamaUsage SSR reset-time
  parsing — strip any <!--...--> generically instead of the two literal React hydration
  markers, so no partial "<!--" can survive (CodeQL js/incomplete-multi-character-
  sanitization, HIGH, introduced by #4642). Regression test added.
- test(codex): correct the Codex-fingerprint body key order assertion to match the
  canonical bodyFieldOrder (prompt_cache_key precedes include); #4584 flipped the two
  and integration tests don't run on fast-gates so it never executed until the release PR.
- chore(quality): rebaseline inherited cycle drift surfaced by full CI —
  zizmorFindings 152->155 (+3 unpinned-uses in nightly-release-green.yml from #4622,
  same @vn convention as ci.yml) and openapiCoverage.pct 38.4->37.8 (-0.6, contributor
  routes added faster than openapi docs). Release-finalize touches no prod routes.
Comment thread open-sse/services/opencodeOllamaUsage.ts Fixed
…ity drift

- fix(quota): handle unterminated HTML comments in opencodeOllamaUsage SSR reset-time
  parsing — the `(?:-->|$)` arm consumes a trailing "<!--" with no closing "-->", so no
  partial "<!--" can survive (CodeQL js/incomplete-multi-character-sanitization persisted
  with the plain <!--...--> form because an unclosed comment could still leave "<!--").
- chore(quality): rebaseline cyclomatic complexity 1915->1916 (+1) — inherited v3.8.34
  cycle drift (contributor feature branches); check:complexity does not run on PR->release
  fast-gates so it surfaced only on the release PR. Release-finalize adds 0 complexity
  (measured 1916 with/without the regex tweak). dead-code/cognitive/type-coverage/
  compression-budget/codeql ratchets all pass.
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
0.0% Coverage on New Code (required ≥ 80%)
7.8% Duplication on New Code (required ≤ 3%)
D Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@diegosouzapw
diegosouzapw merged commit 19d91d8 into main Jun 23, 2026
13 of 14 checks passed
diegosouzapw pushed a commit that referenced this pull request Jun 24, 2026
…onarQube

O job SonarQube baixa o artifact 'coverage-report' e o sonar-project.properties
aponta sonar.javascript.lcov.reportPaths=coverage/lcov.info, mas o upload do artifact
so incluia coverage-summary.json + coverage-report.md (nao o lcov.info). Resultado:
'No LCOV files were found using coverage/lcov.info' -> 0% cobertura -> QUALITY GATE
FAILED na release PR #4614. O test:coverage ja gera o lcov (--reporter=lcov); este fix
apenas o inclui no path do artifact. Aditivo: os outros consumidores do artifact
ignoram o arquivo extra.
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
* chore(release): open v3.8.34 development cycle

* chore(quality): release-green pre-flight validator + nightly signal (C+D) (cheaper-inference#4622)

C — scripts/quality/validate-release-green.mjs (npm run check:release-green):
reproduces the release-equivalent validation (typecheck, eslint, db-rules,
public-creds, full unit, vitest, ratchets, optional --with-build package-artifact)
against the current working tree and classifies each red as HARD (real defect,
exit 1) vs DRIFT (ratchet — reported, never affects exit / never blocks). Pure
helpers exported + orchestration behind a direct-run guard; unit-tested.

D — .github/workflows/nightly-release-green.yml: runs C on the active release
branch nightly (and on workflow_dispatch) and opens/updates a single tracking
issue on HARD failures. Never a required check, never touches a contributor PR.

Closes the gap where the full gate (ci.yml) only ran on the release PR, so reds
accrued silently on release/** and surfaced in 40-min layers at release time.
Non-blocking by construction; drift is the maintainer's to rebaseline at release.

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>

* fix(providers): show revealed connection API keys (cheaper-inference#4583)

Integrated into release/v3.8.34

* fix(resilience): respect upstream retry hint toggle (cheaper-inference#4585)

Integrated into release/v3.8.34

* feat(settings): expose stream recovery feature flags (cheaper-inference#4586)

Integrated into release/v3.8.34

* fix(logs): make active request stale sweep configurable (cheaper-inference#4599)

Integrated into release/v3.8.34

* fix(plugin): auto-prefix providerId with 'opencode-' for OC 1.17.8+ native gate (cheaper-inference#4527)

Integrated into release/v3.8.34 (supersedes cheaper-inference#4445)

* fix(models): treat unknown output caps as unset (cheaper-inference#4584)

Integrated into release/v3.8.34

* fix(executors): strip temperature for GitHub Copilot gpt-5.4 family (cheaper-inference#4564)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(oauth): update Qwen OAuth URLs from chat.qwen.ai to qwen.ai (cheaper-inference#4561)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(api/settings): prevent cached /api/settings responses (port from 9router#951) (cheaper-inference#4566)

Integrated into release/v3.8.34 (rebuilt onto tip)

* feat(audio): MiniMax T2A v2 TTS dispatch in audioSpeech (port cheaper-inference#1043) (cheaper-inference#4553)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(dashboard): surface manual config CTA when Open Claw CLI auto-detect fails (cheaper-inference#4562)

Integrated into release/v3.8.34 (rebuilt onto tip)

* feat(providers): optional model ID for custom API-key validation (cheaper-inference#4555)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(cli): align data dir and env loading with runtime (cheaper-inference#4607)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(quota): expose Bailian quota windows (cheaper-inference#4610)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix: retain provider cooldowns for configured max window (cheaper-inference#4588)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix: reject invalid provider cooldown bounds (cheaper-inference#4589)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix: preserve production combo metrics on shadow eviction (cheaper-inference#4590)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix(stream): estimate input tokens when upstream reports prompt_tokens=0 (cheaper-inference#4615)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(catalog): shorten no-thinking gateway prefix to no-think/ (cheaper-inference#4525)

Integrated into release/v3.8.34 (rebuilt — kept only the prefix rename, dropped stale-base reverts)

* fix(relay): apply IP rate limit to bifrost sidecar (cheaper-inference#4593)

Integrated into release/v3.8.34 (rebuilt onto tip; merge before cheaper-inference#4612)

* fix(bifrost): finalize SSE relay usage after stream (cheaper-inference#4612)

Integrated into release/v3.8.34 (rebuilt + reconciled with cheaper-inference#4593)

* feat(compression): per-request `x-omniroute-compression` header (Phase 3) (cheaper-inference#4645)

* docs(compression): Phase 3 per-request header design spec

Approved brainstorming output for the x-omniroute-compression header:
header-first precedence, name-first combo matching (Decision A), explicit
value bypasses auto-trigger (Decision B), DerivedPlan.source, and the
X-OmniRoute-Compression response header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): Phase 3 per-request header implementation plan

4-task TDD plan (resolver header-first + source, parser, chatCore wiring +
response header, docs/file-size) with full code and exact commands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): header-first resolver + plan source (Phase 3 core)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): resolveCompressionHeader parser (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): wire x-omniroute-compression header + response header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(compression): extract plan-resolution leaf (planResolution.ts) under size cap (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): document x-omniroute-compression header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(compression): harden named-combo map + trim engine: header id (Phase 3 review)

Addresses gemini-code-assist review on cheaper-inference#4645:
- Extract buildNamedComboLookup (pure) so a blank/whitespace/null combo name
  contributes only its id key (no '' key, no throw that disables all combos).
- Trim the engine:<id> header value so 'engine: rtk' resolves.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix: exclude exhausted connections from auto scoring (cheaper-inference#4592)

Integrated into release/v3.8.34 (rebuilt + opt-in gate fix)

* fix(dashboard): memoize compatible provider groups (cheaper-inference#4613)

Integrated into release/v3.8.34 (rebuilt + test added)

* fix(dashboard): isolate quota widget refresh clock (cheaper-inference#4611)

Integrated into release/v3.8.34 (rebuilt + jsdom test)

* fix(dashboard): gate topology side effects behind widget visibility (cheaper-inference#4606)

Integrated into release/v3.8.34 (rebuilt + jsdom test)

* fix(dashboard): keep play_arrow spinning on provider Test All buttons (cheaper-inference#4563)

Integrated into release/v3.8.34 (rebuilt onto tip; UI-cosmetic per owner)

* fix(db): schedule retention cleanup + fix cleanup table/column names (extracted from cheaper-inference#4428) (cheaper-inference#4691)

Integrated into release/v3.8.34 (cleanup core extracted from cheaper-inference#4428, credit @oyi77)

* fix(telemetry): back off live-WS event forwarding when the sidecar is unreachable (cheaper-inference#4604) (cheaper-inference#4687)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix(api): serve GET /v1/models/{model} as JSON, not the HTML dashboard (cheaper-inference#4674) (cheaper-inference#4677)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* feat(opencode): add go deepseek reasoning variants (cheaper-inference#4647)

Integrated into release/v3.8.34

* fix(executors): robust deepseek-web tool-call parsing and agentic context retention (cheaper-inference#4644)

Integrated into release/v3.8.34

* fix(cli): authenticate `omniroute logs` and honor active context (cheaper-inference#4638)

Integrated into release/v3.8.34 (authored by Rahul Sharma, AI co-author trailer stripped per project policy)

* fix(proxy): apply pipelining:0 + connections cap to the direct dispatcher (cheaper-inference#4580) (cheaper-inference#4684)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix(executors): Firecrawl web_fetch 500 with include_metadata=true (cheaper-inference#4692)

Integrated into release/v3.8.34

* fix(routing): include all noAuth models in auto-combos + add reka-flash + best-free template (cheaper-inference#4621)

Integrated into release/v3.8.34 (dead getFirstRegistryModelId dropped, rebuilt onto tip)

* fix(dashboard): gate home topology live-WS networking (cheaper-inference#4596) (cheaper-inference#4618)

Integrated into release/v3.8.34 (adapted onto cheaper-inference#4606's extracted topology section: default-hidden flip + enabled gate on useLiveDashboard)

* fix(cli): align `omniroute` env loading with the runtime data dir (cheaper-inference#4597) (cheaper-inference#4619)

Integrated into release/v3.8.34 (data-dir.mjs refactor reconciled with cheaper-inference#4607; loadEnvFile aligned to getDefaultDataDir)

* chore(quality): reconcile file-size baseline for cheaper-inference#4644 (deepseek-web.ts 1117->1125) (cheaper-inference#4695)

file-size reconcile for cheaper-inference#4644

* Support quota scraping for OpenCode Go and Ollama Cloud (cheaper-inference#4642)

Integrated into release/v3.8.34 (Ollama Cloud + OpenCode Go dashboard quota scraping; rebuilt onto tip, gates green: typecheck/public-creds/file-size/lint/docs-sync + 31 tests)

* feat(executors): land M365 Copilot pure framing + connection helpers (cheaper-inference#4042) (cheaper-inference#4696)

Land M365 pure modules ahead of draft cheaper-inference#4400

* deps: bump production + development groups; migrate js-yaml to v5 ESM (cheaper-inference#4697)

Incorporates Dependabot cheaper-inference#4667 + cheaper-inference#4668 + js-yaml v5 ESM migration into release/v3.8.34

* fix: noAuth provider validation + kimi executor routing (cheaper-inference#4699)

Integrated into release/v3.8.34 (noAuth in NOAUTH_PROVIDERS dynamic check + remove misrouted kimi web alias; 9 tests)

* refactor(imageGeneration): extract 8 provider families to co-located files (cheaper-inference#4609)

Integrated into release/v3.8.34 (extraction completed: added missing imports/exports per module, main imports handlers locally; 145 image-gen tests pass, typecheck/cycles/file-size green)

* chore(release): v3.8.34 — finalize changelog, rebaseline drift, fix release-green reds

- Finalize CHANGELOG [3.8.34] (43 bullets, full contributor attribution) + seed i18n mirrors
- Rebaseline inherited cycle drift surfaced by release-green pre-flight: eslint warnings
  3900->3907, cognitive-complexity 797->801 (release-finalize touches no prod code; all
  drift is from this cycle's contributor merges)
- fix(providers): keep reka-flash-3 as the Reka provider default. cheaper-inference#4621 inserted reka-flash
  at the head of the model list, silently changing the default from reka-flash-3 (the
  free-tier model) to reka-flash; reorder so reka-flash-3 stays default, reka-flash retained.
- test: align provider-models-config / provider-models-route / web-cookie-providers-new with
  cheaper-inference#4621 (reka-flash now in the Reka catalog) and cheaper-inference#4699 (the `kimi` API-key provider correctly
  falls through to DefaultExecutor instead of KimiWebExecutor)
- chore(quality): allowlist the COMPRESSION_GUIDE doc name in check-fabricated-docs
  (false-positive env-var match; docs/compression/COMPRESSION_GUIDE.md exists)

* fix(release-green): resolve release-PR full-CI reds for v3.8.34

Surfaced only on the release PR (these gates don't run on PR->release fast-gates):

- fix(quota): complete HTML-comment sanitization in opencodeOllamaUsage SSR reset-time
  parsing — strip any <!--...--> generically instead of the two literal React hydration
  markers, so no partial "<!--" can survive (CodeQL js/incomplete-multi-character-
  sanitization, HIGH, introduced by cheaper-inference#4642). Regression test added.
- test(codex): correct the Codex-fingerprint body key order assertion to match the
  canonical bodyFieldOrder (prompt_cache_key precedes include); cheaper-inference#4584 flipped the two
  and integration tests don't run on fast-gates so it never executed until the release PR.
- chore(quality): rebaseline inherited cycle drift surfaced by full CI —
  zizmorFindings 152->155 (+3 unpinned-uses in nightly-release-green.yml from cheaper-inference#4622,
  same @vn convention as ci.yml) and openapiCoverage.pct 38.4->37.8 (-0.6, contributor
  routes added faster than openapi docs). Release-finalize touches no prod routes.

* fix(release-green): complete CodeQL sanitization + rebaseline complexity drift

- fix(quota): handle unterminated HTML comments in opencodeOllamaUsage SSR reset-time
  parsing — the `(?:-->|$)` arm consumes a trailing "<!--" with no closing "-->", so no
  partial "<!--" can survive (CodeQL js/incomplete-multi-character-sanitization persisted
  with the plain <!--...--> form because an unclosed comment could still leave "<!--").
- chore(quality): rebaseline cyclomatic complexity 1915->1916 (+1) — inherited v3.8.34
  cycle drift (contributor feature branches); check:complexity does not run on PR->release
  fast-gates so it surfaced only on the release PR. Release-finalize adds 0 complexity
  (measured 1916 with/without the regex tweak). dead-code/cognitive/type-coverage/
  compression-budget/codeql ratchets all pass.

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
Co-authored-by: Randi <55005611+rdself@users.noreply.github.com>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: KooshaPari <42529354+KooshaPari@users.noreply.github.com>
Co-authored-by: Abhishek Divekar <adivekar@utexas.edu>
Co-authored-by: Rahul sharma <sharmaR0810@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
Co-authored-by: Ronald Estacion <DevEstacion@users.noreply.github.com>
Co-authored-by: Igor <60442260+BugsBag@users.noreply.github.com>
Co-authored-by: Oonishi <275808243+ponkcore@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Jan Leon <Jan.gaschler@gmail.com>
Poid-ZA pushed a commit to Poid-ZA/OmniRoute that referenced this pull request Aug 5, 2026
* chore(release): open v3.8.34 development cycle

* chore(quality): release-green pre-flight validator + nightly signal (C+D) (cheaper-inference#4622)

C — scripts/quality/validate-release-green.mjs (npm run check:release-green):
reproduces the release-equivalent validation (typecheck, eslint, db-rules,
public-creds, full unit, vitest, ratchets, optional --with-build package-artifact)
against the current working tree and classifies each red as HARD (real defect,
exit 1) vs DRIFT (ratchet — reported, never affects exit / never blocks). Pure
helpers exported + orchestration behind a direct-run guard; unit-tested.

D — .github/workflows/nightly-release-green.yml: runs C on the active release
branch nightly (and on workflow_dispatch) and opens/updates a single tracking
issue on HARD failures. Never a required check, never touches a contributor PR.

Closes the gap where the full gate (ci.yml) only ran on the release PR, so reds
accrued silently on release/** and surfaced in 40-min layers at release time.
Non-blocking by construction; drift is the maintainer's to rebaseline at release.

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>

* fix(providers): show revealed connection API keys (cheaper-inference#4583)

Integrated into release/v3.8.34

* fix(resilience): respect upstream retry hint toggle (cheaper-inference#4585)

Integrated into release/v3.8.34

* feat(settings): expose stream recovery feature flags (cheaper-inference#4586)

Integrated into release/v3.8.34

* fix(logs): make active request stale sweep configurable (cheaper-inference#4599)

Integrated into release/v3.8.34

* fix(plugin): auto-prefix providerId with 'opencode-' for OC 1.17.8+ native gate (cheaper-inference#4527)

Integrated into release/v3.8.34 (supersedes cheaper-inference#4445)

* fix(models): treat unknown output caps as unset (cheaper-inference#4584)

Integrated into release/v3.8.34

* fix(executors): strip temperature for GitHub Copilot gpt-5.4 family (cheaper-inference#4564)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(oauth): update Qwen OAuth URLs from chat.qwen.ai to qwen.ai (cheaper-inference#4561)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(api/settings): prevent cached /api/settings responses (port from 9router#951) (cheaper-inference#4566)

Integrated into release/v3.8.34 (rebuilt onto tip)

* feat(audio): MiniMax T2A v2 TTS dispatch in audioSpeech (port cheaper-inference#1043) (cheaper-inference#4553)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(dashboard): surface manual config CTA when Open Claw CLI auto-detect fails (cheaper-inference#4562)

Integrated into release/v3.8.34 (rebuilt onto tip)

* feat(providers): optional model ID for custom API-key validation (cheaper-inference#4555)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(cli): align data dir and env loading with runtime (cheaper-inference#4607)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(quota): expose Bailian quota windows (cheaper-inference#4610)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix: retain provider cooldowns for configured max window (cheaper-inference#4588)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix: reject invalid provider cooldown bounds (cheaper-inference#4589)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix: preserve production combo metrics on shadow eviction (cheaper-inference#4590)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix(stream): estimate input tokens when upstream reports prompt_tokens=0 (cheaper-inference#4615)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(catalog): shorten no-thinking gateway prefix to no-think/ (cheaper-inference#4525)

Integrated into release/v3.8.34 (rebuilt — kept only the prefix rename, dropped stale-base reverts)

* fix(relay): apply IP rate limit to bifrost sidecar (cheaper-inference#4593)

Integrated into release/v3.8.34 (rebuilt onto tip; merge before cheaper-inference#4612)

* fix(bifrost): finalize SSE relay usage after stream (cheaper-inference#4612)

Integrated into release/v3.8.34 (rebuilt + reconciled with cheaper-inference#4593)

* feat(compression): per-request `x-omniroute-compression` header (Phase 3) (cheaper-inference#4645)

* docs(compression): Phase 3 per-request header design spec

Approved brainstorming output for the x-omniroute-compression header:
header-first precedence, name-first combo matching (Decision A), explicit
value bypasses auto-trigger (Decision B), DerivedPlan.source, and the
X-OmniRoute-Compression response header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): Phase 3 per-request header implementation plan

4-task TDD plan (resolver header-first + source, parser, chatCore wiring +
response header, docs/file-size) with full code and exact commands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): header-first resolver + plan source (Phase 3 core)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): resolveCompressionHeader parser (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): wire x-omniroute-compression header + response header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(compression): extract plan-resolution leaf (planResolution.ts) under size cap (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): document x-omniroute-compression header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(compression): harden named-combo map + trim engine: header id (Phase 3 review)

Addresses gemini-code-assist review on cheaper-inference#4645:
- Extract buildNamedComboLookup (pure) so a blank/whitespace/null combo name
  contributes only its id key (no '' key, no throw that disables all combos).
- Trim the engine:<id> header value so 'engine: rtk' resolves.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix: exclude exhausted connections from auto scoring (cheaper-inference#4592)

Integrated into release/v3.8.34 (rebuilt + opt-in gate fix)

* fix(dashboard): memoize compatible provider groups (cheaper-inference#4613)

Integrated into release/v3.8.34 (rebuilt + test added)

* fix(dashboard): isolate quota widget refresh clock (cheaper-inference#4611)

Integrated into release/v3.8.34 (rebuilt + jsdom test)

* fix(dashboard): gate topology side effects behind widget visibility (cheaper-inference#4606)

Integrated into release/v3.8.34 (rebuilt + jsdom test)

* fix(dashboard): keep play_arrow spinning on provider Test All buttons (cheaper-inference#4563)

Integrated into release/v3.8.34 (rebuilt onto tip; UI-cosmetic per owner)

* fix(db): schedule retention cleanup + fix cleanup table/column names (extracted from cheaper-inference#4428) (cheaper-inference#4691)

Integrated into release/v3.8.34 (cleanup core extracted from cheaper-inference#4428, credit @oyi77)

* fix(telemetry): back off live-WS event forwarding when the sidecar is unreachable (cheaper-inference#4604) (cheaper-inference#4687)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix(api): serve GET /v1/models/{model} as JSON, not the HTML dashboard (cheaper-inference#4674) (cheaper-inference#4677)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* feat(opencode): add go deepseek reasoning variants (cheaper-inference#4647)

Integrated into release/v3.8.34

* fix(executors): robust deepseek-web tool-call parsing and agentic context retention (cheaper-inference#4644)

Integrated into release/v3.8.34

* fix(cli): authenticate `omniroute logs` and honor active context (cheaper-inference#4638)

Integrated into release/v3.8.34 (authored by Rahul Sharma, AI co-author trailer stripped per project policy)

* fix(proxy): apply pipelining:0 + connections cap to the direct dispatcher (cheaper-inference#4580) (cheaper-inference#4684)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix(executors): Firecrawl web_fetch 500 with include_metadata=true (cheaper-inference#4692)

Integrated into release/v3.8.34

* fix(routing): include all noAuth models in auto-combos + add reka-flash + best-free template (cheaper-inference#4621)

Integrated into release/v3.8.34 (dead getFirstRegistryModelId dropped, rebuilt onto tip)

* fix(dashboard): gate home topology live-WS networking (cheaper-inference#4596) (cheaper-inference#4618)

Integrated into release/v3.8.34 (adapted onto cheaper-inference#4606's extracted topology section: default-hidden flip + enabled gate on useLiveDashboard)

* fix(cli): align `omniroute` env loading with the runtime data dir (cheaper-inference#4597) (cheaper-inference#4619)

Integrated into release/v3.8.34 (data-dir.mjs refactor reconciled with cheaper-inference#4607; loadEnvFile aligned to getDefaultDataDir)

* chore(quality): reconcile file-size baseline for cheaper-inference#4644 (deepseek-web.ts 1117->1125) (cheaper-inference#4695)

file-size reconcile for cheaper-inference#4644

* Support quota scraping for OpenCode Go and Ollama Cloud (cheaper-inference#4642)

Integrated into release/v3.8.34 (Ollama Cloud + OpenCode Go dashboard quota scraping; rebuilt onto tip, gates green: typecheck/public-creds/file-size/lint/docs-sync + 31 tests)

* feat(executors): land M365 Copilot pure framing + connection helpers (cheaper-inference#4042) (cheaper-inference#4696)

Land M365 pure modules ahead of draft cheaper-inference#4400

* deps: bump production + development groups; migrate js-yaml to v5 ESM (cheaper-inference#4697)

Incorporates Dependabot cheaper-inference#4667 + cheaper-inference#4668 + js-yaml v5 ESM migration into release/v3.8.34

* fix: noAuth provider validation + kimi executor routing (cheaper-inference#4699)

Integrated into release/v3.8.34 (noAuth in NOAUTH_PROVIDERS dynamic check + remove misrouted kimi web alias; 9 tests)

* refactor(imageGeneration): extract 8 provider families to co-located files (cheaper-inference#4609)

Integrated into release/v3.8.34 (extraction completed: added missing imports/exports per module, main imports handlers locally; 145 image-gen tests pass, typecheck/cycles/file-size green)

* chore(release): v3.8.34 — finalize changelog, rebaseline drift, fix release-green reds

- Finalize CHANGELOG [3.8.34] (43 bullets, full contributor attribution) + seed i18n mirrors
- Rebaseline inherited cycle drift surfaced by release-green pre-flight: eslint warnings
  3900->3907, cognitive-complexity 797->801 (release-finalize touches no prod code; all
  drift is from this cycle's contributor merges)
- fix(providers): keep reka-flash-3 as the Reka provider default. cheaper-inference#4621 inserted reka-flash
  at the head of the model list, silently changing the default from reka-flash-3 (the
  free-tier model) to reka-flash; reorder so reka-flash-3 stays default, reka-flash retained.
- test: align provider-models-config / provider-models-route / web-cookie-providers-new with
  cheaper-inference#4621 (reka-flash now in the Reka catalog) and cheaper-inference#4699 (the `kimi` API-key provider correctly
  falls through to DefaultExecutor instead of KimiWebExecutor)
- chore(quality): allowlist the COMPRESSION_GUIDE doc name in check-fabricated-docs
  (false-positive env-var match; docs/compression/COMPRESSION_GUIDE.md exists)

* fix(release-green): resolve release-PR full-CI reds for v3.8.34

Surfaced only on the release PR (these gates don't run on PR->release fast-gates):

- fix(quota): complete HTML-comment sanitization in opencodeOllamaUsage SSR reset-time
  parsing — strip any <!--...--> generically instead of the two literal React hydration
  markers, so no partial "<!--" can survive (CodeQL js/incomplete-multi-character-
  sanitization, HIGH, introduced by cheaper-inference#4642). Regression test added.
- test(codex): correct the Codex-fingerprint body key order assertion to match the
  canonical bodyFieldOrder (prompt_cache_key precedes include); cheaper-inference#4584 flipped the two
  and integration tests don't run on fast-gates so it never executed until the release PR.
- chore(quality): rebaseline inherited cycle drift surfaced by full CI —
  zizmorFindings 152->155 (+3 unpinned-uses in nightly-release-green.yml from cheaper-inference#4622,
  same @vn convention as ci.yml) and openapiCoverage.pct 38.4->37.8 (-0.6, contributor
  routes added faster than openapi docs). Release-finalize touches no prod routes.

* fix(release-green): complete CodeQL sanitization + rebaseline complexity drift

- fix(quota): handle unterminated HTML comments in opencodeOllamaUsage SSR reset-time
  parsing — the `(?:-->|$)` arm consumes a trailing "<!--" with no closing "-->", so no
  partial "<!--" can survive (CodeQL js/incomplete-multi-character-sanitization persisted
  with the plain <!--...--> form because an unclosed comment could still leave "<!--").
- chore(quality): rebaseline cyclomatic complexity 1915->1916 (+1) — inherited v3.8.34
  cycle drift (contributor feature branches); check:complexity does not run on PR->release
  fast-gates so it surfaced only on the release PR. Release-finalize adds 0 complexity
  (measured 1916 with/without the regex tweak). dead-code/cognitive/type-coverage/
  compression-budget/codeql ratchets all pass.

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
Co-authored-by: Randi <55005611+rdself@users.noreply.github.com>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: KooshaPari <42529354+KooshaPari@users.noreply.github.com>
Co-authored-by: Abhishek Divekar <adivekar@utexas.edu>
Co-authored-by: Rahul sharma <sharmaR0810@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
Co-authored-by: Ronald Estacion <DevEstacion@users.noreply.github.com>
Co-authored-by: Igor <60442260+BugsBag@users.noreply.github.com>
Co-authored-by: Oonishi <275808243+ponkcore@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Jan Leon <Jan.gaschler@gmail.com>
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
* chore(release): open v3.8.34 development cycle

* chore(quality): release-green pre-flight validator + nightly signal (C+D) (cheaper-inference#4622)

C — scripts/quality/validate-release-green.mjs (npm run check:release-green):
reproduces the release-equivalent validation (typecheck, eslint, db-rules,
public-creds, full unit, vitest, ratchets, optional --with-build package-artifact)
against the current working tree and classifies each red as HARD (real defect,
exit 1) vs DRIFT (ratchet — reported, never affects exit / never blocks). Pure
helpers exported + orchestration behind a direct-run guard; unit-tested.

D — .github/workflows/nightly-release-green.yml: runs C on the active release
branch nightly (and on workflow_dispatch) and opens/updates a single tracking
issue on HARD failures. Never a required check, never touches a contributor PR.

Closes the gap where the full gate (ci.yml) only ran on the release PR, so reds
accrued silently on release/** and surfaced in 40-min layers at release time.
Non-blocking by construction; drift is the maintainer's to rebaseline at release.

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>

* fix(providers): show revealed connection API keys (cheaper-inference#4583)

Integrated into release/v3.8.34

* fix(resilience): respect upstream retry hint toggle (cheaper-inference#4585)

Integrated into release/v3.8.34

* feat(settings): expose stream recovery feature flags (cheaper-inference#4586)

Integrated into release/v3.8.34

* fix(logs): make active request stale sweep configurable (cheaper-inference#4599)

Integrated into release/v3.8.34

* fix(plugin): auto-prefix providerId with 'opencode-' for OC 1.17.8+ native gate (cheaper-inference#4527)

Integrated into release/v3.8.34 (supersedes cheaper-inference#4445)

* fix(models): treat unknown output caps as unset (cheaper-inference#4584)

Integrated into release/v3.8.34

* fix(executors): strip temperature for GitHub Copilot gpt-5.4 family (cheaper-inference#4564)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(oauth): update Qwen OAuth URLs from chat.qwen.ai to qwen.ai (cheaper-inference#4561)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(api/settings): prevent cached /api/settings responses (port from 9router#951) (cheaper-inference#4566)

Integrated into release/v3.8.34 (rebuilt onto tip)

* feat(audio): MiniMax T2A v2 TTS dispatch in audioSpeech (port cheaper-inference#1043) (cheaper-inference#4553)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(dashboard): surface manual config CTA when Open Claw CLI auto-detect fails (cheaper-inference#4562)

Integrated into release/v3.8.34 (rebuilt onto tip)

* feat(providers): optional model ID for custom API-key validation (cheaper-inference#4555)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(cli): align data dir and env loading with runtime (cheaper-inference#4607)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(quota): expose Bailian quota windows (cheaper-inference#4610)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix: retain provider cooldowns for configured max window (cheaper-inference#4588)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix: reject invalid provider cooldown bounds (cheaper-inference#4589)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix: preserve production combo metrics on shadow eviction (cheaper-inference#4590)

Integrated into release/v3.8.34 (rebuilt — bundled commits stripped)

* fix(stream): estimate input tokens when upstream reports prompt_tokens=0 (cheaper-inference#4615)

Integrated into release/v3.8.34 (rebuilt onto tip)

* fix(catalog): shorten no-thinking gateway prefix to no-think/ (cheaper-inference#4525)

Integrated into release/v3.8.34 (rebuilt — kept only the prefix rename, dropped stale-base reverts)

* fix(relay): apply IP rate limit to bifrost sidecar (cheaper-inference#4593)

Integrated into release/v3.8.34 (rebuilt onto tip; merge before cheaper-inference#4612)

* fix(bifrost): finalize SSE relay usage after stream (cheaper-inference#4612)

Integrated into release/v3.8.34 (rebuilt + reconciled with cheaper-inference#4593)

* feat(compression): per-request `x-omniroute-compression` header (Phase 3) (cheaper-inference#4645)

* docs(compression): Phase 3 per-request header design spec

Approved brainstorming output for the x-omniroute-compression header:
header-first precedence, name-first combo matching (Decision A), explicit
value bypasses auto-trigger (Decision B), DerivedPlan.source, and the
X-OmniRoute-Compression response header.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): Phase 3 per-request header implementation plan

4-task TDD plan (resolver header-first + source, parser, chatCore wiring +
response header, docs/file-size) with full code and exact commands.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): header-first resolver + plan source (Phase 3 core)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): resolveCompressionHeader parser (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(compression): wire x-omniroute-compression header + response header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* refactor(compression): extract plan-resolution leaf (planResolution.ts) under size cap (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(compression): document x-omniroute-compression header (Phase 3)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(compression): harden named-combo map + trim engine: header id (Phase 3 review)

Addresses gemini-code-assist review on cheaper-inference#4645:
- Extract buildNamedComboLookup (pure) so a blank/whitespace/null combo name
  contributes only its id key (no '' key, no throw that disables all combos).
- Trim the engine:<id> header value so 'engine: rtk' resolves.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix: exclude exhausted connections from auto scoring (cheaper-inference#4592)

Integrated into release/v3.8.34 (rebuilt + opt-in gate fix)

* fix(dashboard): memoize compatible provider groups (cheaper-inference#4613)

Integrated into release/v3.8.34 (rebuilt + test added)

* fix(dashboard): isolate quota widget refresh clock (cheaper-inference#4611)

Integrated into release/v3.8.34 (rebuilt + jsdom test)

* fix(dashboard): gate topology side effects behind widget visibility (cheaper-inference#4606)

Integrated into release/v3.8.34 (rebuilt + jsdom test)

* fix(dashboard): keep play_arrow spinning on provider Test All buttons (cheaper-inference#4563)

Integrated into release/v3.8.34 (rebuilt onto tip; UI-cosmetic per owner)

* fix(db): schedule retention cleanup + fix cleanup table/column names (extracted from cheaper-inference#4428) (cheaper-inference#4691)

Integrated into release/v3.8.34 (cleanup core extracted from cheaper-inference#4428, credit @oyi77)

* fix(telemetry): back off live-WS event forwarding when the sidecar is unreachable (cheaper-inference#4604) (cheaper-inference#4687)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix(api): serve GET /v1/models/{model} as JSON, not the HTML dashboard (cheaper-inference#4674) (cheaper-inference#4677)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* feat(opencode): add go deepseek reasoning variants (cheaper-inference#4647)

Integrated into release/v3.8.34

* fix(executors): robust deepseek-web tool-call parsing and agentic context retention (cheaper-inference#4644)

Integrated into release/v3.8.34

* fix(cli): authenticate `omniroute logs` and honor active context (cheaper-inference#4638)

Integrated into release/v3.8.34 (authored by Rahul Sharma, AI co-author trailer stripped per project policy)

* fix(proxy): apply pipelining:0 + connections cap to the direct dispatcher (cheaper-inference#4580) (cheaper-inference#4684)

Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>

* fix(executors): Firecrawl web_fetch 500 with include_metadata=true (cheaper-inference#4692)

Integrated into release/v3.8.34

* fix(routing): include all noAuth models in auto-combos + add reka-flash + best-free template (cheaper-inference#4621)

Integrated into release/v3.8.34 (dead getFirstRegistryModelId dropped, rebuilt onto tip)

* fix(dashboard): gate home topology live-WS networking (cheaper-inference#4596) (cheaper-inference#4618)

Integrated into release/v3.8.34 (adapted onto cheaper-inference#4606's extracted topology section: default-hidden flip + enabled gate on useLiveDashboard)

* fix(cli): align `omniroute` env loading with the runtime data dir (cheaper-inference#4597) (cheaper-inference#4619)

Integrated into release/v3.8.34 (data-dir.mjs refactor reconciled with cheaper-inference#4607; loadEnvFile aligned to getDefaultDataDir)

* chore(quality): reconcile file-size baseline for cheaper-inference#4644 (deepseek-web.ts 1117->1125) (cheaper-inference#4695)

file-size reconcile for cheaper-inference#4644

* Support quota scraping for OpenCode Go and Ollama Cloud (cheaper-inference#4642)

Integrated into release/v3.8.34 (Ollama Cloud + OpenCode Go dashboard quota scraping; rebuilt onto tip, gates green: typecheck/public-creds/file-size/lint/docs-sync + 31 tests)

* feat(executors): land M365 Copilot pure framing + connection helpers (cheaper-inference#4042) (cheaper-inference#4696)

Land M365 pure modules ahead of draft cheaper-inference#4400

* deps: bump production + development groups; migrate js-yaml to v5 ESM (cheaper-inference#4697)

Incorporates Dependabot cheaper-inference#4667 + cheaper-inference#4668 + js-yaml v5 ESM migration into release/v3.8.34

* fix: noAuth provider validation + kimi executor routing (cheaper-inference#4699)

Integrated into release/v3.8.34 (noAuth in NOAUTH_PROVIDERS dynamic check + remove misrouted kimi web alias; 9 tests)

* refactor(imageGeneration): extract 8 provider families to co-located files (cheaper-inference#4609)

Integrated into release/v3.8.34 (extraction completed: added missing imports/exports per module, main imports handlers locally; 145 image-gen tests pass, typecheck/cycles/file-size green)

* chore(release): v3.8.34 — finalize changelog, rebaseline drift, fix release-green reds

- Finalize CHANGELOG [3.8.34] (43 bullets, full contributor attribution) + seed i18n mirrors
- Rebaseline inherited cycle drift surfaced by release-green pre-flight: eslint warnings
  3900->3907, cognitive-complexity 797->801 (release-finalize touches no prod code; all
  drift is from this cycle's contributor merges)
- fix(providers): keep reka-flash-3 as the Reka provider default. cheaper-inference#4621 inserted reka-flash
  at the head of the model list, silently changing the default from reka-flash-3 (the
  free-tier model) to reka-flash; reorder so reka-flash-3 stays default, reka-flash retained.
- test: align provider-models-config / provider-models-route / web-cookie-providers-new with
  cheaper-inference#4621 (reka-flash now in the Reka catalog) and cheaper-inference#4699 (the `kimi` API-key provider correctly
  falls through to DefaultExecutor instead of KimiWebExecutor)
- chore(quality): allowlist the COMPRESSION_GUIDE doc name in check-fabricated-docs
  (false-positive env-var match; docs/compression/COMPRESSION_GUIDE.md exists)

* fix(release-green): resolve release-PR full-CI reds for v3.8.34

Surfaced only on the release PR (these gates don't run on PR->release fast-gates):

- fix(quota): complete HTML-comment sanitization in opencodeOllamaUsage SSR reset-time
  parsing — strip any <!--...--> generically instead of the two literal React hydration
  markers, so no partial "<!--" can survive (CodeQL js/incomplete-multi-character-
  sanitization, HIGH, introduced by cheaper-inference#4642). Regression test added.
- test(codex): correct the Codex-fingerprint body key order assertion to match the
  canonical bodyFieldOrder (prompt_cache_key precedes include); cheaper-inference#4584 flipped the two
  and integration tests don't run on fast-gates so it never executed until the release PR.
- chore(quality): rebaseline inherited cycle drift surfaced by full CI —
  zizmorFindings 152->155 (+3 unpinned-uses in nightly-release-green.yml from cheaper-inference#4622,
  same @vn convention as ci.yml) and openapiCoverage.pct 38.4->37.8 (-0.6, contributor
  routes added faster than openapi docs). Release-finalize touches no prod routes.

* fix(release-green): complete CodeQL sanitization + rebaseline complexity drift

- fix(quota): handle unterminated HTML comments in opencodeOllamaUsage SSR reset-time
  parsing — the `(?:-->|$)` arm consumes a trailing "<!--" with no closing "-->", so no
  partial "<!--" can survive (CodeQL js/incomplete-multi-character-sanitization persisted
  with the plain <!--...--> form because an unclosed comment could still leave "<!--").
- chore(quality): rebaseline cyclomatic complexity 1915->1916 (+1) — inherited v3.8.34
  cycle drift (contributor feature branches); check:complexity does not run on PR->release
  fast-gates so it surfaced only on the release PR. Release-finalize adds 0 complexity
  (measured 1916 with/without the regex tweak). dead-code/cognitive/type-coverage/
  compression-budget/codeql ratchets all pass.

---------

Co-authored-by: Diego Rodrigues de Sa e Souza <diego.souza@cdwasolutions.com.br>
Co-authored-by: Randi <55005611+rdself@users.noreply.github.com>
Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: KooshaPari <42529354+KooshaPari@users.noreply.github.com>
Co-authored-by: Abhishek Divekar <adivekar@utexas.edu>
Co-authored-by: Rahul sharma <sharmaR0810@gmail.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <souzamiriamrodrigues790@gmail.com>
Co-authored-by: Ronald Estacion <DevEstacion@users.noreply.github.com>
Co-authored-by: Igor <60442260+BugsBag@users.noreply.github.com>
Co-authored-by: Oonishi <275808243+ponkcore@users.noreply.github.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Jan Leon <Jan.gaschler@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(routing): noAuth provider gaps in auto-combos + missing reka-flash model alias