/** * Deciding whether a failed turn is worth re-sending WITHOUT its images. * * The multimodal turn carries image bytes inside the `proxySandboxRequest` body. * Two things can refuse that body before the model ever sees it: * * 1. `wspace-public-gateway` enforces `MAX_REQUEST_BODY_SIZE` (256kb in alpha * and prod). It compares `Content-Length` and answers **413 before * authenticating and before forwarding anything**. * 2. The in-sandbox bridge can reject the body itself, which surfaces through * fe-libs as `Proxy error: `. * * In both cases the prompt provably did not reach the agent, so re-sending it * text-only is safe and is strictly better than losing the turn. * * ## Why this is substring matching and not a status check * * fe-libs' `graphqlFetch` maps a non-2xx response to a human sentence and throws * that — `throw Error(friendlyMessage(response))` — keeping no status code, no * `extensions`, nothing structured. Every 4xx that is not 401/403/404/429 * collapses to one sentence. So the sentence IS the signal; there is nothing * better to key on from here. * * ## Why the deny-list comes first * * Retrying something that may have LANDED would double-charge the user and give * the agent the same question twice — the session is stateful and the prompt * POST carries no idempotency key. Anything that could have failed on the * RESPONSE leg (network drops, timeouts, 5xx) is therefore excluded outright, * including the shapes fe-libs' own `executeSandboxGraphQL` has already retried * three times before we ever see them. */ /** * Is this error a rejection of the request BODY that we should retry without * the multimodal parts? */ export declare function isMultimodalBodyRejection(error: unknown): boolean; export declare function isRecoverableAssistantError(error: unknown): boolean; //# sourceMappingURL=transportErrors.d.ts.map