Repository navigation
refactor(chatCore): extrai resolução de target-format para leaf puro (#3501) - #4533
Closed
diegosouzapw wants to merge 6 commits into
Closed
diegosouzapw wants to merge 6 commits into
diegosouzapw wants to merge 6 commits into
Conversation
Contributor
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…3501) Move o closure `recordKeyHealthStatus` (~56 ln) do topo de handleChatCore para o novo leaf open-sse/handlers/chatCore/keyHealth.ts, byte-idêntico: 401 → recordKeyFailure + persist sempre; 2xx → recordKeySuccess + persist só na recuperação de warning/invalid; demais status apenas atualizam o set de extra-keys. O handler mantém um closure fino de binding que repassa `log`, então os 2 call sites ficam inalterados. Imports que ficaram órfãos (recordKeyFailure / recordKeySuccess / trackConnectionExtraKeys / KeyHealth) migram para o leaf; connectionHasExtraKeys permanece (ainda usado no site de rotação) e updateProviderConnection é importado em ambos (usado em vários pontos do handler). chatCore.ts 5110->5055 (shrink -55); baseline file-size ratchetado. complexity 1905=1905 (neutro). Coberto por tests/unit/chatcore-key-health.test.ts (6 casos — transições in-memory do apiKeyRotator: warning/invalid no threshold, recuperação 2xx, escopo por selectedKeyId, no-op sem connectionId e em status fora de 401/2xx).
Move a construção do payload de persistCodexQuotaState para o novo leaf puro open-sse/handlers/chatCore/codexQuota.ts (buildCodexQuotaPersistence): parseia os headers de quota do Codex no snapshot codexQuotaState, faz passthrough do providerSpecificData existente e, num 429 cuja janela (dual-window) passou do threshold de exaustão, registra o cooldown por escopo (codexScopeRateLimitedUntil) + codexExhaustedWindow, retornando a mensagem de debug-log. O handler mantém as partes impuras byte-idênticas e na mesma ordem: emitir o exhaustionLog retornado, invalidateCodexQuotaCache em todo 429 (connectionId é garantido pelo early-return), depois updateProviderConnection + mutação de credentials. Imports órfãos (parseCodexQuotaHeaders/getCodexModelScope/ getCodexDualWindowCooldownMs) migram para o leaf; isCompactResponsesEndpoint permanece (usado no site de passthrough). chatCore.ts 5055->5019 (shrink -36); baseline file-size ratchetado. complexity 1905=1905 (neutro). Coberto por tests/unit/chatcore-codex-quota.test.ts (5 casos: sem-headers null, snapshot+passthrough, 429 cooldown+janela+log, merge do scope-map, 429 abaixo-do-threshold no-op).
…ro (#3501) Move o bloco de resolução de formato do topo de handleChatCore (endpointPath / sourceFormat / isResponsesEndpoint / nativeCodexPassthrough / isDroidCLI / copilotCompatibleReasoning / clientResponseFormat) para o novo leaf puro open-sse/handlers/chatCore/requestFormat.ts (resolveChatCoreRequestFormat), ao lado de resolveChatCoreRequestSetup (fase de request-setup). O handler agora desestrutura o resultado, então todo uso downstream fica byte-idêntico. A função local isCopilotClient (usada só por esse bloco) vira helper privado do leaf; o import órfão detectFormatFromEndpoint migra junto (getTargetFormat permanece no import de provider). shouldUseNativeCodexPassthrough e FORMATS seguem importados no handler (re-exportado / usado em vários pontos). chatCore.ts 5019->4993 (shrink -26, cruza abaixo de 5000); baseline file-size ratchetado. complexity 1905=1905 (neutro). Coberto por tests/unit/chatcore-request-format.test.ts (7 casos, incluindo o downgrade OpenAI-Responses->OpenAI e sua supressão pelo Droid CLI).
…3501) Move o bloco de effort-variant do Claude/Claude-Code do topo de handleChatCore (strip de claude-...-{low,medium,high,xhigh,max} de volta ao id base + expõe o nível como reasoning_effort; effort explícito do cliente vence; passthrough nativo com sourceFormat==='claude' fica intocado) para o novo leaf open-sse/handlers/chatCore/claudeEffortVariant.ts (applyClaudeEffortVariant). A função muta o body in-place e retorna { effectiveModel, log }, que o handler aplica (reatribuição de effectiveModel + log?.info), byte-idêntico. Import órfão splitClaudeEffortSuffix migra para o leaf (getModelTargetFormat / PROVIDER_ID_TO_ALIAS permanecem no import de providerModels); isClaudeCodeCompatibleProvider e FORMATS seguem no handler (usados em outros pontos). A detecção de effort explícito foi isolada no helper privado hasExplicitClaudeEffort para manter applyClaudeEffortVariant abaixo do teto de complexidade (16->≤15; mesmo padrão de resolveContextCachePin/ markConnectionLevelExhaustion). chatCore.ts 4993->4978 (shrink -15); baseline file-size ratchetado. complexity 1905=1905 (neutro). Coberto por tests/unit/chatcore-claude-effort-variant.test.ts (7 casos).
…3501) Move a decisão do Background Task Redirection (T41) do topo de handleChatCore para o novo leaf open-sse/handlers/chatCore/backgroundRedirect.ts (resolveBackgroundTaskRedirect). Retorna { backgroundReason, redirect }: backgroundReason é o sinal de detecção (truthy quando a request parece tarefa de background), threadado adiante na injeção de memory/skills; redirect é o downgrade de modelo a aplicar (enabled + background + modelo com mapeamento diferente), ou null. O handler mantém os efeitos byte-idênticos: log BACKGROUND, mutação de model + body.model, e o audit routing.background_task_redirect. Imports órfãos (getBackgroundDegradationConfig / getBackgroundTaskReason / getDegradedModel) migram para o leaf; logAuditEvent permanece (usado em vários pontos). chatCore.ts 4978->4974 (shrink -4); baseline file-size ratchetado. complexity 1905=1905 (neutro). Coberto por tests/unit/chatcore-background-redirect.test.ts (5 casos via setBackgroundDegradationConfig).
…3501) Move a resolução de wire target-format do topo de handleChatCore para o novo leaf puro open-sse/handlers/chatCore/targetFormat.ts (resolveChatCoreTargetFormat), ao lado de resolveChatCoreRequestSetup/resolveChatCoreRequestFormat. Retorna { alias, targetFormat }: apiFormat==='responses' força OpenAI Responses; senão o target-format do modelo no registry, depois o override custom (#2905), depois o default do provider. O handler desestrutura — `alias` segue reusado downstream ao remover o prefixo alias/ do model id upstream. Imports órfãos (getModelTargetFormat / PROVIDER_ID_TO_ALIAS / getTargetFormat) migram para o leaf; FORMATS permanece no handler (usado em vários pontos). Tamanho de chatCore.ts neutro (call+comentário compensa os 2 imports removidos), mas a lógica agora é unit-testada e co-localizada. complexity 1905=1905; typecheck 0. Coberto por tests/unit/chatcore-target-format.test.ts (5 casos, asseridos contra a composição inline).
diegosouzapw
force-pushed
the
refactor/qg-chatcore-targetformat
branch
from
June 21, 2026 17:19
7d698e8 to
36679a7
Compare
diegosouzapw
force-pushed
the
refactor/qg-chatcore-bgredirect
branch
2 times, most recently
from
June 21, 2026 17:23
848f333 to
1773868
Compare
Owner
Author
|
Fechando: o churn de merge da virada v3.8.32→v3.8.33 desyncou esta cadeia. O conteúdo do target-format (e dos demais leaves perdidos) foi recuperado limpo no #4538, cherry-picado sobre o tip atual de release/v3.8.33. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O quê
7º incremento da decomposição do god-file
chatCore.ts(QG v2 Fase 9 T5, #3501). Move a resolução de wire target-format do topo dehandleChatCorepara o novo leaf puroopen-sse/handlers/chatCore/targetFormat.ts(resolveChatCoreTargetFormat), ao lado deresolveChatCoreRequestSetup/resolveChatCoreRequestFormat.Como (preservação de comportamento)
{ alias, targetFormat }:targetFormat—apiFormat==='responses'força OpenAI Responses; senão o target-format do modelo no registry, depois o override custom ([BUG] opencode-go: custom models added via UI use wrong targetFormat (oa-compat) — custom model save appears to succeed but model still routes as OpenAI-compatible #2905), depois o default do provider.alias— reusado downstream ao remover o prefixoalias/do model id upstream (lição da extração anterior: grepar TODAS as vars que o bloco declara;aliasé consumido bem depois, em ~line 2374).modelTargetFormatera intermediário local (não vaza).getModelTargetFormat/PROVIDER_ID_TO_ALIAS/getTargetFormat) migram para o leaf;FORMATSpermanece (usado em vários pontos).Gates
chatCore.tsneutro (4974, sem mudança — call+comentário compensam os 2 imports removidos); sem rebaseline.tests/unit/chatcore-target-format.test.ts— 5 casos asseridos contra a composição inline (responses short-circuit, delegação byte-idêntica, custom override quando não há registry format, fallback ao default do provider, alias de provider não-mapeado).chatcore-imports-cleanly✓ + 163/163 na suíte chatcore completa (excluído só otranslation-pathsflaky pré-existente — que aliás passou numa execução isolada nesta sessão).Extração de god-file sem mudança de comportamento em runtime.