Skip to content

Refactor: Extract chatCore phases into modular files - #3598

Merged
diegosouzapw merged 3 commits into
cheaper-inference:release/v3.8.21from
oyi77:chore/modularization-proposal-v3.8.21
Jun 11, 2026
Merged

diegosouzapw merged 3 commits into
cheaper-inference:release/v3.8.21from
oyi77:chore/modularization-proposal-v3.8.21

Conversation

@oyi77

@oyi77 oyi77 commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Description

This PR extracts several large logical phases out of open-sse/handlers/chatCore.ts and places them into smaller, self-contained modules under open-sse/handlers/chatCore/.

Extracted phases:

  • Phase 9.1: Semantic cache check
  • Phase 9.2: Idempotency check
  • Phase: Memory & Skills injection
  • Phase: Sanitization logic

This reduces the length of handleChatCore and helps prepare the codebase for the upcoming WordPress-style Plugin System by enforcing modularity.

Ref: #3594

Extracts:
- Phase 9.1: Semantic cache check
- Phase 9.2: Idempotency check
- Memory & Skills injection
- Sanitization logic

This is a step towards full codebase modularization to support the Plugin System.
Ref: cheaper-inference#3594
@oyi77
oyi77 force-pushed the chore/modularization-proposal-v3.8.21 branch from b04615f to 8332f19 Compare June 10, 2026 21:11

@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 refactors handleChatCore in open-sse/handlers/chatCore.ts by modularizing its logic into separate files under open-sse/handlers/chatCore/ (covering idempotency, semantic caching, request sanitization, and memory/skills injection). Feedback on these changes highlights the need to add unit tests for the newly created modular functions to comply with the repository's style guide (Rule 9), and to replace the use of any types with proper type definitions in the new modules to ensure type safety.

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.

Comment on lines +1 to +4
import { injectMemoryAndSkills } from "./chatCore/memorySkillsInjection.ts";
import { checkIdempotencyCache } from "./chatCore/idempotency.ts";
import { checkSemanticCache } from "./chatCore/semanticCache.ts";
import { sanitizeChatRequestBody } from "./chatCore/sanitization.ts";

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.

medium

The Repository Style Guide (Rule 9) requires that tests be included when changing production code. Please add unit tests for the new modular functions in open-sse/handlers/chatCore/.

References
  1. Rule 9: Always include tests when changing production code (src/, open-sse/, electron/, bin/).

Comment on lines +13 to +18
clientRawRequest: unknown;
provider: string;
model: string;
effectiveServiceTier: unknown;
startTime: number;
log: unknown;

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.

medium

Avoid using any for type definitions. Please define proper interfaces or types for clientRawRequest, effectiveServiceTier, and log to improve type safety and maintainability.

diegosouzapw and others added 2 commits June 10, 2026 21:31
…arization

The modularization moved the Phase 9.2 idempotency *check* (and its local
`idempotencyKey` declaration) into checkIdempotencyCache(), but the Phase 9.2
*save* call still referenced `idempotencyKey`, throwing ReferenceError at
runtime on every successful non-cached response. Re-import getIdempotencyKey
(pure header read) and re-derive the key at the save site.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
@diegosouzapw
diegosouzapw merged commit 07b190d into cheaper-inference:release/v3.8.21 Jun 11, 2026
2 checks passed
@diegosouzapw

Copy link
Copy Markdown
Collaborator

Merged into release/v3.8.21 — thanks, @oyi77! 🎉

The focused chatCore modularization is a clean win — extracting the idempotency check, semantic cache check, request sanitization, and memory/skills injection into open-sse/handlers/chatCore/ makes that monster handler much more navigable.

One fix was applied on top (co-authored): the idempotency check (and its local idempotencyKey declaration) moved into checkIdempotencyCache(), but the Phase 9.2 save call still referenced idempotencyKey, which threw ReferenceError at runtime on every successful non-cached response (caught by chatcore-translation-paths — note that typecheck:core doesn't cover this file, so the suite was the safety net). Re-derived the key at the save site via the pure getIdempotencyKey(headers). Verified the chatCore idempotency/sanitization/cache tests pass. Thanks for pushing the modularization forward!

diegosouzapw added a commit that referenced this pull request Jun 11, 2026
…o reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@diegosouzapw diegosouzapw mentioned this pull request Jun 11, 2026
diegosouzapw added a commit that referenced this pull request Jun 11, 2026
* chore(release): open v3.8.21 development cycle

* fix: pass through valid max_tokens-truncated responses instead of fake 502 (#3572) (#3595)

* fix: /v1/completions returns legacy text-completion format, not chat (#3571) (#3596)

* fix: z.ai/GLM coding plan no longer shows Monthly 0% when no monthly cap (#3580) (#3597)

* docs: mark DISCOVERY_TOOL_DESIGN endpoints as Phase-2 not-yet-implemented (#3498) (#3599)

* fix(agent-bridge): add validate-only upstream-ca/test route (#3488) (#3600)

* fix(gamification): add level/badges/badges-earned profile routes (#3484)

* security(oauth): migrate 5 public client_ids to resolvePublicCred (#3493)

* fix(mcp): ship MCP server source closure in npm files + coverage gate (#3578)

* fix: add reasoning token buffer for combo routing (fixes #3587) (#3588)

Integrated into release/v3.8.21

* Refactor: Extract chatCore phases into modular files (#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!

* docs(changelog): credit #3598 (chatCore modularization) + #3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(api): implement GET /api/guardrails + POST /api/guardrails/test, drop shadow/guardrails doc-fiction (#3496) (#3602)

Integrated into release/v3.8.21 — implements GET /api/guardrails + POST /api/guardrails/test, removes shadow/guardrails doc-fiction. TDD-validated (5/5) + check-docs-symbols/typecheck/eslint green.

* fix(gemini): isolate textual reasoning wrappers (#3605)

Split-out PR C from #3584. Isolates textual reasoning wrappers (<think>/<thinking>/<thought>/<internal_thought>, including malformed/open tags) into reasoning_content across both the non-streaming sanitizer and the Gemini streaming translator, with split-chunk buffering. Additive to the existing textual tool-call pipeline; does not touch the #3569 native functionResponse path. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(antigravity): normalize Gemini 3.5 Flash tier IDs (#3603)

Split-out PR A from #3584. Normalizes the Antigravity/agy Gemini 3.5 Flash tier IDs to clean public names (gemini-3.5-flash-low/medium/high), maps them to the live upstream IDs at the executor boundary, and removes Antigravity from the global model resolver so the executor owns wire normalization. Maintainer follow-up: kept gemini-3.5-flash-preview as a hidden backward-compat alias routing to the High tier (so saved combos/configs keep working). Live-validated the tier set via the agy CLI catalog. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(agent-bridge): surface real MITM startup-failure cause, not always port 443 (#3606) (#3608)

Integrated into release/v3.8.21 (#3606)

* fix(oauth): surface real Kiro import-token failure cause, not a bare 500 (#3589) (#3609)

Integrated into release/v3.8.21 (#3589)

* docs(opencode-provider): soft-deprecate in favor of @omniroute/opencode-plugin (#3419) (#3613)

Integrated into release/v3.8.21 (#3419)

* fix(usage): normalize Antigravity and agy provider quotas (#3604)

Split-out PR B from #3584. Normalizes Antigravity/agy provider quotas: prefers retrieveUserQuota for live consumption, falls back to fetchAvailableModels and local usage_history, sanitizes cached Provider Limits so retired upstream IDs are not re-exposed, and schedules a deduplicated post-usage refresh. Maintainer follow-up: decoupled the post-usage refresh via a lightweight usageEvents bus (usageHistory no longer dynamic-imports providerLimits) so it does not pull the executors/translator graph into the typecheck-core surface — typecheck:core stays at 0. Integrated into release/v3.8.21. Thanks @dhaern!

* feat(cli): add autostart on/off/toggle shorthand for headless serve mode (#3331) (#3614)

Integrated into release/v3.8.21 (#3331)

* docs(changelog): credit #3603 (Flash tier IDs) + #3604 (provider quotas) + #3605 (reasoning wrappers)

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

* fix(review): resolve findings from /review-reviews battery (v3.8.21 hardening) (#3618)

Pre-release hardening from the /review-reviews battery — 15 findings resolved (L1-L13,L15) + L14 live-verified WONTFIX, convergence re-review clean. lint/typecheck:core/test:vitest(146)/build green; zero new test:unit failures vs baseline 797de43.

* chore(release): v3.8.21 CHANGELOG + i18n + env-doc sync

---------

Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Raxxoor <manker_lol@hotmail.com>
oyi77 added a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
oyi77 pushed a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
oyi77 added a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
oyi77 pushed a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
oyi77 added a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
oyi77 pushed a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
oyi77 added a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
oyi77 pushed a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
oyi77 added a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
oyi77 pushed a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
oyi77 added a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
oyi77 pushed a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
oyi77 added a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
oyi77 pushed a commit to oyi77/OmniRoute that referenced this pull request Jun 12, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
HouMinXi pushed a commit to HouMinXi/OmniRoute that referenced this pull request Aug 2, 2026
* chore(release): open v3.8.21 development cycle

* fix: pass through valid max_tokens-truncated responses instead of fake 502 (cheaper-inference#3572) (cheaper-inference#3595)

* fix: /v1/completions returns legacy text-completion format, not chat (cheaper-inference#3571) (cheaper-inference#3596)

* fix: z.ai/GLM coding plan no longer shows Monthly 0% when no monthly cap (cheaper-inference#3580) (cheaper-inference#3597)

* docs: mark DISCOVERY_TOOL_DESIGN endpoints as Phase-2 not-yet-implemented (cheaper-inference#3498) (cheaper-inference#3599)

* fix(agent-bridge): add validate-only upstream-ca/test route (cheaper-inference#3488) (cheaper-inference#3600)

* fix(gamification): add level/badges/badges-earned profile routes (cheaper-inference#3484)

* security(oauth): migrate 5 public client_ids to resolvePublicCred (cheaper-inference#3493)

* fix(mcp): ship MCP server source closure in npm files + coverage gate (cheaper-inference#3578)

* fix: add reasoning token buffer for combo routing (fixes cheaper-inference#3587) (cheaper-inference#3588)

Integrated into release/v3.8.21

* Refactor: Extract chatCore phases into modular files (cheaper-inference#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!

* docs(changelog): credit cheaper-inference#3598 (chatCore modularization) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(api): implement GET /api/guardrails + POST /api/guardrails/test, drop shadow/guardrails doc-fiction (cheaper-inference#3496) (cheaper-inference#3602)

Integrated into release/v3.8.21 — implements GET /api/guardrails + POST /api/guardrails/test, removes shadow/guardrails doc-fiction. TDD-validated (5/5) + check-docs-symbols/typecheck/eslint green.

* fix(gemini): isolate textual reasoning wrappers (cheaper-inference#3605)

Split-out PR C from cheaper-inference#3584. Isolates textual reasoning wrappers (<think>/<thinking>/<thought>/<internal_thought>, including malformed/open tags) into reasoning_content across both the non-streaming sanitizer and the Gemini streaming translator, with split-chunk buffering. Additive to the existing textual tool-call pipeline; does not touch the cheaper-inference#3569 native functionResponse path. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(antigravity): normalize Gemini 3.5 Flash tier IDs (cheaper-inference#3603)

Split-out PR A from cheaper-inference#3584. Normalizes the Antigravity/agy Gemini 3.5 Flash tier IDs to clean public names (gemini-3.5-flash-low/medium/high), maps them to the live upstream IDs at the executor boundary, and removes Antigravity from the global model resolver so the executor owns wire normalization. Maintainer follow-up: kept gemini-3.5-flash-preview as a hidden backward-compat alias routing to the High tier (so saved combos/configs keep working). Live-validated the tier set via the agy CLI catalog. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(agent-bridge): surface real MITM startup-failure cause, not always port 443 (cheaper-inference#3606) (cheaper-inference#3608)

Integrated into release/v3.8.21 (cheaper-inference#3606)

* fix(oauth): surface real Kiro import-token failure cause, not a bare 500 (cheaper-inference#3589) (cheaper-inference#3609)

Integrated into release/v3.8.21 (cheaper-inference#3589)

* docs(opencode-provider): soft-deprecate in favor of @omniroute/opencode-plugin (cheaper-inference#3419) (cheaper-inference#3613)

Integrated into release/v3.8.21 (cheaper-inference#3419)

* fix(usage): normalize Antigravity and agy provider quotas (cheaper-inference#3604)

Split-out PR B from cheaper-inference#3584. Normalizes Antigravity/agy provider quotas: prefers retrieveUserQuota for live consumption, falls back to fetchAvailableModels and local usage_history, sanitizes cached Provider Limits so retired upstream IDs are not re-exposed, and schedules a deduplicated post-usage refresh. Maintainer follow-up: decoupled the post-usage refresh via a lightweight usageEvents bus (usageHistory no longer dynamic-imports providerLimits) so it does not pull the executors/translator graph into the typecheck-core surface — typecheck:core stays at 0. Integrated into release/v3.8.21. Thanks @dhaern!

* feat(cli): add autostart on/off/toggle shorthand for headless serve mode (cheaper-inference#3331) (cheaper-inference#3614)

Integrated into release/v3.8.21 (cheaper-inference#3331)

* docs(changelog): credit cheaper-inference#3603 (Flash tier IDs) + cheaper-inference#3604 (provider quotas) + cheaper-inference#3605 (reasoning wrappers)

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

* fix(review): resolve findings from /review-reviews battery (v3.8.21 hardening) (cheaper-inference#3618)

Pre-release hardening from the /review-reviews battery — 15 findings resolved (L1-L13,L15) + L14 live-verified WONTFIX, convergence re-review clean. lint/typecheck:core/test:vitest(146)/build green; zero new test:unit failures vs baseline 6d24708.

* chore(release): v3.8.21 CHANGELOG + i18n + env-doc sync

---------

Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Raxxoor <manker_lol@hotmail.com>
Poid-ZA pushed a commit to Poid-ZA/OmniRoute that referenced this pull request Aug 5, 2026
* chore(release): open v3.8.21 development cycle

* fix: pass through valid max_tokens-truncated responses instead of fake 502 (cheaper-inference#3572) (cheaper-inference#3595)

* fix: /v1/completions returns legacy text-completion format, not chat (cheaper-inference#3571) (cheaper-inference#3596)

* fix: z.ai/GLM coding plan no longer shows Monthly 0% when no monthly cap (cheaper-inference#3580) (cheaper-inference#3597)

* docs: mark DISCOVERY_TOOL_DESIGN endpoints as Phase-2 not-yet-implemented (cheaper-inference#3498) (cheaper-inference#3599)

* fix(agent-bridge): add validate-only upstream-ca/test route (cheaper-inference#3488) (cheaper-inference#3600)

* fix(gamification): add level/badges/badges-earned profile routes (cheaper-inference#3484)

* security(oauth): migrate 5 public client_ids to resolvePublicCred (cheaper-inference#3493)

* fix(mcp): ship MCP server source closure in npm files + coverage gate (cheaper-inference#3578)

* fix: add reasoning token buffer for combo routing (fixes cheaper-inference#3587) (cheaper-inference#3588)

Integrated into release/v3.8.21

* Refactor: Extract chatCore phases into modular files (cheaper-inference#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!

* docs(changelog): credit cheaper-inference#3598 (chatCore modularization) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(api): implement GET /api/guardrails + POST /api/guardrails/test, drop shadow/guardrails doc-fiction (cheaper-inference#3496) (cheaper-inference#3602)

Integrated into release/v3.8.21 — implements GET /api/guardrails + POST /api/guardrails/test, removes shadow/guardrails doc-fiction. TDD-validated (5/5) + check-docs-symbols/typecheck/eslint green.

* fix(gemini): isolate textual reasoning wrappers (cheaper-inference#3605)

Split-out PR C from cheaper-inference#3584. Isolates textual reasoning wrappers (<think>/<thinking>/<thought>/<internal_thought>, including malformed/open tags) into reasoning_content across both the non-streaming sanitizer and the Gemini streaming translator, with split-chunk buffering. Additive to the existing textual tool-call pipeline; does not touch the cheaper-inference#3569 native functionResponse path. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(antigravity): normalize Gemini 3.5 Flash tier IDs (cheaper-inference#3603)

Split-out PR A from cheaper-inference#3584. Normalizes the Antigravity/agy Gemini 3.5 Flash tier IDs to clean public names (gemini-3.5-flash-low/medium/high), maps them to the live upstream IDs at the executor boundary, and removes Antigravity from the global model resolver so the executor owns wire normalization. Maintainer follow-up: kept gemini-3.5-flash-preview as a hidden backward-compat alias routing to the High tier (so saved combos/configs keep working). Live-validated the tier set via the agy CLI catalog. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(agent-bridge): surface real MITM startup-failure cause, not always port 443 (cheaper-inference#3606) (cheaper-inference#3608)

Integrated into release/v3.8.21 (cheaper-inference#3606)

* fix(oauth): surface real Kiro import-token failure cause, not a bare 500 (cheaper-inference#3589) (cheaper-inference#3609)

Integrated into release/v3.8.21 (cheaper-inference#3589)

* docs(opencode-provider): soft-deprecate in favor of @omniroute/opencode-plugin (cheaper-inference#3419) (cheaper-inference#3613)

Integrated into release/v3.8.21 (cheaper-inference#3419)

* fix(usage): normalize Antigravity and agy provider quotas (cheaper-inference#3604)

Split-out PR B from cheaper-inference#3584. Normalizes Antigravity/agy provider quotas: prefers retrieveUserQuota for live consumption, falls back to fetchAvailableModels and local usage_history, sanitizes cached Provider Limits so retired upstream IDs are not re-exposed, and schedules a deduplicated post-usage refresh. Maintainer follow-up: decoupled the post-usage refresh via a lightweight usageEvents bus (usageHistory no longer dynamic-imports providerLimits) so it does not pull the executors/translator graph into the typecheck-core surface — typecheck:core stays at 0. Integrated into release/v3.8.21. Thanks @dhaern!

* feat(cli): add autostart on/off/toggle shorthand for headless serve mode (cheaper-inference#3331) (cheaper-inference#3614)

Integrated into release/v3.8.21 (cheaper-inference#3331)

* docs(changelog): credit cheaper-inference#3603 (Flash tier IDs) + cheaper-inference#3604 (provider quotas) + cheaper-inference#3605 (reasoning wrappers)

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

* fix(review): resolve findings from /review-reviews battery (v3.8.21 hardening) (cheaper-inference#3618)

Pre-release hardening from the /review-reviews battery — 15 findings resolved (L1-L13,L15) + L14 live-verified WONTFIX, convergence re-review clean. lint/typecheck:core/test:vitest(146)/build green; zero new test:unit failures vs baseline 797de43.

* chore(release): v3.8.21 CHANGELOG + i18n + env-doc sync

---------

Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Raxxoor <manker_lol@hotmail.com>
tkgo11 pushed a commit to tkgo11/OmniRoute that referenced this pull request Sep 23, 2026
…ce#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!
tkgo11 pushed a commit to tkgo11/OmniRoute that referenced this pull request Sep 23, 2026
…on) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
muhamadgalihsaputra pushed a commit to niyatna/NiyatnaRoute that referenced this pull request Sep 27, 2026
* chore(release): open v3.8.21 development cycle

* fix: pass through valid max_tokens-truncated responses instead of fake 502 (cheaper-inference#3572) (cheaper-inference#3595)

* fix: /v1/completions returns legacy text-completion format, not chat (cheaper-inference#3571) (cheaper-inference#3596)

* fix: z.ai/GLM coding plan no longer shows Monthly 0% when no monthly cap (cheaper-inference#3580) (cheaper-inference#3597)

* docs: mark DISCOVERY_TOOL_DESIGN endpoints as Phase-2 not-yet-implemented (cheaper-inference#3498) (cheaper-inference#3599)

* fix(agent-bridge): add validate-only upstream-ca/test route (cheaper-inference#3488) (cheaper-inference#3600)

* fix(gamification): add level/badges/badges-earned profile routes (cheaper-inference#3484)

* security(oauth): migrate 5 public client_ids to resolvePublicCred (cheaper-inference#3493)

* fix(mcp): ship MCP server source closure in npm files + coverage gate (cheaper-inference#3578)

* fix: add reasoning token buffer for combo routing (fixes cheaper-inference#3587) (cheaper-inference#3588)

Integrated into release/v3.8.21

* Refactor: Extract chatCore phases into modular files (cheaper-inference#3598)

Integrated into release/v3.8.21 — chatCore phase modularization. Adjusted: re-derive idempotencyKey for the save path after the check moved into the module (co-authored). Thanks @oyi77!

* docs(changelog): credit cheaper-inference#3598 (chatCore modularization) + cheaper-inference#3588 (combo reasoning buffer)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(api): implement GET /api/guardrails + POST /api/guardrails/test, drop shadow/guardrails doc-fiction (cheaper-inference#3496) (cheaper-inference#3602)

Integrated into release/v3.8.21 — implements GET /api/guardrails + POST /api/guardrails/test, removes shadow/guardrails doc-fiction. TDD-validated (5/5) + check-docs-symbols/typecheck/eslint green.

* fix(gemini): isolate textual reasoning wrappers (cheaper-inference#3605)

Split-out PR C from cheaper-inference#3584. Isolates textual reasoning wrappers (<think>/<thinking>/<thought>/<internal_thought>, including malformed/open tags) into reasoning_content across both the non-streaming sanitizer and the Gemini streaming translator, with split-chunk buffering. Additive to the existing textual tool-call pipeline; does not touch the cheaper-inference#3569 native functionResponse path. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(antigravity): normalize Gemini 3.5 Flash tier IDs (cheaper-inference#3603)

Split-out PR A from cheaper-inference#3584. Normalizes the Antigravity/agy Gemini 3.5 Flash tier IDs to clean public names (gemini-3.5-flash-low/medium/high), maps them to the live upstream IDs at the executor boundary, and removes Antigravity from the global model resolver so the executor owns wire normalization. Maintainer follow-up: kept gemini-3.5-flash-preview as a hidden backward-compat alias routing to the High tier (so saved combos/configs keep working). Live-validated the tier set via the agy CLI catalog. Integrated into release/v3.8.21. Thanks @dhaern!

* fix(agent-bridge): surface real MITM startup-failure cause, not always port 443 (cheaper-inference#3606) (cheaper-inference#3608)

Integrated into release/v3.8.21 (cheaper-inference#3606)

* fix(oauth): surface real Kiro import-token failure cause, not a bare 500 (cheaper-inference#3589) (cheaper-inference#3609)

Integrated into release/v3.8.21 (cheaper-inference#3589)

* docs(opencode-provider): soft-deprecate in favor of @omniroute/opencode-plugin (cheaper-inference#3419) (cheaper-inference#3613)

Integrated into release/v3.8.21 (cheaper-inference#3419)

* fix(usage): normalize Antigravity and agy provider quotas (cheaper-inference#3604)

Split-out PR B from cheaper-inference#3584. Normalizes Antigravity/agy provider quotas: prefers retrieveUserQuota for live consumption, falls back to fetchAvailableModels and local usage_history, sanitizes cached Provider Limits so retired upstream IDs are not re-exposed, and schedules a deduplicated post-usage refresh. Maintainer follow-up: decoupled the post-usage refresh via a lightweight usageEvents bus (usageHistory no longer dynamic-imports providerLimits) so it does not pull the executors/translator graph into the typecheck-core surface — typecheck:core stays at 0. Integrated into release/v3.8.21. Thanks @dhaern!

* feat(cli): add autostart on/off/toggle shorthand for headless serve mode (cheaper-inference#3331) (cheaper-inference#3614)

Integrated into release/v3.8.21 (cheaper-inference#3331)

* docs(changelog): credit cheaper-inference#3603 (Flash tier IDs) + cheaper-inference#3604 (provider quotas) + cheaper-inference#3605 (reasoning wrappers)

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

* fix(review): resolve findings from /review-reviews battery (v3.8.21 hardening) (cheaper-inference#3618)

Pre-release hardening from the /review-reviews battery — 15 findings resolved (L1-L13,L15) + L14 live-verified WONTFIX, convergence re-review clean. lint/typecheck:core/test:vitest(146)/build green; zero new test:unit failures vs baseline 408d91a2c.

* chore(release): v3.8.21 CHANGELOG + i18n + env-doc sync

---------

Co-authored-by: Hernan Javier Ardila Sanchez <hjasgr@gmail.com>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Raxxoor <manker_lol@hotmail.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.

2 participants