{"version":3,"file":"pi-ai-Cy_BRMmd.mjs","names":["sleep","createSetupErrorMessage","hasResult","forwardStream","lazyStream","lazyApi","lazyStream","AssistantMessageEventStream","getProviderEnvValue","stream","AssistantMessageEventStream","streamSimple","clampThinkingLevel","DEFAULT_POLL_INTERVAL_SECONDS","CLIENT_ID","AUTHORIZE_URL","TOKEN_URL","REDIRECT_URI","DEVICE_CODE_TIMEOUT_SECONDS","parseAuthorizationInput","exchangeAuthorizationCode","decode","CLIENT_ID","values","CLIENT_ID","codexFlow","anthropicFlow","copilotFlow","kimiFlow"],"sources":["../src/compat/vendor/pi-uuid.ts","../src/compat/vendor/pi-ai-retry.ts","../src/compat/vendor/pi-ai-overflow.ts","../src/compat/vendor/pi-ai-event-stream.ts","../src/compat/vendor/pi-ai-lazy.ts","../src/compat/vendor/pi-ai-provider.ts","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.js","../src/compat/vendor/pi-oauth-flows/provider-env.ts","../src/compat/vendor/pi-oauth-flows/device-code.ts","../src/compat/vendor/pi-oauth-flows/oauth-page.ts","../src/compat/vendor/pi-oauth-flows/pkce.ts","../src/compat/vendor/pi-oauth-flows/openai-codex.ts","../src/compat/vendor/pi-oauth-flows/anthropic.ts","../src/compat/vendor/pi-oauth-flows/data/github-copilot.json","../src/compat/vendor/pi-oauth-flows/model-catalog.ts","../src/compat/vendor/pi-oauth-flows/github-copilot.models.ts","../src/compat/vendor/pi-oauth-flows/github-copilot.ts","../src/compat/vendor/pi-oauth-flows/kimi-coding.ts","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/anthropic-messages.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/openai-completions.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/openai-responses.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/openai-codex-responses.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/azure-openai-responses.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/google-generative-ai.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/google-vertex.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/mistral-conversations.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/bedrock-converse-stream.lazy.js","../node_modules/.pnpm/@earendil-works+pi-ai@0.84.1_ws@8.21.3_zod@4.4.3/node_modules/@earendil-works/pi-ai/dist/api/pi-messages.lazy.js","../src/compat/pi-ai.ts"],"sourcesContent":["// @ts-nocheck — vendored Pi source; checked upstream under Pi's own tsconfig.\nlet lastTimestamp = -Infinity;\nlet sequence = 0;\n\nfunction fillRandomBytes(bytes: Uint8Array<ArrayBuffer>): void {\n\tif (globalThis.crypto?.getRandomValues) {\n\t\tglobalThis.crypto.getRandomValues(bytes);\n\t\treturn;\n\t}\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbytes[i] = Math.floor(Math.random() * 256);\n\t}\n}\n\n/** Generate a time-ordered UUIDv7. */\nexport function uuidv7(): string {\n\tconst random = new Uint8Array(16);\n\tfillRandomBytes(random);\n\tconst timestamp = Date.now();\n\n\tif (timestamp > lastTimestamp) {\n\t\tsequence = random[6] * 0x1000000 + random[7] * 0x10000 + random[8] * 0x100 + random[9];\n\t\tlastTimestamp = timestamp;\n\t} else {\n\t\tsequence = (sequence + 1) >>> 0;\n\t\tif (sequence === 0) lastTimestamp++;\n\t}\n\n\tconst bytes = new Uint8Array(16);\n\tbytes[0] = (lastTimestamp / 0x10000000000) & 0xff;\n\tbytes[1] = (lastTimestamp / 0x100000000) & 0xff;\n\tbytes[2] = (lastTimestamp / 0x1000000) & 0xff;\n\tbytes[3] = (lastTimestamp / 0x10000) & 0xff;\n\tbytes[4] = (lastTimestamp / 0x100) & 0xff;\n\tbytes[5] = lastTimestamp & 0xff;\n\tbytes[6] = 0x70 | ((sequence >>> 28) & 0x0f);\n\tbytes[7] = (sequence >>> 20) & 0xff;\n\tbytes[8] = 0x80 | ((sequence >>> 14) & 0x3f);\n\tbytes[9] = (sequence >>> 6) & 0xff;\n\tbytes[10] = ((sequence & 0x3f) << 2) | (random[10] & 0x03);\n\tbytes[11] = random[11];\n\tbytes[12] = random[12];\n\tbytes[13] = random[13];\n\tbytes[14] = random[14];\n\tbytes[15] = random[15];\n\n\tconst hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\"));\n\treturn `${hex.slice(0, 4).join(\"\")}-${hex.slice(4, 6).join(\"\")}-${hex.slice(6, 8).join(\"\")}-${hex.slice(8, 10).join(\"\")}-${hex.slice(10, 16).join(\"\")}`;\n}\n","// @ts-nocheck — vendored Pi source; checked upstream under Pi's own tsconfig.\nimport type { AssistantMessage } from \"./pi-types.ts\";\n\nfunction buildProviderErrorPattern(patterns: readonly string[]): RegExp {\n\treturn new RegExp(patterns.join(\"|\"), \"i\");\n}\n\nconst NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN = buildProviderErrorPattern([\n\t// OpenCode Go/free-tier limits returned as 429 JSON error types by OpenCode's\n\t// Zen API. These are subscription/account limits, not transient throttles.\n\t\"GoUsageLimitError\",\n\t\"FreeUsageLimitError\",\n\n\t// OpenCode Go subscription-limit text asks users to enable available-balance\n\t// usage after rolling/weekly/monthly limits are reached.\n\t\"Monthly usage limit reached\",\n\t\"available balance\",\n\n\t// Generic quota/budget/billing exhaustion. `insufficient_quota` is OpenAI's\n\t// quota/billing error code; the other strings cover common gateway wording.\n\t\"insufficient_quota\",\n\t\"out of budget\",\n\t\"quota exceeded\",\n\t\"billing\",\n]);\n\nconst RETRYABLE_PROVIDER_ERROR_PATTERN = buildProviderErrorPattern([\n\t// Generic provider load, HTTP status, and server-side transient failures.\n\t\"overloaded\",\n\t\"rate.?limit\",\n\t\"too many requests\",\n\t\"429\",\n\t\"500\",\n\t\"502\",\n\t\"503\",\n\t\"504\",\n\t\"524\",\n\t\"service.?unavailable\",\n\t\"server.?error\",\n\t\"internal.?error\",\n\n\t// Wrapper/provider text for transient upstream failures, including OpenRouter\n\t// \"Provider returned error\" responses (#2264).\n\t\"provider.?returned.?error\",\n\t\"exceeded request buffer limit while retrying upstream\",\n\n\t// Network, proxy, and fetch transport failures. This includes OpenAI Codex\n\t// raw-fetch failures such as \"upstream connect\", \"connection refused\", and\n\t// \"reset before headers\" (#733), plus OpenRouter connection drops (#3317).\n\t\"network.?error\",\n\t\"connection.?error\",\n\t\"connection.?refused\",\n\t\"connection.?lost\",\n\t\"other side closed\",\n\t\"fetch failed\",\n\t\"getaddrinfo\",\n\t\"ENOTFOUND\",\n\t\"EAI_AGAIN\",\n\t\"upstream.?connect\",\n\t\"reset before headers\",\n\t\"socket hang up\",\n\t\"socket connection was closed\",\n\t\"timed? out\",\n\t\"timeout\",\n\t\"terminated\",\n\n\t// WebSocket transports can report close/error text instead of HTTP/fetch text.\n\t\"websocket.?closed\",\n\t\"websocket.?error\",\n\n\t// Premature stream endings from SDKs and transports. Anthropic can throw\n\t// \"stream ended without ...\" and \"Anthropic stream ended before message_stop\"\n\t// (#4433); Bedrock/Smithy can throw an HTTP/2 no-response error (#3594).\n\t\"ended without\",\n\t\"stream ended before message_stop\",\n\t\"stream ended before a terminal response event\",\n\t\"http2 request did not get a response\",\n\n\t// Provider-requested retry delay cap failures should flow through the outer\n\t// retry policy so callers can surface/abort the backoff (#1123).\n\t\"retry delay\",\n\n\t// Explicit retry guidance emitted mid-stream by OpenAI Responses and Bedrock\n\t// stream exceptions (#6019).\n\t\"you can retry your request\",\n\t\"try your request again\",\n\t\"please retry your request\",\n\n\t// gRPC based providers (e.g. NVIDIA NIM)\n\t\"ResourceExhausted\",\n]);\n\n/**\n * Retry policy: bounded attempts with exponential backoff (`baseDelayMs * 2^(attempt-1)`).\n * Matches `settings.retry` (`enabled`, `maxRetries`, `baseDelayMs`) in coding-agent; kept\n * here so the classifier and the policy-driven retry loop live together and stay reusable\n * by the SDK and other callers.\n */\nexport interface RetryPolicy {\n\tenabled: boolean;\n\t/** Max retry attempts (0 = no retries). The initial call never counts as a retry. */\n\tmaxRetries: number;\n\t/** Base delay in ms. Per-attempt delay is `baseDelayMs * 2^(attempt-1)` before jitter. */\n\tbaseDelayMs: number;\n}\n\n/** Optional callbacks emitted by {@link retryAssistantCall} around each retry. */\nexport interface RetryCallbacks {\n\t/** Emitted before the backoff sleep of each retry attempt (1-indexed). */\n\tonRetryScheduled?: (\n\t\tattempt: number,\n\t\tmaxAttempts: number,\n\t\tdelayMs: number,\n\t\terrorMessage: string,\n\t) => void | Promise<void>;\n\t/** Emitted after the backoff sleep, immediately before the retried call starts. */\n\tonRetryAttemptStart?: () => void | Promise<void>;\n\t/** Emitted once when the loop ends: success if a later call completed normally. */\n\tonRetryFinished?: (success: boolean, attempt: number, finalError?: string) => void | Promise<void>;\n}\n\nclass RetrySleepAbortError extends Error {\n\tconstructor() {\n\t\tsuper(\"Aborted\");\n\t}\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new RetrySleepAbortError());\n\t\t\treturn;\n\t\t}\n\t\tconst timeout = setTimeout(resolve, ms);\n\t\tsignal?.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\treject(new RetrySleepAbortError());\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\n/**\n * Run a single assistant-producing call with bounded retry on transient errors.\n *\n * Behavior:\n * - A successful response is returned immediately. Aborts are terminal and never\n *   retried, but reported as unsuccessful if they happen after a retry was scheduled.\n *   Aborts during the backoff sleep are normalized to an aborted `AssistantMessage`\n *   too, so callers do not need to care when cancellation happened.\n * - A non-retryable error (per {@link isRetryableAssistantError}, including quota/\n *   billing exhaustion) is returned immediately so deterministic errors fail fast.\n * - Otherwise retries up to `maxRetries` times with exponential backoff, emitting\n *   `onRetryScheduled` before each sleep, `onRetryAttemptStart` after each sleep before\n *   the retried call starts, and `onRetryFinished` once at the end (whether the loop\n *   ends in success, exhausted retries, or an aborted backoff).\n *\n * When `policy` is undefined or disabled, the first response is returned unchanged\n * (equivalent to calling `produce()` directly).\n */\nexport async function retryAssistantCall(\n\tproduce: () => Promise<AssistantMessage>,\n\tpolicy: RetryPolicy | undefined,\n\tsignal: AbortSignal | undefined,\n\tcallbacks?: RetryCallbacks,\n): Promise<AssistantMessage> {\n\tconst maxAttempts = policy?.enabled ? policy.maxRetries : 0;\n\n\tlet attempt = 0;\n\tlet lastRetry: { attempt: number; errorMessage: string } | undefined;\n\tfor (;;) {\n\t\tconst response = await produce();\n\n\t\t// Abort: terminal but not successful. Never retry an aborted message.\n\t\tif (response.stopReason === \"aborted\") {\n\t\t\tif (lastRetry) await callbacks?.onRetryFinished?.(false, lastRetry.attempt);\n\t\t\treturn response;\n\t\t}\n\n\t\t// Success: non-error, non-abort responses return as-is.\n\t\tif (response.stopReason !== \"error\") {\n\t\t\tif (lastRetry) await callbacks?.onRetryFinished?.(true, lastRetry.attempt);\n\t\t\treturn response;\n\t\t}\n\n\t\t// Non-retryable, or budget exhausted: return the final error message.\n\t\tif (attempt >= maxAttempts || !isRetryableAssistantError(response)) {\n\t\t\tif (lastRetry) await callbacks?.onRetryFinished?.(false, lastRetry.attempt, response.errorMessage);\n\t\t\treturn response;\n\t\t}\n\n\t\tattempt++;\n\t\tlastRetry = { attempt, errorMessage: response.errorMessage || \"Unknown error\" };\n\t\tconst delayMs = policy!.baseDelayMs * 2 ** (attempt - 1);\n\t\tawait callbacks?.onRetryScheduled?.(attempt, maxAttempts, delayMs, lastRetry.errorMessage);\n\n\t\t// Normalize aborts during retry backoff to the same AssistantMessage shape as\n\t\t// provider stream aborts, so callers do not need to care when cancellation happened.\n\t\ttry {\n\t\t\tawait sleep(delayMs, signal);\n\t\t} catch (error) {\n\t\t\tawait callbacks?.onRetryFinished?.(false, attempt, lastRetry.errorMessage);\n\t\t\tif (error instanceof RetrySleepAbortError) {\n\t\t\t\treturn { ...response, stopReason: \"aborted\", errorMessage: undefined };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t\tawait callbacks?.onRetryAttemptStart?.();\n\t}\n}\n\n/**\n * Classifies whether a failed assistant message looks like a transient provider\n * or transport error, so callers can decide if the last assistant turn should be\n * restarted.\n *\n * This does not implement retry policy. Callers should first handle context\n * overflow separately, then apply their own retry budget, backoff, and reporting\n * before restarting the assistant turn.\n */\nexport function isRetryableAssistantError(message: AssistantMessage): boolean {\n\tif (message.stopReason !== \"error\" || !message.errorMessage) return false;\n\tconst errorMessage = message.errorMessage;\n\tif (NON_RETRYABLE_PROVIDER_LIMIT_ERROR_PATTERN.test(errorMessage)) return false;\n\treturn RETRYABLE_PROVIDER_ERROR_PATTERN.test(errorMessage);\n}\n","// @ts-nocheck — vendored Pi source; checked upstream under Pi's own tsconfig.\nimport type { AssistantMessage } from \"./pi-types.ts\";\n\n/**\n * Regex patterns to detect context overflow errors from different providers.\n *\n * These patterns match error messages returned when the input exceeds\n * the model's context window.\n *\n * Provider-specific patterns (with example error messages):\n *\n * - Anthropic: \"prompt is too long: 213462 tokens > 200000 maximum\"\n * - Anthropic: \"413 {\\\"error\\\":{\\\"type\\\":\\\"request_too_large\\\",\\\"message\\\":\\\"Request exceeds the maximum size\\\"}}\"\n * - OpenAI: \"Your input exceeds the context window of this model\"\n * - OpenAI/LiteLLM: \"Requested token count exceeds the model's maximum context length of 131072 tokens\"\n * - OpenAI-compatible: \"Input length (265330) exceeds model's maximum context length (262144).\"\n * - Google: \"The input token count (1196265) exceeds the maximum number of tokens allowed (1048575)\"\n * - xAI: \"This model's maximum prompt length is 131072 but the request contains 537812 tokens\"\n * - Groq: \"Please reduce the length of the messages or completion\"\n * - OpenRouter: \"This endpoint's maximum context length is X tokens. However, you requested about Y tokens\"\n * - OpenRouter/Poolside: \"Input length X exceeds the maximum allowed input length of Y tokens.\"\n * - Together AI: \"The input (X tokens) is longer than the model's context length (Y tokens).\"\n * - llama.cpp: \"the request exceeds the available context size, try increasing it\"\n * - LM Studio: \"tokens to keep from the initial prompt is greater than the context length\"\n * - GitHub Copilot: \"prompt token count of X exceeds the limit of Y\"\n * - MiniMax: \"invalid params, context window exceeds limit\"\n * - Kimi For Coding: \"Your request exceeded model token limit: X (requested: Y)\"\n * - DS4: \"Prompt has X tokens, but the configured context size is Y tokens\"\n * - Cerebras: \"400/413 status code (no body)\"\n * - Mistral: \"Prompt contains X tokens ... too large for model with Y maximum context length\"\n * - z.ai: Does NOT error, accepts overflow silently - handled via usage.input > contextWindow\n * - Xiaomi MiMo: Truncates input to fill contextWindow exactly, then returns finish_reason \"length\"\n *   with output=0 (no room left to generate). Detected via stopReason \"length\" + zero output +\n *   input filling the context window.\n * - DashScope/Qwen: \"Range of input length should be [1, X]\" (HTTP 400 invalid_parameter_error)\n * - Ollama: Some deployments truncate silently, others return errors like \"prompt too long; exceeded max context length by X tokens\"\n */\nconst OVERFLOW_PATTERNS = [\n\t/prompt is too long/i, // Anthropic token overflow\n\t/request_too_large/i, // Anthropic request byte-size overflow (HTTP 413)\n\t/input is too long for requested model/i, // Amazon Bedrock\n\t/exceeds the context window/i, // OpenAI (Completions & Responses API)\n\t/exceeds (?:the )?(?:model'?s )?maximum context length(?: of [\\d,]+ tokens?|\\s*\\([\\d,]+\\))/i, // OpenAI-compatible proxies (LiteLLM)\n\t/input token count.*exceeds the maximum/i, // Google (Gemini)\n\t/maximum prompt length is \\d+/i, // xAI (Grok)\n\t/reduce the length of the messages/i, // Groq\n\t/maximum context length is \\d+ tokens/i, // OpenRouter (most backends)\n\t/exceeds (?:the )?maximum allowed input length of [\\d,]+ tokens?/i, // OpenRouter/Poolside\n\t/input \\(\\d+ tokens\\) is longer than the model'?s context length \\(\\d+ tokens\\)/i, // Together AI\n\t/exceeds the limit of \\d+/i, // GitHub Copilot\n\t/exceeds the available context size/i, // llama.cpp server\n\t/greater than the context length/i, // LM Studio\n\t/context window exceeds limit/i, // MiniMax\n\t/exceeded model token limit/i, // Kimi For Coding\n\t/too large for model with \\d+ maximum context length/i, // Mistral\n\t/prompt has [\\d,]+ tokens?, but the configured context size is [\\d,]+ tokens?/i, // DS4 server\n\t/model_context_window_exceeded/i, // z.ai non-standard finish_reason surfaced as error text\n\t/prompt too long; exceeded (?:max )?context length/i, // Ollama explicit overflow error\n\t/range of input length should be/i, // DashScope / Qwen Token Plan\n\t/context[_ ]length[_ ]exceeded/i, // Generic fallback\n\t/too many tokens/i, // Generic fallback\n\t/token limit exceeded/i, // Generic fallback\n\t/^4(?:00|13)\\s*(?:status code)?\\s*\\(no body\\)/i, // Cerebras: 400/413 with no body\n];\n\n/**\n * Patterns that indicate non-overflow errors (e.g. rate limiting, server errors).\n * Error messages matching any of these are excluded from overflow detection\n * even if they also match an OVERFLOW_PATTERN.\n *\n * Example: Bedrock formats throttling errors as \"ThrottlingException: Too many tokens,\n * please wait before trying again.\" which would match the /too many tokens/i overflow\n * pattern without this exclusion.\n */\nconst NON_OVERFLOW_PATTERNS = [\n\t/^(Throttling error|Service unavailable):/i, // AWS Bedrock non-overflow errors (human-readable prefixes from formatBedrockError)\n\t/rate limit/i, // Generic rate limiting\n\t/too many requests/i, // Generic HTTP 429 style\n];\n\n/**\n * Check if an assistant message represents a context overflow error.\n *\n * This handles three cases:\n * 1. Error-based overflow: Most providers return stopReason \"error\" with a\n *    specific error message pattern.\n * 2. Silent overflow: Some providers accept overflow requests and return\n *    successfully. For these, we check if usage.input exceeds the context window.\n * 3. Length-stop overflow: Xiaomi MiMo can return \"length\" with zero output when\n *    the input fills the context window.\n *\n * ## Reliability by Provider\n *\n * **Reliable detection (returns error with detectable message):**\n * - Anthropic: \"prompt is too long: X tokens > Y maximum\" or \"request_too_large\"\n * - OpenAI (Completions & Responses): \"exceeds the context window\", \"exceeds the model's maximum context length of X tokens\", or \"exceeds model's maximum context length (X)\"\n * - Google Gemini: \"input token count exceeds the maximum\"\n * - xAI (Grok): \"maximum prompt length is X but request contains Y\"\n * - Groq: \"reduce the length of the messages\"\n * - Cerebras: 400/413 status code (no body)\n * - Mistral: \"Prompt contains X tokens ... too large for model with Y maximum context length\"\n * - OpenRouter (most backends): \"maximum context length is X tokens\"\n * - OpenRouter/Poolside: \"Input length X exceeds the maximum allowed input length of Y tokens.\"\n * - Together AI: \"The input (X tokens) is longer than the model's context length (Y tokens).\"\n * - llama.cpp: \"exceeds the available context size\"\n * - LM Studio: \"greater than the context length\"\n * - Kimi For Coding: \"exceeded model token limit: X (requested: Y)\"\n * - DS4: \"Prompt has X tokens, but the configured context size is Y tokens\"\n * - DashScope/Qwen: \"Range of input length should be [1, X]\"\n *\n * **Unreliable detection:**\n * - z.ai: Sometimes accepts overflow silently (detectable via usage.input > contextWindow),\n *   sometimes returns rate limit errors. Pass contextWindow param to detect silent overflow.\n * - Xiaomi MiMo: Truncates input to fit contextWindow then returns stopReason \"length\" with\n *   output=0. Pass contextWindow param to detect via the \"filled context + zero output\" signal.\n * - Ollama: May truncate input silently for some setups, but may also return explicit\n *   overflow errors that match the patterns above. Silent truncation still cannot be\n *   detected here because we do not know the expected token count.\n *\n * ## Custom Providers\n *\n * If you've added custom models via settings.json, this function may not detect\n * overflow errors from those providers. To add support:\n *\n * 1. Send a request that exceeds the model's context window\n * 2. Check the errorMessage in the response\n * 3. Create a regex pattern that matches the error\n * 4. The pattern should be added to OVERFLOW_PATTERNS in this file, or\n *    check the errorMessage yourself before calling this function\n *\n * @param message - The assistant message to check\n * @param contextWindow - Optional context window size for detecting silent overflow (z.ai)\n * @returns true if the message indicates a context overflow\n */\nexport function isContextOverflow(message: AssistantMessage, contextWindow?: number): boolean {\n\t// Case 1: Check error message patterns\n\tif (message.stopReason === \"error\" && message.errorMessage) {\n\t\t// Skip messages matching known non-overflow patterns (e.g. throttling / rate-limit)\n\t\tconst isNonOverflow = NON_OVERFLOW_PATTERNS.some((p) => p.test(message.errorMessage!));\n\t\tif (!isNonOverflow && OVERFLOW_PATTERNS.some((p) => p.test(message.errorMessage!))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Case 2: Silent overflow (z.ai style) - successful but usage exceeds context\n\tif (contextWindow && message.stopReason === \"stop\") {\n\t\tconst inputTokens = message.usage.input + message.usage.cacheRead;\n\t\tif (inputTokens > contextWindow) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Case 3: Length-stop overflow (Xiaomi MiMo style) - server truncates oversized input\n\t// to fit the context window, leaving no room for output. Returns stopReason \"length\"\n\t// with output=0 and input+cacheRead filling the context window.\n\tif (contextWindow && message.stopReason === \"length\" && message.usage.output === 0) {\n\t\tconst inputTokens = message.usage.input + message.usage.cacheRead;\n\t\tif (inputTokens >= contextWindow * 0.99) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Check whether a length stop ended below the caller or model's intended output limit.\n * Such responses may be caused by context pressure or provider-side truncation, so callers\n * can make one bounded compact-and-retry attempt. `desiredMaxOutput` must be the original\n * limit before any context-based clamping.\n */\nexport function isRecoverableLength(message: AssistantMessage, desiredMaxOutput: number): boolean {\n\treturn message.stopReason === \"length\" && desiredMaxOutput > 0 && message.usage.output < desiredMaxOutput;\n}\n\n/**\n * Get the overflow patterns for testing purposes.\n */\nexport function getOverflowPatterns(): RegExp[] {\n\treturn [...OVERFLOW_PATTERNS];\n}\n","// @ts-nocheck — vendored Pi source (pi-ai utils/event-stream.js @0.84.1, MIT, see ./PI-LICENSE); unchanged.\n// Generic event stream class for async iteration\nexport class EventStream {\n    queue = [];\n    waiting = [];\n    done = false;\n    finalResultPromise;\n    resolveFinalResult;\n    isComplete;\n    extractResult;\n    constructor(isComplete, extractResult) {\n        this.isComplete = isComplete;\n        this.extractResult = extractResult;\n        this.finalResultPromise = new Promise((resolve) => {\n            this.resolveFinalResult = resolve;\n        });\n    }\n    push(event) {\n        if (this.done)\n            return;\n        if (this.isComplete(event)) {\n            this.done = true;\n            this.resolveFinalResult(this.extractResult(event));\n        }\n        // Deliver to waiting consumer or queue it\n        const waiter = this.waiting.shift();\n        if (waiter) {\n            waiter({ value: event, done: false });\n        }\n        else {\n            this.queue.push(event);\n        }\n    }\n    end(result) {\n        this.done = true;\n        if (result !== undefined) {\n            this.resolveFinalResult(result);\n        }\n        // Notify all waiting consumers that we're done\n        while (this.waiting.length > 0) {\n            const waiter = this.waiting.shift();\n            waiter({ value: undefined, done: true });\n        }\n    }\n    async *[Symbol.asyncIterator]() {\n        while (true) {\n            if (this.queue.length > 0) {\n                yield this.queue.shift();\n            }\n            else if (this.done) {\n                return;\n            }\n            else {\n                const result = await new Promise((resolve) => this.waiting.push(resolve));\n                if (result.done)\n                    return;\n                yield result.value;\n            }\n        }\n    }\n    result() {\n        return this.finalResultPromise;\n    }\n}\nexport class AssistantMessageEventStream extends EventStream {\n    constructor() {\n        super((event) => event.type === \"done\" || event.type === \"error\", (event) => {\n            if (event.type === \"done\") {\n                return event.message;\n            }\n            else if (event.type === \"error\") {\n                return event.error;\n            }\n            throw new Error(\"Unexpected event type for final result\");\n        });\n    }\n}\n/** Factory function for AssistantMessageEventStream (for use in extensions) */\nexport function createAssistantMessageEventStream() {\n    return new AssistantMessageEventStream();\n}\n//# sourceMappingURL=event-stream.js.map","// @ts-nocheck — vendored Pi source (pi-ai api/lazy.js @0.84.1, MIT, see ./PI-LICENSE); import remapped, logic unchanged.\nimport { AssistantMessageEventStream } from './pi-ai-event-stream.js';\nfunction createSetupErrorMessage(model, error) {\n    return {\n        role: \"assistant\",\n        content: [],\n        api: model.api,\n        provider: model.provider,\n        model: model.id,\n        usage: {\n            input: 0,\n            output: 0,\n            cacheRead: 0,\n            cacheWrite: 0,\n            totalTokens: 0,\n            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n        },\n        stopReason: \"error\",\n        errorMessage: error instanceof Error ? error.message : String(error),\n        timestamp: Date.now(),\n    };\n}\nfunction hasResult(source) {\n    return typeof source.result === \"function\";\n}\nasync function forwardStream(target, source) {\n    for await (const event of source) {\n        target.push(event);\n    }\n    target.end(hasResult(source) ? await source.result() : undefined);\n}\n/**\n * Returns a stream synchronously while running async setup (auth resolution,\n * lazy module loading) behind it. Setup failures terminate the stream with an\n * error event.\n */\nexport function lazyStream(model, setup) {\n    const outer = new AssistantMessageEventStream();\n    setup()\n        .then((inner) => forwardStream(outer, inner))\n        .catch((error) => {\n        const message = createSetupErrorMessage(model, error);\n        outer.push({ type: \"error\", reason: \"error\", error: message });\n        outer.end(message);\n    });\n    return outer;\n}\nexport function lazyApi(load, capabilities) {\n    const api = {\n        stream: (model, context, options) => lazyStream(model, async () => (await load()).stream(model, context, options)),\n        streamSimple: (model, context, options) => lazyStream(model, async () => (await load()).streamSimple(model, context, options)),\n    };\n    if (capabilities?.fetchDeferred) {\n        api.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {\n            const implementation = await load();\n            if (!implementation.fetchDeferred)\n                throw new Error(\"API does not support deferred responses\");\n            return implementation.fetchDeferred(model, handle, options);\n        });\n    }\n    if (capabilities?.cancelDeferred) {\n        api.cancelDeferred = async (model, handle, options) => {\n            const implementation = await load();\n            if (!implementation.cancelDeferred)\n                throw new Error(\"API cannot cancel deferred responses\");\n            await implementation.cancelDeferred(model, handle, options);\n        };\n    }\n    return api;\n}\n//# sourceMappingURL=lazy.js.map","// @ts-nocheck — vendored Pi source excerpts (pi-ai auth/resolve.js ModelsError + models.js createProvider @0.84.1, MIT, see ./PI-LICENSE); logic unchanged.\nimport { lazyStream } from './pi-ai-lazy.js'\nfunction withCauseDetail(message, cause) {\n    if (cause === undefined || cause === null)\n        return message;\n    const detail = formatThrownValue(cause).trim();\n    if (!detail || message.includes(detail))\n        return message;\n    return `${message}: ${detail}`;\n}\nexport class ModelsError extends Error {\n    code;\n    constructor(code, message, options) {\n        super(withCauseDetail(message, options?.cause), options);\n        this.name = \"ModelsError\";\n        this.code = code;\n    }\n}\n/**\n * Builds a provider from parts. Built-in provider factories and models.json\n * custom providers both go through this. A single `api` streams all models;\n * an `api` map dispatches on `model.api`, and a model whose api has no entry\n * produces a stream error.\n */\nexport function createProvider(input) {\n    const baselineModels = input.models;\n    let dynamicModels = [];\n    const fetchModels = input.fetchModels;\n    const currentModels = () => {\n        const merged = [...baselineModels];\n        for (const model of dynamicModels) {\n            const index = merged.findIndex((entry) => entry.id === model.id);\n            if (index >= 0)\n                merged[index] = model;\n            else\n                merged.push(model);\n        }\n        return merged;\n    };\n    const single = typeof input.api.stream === \"function\" ? input.api : undefined;\n    const byApi = single ? undefined : input.api;\n    const apiFor = (model) => single ?? byApi?.[model.api];\n    const dispatch = (model, run) => {\n        const streams = apiFor(model);\n        if (!streams) {\n            return lazyStream(model, async () => {\n                throw new ModelsError(\"stream\", `Provider ${input.id} has no API implementation for \"${model.api}\"`);\n            });\n        }\n        return run(streams);\n    };\n    const provider = {\n        id: input.id,\n        name: input.name ?? input.id,\n        baseUrl: input.baseUrl,\n        headers: input.headers,\n        auth: input.auth,\n        getModels: currentModels,\n        refreshModels: fetchModels\n            ? async (context) => {\n                if (context.stored) {\n                    const restored = context.stored.models\n                        .filter((model) => model.provider === input.id)\n                        .map((model) => model);\n                    if (!(await context.publish({\n                        update: () => {\n                            dynamicModels = restored;\n                        },\n                    }))) {\n                        return;\n                    }\n                }\n                if (!context.allowNetwork || context.signal.aborted)\n                    return;\n                const refreshed = await fetchModels(context);\n                if (context.signal.aborted)\n                    return;\n                await context.publish({\n                    persist: { models: refreshed, checkedAt: Date.now() },\n                    update: () => {\n                        dynamicModels = refreshed;\n                    },\n                });\n            }\n            : undefined,\n        filterModels: input.filterModels,\n        stream: (model, context, options) => dispatch(model, (streams) => streams.stream(model, context, options)),\n        streamSimple: (model, context, options) => dispatch(model, (streams) => streams.streamSimple(model, context, options)),\n    };\n    const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);\n    if (streams.some((entry) => entry.fetchDeferred !== undefined)) {\n        provider.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {\n            const implementation = apiFor(model);\n            if (!implementation?.fetchDeferred) {\n                throw new ModelsError(\"provider\", `Provider ${input.id} does not support deferred responses for \"${model.api}\"`);\n            }\n            return implementation.fetchDeferred(model, handle, options);\n        });\n    }\n    if (streams.some((entry) => entry.cancelDeferred !== undefined)) {\n        provider.cancelDeferred = async (model, handle, options) => {\n            const implementation = apiFor(model);\n            if (!implementation?.cancelDeferred) {\n                throw new ModelsError(\"provider\", `Provider ${input.id} cannot cancel deferred responses for \"${model.api}\"`);\n            }\n            await implementation.cancelDeferred(model, handle, options);\n        };\n    }\n    return provider;\n}\n","import { AssistantMessageEventStream } from \"../utils/event-stream.js\";\nfunction createSetupErrorMessage(model, error) {\n    return {\n        role: \"assistant\",\n        content: [],\n        api: model.api,\n        provider: model.provider,\n        model: model.id,\n        usage: {\n            input: 0,\n            output: 0,\n            cacheRead: 0,\n            cacheWrite: 0,\n            totalTokens: 0,\n            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n        },\n        stopReason: \"error\",\n        errorMessage: error instanceof Error ? error.message : String(error),\n        timestamp: Date.now(),\n    };\n}\nfunction hasResult(source) {\n    return typeof source.result === \"function\";\n}\nasync function forwardStream(target, source) {\n    for await (const event of source) {\n        target.push(event);\n    }\n    target.end(hasResult(source) ? await source.result() : undefined);\n}\n/**\n * Returns a stream synchronously while running async setup (auth resolution,\n * lazy module loading) behind it. Setup failures terminate the stream with an\n * error event.\n */\nexport function lazyStream(model, setup) {\n    const outer = new AssistantMessageEventStream();\n    setup()\n        .then((inner) => forwardStream(outer, inner))\n        .catch((error) => {\n        const message = createSetupErrorMessage(model, error);\n        outer.push({ type: \"error\", reason: \"error\", error: message });\n        outer.end(message);\n    });\n    return outer;\n}\nexport function lazyApi(load, capabilities) {\n    const api = {\n        stream: (model, context, options) => lazyStream(model, async () => (await load()).stream(model, context, options)),\n        streamSimple: (model, context, options) => lazyStream(model, async () => (await load()).streamSimple(model, context, options)),\n    };\n    if (capabilities?.fetchDeferred) {\n        api.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {\n            const implementation = await load();\n            if (!implementation.fetchDeferred)\n                throw new Error(\"API does not support deferred responses\");\n            return implementation.fetchDeferred(model, handle, options);\n        });\n    }\n    if (capabilities?.cancelDeferred) {\n        api.cancelDeferred = async (model, handle, options) => {\n            const implementation = await load();\n            if (!implementation.cancelDeferred)\n                throw new Error(\"API cannot cancel deferred responses\");\n            await implementation.cancelDeferred(model, handle, options);\n        };\n    }\n    return api;\n}\n//# sourceMappingURL=lazy.js.map","import OpenAI from \"openai\";\nimport { clampThinkingLevel } from \"../models.js\";\nimport { splitDeferredTools } from \"../utils/deferred-tools.js\";\nimport { formatProviderError, normalizeProviderError } from \"../utils/error-body.js\";\nimport { AssistantMessageEventStream } from \"../utils/event-stream.js\";\nimport { headersToRecord } from \"../utils/headers.js\";\nimport { getProviderEnvValue } from \"../utils/provider-env.js\";\nimport { retryProviderRequest } from \"../utils/provider-retry.js\";\nimport { createGrammarToolInputProperties } from \"./constrained-sampling.js\";\nimport { buildCopilotDynamicHeaders, hasCopilotVisionInput } from \"./github-copilot-headers.js\";\nimport { clampOpenAIPromptCacheKey } from \"./openai-prompt-cache.js\";\nimport { convertResponsesMessages, convertResponsesTools, processResponsesStream } from \"./openai-responses-shared.js\";\nimport { buildBaseOptions } from \"./simple-options.js\";\nconst OPENAI_TOOL_CALL_PROVIDERS = new Set([\"openai\", \"openai-codex\", \"opencode\"]);\n// OpenAI Responses rejects max_output_tokens below 16: https://github.com/earendil-works/pi/issues/6265\nconst OPENAI_RESPONSES_MIN_OUTPUT_TOKENS = 16;\nfunction hasHeader(headers, name) {\n    if (!headers)\n        return false;\n    const expected = name.toLowerCase();\n    for (const [key, value] of Object.entries(headers)) {\n        if (key.toLowerCase() === expected && value !== null && value.trim().length > 0)\n            return true;\n    }\n    return false;\n}\nfunction getClientApiKey(provider, apiKey, headers) {\n    if (apiKey)\n        return apiKey;\n    if (hasHeader(headers, \"authorization\") || hasHeader(headers, \"cf-aig-authorization\"))\n        return \"unused\";\n    throw new Error(`No API key for provider: ${provider}`);\n}\nfunction detectSessionAffinityFormat(model) {\n    return model.provider === \"openrouter\" || model.baseUrl.includes(\"openrouter.ai\") ? \"openrouter\" : \"openai\";\n}\n/**\n * Resolve cache retention preference.\n * Defaults to \"short\" and uses PI_CACHE_RETENTION for backward compatibility.\n */\nfunction resolveCacheRetention(cacheRetention, env) {\n    if (cacheRetention) {\n        return cacheRetention;\n    }\n    if (getProviderEnvValue(\"PI_CACHE_RETENTION\", env) === \"long\") {\n        return \"long\";\n    }\n    return \"short\";\n}\nfunction getCompat(model) {\n    return {\n        supportsDeveloperRole: model.compat?.supportsDeveloperRole ?? true,\n        sessionAffinityFormat: model.compat?.sessionAffinityFormat ?? detectSessionAffinityFormat(model),\n        supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,\n        supportsStrictMode: model.compat?.supportsStrictMode ?? false,\n        supportsOpenAIGrammarTools: model.compat?.supportsOpenAIGrammarTools ?? false,\n        supportsToolSearch: model.compat?.supportsToolSearch ?? false,\n        supportsExplicitPromptCacheMode: model.compat?.supportsExplicitPromptCacheMode ?? false,\n    };\n}\nfunction getPromptCacheRetention(compat, cacheRetention) {\n    return cacheRetention === \"long\" && compat.supportsLongCacheRetention ? \"24h\" : undefined;\n}\nfunction formatOpenAIResponsesError(error) {\n    return formatProviderError(normalizeProviderError(error), \"OpenAI API error\");\n}\n/**\n * Generate function for OpenAI Responses API\n */\nexport const stream = (model, context, options) => {\n    const stream = new AssistantMessageEventStream();\n    // Start async processing\n    (async () => {\n        const output = {\n            role: \"assistant\",\n            content: [],\n            api: model.api,\n            provider: model.provider,\n            model: model.id,\n            usage: {\n                input: 0,\n                output: 0,\n                cacheRead: 0,\n                cacheWrite: 0,\n                totalTokens: 0,\n                cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n            },\n            stopReason: \"pending\",\n            timestamp: Date.now(),\n        };\n        try {\n            // Create OpenAI client\n            const apiKey = getClientApiKey(model.provider, options?.apiKey, options?.headers);\n            const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);\n            const cacheSessionId = cacheRetention === \"none\" ? undefined : options?.sessionId;\n            const compat = getCompat(model);\n            const grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools);\n            const client = createClient(model, context, apiKey, options?.headers, options?.fetch, cacheSessionId);\n            let params = buildParams(model, context, options, compat, grammarToolInputProperties);\n            const nextParams = await options?.onPayload?.(params, model);\n            if (nextParams !== undefined) {\n                params = nextParams;\n            }\n            const requestOptions = {\n                ...(options?.signal ? { signal: options.signal } : {}),\n                ...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),\n                maxRetries: 0,\n            };\n            const { data: openaiStream, response } = await retryProviderRequest(() => client.responses.create(params, requestOptions).withResponse(), {\n                maxRetries: options?.maxRetries,\n                maxRetryDelayMs: options?.maxRetryDelayMs,\n                signal: options?.signal,\n            });\n            await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);\n            stream.push({ type: \"start\", partial: output });\n            await processResponsesStream(openaiStream, output, stream, model, {\n                serviceTier: options?.serviceTier,\n                grammarToolInputProperties,\n                applyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),\n            });\n            if (options?.signal?.aborted) {\n                throw new Error(\"Request was aborted\");\n            }\n            if (output.stopReason === \"pending\") {\n                throw new Error(\"OpenAI Responses stream ended without a stop reason\");\n            }\n            if (output.stopReason === \"aborted\" || output.stopReason === \"error\") {\n                throw new Error(output.errorMessage || \"An unknown error occurred\");\n            }\n            stream.push({ type: \"done\", reason: output.stopReason, message: output });\n            stream.end();\n        }\n        catch (error) {\n            for (const block of output.content) {\n                delete block.index;\n                // Streaming scratch buffers are only used during parsing; never persist them.\n                delete block.partialJson;\n                delete block.customInput;\n            }\n            output.stopReason = options?.signal?.aborted ? \"aborted\" : \"error\";\n            output.errorMessage = formatOpenAIResponsesError(error);\n            stream.push({ type: \"error\", reason: output.stopReason, error: output });\n            stream.end();\n        }\n    })();\n    return stream;\n};\nexport const streamSimple = (model, context, options) => {\n    getClientApiKey(model.provider, options?.apiKey, options?.headers);\n    const base = buildBaseOptions(model, context, options, options?.apiKey);\n    const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined;\n    const reasoningEffort = clampedReasoning === \"off\" ? undefined : clampedReasoning;\n    return stream(model, context, {\n        ...base,\n        reasoningEffort,\n    });\n};\nfunction createClient(model, context, apiKey, optionsHeaders, fetch, sessionId) {\n    const compat = getCompat(model);\n    const headers = { ...model.headers };\n    if (model.provider === \"github-copilot\") {\n        const hasImages = hasCopilotVisionInput(context.messages);\n        const copilotHeaders = buildCopilotDynamicHeaders({\n            messages: context.messages,\n            hasImages,\n        });\n        Object.assign(headers, copilotHeaders);\n    }\n    if (sessionId) {\n        if (compat.sessionAffinityFormat === \"openrouter\") {\n            headers[\"x-session-id\"] = sessionId;\n        }\n        else {\n            if (compat.sessionAffinityFormat === \"openai\") {\n                headers.session_id = sessionId;\n            }\n            headers[\"x-client-request-id\"] = sessionId;\n        }\n    }\n    // Merge options headers last so they can override defaults\n    if (optionsHeaders) {\n        Object.assign(headers, optionsHeaders);\n    }\n    return new OpenAI({\n        apiKey,\n        baseURL: model.baseUrl,\n        dangerouslyAllowBrowser: true,\n        fetch,\n        defaultHeaders: headers,\n    });\n}\nfunction buildParams(model, context, options, compat = getCompat(model), grammarToolInputProperties = createGrammarToolInputProperties(context.tools, compat.supportsOpenAIGrammarTools)) {\n    const toolPlacement = splitDeferredTools(context, compat.supportsToolSearch);\n    const messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS, {\n        grammarToolInputProperties,\n        deferredTools: toolPlacement.deferred,\n        toolOptions: {\n            supportsStrictMode: compat.supportsStrictMode,\n            supportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools,\n        },\n    });\n    const cacheRetention = resolveCacheRetention(options?.cacheRetention, options?.env);\n    const disableImplicitPromptCache = cacheRetention === \"none\" && compat.supportsExplicitPromptCacheMode;\n    const params = {\n        model: model.id,\n        input: messages,\n        stream: true,\n        prompt_cache_key: cacheRetention === \"none\" ? undefined : clampOpenAIPromptCacheKey(options?.sessionId),\n        prompt_cache_retention: getPromptCacheRetention(compat, cacheRetention),\n        prompt_cache_options: disableImplicitPromptCache ? { mode: \"explicit\" } : undefined,\n        store: false,\n    };\n    if (options?.maxTokens) {\n        params.max_output_tokens = Math.max(options.maxTokens, OPENAI_RESPONSES_MIN_OUTPUT_TOKENS);\n    }\n    if (options?.temperature !== undefined) {\n        params.temperature = options?.temperature;\n    }\n    if (options?.serviceTier !== undefined) {\n        params.service_tier = options.serviceTier;\n    }\n    if (toolPlacement.immediate.length > 0) {\n        params.tools = convertResponsesTools(toolPlacement.immediate, {\n            supportsStrictMode: compat.supportsStrictMode,\n            supportsOpenAIGrammarTools: compat.supportsOpenAIGrammarTools,\n        });\n    }\n    if (options?.toolChoice !== undefined) {\n        params.tool_choice = options.toolChoice;\n    }\n    if (model.reasoning) {\n        if (options?.reasoningEffort || options?.reasoningSummary) {\n            const effort = options?.reasoningEffort\n                ? (model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort)\n                : \"medium\";\n            params.reasoning = {\n                effort: effort,\n                summary: options?.reasoningSummary || \"auto\",\n            };\n            params.include = [\"reasoning.encrypted_content\"];\n        }\n        else if (model.provider !== \"github-copilot\" && model.thinkingLevelMap?.off !== null) {\n            params.reasoning = {\n                effort: (model.thinkingLevelMap?.off ?? \"none\"),\n            };\n        }\n        if (model.provider === \"xai\")\n            params.include = [\"reasoning.encrypted_content\"];\n    }\n    // Last so custom keys override the named request fields.\n    if (options?.samplingParams) {\n        Object.assign(params, options.samplingParams);\n    }\n    return params;\n}\nfunction getServiceTierCostMultiplier(model, serviceTier) {\n    switch (serviceTier) {\n        case \"flex\":\n            return 0.5;\n        case \"priority\":\n            return model.id === \"gpt-5.5\" ? 2.5 : 2;\n        default:\n            return 1;\n    }\n}\nfunction applyServiceTierPricing(usage, serviceTier, model) {\n    const multiplier = getServiceTierCostMultiplier(model, serviceTier);\n    if (multiplier === 1)\n        return;\n    usage.cost.input *= multiplier;\n    usage.cost.output *= multiplier;\n    usage.cost.cacheRead *= multiplier;\n    usage.cost.cacheWrite *= multiplier;\n    usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n}\n//# sourceMappingURL=openai-responses.js.map","// @ts-nocheck — vendored Pi source (pi-ai utils/provider-env.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\nlet procEnvCache = null;\n/**\n * Fallback for https://github.com/oven-sh/bun/issues/27802.\n * Bun compiled binaries can expose an empty process.env inside Linux sandboxes\n * even though /proc/self/environ contains the environment.\n *\n * This intentionally duplicates restoreSandboxEnv() in\n * packages/coding-agent/src/bun/restore-sandbox-env.ts. The ai package can be\n * used directly, without going through that entrypoint, so provider env lookup\n * must not depend on process.env having been patched.\n */\nfunction getBunSandboxEnvValue(name) {\n    if (typeof process === \"undefined\" || !process.versions?.bun || Object.keys(process.env).length > 0) {\n        return undefined;\n    }\n    if (procEnvCache === null) {\n        procEnvCache = new Map();\n        try {\n            const { readFileSync } = require(\"node:fs\");\n            const data = readFileSync(\"/proc/self/environ\", \"utf-8\");\n            for (const entry of data.split(\"\\0\")) {\n                const idx = entry.indexOf(\"=\");\n                if (idx > 0) {\n                    procEnvCache.set(entry.slice(0, idx), entry.slice(idx + 1));\n                }\n            }\n        }\n        catch {\n            // /proc/self/environ may not exist or may not be readable.\n        }\n    }\n    return procEnvCache.get(name);\n}\n/**\n * Resolve a provider env value from scoped overrides, normal process.env, then\n * the duplicated Bun sandbox fallback for direct pi-ai consumers.\n */\nexport function getProviderEnvValue(name, env) {\n    return (env?.[name] ||\n        (typeof process !== \"undefined\" ? process.env[name] : undefined) ||\n        getBunSandboxEnvValue(name) ||\n        undefined);\n}\n//# sourceMappingURL=provider-env.js.map","// @ts-nocheck — vendored Pi source (pi-ai auth/oauth/device-code.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\nconst CANCEL_MESSAGE = \"Login cancelled\";\nconst TIMEOUT_MESSAGE = \"Device flow timed out\";\nconst SLOW_DOWN_TIMEOUT_MESSAGE = \"Device flow timed out after one or more slow_down responses. This is often caused by clock drift in WSL or VM environments. Please sync or restart the VM clock and try again.\";\nconst MINIMUM_INTERVAL_MS = 1000;\n// RFC 8628 section 3.2: if the authorization server omits `interval`, the client must use 5 seconds.\nconst DEFAULT_POLL_INTERVAL_SECONDS = 5;\n// RFC 8628 section 3.5: `slow_down` means the polling interval must increase by 5 seconds.\nconst SLOW_DOWN_INTERVAL_INCREMENT_MS = 5000;\nfunction abortableSleep(ms, signal, cancelMessage) {\n    return new Promise((resolve, reject) => {\n        if (signal.aborted) {\n            reject(new Error(cancelMessage));\n            return;\n        }\n        const onAbort = () => {\n            clearTimeout(timeout);\n            reject(new Error(cancelMessage));\n        };\n        const timeout = setTimeout(() => {\n            signal.removeEventListener(\"abort\", onAbort);\n            resolve();\n        }, ms);\n        signal.addEventListener(\"abort\", onAbort, { once: true });\n    });\n}\nexport async function pollOAuthDeviceCodeFlow(options) {\n    const deadline = typeof options.expiresInSeconds === \"number\"\n        ? Date.now() + options.expiresInSeconds * 1000\n        : Number.POSITIVE_INFINITY;\n    let intervalMs = Math.max(MINIMUM_INTERVAL_MS, Math.floor((options.intervalSeconds ?? DEFAULT_POLL_INTERVAL_SECONDS) * 1000));\n    let slowDownResponses = 0;\n    if (options.waitBeforeFirstPoll) {\n        const remainingMs = deadline - Date.now();\n        if (remainingMs > 0) {\n            await abortableSleep(Math.min(intervalMs, remainingMs), options.signal, CANCEL_MESSAGE);\n        }\n    }\n    while (Date.now() < deadline) {\n        if (options.signal.aborted) {\n            throw new Error(CANCEL_MESSAGE);\n        }\n        const result = await options.poll();\n        if (result.status === \"complete\") {\n            return result.value;\n        }\n        if (result.status === \"failed\") {\n            throw new Error(result.message);\n        }\n        if (result.status === \"slow_down\") {\n            slowDownResponses += 1;\n            // Use the server-provided interval when given (GitHub reports the new required minimum\n            // in `interval`); trusting only a client-tracked value risks polling early forever under\n            // WSL/VM clock drift. Otherwise apply RFC 8628 section 3.5: increase by 5 seconds.\n            intervalMs =\n                typeof result.intervalSeconds === \"number\" &&\n                    Number.isFinite(result.intervalSeconds) &&\n                    result.intervalSeconds > 0\n                    ? Math.max(MINIMUM_INTERVAL_MS, Math.floor(result.intervalSeconds * 1000))\n                    : Math.max(MINIMUM_INTERVAL_MS, intervalMs + SLOW_DOWN_INTERVAL_INCREMENT_MS);\n        }\n        const remainingMs = deadline - Date.now();\n        if (remainingMs <= 0) {\n            break;\n        }\n        await abortableSleep(Math.min(intervalMs, remainingMs), options.signal, CANCEL_MESSAGE);\n    }\n    throw new Error(slowDownResponses > 0 ? SLOW_DOWN_TIMEOUT_MESSAGE : TIMEOUT_MESSAGE);\n}\n//# sourceMappingURL=device-code.js.map","// @ts-nocheck — vendored Pi source (pi-ai auth/oauth/oauth-page.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\nconst LOGO_SVG = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 800 800\" aria-hidden=\"true\"><path fill=\"#fff\" fill-rule=\"evenodd\" d=\"M165.29 165.29 H517.36 V400 H400 V517.36 H282.65 V634.72 H165.29 Z M282.65 282.65 V400 H400 V282.65 Z\"/><path fill=\"#fff\" d=\"M517.36 400 H634.72 V634.72 H517.36 Z\"/></svg>`;\nfunction escapeHtml(value) {\n    return value\n        .replaceAll(\"&\", \"&amp;\")\n        .replaceAll(\"<\", \"&lt;\")\n        .replaceAll(\">\", \"&gt;\")\n        .replaceAll('\"', \"&quot;\")\n        .replaceAll(\"'\", \"&#39;\");\n}\nfunction renderPage(options) {\n    const title = escapeHtml(options.title);\n    const heading = escapeHtml(options.heading);\n    const message = escapeHtml(options.message);\n    const details = options.details ? escapeHtml(options.details) : undefined;\n    return `<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n  <title>${title}</title>\n  <style>\n    :root {\n      --text: #fafafa;\n      --text-dim: #a1a1aa;\n      --page-bg: #09090b;\n      --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n      --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    }\n    * { box-sizing: border-box; }\n    html { color-scheme: dark; }\n    body {\n      margin: 0;\n      min-height: 100vh;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      padding: 24px;\n      background: var(--page-bg);\n      color: var(--text);\n      font-family: var(--font-sans);\n      text-align: center;\n    }\n    main {\n      width: 100%;\n      max-width: 560px;\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n    }\n    .logo {\n      width: 72px;\n      height: 72px;\n      display: block;\n      margin-bottom: 24px;\n    }\n    h1 {\n      margin: 0 0 10px;\n      font-size: 28px;\n      line-height: 1.15;\n      font-weight: 650;\n      color: var(--text);\n    }\n    p {\n      margin: 0;\n      line-height: 1.7;\n      color: var(--text-dim);\n      font-size: 15px;\n    }\n    .details {\n      margin-top: 16px;\n      font-family: var(--font-mono);\n      font-size: 13px;\n      color: var(--text-dim);\n      white-space: pre-wrap;\n      word-break: break-word;\n    }\n  </style>\n</head>\n<body>\n  <main>\n    <div class=\"logo\">${LOGO_SVG}</div>\n    <h1>${heading}</h1>\n    <p>${message}</p>\n    ${details ? `<div class=\"details\">${details}</div>` : \"\"}\n  </main>\n</body>\n</html>`;\n}\nexport function oauthSuccessHtml(message) {\n    return renderPage({\n        title: \"Authentication successful\",\n        heading: \"Authentication successful\",\n        message,\n    });\n}\nexport function oauthErrorHtml(message, details) {\n    return renderPage({\n        title: \"Authentication failed\",\n        heading: \"Authentication failed\",\n        message,\n        details,\n    });\n}\n//# sourceMappingURL=oauth-page.js.map","// @ts-nocheck — vendored Pi source (pi-ai auth/oauth/pkce.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\n/**\n * PKCE utilities using Web Crypto API.\n * Works in both Node.js 20+ and browsers.\n */\n/**\n * Encode bytes as base64url string.\n */\nfunction base64urlEncode(bytes) {\n    let binary = \"\";\n    for (const byte of bytes) {\n        binary += String.fromCharCode(byte);\n    }\n    return btoa(binary).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\n/**\n * Generate PKCE code verifier and challenge.\n * Uses Web Crypto API for cross-platform compatibility.\n */\nexport async function generatePKCE() {\n    // Generate random verifier\n    const verifierBytes = new Uint8Array(32);\n    crypto.getRandomValues(verifierBytes);\n    const verifier = base64urlEncode(verifierBytes);\n    // Compute SHA-256 challenge\n    const encoder = new TextEncoder();\n    const data = encoder.encode(verifier);\n    const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n    const challenge = base64urlEncode(new Uint8Array(hashBuffer));\n    return { verifier, challenge };\n}\n//# sourceMappingURL=pkce.js.map","// @ts-nocheck — vendored Pi source (pi-ai auth/oauth/openai-codex.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\n/**\n * OpenAI Codex (ChatGPT OAuth) flow\n *\n * NOTE: This module uses Node.js crypto and http for the OAuth callback.\n * It is only intended for CLI use, not browser environments.\n */\n// NEVER convert to top-level imports - breaks browser/Vite builds\nlet _randomBytes = null;\nlet _http = null;\nif (typeof process !== \"undefined\" && (process.versions?.node || process.versions?.bun)) {\n    import(\"node:crypto\").then((m) => {\n        _randomBytes = m.randomBytes;\n    });\n    import(\"node:http\").then((m) => {\n        _http = m;\n    });\n}\nimport { getProviderEnvValue } from './provider-env.js';\nimport { pollOAuthDeviceCodeFlow } from \"./device-code.js\";\nimport { oauthErrorHtml, oauthSuccessHtml } from \"./oauth-page.js\";\nimport { generatePKCE } from \"./pkce.js\";\nconst CLIENT_ID = \"app_EMoamEEZ73f0CkXaXp7hrann\";\nconst AUTH_BASE_URL = \"https://auth.openai.com\";\nconst AUTHORIZE_URL = `${AUTH_BASE_URL}/oauth/authorize`;\nconst TOKEN_URL = `${AUTH_BASE_URL}/oauth/token`;\nconst REDIRECT_URI = \"http://localhost:1455/auth/callback\";\nconst DEVICE_USER_CODE_URL = `${AUTH_BASE_URL}/api/accounts/deviceauth/usercode`;\nconst DEVICE_TOKEN_URL = `${AUTH_BASE_URL}/api/accounts/deviceauth/token`;\nconst DEVICE_VERIFICATION_URI = `${AUTH_BASE_URL}/codex/device`;\nconst DEVICE_REDIRECT_URI = `${AUTH_BASE_URL}/deviceauth/callback`;\nconst DEVICE_CODE_TIMEOUT_SECONDS = 15 * 60;\nconst OPENAI_CODEX_BROWSER_LOGIN_METHOD = \"browser\";\nconst OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD = \"device_code\";\nconst SCOPE = \"openid profile email offline_access\";\nconst JWT_CLAIM_PATH = \"https://api.openai.com/auth\";\nfunction getCallbackHost() {\n    return getProviderEnvValue(\"PI_OAUTH_CALLBACK_HOST\") || \"127.0.0.1\";\n}\nfunction createState() {\n    if (!_randomBytes) {\n        throw new Error(\"OpenAI Codex OAuth is only available in Node.js environments\");\n    }\n    return _randomBytes(16).toString(\"hex\");\n}\nfunction parseAuthorizationInput(input) {\n    const value = input.trim();\n    if (!value)\n        return {};\n    try {\n        const url = new URL(value);\n        return {\n            code: url.searchParams.get(\"code\") ?? undefined,\n            state: url.searchParams.get(\"state\") ?? undefined,\n        };\n    }\n    catch {\n        // not a URL\n    }\n    if (value.includes(\"#\")) {\n        const [code, state] = value.split(\"#\", 2);\n        return { code, state };\n    }\n    if (value.includes(\"code=\")) {\n        const params = new URLSearchParams(value);\n        return {\n            code: params.get(\"code\") ?? undefined,\n            state: params.get(\"state\") ?? undefined,\n        };\n    }\n    return { code: value };\n}\nfunction decodeJwt(token) {\n    try {\n        const parts = token.split(\".\");\n        if (parts.length !== 3)\n            return null;\n        const payload = parts[1] ?? \"\";\n        const decoded = atob(payload);\n        return JSON.parse(decoded);\n    }\n    catch {\n        return null;\n    }\n}\nasync function fetchWithLoginCancellation(input, init) {\n    try {\n        return await fetch(input, init);\n    }\n    catch (error) {\n        if (init.signal?.aborted) {\n            throw new Error(\"Login cancelled\");\n        }\n        throw error;\n    }\n}\nasync function readTokenResponse(response, operation) {\n    if (!response.ok) {\n        const text = await response.text().catch(() => \"\");\n        throw new Error(`OpenAI Codex token ${operation} failed (${response.status}): ${text || response.statusText}`);\n    }\n    const rawJson = await response.json();\n    const json = rawJson;\n    if (!json?.access_token || !json.refresh_token || typeof json.expires_in !== \"number\") {\n        throw new Error(`OpenAI Codex token ${operation} response missing fields: ${JSON.stringify(json)}`);\n    }\n    return {\n        access: json.access_token,\n        refresh: json.refresh_token,\n        expires: Date.now() + json.expires_in * 1000,\n    };\n}\nasync function exchangeAuthorizationCode(code, verifier, redirectUri, signal) {\n    const response = await fetchWithLoginCancellation(TOKEN_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n        body: new URLSearchParams({\n            grant_type: \"authorization_code\",\n            client_id: CLIENT_ID,\n            code,\n            code_verifier: verifier,\n            redirect_uri: redirectUri,\n        }),\n        signal,\n    });\n    return readTokenResponse(response, \"exchange\");\n}\nasync function refreshAccessToken(refreshToken, signal) {\n    let response;\n    try {\n        response = await fetch(TOKEN_URL, {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n            body: new URLSearchParams({\n                grant_type: \"refresh_token\",\n                refresh_token: refreshToken,\n                client_id: CLIENT_ID,\n            }),\n            signal,\n        });\n    }\n    catch (error) {\n        throw new Error(`OpenAI Codex token refresh error: ${error instanceof Error ? error.message : String(error)}`);\n    }\n    return readTokenResponse(response, \"refresh\");\n}\nasync function startOpenAICodexDeviceAuth(signal) {\n    const response = await fetchWithLoginCancellation(DEVICE_USER_CODE_URL, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ client_id: CLIENT_ID }),\n        signal,\n    });\n    if (!response.ok) {\n        if (response.status === 404) {\n            throw new Error(\"OpenAI Codex device code login is not enabled for this server. Use browser login or verify the server URL.\");\n        }\n        const responseBody = await response.text().catch(() => \"\");\n        throw new Error(`OpenAI Codex device code request failed with status ${response.status}${responseBody ? `: ${responseBody}` : \"\"}`);\n    }\n    const rawJson = await response.json();\n    const json = rawJson;\n    const intervalSeconds = typeof json?.interval === \"string\" ? Number(json.interval.trim()) : json?.interval;\n    if (!json?.device_auth_id ||\n        !json.user_code ||\n        typeof intervalSeconds !== \"number\" ||\n        !Number.isFinite(intervalSeconds) ||\n        intervalSeconds < 0) {\n        throw new Error(`Invalid OpenAI Codex device code response: ${JSON.stringify(json)}`);\n    }\n    return {\n        deviceAuthId: json.device_auth_id,\n        userCode: json.user_code,\n        intervalSeconds,\n    };\n}\nasync function pollOpenAICodexDeviceAuth(device, signal) {\n    return pollOAuthDeviceCodeFlow({\n        intervalSeconds: device.intervalSeconds,\n        expiresInSeconds: DEVICE_CODE_TIMEOUT_SECONDS,\n        signal,\n        poll: async () => {\n            const response = await fetchWithLoginCancellation(DEVICE_TOKEN_URL, {\n                method: \"POST\",\n                headers: { \"Content-Type\": \"application/json\" },\n                body: JSON.stringify({\n                    device_auth_id: device.deviceAuthId,\n                    user_code: device.userCode,\n                }),\n                signal,\n            });\n            if (response.ok) {\n                const rawJson = await response.json();\n                const json = rawJson;\n                if (!json?.authorization_code || !json.code_verifier) {\n                    return {\n                        status: \"failed\",\n                        message: `Invalid OpenAI Codex device auth token response: ${JSON.stringify(json)}`,\n                    };\n                }\n                return {\n                    status: \"complete\",\n                    value: { authorizationCode: json.authorization_code, codeVerifier: json.code_verifier },\n                };\n            }\n            if (response.status === 403 || response.status === 404) {\n                return { status: \"pending\" };\n            }\n            const responseBody = await response.text().catch(() => \"\");\n            let errorCode;\n            try {\n                const json = JSON.parse(responseBody);\n                const error = json?.error;\n                errorCode = typeof error === \"object\" ? error?.code : error;\n            }\n            catch { }\n            if (errorCode === \"deviceauth_authorization_pending\") {\n                return { status: \"pending\" };\n            }\n            if (errorCode === \"slow_down\") {\n                return { status: \"slow_down\" };\n            }\n            return {\n                status: \"failed\",\n                message: `OpenAI Codex device auth failed with status ${response.status}${responseBody ? `: ${responseBody}` : \"\"}`,\n            };\n        },\n    });\n}\nasync function createAuthorizationFlow(originator = \"pi\") {\n    const { verifier, challenge } = await generatePKCE();\n    const state = createState();\n    const url = new URL(AUTHORIZE_URL);\n    url.searchParams.set(\"response_type\", \"code\");\n    url.searchParams.set(\"client_id\", CLIENT_ID);\n    url.searchParams.set(\"redirect_uri\", REDIRECT_URI);\n    url.searchParams.set(\"scope\", SCOPE);\n    url.searchParams.set(\"code_challenge\", challenge);\n    url.searchParams.set(\"code_challenge_method\", \"S256\");\n    url.searchParams.set(\"state\", state);\n    url.searchParams.set(\"id_token_add_organizations\", \"true\");\n    url.searchParams.set(\"codex_cli_simplified_flow\", \"true\");\n    url.searchParams.set(\"originator\", originator);\n    return { verifier, state, url: url.toString() };\n}\nfunction startLocalOAuthServer(state) {\n    if (!_http) {\n        throw new Error(\"OpenAI Codex OAuth is only available in Node.js environments\");\n    }\n    let settleWait;\n    const waitForCodePromise = new Promise((resolve) => {\n        let settled = false;\n        settleWait = (value) => {\n            if (settled)\n                return;\n            settled = true;\n            resolve(value);\n        };\n    });\n    const server = _http.createServer((req, res) => {\n        try {\n            const url = new URL(req.url || \"\", \"http://localhost\");\n            if (url.pathname !== \"/auth/callback\") {\n                res.statusCode = 404;\n                res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n                res.end(oauthErrorHtml(\"Callback route not found.\"));\n                return;\n            }\n            if (url.searchParams.get(\"state\") !== state) {\n                res.statusCode = 400;\n                res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n                res.end(oauthErrorHtml(\"State mismatch.\"));\n                return;\n            }\n            const code = url.searchParams.get(\"code\");\n            if (!code) {\n                res.statusCode = 400;\n                res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n                res.end(oauthErrorHtml(\"Missing authorization code.\"));\n                return;\n            }\n            res.statusCode = 200;\n            res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n            res.end(oauthSuccessHtml(\"OpenAI authentication completed. You can close this window.\"));\n            settleWait?.({ code });\n        }\n        catch {\n            res.statusCode = 500;\n            res.setHeader(\"Content-Type\", \"text/html; charset=utf-8\");\n            res.end(oauthErrorHtml(\"Internal error while processing OAuth callback.\"));\n        }\n    });\n    return new Promise((resolve) => {\n        server\n            .listen(1455, getCallbackHost(), () => {\n            resolve({\n                close: () => server.close(),\n                cancelWait: () => {\n                    settleWait?.(null);\n                },\n                waitForCode: () => waitForCodePromise,\n            });\n        })\n            .on(\"error\", (_err) => {\n            settleWait?.(null);\n            resolve({\n                close: () => {\n                    try {\n                        server.close();\n                    }\n                    catch {\n                        // ignore\n                    }\n                },\n                cancelWait: () => { },\n                waitForCode: async () => null,\n            });\n        });\n    });\n}\nfunction getAccountId(accessToken) {\n    const payload = decodeJwt(accessToken);\n    const auth = payload?.[JWT_CLAIM_PATH];\n    const accountId = auth?.chatgpt_account_id;\n    return typeof accountId === \"string\" && accountId.length > 0 ? accountId : null;\n}\nfunction credentialsFromToken(token) {\n    const accountId = getAccountId(token.access);\n    if (!accountId) {\n        throw new Error(\"Failed to extract accountId from token\");\n    }\n    return {\n        type: \"oauth\",\n        access: token.access,\n        refresh: token.refresh,\n        expires: token.expires,\n        accountId,\n    };\n}\nasync function exchangeAuthorizationCodeForCredentials(code, verifier, redirectUri, signal) {\n    return credentialsFromToken(await exchangeAuthorizationCode(code, verifier, redirectUri, signal));\n}\nasync function loginOpenAICodexDeviceCode(interaction) {\n    const device = await startOpenAICodexDeviceAuth(interaction.signal);\n    interaction.notify({\n        type: \"device_code\",\n        userCode: device.userCode,\n        verificationUri: DEVICE_VERIFICATION_URI,\n        intervalSeconds: device.intervalSeconds,\n        expiresInSeconds: DEVICE_CODE_TIMEOUT_SECONDS,\n    });\n    const code = await pollOpenAICodexDeviceAuth(device, interaction.signal);\n    return exchangeAuthorizationCodeForCredentials(code.authorizationCode, code.codeVerifier, DEVICE_REDIRECT_URI, interaction.signal);\n}\nasync function loginOpenAICodex(interaction) {\n    const { verifier, state, url } = await createAuthorizationFlow();\n    const server = await startLocalOAuthServer(state);\n    const manualAbort = new AbortController();\n    const onAbort = () => server.cancelWait();\n    interaction.signal.addEventListener(\"abort\", onAbort, { once: true });\n    if (interaction.signal.aborted)\n        onAbort();\n    let code;\n    let manualCode;\n    let manualError;\n    interaction.notify({\n        type: \"auth_url\",\n        url,\n        instructions: \"A browser window should open. Complete login to finish.\",\n    });\n    try {\n        const manualPromise = interaction\n            .prompt({\n            type: \"manual_code\",\n            message: \"Complete login in your browser, or paste the authorization code / redirect URL here:\",\n            placeholder: REDIRECT_URI,\n            signal: manualAbort.signal,\n        })\n            .then((input) => {\n            manualCode = input;\n            server.cancelWait();\n        })\n            .catch((error) => {\n            manualError = error instanceof Error ? error : new Error(String(error));\n            server.cancelWait();\n        });\n        const result = await server.waitForCode();\n        if (manualError)\n            throw manualError;\n        if (result?.code) {\n            code = result.code;\n        }\n        else if (manualCode) {\n            const parsed = parseAuthorizationInput(manualCode);\n            if (parsed.state && parsed.state !== state)\n                throw new Error(\"State mismatch\");\n            code = parsed.code;\n        }\n        if (!code) {\n            await manualPromise;\n            if (manualError)\n                throw manualError;\n            if (manualCode) {\n                const parsed = parseAuthorizationInput(manualCode);\n                if (parsed.state && parsed.state !== state)\n                    throw new Error(\"State mismatch\");\n                code = parsed.code;\n            }\n        }\n        if (!code)\n            throw new Error(\"Missing authorization code\");\n        return exchangeAuthorizationCodeForCredentials(code, verifier, REDIRECT_URI, interaction.signal);\n    }\n    finally {\n        interaction.signal.removeEventListener(\"abort\", onAbort);\n        manualAbort.abort();\n        server.close();\n    }\n}\n/**\n * Refresh OpenAI Codex OAuth token\n */\nasync function refreshOpenAICodexToken(refreshToken, signal) {\n    return credentialsFromToken(await refreshAccessToken(refreshToken, signal));\n}\nexport const openaiCodexOAuth = {\n    name: \"OpenAI (ChatGPT Plus/Pro)\",\n    isSubscription: true,\n    async login(interaction) {\n        const method = await interaction.prompt({\n            type: \"select\",\n            message: \"Select OpenAI Codex login method:\",\n            options: [\n                { id: OPENAI_CODEX_BROWSER_LOGIN_METHOD, label: \"Browser login (default)\" },\n                { id: OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD, label: \"Device code login (headless)\" },\n            ],\n        });\n        if (method === OPENAI_CODEX_DEVICE_CODE_LOGIN_METHOD) {\n            return loginOpenAICodexDeviceCode(interaction);\n        }\n        if (method !== OPENAI_CODEX_BROWSER_LOGIN_METHOD) {\n            throw new Error(`Unknown OpenAI Codex login method: ${method}`);\n        }\n        return loginOpenAICodex(interaction);\n    },\n    refresh: (credential, signal) => refreshOpenAICodexToken(credential.refresh, signal),\n    async toAuth(credential) {\n        return { apiKey: credential.access };\n    },\n};\n//# sourceMappingURL=openai-codex.js.map","// @ts-nocheck — vendored Pi source (pi-ai auth/oauth/anthropic.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\n/**\n * Anthropic OAuth flow (Claude Pro/Max)\n *\n * NOTE: This module uses Node.js http.createServer for the OAuth callback server.\n * It is only intended for CLI use, not browser environments.\n */\nimport { getProviderEnvValue } from './provider-env.js';\nimport { oauthErrorHtml, oauthSuccessHtml } from \"./oauth-page.js\";\nimport { generatePKCE } from \"./pkce.js\";\nlet nodeApis = null;\nlet nodeApisPromise = null;\nconst decode = (s) => atob(s);\nconst CLIENT_ID = decode(\"OWQxYzI1MGEtZTYxYi00NGQ5LTg4ZWQtNTk0NGQxOTYyZjVl\");\nconst AUTHORIZE_URL = \"https://claude.ai/oauth/authorize\";\nconst TOKEN_URL = \"https://platform.claude.com/v1/oauth/token\";\nconst CALLBACK_HOST = getProviderEnvValue(\"PI_OAUTH_CALLBACK_HOST\") || \"127.0.0.1\";\nconst CALLBACK_PORT = 53692;\nconst CALLBACK_PATH = \"/callback\";\nconst REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;\nconst SCOPES = \"org:create_api_key user:profile user:inference user:sessions:claude_code user:mcp_servers user:file_upload\";\nasync function getNodeApis() {\n    if (nodeApis)\n        return nodeApis;\n    if (!nodeApisPromise) {\n        if (typeof process === \"undefined\" || (!process.versions?.node && !process.versions?.bun)) {\n            throw new Error(\"Anthropic OAuth is only available in Node.js environments\");\n        }\n        nodeApisPromise = import(\"node:http\").then((httpModule) => ({\n            createServer: httpModule.createServer,\n        }));\n    }\n    nodeApis = await nodeApisPromise;\n    return nodeApis;\n}\nfunction parseAuthorizationInput(input) {\n    const value = input.trim();\n    if (!value)\n        return {};\n    try {\n        const url = new URL(value);\n        return {\n            code: url.searchParams.get(\"code\") ?? undefined,\n            state: url.searchParams.get(\"state\") ?? undefined,\n        };\n    }\n    catch {\n        // not a URL\n    }\n    if (value.includes(\"#\")) {\n        const [code, state] = value.split(\"#\", 2);\n        return { code, state };\n    }\n    if (value.includes(\"code=\")) {\n        const params = new URLSearchParams(value);\n        return {\n            code: params.get(\"code\") ?? undefined,\n            state: params.get(\"state\") ?? undefined,\n        };\n    }\n    return { code: value };\n}\nfunction formatErrorDetails(error) {\n    if (error instanceof Error) {\n        const details = [`${error.name}: ${error.message}`];\n        const errorWithCode = error;\n        if (errorWithCode.code)\n            details.push(`code=${errorWithCode.code}`);\n        if (typeof errorWithCode.errno !== \"undefined\")\n            details.push(`errno=${String(errorWithCode.errno)}`);\n        if (typeof error.cause !== \"undefined\") {\n            details.push(`cause=${formatErrorDetails(error.cause)}`);\n        }\n        if (error.stack) {\n            details.push(`stack=${error.stack}`);\n        }\n        return details.join(\"; \");\n    }\n    return String(error);\n}\nasync function startCallbackServer(expectedState) {\n    const { createServer } = await getNodeApis();\n    return new Promise((resolve, reject) => {\n        let settleWait;\n        const waitForCodePromise = new Promise((resolveWait) => {\n            let settled = false;\n            settleWait = (value) => {\n                if (settled)\n                    return;\n                settled = true;\n                resolveWait(value);\n            };\n        });\n        const server = createServer((req, res) => {\n            try {\n                const url = new URL(req.url || \"\", \"http://localhost\");\n                if (url.pathname !== CALLBACK_PATH) {\n                    res.writeHead(404, { \"Content-Type\": \"text/html; charset=utf-8\" });\n                    res.end(oauthErrorHtml(\"Callback route not found.\"));\n                    return;\n                }\n                const code = url.searchParams.get(\"code\");\n                const state = url.searchParams.get(\"state\");\n                const error = url.searchParams.get(\"error\");\n                if (error) {\n                    res.writeHead(400, { \"Content-Type\": \"text/html; charset=utf-8\" });\n                    res.end(oauthErrorHtml(\"Anthropic authentication did not complete.\", `Error: ${error}`));\n                    return;\n                }\n                if (!code || !state) {\n                    res.writeHead(400, { \"Content-Type\": \"text/html; charset=utf-8\" });\n                    res.end(oauthErrorHtml(\"Missing code or state parameter.\"));\n                    return;\n                }\n                if (state !== expectedState) {\n                    res.writeHead(400, { \"Content-Type\": \"text/html; charset=utf-8\" });\n                    res.end(oauthErrorHtml(\"State mismatch.\"));\n                    return;\n                }\n                res.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n                res.end(oauthSuccessHtml(\"Anthropic authentication completed. You can close this window.\"));\n                settleWait?.({ code, state });\n            }\n            catch {\n                res.writeHead(500, { \"Content-Type\": \"text/plain; charset=utf-8\" });\n                res.end(\"Internal error\");\n            }\n        });\n        server.on(\"error\", (err) => {\n            reject(err);\n        });\n        server.listen(CALLBACK_PORT, CALLBACK_HOST, () => {\n            resolve({\n                server,\n                redirectUri: REDIRECT_URI,\n                cancelWait: () => {\n                    settleWait?.(null);\n                },\n                waitForCode: () => waitForCodePromise,\n            });\n        });\n    });\n}\nasync function postJson(url, body, signal) {\n    const response = await fetch(url, {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/json\",\n            Accept: \"application/json\",\n        },\n        body: JSON.stringify(body),\n        signal: AbortSignal.any([signal, AbortSignal.timeout(30_000)]),\n    });\n    const responseBody = await response.text();\n    if (!response.ok) {\n        throw new Error(`HTTP request failed. status=${response.status}; url=${url}; body=${responseBody}`);\n    }\n    return responseBody;\n}\nasync function exchangeAuthorizationCode(code, state, verifier, redirectUri, signal) {\n    let responseBody;\n    try {\n        responseBody = await postJson(TOKEN_URL, {\n            grant_type: \"authorization_code\",\n            client_id: CLIENT_ID,\n            code,\n            state,\n            redirect_uri: redirectUri,\n            code_verifier: verifier,\n        }, signal);\n    }\n    catch (error) {\n        throw new Error(`Token exchange request failed. url=${TOKEN_URL}; redirect_uri=${redirectUri}; response_type=authorization_code; details=${formatErrorDetails(error)}`);\n    }\n    let tokenData;\n    try {\n        tokenData = JSON.parse(responseBody);\n    }\n    catch (error) {\n        throw new Error(`Token exchange returned invalid JSON. url=${TOKEN_URL}; body=${responseBody}; details=${formatErrorDetails(error)}`);\n    }\n    return {\n        type: \"oauth\",\n        refresh: tokenData.refresh_token,\n        access: tokenData.access_token,\n        expires: Date.now() + tokenData.expires_in * 1000 - 5 * 60 * 1000,\n    };\n}\nasync function loginAnthropic(interaction) {\n    const { verifier, challenge } = await generatePKCE();\n    const server = await startCallbackServer(verifier);\n    const manualAbort = new AbortController();\n    const onAbort = () => server.cancelWait();\n    interaction.signal.addEventListener(\"abort\", onAbort, { once: true });\n    if (interaction.signal.aborted)\n        onAbort();\n    let code;\n    let state;\n    let manualInput;\n    let manualError;\n    try {\n        const authParams = new URLSearchParams({\n            code: \"true\",\n            client_id: CLIENT_ID,\n            response_type: \"code\",\n            redirect_uri: REDIRECT_URI,\n            scope: SCOPES,\n            code_challenge: challenge,\n            code_challenge_method: \"S256\",\n            state: verifier,\n        });\n        interaction.notify({\n            type: \"auth_url\",\n            url: `${AUTHORIZE_URL}?${authParams.toString()}`,\n            instructions: \"Complete login in your browser. If the browser is on another machine, paste the final redirect URL here.\",\n        });\n        const manualPromise = interaction\n            .prompt({\n            type: \"manual_code\",\n            message: \"Complete login in your browser, or paste the authorization code / redirect URL here:\",\n            placeholder: REDIRECT_URI,\n            signal: manualAbort.signal,\n        })\n            .then((input) => {\n            manualInput = input;\n            server.cancelWait();\n        })\n            .catch((error) => {\n            manualError = error instanceof Error ? error : new Error(String(error));\n            server.cancelWait();\n        });\n        const result = await server.waitForCode();\n        if (manualError)\n            throw manualError;\n        if (result?.code) {\n            code = result.code;\n            state = result.state;\n        }\n        else if (manualInput) {\n            const parsed = parseAuthorizationInput(manualInput);\n            if (parsed.state && parsed.state !== verifier)\n                throw new Error(\"OAuth state mismatch\");\n            code = parsed.code;\n            state = parsed.state ?? verifier;\n        }\n        if (!code) {\n            await manualPromise;\n            if (manualError)\n                throw manualError;\n            if (manualInput) {\n                const parsed = parseAuthorizationInput(manualInput);\n                if (parsed.state && parsed.state !== verifier)\n                    throw new Error(\"OAuth state mismatch\");\n                code = parsed.code;\n                state = parsed.state ?? verifier;\n            }\n        }\n        if (!code)\n            throw new Error(\"Missing authorization code\");\n        if (!state)\n            throw new Error(\"Missing OAuth state\");\n        interaction.notify({ type: \"progress\", message: \"Exchanging authorization code for tokens...\" });\n        return exchangeAuthorizationCode(code, state, verifier, REDIRECT_URI, interaction.signal);\n    }\n    finally {\n        interaction.signal.removeEventListener(\"abort\", onAbort);\n        manualAbort.abort();\n        server.server.close();\n    }\n}\n/**\n * Refresh Anthropic OAuth token\n */\nasync function refreshAnthropicToken(refreshToken, signal) {\n    let responseBody;\n    try {\n        responseBody = await postJson(TOKEN_URL, {\n            grant_type: \"refresh_token\",\n            client_id: CLIENT_ID,\n            refresh_token: refreshToken,\n        }, signal);\n    }\n    catch (error) {\n        throw new Error(`Anthropic token refresh request failed. url=${TOKEN_URL}; details=${formatErrorDetails(error)}`);\n    }\n    let data;\n    try {\n        data = JSON.parse(responseBody);\n    }\n    catch (error) {\n        throw new Error(`Anthropic token refresh returned invalid JSON. url=${TOKEN_URL}; body=${responseBody}; details=${formatErrorDetails(error)}`);\n    }\n    return {\n        type: \"oauth\",\n        refresh: data.refresh_token,\n        access: data.access_token,\n        expires: Date.now() + data.expires_in * 1000 - 5 * 60 * 1000,\n    };\n}\nexport const anthropicOAuth = {\n    name: \"Anthropic (Claude Pro/Max)\",\n    isSubscription: true,\n    login: loginAnthropic,\n    refresh: (credential, signal) => refreshAnthropicToken(credential.refresh, signal),\n    async toAuth(credential) {\n        return { apiKey: credential.access };\n    },\n};\n//# sourceMappingURL=anthropic.js.map","","// @ts-nocheck — vendored Pi source (pi-ai model-catalog.js @0.84.1, MIT, see ../PI-LICENSE); unchanged.\nexport function flattenModelCatalog(_provider, groups) {\n    return Object.assign({}, ...Object.values(groups));\n}\n//# sourceMappingURL=model-catalog.js.map","// @ts-nocheck — vendored Pi source (pi-ai providers/github-copilot.models.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\n// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\nimport values from \"./data/github-copilot.json\" with { type: \"json\" };\nimport { flattenModelCatalog } from './model-catalog.js';\nexport const GITHUB_COPILOT_MODELS = flattenModelCatalog(\"github-copilot\", values);\n//# sourceMappingURL=github-copilot.models.js.map","// @ts-nocheck — vendored Pi source (pi-ai auth/oauth/github-copilot.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\n/**\n * GitHub Copilot OAuth flow\n */\nimport { GITHUB_COPILOT_MODELS } from './github-copilot.models.js';\nimport { pollOAuthDeviceCodeFlow } from \"./device-code.js\";\nconst decode = (s) => atob(s);\nconst CLIENT_ID = decode(\"SXYxLmI1MDdhMDhjODdlY2ZlOTg=\");\nconst COPILOT_HEADERS = {\n    \"User-Agent\": \"GitHubCopilotChat/0.35.0\",\n    \"Editor-Version\": \"vscode/1.107.0\",\n    \"Editor-Plugin-Version\": \"copilot-chat/0.35.0\",\n    \"Copilot-Integration-Id\": \"vscode-chat\",\n};\nconst COPILOT_API_VERSION = \"2026-06-01\";\nfunction normalizeDomain(input) {\n    const trimmed = input.trim();\n    if (!trimmed)\n        return null;\n    try {\n        const url = trimmed.includes(\"://\") ? new URL(trimmed) : new URL(`https://${trimmed}`);\n        return url.hostname;\n    }\n    catch {\n        return null;\n    }\n}\nfunction getUrls(domain) {\n    return {\n        deviceCodeUrl: `https://${domain}/login/device/code`,\n        accessTokenUrl: `https://${domain}/login/oauth/access_token`,\n        copilotTokenUrl: `https://api.${domain}/copilot_internal/v2/token`,\n    };\n}\n/**\n * Parse the proxy-ep from a Copilot token and convert to API base URL.\n * Token format: tid=...;exp=...;proxy-ep=proxy.individual.githubcopilot.com;...\n * Returns API URL like https://api.individual.githubcopilot.com\n */\nfunction getBaseUrlFromToken(token) {\n    const match = token.match(/proxy-ep=([^;]+)/);\n    if (!match)\n        return null;\n    const proxyHost = match[1];\n    // Convert proxy.xxx to api.xxx\n    const apiHost = proxyHost.replace(/^proxy\\./, \"api.\");\n    return `https://${apiHost}`;\n}\nfunction getGitHubCopilotBaseUrl(token, enterpriseDomain) {\n    // If we have a token, extract the base URL from proxy-ep\n    if (token) {\n        const urlFromToken = getBaseUrlFromToken(token);\n        if (urlFromToken)\n            return urlFromToken;\n    }\n    // Fallback for enterprise or if token parsing fails\n    if (enterpriseDomain)\n        return `https://copilot-api.${enterpriseDomain}`;\n    return \"https://api.individual.githubcopilot.com\";\n}\nfunction asRecord(value) {\n    return value && typeof value === \"object\" ? value : undefined;\n}\nfunction parseAvailableCopilotModelIds(raw, allowPolicyFallback) {\n    const data = asRecord(raw)?.data;\n    if (!Array.isArray(data)) {\n        throw new Error(\"Invalid Copilot models response\");\n    }\n    const pickerIds = [];\n    const policyEnabledIds = [];\n    for (const rawItem of data) {\n        const item = asRecord(rawItem);\n        const id = item?.id;\n        if (!item || typeof id !== \"string\")\n            continue;\n        const capabilities = asRecord(item.capabilities);\n        const supports = asRecord(capabilities?.supports);\n        if (supports?.tool_calls === false)\n            continue;\n        const policy = asRecord(item.policy);\n        if (item.model_picker_enabled === true && policy?.state !== \"disabled\")\n            pickerIds.push(id);\n        if (policy?.state === \"enabled\")\n            policyEnabledIds.push(id);\n    }\n    return pickerIds.length > 0 || !allowPolicyFallback ? pickerIds : policyEnabledIds;\n}\nasync function fetchAvailableGitHubCopilotModelIds(copilotToken, enterpriseDomain, signal) {\n    const baseUrl = getGitHubCopilotBaseUrl(copilotToken, enterpriseDomain);\n    // Some Individual accounts return false for every picker flag despite explicit enabled policies.\n    // Limit the fallback to that endpoint so other account types keep strict picker semantics.\n    const allowPolicyFallback = baseUrl === \"https://api.individual.githubcopilot.com\";\n    const raw = await fetchJson(`${baseUrl}/models`, {\n        headers: {\n            Accept: \"application/json\",\n            Authorization: `Bearer ${copilotToken}`,\n            ...COPILOT_HEADERS,\n            \"X-GitHub-Api-Version\": COPILOT_API_VERSION,\n        },\n        signal: AbortSignal.any([signal, AbortSignal.timeout(5000)]),\n    });\n    return parseAvailableCopilotModelIds(raw, allowPolicyFallback);\n}\nasync function fetchJson(url, init) {\n    const response = await fetch(url, init);\n    if (!response.ok) {\n        const text = await response.text();\n        throw new Error(`${response.status} ${response.statusText}: ${text}`);\n    }\n    return response.json();\n}\nasync function startDeviceFlow(domain, signal) {\n    const urls = getUrls(domain);\n    const data = await fetchJson(urls.deviceCodeUrl, {\n        method: \"POST\",\n        headers: {\n            Accept: \"application/json\",\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n            \"User-Agent\": \"GitHubCopilotChat/0.35.0\",\n        },\n        body: new URLSearchParams({\n            client_id: CLIENT_ID,\n            scope: \"read:user\",\n        }),\n        signal,\n    });\n    if (!data || typeof data !== \"object\") {\n        throw new Error(\"Invalid device code response\");\n    }\n    const deviceCode = data.device_code;\n    const userCode = data.user_code;\n    const verificationUri = data.verification_uri;\n    const interval = data.interval;\n    const expiresIn = data.expires_in;\n    if (typeof deviceCode !== \"string\" ||\n        typeof userCode !== \"string\" ||\n        typeof verificationUri !== \"string\" ||\n        (interval !== undefined && typeof interval !== \"number\") ||\n        typeof expiresIn !== \"number\") {\n        throw new Error(\"Invalid device code response fields\");\n    }\n    // The verification URI is opened in the user's browser and to prevent `open` from\n    // opening an executable or similar, we force it to be a URL.\n    let parsedUri;\n    try {\n        parsedUri = new URL(verificationUri);\n    }\n    catch {\n        throw new Error(\"Untrusted verification_uri in device code response\");\n    }\n    if (parsedUri.protocol !== \"https:\" && parsedUri.protocol !== \"http:\") {\n        throw new Error(\"Untrusted verification_uri in device code response\");\n    }\n    return {\n        device_code: deviceCode,\n        user_code: userCode,\n        verification_uri: parsedUri.href,\n        interval,\n        expires_in: expiresIn,\n    };\n}\nasync function pollForGitHubAccessToken(domain, device, signal) {\n    const urls = getUrls(domain);\n    return pollOAuthDeviceCodeFlow({\n        intervalSeconds: device.interval,\n        expiresInSeconds: device.expires_in,\n        waitBeforeFirstPoll: true,\n        signal,\n        poll: async () => {\n            const raw = await fetchJson(urls.accessTokenUrl, {\n                method: \"POST\",\n                headers: {\n                    Accept: \"application/json\",\n                    \"Content-Type\": \"application/x-www-form-urlencoded\",\n                    \"User-Agent\": \"GitHubCopilotChat/0.35.0\",\n                },\n                body: new URLSearchParams({\n                    client_id: CLIENT_ID,\n                    device_code: device.device_code,\n                    grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n                }),\n                signal,\n            });\n            if (raw && typeof raw === \"object\" && typeof raw.access_token === \"string\") {\n                return { status: \"complete\", value: raw.access_token };\n            }\n            if (raw && typeof raw === \"object\" && typeof raw.error === \"string\") {\n                const { error, error_description: description, interval } = raw;\n                if (error === \"authorization_pending\") {\n                    return { status: \"pending\" };\n                }\n                if (error === \"slow_down\") {\n                    return { status: \"slow_down\", intervalSeconds: typeof interval === \"number\" ? interval : undefined };\n                }\n                const descriptionSuffix = description ? `: ${description}` : \"\";\n                return { status: \"failed\", message: `Device flow failed: ${error}${descriptionSuffix}` };\n            }\n            return { status: \"failed\", message: \"Invalid device token response\" };\n        },\n    });\n}\nasync function refreshGitHubCopilotAccessToken(refreshToken, enterpriseDomain, signal) {\n    const domain = enterpriseDomain || \"github.com\";\n    const urls = getUrls(domain);\n    const raw = await fetchJson(urls.copilotTokenUrl, {\n        headers: {\n            Accept: \"application/json\",\n            Authorization: `Bearer ${refreshToken}`,\n            ...COPILOT_HEADERS,\n        },\n        signal,\n    });\n    if (!raw || typeof raw !== \"object\") {\n        throw new Error(\"Invalid Copilot token response\");\n    }\n    const token = raw.token;\n    const expiresAt = raw.expires_at;\n    if (typeof token !== \"string\" || typeof expiresAt !== \"number\") {\n        throw new Error(\"Invalid Copilot token response fields\");\n    }\n    return {\n        type: \"oauth\",\n        refresh: refreshToken,\n        access: token,\n        expires: expiresAt * 1000 - 5 * 60 * 1000,\n        enterpriseUrl: enterpriseDomain,\n    };\n}\n/**\n * Refresh GitHub Copilot token\n */\nasync function refreshGitHubCopilotToken(refreshToken, enterpriseDomain, signal) {\n    const credentials = await refreshGitHubCopilotAccessToken(refreshToken, enterpriseDomain, signal);\n    return {\n        ...credentials,\n        availableModelIds: await fetchAvailableGitHubCopilotModelIds(credentials.access, enterpriseDomain, signal),\n    };\n}\n/**\n * Enable a model for the user's GitHub Copilot account.\n * This is required for some models (like Claude, Grok) before they can be used.\n */\nasync function enableGitHubCopilotModel(token, modelId, enterpriseDomain, signal) {\n    const baseUrl = getGitHubCopilotBaseUrl(token, enterpriseDomain);\n    const url = `${baseUrl}/models/${modelId}/policy`;\n    try {\n        const response = await fetch(url, {\n            method: \"POST\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                Authorization: `Bearer ${token}`,\n                ...COPILOT_HEADERS,\n                \"openai-intent\": \"chat-policy\",\n                \"x-interaction-type\": \"chat-policy\",\n            },\n            body: JSON.stringify({ state: \"enabled\" }),\n            signal,\n        });\n        return response.ok;\n    }\n    catch (error) {\n        if (signal.aborted)\n            throw error;\n        return false;\n    }\n}\n/**\n * Enable all known GitHub Copilot models that may require policy acceptance.\n * Called after successful login to ensure all models are available.\n */\nasync function enableAllGitHubCopilotModels(token, enterpriseDomain, signal) {\n    const models = Object.values(GITHUB_COPILOT_MODELS);\n    await Promise.all(models.map(async (model) => {\n        await enableGitHubCopilotModel(token, model.id, enterpriseDomain, signal);\n    }));\n}\nasync function loginGitHubCopilot(interaction) {\n    const input = await interaction.prompt({\n        type: \"text\",\n        message: \"GitHub Enterprise URL/domain (blank for github.com)\",\n        placeholder: \"company.ghe.com\",\n    });\n    if (interaction.signal.aborted)\n        throw new Error(\"Login cancelled\");\n    const trimmed = input.trim();\n    const enterpriseDomain = normalizeDomain(input);\n    if (trimmed && !enterpriseDomain)\n        throw new Error(\"Invalid GitHub Enterprise URL/domain\");\n    const domain = enterpriseDomain || \"github.com\";\n    const device = await startDeviceFlow(domain, interaction.signal);\n    interaction.notify({\n        type: \"device_code\",\n        userCode: device.user_code,\n        verificationUri: device.verification_uri,\n        intervalSeconds: device.interval,\n        expiresInSeconds: device.expires_in,\n    });\n    const githubAccessToken = await pollForGitHubAccessToken(domain, device, interaction.signal);\n    const credentials = await refreshGitHubCopilotAccessToken(githubAccessToken, enterpriseDomain ?? undefined, interaction.signal);\n    interaction.notify({ type: \"progress\", message: \"Enabling models...\" });\n    await enableAllGitHubCopilotModels(credentials.access, enterpriseDomain ?? undefined, interaction.signal);\n    return {\n        ...credentials,\n        availableModelIds: await fetchAvailableGitHubCopilotModelIds(credentials.access, enterpriseDomain ?? undefined, interaction.signal),\n    };\n}\nfunction copilotEnterpriseDomain(credential) {\n    const enterpriseUrl = credential.enterpriseUrl;\n    if (typeof enterpriseUrl !== \"string\" || !enterpriseUrl)\n        return undefined;\n    return normalizeDomain(enterpriseUrl) ?? undefined;\n}\nexport const githubCopilotOAuth = {\n    name: \"GitHub Copilot\",\n    isSubscription: true,\n    login: loginGitHubCopilot,\n    refresh: (credential, signal) => refreshGitHubCopilotToken(credential.refresh, copilotEnterpriseDomain(credential), signal),\n    /** Derive the credential-specific proxy endpoint for each request. */\n    async toAuth(credential) {\n        return {\n            apiKey: credential.access,\n            baseUrl: getGitHubCopilotBaseUrl(credential.access, copilotEnterpriseDomain(credential)),\n        };\n    },\n};\n//# sourceMappingURL=github-copilot.js.map","// @ts-nocheck — vendored Pi source (pi-ai auth/oauth/kimi-coding.js @0.84.1, MIT, see ../PI-LICENSE);\n// imports remapped to sibling vendored files, logic byte-identical.\n/**\n * Kimi Code (subscription) OAuth flow\n *\n * RFC 8628 device authorization grant against https://auth.kimi.com with JSON\n * responses. The access token authenticates requests to\n * https://api.kimi.com/coding as an `Authorization: Bearer` header.\n */\nimport { getProviderEnvValue } from './provider-env.js';\nimport { pollOAuthDeviceCodeFlow } from \"./device-code.js\";\nconst CLIENT_ID = \"17e5f671-d194-4dfb-9706-5516cb48c098\";\nconst DEFAULT_OAUTH_HOST = \"https://auth.kimi.com\";\nconst DEVICE_CODE_TIMEOUT_SECONDS = 15 * 60;\nconst DEFAULT_POLL_INTERVAL_SECONDS = 5;\nconst REQUEST_TIMEOUT_MS = 30 * 1000;\nconst REFRESH_MAX_RETRIES = 3;\nfunction getOauthHost() {\n    const override = getProviderEnvValue(\"KIMI_CODE_OAUTH_HOST\") || getProviderEnvValue(\"KIMI_OAUTH_HOST\");\n    return (override || DEFAULT_OAUTH_HOST).replace(/\\/+$/, \"\");\n}\nfunction requestSignal(signal) {\n    return AbortSignal.any([AbortSignal.timeout(REQUEST_TIMEOUT_MS), signal]);\n}\nfunction formUrlEncode(fields) {\n    return new URLSearchParams(fields).toString();\n}\nasync function readJson(response) {\n    try {\n        const json = await response.json();\n        return json && typeof json === \"object\" ? json : null;\n    }\n    catch {\n        return null;\n    }\n}\n/** The verification URI is opened in the user's browser; only http(s) URLs are trusted. */\nfunction trustedHttpUrl(value) {\n    if (typeof value !== \"string\" || !value)\n        return null;\n    try {\n        const url = new URL(value);\n        if (url.protocol !== \"https:\" && url.protocol !== \"http:\")\n            return null;\n        return url.href;\n    }\n    catch {\n        return null;\n    }\n}\nasync function startDeviceAuthorization(oauthHost, signal) {\n    const response = await fetch(`${oauthHost}/api/oauth/device_authorization`, {\n        method: \"POST\",\n        headers: {\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n            Accept: \"application/json\",\n        },\n        body: formUrlEncode({ client_id: CLIENT_ID }),\n        signal: requestSignal(signal),\n    });\n    if (!response.ok) {\n        const text = await response.text().catch(() => \"\");\n        throw new Error(`Kimi Code device authorization failed with status ${response.status}${text ? `: ${text}` : \"\"}`);\n    }\n    const json = await readJson(response);\n    const deviceCode = json?.device_code;\n    const userCode = json?.user_code;\n    const verificationUri = json?.verification_uri;\n    const verificationUriComplete = json?.verification_uri_complete;\n    if (typeof deviceCode !== \"string\" ||\n        typeof userCode !== \"string\" ||\n        typeof verificationUri !== \"string\" ||\n        typeof verificationUriComplete !== \"string\" ||\n        !trustedHttpUrl(verificationUriComplete) ||\n        !trustedHttpUrl(verificationUri)) {\n        throw new Error(`Invalid Kimi Code device authorization response: ${JSON.stringify(json)}`);\n    }\n    const interval = json?.interval;\n    const expiresIn = json?.expires_in;\n    return {\n        deviceCode,\n        userCode,\n        verificationUri,\n        verificationUriComplete,\n        intervalSeconds: typeof interval === \"number\" && Number.isFinite(interval) && interval > 0\n            ? interval\n            : DEFAULT_POLL_INTERVAL_SECONDS,\n        expiresInSeconds: typeof expiresIn === \"number\" && Number.isFinite(expiresIn) && expiresIn > 0\n            ? expiresIn\n            : DEVICE_CODE_TIMEOUT_SECONDS,\n    };\n}\nfunction parseTokenResponse(json, operation) {\n    const accessToken = json?.access_token;\n    const refreshToken = json?.refresh_token;\n    const expiresIn = json?.expires_in;\n    if (typeof accessToken !== \"string\" ||\n        !accessToken ||\n        typeof refreshToken !== \"string\" ||\n        !refreshToken ||\n        typeof expiresIn !== \"number\" ||\n        !Number.isFinite(expiresIn) ||\n        expiresIn <= 0) {\n        throw new Error(`Kimi Code token ${operation} response missing fields: ${JSON.stringify(json)}`);\n    }\n    return {\n        access: accessToken,\n        refresh: refreshToken,\n        expires: Date.now() + expiresIn * 1000,\n    };\n}\nasync function pollForToken(oauthHost, device, signal) {\n    return pollOAuthDeviceCodeFlow({\n        intervalSeconds: device.intervalSeconds,\n        expiresInSeconds: device.expiresInSeconds,\n        waitBeforeFirstPoll: true,\n        signal,\n        poll: async () => {\n            const response = await fetch(`${oauthHost}/api/oauth/token`, {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/x-www-form-urlencoded\",\n                    Accept: \"application/json\",\n                },\n                body: formUrlEncode({\n                    client_id: CLIENT_ID,\n                    device_code: device.deviceCode,\n                    grant_type: \"urn:ietf:params:oauth:grant-type:device_code\",\n                }),\n                signal: requestSignal(signal),\n            });\n            if (response.status >= 500) {\n                const text = await response.text().catch(() => \"\");\n                return {\n                    status: \"failed\",\n                    message: `Kimi Code device token request failed with status ${response.status}${text ? `: ${text}` : \"\"}`,\n                };\n            }\n            const json = await readJson(response);\n            if (response.ok && typeof json?.access_token === \"string\") {\n                try {\n                    return { status: \"complete\", value: parseTokenResponse(json, \"poll\") };\n                }\n                catch (error) {\n                    return { status: \"failed\", message: error instanceof Error ? error.message : String(error) };\n                }\n            }\n            const error = json?.error;\n            const description = typeof json?.error_description === \"string\" ? `: ${json.error_description}` : \"\";\n            if (error === \"authorization_pending\") {\n                return { status: \"pending\" };\n            }\n            if (error === \"slow_down\") {\n                const interval = json?.interval;\n                return {\n                    status: \"slow_down\",\n                    intervalSeconds: typeof interval === \"number\" && interval > 0 ? interval : undefined,\n                };\n            }\n            if (error === \"expired_token\") {\n                return { status: \"failed\", message: \"Kimi Code device authorization expired. Please restart login.\" };\n            }\n            if (error === \"access_denied\") {\n                return { status: \"failed\", message: \"Kimi Code login was denied.\" };\n            }\n            return {\n                status: \"failed\",\n                message: `Kimi Code device token request failed (status ${response.status})${typeof error === \"string\" ? `: ${error}${description}` : \"\"}`,\n            };\n        },\n    });\n}\nfunction sleep(ms, signal) {\n    return new Promise((resolve, reject) => {\n        signal.throwIfAborted();\n        const onAbort = () => {\n            clearTimeout(timeout);\n            reject(signal.reason);\n        };\n        const timeout = setTimeout(() => {\n            signal.removeEventListener(\"abort\", onAbort);\n            resolve();\n        }, ms);\n        signal.addEventListener(\"abort\", onAbort, { once: true });\n    });\n}\nfunction isRetryableRefreshFailure(response) {\n    return response.status === 429 || response.status >= 500;\n}\nasync function refreshToken(oauthHost, refreshTokenValue, signal) {\n    let lastError;\n    for (let attempt = 0; attempt <= REFRESH_MAX_RETRIES; attempt++) {\n        if (attempt > 0) {\n            await sleep(1000 * 2 ** (attempt - 1), signal);\n        }\n        if (signal.aborted) {\n            throw new Error(\"Kimi Code token refresh aborted\");\n        }\n        let response;\n        try {\n            response = await fetch(`${oauthHost}/api/oauth/token`, {\n                method: \"POST\",\n                headers: {\n                    \"Content-Type\": \"application/x-www-form-urlencoded\",\n                    Accept: \"application/json\",\n                },\n                body: formUrlEncode({\n                    client_id: CLIENT_ID,\n                    grant_type: \"refresh_token\",\n                    refresh_token: refreshTokenValue,\n                }),\n                signal: requestSignal(signal),\n            });\n        }\n        catch (error) {\n            lastError = error instanceof Error ? error : new Error(String(error));\n            continue;\n        }\n        const json = await readJson(response);\n        if (response.ok) {\n            return parseTokenResponse(json, \"refresh\");\n        }\n        // Unauthorized: the stored credential is dead; Models clears it and prompts re-login.\n        if (response.status === 401 || response.status === 403 || json?.error === \"invalid_grant\") {\n            const description = typeof json?.error_description === \"string\" ? `: ${json.error_description}` : \"\";\n            throw new Error(`Kimi Code token refresh unauthorized (status ${response.status})${description}`);\n        }\n        if (isRetryableRefreshFailure(response) && attempt < REFRESH_MAX_RETRIES) {\n            lastError = new Error(`Kimi Code token refresh failed with status ${response.status}`);\n            continue;\n        }\n        const text = JSON.stringify(json);\n        throw new Error(`Kimi Code token refresh failed with status ${response.status}${text ? `: ${text}` : \"\"}`);\n    }\n    throw lastError ?? new Error(\"Kimi Code token refresh failed\");\n}\nasync function loginKimiCoding(interaction) {\n    const oauthHost = getOauthHost();\n    const device = await startDeviceAuthorization(oauthHost, interaction.signal);\n    interaction.notify({\n        type: \"device_code\",\n        userCode: device.userCode,\n        verificationUri: device.verificationUriComplete,\n        intervalSeconds: device.intervalSeconds,\n        expiresInSeconds: device.expiresInSeconds,\n    });\n    const token = await pollForToken(oauthHost, device, interaction.signal);\n    return { type: \"oauth\", access: token.access, refresh: token.refresh, expires: token.expires };\n}\nexport const kimiCodingOAuth = {\n    name: \"Kimi Code (subscription)\",\n    isSubscription: true,\n    loginLabel: \"Sign in with Kimi Code\",\n    login: loginKimiCoding,\n    refresh: async (credential, signal) => {\n        const token = await refreshToken(getOauthHost(), credential.refresh, signal);\n        return { type: \"oauth\", access: token.access, refresh: token.refresh, expires: token.expires };\n    },\n    async toAuth(credential) {\n        return { headers: { Authorization: `Bearer ${credential.access}` } };\n    },\n};\n//# sourceMappingURL=kimi-coding.js.map","import { lazyApi } from \"./lazy.js\";\nexport const anthropicMessagesApi = () => lazyApi(() => import(\"./anthropic-messages.js\"));\n//# sourceMappingURL=anthropic-messages.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const openAICompletionsApi = () => lazyApi(() => import(\"./openai-completions.js\"));\n//# sourceMappingURL=openai-completions.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const openAIResponsesApi = () => lazyApi(() => import(\"./openai-responses.js\"));\n//# sourceMappingURL=openai-responses.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const openAICodexResponsesApi = () => lazyApi(() => import(\"./openai-codex-responses.js\"));\n//# sourceMappingURL=openai-codex-responses.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const azureOpenAIResponsesApi = () => lazyApi(() => import(\"./azure-openai-responses.js\"));\n//# sourceMappingURL=azure-openai-responses.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const googleGenerativeAIApi = () => lazyApi(() => import(\"./google-generative-ai.js\"));\n//# sourceMappingURL=google-generative-ai.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const googleVertexApi = () => lazyApi(() => import(\"./google-vertex.js\"));\n//# sourceMappingURL=google-vertex.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const mistralConversationsApi = () => lazyApi(() => import(\"./mistral-conversations.js\"));\n//# sourceMappingURL=mistral-conversations.lazy.js.map","var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {\n    if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n        return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n            return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n        });\n    }\n    return path;\n};\nimport { lazyApi } from \"./lazy.js\";\n/**\n * Loads the bedrock implementation through a variable specifier so bundlers\n * (browser smoke, Bun compile) cannot follow the import into the Node-only\n * AWS SDK. The `.ts`/`.js` rewrite keeps the trick working from both source\n * and built output.\n */\nconst importNodeOnlyApi = (specifier) => {\n    const runtimeSpecifier = import.meta.url.endsWith(\".js\") ? specifier.replace(/\\.ts$/, \".js\") : specifier;\n    return import(__rewriteRelativeImportExtension(runtimeSpecifier));\n};\nlet bedrockModuleOverride;\n/**\n * Overrides the dynamically imported bedrock implementation. Used by the Bun\n * binary build, where the variable-specifier import cannot be bundled; the\n * build registers a statically imported module instead.\n */\nexport function setBedrockProviderModule(module) {\n    bedrockModuleOverride = module;\n}\nexport const bedrockConverseStreamApi = () => lazyApi(async () => bedrockModuleOverride ?? (await importNodeOnlyApi(\"./bedrock-converse-stream.ts\")));\n//# sourceMappingURL=bedrock-converse-stream.lazy.js.map","import { lazyApi } from \"./lazy.js\";\nexport const piMessagesApi = () => lazyApi(() => import(\"./pi-messages.js\"));\n//# sourceMappingURL=pi-messages.lazy.js.map","// Headless @earendil-works/pi-ai compatibility surface.\n//\n// Provider SDKs, OAuth flows, and streaming transports stay native to DSH;\n// this module carries the schema helpers, error classifiers, and thinking-\n// level math that Pi extensions import for their own logic. Overflow/retry\n// classifiers are vendored byte-identical (see ./vendor/PI-LICENSE) so\n// pattern tables stay in sync with Pi.\n\nimport { AsyncLocalStorage } from 'node:async_hooks'\n\nexport type { Static, TSchema } from 'typebox'\nexport { Type } from 'typebox'\nexport { isContextOverflow, isRecoverableLength } from './vendor/pi-ai-overflow.js'\nexport { isRetryableAssistantError } from './vendor/pi-ai-retry.js'\nexport { uuidv7 } from './vendor/pi-uuid.js'\nexport type {\n  AgentMessage,\n  AssistantMessage,\n  ImageContent,\n  Message,\n  TextContent,\n  ThinkingContent,\n  ToolCallContent,\n  ToolResultMessage,\n  Usage,\n  UserMessage,\n} from './vendor/pi-types.js'\n\nexport type ThinkingLevel = 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'\nexport type ModelThinkingLevel = 'off' | ThinkingLevel\nexport type ThinkingLevelMap = Partial<Record<ModelThinkingLevel, string | null>>\nexport type Api = string\n\n/**\n * Pi's standard stored-key → ordered environment fallback auth helper.\n * Semantics copied unchanged from Pi 0.84.1\n * (`packages/ai/src/auth/helpers.ts`, commit\n * 6f707eb36064e82af9c1320a7634f4dfad21049b).\n */\nexport function envApiKeyAuth(name: string, envVars: readonly string[]): UnknownRecord {\n  return {\n    name,\n    login: async (interaction: {\n      signal: AbortSignal\n      prompt(input: { type: 'secret', message: string }): Promise<string>\n    }) => {\n      interaction.signal.throwIfAborted()\n      const key = await interaction.prompt({ type: 'secret', message: `Enter ${name}` })\n      interaction.signal.throwIfAborted()\n      return { type: 'api_key', key }\n    },\n    resolve: async ({\n      ctx,\n      credential,\n      signal,\n    }: {\n      ctx: { env(name: string): Promise<string | undefined> }\n      credential?: { key?: string, env?: Record<string, string> }\n      signal: AbortSignal\n    }) => {\n      signal.throwIfAborted()\n      if (credential?.key) {\n        return { auth: { apiKey: credential.key }, env: credential.env, source: 'stored credential' }\n      }\n      for (const envVar of envVars) {\n        const value = await ctx.env(envVar)\n        signal.throwIfAborted()\n        if (value) return { auth: { apiKey: value }, source: envVar }\n      }\n      return undefined\n    },\n  }\n}\n\nexport interface Model<TApi extends Api = Api> {\n  id: string\n  name?: string\n  api?: TApi\n  provider?: string\n  baseUrl?: string\n  reasoning?: boolean\n  thinkingLevelMap?: ThinkingLevelMap\n  input?: readonly ('text' | 'image')[]\n  contextWindow?: number\n  maxTokens?: number\n  [key: string]: unknown\n}\n\nconst EXTENDED_THINKING_LEVELS: ModelThinkingLevel[] = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max']\n\nexport function getSupportedThinkingLevels<TApi extends Api>(model: Model<TApi>): ModelThinkingLevel[] {\n  return EXTENDED_THINKING_LEVELS.filter(level => {\n    const mapped = model.thinkingLevelMap?.[level]\n    if (mapped === null) return false\n    if (level === 'xhigh' || level === 'max') return mapped !== undefined\n    return true\n  })\n}\n\nexport function clampThinkingLevel<TApi extends Api>(\n  model: Model<TApi>,\n  level: ModelThinkingLevel,\n): ModelThinkingLevel {\n  const availableLevels = getSupportedThinkingLevels(model)\n  if (availableLevels.includes(level)) return level\n  const requestedIndex = EXTENDED_THINKING_LEVELS.indexOf(level)\n  if (requestedIndex === -1) return availableLevels[0] ?? 'off'\n  for (let i = requestedIndex; i < EXTENDED_THINKING_LEVELS.length; i += 1) {\n    const candidate = EXTENDED_THINKING_LEVELS[i]!\n    if (availableLevels.includes(candidate)) return candidate\n  }\n  for (let i = requestedIndex - 1; i >= 0; i -= 1) {\n    const candidate = EXTENDED_THINKING_LEVELS[i]!\n    if (availableLevels.includes(candidate)) return candidate\n  }\n  return availableLevels[0] ?? 'off'\n}\n\nexport function modelsAreEqual<TApi extends Api>(\n  a: Model<TApi> | null | undefined,\n  b: Model<TApi> | null | undefined,\n): boolean {\n  if (a === null || a === undefined || b === null || b === undefined) return false\n  return a.id === b.id && a.provider === b.provider\n}\n\ninterface TextishContent {\n  type: string\n  text?: string\n  [key: string]: unknown\n}\n\nexport function contentText(content: string | readonly TextishContent[], separator = '\\n'): string {\n  if (typeof content === 'string') return content\n  return content\n    .filter(block => block.type === 'text')\n    .map(block => String(block.text ?? ''))\n    .join(separator)\n}\n\n// Legacy pi-ai/compat global-registry API. The registry is bridge-local:\n// providers registered here are visible to the same package but never route\n// real model calls (DSH llm adapters own those).\ninterface PiAiRuntimeRegistry {\n  compatProviders: Map<string, unknown>\n  apiProviders: Map<string, { provider: CompatApiProvider, sourceId: string | undefined }>\n}\n\nconst globalRegistry: PiAiRuntimeRegistry = {\n  compatProviders: new Map(),\n  apiProviders: new Map(),\n}\nconst scopedRegistry = new AsyncLocalStorage<PiAiRuntimeRegistry>()\n\nconst registry = (): PiAiRuntimeRegistry => scopedRegistry.getStore() ?? globalRegistry\n\n/** Create one isolated copy of Pi's process registries for an Agent runtime. */\nexport function __createPiAiRuntimeRegistry(): PiAiRuntimeRegistry {\n  return { compatProviders: new Map(), apiProviders: new Map() }\n}\n\nexport function registerProvider(name: string, provider: unknown): void {\n  registry().compatProviders.set(name, provider)\n}\n\n// Pi's compat getProviders() returns provider NAMES (callers iterate and\n// Set() them).\nexport function getProviders(): string[] {\n  return [...registry().compatProviders.keys()]\n}\n\nexport function getProvider(name: string): unknown {\n  return registry().compatProviders.get(name)\n}\n\nexport function getModel(_provider: string, _id: string): undefined {\n  return undefined\n}\n\n// Pi exports both spellings of these three (`getModels` is an alias for\n// `getBuiltinModels`, and the providers/all entry uses the builtin spelling).\n// A package importing the name we happened not to export throws at load and\n// takes its whole package down, which reads as \"the plugin is broken\".\nexport const getBuiltinModels = (provider?: string): unknown[] => getModels(provider)\nexport const getBuiltinModel = (provider: string, id: string): undefined => getModel(provider, id)\nexport const getBuiltinProviders = (): string[] => getProviders()\n\nexport function getModels(_provider?: string): unknown[] {\n  return []\n}\n\n// Provider declaration factory, vendored from Pi (provider packages like\n// pi-provider-litellm build their provider object with it at load time and\n// hand it to pi.registerProvider). Model TRANSPORT stays native to DSH llm:\n// the lazy API factories below return Pi's exact lazy-stream surface, and if\n// a stream is ever actually requested the setup fails through Pi's own error\n// channel (an error event on the stream) instead of pretending to call a model.\nexport { createProvider, ModelsError } from './vendor/pi-ai-provider.js'\nexport { lazyApi, lazyStream } from './vendor/pi-ai-lazy.js'\nexport { AssistantMessageEventStream } from './vendor/pi-ai-event-stream.js'\n\n// A transport-owning provider package is different from a package merely\n// asking Pi to call a model: it deliberately builds its own wire client and\n// hands that transport to registerProvider(). pi-grok is one such package —\n// its stream wrapper delegates to Pi's standard Responses implementation and\n// relies on that implementation's onPayload seam. Export the REAL helper so\n// the package keeps owning the request body while pi2dsh wraps the finished\n// provider as a native DSH llm adapter. This dependency is bundled into the\n// shim artifact; the installed package does not need its own pi-ai runtime.\nexport { streamSimple as streamSimpleOpenAIResponses } from '@earendil-works/pi-ai/api/openai-responses'\n\n\n// Pi's official OAuth flows, vendored byte-identical: OpenAI Codex\n// (PKCE + localhost:1455 callback server, device-code fallback), Anthropic,\n// GitHub Copilot, Kimi Coding. Each exposes pi-ai's native oauth surface\n// (login(interaction)/refresh/toAuth) and runs its real protocol against the\n// real endpoints — account packages like @narumitw/pi-accounts load them\n// through builtinProviders()/the lazy loaders below.\nexport { openaiCodexOAuth } from './vendor/pi-oauth-flows/openai-codex.js'\nexport { anthropicOAuth } from './vendor/pi-oauth-flows/anthropic.js'\nexport { githubCopilotOAuth } from './vendor/pi-oauth-flows/github-copilot.js'\nexport { kimiCodingOAuth } from './vendor/pi-oauth-flows/kimi-coding.js'\nexport { generatePKCE } from './vendor/pi-oauth-flows/pkce.js'\nexport { pollOAuthDeviceCodeFlow } from './vendor/pi-oauth-flows/device-code.js'\n\nimport { openaiCodexOAuth as codexFlow } from './vendor/pi-oauth-flows/openai-codex.js'\nimport { anthropicOAuth as anthropicFlow } from './vendor/pi-oauth-flows/anthropic.js'\nimport { githubCopilotOAuth as copilotFlow } from './vendor/pi-oauth-flows/github-copilot.js'\nimport { kimiCodingOAuth as kimiFlow } from './vendor/pi-oauth-flows/kimi-coding.js'\n\n// The provider catalog surface account packages consume: id + the real OAuth\n// flow. Model catalogs stay empty — model routing is DSH-native in this host.\nexport function builtinProviders(): Array<{ id: string, name: string, api: string, baseUrl: string, models: never[], auth: { oauth: unknown } }> {\n  const entry = (id: string, name: string, baseUrl: string, oauth: unknown) => ({\n    id, name, api: 'openai-completions', baseUrl, models: [] as never[], auth: { oauth },\n  })\n  return [\n    entry('openai-codex', 'OpenAI (ChatGPT Plus/Pro)', 'https://chatgpt.com/backend-api/codex', codexFlow),\n    entry('anthropic', 'Anthropic', 'https://api.anthropic.com', anthropicFlow),\n    entry('github-copilot', 'GitHub Copilot', 'https://api.githubcopilot.com', copilotFlow),\n    entry('kimi-coding', 'Kimi Code', 'https://api.moonshot.ai/anthropic', kimiFlow),\n  ]\n}\n\nexport const loadOpenAICodexOAuth = async (): Promise<unknown> => codexFlow\nexport const loadAnthropicOAuth = async (): Promise<unknown> => anthropicFlow\nexport const loadGitHubCopilotOAuth = async (): Promise<unknown> => copilotFlow\nexport const loadKimiCodingOAuth = async (): Promise<unknown> => kimiFlow\n\n// pi-ai/compat's process-wide api-provider registry, same semantics as\n// upstream: one entry per api id, streams wrapped with an api-match guard,\n// unregistration scoped to the owning sourceId. Packages use it as a shared\n// fallback table (pi-provider-kimi-code registers stream handlers here inside\n// a try/catch it designed for hosts without the module) — providing the real\n// surface keeps that optional path working instead of turning a resolvable\n// import with a missing export into a crash.\ninterface CompatApiProvider {\n  api: string\n  stream: (...args: unknown[]) => unknown\n  streamSimple: (...args: unknown[]) => unknown\n}\n\nfunction guardApi(api: string, fn: (...args: unknown[]) => unknown): (...args: unknown[]) => unknown {\n  return (model: unknown, ...rest: unknown[]) => {\n    const modelApi = (model as { api?: unknown } | undefined)?.api\n    if (modelApi !== api) throw new Error(`Mismatched api: ${String(modelApi)} expected ${api}`)\n    return fn(model, ...rest)\n  }\n}\n\nexport function registerApiProvider(provider: CompatApiProvider, sourceId?: string): void {\n  registry().apiProviders.set(provider.api, {\n    provider: {\n      api: provider.api,\n      stream: guardApi(provider.api, provider.stream),\n      streamSimple: guardApi(provider.api, provider.streamSimple),\n    },\n    sourceId,\n  })\n}\n\nexport function getApiProvider(api: string): CompatApiProvider | undefined {\n  return registry().apiProviders.get(api)?.provider\n}\n\nexport function getApiProviders(): CompatApiProvider[] {\n  return Array.from(registry().apiProviders.values(), entry => entry.provider)\n}\n\nexport function unregisterApiProviders(sourceId: string): void {\n  const providers = registry().apiProviders\n  for (const [api, entry] of providers.entries()) {\n    if (entry.sourceId === sourceId) providers.delete(api)\n  }\n}\n\n// Designated-model calls. When a pi2dsh runtime with a mounted DSH llm\n// service is active, complete()/stream() run REAL model calls through\n// ctx.llm.stream() (the host installs the bridge at mount). Without one, the\n// explicit-failure contract stands — never a fabricated response.\ntype PiAiLlmBridge = (model: UnknownRecord, context: UnknownRecord, options: UnknownRecord | undefined) => {\n  result(): Promise<unknown>\n  [Symbol.asyncIterator](): AsyncIterator<unknown>\n}\n\ntype UnknownRecord = Record<string, unknown>\n\nlet activeLlmBridge: PiAiLlmBridge | undefined\nconst scopedLlmBridge = new AsyncLocalStorage<PiAiLlmBridge | undefined>()\n\nexport function __setPiAiLlmBridge(bridge: PiAiLlmBridge | undefined): void {\n  activeLlmBridge = bridge\n}\n\n/** Run extension-owned work with the exact Agent runtime's DSH llm bridge. */\nexport function __runWithPiAiLlmBridge<T>(\n  bridge: PiAiLlmBridge | undefined,\n  callback: () => T,\n): T {\n  return scopedLlmBridge.run(bridge, callback)\n}\n\n/** Bind both designated-model routing and Pi's registries to one Agent runtime. */\nexport function __runWithPiAiRuntime<T>(\n  bridge: PiAiLlmBridge | undefined,\n  runtimeRegistry: PiAiRuntimeRegistry,\n  callback: () => T,\n): T {\n  return scopedRegistry.run(runtimeRegistry, () => scopedLlmBridge.run(bridge, callback))\n}\n\n// Internal bridge access for the pi-coding-agent shim: the vendored\n// summarization/compaction functions take Pi's own streamFn injection point,\n// and pi2dsh injects this bridge there so every model call runs on the ONE\n// path (the DSH llm route). Undefined without a mounted llm service — the\n// vendored fallback then fails loud instead of reaching a provider SDK.\nexport function __getPiAiLlmBridge(): PiAiLlmBridge | undefined {\n  return scopedLlmBridge.getStore() ?? activeLlmBridge\n}\n\nfunction requireLlmBridge(api: string): PiAiLlmBridge {\n  const bridge = __getPiAiLlmBridge()\n  if (bridge === undefined) {\n    throw new Error(`pi2dsh: pi-ai ${api}() needs a DSH llm service; this composition mounts none, so model calls cannot be routed`)\n  }\n  return bridge\n}\n\nexport async function complete(model: UnknownRecord, context: UnknownRecord, options?: UnknownRecord): Promise<unknown> {\n  const stream = requireLlmBridge('complete')(model, context, options)\n  const result = await stream.result()\n  if (result instanceof Error) throw result\n  return result\n}\n\nexport function stream(model: UnknownRecord, context: UnknownRecord, options?: UnknownRecord): unknown {\n  return requireLlmBridge('stream')(model, context, options)\n}\n\n/** The legacy compat entrypoint's unified-options calls use the same host route. */\nfunction simpleCallOptions(model: UnknownRecord, options?: UnknownRecord): UnknownRecord | undefined {\n  // Pi's simple API disables optional thinking when reasoning is absent.\n  // Leaving it omitted on DSH would inherit the host's (often high) default.\n  const levels = model.thinkingLevelMap as Record<string, unknown> | undefined\n  if (options?.reasoning === undefined && model.reasoning === true && levels?.off !== null) {\n    return { ...options, reasoning: 'off' }\n  }\n  return options\n}\n\nexport function streamSimple(model: UnknownRecord, context: UnknownRecord, options?: UnknownRecord): unknown {\n  return requireLlmBridge('streamSimple')(model, context, simpleCallOptions(model, options))\n}\n\nexport async function completeSimple(model: UnknownRecord, context: UnknownRecord, options?: UnknownRecord): Promise<unknown> {\n  const result = await requireLlmBridge('completeSimple')(model, context, simpleCallOptions(model, options)).result()\n  if (result instanceof Error) throw result\n  return result\n}\n\nexport interface SimpleStreamOptions extends Record<string, unknown> {\n  reasoning?: ThinkingLevel\n  maxTokens?: number\n  temperature?: number\n  signal?: AbortSignal\n}\n\n/**\n * Pi's per-protocol transport factories.\n *\n * Pi ships one factory per wire protocol (`pi-ai/compat`), and a gateway\n * package's most common shape is to take the standard one for its protocol and\n * hand it to `registerProvider`. Without these names such a package throws at\n * import — `openAICompletionsApi is not a function` — and the whole package\n * fails to mount, which reads as \"the plugin is broken\" rather than \"the bridge\n * is missing an export\".\n *\n * These factories are different from top-level `complete()` / `stream()`:\n * calling a factory is how a Provider package deliberately takes ownership of\n * a wire transport before registering the finished Provider with its host.\n * Returning a DSH-routed placeholder here makes that Provider recurse back\n * into the route currently invoking it. Re-export Pi's real lazy factories;\n * pi2dsh then wraps the package-owned Provider as one native DSH adapter.\n */\nexport { anthropicMessagesApi } from '@earendil-works/pi-ai/api/anthropic-messages.lazy'\nexport { openAICompletionsApi } from '@earendil-works/pi-ai/api/openai-completions.lazy'\nexport { openAIResponsesApi } from '@earendil-works/pi-ai/api/openai-responses.lazy'\nexport { openAICodexResponsesApi } from '@earendil-works/pi-ai/api/openai-codex-responses.lazy'\nexport { azureOpenAIResponsesApi } from '@earendil-works/pi-ai/api/azure-openai-responses.lazy'\nexport { googleGenerativeAIApi } from '@earendil-works/pi-ai/api/google-generative-ai.lazy'\nexport { googleVertexApi } from '@earendil-works/pi-ai/api/google-vertex.lazy'\nexport { mistralConversationsApi } from '@earendil-works/pi-ai/api/mistral-conversations.lazy'\nexport { bedrockConverseStreamApi } from '@earendil-works/pi-ai/api/bedrock-converse-stream.lazy'\nexport { piMessagesApi } from '@earendil-works/pi-ai/api/pi-messages.lazy'\n\nexport interface StringEnumOptions<T extends readonly string[]> {\n  description?: string\n  default?: T[number]\n}\n\nexport function StringEnum<T extends readonly string[]>(\n  values: T,\n  options: StringEnumOptions<T> = {},\n): { type: 'string'; enum: T; description?: string; default?: T[number] } {\n  return {\n    type: 'string',\n    enum: values,\n    ...(options.description !== undefined ? { description: options.description } : {}),\n    ...(options.default !== undefined ? { default: options.default } : {}),\n  }\n}\n"],"x_google_ignoreList":[6,7,19,20,21,22,23,24,25,26,27,28],"mappings":"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"}