Files
sub2api/backend/cmd
erio 78de54b693 feat(signature): activate PoolRectifier + harvester hookup
Introduces the pool-replace retry strategy end-to-end. When
RectifierSettings has SignaturePoolSize>0 and the account's per-type
sub-switch is on, the factory returns a PoolClaudeRectifier /
PoolAntigravityRectifier that fetches the freshest signatures from the
Redis pool and cycles them through the request's thinking blocks
(M>N cycling). Rule A: an empty pool transparently passes the
original upstream error back — no fallback to strip.

Key pieces:
  - PoolClaudeRectifier / PoolAntigravityRectifier in internal/service/signature
  - signatureRectifierFactory in the service package selects strategy per
    request via shouldUsePool(ctx, account) which implements the agreed
    decision table (Enabled + SignaturePoolSize>0 + per-type sub-switch)
  - WrapResponseBody helper on the factory is invoked at each Claude-native
    DoWithTLS entry point (main Forward, Anthropic passthrough, Bedrock) to
    run the Harvester over the upstream body; no-op when pool disabled
  - ctxkey.IsSignatureRectifyRetry is set on all retry contexts (Claude
    two-stage, count_tokens, Antigravity signature retries) so the harvester
    skips ingesting signatures from retry responses and does not pollute the
    pool with values we ourselves injected
  - NewGatewayService / NewAntigravityGatewayService now accept
    signature.SignaturePool; wire_gen.go updated accordingly

Antigravity responses are raw Gemini format so WrapResponseBody is not
called there — harvesting stays Claude-only as designed. Antigravity can
still *read* from the shared OAuth pool on retry; whether cross-ecosystem
signatures verify upstream is the question the future PoC will answer.
2026-04-19 13:51:22 +08:00
..
2026-03-09 01:18:49 +08:00