earendil-works/pi · error
info.friendlyMessage || info.message
Error message
info.friendlyMessage || info.message
What it means
Error "info.friendlyMessage || info.message" thrown in earendil-works/pi.
Source
Thrown at packages/ai/src/api/openai-codex-responses.ts:433
const errorText = await response.text();
if (attempt < maxRetries && isRetryableError(response.status, errorText)) {
const retryAfterDelayMs = getRetryAfterDelayMs(response.headers);
const delayMs =
retryAfterDelayMs === undefined
? BASE_DELAY_MS * 2 ** attempt
: validateRetryDelayMs(retryAfterDelayMs, options);
await sleep(delayMs, options?.signal);
continue;
}
// Parse error for friendly message on final attempt or non-retryable error
const fakeResponse = new Response(errorText, {
status: response.status,
statusText: response.statusText,
});
const info = await parseErrorResponse(fakeResponse);
throw new Error(info.friendlyMessage || info.message);
} catch (error) {
if (error instanceof Error) {
if (error.name === "AbortError" || error.message === "Request was aborted") {
throw new Error("Request was aborted");
}
}
lastError = error instanceof Error ? error : new Error(String(error));
// Network errors are retryable
if (
attempt < maxRetries &&
!(lastError instanceof RetryDelayExceededError) &&
!lastError.message.includes("usage limit")
) {
const delayMs = BASE_DELAY_MS * 2 ** attempt;
await sleep(delayMs, options?.signal);
continue;
}
throw lastError;View on GitHub (pinned to 4af9d21d3b)
Solutions
- Surface info.friendlyMessage or info.message to the user; it carries the failure detail.
When it happens
Trigger: Thrown at packages/ai/src/api/openai-codex-responses.ts:433 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24).
Data as JSON: /api/errors/68d8f6fc30808603.
Report an issue: GitHub.