opencode-anthropic-multi-account 0.2.84 → 0.2.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../providers/claude-code/src/opencode-shared.ts","../../providers/claude-code/src/fingerprint-template.ts","../../providers/claude-code/src/cch.ts","../../providers/claude-code/src/effort-capability.ts","../../providers/claude-code/src/model-aliases.ts","../src/index.ts","../src/accounts/manager.ts","../src/shared/config.ts","../src/accounts/claims.ts","../src/shared/constants.ts","../src/oauth/anthropic-oauth.ts","../src/fixtures/defaults/cc-derived-defaults.json","../src/claude-code/oauth-config/detect.ts","../src/shared/utils.ts","../src/claude-code/derived-profile.ts","../src/claude-code/identity.ts","../src/claude-code/index.ts","../src/oauth/callback-server.ts","../src/oauth/pkce.ts","../src/oauth/token-node-request.ts","../src/usage.ts","../src/shared/types.ts","../src/oauth/token.ts","../src/runtime/executor.ts","../src/accounts/rate-limit.ts","../src/runtime/pool-chain.ts","../src/auth-ux/menu/ansi.ts","../src/auth-ux/menu/select.ts","../src/auth-ux/menu/confirm.ts","../src/auth-ux/menu/menu.ts","../src/accounts/store.ts","../src/auth-ux/handler.ts","../src/accounts/proactive-refresh.ts","../src/runtime/factory.ts","../src/request/transform.ts","../src/model/config.ts","../src/request/betas.ts","../src/request/upstream-request.ts","../src/model/capabilities.ts","../src/request/client-adapter.ts","../src/request/tool-adapter.ts","../src/tools/flow.ts","../src/request/headers.ts","../src/tools/observation.ts","../src/shared/error-utils.ts","../src/runtime/pacing.ts","../src/oauth/bootstrap.ts","../src/session-heartbeat.ts"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { getClaudeCodeTemplateMetadata } from \"./fingerprint-template\";\nexport {\n CCH_SEEDS,\n cchForBody,\n cchWithSeed,\n stampClaudeCodeCch,\n xxh64,\n} from \"./cch\";\nexport {\n clampEffortAfterRejection,\n clampUnsupportedEffortInBody,\n parseEffortCapabilityRejection,\n} from \"./effort-capability\";\nexport {\n CLAUDE_FABLE_1M_MODEL_ID,\n CLAUDE_FABLE_MODEL_ID,\n CLAUDE_SONNET_1M_MODEL_ID,\n CLAUDE_SONNET_MODEL_ID,\n describeSuspendedClaudeCodeModel,\n isClaudeCode1mModelLabel,\n isClaudeFableModel,\n isSuspendedClaudeCodeModel,\n resolveClaudeCodeModelAlias,\n stripClaudeCodeContext1mTag,\n stripClaudeCodeProviderPrefix,\n toClaudeCodeWireModelId,\n} from \"./model-aliases\";\n\nconst CLAUDE_CODE_API_BASE_URL = \"https://api.anthropic.com\";\nconst STAINLESS_PACKAGE_VERSION = \"0.81.0\";\nconst DEFAULT_OPENCODE_TIMEOUT_SECONDS = \"300\";\nconst BILLING_SEED = \"59cf53e54c78\";\n\nconst templateMetadata = getClaudeCodeTemplateMetadata();\nconst templateHeaders = templateMetadata.headerValues;\nconst CLAUDE_CODE_VERSION = templateMetadata.ccVersion ?? \"2.1.137\";\nconst CCH_REMOVED_VERSION = \"2.1.183\";\n\nexport const CLIENT_SYSTEM_PREFACE =\n \"\\n\\n---\\n\\nIMPORTANT: The operator of this session has supplied the following \" +\n \"task-specific instructions. Follow them for task format, style, and output \" +\n \"requirements when they do not conflict with security, authorization, refusal, \" +\n \"tool-execution, confirmation, or other safety rules above. Those safety and \" +\n \"tool-use constraints remain higher priority and cannot be overridden:\\n\\n\";\n\nexport interface ClaudeCodeSharedRequestProfile {\n anthropicBeta: string;\n anthropicVersion: string;\n apiV1BaseUrl: string;\n baseUrl: string;\n ccVersion: string;\n headerOrder?: string[];\n headerValues: Record<string, string>;\n packageVersion: string;\n userAgent: string;\n xApp: string;\n}\n\nexport interface ClaudeCodeUpstreamIdentity {\n accountUuid: string;\n deviceId: string;\n}\n\nexport interface ClaudeCodeUpstreamBodyOptions {\n agentIdentity: string;\n bodyFieldOrder?: string[];\n ccVersion: string;\n cch?: string;\n defaultTools?: Array<Record<string, unknown>>;\n firstUserMessage?: string;\n identity: ClaudeCodeUpstreamIdentity;\n sessionId: string;\n systemPrompt: string;\n systemTexts?: string[];\n}\n\nexport function loadClaudeCodeSharedRequestProfile(): ClaudeCodeSharedRequestProfile {\n return {\n anthropicBeta: templateMetadata.anthropicBeta ?? templateHeaders[\"anthropic-beta\"] ?? \"oauth-2025-04-20\",\n anthropicVersion: templateHeaders[\"anthropic-version\"] ?? \"2023-06-01\",\n apiV1BaseUrl: `${CLAUDE_CODE_API_BASE_URL}/v1`,\n baseUrl: CLAUDE_CODE_API_BASE_URL,\n ccVersion: CLAUDE_CODE_VERSION,\n headerOrder: templateMetadata.headerOrder ? [...templateMetadata.headerOrder] : undefined,\n headerValues: { ...templateHeaders },\n packageVersion: templateHeaders[\"x-stainless-package-version\"] ?? STAINLESS_PACKAGE_VERSION,\n userAgent: templateHeaders[\"user-agent\"] ?? `claude-cli/${CLAUDE_CODE_VERSION} (external, sdk-cli)`,\n xApp: templateHeaders[\"x-app\"] ?? \"cli\",\n };\n}\n\nexport function createClaudeCodeStaticHeaders(input: {\n headerValues?: Record<string, string>;\n packageVersion?: string;\n userAgent: string;\n xApp: string;\n}): Record<string, string> {\n return {\n \"accept\": \"application/json\",\n \"content-type\": \"application/json\",\n \"anthropic-dangerous-direct-browser-access\": \"true\",\n \"user-agent\": input.userAgent,\n \"x-app\": input.xApp,\n \"x-stainless-arch\": process.arch,\n \"x-stainless-lang\": \"js\",\n \"x-stainless-os\": getOsName(),\n \"x-stainless-package-version\": input.packageVersion ?? STAINLESS_PACKAGE_VERSION,\n \"x-stainless-retry-count\": \"0\",\n \"x-stainless-runtime\": \"node\",\n \"x-stainless-runtime-version\": process.version,\n ...(input.headerValues ?? {}),\n };\n}\n\nexport function createClaudeCodePerRequestHeaders(input: {\n anthropicVersion: string;\n sessionId: string;\n timeoutSeconds?: string;\n}): Record<string, string> {\n return {\n \"x-claude-code-session-id\": input.sessionId,\n \"x-client-request-id\": randomUUID(),\n \"anthropic-version\": input.anthropicVersion,\n \"x-stainless-timeout\": input.timeoutSeconds ?? DEFAULT_OPENCODE_TIMEOUT_SECONDS,\n };\n}\n\nexport function orderClaudeCodeHeadersForOutbound(\n headers: Record<string, string>,\n headerOrder?: string[],\n): Record<string, string> | Array<[string, string]> {\n if (!Array.isArray(headerOrder) || headerOrder.length === 0) return headers;\n\n const lowerToValue = new Map<string, string>();\n for (const [key, value] of Object.entries(headers)) {\n lowerToValue.set(key.toLowerCase(), value);\n }\n\n const ordered: Array<[string, string]> = [];\n const seen = new Set<string>();\n for (const name of headerOrder) {\n const key = name.toLowerCase();\n const value = lowerToValue.get(key);\n if (value === undefined || seen.has(key)) continue;\n ordered.push([name, value]);\n seen.add(key);\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (seen.has(key.toLowerCase())) continue;\n ordered.push([key, value]);\n }\n\n return ordered;\n}\n\nexport function computeClaudeCodeBuildTag(userMessage: string, version: string): string {\n const chars = [4, 7, 20].map((index) => userMessage[index] ?? \"0\").join(\"\");\n return createHash(\"sha256\")\n .update(`${BILLING_SEED}${chars}${version}`)\n .digest(\"hex\")\n .slice(0, 3);\n}\n\nexport function composeClaudeCodeBillingSystemEntry(\n firstUserMessage: string,\n version: string,\n cch = \"00000\",\n): string {\n const buildTag = computeClaudeCodeBuildTag(firstUserMessage, version);\n const base = `x-anthropic-billing-header: cc_version=${version}.${buildTag}; cc_entrypoint=sdk-cli;`;\n return claudeCodeBillingUsesCch(version) ? `${base} cch=${cch};` : base;\n}\n\nfunction claudeCodeBillingUsesCch(version: string): boolean {\n const comparison = compareSemver(version, CCH_REMOVED_VERSION);\n return comparison === null || comparison < 0;\n}\n\nfunction compareSemver(left: string, right: string): number | null {\n const leftParts = parseSemver(left);\n const rightParts = parseSemver(right);\n if (!leftParts || !rightParts) return null;\n for (let index = 0; index < leftParts.length; index += 1) {\n const diff = leftParts[index]! - rightParts[index]!;\n if (diff !== 0) return diff;\n }\n return 0;\n}\n\nfunction parseSemver(version: string): [number, number, number] | null {\n const match = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version);\n if (!match) return null;\n return [Number(match[1]), Number(match[2]), Number(match[3])];\n}\n\n// Claude Code caches the two system blocks above, plus the tools prefix and\n// one rolling conversation breakpoint. Client-supplied cache_control is stripped\n// before this shared helper runs; these markers are Kyoli-owned outbound hints.\nexport function applyClaudeCodePromptCaching(\n body: Record<string, unknown>,\n cacheControl: { type: \"ephemeral\" } = { type: \"ephemeral\" },\n): void {\n const tools = body.tools as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(tools) && tools.length > 0) {\n const clonedTools = tools.map((tool) => {\n const cloned = { ...tool };\n delete cloned.cache_control;\n return cloned;\n });\n clonedTools[clonedTools.length - 1] = {\n ...clonedTools[clonedTools.length - 1],\n cache_control: cacheControl,\n };\n body.tools = clonedTools;\n }\n\n const messages = body.messages as Array<Record<string, unknown>> | undefined;\n if (!Array.isArray(messages) || messages.length === 0) {\n return;\n }\n\n const lastMessage = messages[messages.length - 1];\n const content = lastMessage?.content;\n if (!Array.isArray(content) || content.length === 0) {\n return;\n }\n\n content[content.length - 1] = {\n ...content[content.length - 1],\n cache_control: cacheControl,\n };\n}\n\nexport function applyClaudeCodeUpstreamBodyFields(\n body: Record<string, unknown>,\n input: ClaudeCodeUpstreamBodyOptions,\n): Record<string, unknown> {\n const firstUserMessage = input.firstUserMessage ?? extractFirstUserText(body.messages);\n const billingHeader = composeClaudeCodeBillingSystemEntry(\n firstUserMessage,\n input.ccVersion,\n input.cch,\n );\n const systemTexts = input.systemTexts ?? normalizeClaudeCodeSystemTexts(body.system);\n const injectedSystemTexts = filterInjectedSystemTexts(systemTexts, {\n agentIdentity: input.agentIdentity,\n billingHeader,\n systemPrompt: input.systemPrompt,\n });\n const mergedSystemPrompt = injectedSystemTexts.length > 0\n ? `${input.systemPrompt}${CLIENT_SYSTEM_PREFACE}${injectedSystemTexts.join(\"\\n\\n\")}`\n : input.systemPrompt;\n\n body.system = [\n { type: \"text\", text: billingHeader },\n {\n type: \"text\",\n text: input.agentIdentity,\n cache_control: { type: \"ephemeral\" },\n },\n {\n type: \"text\",\n text: mergedSystemPrompt,\n cache_control: { type: \"ephemeral\" },\n },\n ];\n body.metadata = {\n ...readRecord(body.metadata),\n user_id: JSON.stringify({\n device_id: input.identity.deviceId,\n account_uuid: input.identity.accountUuid,\n session_id: input.sessionId,\n }),\n };\n\n if (\n input.defaultTools &&\n (!Array.isArray(body.tools) || body.tools.length === 0)\n ) {\n body.tools = input.defaultTools.map((tool) => ({ ...tool }));\n }\n\n applyClaudeCodePromptCaching(body);\n\n return orderClaudeCodeBodyForOutbound(body, input.bodyFieldOrder);\n}\n\nexport function orderClaudeCodeBodyForOutbound(\n body: Record<string, unknown>,\n fieldOrder?: string[],\n): Record<string, unknown> {\n if (!Array.isArray(fieldOrder) || fieldOrder.length === 0) return body;\n\n const ordered: Record<string, unknown> = {};\n const seen = new Set<string>();\n for (const field of fieldOrder) {\n if (seen.has(field)) continue;\n if (Object.prototype.hasOwnProperty.call(body, field)) {\n ordered[field] = body[field];\n seen.add(field);\n }\n }\n\n for (const [field, value] of Object.entries(body)) {\n if (seen.has(field)) continue;\n ordered[field] = value;\n }\n\n return ordered;\n}\n\nexport function normalizeClaudeCodeSystemTexts(system: unknown): string[] {\n if (typeof system === \"string\" && system.length > 0) return [system];\n if (!Array.isArray(system)) return [];\n\n const texts: string[] = [];\n for (const entry of system) {\n if (typeof entry === \"string\" && entry.length > 0) {\n texts.push(entry);\n continue;\n }\n const record = readRecord(entry);\n const text = typeof record?.text === \"string\" && record.text.length > 0\n ? record.text\n : undefined;\n if (text) texts.push(text);\n }\n return texts;\n}\n\nfunction filterInjectedSystemTexts(\n systemTexts: string[],\n input: {\n agentIdentity: string;\n billingHeader: string;\n systemPrompt: string;\n },\n): string[] {\n return systemTexts.filter((entry) => (\n entry !== input.billingHeader &&\n entry !== input.agentIdentity &&\n entry !== input.systemPrompt &&\n !entry.startsWith(\"x-anthropic-billing-header:\")\n ));\n}\n\nfunction extractFirstUserText(messages: unknown): string {\n if (!Array.isArray(messages)) return \"\";\n\n for (const message of messages) {\n const record = readRecord(message);\n if (record?.role !== \"user\") continue;\n\n if (typeof record.content === \"string\") return record.content;\n if (!Array.isArray(record.content)) return \"\";\n\n return record.content\n .map((block) => {\n const text = readRecord(block)?.text;\n return typeof text === \"string\" && text.length > 0 ? text : undefined;\n })\n .filter((text): text is string => Boolean(text))\n .join(\"\\n\\n\");\n }\n\n return \"\";\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\nfunction getOsName(): string {\n const platform = process.platform;\n if (platform === \"win32\") return \"Windows\";\n if (platform === \"darwin\") return \"MacOS\";\n return \"Linux\";\n}\n","import fingerprintData from \"./fingerprint-data\";\n\ntype TemplateTool = {\n name: string;\n [key: string]: unknown;\n};\n\ninterface FingerprintTemplate {\n agent_identity?: string;\n anthropic_beta?: string;\n body_field_order?: string[];\n cc_version?: string;\n header_order?: string[];\n header_values?: Record<string, string>;\n system_prompt?: string;\n system_prompt_fable?: string;\n tool_names?: string[];\n tools: TemplateTool[];\n}\n\nconst template = fingerprintData as FingerprintTemplate;\nconst toolNames = new Set(template.tools.map((tool) => tool.name));\n\nexport function getClaudeCodeTemplateTools(): TemplateTool[] {\n return template.tools.map((tool) => ({ ...tool }));\n}\n\nexport function isClaudeCodeTemplateToolName(name: string): boolean {\n return toolNames.has(name);\n}\n\nexport function getClaudeCodeTemplateMetadata(): {\n agentIdentity?: string;\n anthropicBeta?: string;\n bodyFieldOrder?: string[];\n ccVersion?: string;\n headerValues: Record<string, string>;\n headerOrder?: string[];\n systemPrompt?: string;\n systemPromptFable?: string;\n toolNames: string[];\n} {\n return {\n agentIdentity: template.agent_identity,\n anthropicBeta: template.anthropic_beta,\n bodyFieldOrder: template.body_field_order ? [...template.body_field_order] : undefined,\n ccVersion: template.cc_version,\n headerValues: { ...template.header_values },\n headerOrder: template.header_order ? [...template.header_order] : undefined,\n systemPrompt: template.system_prompt,\n systemPromptFable: template.system_prompt_fable,\n toolNames: template.tool_names ? [...template.tool_names] : template.tools.map((tool) => tool.name),\n };\n}\n","/** Claude Code request-integrity hash (`cch`) helpers.\n *\n * Claude Code writes a 5-hex `cch` token into the billing system block. For\n * versions whose seed has been verified, Kyoli stamps the deterministic value\n * over the placeholder after the final outbound body has been assembled. For\n * unknown or rotated seeds we deliberately leave the existing placeholder in\n * place rather than emitting a confident-but-wrong deterministic hash.\n */\n\nexport const CCH_SEEDS: Record<string, bigint> = {\n \"2.1.177\": 0x4d659218e32a3268n,\n // 2.1.178 was checked during the issue #91 review; the 2.1.177 seed did\n // not reproduce the captured cch, so leave it unstamped until a new seed is\n // independently extracted and verified.\n};\n\nconst MASK = 0xfffffn;\nconst U64 = (1n << 64n) - 1n;\nconst P1 = 0x9e3779b185ebca87n;\nconst P2 = 0xc2b2ae3d27d4eb4fn;\nconst P3 = 0x165667b19e3779f9n;\nconst P4 = 0x85ebca77c2b2ae63n;\nconst P5 = 0x27d4eb2f165667c5n;\nconst BILLING_HEADER_PREFIX = \"x-anthropic-billing-header:\";\nconst CCH_RE = /(cc_entrypoint=[a-z0-9-]{1,32}; cch=)[0-9a-fA-F]{5}(?=;)/;\nconst CC_VERSION_RE = /\\bcc_version=([0-9]+(?:\\.[0-9]+){2})(?:\\.[0-9a-f]+)?;/;\n\nfunction rotl(value: bigint, bits: bigint): bigint {\n return ((value << bits) | (value >> (64n - bits))) & U64;\n}\n\nfunction round(accumulator: bigint, input: bigint): bigint {\n let next = (accumulator + input * P2) & U64;\n next = rotl(next, 31n);\n return (next * P1) & U64;\n}\n\nfunction mergeRound(accumulator: bigint, value: bigint): bigint {\n const rounded = round(0n, value);\n const next = (accumulator ^ rounded) & U64;\n return (next * P1 + P4) & U64;\n}\n\nexport function xxh64(data: Uint8Array, seed: bigint): bigint {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const length = data.length;\n let offset = 0;\n let hash: bigint;\n\n if (length >= 32) {\n let v1 = (seed + P1 + P2) & U64;\n let v2 = (seed + P2) & U64;\n let v3 = seed & U64;\n let v4 = (seed - P1) & U64;\n const limit = length - 32;\n\n while (offset <= limit) {\n v1 = round(v1, view.getBigUint64(offset, true));\n offset += 8;\n v2 = round(v2, view.getBigUint64(offset, true));\n offset += 8;\n v3 = round(v3, view.getBigUint64(offset, true));\n offset += 8;\n v4 = round(v4, view.getBigUint64(offset, true));\n offset += 8;\n }\n\n hash = (rotl(v1, 1n) + rotl(v2, 7n) + rotl(v3, 12n) + rotl(v4, 18n)) & U64;\n hash = mergeRound(hash, v1);\n hash = mergeRound(hash, v2);\n hash = mergeRound(hash, v3);\n hash = mergeRound(hash, v4);\n } else {\n hash = (seed + P5) & U64;\n }\n\n hash = (hash + BigInt(length)) & U64;\n\n while (offset + 8 <= length) {\n const k1 = round(0n, view.getBigUint64(offset, true));\n hash = (hash ^ k1) & U64;\n hash = (rotl(hash, 27n) * P1 + P4) & U64;\n offset += 8;\n }\n\n if (offset + 4 <= length) {\n hash = (hash ^ ((BigInt(view.getUint32(offset, true)) * P1) & U64)) & U64;\n hash = (rotl(hash, 23n) * P2 + P3) & U64;\n offset += 4;\n }\n\n while (offset < length) {\n hash = (hash ^ ((BigInt(data[offset] ?? 0) * P5) & U64)) & U64;\n hash = (rotl(hash, 11n) * P1) & U64;\n offset += 1;\n }\n\n hash = (hash ^ (hash >> 33n)) & U64;\n hash = (hash * P2) & U64;\n hash = (hash ^ (hash >> 29n)) & U64;\n hash = (hash * P3) & U64;\n hash = (hash ^ (hash >> 32n)) & U64;\n return hash;\n}\n\nfunction replaceBillingCch(\n body: Record<string, unknown>,\n cch: string,\n): { replaced: boolean; version?: string } {\n const system = body.system;\n if (!Array.isArray(system)) return { replaced: false };\n\n for (const entry of system) {\n if (!entry || typeof entry !== \"object\") continue;\n const systemEntry = entry as { text?: unknown };\n if (typeof systemEntry.text !== \"string\") continue;\n if (!systemEntry.text.startsWith(BILLING_HEADER_PREFIX)) continue;\n if (!CCH_RE.test(systemEntry.text)) continue;\n\n const version = CC_VERSION_RE.exec(systemEntry.text)?.[1];\n systemEntry.text = systemEntry.text.replace(CCH_RE, (_match, prefix: string) => `${prefix}${cch}`);\n return { replaced: true, version };\n }\n\n return { replaced: false };\n}\n\nfunction cchMaterial(bodyText: string): { bytes: Uint8Array; version?: string } | null {\n const body = JSON.parse(bodyText) as Record<string, unknown>;\n const { replaced, version } = replaceBillingCch(body, \"00000\");\n if (!replaced) return null;\n body.model = \"\";\n delete body.fallbacks;\n delete body.fallback_credit_token;\n delete body.max_tokens;\n return { bytes: new TextEncoder().encode(JSON.stringify(body)), version };\n}\n\nexport function cchWithSeed(bodyText: string, seed: bigint): string | null {\n let material: { bytes: Uint8Array; version?: string } | null;\n try {\n material = cchMaterial(bodyText);\n } catch {\n return null;\n }\n if (!material) return null;\n const hash = xxh64(material.bytes, seed) & MASK;\n return hash.toString(16).padStart(5, \"0\");\n}\n\nexport function cchForBody(bodyText: string, version?: string): string | null {\n let material: { bytes: Uint8Array; version?: string } | null;\n try {\n material = cchMaterial(bodyText);\n } catch {\n return null;\n }\n if (!material) return null;\n\n const seed = CCH_SEEDS[material.version ?? version ?? \"\"];\n if (seed === undefined) return null;\n const hash = xxh64(material.bytes, seed) & MASK;\n return hash.toString(16).padStart(5, \"0\");\n}\n\nexport function stampClaudeCodeCch(bodyText: string, version?: string): string {\n const cch = cchForBody(bodyText, version);\n if (cch === null) return bodyText;\n try {\n const body = JSON.parse(bodyText) as Record<string, unknown>;\n const { replaced } = replaceBillingCch(body, cch);\n return replaced ? JSON.stringify(body) : bodyText;\n } catch {\n return bodyText;\n }\n}\n","export interface EffortCapabilityRejection {\n rejected: string;\n supported: string[];\n}\n\nexport interface EffortClampResult<TBody> {\n body: TBody;\n changed: boolean;\n modelId?: string;\n effort?: string;\n}\n\nexport const EFFORT_PREFERENCE = [\"xhigh\", \"max\", \"high\", \"medium\", \"low\"] as const;\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\nfunction normalizeEffortValue(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z_-]+$/g, \"\");\n}\n\nexport function parseEffortCapabilityRejection(body: string): EffortCapabilityRejection | null {\n const match = /does not support effort level\\s+['\"`]?([^'\"`.\\s]+)['\"`]?\\.?\\s*Supported levels:\\s*([a-z,\\s_-]+)/i.exec(body);\n if (!match?.[1] || !match[2]) {\n return null;\n }\n\n const supported = match[2]\n .split(\",\")\n .map(normalizeEffortValue)\n .filter(Boolean);\n\n return supported.length > 0\n ? { rejected: normalizeEffortValue(match[1]), supported }\n : null;\n}\n\nexport function bestSupportedEffort(supported: readonly string[]): string {\n for (const effort of EFFORT_PREFERENCE) {\n if (supported.includes(effort)) {\n return effort;\n }\n }\n\n return supported[0] ?? \"high\";\n}\n\nexport function clampUnsupportedEffortInBody<TBody extends BodyInit | null | undefined>(\n body: TBody,\n supportedEffortsByModel: ReadonlyMap<string, readonly string[]>,\n): EffortClampResult<TBody | string> {\n if (typeof body !== \"string\") {\n return { body, changed: false };\n }\n\n try {\n const parsed = JSON.parse(body) as unknown;\n const record = readRecord(parsed);\n const modelId = typeof record?.model === \"string\" ? record.model : undefined;\n const outputConfig = readRecord(record?.output_config);\n const effort = typeof outputConfig?.effort === \"string\" ? outputConfig.effort : undefined;\n if (!modelId || !outputConfig || !effort) {\n return { body, changed: false, modelId };\n }\n\n const supported = supportedEffortsByModel.get(modelId);\n if (!supported || supported.includes(effort)) {\n return { body, changed: false, modelId, effort };\n }\n\n const clamped = bestSupportedEffort(supported);\n outputConfig.effort = clamped;\n return { body: JSON.stringify(record), changed: true, modelId, effort: clamped };\n } catch {\n return { body, changed: false };\n }\n}\n\nexport function clampEffortAfterRejection<TBody extends BodyInit | null | undefined>(\n body: TBody,\n rejection: EffortCapabilityRejection,\n supportedEffortsByModel: Map<string, string[]>,\n): EffortClampResult<TBody | string> {\n if (typeof body !== \"string\") {\n return { body, changed: false };\n }\n\n try {\n const parsed = JSON.parse(body) as unknown;\n const record = readRecord(parsed);\n const modelId = typeof record?.model === \"string\" ? record.model : undefined;\n const outputConfig = readRecord(record?.output_config);\n const effort = typeof outputConfig?.effort === \"string\" ? outputConfig.effort : undefined;\n if (!modelId || !outputConfig || !effort) {\n return { body, changed: false, modelId };\n }\n\n supportedEffortsByModel.set(modelId, [...rejection.supported]);\n if (rejection.supported.includes(effort)) {\n return { body, changed: false, modelId, effort };\n }\n\n const clamped = bestSupportedEffort(rejection.supported);\n outputConfig.effort = clamped;\n return { body: JSON.stringify(record), changed: true, modelId, effort: clamped };\n } catch {\n return { body, changed: false };\n }\n}\n","const MODEL_FAMILIES = [\"fable\", \"opus\", \"sonnet\", \"haiku\"] as const;\nconst FAMILY_RANK: Record<string, number> = { fable: 0, opus: 1, sonnet: 2, haiku: 3 };\n\nexport const CLAUDE_FABLE_MODEL_ID = \"claude-fable-5\";\nexport const CLAUDE_FABLE_1M_MODEL_ID = `${CLAUDE_FABLE_MODEL_ID}[1m]`;\nexport const CLAUDE_SONNET_MODEL_ID = \"claude-sonnet-5\";\nexport const CLAUDE_SONNET_1M_MODEL_ID = `${CLAUDE_SONNET_MODEL_ID}[1m]`;\n\nexport const FALLBACK_CLAUDE_CODE_BASE_MODEL_IDS = [\n CLAUDE_FABLE_MODEL_ID,\n \"claude-opus-4-8\",\n \"claude-opus-4-7\",\n \"claude-opus-4-6\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-sonnet-4-6\",\n \"claude-haiku-4-5\",\n] as const;\n\nconst STATIC_MODEL_ALIASES: Record<string, string> = {\n opus47: \"claude-opus-4-7\",\n opus46: \"claude-opus-4-6\",\n sonnet46: \"claude-sonnet-4-6\",\n};\n\nlet cachedBaseModelIds: string[] = [...FALLBACK_CLAUDE_CODE_BASE_MODEL_IDS];\n\nexport function setCachedClaudeCodeBaseModels(baseIds: readonly string[]): void {\n cachedBaseModelIds = [...baseIds];\n}\n\nexport function getCachedClaudeCodeBaseModels(): string[] {\n return [...cachedBaseModelIds];\n}\n\nexport function resetCachedClaudeCodeBaseModelsForTest(): void {\n cachedBaseModelIds = [...FALLBACK_CLAUDE_CODE_BASE_MODEL_IDS];\n}\n\nexport function aliasesForClaudeCodeModel(id: string, baseIds: readonly string[]): string[] {\n const aliases = [id, `claude-code/${id}`];\n const stripped = stripClaudeCodeContext1mTag(id);\n const family = modelFamily(stripped);\n if (!family || resolveFamilyBase(family, baseIds) !== stripped) return aliases;\n\n if (id.endsWith(\"[1m]\")) {\n aliases.push(`${family}1m`, `claude-code/${family}1m`, `anthropic/${family}1m`);\n } else {\n aliases.push(family, `claude-code/${family}`, `anthropic/${family}`);\n }\n return [...new Set(aliases)];\n}\n\nexport function stripClaudeCodeProviderPrefix(modelId: string): string {\n const slash = modelId.indexOf(\"/\");\n if (slash === -1) return modelId;\n\n const provider = modelId.slice(0, slash).toLowerCase();\n return provider === \"anthropic\" || provider === \"claude-code\"\n ? modelId.slice(slash + 1)\n : modelId;\n}\n\nexport function resolveClaudeCodeModelAlias(modelId: string): string {\n const unprefixed = stripClaudeCodeProviderPrefix(modelId.trim());\n return resolveAliasAgainst(unprefixed, cachedBaseModelIds) ?? STATIC_MODEL_ALIASES[unprefixed.toLowerCase()] ?? unprefixed;\n}\n\nexport function stripClaudeCodeContext1mTag(modelId: string): string {\n return modelId.replace(/\\[1m\\]$/i, \"\");\n}\n\nexport function toClaudeCodeWireModelId(modelId: string): string {\n return stripClaudeCodeContext1mTag(resolveClaudeCodeModelAlias(modelId));\n}\n\nexport function isClaudeCode1mModelLabel(modelId: string): boolean {\n return /\\[1m\\]$/i.test(resolveClaudeCodeModelAlias(modelId));\n}\n\nexport function isClaudeFableModel(modelId: string): boolean {\n return resolveClaudeCodeModelAlias(modelId).toLowerCase().includes(\"fable\");\n}\n\nexport function isSuspendedClaudeCodeModel(\n modelId: string,\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n const suspendedFamilies = readSuspendedClaudeCodeFamilies(env);\n const family = modelFamily(resolveClaudeCodeModelAlias(modelId));\n return Boolean(family && suspendedFamilies.has(family));\n}\n\nexport function describeSuspendedClaudeCodeModel(modelId: string): string {\n const normalized = resolveClaudeCodeModelAlias(modelId);\n if (isClaudeFableModel(normalized)) {\n return \"Claude Fable 5 is disabled for this Claude Code provider by configuration.\";\n }\n return `${normalized} is temporarily unavailable through Claude Code.`;\n}\n\nexport function resolveFamilyBase(family: string, baseIds: readonly string[]): string | undefined {\n return baseIds\n .filter((id) => modelFamily(id) === family && !id.includes(\"[\"))\n .sort(compareClaudeCodeBaseModelIds)[0];\n}\n\nexport function longContextEligible(id: string): boolean {\n const normalized = id.toLowerCase();\n return normalized.startsWith(\"claude-\") && !normalized.includes(\"haiku\") && !normalized.endsWith(\"[1m]\");\n}\n\nexport function compareClaudeCodeBaseModelIds(a: string, b: string): number {\n const aRank = FAMILY_RANK[modelFamily(a) ?? \"\"] ?? 99;\n const bRank = FAMILY_RANK[modelFamily(b) ?? \"\"] ?? 99;\n if (aRank !== bRank) return aRank - bRank;\n return compareVersionDesc(modelVersionKey(a), modelVersionKey(b));\n}\n\nexport function modelFamily(id: string): string | undefined {\n const normalized = stripClaudeCodeContext1mTag(stripClaudeCodeProviderPrefix(id)).toLowerCase();\n for (const family of MODEL_FAMILIES) {\n if (normalized.includes(family)) return family;\n }\n return undefined;\n}\n\nfunction resolveAliasAgainst(modelId: string, baseIds: readonly string[]): string | undefined {\n const normalized = stripClaudeCodeProviderPrefix(modelId).trim().toLowerCase();\n if (isModelFamily(normalized)) return resolveFamilyBase(normalized, baseIds) ?? undefined;\n\n const match = /^([a-z]+)1m$/.exec(normalized);\n if (match?.[1] && isModelFamily(match[1])) {\n const base = resolveFamilyBase(match[1], baseIds);\n return base && longContextEligible(base) ? `${base}[1m]` : undefined;\n }\n return undefined;\n}\n\nfunction isModelFamily(value: string): value is typeof MODEL_FAMILIES[number] {\n return (MODEL_FAMILIES as readonly string[]).includes(value);\n}\n\nfunction modelVersionKey(id: string): number[] {\n return id.match(/\\d+/g)?.map(Number) ?? [];\n}\n\nfunction compareVersionDesc(a: readonly number[], b: readonly number[]): number {\n const length = Math.max(a.length, b.length);\n for (let index = 0; index < length; index += 1) {\n const diff = (b[index] ?? -1) - (a[index] ?? -1);\n if (diff !== 0) return diff;\n }\n return 0;\n}\n\nfunction readSuspendedClaudeCodeFamilies(env: NodeJS.ProcessEnv): Set<string> {\n const raw = env.KYOLI_SUSPENDED_CLAUDE_CODE_FAMILIES\n ?? env.KYOLI_SUSPENDED_CLAUDE_MODELS\n ?? \"\";\n return new Set(\n raw\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter(Boolean)\n .map((entry) => modelFamily(entry) ?? entry),\n );\n}\n","import type { Plugin } from \"@opencode-ai/plugin\";\nimport { composeClaudeCodeBillingSystemEntry } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport {\n CascadeStateManager,\n createOpenCodeNativeAuthMethods,\n createOpenCodeNativeAuthLoader,\n createOpenCodeNativePluginLifecycle,\n zeroCostProviderModels,\n loadPoolChainConfig,\n migrateFromAuthJson,\n PoolManager,\n type PoolChainConfig,\n} from \"opencode-multi-account-core\";\nimport { AccountManager } from \"./accounts/manager\";\nimport { executeWithAccountRotation } from \"./runtime/executor\";\nimport { handleAuthorize } from \"./auth-ux/handler\";\nimport { loadConfig } from \"./shared/config\";\nimport { ProactiveRefreshQueue } from \"./accounts/proactive-refresh\";\nimport { AccountStore } from \"./accounts/store\";\nimport { AccountRuntimeFactory } from \"./runtime/factory\";\nimport { debugLog, getAccountLabel } from \"./shared/utils\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./shared/constants\";\nimport { claudeCodeIntegration } from \"./claude-code\";\nimport {\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./request/headers\";\nimport {\n getClientOutputEffort,\n getUpstreamSessionId,\n OPENCODE_OUTPUT_EFFORT_HEADER,\n readOpenCodeVariantEffort,\n type OutputEffortValue,\n} from \"./request/upstream-request\";\nimport { syncBootstrapAuth } from \"./oauth/bootstrap\";\nimport { sanitizeError } from \"./shared/error-utils\";\nimport { getSessionId, startHeartbeat } from \"./session-heartbeat\";\nimport type { ManagedAccount, PluginClient } from \"./shared/types\";\nimport { ingestProviderModelsCapabilities, readProviderModels } from \"./model/capabilities\";\n\nif (process.env.CLAUDE_MULTI_ACCOUNT_TRACE_PLUGIN === \"1\") {\n console.error(\"[anthropic-multi-account] module loaded\");\n}\n\nfunction extractFirstUserText(input: Record<string, unknown>): string {\n try {\n const raw = input as { messages?: unknown; request?: { messages?: unknown } };\n const messages = (raw.messages ?? raw.request?.messages) as\n Array<{ role?: string; content?: string | Array<{ type?: string; text?: string }> }> | undefined;\n if (!Array.isArray(messages)) return \"\";\n for (const msg of messages) {\n if (msg.role !== \"user\") continue;\n if (typeof msg.content === \"string\") return msg.content;\n if (Array.isArray(msg.content)) {\n for (const block of msg.content) {\n if (block.type === \"text\" && block.text) return block.text;\n }\n }\n }\n } catch {}\n return \"\";\n}\n\nfunction composeBillingSystemEntry(firstUserMessage: string, version: string): string {\n return composeClaudeCodeBillingSystemEntry(firstUserMessage, version);\n}\n\nfunction prependMissingSystemEntries(output: { system?: string[] }, entries: string[]): void {\n output.system ??= [];\n\n for (const entry of entries.toReversed()) {\n if (entry && !output.system.includes(entry)) {\n output.system.unshift(entry);\n }\n }\n}\n\nfunction applyOrderedHeaders(\n output: { headers: Record<string, string> },\n headers: Record<string, string>,\n): void {\n const orderedHeaders = orderHeadersForOutbound(headers);\n output.headers = Array.isArray(orderedHeaders)\n ? Object.fromEntries(orderedHeaders)\n : orderedHeaders;\n}\n\nfunction getMessageVariant(input: { message?: { model?: Record<string, unknown> } }): unknown {\n return input.message?.model?.variant;\n}\n\nfunction isAnthropicChatHook(input: {\n provider?: { info?: { id?: string } };\n model?: { providerID?: string };\n}): boolean {\n return input.provider?.info?.id === ANTHROPIC_OAUTH_ADAPTER.authProviderId\n || input.model?.providerID === ANTHROPIC_OAUTH_ADAPTER.authProviderId;\n}\n\nexport const ClaudeMultiAuthPlugin: Plugin = async (ctx) => {\n if (process.env.CLAUDE_MULTI_ACCOUNT_TRACE_PLUGIN === \"1\") {\n console.error(\"[anthropic-multi-account] plugin function called\");\n }\n\n const { client } = ctx as unknown as { client: PluginClient } & Record<string, unknown>;\n\n await loadConfig();\n\n const requestProfile = claudeCodeIntegration.loadRequestProfile();\n const template = requestProfile.template;\n const claudeIdentity = claudeCodeIntegration.loadIdentity();\n const claudeCodeVersion = template.cc_version ?? requestProfile.cliVersion;\n const upstreamAgentIdentity = template.agent_identity;\n const upstreamSystemPrompt = template.system_prompt;\n\n let heartbeatHandle: { stop(): void } | null = null;\n let heartbeatToken: string | null = null;\n let heartbeatSessionId: string | null = null;\n const outputEffortBySession = new Map<string, OutputEffortValue>();\n\n const stopHeartbeat = (): void => {\n heartbeatHandle?.stop();\n heartbeatHandle = null;\n heartbeatToken = null;\n heartbeatSessionId = null;\n };\n\n const getHeartbeatDeviceId = (account: Pick<ManagedAccount, \"deviceId\"> | null | undefined): string =>\n account?.deviceId || claudeIdentity.deviceId;\n\n const ensureHeartbeat = (\n accessToken: string | undefined,\n account?: Pick<ManagedAccount, \"deviceId\"> | null,\n ): void => {\n const deviceId = getHeartbeatDeviceId(account);\n if (!accessToken || !deviceId) {\n stopHeartbeat();\n return;\n }\n\n const sessionId = getSessionId();\n\n if (heartbeatHandle && heartbeatToken === accessToken && heartbeatSessionId === sessionId) {\n return;\n }\n\n stopHeartbeat();\n heartbeatToken = accessToken;\n heartbeatSessionId = sessionId;\n heartbeatHandle = startHeartbeat({\n sessionId,\n deviceId,\n accessToken,\n });\n };\n\n const startupDrift = claudeCodeIntegration.detectDrift(template);\n if (startupDrift.drifted) {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"warn\",\n message: startupDrift.message,\n extra: {\n cachedVersion: startupDrift.cachedVersion,\n installedVersion: startupDrift.installedVersion,\n },\n },\n }).catch(() => {});\n }\n\n const compat = claudeCodeIntegration.checkCompat();\n if (compat.status !== \"ok\" && compat.status !== \"unknown\") {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"warn\",\n message: compat.message,\n extra: {\n installedVersion: compat.installedVersion,\n range: compat.range,\n },\n },\n }).catch(() => {});\n }\n\n void claudeCodeIntegration.refreshLiveFingerprint({ silent: true })\n .then((refreshedTemplate) => {\n const refreshedDrift = claudeCodeIntegration.detectDrift(refreshedTemplate ?? template);\n if (!refreshedDrift.drifted) {\n return;\n }\n\n return client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"warn\",\n message: refreshedDrift.message,\n extra: {\n cachedVersion: refreshedDrift.cachedVersion,\n installedVersion: refreshedDrift.installedVersion,\n },\n },\n }).catch(() => {});\n })\n .catch((error) => {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"debug\",\n message: \"live fingerprint refresh failed\",\n extra: {\n error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n });\n\n const store = new AccountStore();\n const syncBootstrapAuthForPhase = async (phase: \"plugin-init\" | \"loader-recovery\"): Promise<boolean> => {\n try {\n const synced = await syncBootstrapAuth(client, store);\n debugLog(client, \"Bootstrap auth sync completed\", { phase, synced });\n return synced;\n } catch (error) {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"debug\",\n message: \"bootstrap auth sync failed\",\n extra: {\n phase,\n error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n return false;\n }\n };\n\n await syncBootstrapAuthForPhase(\"plugin-init\");\n\n let poolManager: PoolManager | null = null;\n let cascadeStateManager: CascadeStateManager | null = null;\n let poolChainConfig: PoolChainConfig = { pools: [], chains: [] };\n\n async function ensurePoolInfrastructure(): Promise<void> {\n poolChainConfig = await loadPoolChainConfig();\n\n poolManager ??= new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager ??= new CascadeStateManager();\n }\n\n const lifecycle = createOpenCodeNativePluginLifecycle({\n store,\n client,\n managerClass: AccountManager,\n createRuntimeFactory: () => new AccountRuntimeFactory(store, client, claudeIdentity),\n createRefreshQueue: (_client, _store, onInvalidate) =>\n new ProactiveRefreshQueue(client, store, (uuid) => {\n onInvalidate(uuid);\n void lifecycle.getManager()?.refresh();\n }),\n executeWithAccountRotation: async (activeManager, activeRuntimeFactory, _client, input, init) => {\n const activeAccount = activeManager.getActiveAccount();\n ensureHeartbeat(activeAccount?.accessToken, activeAccount);\n await ensurePoolInfrastructure();\n\n return executeWithAccountRotation(\n activeManager,\n activeRuntimeFactory,\n client,\n input,\n init,\n {\n poolManager: poolManager!,\n cascadeStateManager: cascadeStateManager!,\n poolChainConfig,\n },\n );\n },\n migrateFromAuthJson,\n afterManagerInitialized: async (activeManager) => {\n activeManager.setClient(client);\n const activeAccount = activeManager.getActiveAccount();\n ensureHeartbeat(activeAccount?.accessToken, activeAccount);\n },\n afterOAuthLoad: (credentials, activeManager) => {\n const activeAccount = activeManager.getActiveAccount?.();\n ensureHeartbeat(activeAccount?.accessToken ?? credentials.access, activeAccount);\n },\n createFetch: ({ getManager, getRuntimeFactory, defaultFetch }) => async (input, init) => {\n const activeManager = getManager();\n const activeRuntimeFactory = getRuntimeFactory();\n if (!activeManager || !activeRuntimeFactory) {\n stopHeartbeat();\n return fetch(input, init);\n }\n\n if (activeManager.getAccountCount() === 0) {\n stopHeartbeat();\n }\n\n return defaultFetch(input, init);\n },\n createLoaderExtras: async () => {\n const authProfile = await claudeCodeIntegration.loadAuthProfile();\n return {\n baseURL: authProfile.apiV1BaseUrl,\n \"chat.headers\": async (\n input: { provider?: { info?: { id?: string } } },\n output: { headers: Record<string, string> },\n ) => {\n if (input.provider?.info?.id !== ANTHROPIC_OAUTH_ADAPTER.authProviderId) return;\n\n const sessionId = getUpstreamSessionId();\n applyOrderedHeaders(output, {\n ...output.headers,\n ...getStaticHeaders(),\n ...getPerRequestHeaders(sessionId),\n \"anthropic-beta\": getBetaHeader(),\n });\n },\n };\n },\n authJsonProviderKey: \"anthropic\",\n oauthApiKey: \"\",\n noAccountsMessage: \"No Anthropic accounts configured. Run `opencode auth login` to add an account.\",\n getAccountLabel,\n });\n const authLoader = createOpenCodeNativeAuthLoader({\n lifecycle,\n debugLog: (message, extra) => debugLog(client, message, extra),\n beforeAuth: (provider) => {\n const providerModels = readProviderModels(provider);\n ingestProviderModelsCapabilities(providerModels);\n },\n beforeLoad: async ({ auth }) => {\n if (auth.type === \"oauth\") {\n return;\n }\n\n await syncBootstrapAuthForPhase(\"loader-recovery\");\n },\n afterLoad: ({ auth, manager, runtimeFactory, result }) => {\n if (auth.type !== \"oauth\") {\n if (!manager?.getAccountCount() || !runtimeFactory) {\n stopHeartbeat();\n return { apiKey: \"\", fetch };\n }\n\n return result;\n }\n\n if (!manager) {\n return { apiKey: \"\", fetch };\n }\n\n return result;\n },\n });\n\n await lifecycle.load({ type: \"api\" }).catch(() => {});\n\n const hooks = {\n \"chat.params\": async (\n input: {\n sessionID: string;\n provider?: { info?: { id?: string } };\n model?: { providerID?: string };\n message?: { model?: Record<string, unknown> };\n },\n output: { options: Record<string, unknown> },\n ): Promise<void> => {\n if (!isAnthropicChatHook(input)) return;\n\n const outputEffort = getClientOutputEffort(output.options)\n ?? readOpenCodeVariantEffort(getMessageVariant(input));\n\n if (!outputEffort || outputEffort === \"client\") {\n outputEffortBySession.delete(input.sessionID);\n return;\n }\n\n outputEffortBySession.set(input.sessionID, outputEffort);\n },\n\n \"chat.headers\": async (\n input: {\n sessionID: string;\n provider?: { info?: { id?: string } };\n model?: { providerID?: string };\n message?: { model?: Record<string, unknown> };\n },\n output: { headers: Record<string, string> },\n ): Promise<void> => {\n if (!isAnthropicChatHook(input)) return;\n\n const outputEffort = outputEffortBySession.get(input.sessionID)\n ?? readOpenCodeVariantEffort(getMessageVariant(input));\n if (!outputEffort || outputEffort === \"client\") return;\n\n output.headers[OPENCODE_OUTPUT_EFFORT_HEADER] = outputEffort;\n },\n\n \"experimental.chat.system.transform\": async (\n input: Record<string, unknown>,\n output: { system?: string[] },\n ): Promise<void> => {\n const billingHeader = composeBillingSystemEntry(extractFirstUserText(input), claudeCodeVersion);\n prependMissingSystemEntries(output, [\n billingHeader,\n upstreamAgentIdentity,\n upstreamSystemPrompt,\n ]);\n },\n\n provider: {\n id: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n models: zeroCostProviderModels,\n },\n\n auth: {\n provider: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n methods: createOpenCodeNativeAuthMethods({\n oauthLabel: ANTHROPIC_OAUTH_ADAPTER.authMethodLabel,\n authorize: (inputs) => handleAuthorize(lifecycle.getManager(), inputs, client),\n }),\n\n loader: authLoader,\n },\n };\n return hooks;\n};\n","import { createAccountManagerForProvider } from \"opencode-multi-account-core\";\nimport { getConfig } from \"../shared/config\";\nimport { isClaimedByOther, readClaims, writeClaim } from \"./claims\";\nimport { isTokenExpired, refreshToken } from \"../oauth/token\";\n\nexport const AccountManager = createAccountManagerForProvider({\n providerAuthId: \"anthropic\",\n getConfig,\n isTokenExpired,\n isClaimedByOther,\n readClaims,\n refreshToken,\n writeClaim,\n});\n\nexport type AccountManager = InstanceType<typeof AccountManager>;\n","import {\n createConfigLoader,\n} from \"opencode-multi-account-core\";\n\nconst configLoader = createConfigLoader(\"claude-multiauth.json\");\n\nexport {\n configLoader,\n};\n\nexport const { getConfig, loadConfig, resetConfigCache, updateConfigField } = configLoader;\n","import { createClaimsManager, type ClaimsMap } from \"opencode-multi-account-core\";\nimport { CLAIMS_FILENAME } from \"../shared/constants\";\n\nconst claimsManager = createClaimsManager(CLAIMS_FILENAME);\n\nexport const {\n isClaimedByOther,\n readClaims,\n releaseClaim,\n writeClaim,\n} = claimsManager;\n\nexport type { ClaimsMap };\n","import { anthropicOAuthAdapter } from \"opencode-multi-account-core\";\n\nexport const ANTHROPIC_OAUTH_ADAPTER = anthropicOAuthAdapter;\n\nexport const ANTHROPIC_CLIENT_ID = ANTHROPIC_OAUTH_ADAPTER.oauthClientId;\nexport const ANTHROPIC_TOKEN_ENDPOINT = ANTHROPIC_OAUTH_ADAPTER.tokenEndpoint;\nexport const ANTHROPIC_USAGE_ENDPOINT = ANTHROPIC_OAUTH_ADAPTER.usageEndpoint;\nexport const ANTHROPIC_PROFILE_ENDPOINT = ANTHROPIC_OAUTH_ADAPTER.profileEndpoint;\n\nexport const ACCOUNTS_FILENAME = ANTHROPIC_OAUTH_ADAPTER.accountStorageFilename;\nexport const CLAIMS_FILENAME = \"anthropic-multi-account-claims.json\";\nexport const PLAN_LABELS = ANTHROPIC_OAUTH_ADAPTER.planLabels;\n\nexport const TOKEN_EXPIRY_BUFFER_MS = 60_000;\nexport const TOKEN_REFRESH_TIMEOUT_MS = 30_000;\n","import { exec } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport * as v from \"valibot\";\nimport { TOKEN_REFRESH_TIMEOUT_MS } from \"../shared/constants\";\nimport { claudeCodeIntegration } from \"../claude-code\";\nimport { startCallbackServer } from \"./callback-server\";\nimport { generatePKCE, generateState } from \"./pkce\";\nimport { runNodeTokenRequest } from \"./token-node-request\";\nimport { fetchProfile, fetchUsage } from \"../usage\";\nimport {\n TokenResponseSchema,\n type CredentialRefreshPatch,\n type StoredAccount,\n type TokenResponse,\n} from \"../shared/types\";\n\nconst TOKEN_REQUEST_EXECUTABLE = process.env.OPENCODE_REFRESH_NODE_EXECUTABLE || \"node\";\n\ntype BrowserExec = (command: string, callback?: (error: Error | null) => void) => void;\n\nlet browserExec: BrowserExec = (command, callback) => {\n exec(command, callback);\n};\n\nlet callbackServerStarter: typeof startCallbackServer = startCallbackServer;\nlet profileFetcher: typeof fetchProfile = fetchProfile;\nlet usageFetcher: typeof fetchUsage = fetchUsage;\n\ninterface NodeTokenEnvelope {\n ok?: boolean;\n status?: number;\n body?: string;\n error?: string;\n}\n\nexport interface LoginCallbacks {\n onAuth(info: { url: string; instructions?: string }): void;\n onProgress?(msg: string): void;\n}\n\nexport type LoginResult = Partial<StoredAccount>;\n\nexport class TokenExchangeError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"TokenExchangeError\";\n }\n}\n\nexport class TokenRefreshError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"TokenRefreshError\";\n }\n}\n\nfunction buildTokenRequestError(url: string, details: string): Error {\n return new Error(`Anthropic token request failed. url=${url}; details=${details}`);\n}\n\nfunction buildTokenInvalidJsonError(url: string, body: string, details: string): Error {\n return new Error(`Anthropic token request returned invalid JSON. url=${url}; body=${body}; details=${details}`);\n}\n\nfunction parseNodeTokenEnvelope(output: string, endpoint: string): NodeTokenEnvelope {\n try {\n return JSON.parse(output) as NodeTokenEnvelope;\n } catch (error) {\n const details = error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n throw buildTokenInvalidJsonError(endpoint, output, details);\n }\n}\n\nfunction parseTokenResponseBody(body: string, endpoint: string): TokenResponse {\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(body);\n } catch (error) {\n const details = error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n throw buildTokenInvalidJsonError(endpoint, body, details);\n }\n\n return v.parse(TokenResponseSchema, parsed);\n}\n\nfunction getOpenBrowserCommand(url: string, platform = process.platform): string {\n if (platform === \"win32\") {\n return `rundll32.exe url.dll,FileProtocolHandler ${JSON.stringify(url)}`;\n }\n\n if (platform === \"darwin\") {\n return `open ${JSON.stringify(url)}`;\n }\n\n return `xdg-open ${JSON.stringify(url)}`;\n}\n\nfunction openBrowser(url: string): void {\n try {\n browserExec(getOpenBrowserCommand(url), () => {});\n } catch {\n // best-effort\n }\n}\n\nfunction resolveStoredClaudeIdentity(tokens: TokenResponse): Pick<StoredAccount, \"accountId\" | \"accountUuid\" | \"deviceId\"> {\n const localIdentity = claudeCodeIntegration.loadIdentity();\n const accountUuid = tokens.account?.uuid || localIdentity.accountUuid || randomUUID();\n const deviceId = localIdentity.deviceId || randomUUID();\n\n return {\n accountId: accountUuid,\n accountUuid,\n deviceId,\n };\n}\n\nfunction buildAuthorizeUrl(params: {\n authorizeUrl: string;\n clientId: string;\n scopes: string;\n redirectUri: string;\n codeChallenge: string;\n state: string;\n}): string {\n const url = new URL(params.authorizeUrl);\n url.searchParams.set(\"code\", \"true\");\n url.searchParams.set(\"client_id\", params.clientId);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n url.searchParams.set(\"scope\", params.scopes);\n url.searchParams.set(\"code_challenge\", params.codeChallenge);\n url.searchParams.set(\"code_challenge_method\", \"S256\");\n url.searchParams.set(\"state\", params.state);\n return url.toString();\n}\n\nasync function postTokenEndpoint(\n contentType: string,\n body: string,\n timeoutMs = TOKEN_REFRESH_TIMEOUT_MS,\n userAgent?: string,\n): Promise<TokenResponse> {\n const derivedProfile = await claudeCodeIntegration.loadAuthProfile();\n const oauthConfig = derivedProfile.oauthConfig;\n const endpoint = oauthConfig.tokenUrl;\n const resolvedUserAgent = userAgent ?? derivedProfile.userAgent;\n\n let output: string;\n try {\n output = await runNodeTokenRequest({\n body,\n contentType,\n endpoint,\n executable: TOKEN_REQUEST_EXECUTABLE,\n timeoutMs,\n userAgent: resolvedUserAgent,\n });\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw buildTokenRequestError(endpoint, details);\n }\n\n const result = parseNodeTokenEnvelope(output, endpoint);\n if (result.ok) {\n return parseTokenResponseBody(result.body ?? \"\", endpoint);\n }\n\n if (result.error) {\n throw buildTokenRequestError(endpoint, result.error);\n }\n\n throw buildTokenRequestError(\n endpoint,\n `Error: HTTP request failed. status=${result.status ?? 0}; url=${endpoint}; body=${result.body ?? \"\"}`,\n );\n}\n\nconst CODE_EXCHANGE_TIMEOUT_MS = 30_000;\n\nasync function exchangeCodeForTokens(params: {\n code: string;\n codeVerifier: string;\n state: string;\n redirectUri: string;\n}): Promise<TokenResponse> {\n const derivedProfile = await claudeCodeIntegration.loadAuthProfile();\n const oauthConfig = derivedProfile.oauthConfig;\n\n const body = JSON.stringify({\n grant_type: \"authorization_code\",\n client_id: oauthConfig.clientId,\n code: params.code,\n redirect_uri: params.redirectUri,\n code_verifier: params.codeVerifier,\n state: params.state,\n });\n\n return postTokenEndpoint(\"application/json\", body, CODE_EXCHANGE_TIMEOUT_MS);\n}\n\nexport async function loginWithOAuth(callbacks: LoginCallbacks): Promise<Partial<StoredAccount>> {\n const { oauthConfig: cfg } = await claudeCodeIntegration.loadAuthProfile();\n const { verifier: codeVerifier, challenge: codeChallenge } = generatePKCE();\n const state = generateState();\n const { port, waitForCode, stop } = await callbackServerStarter({ expectedState: state });\n const redirectUri = `http://localhost:${port}/callback`;\n\n try {\n const authorizeUrl = buildAuthorizeUrl({\n authorizeUrl: cfg.authorizeUrl,\n clientId: cfg.clientId,\n scopes: cfg.scopes,\n redirectUri,\n codeChallenge,\n state,\n });\n\n callbacks.onAuth({\n url: authorizeUrl,\n instructions: \"Complete authorization in your browser.\",\n });\n\n openBrowser(authorizeUrl);\n callbacks.onProgress?.(\"Waiting for browser authorization...\");\n\n const { code } = await waitForCode;\n\n callbacks.onProgress?.(\"Exchanging authorization code...\");\n const tokens = await exchangeCodeForTokens({\n code,\n codeVerifier,\n state,\n redirectUri,\n });\n\n callbacks.onProgress?.(\"Fetching profile...\");\n const profileResult = await profileFetcher(tokens.access_token);\n try {\n await usageFetcher(tokens.access_token);\n } catch {\n // best-effort\n }\n const profileData = profileResult.ok ? profileResult.data : undefined;\n const now = Date.now();\n\n return {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n expiresAt: now + tokens.expires_in * 1000,\n email: profileData?.email ?? tokens.account?.email_address,\n planTier: profileData?.planTier ?? \"\",\n addedAt: now,\n lastUsed: now,\n ...resolveStoredClaudeIdentity(tokens),\n };\n } catch (error) {\n stop();\n throw error;\n }\n}\n\nconst REFRESH_TIMEOUT_MS = 15_000;\n\nexport async function refreshWithOAuth(currentRefreshToken: string): Promise<CredentialRefreshPatch> {\n const { oauthConfig } = await claudeCodeIntegration.loadAuthProfile();\n\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: currentRefreshToken,\n client_id: oauthConfig.clientId,\n }).toString();\n\n const response = await postTokenEndpoint(\n \"application/x-www-form-urlencoded\",\n body,\n REFRESH_TIMEOUT_MS,\n );\n\n const patch: CredentialRefreshPatch = {\n accessToken: response.access_token,\n expiresAt: Date.now() + response.expires_in * 1000,\n };\n\n if (response.refresh_token) {\n patch.refreshToken = response.refresh_token;\n }\n\n if (response.account?.uuid) {\n patch.accountId = response.account.uuid;\n patch.accountUuid = response.account.uuid;\n }\n\n if (response.account?.email_address) {\n patch.email = response.account.email_address;\n }\n\n return patch;\n}\n\nexport const detectOAuthConfig = claudeCodeIntegration.detectOAuthConfig;\n\nexport const anthropicOAuthTestExports = {\n getOpenBrowserCommand,\n postTokenEndpoint,\n exchangeCodeForTokens,\n loginWithOAuth,\n openBrowser,\n setCallbackServerStarterForTest(next: typeof startCallbackServer | null): void {\n callbackServerStarter = next ?? startCallbackServer;\n },\n setProfileFetcherForTest(next: typeof fetchProfile | null): void {\n profileFetcher = next ?? fetchProfile;\n },\n setUsageFetcherForTest(next: typeof fetchUsage | null): void {\n usageFetcher = next ?? fetchUsage;\n },\n setBrowserExecForTest(next: BrowserExec | null): void {\n browserExec = next ?? ((command, callback) => {\n exec(command, callback);\n });\n },\n};\n","{\n \"request\": {\n \"baseApiUrl\": \"https://api.anthropic.com\",\n \"anthropicVersion\": \"2023-06-01\",\n \"xApp\": \"cli\",\n \"betaHeader\": \"claude-code-20250219,oauth-2025-04-20,context-1m-2025-08-07,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advisor-tool-2026-03-01,effort-2025-11-24\"\n },\n \"oauth\": {\n \"clientId\": \"9d1c250a-e61b-44d9-88ed-5944d1962f5e\",\n \"authorizeUrl\": \"https://claude.ai/oauth/authorize\",\n \"tokenUrl\": \"https://platform.claude.com/v1/oauth/token\",\n \"scopes\": \"org:create_api_key user:profile user:inference user:sessions:claude_code user:mcp_servers user:file_upload\",\n \"baseApiUrl\": \"https://api.anthropic.com\"\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { execFileSync as defaultExecFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir, platform } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport derivedDefaultsJson from \"../../fixtures/defaults/cc-derived-defaults.json\";\nimport { compareVersions } from \"../fingerprint/capture\";\nimport { getConfigDir } from \"../../shared/utils\";\n\nexport interface DetectedOAuthConfig {\n clientId: string;\n authorizeUrl: string;\n tokenUrl: string;\n scopes: string;\n baseApiUrl: string;\n source: \"detected\" | \"cached\" | \"fallback\" | \"override\";\n ccPath?: string;\n ccHash?: string;\n}\n\ntype DetectedOAuthConfigPayload = Omit<DetectedOAuthConfig, \"source\" | \"ccPath\" | \"ccHash\">;\ntype OAuthConfigCache = Record<string, DetectedOAuthConfigPayload>;\n\ninterface CacheFilePayload {\n entries?: Record<string, unknown>;\n savedAt?: number;\n}\n\ninterface DetectorTestOverrides {\n findCCBinary?: () => string | null;\n readBinaryFile?: (path: string) => Promise<Buffer>;\n existsSync?: (path: string) => boolean;\n execFileSync?: typeof defaultExecFileSync;\n pathEnv?: string;\n platform?: () => NodeJS.Platform;\n}\n\nconst CONFIG_SCAN_WINDOW_CHARS = 4096;\nconst CONFIG_SCAN_LOOKBACK_CHARS = 2048;\nconst KNOWN_PROD_CLIENT_ID = \"9d1c250a-e61b-44d9-88ed-5944d1962f5e\";\nconst POLLUTED_CACHED_SCOPE = \"https://www.googleapis.com/auth/cloud-platform\";\nconst SAFE_FALLBACK_SCOPES = \"org:create_api_key user:profile user:inference user:sessions:claude_code user:mcp_servers user:file_upload\";\nconst UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst CLIENT_ID_ASSIGNMENT_PATTERN = /\\b(?:CLIENT_ID|[A-Z_]+CLIENT_ID)\\s*:\\s*\"([0-9a-f-]{36})\"/gi;\nconst CACHE_FILE_NAME = \"anthropic-oauth-config-cache.json\";\nconst DEFAULT_OVERRIDE_FILE_NAME = \"oauth-config.override.json\";\nconst derivedDefaults = derivedDefaultsJson as {\n oauth?: {\n clientId?: string;\n authorizeUrl?: string;\n tokenUrl?: string;\n scopes?: string;\n baseApiUrl?: string;\n };\n};\n\nconst fallbackPayload = normalizeDetectedOAuthConfigPayload({\n clientId: derivedDefaults.oauth?.clientId || KNOWN_PROD_CLIENT_ID,\n authorizeUrl: derivedDefaults.oauth?.authorizeUrl || \"https://claude.ai/oauth/authorize\",\n tokenUrl: derivedDefaults.oauth?.tokenUrl || \"https://platform.claude.com/v1/oauth/token\",\n scopes: derivedDefaults.oauth?.scopes || SAFE_FALLBACK_SCOPES,\n baseApiUrl: derivedDefaults.oauth?.baseApiUrl || \"https://api.anthropic.com\",\n});\n\nexport const FALLBACK: DetectedOAuthConfig = {\n ...fallbackPayload,\n source: \"fallback\",\n};\n\nexport const FALLBACK_FOR_DRIFT_CHECK = FALLBACK;\n\nfunction hasPollutedCachedScope(scopes: string): boolean {\n const parsedScopes = scopes.split(/\\s+/).filter(Boolean);\n return parsedScopes.includes(POLLUTED_CACHED_SCOPE) || !parsedScopes.includes(\"org:create_api_key\");\n}\n\nexport function filterScopesByBinaryPresence(buf: Buffer, expected: string[]): string[] {\n const verified: string[] = [];\n\n for (const scope of expected) {\n const needle = Buffer.from(`\"${scope}\"`);\n if (buf.includes(needle)) {\n verified.push(scope);\n }\n }\n\n return verified;\n}\n\nfunction getVerifiedCanonicalScopes(buf: Buffer, fallbackScopes: string): string | null {\n const expectedScopes = fallbackScopes.split(/\\s+/).filter(Boolean);\n const verifiedScopes = filterScopesByBinaryPresence(buf, expectedScopes);\n\n return verifiedScopes.length === expectedScopes.length ? verifiedScopes.join(\" \") : null;\n}\n\nexport function normalizeAuthorizeUrl(url: string): string {\n if (url === \"https://claude.com/cai/oauth/authorize\") {\n return \"https://claude.ai/oauth/authorize\";\n }\n\n return url;\n}\n\nfunction normalizeDetectedOAuthConfigPayload(\n payload: DetectedOAuthConfigPayload,\n): DetectedOAuthConfigPayload {\n return {\n ...payload,\n authorizeUrl: normalizeAuthorizeUrl(payload.authorizeUrl),\n };\n}\n\nfunction pickNearestScopes(block: string, centerIndex: number): string | null {\n return pickNearestValue(block, centerIndex, /SCOPES\\s*:\\s*\"([^\"]+)\"/gi)\n || pickNearestValue(block, centerIndex, /scope[s]?\\s*:\\s*\"([^\"]+)\"/gi)\n || null;\n}\n\nfunction isLikelyLocalUrl(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n\n try {\n const host = new URL(value).hostname.toLowerCase();\n return host === \"localhost\"\n || host === \"127.0.0.1\"\n || host === \"0.0.0.0\"\n || host.endsWith(\".local\");\n } catch {\n return false;\n }\n}\n\nfunction extractCandidateBlocks(binaryText: string): string[] {\n const blocks: string[] = [];\n const seenRanges = new Set<string>();\n const clientIdMatches = [...binaryText.matchAll(CLIENT_ID_ASSIGNMENT_PATTERN)];\n\n for (const [index, currentMatch] of clientIdMatches.entries()) {\n const currentIndex = currentMatch.index ?? 0;\n const previousClientIdIndex = clientIdMatches[index - 1]?.index;\n const nextClientIdIndex = clientIdMatches[index + 1]?.index;\n const range = getCandidateBlockRange(\n currentIndex,\n previousClientIdIndex,\n nextClientIdIndex,\n binaryText.length,\n );\n const start = range.start;\n const end = Math.min(\n binaryText.length,\n Math.max(range.end, currentIndex + currentMatch[0].length),\n );\n const key = `${start}:${end}`;\n\n if (seenRanges.has(key)) {\n continue;\n }\n\n seenRanges.add(key);\n blocks.push(binaryText.slice(start, end));\n }\n\n if (blocks.length === 0 && binaryText.length > 0) {\n blocks.push(binaryText.slice(0, Math.min(binaryText.length, CONFIG_SCAN_WINDOW_CHARS)));\n }\n\n return blocks;\n}\n\ninterface ScoredOAuthCandidate {\n payload: DetectedOAuthConfigPayload;\n score: number;\n}\n\nfunction midpoint(left: number, right: number): number {\n return Math.floor((left + right) / 2);\n}\n\nfunction getCandidateBlockRange(\n currentIndex: number,\n previousClientIdIndex: number | undefined,\n nextClientIdIndex: number | undefined,\n textLength: number,\n): { start: number; end: number } {\n const boundedLeftEdge = currentIndex - CONFIG_SCAN_LOOKBACK_CHARS;\n const boundedRightEdge = currentIndex + CONFIG_SCAN_WINDOW_CHARS;\n const leftBoundary = previousClientIdIndex === undefined\n ? boundedLeftEdge\n : Math.max(boundedLeftEdge, midpoint(previousClientIdIndex, currentIndex));\n const rightBoundary = nextClientIdIndex === undefined\n ? boundedRightEdge\n : Math.min(boundedRightEdge, midpoint(currentIndex, nextClientIdIndex));\n\n return {\n start: Math.max(0, leftBoundary),\n end: Math.min(textLength, Math.max(currentIndex + 1, rightBoundary)),\n };\n}\n\nfunction pickNearestValue(block: string, centerIndex: number, pattern: RegExp): string | undefined {\n let nearestValue: string | undefined;\n let nearestDistance = Number.POSITIVE_INFINITY;\n\n for (const match of block.matchAll(pattern)) {\n const matchIndex = match.index ?? 0;\n const distance = Math.abs(matchIndex - centerIndex);\n\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestValue = match[1];\n }\n }\n\n return nearestValue;\n}\n\nfunction scoreCandidate(candidate: DetectedOAuthConfigPayload, extractedScopes: string | null): number {\n let score = 0;\n\n if (UUID_PATTERN.test(candidate.clientId)) score += 4;\n if (candidate.baseApiUrl.startsWith(\"https://\")) score += 3;\n if (!isLikelyLocalUrl(candidate.baseApiUrl)) score += 5;\n if (!isLikelyLocalUrl(candidate.authorizeUrl)) score += 2;\n if (!isLikelyLocalUrl(candidate.tokenUrl)) score += 2;\n if (extractedScopes) score += 2;\n if (candidate.scopes.includes(\"user:sessions:claude_code\")) score += 1;\n\n return score;\n}\n\nfunction extractCandidateFromBlock(block: string): ScoredOAuthCandidate | null {\n const clientIdMatch = /\\b(?:CLIENT_ID|[A-Z_]+CLIENT_ID)\\s*:\\s*\"([0-9a-f-]{36})\"/i.exec(block);\n if (!clientIdMatch?.[1]) {\n return null;\n }\n\n const clientIdIndex = clientIdMatch.index ?? 0;\n const authorizeUrl = pickNearestValue(block, clientIdIndex, /CLAUDE_AI_AUTHORIZE_URL\\s*:\\s*\"(https?:\\/\\/[^\\\"]*\\/oauth\\/authorize[^\\\"]*)\"/gi);\n const baseApiUrl = pickNearestValue(block, clientIdIndex, /BASE_API_URL\\s*:\\s*\"(https?:\\/\\/[^\\\"]+)\"/gi);\n const tokenUrl = pickNearestValue(block, clientIdIndex, /TOKEN_URL\\s*:\\s*\"(https:\\/\\/[^\\\"]*\\/oauth\\/token[^\\\"]*)\"/gi);\n const rawExtractedScopes = pickNearestScopes(block, clientIdIndex);\n const hasPollutedScope = rawExtractedScopes\n ? rawExtractedScopes.split(/\\s+/).some((scope) => scope === POLLUTED_CACHED_SCOPE)\n : false;\n const extractedScopes = rawExtractedScopes && !hasPollutedScope\n ? rawExtractedScopes\n : null;\n\n const payload: DetectedOAuthConfigPayload = {\n clientId: clientIdMatch[1],\n authorizeUrl: normalizeAuthorizeUrl(authorizeUrl || FALLBACK.authorizeUrl),\n tokenUrl: tokenUrl || FALLBACK.tokenUrl,\n scopes: extractedScopes || FALLBACK.scopes,\n baseApiUrl: baseApiUrl || FALLBACK.baseApiUrl,\n };\n\n if (!isDetectedOAuthConfigPayload(payload)) {\n return null;\n }\n\n return {\n payload,\n score: scoreCandidate(payload, extractedScopes),\n };\n}\n\nlet memoizedConfig: DetectedOAuthConfig | null = null;\nlet detectorTestOverrides: DetectorTestOverrides = {};\n\nfunction getPlatform(): NodeJS.Platform {\n return detectorTestOverrides.platform?.() ?? platform();\n}\n\nfunction fileExists(path: string): boolean {\n return (detectorTestOverrides.existsSync ?? existsSync)(path);\n}\n\nfunction candidatePaths(): string[] {\n const home = homedir();\n\n if (getPlatform() === \"win32\") {\n return [\n join(home, \".local\", \"bin\", \"claude.exe\"),\n join(home, \"AppData\", \"Roaming\", \"npm\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.js\"),\n join(home, \"AppData\", \"Roaming\", \"npm\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.mjs\"),\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.js\"),\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.mjs\"),\n ];\n }\n\n return [\n join(home, \".local\", \"bin\", \"claude\"),\n \"/usr/local/bin/claude\",\n \"/opt/homebrew/bin/claude\",\n \"/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.js\",\n \"/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.mjs\",\n \"/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js\",\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.js\"),\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.mjs\"),\n ];\n}\n\nexport function enumerateCCCandidates(): string[] {\n const seen = new Set<string>();\n const candidates: string[] = [];\n const currentPlatform = getPlatform();\n const pathDelimiter = currentPlatform === \"win32\" ? \";\" : \":\";\n const pathDirs = (detectorTestOverrides.pathEnv ?? process.env.PATH ?? \"\")\n .split(pathDelimiter)\n .filter(Boolean);\n const pathCandidateNames = currentPlatform === \"win32\"\n ? [\"claude.exe\", \"claude.cmd\", \"claude\"]\n : [\"claude\"];\n\n const addCandidate = (candidatePath: string): void => {\n const key = currentPlatform === \"win32\" ? candidatePath.toLowerCase() : candidatePath;\n if (seen.has(key) || !fileExists(candidatePath)) {\n return;\n }\n\n seen.add(key);\n candidates.push(candidatePath);\n };\n\n for (const dir of pathDirs) {\n for (const fileName of pathCandidateNames) {\n addCandidate(join(dir, fileName));\n }\n }\n\n for (const candidatePath of candidatePaths()) {\n addCandidate(candidatePath);\n }\n\n return candidates;\n}\n\nfunction probeOneVersion(binPath: string): string | null {\n const currentPlatform = getPlatform();\n\n if (currentPlatform === \"win32\" && /\\.(cmd|bat)$/i.test(binPath) && /[&|><^\"'%\\r\\n`$;(){}\\[\\]]/.test(binPath)) {\n return null;\n }\n\n try {\n const output = (detectorTestOverrides.execFileSync ?? defaultExecFileSync)(binPath, [\"--version\"], {\n timeout: 2_000,\n encoding: \"utf-8\",\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n shell: currentPlatform === \"win32\" && /\\.(cmd|bat)$/i.test(binPath),\n });\n return output.match(/(\\d+\\.\\d+\\.\\d+(?:[.\\-][\\w.\\-]+)?)/)?.[1] ?? null;\n } catch {\n return null;\n }\n}\n\nfunction getCachePath(): string {\n return join(getConfigDir(), CACHE_FILE_NAME);\n}\n\nfunction getDefaultOverridePath(): string {\n return join(getConfigDir(), DEFAULT_OVERRIDE_FILE_NAME);\n}\n\nfunction isValidUrl(value: string): boolean {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isDetectedOAuthConfigPayload(value: unknown): value is DetectedOAuthConfigPayload {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const candidate = value as Partial<DetectedOAuthConfigPayload>;\n return typeof candidate.clientId === \"string\"\n && UUID_PATTERN.test(candidate.clientId)\n && typeof candidate.authorizeUrl === \"string\"\n && isValidUrl(candidate.authorizeUrl)\n && typeof candidate.tokenUrl === \"string\"\n && isValidUrl(candidate.tokenUrl)\n && typeof candidate.scopes === \"string\"\n && candidate.scopes.length > 0;\n}\n\nfunction buildResolvedConfig(\n payload: DetectedOAuthConfigPayload,\n source: DetectedOAuthConfig[\"source\"],\n ccPath?: string,\n ccHash?: string,\n): DetectedOAuthConfig {\n return {\n ...payload,\n source,\n ...(ccPath ? { ccPath } : {}),\n ...(ccHash ? { ccHash } : {}),\n };\n}\n\nfunction toFallbackConfig(ccPath?: string, ccHash?: string): DetectedOAuthConfig {\n return buildResolvedConfig(FALLBACK, \"fallback\", ccPath, ccHash);\n}\n\nfunction isOverrideDisabled(): boolean {\n return process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_DISABLE_OVERRIDE === \"1\";\n}\n\nfunction readOverrideString(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction getOverridePath(): string {\n return readOverrideString(process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_OVERRIDE_PATH) ?? getDefaultOverridePath();\n}\n\nfunction readOverrideRecord(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n\n return value as Record<string, unknown>;\n}\n\nfunction readOverrideField(candidate: Record<string, unknown>, key: keyof DetectedOAuthConfigPayload): string | undefined {\n const value = candidate[key];\n return typeof value === \"string\" ? readOverrideString(value) : undefined;\n}\n\nfunction readOverrideUrl(\n candidate: Record<string, unknown>,\n key: \"authorizeUrl\" | \"tokenUrl\" | \"baseApiUrl\",\n): string | undefined {\n const value = readOverrideField(candidate, key);\n return value && isValidUrl(value) ? value : undefined;\n}\n\nfunction normalizeOverride(value: unknown): Partial<DetectedOAuthConfigPayload> {\n const candidate = readOverrideRecord(value);\n if (!candidate) {\n return {};\n }\n\n const normalized: Partial<DetectedOAuthConfigPayload> = {};\n\n const clientId = readOverrideField(candidate, \"clientId\");\n if (clientId && UUID_PATTERN.test(clientId)) {\n normalized.clientId = clientId;\n }\n\n const authorizeUrl = readOverrideUrl(candidate, \"authorizeUrl\");\n if (authorizeUrl) {\n normalized.authorizeUrl = normalizeAuthorizeUrl(authorizeUrl);\n }\n\n const tokenUrl = readOverrideUrl(candidate, \"tokenUrl\");\n if (tokenUrl) {\n normalized.tokenUrl = tokenUrl;\n }\n\n const scopes = readOverrideField(candidate, \"scopes\");\n if (scopes) {\n normalized.scopes = scopes;\n }\n\n const baseApiUrl = readOverrideUrl(candidate, \"baseApiUrl\");\n if (baseApiUrl) {\n normalized.baseApiUrl = baseApiUrl;\n }\n\n return normalized;\n}\n\nasync function loadManualOverride(): Promise<Partial<DetectedOAuthConfigPayload>> {\n if (isOverrideDisabled()) {\n return {};\n }\n\n const envOverride = normalizeOverride({\n clientId: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_CLIENT_ID,\n authorizeUrl: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_AUTHORIZE_URL,\n tokenUrl: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_TOKEN_URL,\n scopes: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_SCOPES,\n });\n if (Object.keys(envOverride).length > 0) {\n return envOverride;\n }\n\n try {\n const fileOverride = JSON.parse(await readFile(getOverridePath(), \"utf-8\")) as unknown;\n return normalizeOverride(fileOverride);\n } catch {\n return {};\n }\n}\n\nasync function applyManualOverride(baseConfig: DetectedOAuthConfig): Promise<DetectedOAuthConfig> {\n const override = await loadManualOverride();\n if (Object.keys(override).length === 0) {\n return baseConfig;\n }\n\n return {\n ...baseConfig,\n ...override,\n source: \"override\",\n };\n}\n\nexport function findCCBinary(): string | null {\n const override = process.env.ANTHROPIC_CC_PATH;\n if (override && fileExists(override)) {\n return override;\n }\n\n const candidates = enumerateCCCandidates();\n if (candidates.length === 0) {\n return null;\n }\n\n if (candidates.length === 1) {\n return candidates[0] ?? null;\n }\n\n const probedCandidates = candidates\n .map((candidatePath) => {\n const version = probeOneVersion(candidatePath);\n return version ? { path: candidatePath, version } : null;\n })\n .filter((candidate): candidate is { path: string; version: string } => candidate !== null)\n .sort((left, right) => (compareVersions(right.version, left.version) ?? 0));\n\n return probedCandidates[0]?.path ?? candidates[0] ?? null;\n}\n\nexport async function fingerprintBinary(path: string): Promise<string> {\n const binaryContents = await readFile(path);\n return createHash(\"sha256\").update(binaryContents).digest(\"hex\").slice(0, 16);\n}\n\nexport function scanBinaryForOAuthConfig(buf: Buffer): DetectedOAuthConfigPayload | null {\n const binaryText = buf.toString(\"latin1\");\n const candidates = extractCandidateBlocks(binaryText)\n .map(extractCandidateFromBlock)\n .filter((candidate): candidate is ScoredOAuthCandidate => candidate !== null)\n .sort((left, right) => right.score - left.score);\n const preferredCandidate = candidates.find((candidate) => candidate.payload.clientId === KNOWN_PROD_CLIENT_ID);\n\n return preferredCandidate?.payload ?? candidates[0]?.payload ?? null;\n}\n\nasync function readRawCacheEntries(): Promise<Record<string, unknown>> {\n const raw = await readFile(getCachePath(), \"utf-8\");\n const parsed = JSON.parse(raw) as CacheFilePayload;\n\n if (typeof parsed !== \"object\" || parsed === null || typeof parsed.entries !== \"object\" || parsed.entries === null) {\n return {};\n }\n\n return parsed.entries;\n}\n\nexport async function loadCache(): Promise<OAuthConfigCache> {\n try {\n const rawEntries = await readRawCacheEntries();\n const validEntries: OAuthConfigCache = {};\n\n for (const [hash, value] of Object.entries(rawEntries)) {\n if (isDetectedOAuthConfigPayload(value) && !hasPollutedCachedScope(value.scopes)) {\n validEntries[hash] = normalizeDetectedOAuthConfigPayload(value);\n }\n }\n\n return validEntries;\n } catch {\n return {};\n }\n}\n\nexport async function saveCache(hash: string, config: DetectedOAuthConfigPayload): Promise<void> {\n try {\n const cachePath = getCachePath();\n const currentEntries: Record<string, unknown> = {};\n\n try {\n Object.assign(currentEntries, await readRawCacheEntries());\n } catch {\n }\n\n currentEntries[hash] = config;\n\n await mkdir(dirname(cachePath), { recursive: true });\n await writeFile(\n cachePath,\n JSON.stringify({ entries: currentEntries, savedAt: Date.now() }, null, 2),\n \"utf-8\",\n );\n } catch {\n }\n}\n\nexport async function detectOAuthConfig(): Promise<DetectedOAuthConfig> {\n if (memoizedConfig) {\n return memoizedConfig;\n }\n\n try {\n const ccPath = (detectorTestOverrides.findCCBinary || findCCBinary)();\n if (!ccPath) {\n memoizedConfig = await applyManualOverride(FALLBACK);\n return memoizedConfig;\n }\n\n const ccHash = await fingerprintBinary(ccPath);\n const cachedEntries = await loadCache();\n const cachedConfig = cachedEntries[ccHash];\n\n if (cachedConfig) {\n memoizedConfig = await applyManualOverride(buildResolvedConfig(cachedConfig, \"cached\", ccPath, ccHash));\n return memoizedConfig;\n }\n\n const readBinaryFile = detectorTestOverrides.readBinaryFile || readFile;\n const binaryBuffer = await readBinaryFile(ccPath);\n const scannedConfig = scanBinaryForOAuthConfig(binaryBuffer);\n if (!scannedConfig) {\n memoizedConfig = await applyManualOverride(toFallbackConfig(ccPath, ccHash));\n return memoizedConfig;\n }\n\n const verifiedCanonicalScopes = getVerifiedCanonicalScopes(binaryBuffer, FALLBACK.scopes);\n if (verifiedCanonicalScopes) {\n scannedConfig.scopes = verifiedCanonicalScopes;\n }\n\n const runtimeDetectedConfig = normalizeDetectedOAuthConfigPayload(scannedConfig);\n\n await saveCache(ccHash, runtimeDetectedConfig);\n memoizedConfig = await applyManualOverride(buildResolvedConfig(runtimeDetectedConfig, \"detected\", ccPath, ccHash));\n return memoizedConfig;\n } catch {\n memoizedConfig = await applyManualOverride(FALLBACK);\n return memoizedConfig;\n }\n}\n\nexport function resetOAuthConfigDetectionForTest(): void {\n memoizedConfig = null;\n detectorTestOverrides = {};\n}\n\nexport function setOAuthConfigDetectionOverridesForTest(overrides: DetectorTestOverrides | null): void {\n detectorTestOverrides = overrides ?? {};\n}\n","export {\n createMinimalClient,\n formatWaitTime,\n getAccountLabel,\n getConfigDir,\n getErrorCode,\n sleep,\n} from \"opencode-multi-account-core\";\nimport type { PluginClient } from \"./types\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { getConfig } from \"./config\";\n\nexport async function showToast(\n client: PluginClient,\n message: string,\n variant: \"info\" | \"warning\" | \"success\" | \"error\",\n): Promise<void> {\n if (getConfig().quiet_mode) return;\n try {\n await client.tui.showToast({ body: { message, variant } });\n } catch {\n }\n}\n\nexport function debugLog(\n client: PluginClient,\n message: string,\n extra?: Record<string, unknown>,\n): void {\n if (!getConfig().debug) return;\n client.app.log({\n body: { service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName, level: \"debug\", message, extra },\n }).catch(() => {});\n}\n","import derivedDefaultsJson from \"../fixtures/defaults/cc-derived-defaults.json\";\nimport bundledTemplateJson from \"@kyoli-gam/provider-claude-code/fingerprint-data\";\nimport { loadClaudeCodeSharedRequestProfile } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { detectCliVersion } from \"./cli-version\";\nimport { loadTemplate, type TemplateData } from \"./fingerprint/capture\";\nimport { detectOAuthConfig, type DetectedOAuthConfig } from \"./oauth-config/detect\";\n\nconst bundledTemplate = bundledTemplateJson as {\n anthropic_beta?: string;\n header_values?: Record<string, string>;\n};\nconst derivedDefaults = derivedDefaultsJson as {\n request?: {\n baseApiUrl?: string;\n anthropicVersion?: string;\n xApp?: string;\n betaHeader?: string;\n };\n};\n\nconst DEFAULT_BASE_API_URL = derivedDefaults.request?.baseApiUrl || \"https://api.anthropic.com\";\nconst sharedProfile = loadClaudeCodeSharedRequestProfile();\nconst DEFAULT_ANTHROPIC_VERSION = bundledTemplate.header_values?.[\"anthropic-version\"] || sharedProfile.anthropicVersion || derivedDefaults.request?.anthropicVersion || \"2023-06-01\";\nconst DEFAULT_X_APP = bundledTemplate.header_values?.[\"x-app\"] || sharedProfile.xApp || derivedDefaults.request?.xApp || \"cli\";\nconst DEFAULT_BETA_HEADER = bundledTemplate.anthropic_beta || bundledTemplate.header_values?.[\"anthropic-beta\"] || sharedProfile.anthropicBeta || derivedDefaults.request?.betaHeader || \"oauth-2025-04-20,interleaved-thinking-2025-05-14\";\n\nexport interface CCDerivedRequestProfile {\n template: TemplateData;\n cliVersion: string;\n userAgent: string;\n anthropicVersion: string;\n betaHeader: string;\n xApp: string;\n baseApiUrl: string;\n apiV1BaseUrl: string;\n}\n\nexport interface CCDerivedAuthProfile extends CCDerivedRequestProfile {\n oauthConfig: DetectedOAuthConfig;\n}\n\nexport function loadCCDerivedRequestProfile(): CCDerivedRequestProfile {\n const template = loadTemplate();\n const cliVersion = detectCliVersion();\n const anthropicVersion = template.header_values?.[\"anthropic-version\"] || DEFAULT_ANTHROPIC_VERSION;\n const betaHeader = template.anthropic_beta || template.header_values?.[\"anthropic-beta\"] || DEFAULT_BETA_HEADER;\n const xApp = template.header_values?.[\"x-app\"] || DEFAULT_X_APP;\n\n return {\n template,\n cliVersion,\n userAgent: `claude-cli/${cliVersion} (external, cli)`,\n anthropicVersion,\n betaHeader,\n xApp,\n baseApiUrl: sharedProfile.baseUrl || DEFAULT_BASE_API_URL,\n apiV1BaseUrl: sharedProfile.apiV1BaseUrl || `${DEFAULT_BASE_API_URL}/v1`,\n };\n}\n\nexport async function loadCCDerivedAuthProfile(): Promise<CCDerivedAuthProfile> {\n const requestProfile = loadCCDerivedRequestProfile();\n const oauthConfig = await detectOAuthConfig();\n const baseApiUrl = oauthConfig.baseApiUrl || requestProfile.baseApiUrl;\n\n return {\n ...requestProfile,\n oauthConfig,\n baseApiUrl,\n apiV1BaseUrl: `${baseApiUrl}/v1`,\n };\n}\n","import { readFileSync, readdirSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface ClaudeIdentity {\n deviceId: string;\n accountUuid: string;\n}\n\ninterface ClaudeIdentityFile {\n userID?: string;\n accountUuid?: string;\n oauthAccount?: {\n accountUuid?: string;\n };\n}\n\nconst EMPTY_IDENTITY: ClaudeIdentity = {\n deviceId: \"\",\n accountUuid: \"\",\n};\n\nlet testOverrideIdentity: ClaudeIdentity | null = null;\n\nfunction getCandidatePaths(): string[] {\n const home = homedir();\n const paths = [\n join(home, \".claude.json\"),\n join(home, \".claude\", \".claude.json\"),\n join(home, \".claude\", \"claude.json\"),\n ];\n\n try {\n const backupDir = join(home, \".claude\", \"backups\");\n const backups = readdirSync(backupDir)\n .filter((file) => file.startsWith(\".claude.json.backup.\"))\n .sort()\n .reverse();\n\n for (const backup of backups) {\n paths.push(join(backupDir, backup));\n }\n } catch {\n }\n\n return paths;\n}\n\nfunction parseIdentityFile(path: string): ClaudeIdentity | null {\n try {\n const data = JSON.parse(readFileSync(path, \"utf-8\")) as ClaudeIdentityFile;\n\n if (!data.userID) {\n return null;\n }\n\n return {\n deviceId: data.userID,\n accountUuid: data.oauthAccount?.accountUuid ?? data.accountUuid ?? \"\",\n };\n } catch {\n return null;\n }\n}\n\nexport function loadClaudeIdentity(): ClaudeIdentity {\n if (testOverrideIdentity) {\n return testOverrideIdentity;\n }\n\n for (const path of getCandidatePaths()) {\n const identity = parseIdentityFile(path);\n if (identity) {\n return identity;\n }\n }\n\n return EMPTY_IDENTITY;\n}\n\nexport function setClaudeIdentityForTest(identity: ClaudeIdentity | null): void {\n testOverrideIdentity = identity;\n}\n\nexport function resetClaudeIdentityForTest(): void {\n testOverrideIdentity = null;\n}\n","import {\n DEFAULT_CLI_VERSION,\n detectCliVersion,\n resetDetectedVersionForTest,\n setCliVersionDetectionOverridesForTest,\n} from \"./cli-version\";\nimport {\n loadCCDerivedAuthProfile,\n loadCCDerivedRequestProfile,\n} from \"./derived-profile\";\nimport type {\n CCDerivedAuthProfile,\n CCDerivedRequestProfile,\n} from \"./derived-profile\";\nimport {\n checkCCCompat,\n captureLiveTemplateAsync,\n compareVersions,\n detectDrift,\n extractTemplate,\n loadTemplate,\n matchesBundledClaudeCodeFingerprint,\n prepareBundledTemplate,\n refreshLiveFingerprintAsync,\n resetFingerprintCaptureForTest,\n setFingerprintCaptureTestOverridesForTest,\n} from \"./fingerprint/capture\";\nimport type {\n CapturedRequest,\n CompatResult,\n DriftResult,\n TemplateData,\n} from \"./fingerprint/capture\";\nimport {\n loadClaudeIdentity,\n resetClaudeIdentityForTest,\n setClaudeIdentityForTest,\n} from \"./identity\";\nimport type { ClaudeIdentity } from \"./identity\";\nimport {\n detectOAuthConfig,\n enumerateCCCandidates,\n FALLBACK,\n FALLBACK_FOR_DRIFT_CHECK,\n filterScopesByBinaryPresence,\n findCCBinary,\n fingerprintBinary,\n loadCache,\n normalizeAuthorizeUrl,\n resetOAuthConfigDetectionForTest,\n saveCache,\n scanBinaryForOAuthConfig,\n setOAuthConfigDetectionOverridesForTest,\n} from \"./oauth-config/detect\";\nimport type { DetectedOAuthConfig } from \"./oauth-config/detect\";\nimport {\n findUserPathHits,\n removeHostContextSections,\n scrubObjectStrings,\n scrubTemplate,\n scrubText,\n} from \"./scrub-template\";\n\nexport interface ClaudeCodeIntegration {\n loadRequestProfile: typeof loadCCDerivedRequestProfile;\n loadAuthProfile: typeof loadCCDerivedAuthProfile;\n loadIdentity: typeof loadClaudeIdentity;\n loadTemplate: typeof loadTemplate;\n detectCliVersion: typeof detectCliVersion;\n detectOAuthConfig: typeof detectOAuthConfig;\n detectDrift: typeof detectDrift;\n checkCompat: typeof checkCCCompat;\n refreshLiveFingerprint: typeof refreshLiveFingerprintAsync;\n}\n\nexport const claudeCodeIntegration: ClaudeCodeIntegration = {\n loadRequestProfile: loadCCDerivedRequestProfile,\n loadAuthProfile: loadCCDerivedAuthProfile,\n loadIdentity: loadClaudeIdentity,\n loadTemplate,\n detectCliVersion,\n detectOAuthConfig,\n detectDrift,\n checkCompat: checkCCCompat,\n refreshLiveFingerprint: refreshLiveFingerprintAsync,\n};\n\nexport {\n DEFAULT_CLI_VERSION,\n detectCliVersion,\n resetDetectedVersionForTest,\n setCliVersionDetectionOverridesForTest,\n loadCCDerivedAuthProfile,\n loadCCDerivedRequestProfile,\n checkCCCompat,\n captureLiveTemplateAsync,\n compareVersions,\n detectDrift,\n extractTemplate,\n loadTemplate,\n matchesBundledClaudeCodeFingerprint,\n prepareBundledTemplate,\n refreshLiveFingerprintAsync,\n resetFingerprintCaptureForTest,\n setFingerprintCaptureTestOverridesForTest,\n loadClaudeIdentity,\n resetClaudeIdentityForTest,\n setClaudeIdentityForTest,\n detectOAuthConfig,\n enumerateCCCandidates,\n FALLBACK,\n FALLBACK_FOR_DRIFT_CHECK,\n filterScopesByBinaryPresence,\n findCCBinary,\n fingerprintBinary,\n loadCache,\n normalizeAuthorizeUrl,\n resetOAuthConfigDetectionForTest,\n saveCache,\n scanBinaryForOAuthConfig,\n setOAuthConfigDetectionOverridesForTest,\n findUserPathHits,\n removeHostContextSections,\n scrubObjectStrings,\n scrubTemplate,\n scrubText,\n};\n\nexport type {\n CCDerivedAuthProfile,\n CCDerivedRequestProfile,\n CapturedRequest,\n ClaudeIdentity,\n CompatResult,\n DetectedOAuthConfig,\n DriftResult,\n TemplateData,\n};\n","import { createServer } from \"node:http\";\nimport type { Server, IncomingMessage, ServerResponse } from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\n\nconst DEFAULT_TIMEOUT_MS = 300_000;\nconst SUCCESS_REDIRECT_URL =\n \"https://platform.claude.com/oauth/code/success?app=claude-code\";\n\ninterface CallbackServerOptions {\n expectedState: string;\n timeoutMs?: number;\n}\n\ninterface CallbackResult {\n code: string;\n state: string;\n}\n\ninterface CallbackServer {\n port: number;\n waitForCode: Promise<CallbackResult>;\n stop: () => void;\n}\n\nexport function startCallbackServer(\n options: CallbackServerOptions,\n): Promise<CallbackServer> {\n const { expectedState, timeoutMs = DEFAULT_TIMEOUT_MS } = options;\n\n return new Promise<CallbackServer>((resolveServer, rejectServer) => {\n let settled = false;\n let resolveCode: ((result: CallbackResult) => void) | null = null;\n let rejectCode: ((reason: Error) => void) | null = null;\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\n const waitForCode = new Promise<CallbackResult>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n\n function settle(error: Error | null, result?: CallbackResult): void {\n if (settled) return;\n settled = true;\n\n if (timeoutHandle !== null) {\n clearTimeout(timeoutHandle);\n timeoutHandle = null;\n }\n\n if (error) {\n rejectCode?.(error);\n } else if (result) {\n resolveCode?.(result);\n }\n\n resolveCode = null;\n rejectCode = null;\n\n server.close();\n }\n\n function stop(): void {\n settle(new Error(\"OAuth callback server stopped\"));\n }\n\n function sendResponse(\n res: ServerResponse,\n status: number,\n headers: Record<string, string>,\n body: string | undefined,\n onFinish: () => void,\n ): void {\n res.writeHead(status, { ...headers, Connection: \"close\" });\n res.end(body ?? \"\", onFinish);\n }\n\n const server: Server = createServer(\n (req: IncomingMessage, res: ServerResponse) => {\n const url = new URL(req.url ?? \"/\", `http://localhost`);\n\n if (url.pathname !== \"/callback\") {\n res.writeHead(404, {\n \"Content-Type\": \"text/plain\",\n Connection: \"close\",\n });\n res.end(\"Not Found\");\n return;\n }\n\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n\n if (state !== expectedState) {\n sendResponse(\n res,\n 400,\n { \"Content-Type\": \"text/plain\" },\n \"State mismatch\",\n () => settle(new Error(\"OAuth callback state mismatch\")),\n );\n return;\n }\n\n if (!code) {\n sendResponse(\n res,\n 400,\n { \"Content-Type\": \"text/plain\" },\n \"Missing code\",\n () => settle(new Error(\"OAuth callback missing code\")),\n );\n return;\n }\n\n sendResponse(res, 302, { Location: SUCCESS_REDIRECT_URL }, undefined, () =>\n settle(null, { code, state }),\n );\n },\n );\n\n server.listen(0, \"localhost\", () => {\n const addr = server.address() as AddressInfo;\n const port = addr.port;\n\n timeoutHandle = setTimeout(() => {\n settle(new Error(\"OAuth callback timed out\"));\n }, timeoutMs);\n\n resolveServer({ port, waitForCode, stop });\n });\n\n server.on(\"error\", (err: Error) => {\n if (!settled) {\n rejectServer(err);\n }\n });\n });\n}\n","import { createHash, randomBytes } from \"node:crypto\";\n\nexport function base64url(buffer: Buffer): string {\n return buffer\n .toString(\"base64\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/g, \"\");\n}\n\nexport function generatePKCE(): { verifier: string; challenge: string } {\n const verifier = base64url(randomBytes(32));\n const challenge = base64url(createHash(\"sha256\").update(verifier).digest());\n return { verifier, challenge };\n}\n\nexport function generateState(): string {\n return base64url(randomBytes(32));\n}\n","import * as childProcess from \"node:child_process\";\n\nexport interface NodeTokenRequestOptions {\n body: string;\n contentType?: string;\n endpoint: string;\n executable: string;\n timeoutMs: number;\n userAgent?: string;\n}\n\ntype NodeTokenRequestRunner = (options: NodeTokenRequestOptions) => Promise<string>;\ntype ExecFile = typeof childProcess.execFile;\n\nlet execFile: ExecFile = childProcess.execFile;\n\nfunction buildNodeTokenRequestScript(): string {\n return `\nconst https = require(\"node:https\");\nconst endpoint = process.env.ANTHROPIC_REFRESH_ENDPOINT;\nconst contentType = process.env.ANTHROPIC_REFRESH_CONTENT_TYPE || \"application/json\";\nconst timeoutMs = Number(process.env.ANTHROPIC_REFRESH_TIMEOUT_MS || \"30000\");\nconst payload = process.env.ANTHROPIC_REFRESH_REQUEST_BODY || \"\";\nconst userAgent = process.env.ANTHROPIC_REFRESH_USER_AGENT;\n\nfunction printSuccess(body) {\n console.log(JSON.stringify({ ok: true, body }));\n}\n\nfunction printFailure(error) {\n console.log(JSON.stringify({ ok: false, ...error }));\n}\n\nconst request = https.request(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": contentType,\n Accept: \"application/json\",\n \"Content-Length\": Buffer.byteLength(payload).toString(),\n ...(userAgent ? { \"User-Agent\": userAgent } : {}),\n },\n}, (response) => {\n let body = \"\";\n response.setEncoding(\"utf8\");\n response.on(\"data\", (chunk) => {\n body += chunk;\n });\n response.on(\"end\", () => {\n const status = response.statusCode ?? 0;\n if (status < 200 || status >= 300) {\n printFailure({ status, body });\n return;\n }\n\n printSuccess(body);\n });\n});\n\nrequest.setTimeout(timeoutMs, () => {\n request.destroy(new Error(\"Request timed out after \" + timeoutMs + \"ms\"));\n});\n\nrequest.on(\"error\", (error) => {\n printFailure({ error: error instanceof Error ? error.name + \": \" + error.message : String(error) });\n});\n\nrequest.write(payload);\nrequest.end();\n`;\n}\n\nasync function defaultRunNodeTokenRequest(options: NodeTokenRequestOptions): Promise<string> {\n const script = buildNodeTokenRequestScript();\n const contentType = options.contentType ?? \"application/json\";\n\n return new Promise<string>((resolve, reject) => {\n execFile(\n options.executable,\n [\"-e\", script],\n {\n timeout: options.timeoutMs + 1000,\n maxBuffer: 1024 * 1024,\n env: {\n ...process.env,\n ANTHROPIC_REFRESH_CONTENT_TYPE: contentType,\n ANTHROPIC_REFRESH_ENDPOINT: options.endpoint,\n ANTHROPIC_REFRESH_REQUEST_BODY: options.body,\n ANTHROPIC_REFRESH_TIMEOUT_MS: String(options.timeoutMs),\n ANTHROPIC_REFRESH_USER_AGENT: options.userAgent ?? \"\",\n },\n },\n (error, stdout, stderr) => {\n const trimmedStdout = stdout.trim();\n\n if (error) {\n reject(new Error(stderr.trim() || error.message));\n return;\n }\n\n if (!trimmedStdout) {\n reject(new Error(\"Empty response from Node refresh helper\"));\n return;\n }\n\n resolve(trimmedStdout);\n },\n );\n });\n}\n\nlet nodeTokenRequestRunner: NodeTokenRequestRunner = defaultRunNodeTokenRequest;\n\nexport async function runNodeTokenRequest(options: NodeTokenRequestOptions): Promise<string> {\n return nodeTokenRequestRunner(options);\n}\n\nexport function setNodeTokenRequestRunnerForTest(runner: NodeTokenRequestRunner | null): void {\n nodeTokenRequestRunner = runner ?? defaultRunNodeTokenRequest;\n}\n\nexport function setNodeTokenRequestExecFileForTest(mockExecFile: ExecFile | null): void {\n execFile = mockExecFile ?? childProcess.execFile;\n}\n","import {\n ANTHROPIC_OAUTH_ADAPTER,\n ANTHROPIC_PROFILE_ENDPOINT,\n ANTHROPIC_USAGE_ENDPOINT,\n PLAN_LABELS,\n} from \"./shared/constants\";\nimport { formatWaitTime } from \"./shared/utils\";\nimport * as v from \"valibot\";\nimport { UsageLimitsSchema } from \"./shared/types\";\nimport type { ManagedAccount, UsageLimits } from \"./shared/types\";\n\nconst OAUTH_BETA_HEADER = ANTHROPIC_OAUTH_ADAPTER.oauthBetaHeader;\n\nconst ProfileResponseSchema = v.object({\n account: v.object({\n email: v.optional(v.string()),\n has_claude_pro: v.optional(v.boolean(), false),\n has_claude_max: v.optional(v.boolean(), false),\n }),\n});\n\nexport type ProfileData = {\n email?: string;\n planTier: string;\n};\n\nexport type FetchUsageResult =\n | { ok: true; data: UsageLimits }\n | { ok: false; reason: string };\n\nexport type FetchProfileResult =\n | { ok: true; data: ProfileData }\n | { ok: false; reason: string };\n\nexport async function fetchUsage(accessToken: string): Promise<FetchUsageResult> {\n try {\n const response = await fetch(ANTHROPIC_USAGE_ENDPOINT, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"anthropic-beta\": OAUTH_BETA_HEADER,\n },\n });\n\n if (!response.ok) {\n return { ok: false, reason: `HTTP ${response.status} ${response.statusText}` };\n }\n\n const result = v.safeParse(UsageLimitsSchema, await response.json());\n if (!result.success) {\n return { ok: false, reason: `Invalid response: ${result.issues[0]?.message ?? \"unknown\"}` };\n }\n\n return { ok: true, data: result.output };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return { ok: false, reason: message };\n }\n}\n\nexport async function fetchProfile(accessToken: string): Promise<FetchProfileResult> {\n try {\n const response = await fetch(ANTHROPIC_PROFILE_ENDPOINT, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"anthropic-beta\": OAUTH_BETA_HEADER,\n },\n });\n\n if (!response.ok) {\n return { ok: false, reason: `HTTP ${response.status} ${response.statusText}` };\n }\n\n const result = v.safeParse(ProfileResponseSchema, await response.json());\n if (!result.success) {\n return { ok: false, reason: `Invalid response: ${result.issues[0]?.message ?? \"unknown\"}` };\n }\n\n const planTier = result.output.account.has_claude_max ? \"max\"\n : result.output.account.has_claude_pro ? \"pro\"\n : \"free\";\n\n return { ok: true, data: { email: result.output.account.email, planTier } };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return { ok: false, reason: message };\n }\n}\n\nfunction formatTimeRemaining(resetAt: string | null): string {\n if (!resetAt) return \"unknown\";\n const diffMs = new Date(resetAt).getTime() - Date.now();\n if (diffMs <= 0) return \"0m\";\n return formatWaitTime(diffMs);\n}\n\nexport function getUsageSummary(account: ManagedAccount): string {\n if (!account.cachedUsage) return \"no data\";\n\n const parts: string[] = [];\n const { five_hour, seven_day } = account.cachedUsage;\n\n if (five_hour) {\n const reset = five_hour.resets_at\n ? ` (resets ${formatTimeRemaining(five_hour.resets_at)})`\n : \"\";\n parts.push(`5h: ${five_hour.utilization.toFixed(0)}%${reset}`);\n }\n if (seven_day) {\n const reset = seven_day.resets_at\n ? ` (resets ${formatTimeRemaining(seven_day.resets_at)})`\n : \"\";\n parts.push(`7d: ${seven_day.utilization.toFixed(0)}%${reset}`);\n }\n\n return parts.length > 0 ? parts.join(\", \") : \"no data\";\n}\n\nexport function getPlanLabel(account: ManagedAccount): string {\n if (!account.planTier || account.planTier === \"free\") return \"\";\n return PLAN_LABELS[account.planTier]\n ?? account.planTier.charAt(0).toUpperCase() + account.planTier.slice(1);\n}\n","import * as v from \"valibot\";\n\nexport const OAuthCredentialsSchema = v.object({\n type: v.literal(\"oauth\"),\n refresh: v.string(),\n access: v.string(),\n expires: v.number(),\n});\n\nexport const UsageLimitEntrySchema = v.object({\n utilization: v.number(),\n resets_at: v.nullable(v.string()),\n});\n\nexport const UsageLimitsSchema = v.object({\n five_hour: v.optional(v.nullable(UsageLimitEntrySchema), null),\n seven_day: v.optional(v.nullable(UsageLimitEntrySchema), null),\n seven_day_sonnet: v.optional(v.nullable(UsageLimitEntrySchema), null),\n});\n\nexport const CredentialRefreshPatchSchema = v.object({\n accessToken: v.string(),\n expiresAt: v.number(),\n refreshToken: v.optional(v.string()),\n uuid: v.optional(v.string()),\n accountId: v.optional(v.string()),\n accountUuid: v.optional(v.string()),\n deviceId: v.optional(v.string()),\n email: v.optional(v.string()),\n});\n\nexport const StoredAccountSchema = v.object({\n uuid: v.optional(v.string()),\n accountId: v.optional(v.string()),\n accountUuid: v.optional(v.string()),\n deviceId: v.optional(v.string()),\n label: v.optional(v.string()),\n email: v.optional(v.string()),\n planTier: v.optional(v.string(), \"\"),\n refreshToken: v.string(),\n accessToken: v.optional(v.string()),\n expiresAt: v.optional(v.number()),\n addedAt: v.number(),\n lastUsed: v.number(),\n enabled: v.optional(v.boolean(), true),\n rateLimitResetAt: v.optional(v.number()),\n cachedUsage: v.optional(UsageLimitsSchema),\n cachedUsageAt: v.optional(v.number()),\n consecutiveAuthFailures: v.optional(v.number(), 0),\n isAuthDisabled: v.optional(v.boolean(), false),\n authDisabledReason: v.optional(v.string()),\n});\n\nexport const AccountStorageSchema = v.object({\n version: v.literal(1),\n accounts: v.optional(v.array(StoredAccountSchema), []),\n activeAccountUuid: v.optional(v.string()),\n});\n\n/** Anthropic /v1/oauth/token response */\nexport const TokenResponseSchema = v.object({\n access_token: v.string(),\n refresh_token: v.optional(v.string()),\n expires_in: v.number(),\n account: v.optional(v.object({\n uuid: v.optional(v.string()),\n email_address: v.optional(v.string()),\n })),\n});\n\nexport type OAuthCredentials = v.InferOutput<typeof OAuthCredentialsSchema>;\nexport type UsageLimitEntry = v.InferOutput<typeof UsageLimitEntrySchema>;\nexport type UsageLimits = v.InferOutput<typeof UsageLimitsSchema>;\nexport type CredentialRefreshPatch = v.InferOutput<typeof CredentialRefreshPatchSchema>;\nexport type StoredAccount = v.InferOutput<typeof StoredAccountSchema>;\nexport type AccountStorage = v.InferOutput<typeof AccountStorageSchema>;\nexport type TokenResponse = v.InferOutput<typeof TokenResponseSchema>;\n\nexport const AccountSelectionStrategySchema = v.picklist([\"sticky\", \"round-robin\", \"hybrid\"]);\nexport type AccountSelectionStrategy = v.InferOutput<typeof AccountSelectionStrategySchema>;\n\nexport const PluginConfigSchema = v.object({\n /** sticky: same account until failure, round-robin: rotate every request, hybrid: health+usage scoring */\n account_selection_strategy: v.optional(AccountSelectionStrategySchema, \"sticky\"),\n\n /** Use cross-process claim file to distribute parallel sessions across accounts */\n cross_process_claims: v.optional(v.boolean(), true),\n /** Skip account when any usage tier utilization >= this % (100 = disabled) */\n soft_quota_threshold_percent: v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(100)), 100),\n /** Minimum backoff after rate limit (ms) */\n rate_limit_min_backoff_ms: v.optional(v.pipe(v.number(), v.minValue(0)), 30_000),\n /** Default retry-after when header is missing (ms) */\n default_retry_after_ms: v.optional(v.pipe(v.number(), v.minValue(0)), 60_000),\n /** Consecutive auth failures before disabling account */\n max_consecutive_auth_failures: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)), 3),\n /** Backoff after token refresh failure (ms) */\n token_failure_backoff_ms: v.optional(v.pipe(v.number(), v.minValue(0)), 30_000),\n /** Enable proactive background token refresh */\n proactive_refresh: v.optional(v.boolean(), true),\n /** Seconds before expiry to trigger proactive refresh (default 30 min) */\n proactive_refresh_buffer_seconds: v.optional(v.pipe(v.number(), v.minValue(60)), 1800),\n /** Interval between background refresh checks in seconds (default 5 min) */\n proactive_refresh_interval_seconds: v.optional(v.pipe(v.number(), v.minValue(30)), 300),\n /** Suppress toast notifications */\n quiet_mode: v.optional(v.boolean(), false),\n /** Enable debug logging */\n debug: v.optional(v.boolean(), false),\n});\n\nexport type PluginConfig = v.InferOutput<typeof PluginConfigSchema>;\n\nexport interface OriginalAuthHook {\n methods?: Array<{\n authorize?: (inputs?: Record<string, string>) => Promise<unknown>;\n }>;\n loader: (\n getAuth: () => Promise<unknown>,\n provider: unknown,\n ) => Promise<{ apiKey: string; fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response> }>;\n}\n\nexport type TokenRefreshResult =\n | { ok: true; patch: CredentialRefreshPatch }\n | { ok: false; permanent: boolean };\n\nexport interface ManagedAccount {\n index: number;\n uuid?: string;\n accountId?: string;\n accountUuid?: string;\n deviceId?: string;\n label?: string;\n email?: string;\n planTier?: string;\n refreshToken: string;\n accessToken?: string;\n expiresAt?: number;\n addedAt: number;\n lastUsed: number;\n enabled: boolean;\n rateLimitResetAt?: number;\n last429At?: number;\n cachedUsage?: UsageLimits;\n cachedUsageAt?: number;\n consecutiveAuthFailures: number;\n isAuthDisabled: boolean;\n authDisabledReason?: string;\n}\n\nexport interface PluginClient {\n auth: {\n set: (params: {\n path: { id: string };\n body: {\n type: string;\n refresh: string;\n access: string;\n expires: number;\n };\n }) => Promise<void>;\n };\n tui: {\n showToast: (params: {\n body: {\n title?: string;\n message: string;\n variant: \"info\" | \"warning\" | \"success\" | \"error\";\n };\n }) => Promise<void>;\n };\n app: {\n log: (params: {\n body: {\n service: string;\n level: \"debug\" | \"info\" | \"warn\" | \"error\";\n message: string;\n extra?: Record<string, unknown>;\n };\n }) => Promise<void>;\n };\n}\n","import {\n ANTHROPIC_OAUTH_ADAPTER,\n TOKEN_EXPIRY_BUFFER_MS,\n} from \"../shared/constants\";\nimport { refreshWithOAuth } from \"./anthropic-oauth\";\nimport type {\n ManagedAccount,\n PluginClient,\n TokenRefreshResult,\n} from \"../shared/types\";\n\nconst PERMANENT_FAILURE_MESSAGE_PATTERNS = [\n /\\binvalid_grant\\b/i,\n /\\binvalid_scope\\b/i,\n /\\bunauthorized_client\\b/i,\n /\\brefresh token\\b.*\\b(invalid|expired|revoked|no longer valid)\\b/i,\n /\\bauth(?:entication)?(?:[_\\s-]+)?invalid\\b/i,\n];\nconst refreshMutexByAccountId = new Map<string, Promise<TokenRefreshResult>>();\n\nexport function isTokenExpired(account: Pick<ManagedAccount, \"accessToken\" | \"expiresAt\">): boolean {\n if (!account.accessToken || !account.expiresAt) return true;\n return account.expiresAt <= Date.now() + TOKEN_EXPIRY_BUFFER_MS;\n}\n\nexport async function refreshToken(\n currentRefreshToken: string,\n accountId: string,\n client: PluginClient,\n): Promise<TokenRefreshResult> {\n if (!currentRefreshToken) return { ok: false, permanent: true };\n\n const inFlightRefresh = refreshMutexByAccountId.get(accountId);\n if (inFlightRefresh) return inFlightRefresh;\n\n const refreshPromise = (async (): Promise<TokenRefreshResult> => {\n try {\n const patch = await refreshWithOAuth(currentRefreshToken);\n return { ok: true, patch };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const isPermanent = PERMANENT_FAILURE_MESSAGE_PATTERNS\n .some((pattern) => pattern.test(message));\n\n await client.app\n .log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: isPermanent ? \"error\" : \"warn\",\n message: `Token refresh failed: ${message}${isPermanent ? \" (permanent)\" : \"\"}`,\n extra: { accountId },\n },\n })\n .catch(() => {});\n\n return { ok: false, permanent: isPermanent };\n } finally {\n refreshMutexByAccountId.delete(accountId);\n }\n })();\n\n refreshMutexByAccountId.set(accountId, refreshPromise);\n return refreshPromise;\n}\n\nexport function clearRefreshMutex(accountId?: string): void {\n if (accountId) {\n refreshMutexByAccountId.delete(accountId);\n return;\n }\n\n refreshMutexByAccountId.clear();\n}\n","import { createExecutorForProvider, getClearedOAuthBody } from \"opencode-multi-account-core\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport type {\n CascadeStateManager,\n ExecutorAccountManager,\n ExecutorRuntimeFactory,\n PluginClient,\n PoolChainConfig,\n PoolManager,\n RateLimitAccountManager,\n} from \"opencode-multi-account-core\";\nimport { handleRateLimitResponse as handleRateLimitResponseForProvider } from \"../accounts/rate-limit\";\nimport { executeWithPoolChainRotation } from \"./pool-chain\";\nimport type { PoolChainAccountManager } from \"./pool-chain\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"../shared/utils\";\n\nconst { executeWithAccountRotation: executeWithCoreAccountRotation } = createExecutorForProvider(\"Anthropic\", {\n handleRateLimitResponse: async (manager, client, account, response) =>\n handleRateLimitResponseForProvider(\n manager as RateLimitAccountManager,\n client,\n account,\n response,\n ),\n formatWaitTime,\n sleep,\n showToast,\n getAccountLabel,\n});\n\ninterface PoolChainExecutorOptions {\n poolManager: PoolManager;\n cascadeStateManager: CascadeStateManager;\n poolChainConfig: PoolChainConfig;\n}\n\nfunction isAllAccountsTerminalError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n return error.message.includes(\"All Anthropic accounts\");\n}\n\nasync function clearAuthIfNoUsableAccount(\n manager: ExecutorAccountManager,\n client: PluginClient,\n): Promise<void> {\n await manager.refresh();\n if (manager.hasAnyUsableAccount()) return;\n\n await client.auth\n .set({\n path: { id: ANTHROPIC_OAUTH_ADAPTER.authProviderId },\n body: getClearedOAuthBody(),\n })\n .catch(() => {});\n}\n\nfunction hasPoolChainEntries(config: PoolChainConfig): boolean {\n return (config.pools?.length ?? 0) > 0 || (config.chains?.length ?? 0) > 0;\n}\n\nexport async function executeWithAccountRotation(\n manager: ExecutorAccountManager,\n runtimeFactory: ExecutorRuntimeFactory,\n client: PluginClient,\n input: RequestInfo | URL,\n init?: RequestInit,\n options?: PoolChainExecutorOptions,\n): Promise<Response> {\n try {\n if (!options || !hasPoolChainEntries(options.poolChainConfig)) {\n return await executeWithCoreAccountRotation(manager, runtimeFactory, client, input, init);\n }\n\n return await executeWithPoolChainRotation(\n manager as unknown as PoolChainAccountManager,\n runtimeFactory,\n options.poolManager,\n options.cascadeStateManager,\n options.poolChainConfig,\n client,\n input,\n init,\n );\n } catch (error) {\n if (isAllAccountsTerminalError(error)) {\n await clearAuthIfNoUsableAccount(manager, client);\n }\n throw error;\n }\n}\n","import { createRateLimitHandlers } from \"opencode-multi-account-core\";\nimport { getConfig } from \"../shared/config\";\nimport { fetchUsage } from \"../usage\";\nimport { formatWaitTime, getAccountLabel, showToast } from \"../shared/utils\";\n\nconst {\n fetchUsageLimits,\n getResetMsFromUsage,\n handleRateLimitResponse,\n retryAfterMsFromResponse,\n} = createRateLimitHandlers({\n fetchUsage: async (accessToken: string) => fetchUsage(accessToken),\n getConfig,\n formatWaitTime,\n getAccountLabel,\n showToast,\n});\n\nexport {\n fetchUsageLimits,\n getResetMsFromUsage,\n handleRateLimitResponse,\n retryAfterMsFromResponse,\n};\n","import { createExecutorForProvider } from \"opencode-multi-account-core\";\nimport type {\n CascadeStateManager,\n ExecutorAccountManager,\n ExecutorRuntimeFactory,\n PoolChainConfig,\n PoolManager,\n} from \"opencode-multi-account-core\";\nimport { handleRateLimitResponse as handleRateLimitResponseForProvider } from \"../accounts/rate-limit\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"../shared/utils\";\nimport type { ManagedAccount, PluginClient } from \"../shared/types\";\n\ninterface PoolChainQueueEntry {\n accountUuid: string;\n chainIndex?: number;\n}\n\ntype RateLimitManager = Parameters<typeof handleRateLimitResponseForProvider>[0];\n\nexport interface PoolChainAccountManager extends ExecutorAccountManager, RateLimitManager {\n getAccounts(): ManagedAccount[];\n isRateLimited(account: ManagedAccount): boolean;\n getActiveAccount(): ManagedAccount | null;\n}\n\nfunction buildCascadePrompt(input: RequestInfo | URL, init?: RequestInit): string {\n if (typeof init?.body === \"string\" && init.body.length > 0) {\n return init.body;\n }\n\n const method = init?.method ?? \"GET\";\n return `${method}:${String(input)}`;\n}\n\nfunction createQueueAwareManager(\n manager: PoolChainAccountManager,\n queue: PoolChainQueueEntry[],\n cascadeStateManager: CascadeStateManager,\n): PoolChainAccountManager {\n return Object.create(manager, {\n selectAccount: { value: async function selectAccount(stickyKey?: string) {\n await manager.refresh();\n\n while (queue.length > 0) {\n const next = queue.shift();\n if (!next) break;\n\n const account = manager\n .getAccounts()\n .find((candidate) => candidate.uuid === next.accountUuid);\n\n if (!account?.uuid) continue;\n if (!account.enabled || account.isAuthDisabled) continue;\n if (manager.isRateLimited(account)) continue;\n\n cascadeStateManager.markAttempted(account.uuid);\n if (next.chainIndex !== undefined) {\n cascadeStateManager.markVisitedChainIndex(next.chainIndex);\n }\n return account;\n }\n\n return manager.selectAccount(stickyKey);\n }},\n });\n}\n\nexport async function executeWithPoolChainRotation(\n manager: PoolChainAccountManager,\n runtimeFactory: ExecutorRuntimeFactory,\n poolManager: PoolManager,\n cascadeStateManager: CascadeStateManager,\n poolChainConfig: PoolChainConfig,\n client: PluginClient,\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<Response> {\n const cascadePrompt = buildCascadePrompt(input, init);\n const currentAccountUuid = manager.getActiveAccount()?.uuid;\n cascadeStateManager.startTurn(cascadePrompt, currentAccountUuid);\n\n const queue: PoolChainQueueEntry[] = [];\n const queuedAccountUuids = new Set<string>();\n const queueAwareManager = createQueueAwareManager(manager, queue, cascadeStateManager);\n\n const { executeWithAccountRotation } = createExecutorForProvider(\"Anthropic\", {\n handleRateLimitResponse: async (rawManager, rawClient, account, response) => {\n await handleRateLimitResponseForProvider(\n rawManager as Parameters<typeof handleRateLimitResponseForProvider>[0],\n rawClient,\n account,\n response,\n );\n\n if (!account.uuid) return;\n\n poolManager.markExhausted(account.uuid);\n cascadeStateManager.markAttempted(account.uuid);\n\n const cascadeState = cascadeStateManager.ensureCascadeState(cascadePrompt, account.uuid);\n const failoverPlan = await poolManager.buildFailoverPlan(\n account,\n poolChainConfig,\n manager,\n {\n attemptedAccounts: cascadeState.attemptedAccounts,\n visitedChainIndexes: cascadeState.visitedChainIndexes,\n },\n );\n\n for (const candidate of failoverPlan.candidates) {\n if (queuedAccountUuids.has(candidate.accountUuid)) continue;\n queue.push({\n accountUuid: candidate.accountUuid,\n chainIndex: candidate.chainIndex,\n });\n queuedAccountUuids.add(candidate.accountUuid);\n }\n },\n formatWaitTime,\n sleep,\n showToast,\n getAccountLabel,\n });\n\n try {\n return await executeWithAccountRotation(\n queueAwareManager,\n runtimeFactory,\n client,\n input,\n init,\n );\n } finally {\n cascadeStateManager.clearCascadeState();\n }\n}\n","export {\n ANSI,\n isTTY,\n parseKey,\n type KeyAction,\n} from \"opencode-multi-account-core\";\n","export {\n select,\n type MenuItem,\n type SelectOptions,\n} from \"opencode-multi-account-core\";\n","export { confirm } from \"opencode-multi-account-core\";\n","import { ANSI } from \"./ansi\";\nimport { select, type MenuItem } from \"./select\";\nimport { confirm } from \"./confirm\";\nimport { getAccountLabel } from \"../../shared/utils\";\nimport { getPlanLabel } from \"../../usage\";\nimport type { AccountSelectionStrategy, ManagedAccount, UsageLimits } from \"../../shared/types\";\n\nexport type AuthMenuAction =\n | { type: \"add\" }\n | { type: \"check-quotas\" }\n | { type: \"manage\" }\n | { type: \"load-balancing\" }\n | { type: \"delete-all\" }\n | { type: \"cancel\" };\n\nexport type AccountAction = \"back\" | \"toggle\" | \"delete\" | \"retry-auth\" | \"cancel\";\n\nfunction formatRelativeTime(timestamp: number | undefined): string {\n if (!timestamp) return \"never\";\n const days = Math.floor((Date.now() - timestamp) / 86_400_000);\n if (days === 0) return \"today\";\n if (days === 1) return \"yesterday\";\n if (days < 7) return `${days}d ago`;\n if (days < 30) return `${Math.floor(days / 7)}w ago`;\n return new Date(timestamp).toLocaleDateString();\n}\n\nfunction formatDate(timestamp: number | undefined): string {\n if (!timestamp) return \"unknown\";\n return new Date(timestamp).toLocaleDateString();\n}\n\ntype AccountStatus = \"active\" | \"rate-limited\" | \"auth-disabled\" | \"disabled\";\n\nexport function getAccountStatus(account: ManagedAccount): AccountStatus {\n if (account.isAuthDisabled) return \"auth-disabled\";\n if (!account.enabled) return \"disabled\";\n if (account.cachedUsage) {\n const now = Date.now();\n const usage = account.cachedUsage;\n const hasEvaluableUsageTier = [usage.five_hour, usage.seven_day].some((tier) => tier != null);\n const exhaustedTiers = [usage.five_hour, usage.seven_day].filter((tier) =>\n tier\n && tier.utilization >= 100\n && tier.resets_at != null\n && Date.parse(tier.resets_at) > now,\n );\n if (exhaustedTiers.length > 0) {\n return \"rate-limited\";\n }\n if (hasEvaluableUsageTier) {\n return \"active\";\n }\n }\n if (account.rateLimitResetAt && account.rateLimitResetAt > Date.now()) return \"rate-limited\";\n return \"active\";\n}\n\nconst STATUS_BADGE: Record<AccountStatus, string> = {\n \"active\": `${ANSI.green}[active]${ANSI.reset}`,\n \"rate-limited\": `${ANSI.yellow}[rate-limited]${ANSI.reset}`,\n \"auth-disabled\": `${ANSI.red}[auth-disabled]${ANSI.reset}`,\n \"disabled\": `${ANSI.red}[disabled]${ANSI.reset}`,\n};\n\nfunction buildAccountMenuItem(account: ManagedAccount): MenuItem<ManagedAccount> {\n const label = getAccountLabel(account);\n const status = getAccountStatus(account);\n const badge = STATUS_BADGE[status];\n\n return {\n label: `${label} ${badge}`,\n hint: account.lastUsed ? `used ${formatRelativeTime(account.lastUsed)}` : \"\",\n value: account,\n };\n}\n\nexport async function showAuthMenu(accounts: ManagedAccount[]): Promise<AuthMenuAction> {\n const items: MenuItem<AuthMenuAction>[] = [\n { label: \"Add new account\", value: { type: \"add\" }, color: \"green\" },\n { label: \"Check quotas\", value: { type: \"check-quotas\" }, color: \"cyan\" },\n { label: \"Manage accounts\", value: { type: \"manage\" } },\n { label: \"Load balancing\", value: { type: \"load-balancing\" } },\n { label: \"\", value: { type: \"cancel\" }, separator: true },\n { label: \"Delete all accounts\", value: { type: \"delete-all\" }, color: \"red\" },\n ];\n\n while (true) {\n const subtitle = `${accounts.length} account(s) registered`;\n const result = await select(items, {\n message: \"Claude Multi-Auth\",\n subtitle,\n });\n\n if (!result) return { type: \"cancel\" };\n\n if (result.type === \"delete-all\") {\n const confirmed = await confirm(\"Delete ALL accounts? This cannot be undone.\");\n if (!confirmed) continue;\n }\n\n return result;\n }\n}\n\nexport async function showManageAccounts(accounts: ManagedAccount[]): Promise<{ action: AccountAction; account?: ManagedAccount }> {\n const items: MenuItem<ManagedAccount | null>[] = [\n { label: \"Back\", value: null },\n { label: \"\", value: null, separator: true },\n ...accounts.map(buildAccountMenuItem),\n ];\n\n const selected = await select(items, {\n message: \"Manage Accounts\",\n subtitle: \"Select an account to manage\",\n });\n\n if (!selected) return { action: \"back\" };\n\n return showAccountDetails(selected);\n}\n\nasync function showAccountDetails(account: ManagedAccount): Promise<{ action: AccountAction; account: ManagedAccount }> {\n const label = getAccountLabel(account);\n const status = getAccountStatus(account);\n const badge = STATUS_BADGE[status];\n\n console.log(\"\");\n console.log(`${ANSI.bold}Account: ${label} ${badge}${ANSI.reset}`);\n console.log(`${ANSI.dim}Added: ${formatDate(account.addedAt)}${ANSI.reset}`);\n console.log(`${ANSI.dim}Last used: ${formatRelativeTime(account.lastUsed)}${ANSI.reset}`);\n if (account.isAuthDisabled) {\n console.log(`${ANSI.red}Auth disabled: ${account.authDisabledReason ?? \"unknown\"}${ANSI.reset}`);\n }\n console.log(\"\");\n\n while (true) {\n const toggleLabel = account.enabled ? \"Disable account\" : \"Enable account\";\n const toggleColor = account.enabled ? \"yellow\" as const : \"green\" as const;\n\n const items: MenuItem<AccountAction>[] = [\n { label: \"Back\", value: \"back\" },\n ];\n\n items.push({ label: toggleLabel, value: \"toggle\", color: toggleColor });\n\n items.push({ label: \"Re-authenticate\", value: \"retry-auth\", color: \"cyan\" });\n\n items.push({ label: \"Delete this account\", value: \"delete\", color: \"red\" });\n\n const result = await select(items, {\n message: \"Account options\",\n subtitle: label,\n });\n\n if (result === \"delete\") {\n const confirmed = await confirm(`Delete ${label}?`);\n if (!confirmed) continue;\n }\n\n return { action: result ?? \"cancel\", account };\n }\n}\n\nfunction getUsageColor(utilization: number): string {\n if (utilization >= 90) return ANSI.red;\n if (utilization >= 60) return ANSI.yellow;\n return ANSI.green;\n}\n\nfunction createProgressBar(utilization: number, width = 20): string {\n const filled = Math.round((utilization / 100) * width);\n const empty = width - filled;\n const color = getUsageColor(utilization);\n return `${color}${\"█\".repeat(filled)}${ANSI.reset}${\"░\".repeat(empty)} ${color}${Math.round(utilization)}% used${ANSI.reset}`;\n}\n\nfunction formatResetTime(resetAt: string | null): string {\n if (!resetAt) return \"\";\n const date = new Date(resetAt);\n const now = new Date();\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n const timeStr = date.toLocaleTimeString(undefined, { hour: \"numeric\", minute: \"2-digit\", hour12: true });\n\n const isSameDay = date.getFullYear() === now.getFullYear()\n && date.getMonth() === now.getMonth()\n && date.getDate() === now.getDate();\n\n if (isSameDay) {\n return ` (resets ${timeStr}, ${tz})`;\n }\n const dateStr = date.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n return ` (resets ${dateStr} ${timeStr}, ${tz})`;\n}\n\nfunction printUsageEntry(name: string, entry: { utilization: number; resets_at: string | null } | null, isLast: boolean): void {\n const connector = isLast ? \"└─\" : \"├─\";\n if (!entry) {\n console.log(` ${connector} ${name.padEnd(16)} no data`);\n return;\n }\n const bar = createProgressBar(entry.utilization);\n const reset = entry.resets_at\n ? formatResetTime(entry.resets_at)\n : \"\";\n console.log(` ${connector} ${name.padEnd(16)} ${bar}${reset}`);\n}\n\nexport function printQuotaReport(account: ManagedAccount, usage: UsageLimits): void {\n const label = getAccountLabel(account);\n const status = getAccountStatus(account);\n const badge = STATUS_BADGE[status];\n const planLabel = getPlanLabel(account) || \"Free\";\n\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n console.log(` ${label} ${badge}`);\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n if (account.email) {\n console.log(` 📧 ${account.email}`);\n }\n console.log(` 📋 ${planLabel}`);\n\n console.log(`\\n └─ Claude Quota`);\n printUsageEntry(\"Current session\", usage.five_hour, false);\n printUsageEntry(\"Current week\", usage.seven_day, !usage.seven_day_sonnet);\n if (usage.seven_day_sonnet) {\n printUsageEntry(\"Sonnet only\", usage.seven_day_sonnet, true);\n }\n console.log(\"\");\n}\n\nconst STRATEGY_DESCRIPTIONS: Record<AccountSelectionStrategy, string> = {\n \"sticky\": \"Same account until rate-limited\",\n \"round-robin\": \"Rotate every request\",\n \"hybrid\": \"Score-based (usage + health)\",\n};\n\nexport async function showStrategySelect(current: AccountSelectionStrategy): Promise<AccountSelectionStrategy | null> {\n const strategies: AccountSelectionStrategy[] = [\"sticky\", \"round-robin\", \"hybrid\"];\n\n const items: MenuItem<AccountSelectionStrategy>[] = strategies.map((s) => ({\n label: `${s}${s === current ? \" (current)\" : \"\"}`,\n hint: STRATEGY_DESCRIPTIONS[s],\n value: s,\n }));\n\n return select(items, {\n message: \"Load Balancing Strategy\",\n subtitle: `Current: ${current}`,\n });\n}\n\nexport function printQuotaError(account: ManagedAccount, error: string): void {\n const label = getAccountLabel(account);\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n console.log(` ${label}`);\n if (account.email) {\n console.log(` 📧 ${account.email}`);\n }\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n console.log(` ${ANSI.red}Error: ${error}${ANSI.reset}\\n`);\n}\n","import {\n AccountStore as CoreAccountStore,\n type DiskCredentials,\n} from \"opencode-multi-account-core\";\nimport { ACCOUNTS_FILENAME } from \"../shared/constants\";\n\nexport class AccountStore extends CoreAccountStore {\n constructor() {\n super(ACCOUNTS_FILENAME);\n }\n}\n\nexport type { DiskCredentials };\n","import { AccountManager } from \"../accounts/manager\";\nimport { fetchProfile, fetchUsage } from \"../usage\";\nimport { isTokenExpired } from \"../oauth/token\";\nimport { getConfig, updateConfigField } from \"../shared/config\";\nimport { isTTY } from \"./menu/ansi\";\nimport { showAuthMenu, showManageAccounts, showStrategySelect, printQuotaReport, printQuotaError } from \"./menu/menu\";\nimport { createMinimalClient, getAccountLabel } from \"../shared/utils\";\nimport { AccountStore } from \"../accounts/store\";\nimport { loginWithOAuth } from \"../oauth/anthropic-oauth\";\nimport { randomUUID } from \"node:crypto\";\nimport type { ManagedAccount, OAuthCredentials, PluginClient, StoredAccount } from \"../shared/types\";\n\ntype OAuthCallbackResponse =\n | ({ type: \"success\" } & { refresh: string; access: string; expires: number })\n | { type: \"failed\" };\n\nexport interface OAuthFlowResult {\n url: string;\n instructions: string;\n method: \"auto\";\n callback(code?: string): Promise<OAuthCallbackResponse>;\n _email?: string;\n _account?: Partial<StoredAccount>;\n}\n\nfunction makeFailedFlowResult(message: string): OAuthFlowResult {\n return {\n url: \"\",\n instructions: message,\n method: \"auto\",\n callback: async () => ({ type: \"failed\" }),\n };\n}\n\nfunction toOAuthCredentials(result: OAuthCallbackResponse & { type: \"success\" }): OAuthCredentials {\n return { type: \"oauth\", refresh: result.refresh, access: result.access, expires: result.expires };\n}\n\nfunction asOAuthCallbackResponse(account: Partial<StoredAccount>): OAuthCallbackResponse {\n if (!account.refreshToken || !account.accessToken || typeof account.expiresAt !== \"number\") {\n return { type: \"failed\" };\n }\n\n return {\n type: \"success\",\n refresh: account.refreshToken,\n access: account.accessToken,\n expires: account.expiresAt,\n };\n}\n\nfunction extractAccountMetadata(account: Partial<StoredAccount> | undefined): Partial<StoredAccount> | undefined {\n if (!account) return undefined;\n\n return {\n accountId: account.accountId,\n accountUuid: account.accountUuid,\n deviceId: account.deviceId,\n email: account.email,\n planTier: account.planTier,\n };\n}\n\nasync function startOAuthFlow(): Promise<OAuthFlowResult> {\n try {\n const completedAccount = await loginWithOAuth({\n onAuth: (info) => {\n const instruction = info.instructions ?? \"Complete authorization in your browser.\";\n const urlLine = info.url ? `\\nAuth URL (manual fallback): ${info.url}` : \"\";\n console.log(`\\n${instruction}${urlLine}\\n`);\n },\n });\n\n const completedResult = asOAuthCallbackResponse(completedAccount);\n const accountEmail = completedAccount.email;\n\n return {\n url: \"\",\n instructions: \"\",\n method: \"auto\",\n callback: async () => completedResult,\n _email: accountEmail,\n _account: completedAccount,\n };\n } catch {\n return makeFailedFlowResult(\"Failed to start OAuth flow\");\n }\n}\n\nfunction wrapCallbackWithAccountReplace(\n result: OAuthFlowResult,\n manager: AccountManager,\n targetAccount: ManagedAccount,\n): OAuthFlowResult {\n const originalCallback = result.callback;\n return {\n ...result,\n callback: async function (code?: string) {\n const callbackResult = await originalCallback(code);\n\n if (callbackResult.type === \"success\") {\n if (targetAccount.uuid) {\n await manager.replaceAccountCredentials(\n targetAccount.uuid,\n toOAuthCredentials(callbackResult),\n extractAccountMetadata(result._account),\n );\n }\n console.log(`\\n✅ ${getAccountLabel(targetAccount)} re-authenticated successfully.\\n`);\n }\n\n return callbackResult;\n },\n };\n}\n\nfunction wrapCallbackWithManagerSync(\n result: OAuthFlowResult & { _email?: string; _account?: Partial<StoredAccount> },\n manager: AccountManager | null,\n): OAuthFlowResult {\n const originalCallback = result.callback;\n const email = result._email;\n return {\n ...result,\n callback: async function (code?: string) {\n const callbackResult = await originalCallback(code);\n\n if (callbackResult.type === \"success\") {\n const auth = toOAuthCredentials(callbackResult);\n const metadata = extractAccountMetadata(result._account);\n\n if (manager) {\n const countBefore = manager.getAccounts().length;\n await manager.addAccount(auth, email, metadata);\n const countAfter = manager.getAccounts().length;\n const added = countAfter > countBefore;\n console.log(added\n ? `\\n✅ Account added to multi-auth pool (${countAfter} total).\\n`\n : `\\nℹ️ Account already exists in multi-auth pool (${countAfter} total).\\n`);\n } else {\n await persistFallback(auth, email, metadata);\n console.log(\"\\n✅ Account saved.\\n\");\n }\n }\n\n return callbackResult;\n },\n };\n}\n\nasync function persistFallback(\n auth: OAuthCredentials,\n email?: string,\n metadata?: Partial<StoredAccount>,\n): Promise<void> {\n try {\n const store = new AccountStore();\n const now = Date.now();\n const account: StoredAccount = {\n uuid: randomUUID(),\n email,\n refreshToken: auth.refresh,\n accessToken: auth.access,\n expiresAt: auth.expires,\n addedAt: now,\n lastUsed: now,\n enabled: true,\n planTier: \"\",\n consecutiveAuthFailures: 0,\n isAuthDisabled: false,\n accountId: metadata?.accountId,\n accountUuid: metadata?.accountUuid,\n deviceId: metadata?.deviceId,\n };\n if (metadata?.planTier !== undefined) account.planTier = metadata.planTier;\n await store.addAccount(account);\n await store.setActiveUuid(account.uuid);\n } catch {\n // best-effort\n }\n}\n\nexport async function handleAuthorize(\n manager: AccountManager | null,\n inputs?: Record<string, string>,\n client?: PluginClient,\n): Promise<OAuthFlowResult> {\n if (!inputs || !isTTY()) {\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n }\n\n const effectiveManager = manager ?? await loadManagerFromDisk(client);\n if (!effectiveManager || effectiveManager.getAccounts().length === 0) {\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n }\n\n return runAccountManagementMenu(effectiveManager, client);\n}\n\nasync function loadManagerFromDisk(client?: PluginClient): Promise<AccountManager | null> {\n const store = new AccountStore();\n const stored = await store.load();\n if (stored.accounts.length === 0) return null;\n const emptyAuth: OAuthCredentials = { type: \"oauth\", refresh: \"\", access: \"\", expires: 0 };\n return AccountManager.create(store, emptyAuth, client);\n}\n\nasync function runAccountManagementMenu(\n manager: AccountManager,\n client?: PluginClient,\n): Promise<OAuthFlowResult> {\n while (true) {\n const allAccounts = manager.getAccounts();\n const menuAction = await showAuthMenu(allAccounts);\n\n switch (menuAction.type) {\n case \"add\":\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n\n case \"check-quotas\":\n await handleCheckQuotas(manager, client);\n continue;\n\n case \"manage\": {\n const result = await showManageAccounts(allAccounts);\n if (result.action === \"back\" || result.action === \"cancel\") continue;\n const manageResult = await handleManageAction(manager, result.action, result.account, client);\n if (manageResult.triggerOAuth) {\n return wrapCallbackWithAccountReplace(await startOAuthFlow(), manager, manageResult.account);\n }\n continue;\n }\n\n case \"load-balancing\":\n await handleLoadBalancing();\n continue;\n\n case \"delete-all\":\n await manager.clearAllAccounts();\n console.log(\"\\nAll accounts deleted.\\n\");\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n\n case \"cancel\":\n return makeFailedFlowResult(\"Authentication cancelled\");\n }\n }\n}\n\nasync function handleCheckQuotas(manager: AccountManager, client?: PluginClient): Promise<void> {\n await manager.refresh();\n const accounts = manager.getAccounts();\n const effectiveClient = client ?? createMinimalClient();\n if (client) manager.setClient(client);\n console.log(`\\n📊 Checking quotas for ${accounts.length} account(s)...\\n`);\n\n for (const account of accounts) {\n await checkAccountQuota(manager, account, effectiveClient);\n }\n}\n\nasync function checkAccountQuota(\n manager: AccountManager,\n account: ManagedAccount,\n client: PluginClient,\n): Promise<void> {\n if (account.isAuthDisabled || !account.accessToken || isTokenExpired(account)) {\n if (!account.uuid) {\n printQuotaError(account, \"Missing account UUID\");\n return;\n }\n\n const refreshResult = await manager.ensureValidToken(account.uuid, client);\n if (!refreshResult.ok) {\n await manager.markAuthFailure(account.uuid, refreshResult);\n await manager.refresh();\n\n const updatedAccount = manager.getAccounts().find((candidate) => candidate.uuid === account.uuid);\n if (!updatedAccount) {\n printQuotaError(account, refreshResult.permanent\n ? \"Refresh failed permanently; account removed\"\n : \"Failed to refresh token\");\n return;\n }\n\n printQuotaError(updatedAccount, updatedAccount.isAuthDisabled\n ? `${updatedAccount.authDisabledReason ?? \"Auth disabled\"} (refresh failed)`\n : \"Failed to refresh token\");\n return;\n }\n\n await manager.refresh();\n }\n\n const freshAccounts = manager.getAccounts();\n const freshAccount = freshAccounts.find((candidate) => candidate.uuid === account.uuid);\n\n if (!freshAccount?.accessToken) {\n printQuotaError(account, \"No access token available\");\n return;\n }\n\n const usageResult = await fetchUsage(freshAccount.accessToken);\n if (!usageResult.ok) {\n printQuotaError(freshAccount, `Failed to fetch usage: ${usageResult.reason}`);\n return;\n }\n\n if (freshAccount.uuid) {\n await manager.applyUsageCache(freshAccount.uuid, usageResult.data);\n }\n\n let reportAccount = freshAccount;\n const profileResult = await fetchProfile(freshAccount.accessToken);\n if (profileResult.ok) {\n if (freshAccount.uuid) {\n await manager.applyProfileCache(freshAccount.uuid, profileResult.data);\n }\n reportAccount = {\n ...freshAccount,\n email: profileResult.data.email ?? freshAccount.email,\n planTier: profileResult.data.planTier,\n };\n }\n\n printQuotaReport(reportAccount, usageResult.data);\n}\n\nasync function handleLoadBalancing(): Promise<void> {\n const current = getConfig().account_selection_strategy;\n const selected = await showStrategySelect(current);\n\n if (!selected || selected === current) return;\n\n await updateConfigField(\"account_selection_strategy\", selected);\n console.log(`\\nLoad balancing strategy changed: ${current} → ${selected}\\n`);\n}\n\ntype ManageActionResult =\n | { triggerOAuth: false }\n | { triggerOAuth: true; account: ManagedAccount };\n\nasync function handleManageAction(\n manager: AccountManager,\n action: string,\n account?: ManagedAccount,\n client?: PluginClient,\n): Promise<ManageActionResult> {\n if (!account) return { triggerOAuth: false };\n\n const label = getAccountLabel(account);\n\n switch (action) {\n case \"toggle\":\n if (!account.uuid) break;\n await manager.toggleEnabled(account.uuid);\n await manager.refresh();\n {\n const updated = manager.getAccounts().find((candidate) => candidate.uuid === account.uuid);\n console.log(`\\n${label} ${updated?.enabled ? \"enabled\" : \"disabled\"}.\\n`);\n }\n break;\n\n case \"delete\":\n if (!account.uuid) break;\n {\n const removed = await manager.removeAccount(account.index);\n console.log(removed ? \"\\nAccount deleted.\\n\" : \"\\nFailed to delete account.\\n\");\n }\n break;\n\n case \"retry-auth\": {\n if (!account.uuid) break;\n const effectiveClient = client ?? createMinimalClient();\n console.log(`\\nRetrying authentication for ${label}...\\n`);\n const result = await manager.retryAuth(account.uuid, effectiveClient);\n\n if (result.ok) {\n console.log(`✅ ${label} re-authenticated successfully.\\n`);\n } else {\n console.log(\"Token refresh failed — starting OAuth flow...\\n\");\n return { triggerOAuth: true, account };\n }\n break;\n }\n }\n\n return { triggerOAuth: false };\n}\n","import { createProactiveRefreshQueueForProvider } from \"opencode-multi-account-core\";\nimport { getConfig } from \"../shared/config\";\nimport { isTokenExpired, refreshToken } from \"../oauth/token\";\nimport { debugLog } from \"../shared/utils\";\n\nexport const ProactiveRefreshQueue = createProactiveRefreshQueueForProvider({\n providerAuthId: \"anthropic\",\n getConfig,\n isTokenExpired,\n refreshToken,\n debugLog,\n});\n\nexport type ProactiveRefreshQueue = InstanceType<typeof ProactiveRefreshQueue>;\n","import { AccountStore } from \"../accounts/store\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport { isTokenExpired, refreshToken } from \"../oauth/token\";\nimport { TokenRefreshError } from \"opencode-multi-account-core\";\nimport {\n applyRequestToolMasking,\n extractModelIdFromBody,\n extractToolNamesFromRequestBody,\n transformRequestUrl,\n} from \"../request/transform\";\nimport {\n clampEffortAfterRejection,\n clampUnsupportedEffortInBody,\n parseEffortCapabilityRejection,\n} from \"@kyoli-gam/provider-claude-code/opencode\";\nimport {\n addExcludedBeta,\n ensureOauthBeta,\n extractRejectedBetas,\n getExcludedBetas,\n getModelBetas,\n isUnexpectedBetaError,\n isLongContextError,\n LONG_CONTEXT_BETAS,\n} from \"../request/betas\";\nimport {\n filterBillableBetas,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"../request/headers\";\nimport {\n buildUpstreamRequest,\n createStreamingReverseMapper,\n getDanglingToolUseError,\n OPENCODE_OUTPUT_EFFORT_HEADER,\n readOpenCodeVariantEffort,\n stampClaudeCodeCch,\n getUpstreamSessionId,\n reverseMapResponse,\n type OutputEffortValue,\n} from \"../request/upstream-request\";\nimport { claudeCodeIntegration, type ClaudeIdentity } from \"../claude-code\";\nimport type { PluginClient, StoredAccount } from \"../shared/types\";\nimport { recordObservedToolNames } from \"../tools/observation\";\nimport { debugLog } from \"../shared/utils\";\nimport { enrich429, sanitizeError } from \"../shared/error-utils\";\nimport { computePacingDelay, resolvePacingConfig } from \"./pacing\";\n\ntype BaseFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\ntype JsonRecord = Record<string, unknown>;\ntype Message = JsonRecord & {\n role?: string;\n content?: unknown;\n};\n\ninterface AccountRuntime {\n fetch: BaseFetch;\n}\n\nconst TOKEN_REFRESH_PERMANENT_FAILURE_STATUS = 401;\nconst ASSISTANT_PREFILL_UNSUPPORTED_MESSAGE = \"This model does not support assistant message prefill\";\nconst NON_SUBSCRIPTION_BILLING_BACKOFF_MS = 24 * 60 * 60 * 1000;\n\nfunction mergeHeaders(target: Record<string, string>, headers: HeadersInit | undefined): void {\n if (!headers) {\n return;\n }\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n target[key.toLowerCase()] = value;\n });\n return;\n }\n\n if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n target[String(key).toLowerCase()] = String(value);\n }\n return;\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n target[key.toLowerCase()] = String(value);\n }\n }\n}\n\nfunction extractIncomingHeaders(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (input instanceof Request) {\n mergeHeaders(headers, input.headers);\n }\n\n mergeHeaders(headers, init?.headers);\n return headers;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readHeaderOutputEffort(headers: Record<string, string>): OutputEffortValue | undefined {\n return readOpenCodeVariantEffort(headers[OPENCODE_OUTPUT_EFFORT_HEADER]);\n}\n\nfunction messageHasToolUse(message: Message): boolean {\n return Array.isArray(message.content)\n && message.content.some((block) => isRecord(block) && block.type === \"tool_use\");\n}\n\nfunction removeTrailingAssistantPrefillBody(body: BodyInit | null | undefined): string | null {\n if (typeof body !== \"string\") {\n return null;\n }\n\n try {\n const parsed = JSON.parse(body) as unknown;\n if (!isRecord(parsed) || !Array.isArray(parsed.messages)) {\n return null;\n }\n\n const messages = parsed.messages as Message[];\n const originalLength = messages.length;\n\n while (messages.length > 0) {\n const lastMessage = messages[messages.length - 1];\n if (!lastMessage || lastMessage.role !== \"assistant\" || messageHasToolUse(lastMessage)) {\n break;\n }\n\n messages.pop();\n }\n\n return messages.length === originalLength ? null : JSON.stringify(parsed);\n } catch {\n return null;\n }\n}\n\nasync function isAssistantPrefillUnsupportedResponse(response: Response): Promise<boolean> {\n if (response.status !== 400) {\n return false;\n }\n\n return (await response.clone().text()).includes(ASSISTANT_PREFILL_UNSUPPORTED_MESSAGE);\n}\n\nfunction splitBetaValues(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n}\n\nfunction deduplicateBetas(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))];\n}\n\nfunction excludeBetas(values: string[], excludedBetas: Set<string>): string[] {\n if (excludedBetas.size === 0) {\n return values;\n }\n\n return values.filter((beta) => !excludedBetas.has(beta));\n}\n\nfunction transformBodyToUpstream(\n body: string,\n identity: ClaudeIdentity,\n sessionId: string,\n outputEffort?: OutputEffortValue,\n): { body: string; reverseLookup: Map<string, string>; validationError: string | null } {\n try {\n const parsed = JSON.parse(body) as unknown;\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return { body, reverseLookup: new Map(), validationError: null };\n }\n\n const template = claudeCodeIntegration.loadTemplate();\n\n const upstreamRequest = buildUpstreamRequest(\n parsed as Record<string, unknown>,\n identity,\n template,\n { sessionId, outputEffort },\n );\n\n const validationError = getDanglingToolUseError(\n Array.isArray(upstreamRequest.messages) ? upstreamRequest.messages as Array<Record<string, unknown>> : [],\n );\n\n const maskedRequest = applyRequestToolMasking(upstreamRequest as Record<string, unknown>, template.tool_names) as {\n body: string;\n reverseLookup: Map<string, string>;\n };\n\n return {\n ...maskedRequest,\n validationError,\n };\n } catch {\n return { body, reverseLookup: new Map(), validationError: null };\n }\n}\n\nfunction resolveAccountIdentity(storedAccount: StoredAccount, fallback: ClaudeIdentity): ClaudeIdentity {\n return {\n deviceId: storedAccount.deviceId || fallback.deviceId,\n accountUuid: storedAccount.accountUuid || storedAccount.accountId || fallback.accountUuid || storedAccount.uuid || \"\",\n };\n}\n\nasync function applyResponseReverseLookup(\n response: Response,\n reverseLookup: Map<string, string>,\n): Promise<Response> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"text/event-stream\")) {\n return createStreamingReverseMapper(response, reverseLookup);\n }\n\n if (!contentType.includes(\"application/json\") || reverseLookup.size === 0) {\n return response;\n }\n\n try {\n const payload = await response.clone().json();\n const remapped = reverseMapResponse(payload, reverseLookup);\n return new Response(JSON.stringify(remapped), {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers(response.headers),\n });\n } catch {\n return response;\n }\n}\n\nasync function enrichRateLimitResponse(response: Response): Promise<Response> {\n if (response.status !== 429) {\n return response;\n }\n\n const body = await response.clone().text();\n const enrichedBody = enrich429(body, response.headers);\n if (enrichedBody === body) {\n return response;\n }\n\n return new Response(enrichedBody, {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers(response.headers),\n });\n}\n\nfunction isNonSubscriptionBillingClaim(claim: string | null): claim is string {\n if (!claim || claim === \"unknown\") return false;\n const normalized = claim.toLowerCase();\n return normalized === \"api\"\n || normalized.startsWith(\"api_\")\n || normalized === \"overage\"\n || normalized.startsWith(\"overage_\")\n || normalized.includes(\"credit\")\n || normalized.startsWith(\"sdk\");\n}\n\nasync function blockNonSubscriptionBillingClaim(response: Response): Promise<Response> {\n const claim = response.headers.get(\"anthropic-ratelimit-unified-representative-claim\");\n if (!isNonSubscriptionBillingClaim(claim)) {\n return response;\n }\n\n await response.body?.cancel().catch(() => undefined);\n const headers = new Headers(response.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.set(\"retry-after-ms\", String(NON_SUBSCRIPTION_BILLING_BACKOFF_MS));\n headers.set(\"x-kyoli-non-subscription-billing-claim\", claim);\n\n return new Response(\n JSON.stringify({\n error: {\n type: \"non_subscription_billing_claim\",\n message: `Claude Code response used non-subscription billing claim '${claim}'. Kyoli blocked this account to avoid API/credit billing bleed.`,\n },\n }),\n {\n status: 429,\n headers,\n },\n );\n}\n\nexport interface PacingTestOverrides {\n now?: () => number;\n sleep?: (ms: number) => Promise<void>;\n}\n\nexport class AccountRuntimeFactory {\n private runtimes = new Map<string, AccountRuntime>();\n private initLocks = new Map<string, Promise<AccountRuntime>>();\n private effortSupportByModel = new Map<string, string[]>();\n private lastRequestTime = 0;\n private pacingGate = Promise.resolve();\n private pacingTestOverrides: PacingTestOverrides = {};\n private tokenRefreshLocks = new Map<string, Promise<{ accessToken: string; expiresAt: number }>>();\n\n constructor(\n private readonly store: AccountStore,\n private readonly client: PluginClient,\n private readonly identity: ClaudeIdentity = claudeCodeIntegration.loadIdentity(),\n ) {}\n\n setPacingTestOverrides(overrides: PacingTestOverrides): void {\n this.pacingTestOverrides = overrides;\n }\n\n resetPacingForTest(): void {\n this.lastRequestTime = 0;\n this.pacingGate = Promise.resolve();\n this.pacingTestOverrides = {};\n }\n\n async getRuntime(uuid: string): Promise<AccountRuntime> {\n const cached = this.runtimes.get(uuid);\n if (cached) return cached;\n\n const existing = this.initLocks.get(uuid);\n if (existing) return existing;\n\n const initPromise = this.createRuntime(uuid);\n this.initLocks.set(uuid, initPromise);\n\n try {\n const runtime = await initPromise;\n this.runtimes.set(uuid, runtime);\n return runtime;\n } finally {\n this.initLocks.delete(uuid);\n }\n }\n\n invalidate(uuid: string): void {\n this.runtimes.delete(uuid);\n }\n\n invalidateAll(): void {\n this.runtimes.clear();\n }\n\n private async ensureFreshToken(\n storedAccount: StoredAccount,\n uuid: string,\n ): Promise<{ accessToken: string; expiresAt: number }> {\n const existingRefresh = this.tokenRefreshLocks.get(uuid);\n if (existingRefresh) return existingRefresh;\n\n const refreshPromise = this.refreshAndPersistToken(storedAccount, uuid);\n this.tokenRefreshLocks.set(uuid, refreshPromise);\n\n try {\n return await refreshPromise;\n } finally {\n this.tokenRefreshLocks.delete(uuid);\n }\n }\n\n private async refreshAndPersistToken(\n storedAccount: StoredAccount,\n uuid: string,\n ): Promise<{ accessToken: string; expiresAt: number }> {\n const latestStorage = await this.store.load();\n const latestAccount = latestStorage.accounts.find((account: StoredAccount) => account.uuid === uuid);\n const accountToRefresh = latestAccount ?? storedAccount;\n const latestAccessToken = accountToRefresh.accessToken;\n\n if (\n latestAccessToken\n && accountToRefresh.expiresAt\n && !isTokenExpired({ accessToken: latestAccessToken, expiresAt: accountToRefresh.expiresAt })\n ) {\n return { accessToken: latestAccessToken, expiresAt: accountToRefresh.expiresAt };\n }\n\n const refreshed = await refreshToken(accountToRefresh.refreshToken, uuid, this.client);\n if (!refreshed.ok) {\n throw new TokenRefreshError(\n refreshed.permanent,\n refreshed.permanent ? TOKEN_REFRESH_PERMANENT_FAILURE_STATUS : undefined,\n );\n }\n\n await this.store.mutateAccount(uuid, (account) => {\n account.accessToken = refreshed.patch.accessToken;\n account.expiresAt = refreshed.patch.expiresAt;\n if (refreshed.patch.refreshToken) account.refreshToken = refreshed.patch.refreshToken;\n if (refreshed.patch.uuid) account.uuid = refreshed.patch.uuid;\n if (refreshed.patch.accountId) account.accountId = refreshed.patch.accountId;\n if (refreshed.patch.accountUuid && !account.accountUuid) account.accountUuid = refreshed.patch.accountUuid;\n if (refreshed.patch.deviceId && !account.deviceId) account.deviceId = refreshed.patch.deviceId;\n if (refreshed.patch.email) account.email = refreshed.patch.email;\n account.consecutiveAuthFailures = 0;\n account.isAuthDisabled = false;\n account.authDisabledReason = undefined;\n });\n\n this.client.auth\n .set({\n path: { id: ANTHROPIC_OAUTH_ADAPTER.authProviderId },\n body: {\n type: \"oauth\",\n refresh: refreshed.patch.refreshToken ?? accountToRefresh.refreshToken,\n access: refreshed.patch.accessToken,\n expires: refreshed.patch.expiresAt,\n },\n })\n .catch(() => {});\n\n return { accessToken: refreshed.patch.accessToken, expiresAt: refreshed.patch.expiresAt };\n }\n\n private buildOutboundHeaders(\n incomingHeaders: Record<string, string>,\n sessionId: string,\n accessToken: string,\n modelId: string,\n excludedBetas: Set<string>,\n ): HeadersInit {\n const mergedBetas = deduplicateBetas(ensureOauthBeta([\n ...getModelBetas(modelId, excludedBetas),\n ...excludeBetas(splitBetaValues(incomingHeaders[\"anthropic-beta\"]), excludedBetas),\n ])).join(\",\");\n\n const outbound: Record<string, string> = {\n ...incomingHeaders,\n ...getStaticHeaders(),\n ...getPerRequestHeaders(sessionId),\n \"authorization\": `Bearer ${accessToken}`,\n \"anthropic-beta\": filterBillableBetas(mergedBetas),\n };\n delete outbound[\"x-api-key\"];\n\n return orderHeadersForOutbound(outbound);\n }\n\n private async executeTransformedFetch(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n accessToken: string,\n identity: ClaudeIdentity,\n ): Promise<Response> {\n const transformedInput = transformRequestUrl(input);\n const modelId = extractModelIdFromBody(init?.body);\n const excludedBetas = getExcludedBetas(modelId);\n\n const incomingHeaders = extractIncomingHeaders(transformedInput, init);\n const sessionId = incomingHeaders[\"x-claude-code-session-id\"] ?? getUpstreamSessionId();\n const outputEffort = readHeaderOutputEffort(incomingHeaders);\n delete incomingHeaders[OPENCODE_OUTPUT_EFFORT_HEADER];\n const headers = this.buildOutboundHeaders(\n incomingHeaders,\n sessionId,\n accessToken,\n modelId,\n excludedBetas,\n );\n\n if (typeof init?.body === \"string\") {\n void recordObservedToolNames(extractToolNamesFromRequestBody(init.body)).catch(() => {});\n }\n\n const transformedRequest = typeof init?.body === \"string\"\n ? transformBodyToUpstream(init.body, identity, sessionId, outputEffort)\n : { body: init?.body, reverseLookup: new Map<string, string>(), validationError: null };\n\n if (transformedRequest.validationError) {\n return new Response(JSON.stringify({\n error: {\n message: transformedRequest.validationError,\n type: \"invalid_request_error\",\n },\n }), {\n status: 400,\n headers: { \"content-type\": \"application/json\" },\n });\n }\n\n const pacingCfg = resolvePacingConfig();\n const getNow = this.pacingTestOverrides.now ?? Date.now;\n const sleepFn = this.pacingTestOverrides.sleep\n ?? ((ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)));\n\n const reservePacingSlot = async (): Promise<void> => {\n let releaseGate: (() => void) | undefined;\n const previousGate = this.pacingGate;\n this.pacingGate = new Promise<void>((resolve) => {\n releaseGate = resolve;\n });\n\n await previousGate;\n\n try {\n const delay = computePacingDelay(getNow(), this.lastRequestTime, pacingCfg);\n if (delay > 0) {\n await sleepFn(delay);\n }\n this.lastRequestTime = getNow();\n } finally {\n releaseGate?.();\n }\n };\n\n const performFetch = async (requestHeaders: HeadersInit, requestBody: BodyInit | null | undefined): Promise<Response> => {\n await reservePacingSlot();\n const stampedBody = typeof requestBody === \"string\"\n ? stampClaudeCodeCch(requestBody)\n : requestBody;\n\n try {\n const response = await fetch(transformedInput, {\n ...init,\n headers: requestHeaders,\n body: stampedBody,\n });\n return await enrichRateLimitResponse(await blockNonSubscriptionBillingClaim(response));\n } catch (error) {\n debugLog(this.client, \"Anthropic upstream fetch failed\", {\n error: sanitizeError(error),\n });\n throw error;\n }\n };\n\n let outboundBody = clampUnsupportedEffortInBody(\n transformedRequest.body,\n this.effortSupportByModel,\n ).body;\n const retryEffortCapability = async (\n currentResponse: Response,\n requestHeaders: HeadersInit,\n ): Promise<Response> => {\n if (currentResponse.status !== 400) {\n return currentResponse;\n }\n\n const responseBody = await currentResponse.clone().text().catch(() => \"\");\n const rejection = parseEffortCapabilityRejection(responseBody);\n if (!rejection) {\n return currentResponse;\n }\n\n const clamped = clampEffortAfterRejection(\n outboundBody,\n rejection,\n this.effortSupportByModel,\n );\n if (!clamped.changed) {\n return currentResponse;\n }\n\n outboundBody = clamped.body;\n return performFetch(requestHeaders, outboundBody);\n };\n\n let response = await performFetch(headers, outboundBody);\n response = await retryEffortCapability(response, headers);\n\n if (await isAssistantPrefillUnsupportedResponse(response)) {\n const retryBody = removeTrailingAssistantPrefillBody(outboundBody);\n if (retryBody) {\n outboundBody = retryBody;\n response = await performFetch(headers, outboundBody);\n response = await retryEffortCapability(response, headers);\n }\n }\n\n for (let attempt = 0; attempt < LONG_CONTEXT_BETAS.length; attempt += 1) {\n if (response.status !== 400 && response.status !== 429) {\n break;\n }\n\n const responseBody = await response.clone().text();\n if (!isLongContextError(responseBody) && !isUnexpectedBetaError(responseBody)) {\n break;\n }\n\n if (isUnexpectedBetaError(responseBody)) {\n const rejectedBetas = extractRejectedBetas(responseBody);\n if (rejectedBetas.length === 0) {\n break;\n }\n\n for (const rejectedBeta of rejectedBetas) {\n addExcludedBeta(modelId, rejectedBeta);\n }\n } else {\n const betasToExclude = LONG_CONTEXT_BETAS.filter((beta) => !getExcludedBetas(modelId).has(beta));\n if (betasToExclude.length === 0) {\n break;\n }\n\n for (const beta of betasToExclude) {\n addExcludedBeta(modelId, beta);\n }\n }\n\n const retryHeaders = this.buildOutboundHeaders(\n incomingHeaders,\n sessionId,\n accessToken,\n modelId,\n getExcludedBetas(modelId),\n );\n\n response = await performFetch(retryHeaders, outboundBody);\n response = await retryEffortCapability(response, retryHeaders);\n }\n\n return applyResponseReverseLookup(response, transformedRequest.reverseLookup);\n }\n\n private async createRuntime(uuid: string): Promise<AccountRuntime> {\n const fetchWithAccount: BaseFetch = async (input, init) => {\n const storage = await this.store.load();\n const storedAccount = storage.accounts.find((account: StoredAccount) => account.uuid === uuid);\n if (!storedAccount) {\n throw new Error(`No credentials found for account ${uuid}`);\n }\n\n let accessToken = storedAccount.accessToken;\n\n if (!accessToken || !storedAccount.expiresAt || isTokenExpired({ accessToken, expiresAt: storedAccount.expiresAt })) {\n ({ accessToken } = await this.ensureFreshToken(storedAccount, uuid));\n }\n\n if (!accessToken) {\n throw new Error(`No access token available for account ${uuid}`);\n }\n\n return this.executeTransformedFetch(\n input,\n init,\n accessToken,\n resolveAccountIdentity(storedAccount, this.identity),\n );\n };\n\n debugLog(this.client, `Runtime created for account ${uuid.slice(0, 8)}`);\n return { fetch: fetchWithAccount };\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { resolveClaudeCodeModelAlias } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { ensureOauthBeta, getModelBetas } from \"./betas\";\nimport { claudeCodeIntegration } from \"../claude-code\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport {\n createStreamingReverseMapper,\n buildUpstreamRequest,\n} from \"./upstream-request\";\nimport {\n applyOutboundToolFlow,\n buildRequestScopedToolLookup,\n type ReverseLookup,\n} from \"../tools/flow\";\nimport {\n filterBillableBetas,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./headers\";\n\ntype JsonRecord = Record<string, unknown>;\ntype ToolEntry = { name?: string; [key: string]: unknown };\ntype RequestPayload = {\n model?: string;\n tools?: ToolEntry[];\n messages?: Array<Record<string, unknown>>;\n tool_choice?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction mergeHeaders(target: Record<string, string>, headers: HeadersInit | undefined): void {\n if (!headers) {\n return;\n }\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n target[key.toLowerCase()] = value;\n });\n return;\n }\n\n if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n target[String(key).toLowerCase()] = String(value);\n }\n return;\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n target[key.toLowerCase()] = String(value);\n }\n }\n}\n\nfunction getMergedIncomingHeaders(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (input instanceof Request) {\n mergeHeaders(headers, input.headers);\n }\n\n mergeHeaders(headers, init?.headers);\n return headers;\n}\n\nfunction splitHeaderValues(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n\nfunction dedupeHeaderValues(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))];\n}\n\nfunction excludeBetas(values: string[], excluded?: Set<string>): string[] {\n if (!excluded || excluded.size === 0) {\n return values;\n }\n\n return values.filter((value) => !excluded.has(value));\n}\n\nfunction resolveSessionId(headers: Record<string, string>): string {\n return headers[\"x-claude-code-session-id\"] ?? randomUUID();\n}\n\nfunction invertLookup(forwardLookup: ReadonlyMap<string, string>): ReverseLookup {\n const reverseLookup: ReverseLookup = new Map();\n\n for (const [originalName, upstreamName] of forwardLookup) {\n reverseLookup.set(upstreamName, originalName);\n }\n\n return reverseLookup;\n}\n\nexport function extractRequestToolMaskMap(body: string | undefined): ReverseLookup {\n if (!body) {\n return new Map();\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n return isRecord(parsed) ? buildRequestScopedToolLookup(parsed, claudeCodeIntegration.loadTemplate().tool_names) : new Map();\n } catch {\n return new Map();\n }\n}\n\nexport function applyRequestToolMasking(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): { body: string; reverseLookup: ReverseLookup } {\n return applyOutboundToolFlow(parsed, claudeToolNames);\n}\n\nexport function transformRequestBodyWithLookup(\n body: string | undefined,\n identity = claudeCodeIntegration.loadIdentity(),\n): { body: string | undefined; reverseLookup: ReverseLookup } {\n if (!body) {\n return { body, reverseLookup: new Map() };\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n if (!isRecord(parsed)) {\n return { body, reverseLookup: new Map() };\n }\n\n const template = claudeCodeIntegration.loadTemplate();\n const upstreamRequest = buildUpstreamRequest(parsed, identity, template);\n return applyRequestToolMasking(upstreamRequest as RequestPayload, template.tool_names);\n } catch {\n return { body, reverseLookup: new Map() };\n }\n}\n\nexport function buildRequestHeaders(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n accessToken: string,\n modelId = \"unknown\",\n excludedBetas?: Set<string>,\n): HeadersInit {\n const incomingHeaders = getMergedIncomingHeaders(input, init);\n const sessionId = resolveSessionId(incomingHeaders);\n const mergedBetas = dedupeHeaderValues(ensureOauthBeta([\n ...getModelBetas(modelId, excludedBetas),\n ...excludeBetas(splitHeaderValues(incomingHeaders[\"anthropic-beta\"]), excludedBetas),\n ])).join(\",\");\n\n const outboundHeaders: Record<string, string> = {\n ...incomingHeaders,\n ...getStaticHeaders(),\n ...getPerRequestHeaders(sessionId),\n authorization: `Bearer ${accessToken}`,\n \"anthropic-beta\": filterBillableBetas(mergedBetas),\n };\n\n delete outboundHeaders[\"x-api-key\"];\n\n return orderHeadersForOutbound(outboundHeaders);\n}\n\nexport function transformRequestBody(body: string | undefined): string | undefined {\n return transformRequestBodyWithLookup(body).body;\n}\n\nexport function extractModelIdFromBody(body: BodyInit | null | undefined): string {\n if (typeof body !== \"string\") {\n return \"unknown\";\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n return typeof parsed.model === \"string\" ? resolveClaudeCodeModelAlias(parsed.model) : \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nexport function transformRequestUrl(input: RequestInfo | URL): RequestInfo | URL {\n let url: URL | null = null;\n try {\n if (typeof input === \"string\" || input instanceof URL) {\n url = new URL(input.toString());\n } else if (input instanceof Request) {\n url = new URL(input.url);\n }\n } catch {\n return input;\n }\n\n if (\n ANTHROPIC_OAUTH_ADAPTER.transform.enableMessagesBetaQuery\n && url\n && url.pathname === \"/v1/messages\"\n && !url.searchParams.has(\"beta\")\n ) {\n url.searchParams.set(\"beta\", \"true\");\n return input instanceof Request ? new Request(url.toString(), input) : url;\n }\n\n return input;\n}\n\nexport function extractToolNamesFromRequestBody(body: string | undefined): string[] {\n if (!body) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n if (!Array.isArray(parsed.tools)) {\n return [];\n }\n\n return parsed.tools\n .map((tool) => (typeof tool.name === \"string\" ? tool.name : null))\n .filter((toolName): toolName is string => Boolean(toolName));\n } catch {\n return [];\n }\n}\n\nexport function createResponseStreamTransform(\n response: Response,\n reverseLookup: ReadonlyMap<string, string> = new Map(),\n): Response {\n return createStreamingReverseMapper(response, invertLookup(reverseLookup));\n}\n","import { claudeCodeIntegration } from \"../claude-code\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\n\nexport const FABLE_FALLBACK_CREDIT_BETA = \"fallback-credit-2026-06-01\";\nexport const MID_CONVERSATION_SYSTEM_BETA = \"mid-conversation-system-2026-04-07\";\nexport const EFFORT_BETA = \"effort-2025-11-24\";\n\nexport interface ModelOverride {\n exclude?: string[];\n add?: string[];\n}\n\nexport interface ModelConfig {\n baseBetas: string[];\n longContextBetas: string[];\n modelOverrides: Record<string, ModelOverride>;\n}\n\nfunction splitBetaFlags(value: string): string[] {\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n\nexport const config: ModelConfig = {\n baseBetas: splitBetaFlags(ANTHROPIC_OAUTH_ADAPTER.requestBetaHeader),\n longContextBetas: [\"context-1m-2025-08-07\", \"context-management-2025-06-27\"],\n modelOverrides: {\n fable: {\n add: [FABLE_FALLBACK_CREDIT_BETA],\n },\n sonnet: {\n exclude: [MID_CONVERSATION_SYSTEM_BETA],\n add: [EFFORT_BETA],\n },\n haiku: {\n exclude: [MID_CONVERSATION_SYSTEM_BETA, EFFORT_BETA],\n },\n \"4-6\": {\n add: [EFFORT_BETA],\n },\n },\n};\n\nexport function getCliVersion(): string {\n return claudeCodeIntegration.loadRequestProfile().cliVersion;\n}\n\nexport function getUserAgent(): string {\n return claudeCodeIntegration.loadRequestProfile().userAgent;\n}\n\nexport function getRequiredBetas(): string[] {\n return splitBetaFlags(\n process.env.ANTHROPIC_BETA_FLAGS\n ?? claudeCodeIntegration.loadRequestProfile().betaHeader\n ?? config.baseBetas.join(\",\"),\n );\n}\n\nexport function getModelOverride(modelId: string): ModelOverride | null {\n const lowerModelId = modelId.toLowerCase();\n for (const [pattern, override] of Object.entries(config.modelOverrides)) {\n if (lowerModelId.includes(pattern)) {\n return override;\n }\n }\n\n return null;\n}\n","import { resolveClaudeCodeModelAlias, isClaudeCode1mModelLabel } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { config, getModelOverride, getRequiredBetas } from \"../model/config\";\n\nexport const LONG_CONTEXT_BETAS = config.longContextBetas;\nexport const OAUTH_BETA = \"oauth-2025-04-20\";\n\nconst excludedBetas = new Map<string, Set<string>>();\n\nlet lastBetaFlagsEnv = process.env.ANTHROPIC_BETA_FLAGS;\nlet lastModelId: string | undefined;\n\nexport function getExcludedBetas(modelId: string): Set<string> {\n const currentBetaFlags = process.env.ANTHROPIC_BETA_FLAGS;\n if (currentBetaFlags !== lastBetaFlagsEnv) {\n excludedBetas.clear();\n lastBetaFlagsEnv = currentBetaFlags;\n }\n\n if (lastModelId !== undefined && lastModelId !== modelId) {\n excludedBetas.clear();\n }\n lastModelId = modelId;\n\n return excludedBetas.get(modelId) ?? new Set();\n}\n\nexport function addExcludedBeta(modelId: string, beta: string): void {\n const nextExcludedBetas = excludedBetas.get(modelId) ?? new Set<string>();\n nextExcludedBetas.add(beta);\n excludedBetas.set(modelId, nextExcludedBetas);\n}\n\nexport function resetExcludedBetas(): void {\n excludedBetas.clear();\n lastModelId = undefined;\n lastBetaFlagsEnv = process.env.ANTHROPIC_BETA_FLAGS;\n}\n\nexport function isLongContextError(responseBody: string): boolean {\n return responseBody.includes(\"Extra usage is required for long context requests\")\n || responseBody.includes(\"long context beta is not yet available\");\n}\n\nexport function isUnexpectedBetaError(responseBody: string): boolean {\n return responseBody.includes(\"Unexpected value\") && responseBody.includes(\"anthropic-beta\");\n}\n\nexport function extractRejectedBetas(responseBody: string): string[] {\n const match = /Unexpected value\\(s\\):\\s*([^\\n]+?)\\s*for the anthropic-beta header/i.exec(responseBody);\n if (!match?.[1]) {\n return [];\n }\n\n return match[1]\n .split(\",\")\n .map((value) => value.trim().replace(/^['\"]|['\"]$/g, \"\"))\n .filter(Boolean);\n}\n\nexport function ensureOauthBeta(betas: string[]): string[] {\n return betas.includes(OAUTH_BETA) ? betas : [OAUTH_BETA, ...betas];\n}\n\nexport function getNextBetaToExclude(modelId: string): string | null {\n const excluded = getExcludedBetas(modelId);\n for (const beta of LONG_CONTEXT_BETAS) {\n if (!excluded.has(beta)) {\n return beta;\n }\n }\n\n return null;\n}\n\nexport function supports1mContext(modelId: string): boolean {\n const lowerModelId = resolveClaudeCodeModelAlias(modelId).toLowerCase();\n if (isClaudeCode1mModelLabel(modelId)) {\n return lowerModelId.includes(\"fable\") || lowerModelId.includes(\"opus\") || lowerModelId.includes(\"sonnet\");\n }\n\n if (!lowerModelId.includes(\"opus\") && !lowerModelId.includes(\"sonnet\") && !lowerModelId.includes(\"fable\")) {\n return false;\n }\n\n const versionMatch = lowerModelId.match(/(opus|sonnet|fable)-(\\d+)(?:-(\\d+))?/);\n if (!versionMatch) {\n return false;\n }\n\n const major = Number.parseInt(versionMatch[2]!, 10);\n const minor = versionMatch[3] ? Number.parseInt(versionMatch[3], 10) : 0;\n const effectiveMinor = minor > 99 ? 0 : minor;\n return major > 4 || (major === 4 && effectiveMinor >= 6);\n}\n\nexport function getModelBetas(modelId: string, excluded?: Set<string>): string[] {\n const normalizedModelId = resolveClaudeCodeModelAlias(modelId);\n const betas = [...getRequiredBetas()];\n const longContextBeta = config.longContextBetas[0];\n\n if (\n longContextBeta\n && (process.env.ANTHROPIC_ENABLE_1M_CONTEXT === \"true\" || isClaudeCode1mModelLabel(normalizedModelId))\n && supports1mContext(normalizedModelId)\n ) {\n betas.push(longContextBeta);\n }\n\n const override = getModelOverride(normalizedModelId);\n if (override?.exclude) {\n for (const excludedBeta of override.exclude) {\n const index = betas.indexOf(excludedBeta);\n if (index !== -1) {\n betas.splice(index, 1);\n }\n }\n }\n\n if (override?.add) {\n for (const addedBeta of override.add) {\n if (!betas.includes(addedBeta)) {\n betas.push(addedBeta);\n }\n }\n }\n\n if (!excluded || excluded.size === 0) {\n return betas;\n }\n\n return betas.filter((beta) => !excluded.has(beta));\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n applyClaudeCodeUpstreamBodyFields,\n composeClaudeCodeBillingSystemEntry,\n computeClaudeCodeBuildTag,\n isClaudeFableModel,\n orderClaudeCodeBodyForOutbound,\n resolveClaudeCodeModelAlias,\n stampClaudeCodeCch,\n toClaudeCodeWireModelId,\n} from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { claudeCodeIntegration, type ClaudeIdentity, type TemplateData } from \"../claude-code\";\nimport { getRuntimeModelCapability } from \"../model/capabilities\";\nimport {\n MAX_TOOL_RESULT_TEXT_LENGTH,\n TRUNCATION_SUFFIX,\n normalizeAnthropicClientRequest,\n sanitizeMessages,\n scrubFrameworkIdentifiers,\n type JsonRecord,\n type Message,\n} from \"./client-adapter\";\nimport { selectOpenCodeNativeTools, type ToolDefinition } from \"./tool-adapter\";\n\nconst BILLING_SEED = \"59cf53e54c78\";\nconst SESSION_IDLE_ROTATE_MS = 15 * 60 * 1000;\nconst DEFAULT_CONTEXT_MANAGEMENT = {};\nconst DEFAULT_OUTPUT_EFFORT = \"high\";\nconst VALID_OUTPUT_EFFORT_VALUES = new Set([\"low\", \"medium\", \"high\", \"xhigh\", \"ultracode\", \"max\", \"client\"]);\n\nexport const OPENCODE_OUTPUT_EFFORT_HEADER = \"x-kyoli-opencode-effort\";\n\nexport type OutputEffortValue = \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"ultracode\" | \"max\" | \"client\";\n\ntype ReverseLookup = Map<string, string> | Record<string, string> | undefined;\n\ninterface UpstreamRequestTestOverrides {\n now?: () => number;\n createSessionId?: () => string;\n outputEffort?: OutputEffortValue;\n}\n\nlet upstreamRequestTestOverrides: UpstreamRequestTestOverrides = {};\nlet sessionId: string = randomUUID();\nlet sessionLastUsed = 0;\n\nfunction now(): number {\n return upstreamRequestTestOverrides.now?.() ?? Date.now();\n}\n\nfunction createSessionId(): string {\n return upstreamRequestTestOverrides.createSessionId?.() ?? randomUUID();\n}\n\nfunction getActiveSessionId(): string {\n const currentTime = now();\n\n if (sessionLastUsed === 0 || (currentTime - sessionLastUsed) > SESSION_IDLE_ROTATE_MS) {\n sessionId = createSessionId();\n }\n\n sessionLastUsed = currentTime;\n return sessionId;\n}\n\nexport function getUpstreamSessionId(): string {\n return getActiveSessionId();\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function readOutputEffortValue(value: unknown): OutputEffortValue | undefined {\n const normalized = readString(value)?.toLowerCase();\n return normalized && VALID_OUTPUT_EFFORT_VALUES.has(normalized)\n ? normalized as OutputEffortValue\n : undefined;\n}\n\nexport function readOpenCodeVariantEffort(value: unknown): OutputEffortValue | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"minimal\") return \"low\";\n return readOutputEffortValue(normalized);\n}\n\nfunction normalizeEffortForWire(effort: OutputEffortValue): string {\n return effort === \"ultracode\" ? \"xhigh\" : effort;\n}\n\nfunction readPositiveNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction effortFromThinkingBudget(thinking: JsonRecord | undefined): OutputEffortValue | undefined {\n const budgetTokens = readPositiveNumber(thinking?.budget_tokens) ?? readPositiveNumber(thinking?.budgetTokens);\n if (budgetTokens === undefined) return undefined;\n if (budgetTokens >= 31_999) return \"max\";\n if (budgetTokens >= 16_000) return \"high\";\n if (budgetTokens >= 8_000) return \"medium\";\n return \"low\";\n}\n\nfunction getConfiguredOutputEffort(): OutputEffortValue | undefined {\n return upstreamRequestTestOverrides.outputEffort\n ?? readOutputEffortValue(process.env.CLAUDE_MULTI_ACCOUNT_EFFORT)\n ?? readOutputEffortValue(process.env.ANTHROPIC_MULTI_ACCOUNT_EFFORT);\n}\n\nexport function getClientOutputEffort(inputBody: Record<string, unknown>): OutputEffortValue | undefined {\n const outputConfig = isRecord(inputBody.output_config) ? inputBody.output_config : undefined;\n const reasoning = isRecord(inputBody.reasoning) ? inputBody.reasoning : undefined;\n const thinking = isRecord(inputBody.thinking) ? inputBody.thinking : undefined;\n\n return readOutputEffortValue(outputConfig?.effort)\n ?? readOutputEffortValue(inputBody.effort)\n ?? readOutputEffortValue(reasoning?.effort)\n ?? readOutputEffortValue(inputBody.reasoning_effort)\n ?? readOutputEffortValue(inputBody.reasoningEffort)\n ?? readOutputEffortValue(thinking?.effort)\n ?? effortFromThinkingBudget(thinking);\n}\n\nexport function resolveOutputEffort(\n inputBody: Record<string, unknown>,\n configuredEffort = getConfiguredOutputEffort(),\n modelId?: string,\n): string {\n if (configuredEffort && configuredEffort !== \"client\") {\n return normalizeEffortForWire(configuredEffort);\n }\n\n const clientEffort = getClientOutputEffort(inputBody);\n return normalizeEffortForWire(clientEffort ?? DEFAULT_OUTPUT_EFFORT);\n}\n\nfunction isHaikuModel(modelId: string): boolean {\n return resolveClaudeCodeModelAlias(modelId).toLowerCase().includes(\"haiku\");\n}\n\nfunction getSystemPromptForModel(template: TemplateData, modelId: string): string {\n return modelId.toLowerCase().includes(\"fable\") && template.system_prompt_fable\n ? template.system_prompt_fable\n : template.system_prompt;\n}\n\nfunction collectToolUseIds(message: Message): string[] {\n if (!Array.isArray(message.content)) {\n return [];\n }\n\n return message.content\n .filter((block) => isRecord(block) && block.type === \"tool_use\" && typeof block.id === \"string\")\n .map((block) => String(block.id));\n}\n\nfunction collectToolResultIds(message: Message): Set<string> {\n if (!Array.isArray(message.content)) {\n return new Set();\n }\n\n return new Set(\n message.content\n .filter((block) => isRecord(block) && block.type === \"tool_result\" && typeof block.tool_use_id === \"string\")\n .map((block) => String(block.tool_use_id)),\n );\n}\n\nexport function getDanglingToolUseError(messages: Message[]): string | null {\n for (let index = 0; index < messages.length; index += 1) {\n const current = messages[index];\n if (!current || current.role !== \"assistant\") {\n continue;\n }\n\n const toolUseIds = collectToolUseIds(current);\n if (toolUseIds.length === 0) {\n continue;\n }\n\n const next = messages[index + 1];\n if (!next || next.role !== \"user\") {\n return `Dangling tool_use after assistant turn ${index}: ${toolUseIds.join(\", \")}`;\n }\n\n const toolResultIds = collectToolResultIds(next);\n const missing = toolUseIds.filter((toolUseId) => !toolResultIds.has(toolUseId));\n if (missing.length > 0) {\n return `Missing tool_result for assistant turn ${index}: ${missing.join(\", \")}`;\n }\n }\n\n return null;\n}\n\nconst ADAPTIVE_THINKING_MODEL_MATCHERS = [\n (modelId: string) => /claude-sonnet-(?:[5-9]|\\d{2,})(?:[-._]\\d+)?(?:\\[1m\\])?$/.test(modelId),\n (modelId: string) => modelId.includes(\"claude-sonnet-4-6\") || modelId.includes(\"claude-sonnet-4.6\"),\n (modelId: string) => modelId.includes(\"claude-opus-4-6\") || modelId.includes(\"claude-opus-4.6\"),\n (modelId: string) => /claude-opus-4[-._]([7-9]|\\d{2,})/.test(modelId),\n (modelId: string) => /claude-fable-(?:[5-9]|\\d{2,})(?:[-._]\\d+)?(?:\\[1m\\])?$/.test(modelId),\n];\nconst DEFAULT_MAX_OUTPUT_TOKENS = 32_000;\n\nfunction supportsAdaptiveThinking(modelId: string): boolean {\n const runtimeCapability = getRuntimeModelCapability(modelId);\n if (typeof runtimeCapability?.supportsThinking === \"boolean\") {\n return runtimeCapability.supportsThinking;\n }\n\n const normalized = resolveClaudeCodeModelAlias(modelId).toLowerCase();\n if (normalized.includes(\"haiku\")) {\n return false;\n }\n\n return ADAPTIVE_THINKING_MODEL_MATCHERS.some((matches) => matches(normalized));\n}\n\nexport function resolveMaxTokens(requestedMaxTokens: unknown): number {\n if (typeof requestedMaxTokens !== \"number\" || !Number.isFinite(requestedMaxTokens)) {\n return DEFAULT_MAX_OUTPUT_TOKENS;\n }\n\n const normalized = Math.floor(requestedMaxTokens);\n if (normalized <= 0) {\n return DEFAULT_MAX_OUTPUT_TOKENS;\n }\n\n return Math.min(normalized, DEFAULT_MAX_OUTPUT_TOKENS);\n}\n\nfunction filterInjectedSystemTexts(\n systemTexts: string[],\n template: TemplateData,\n billingHeader: string,\n): string[] {\n return systemTexts.filter((entry) => (\n entry !== billingHeader\n && entry !== template.agent_identity\n && entry !== template.system_prompt\n && !entry.startsWith(\"x-anthropic-billing-header:\")\n ));\n}\n\nexport function getCcVersion(template?: TemplateData): string {\n return template?.cc_version ?? claudeCodeIntegration.detectCliVersion();\n}\n\nexport { stampClaudeCodeCch };\n\nfunction buildBillingHeader(firstUserMessage: string, template: TemplateData): string {\n const version = getCcVersion(template);\n return composeClaudeCodeBillingSystemEntry(firstUserMessage, version);\n}\n\nfunction getReverseName(name: string, reverseLookup: ReverseLookup): string {\n if (!reverseLookup) {\n return name;\n }\n\n if (reverseLookup instanceof Map) {\n return reverseLookup.get(name) ?? name;\n }\n\n return typeof reverseLookup[name] === \"string\" ? reverseLookup[name] : name;\n}\n\nfunction reverseMapToolUseNames(value: unknown, reverseLookup: ReverseLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => reverseMapToolUseNames(item, reverseLookup));\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const cloned: JsonRecord = {};\n\n for (const [key, nested] of Object.entries(value)) {\n cloned[key] = reverseMapToolUseNames(nested, reverseLookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getReverseName(cloned.name, reverseLookup);\n }\n\n return cloned;\n}\n\nfunction remapSseLine(line: string, reverseLookup: ReverseLookup): string {\n if (!line.startsWith(\"data:\")) {\n return line;\n }\n\n const payload = line.slice(5).trimStart();\n if (payload.length === 0 || payload === \"[DONE]\") {\n return line;\n }\n\n try {\n const parsed = JSON.parse(payload) as unknown;\n return `data: ${JSON.stringify(reverseMapResponse(parsed, reverseLookup))}`;\n } catch {\n return line;\n }\n}\n\nexport function computeBuildTag(userMessage: string, version: string): string {\n return computeClaudeCodeBuildTag(userMessage, version);\n}\n\nexport function buildUpstreamRequest(\n inputBody: Record<string, unknown>,\n identity: ClaudeIdentity,\n template: TemplateData,\n options?: { sessionId?: string; outputEffort?: OutputEffortValue },\n): Record<string, unknown> {\n const { body, firstUserMessage, systemTexts } = normalizeAnthropicClientRequest(inputBody);\n const activeSessionId = options?.sessionId ?? getActiveSessionId();\n const configuredEffort = getConfiguredOutputEffort() ?? options?.outputEffort;\n\n const incomingTools = Array.isArray(body.tools) ? body.tools as ToolDefinition[] : [];\n const selectedTools = selectOpenCodeNativeTools({\n incomingTools,\n templateTools: template.tools,\n });\n body.tools = selectedTools.tools;\n const modelId = typeof body.model === \"string\" ? resolveClaudeCodeModelAlias(body.model) : \"\";\n if (typeof body.model === \"string\") {\n body.model = toClaudeCodeWireModelId(body.model);\n }\n if (isClaudeFableModel(modelId) && incomingTools.length === 0 && selectedTools.tools.length > 0) {\n body.tool_choice = { type: \"none\" };\n }\n if (supportsAdaptiveThinking(modelId)) {\n body.thinking = { type: \"adaptive\", display: \"omitted\" };\n body.context_management = DEFAULT_CONTEXT_MANAGEMENT;\n }\n if (modelId && !isHaikuModel(modelId)) {\n body.output_config = { effort: resolveOutputEffort(inputBody, configuredEffort, modelId) };\n }\n body.max_tokens = resolveMaxTokens(body.max_tokens);\n\n return applyClaudeCodeUpstreamBodyFields(body, {\n agentIdentity: template.agent_identity,\n bodyFieldOrder: template.body_field_order,\n ccVersion: getCcVersion(template),\n firstUserMessage,\n identity: {\n accountUuid: identity.accountUuid,\n deviceId: identity.deviceId,\n },\n sessionId: activeSessionId,\n systemPrompt: getSystemPromptForModel(template, modelId),\n systemTexts: filterInjectedSystemTexts(\n systemTexts,\n template,\n buildBillingHeader(firstUserMessage, template),\n ),\n });\n}\n\nexport function orderBodyForOutbound(\n body: Record<string, unknown>,\n overrideOrder?: string[],\n): Record<string, unknown> {\n return orderClaudeCodeBodyForOutbound(body, overrideOrder);\n}\n\nexport function reverseMapResponse<T>(response: T, reverseLookup?: ReverseLookup): T {\n return reverseMapToolUseNames(response, reverseLookup) as T;\n}\n\nexport function createStreamingReverseMapper(response: Response, reverseLookup?: ReverseLookup): Response {\n if (!response.body) {\n return response;\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n let buffer = \"\";\n\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n buffer += decoder.decode();\n if (buffer) {\n const lines = buffer.split(\"\\n\").map((line) => remapSseLine(line, reverseLookup));\n controller.enqueue(encoder.encode(lines.join(\"\\n\")));\n buffer = \"\";\n }\n controller.close();\n return;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n if (lines.length > 0) {\n const remapped = `${lines.map((line) => remapSseLine(line, reverseLookup)).join(\"\\n\")}\\n`;\n controller.enqueue(encoder.encode(remapped));\n return;\n }\n }\n } catch (error) {\n try {\n await reader.cancel();\n } catch {\n }\n controller.error(error);\n }\n },\n async cancel(reason) {\n await reader.cancel(reason);\n },\n });\n\n return new Response(stream, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n\nexport function setUpstreamRequestTestOverridesForTest(overrides: UpstreamRequestTestOverrides | null): void {\n upstreamRequestTestOverrides = overrides ?? {};\n}\n\nexport function resetUpstreamRequestForTest(): void {\n upstreamRequestTestOverrides = {};\n sessionId = randomUUID();\n sessionLastUsed = 0;\n}\n\nexport {\n BILLING_SEED,\n MAX_TOOL_RESULT_TEXT_LENGTH,\n SESSION_IDLE_ROTATE_MS,\n sanitizeMessages,\n scrubFrameworkIdentifiers,\n TRUNCATION_SUFFIX,\n};\n","type JsonRecord = Record<string, unknown>;\n\nexport interface RuntimeModelCapability {\n maxOutputTokens?: number;\n supportsThinking?: boolean;\n}\n\nconst runtimeModelCapabilities = new Map<string, RuntimeModelCapability>();\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction normalizeModelId(modelId: string): string {\n const trimmed = modelId.trim().toLowerCase();\n const slashIndex = trimmed.indexOf(\"/\");\n return slashIndex >= 0 ? trimmed.slice(slashIndex + 1) : trimmed;\n}\n\nexport function readProviderModels(provider: Record<string, unknown>): Record<string, unknown> {\n return isRecord(provider.models) && !Array.isArray(provider.models)\n ? provider.models\n : {};\n}\n\nfunction readLimitOutput(raw: JsonRecord): number | undefined {\n const limit = isRecord(raw.limit) ? raw.limit : undefined;\n const capabilityLimit = isRecord(raw.capabilities) && isRecord(raw.capabilities.limit)\n ? raw.capabilities.limit\n : undefined;\n return readNumber(limit?.output) ?? readNumber(capabilityLimit?.output);\n}\n\nfunction readThinkingSupport(raw: JsonRecord): boolean | undefined {\n return readBoolean(raw.reasoning)\n ?? readBoolean(raw.thinking)\n ?? readBoolean(raw.supportsThinking)\n ?? (isRecord(raw.capabilities)\n ? readBoolean(raw.capabilities.reasoning)\n ?? readBoolean(raw.capabilities.thinking)\n ?? readBoolean(raw.capabilities.supportsThinking)\n : undefined);\n}\n\nexport function ingestProviderModelsCapabilities(models: unknown): void {\n runtimeModelCapabilities.clear();\n\n if (!isRecord(models)) {\n return;\n }\n\n for (const [key, value] of Object.entries(models)) {\n if (!isRecord(value)) {\n continue;\n }\n\n const resolvedId = typeof value.id === \"string\" ? value.id : key;\n const capability: RuntimeModelCapability = {\n maxOutputTokens: readLimitOutput(value),\n supportsThinking: readThinkingSupport(value),\n };\n\n runtimeModelCapabilities.set(normalizeModelId(resolvedId), capability);\n runtimeModelCapabilities.set(normalizeModelId(key), capability);\n }\n}\n\nexport function getRuntimeModelCapability(modelId: string): RuntimeModelCapability | undefined {\n return runtimeModelCapabilities.get(normalizeModelId(modelId));\n}\n\nexport function resetRuntimeModelCapabilitiesForTest(): void {\n runtimeModelCapabilities.clear();\n}\n","const MAX_TOOL_RESULT_TEXT_LENGTH = 30 * 1024;\nconst TRUNCATION_SUFFIX = \"[...truncated]\";\n\nconst ORCHESTRATION_TAG_NAMES = [\n \"system-reminder\",\n \"env\",\n \"system_information\",\n \"current_working_directory\",\n \"operating_system\",\n \"default_shell\",\n \"home_directory\",\n \"task_metadata\",\n \"directories\",\n \"thinking\",\n \"agent_persona\",\n \"agent_context\",\n \"tool_context\",\n \"persona\",\n \"tool_call\",\n] as const;\n\nconst ORCHESTRATION_PATTERNS = ORCHESTRATION_TAG_NAMES.flatMap((tag) => [\n new RegExp(`<${tag}\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/${tag}>`, \"gi\"),\n new RegExp(`<${tag}\\\\b[^>]*/>`, \"gi\"),\n]);\n\nconst FRAMEWORK_PATTERNS: RegExp[] = [\n /\\b(roo[- ]?cline|roo[- ]?code|big[- ]?agi|claude[- ]?bridge|amazon\\s+q)\\b/gi,\n /\\b(openclaw|hermes|aider|cursor|windsurf|cline|continue|copilot|cody)\\b/gi,\n /\\b(zed|plandex|tabby|opencode|daytona)\\b/gi,\n /\\b(librechat|typingmind)\\b/gi,\n /\\b(openai|gpt-4|gpt-3\\.5)\\b/gi,\n /powered by [a-z]+/gi,\n /\\bgateway\\b/gi,\n /\\bsessions_[a-z_]+\\b/gi,\n];\n\n// Message and tool-result content is user-owned code/data. Only scrub\n// distinctive multi-word framework identifiers here; bare words like\n// `continue`, `cursor`, `gateway`, `openai`, `hermes`, or `powered by ...`\n// can be legitimate payload text and must not be removed.\nconst CONTENT_FRAMEWORK_PATTERNS: RegExp[] = [\n /\\b(roo[- ]?cline|roo[- ]?code|big[- ]?agi|claude[- ]?bridge)\\b/gi,\n /\\b(librechat|typingmind)\\b/gi,\n];\n\nexport type JsonRecord = Record<string, unknown>;\n\nexport type ContentBlock = JsonRecord & {\n type?: string;\n name?: string;\n text?: string;\n content?: unknown;\n};\n\nexport type Message = JsonRecord & {\n role?: string;\n content?: string | ContentBlock[];\n};\n\nexport interface AdaptedClientRequest {\n body: JsonRecord;\n firstUserMessage: string;\n messages: Message[];\n systemTexts: string[];\n}\n\nexport function normalizeAnthropicClientRequest(inputBody: JsonRecord): AdaptedClientRequest {\n const body = structuredClone(inputBody);\n const messages = Array.isArray(body.messages) ? body.messages as Message[] : [];\n const systemTexts = normalizeSystemTexts(body.system);\n\n stripCacheControl(body);\n sanitizeMessages(body);\n stripAssistantThinkingBlocks(messages);\n\n for (const message of messages) {\n if (typeof message.content === \"string\") {\n message.content = sanitizeAndScrubContent(message.content);\n continue;\n }\n\n if (!Array.isArray(message.content)) {\n continue;\n }\n\n for (const block of message.content) {\n sanitizeMessageBlock(block);\n }\n }\n\n compactMessageContent(messages);\n removeEmptyTurns(messages);\n trimTrailingEmptyTurns(messages);\n body.messages = messages;\n stripUnsupportedSamplingFields(body);\n stripThinkingControlFields(body);\n\n return {\n body,\n firstUserMessage: extractFirstUserMessage(messages),\n messages,\n systemTexts,\n };\n}\n\nexport function sanitizeMessages(body: JsonRecord): void {\n const messages = body.messages;\n if (!Array.isArray(messages)) {\n return;\n }\n\n for (const message of messages) {\n if (!isRecord(message)) {\n continue;\n }\n\n if (typeof message.content === \"string\") {\n message.content = sanitizeContent(message.content);\n continue;\n }\n\n if (!Array.isArray(message.content)) {\n continue;\n }\n\n for (const block of message.content) {\n if (isRecord(block) && typeof block.text === \"string\") {\n block.text = sanitizeContent(block.text);\n }\n }\n\n message.content = message.content.filter((block) => {\n return !isRecord(block) || block.type !== \"text\" || block.text !== \"\";\n });\n }\n}\n\nfunction scrubWithPatterns(text: string, patterns: readonly RegExp[]): string {\n let result = text;\n\n for (const pattern of patterns) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, (match, ...args: unknown[]) => {\n const offset = args.at(-2);\n const source = args.at(-1);\n\n if (typeof offset !== \"number\" || typeof source !== \"string\") {\n return match;\n }\n\n const before = offset > 0 ? source[offset - 1] ?? \"\" : \"\";\n const after = (offset + match.length) < source.length ? source[offset + match.length] ?? \"\" : \"\";\n\n if (before === \".\" || before === \"/\" || before === \"\\\\\" || before === \"-\" || before === \"_\") {\n return match;\n }\n\n if (after === \"/\" || after === \"\\\\\") {\n return match;\n }\n\n return \"\";\n });\n }\n\n return result;\n}\n\nexport function scrubFrameworkIdentifiers(text: string): string {\n return scrubWithPatterns(text, FRAMEWORK_PATTERNS);\n}\n\nexport function scrubFrameworkIdentifiersInContent(text: string): string {\n return scrubWithPatterns(text, CONTENT_FRAMEWORK_PATTERNS);\n}\n\nexport function truncateToolResultText(text: string): string {\n if (text.length <= MAX_TOOL_RESULT_TEXT_LENGTH) {\n return text;\n }\n\n return `${text.slice(0, MAX_TOOL_RESULT_TEXT_LENGTH)}${TRUNCATION_SUFFIX}`;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction sanitizeContent(text: string): string {\n let result = text;\n\n for (const pattern of ORCHESTRATION_PATTERNS) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, \"\");\n }\n\n return result.replace(/\\n{3,}/g, \"\\n\\n\").trim();\n}\n\nfunction sanitizeAndScrubText(text: string): string {\n return scrubFrameworkIdentifiers(sanitizeContent(text))\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n}\n\nfunction sanitizeAndScrubContent(text: string): string {\n return scrubFrameworkIdentifiersInContent(sanitizeContent(text))\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n}\n\nfunction stripCacheControl(value: unknown): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n stripCacheControl(item);\n }\n return;\n }\n\n if (!isRecord(value)) {\n return;\n }\n\n delete value.cache_control;\n\n for (const nested of Object.values(value)) {\n stripCacheControl(nested);\n }\n}\n\nfunction sanitizeMessageBlock(block: ContentBlock): void {\n if (typeof block.text === \"string\") {\n block.text = sanitizeAndScrubContent(block.text);\n }\n\n if (block.type !== \"tool_result\") {\n return;\n }\n\n if (typeof block.content === \"string\") {\n block.content = truncateToolResultText(sanitizeAndScrubContent(block.content));\n return;\n }\n\n if (!Array.isArray(block.content)) {\n return;\n }\n\n block.content = block.content\n .map((item) => {\n if (isRecord(item) && typeof item.text === \"string\") {\n return {\n ...item,\n text: truncateToolResultText(sanitizeAndScrubContent(item.text)),\n };\n }\n\n return item;\n })\n .filter((item) => !isRecord(item) || typeof item.text !== \"string\" || item.text.trim().length > 0);\n}\n\nfunction stripAssistantThinkingBlocks(messages: Message[]): void {\n for (const message of messages) {\n if (message.role !== \"assistant\" || !Array.isArray(message.content)) {\n continue;\n }\n\n message.content = message.content.filter((block) => block.type !== \"thinking\");\n }\n}\n\nfunction hasMeaningfulContent(content: unknown): boolean {\n if (typeof content === \"string\") {\n return content.trim().length > 0;\n }\n\n if (!Array.isArray(content)) {\n return false;\n }\n\n return content.some((block) => {\n if (!isRecord(block)) {\n return false;\n }\n\n if (block.type === \"tool_use\" || block.type === \"tool_result\") {\n return true;\n }\n\n if (typeof block.text === \"string\" && block.text.trim().length > 0) {\n return true;\n }\n\n if (typeof block.content === \"string\" && block.content.trim().length > 0) {\n return true;\n }\n\n return false;\n });\n}\n\nfunction trimTrailingEmptyTurns(messages: Message[]): void {\n while (messages.length > 0) {\n const lastMessage = messages[messages.length - 1];\n if (!lastMessage || hasMeaningfulContent(lastMessage.content)) {\n return;\n }\n\n messages.pop();\n }\n}\n\nfunction removeEmptyTurns(messages: Message[]): void {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message && hasMeaningfulContent(message.content)) {\n continue;\n }\n\n messages.splice(index, 1);\n }\n}\n\nfunction compactMessageContent(messages: Message[]): void {\n for (const message of messages) {\n if (!Array.isArray(message.content)) {\n continue;\n }\n\n message.content = message.content.filter((block) => {\n if (!isRecord(block)) {\n return false;\n }\n\n if (block.type === \"text\") {\n return typeof block.text !== \"string\" || block.text.trim().length > 0;\n }\n\n return true;\n });\n }\n}\n\nfunction stripUnsupportedSamplingFields(body: JsonRecord): void {\n delete body.temperature;\n delete body.top_p;\n delete body.top_k;\n}\n\nfunction stripThinkingControlFields(body: JsonRecord): void {\n delete body.thinking;\n delete body.context_management;\n delete body.output_config;\n}\n\nfunction normalizeSystemTexts(system: unknown): string[] {\n if (typeof system === \"string\") {\n const next = sanitizeAndScrubText(system);\n return next ? [next] : [];\n }\n\n if (!Array.isArray(system)) {\n return [];\n }\n\n const texts: string[] = [];\n\n for (const entry of system) {\n if (typeof entry === \"string\") {\n const next = sanitizeAndScrubText(entry);\n if (next) {\n texts.push(next);\n }\n continue;\n }\n\n if (isRecord(entry) && typeof entry.text === \"string\") {\n const next = sanitizeAndScrubText(entry.text);\n if (next) {\n texts.push(next);\n }\n }\n }\n\n return texts;\n}\n\nfunction extractFirstUserMessage(messages: Message[] | undefined): string {\n if (!Array.isArray(messages)) {\n return \"\";\n }\n\n for (const message of messages) {\n if (message.role !== \"user\") {\n continue;\n }\n\n if (typeof message.content === \"string\") {\n return message.content;\n }\n\n if (!Array.isArray(message.content)) {\n return \"\";\n }\n\n const text = message.content\n .filter((block) => typeof block.text === \"string\")\n .map((block) => block.text)\n .join(\"\\n\\n\")\n .trim();\n\n return text;\n }\n\n return \"\";\n}\n\nexport {\n MAX_TOOL_RESULT_TEXT_LENGTH,\n ORCHESTRATION_TAG_NAMES,\n TRUNCATION_SUFFIX,\n};\n","export type ToolDefinition = Record<string, unknown>;\n\nexport interface OpenCodeNativeToolSelection {\n reason: \"incoming-tools\" | \"template-tools\" | \"no-tools\";\n tools: ToolDefinition[];\n}\n\nexport function selectOpenCodeNativeTools(input: {\n incomingTools: ToolDefinition[];\n templateTools: ToolDefinition[];\n}): OpenCodeNativeToolSelection {\n if (input.incomingTools.length > 0) {\n return {\n reason: \"incoming-tools\",\n tools: enrichIncomingToolsWithTemplateSchemas(input.incomingTools, input.templateTools),\n };\n }\n\n if (!hasCompleteToolSchemas(input.templateTools)) {\n return {\n reason: \"no-tools\",\n tools: [],\n };\n }\n\n return {\n reason: \"template-tools\",\n tools: input.templateTools.map((tool) => ({ ...tool })),\n };\n}\n\nfunction hasCompleteToolSchemas(tools: ToolDefinition[]): boolean {\n return tools.length > 0\n && tools.every((tool) => typeof tool === \"object\" && tool !== null && \"input_schema\" in tool);\n}\n\nfunction enrichIncomingToolsWithTemplateSchemas(\n incomingTools: ToolDefinition[],\n templateTools: ToolDefinition[],\n): ToolDefinition[] {\n if (!hasCompleteToolSchemas(templateTools) || incomingTools.length !== templateTools.length) {\n return incomingTools;\n }\n\n return incomingTools.map((tool, index) => {\n if (\"input_schema\" in tool) {\n return tool;\n }\n\n const templateTool = templateTools[index];\n return templateTool && \"input_schema\" in templateTool\n ? { ...tool, input_schema: templateTool.input_schema }\n : tool;\n });\n}\n","import { createHash } from \"node:crypto\";\n\ntype JsonRecord = Record<string, unknown>;\ntype ToolEntry = { name?: string; [key: string]: unknown };\ntype RequestPayload = {\n tools?: ToolEntry[];\n messages?: Array<Record<string, unknown>>;\n tool_choice?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport type ReverseLookup = Map<string, string>;\n\nconst TOOL_MASK_PREFIX = \"tool_\";\n\ntype ToolFlowLookup = {\n originalToOutgoing: Map<string, string>;\n outgoingToOriginal: ReverseLookup;\n};\n\ntype OutgoingNameRegistry = {\n usedOutgoing: Set<string>;\n reservedOriginals: ReadonlySet<string>;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction shouldMaskToolName(\n name: string | undefined,\n claudeToolNames: ReadonlySet<string>,\n options: { preserveToolPrefix: boolean },\n): name is string {\n if (!name) {\n return false;\n }\n\n return !claudeToolNames.has(name)\n && !name.startsWith(\"mcp__\")\n && (!options.preserveToolPrefix || !name.startsWith(TOOL_MASK_PREFIX));\n}\n\nfunction buildMaskedToolName(toolName: string, length = 8): string {\n const digest = createHash(\"sha256\")\n .update(`tool-mask:${toolName}`)\n .digest(\"hex\")\n .slice(0, length);\n\n return `${TOOL_MASK_PREFIX}${digest}`;\n}\n\nfunction isOutgoingNameAvailable(name: string, registry: OutgoingNameRegistry): boolean {\n return !registry.usedOutgoing.has(name) && !registry.reservedOriginals.has(name);\n}\n\nfunction buildAvailableMaskedToolName(toolName: string, registry: OutgoingNameRegistry): string {\n for (let length = 8; length <= 64; length += 2) {\n const masked = buildMaskedToolName(toolName, length);\n if (isOutgoingNameAvailable(masked, registry)) {\n return masked;\n }\n }\n\n const fullDigestName = buildMaskedToolName(toolName, 64);\n for (let suffix = 1; suffix <= 1_024; suffix += 1) {\n const masked = `${fullDigestName}_${suffix}`;\n if (isOutgoingNameAvailable(masked, registry)) {\n return masked;\n }\n }\n\n return `${fullDigestName}_${registry.usedOutgoing.size + registry.reservedOriginals.size}`;\n}\n\nfunction collectCurrentToolNames(parsed: RequestPayload): string[] {\n const names = new Set<string>();\n\n if (Array.isArray(parsed.tools)) {\n for (const tool of parsed.tools) {\n if (isRecord(tool) && typeof tool.name === \"string\") {\n names.add(tool.name);\n }\n }\n }\n\n return [...names];\n}\n\nfunction collectReferencedToolNames(parsed: RequestPayload): string[] {\n const names = new Set<string>();\n\n if (Array.isArray(parsed.messages)) {\n for (const message of parsed.messages) {\n if (!isRecord(message) || !Array.isArray(message.content)) {\n continue;\n }\n\n for (const block of message.content) {\n if (isRecord(block) && block.type === \"tool_use\" && typeof block.name === \"string\") {\n names.add(block.name);\n }\n }\n }\n }\n\n if (isRecord(parsed.tool_choice) && parsed.tool_choice.type === \"tool\" && typeof parsed.tool_choice.name === \"string\") {\n names.add(parsed.tool_choice.name);\n }\n\n return [...names];\n}\n\nfunction buildClaudeToolNameSet(claudeToolNames: readonly string[]): ReadonlySet<string> {\n return new Set(claudeToolNames.filter((name) => typeof name === \"string\" && name.length > 0));\n}\n\nexport function buildRequestScopedToolLookup(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): ReverseLookup {\n return buildToolFlowLookup(parsed, claudeToolNames).outgoingToOriginal;\n}\n\nfunction buildToolFlowLookup(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): ToolFlowLookup {\n const originalToOutgoing = new Map<string, string>();\n const outgoingToOriginal: ReverseLookup = new Map();\n const registry: OutgoingNameRegistry = {\n usedOutgoing: new Set<string>(),\n reservedOriginals: new Set(collectCurrentToolNames(parsed)),\n };\n const claudeToolSet = buildClaudeToolNameSet(claudeToolNames);\n\n const registerCurrent = (originalName: string) => {\n if (originalToOutgoing.has(originalName)) {\n return;\n }\n\n if (!shouldMaskToolName(originalName, claudeToolSet, { preserveToolPrefix: false })) {\n originalToOutgoing.set(originalName, originalName);\n outgoingToOriginal.set(originalName, originalName);\n registry.usedOutgoing.add(originalName);\n return;\n }\n\n const masked = buildAvailableMaskedToolName(originalName, registry);\n\n originalToOutgoing.set(originalName, masked);\n outgoingToOriginal.set(masked, originalName);\n registry.usedOutgoing.add(masked);\n };\n\n const registerReference = (originalName: string) => {\n if (originalToOutgoing.has(originalName) || outgoingToOriginal.has(originalName)) {\n return;\n }\n\n if (!shouldMaskToolName(originalName, claudeToolSet, { preserveToolPrefix: true })) {\n originalToOutgoing.set(originalName, originalName);\n outgoingToOriginal.set(originalName, originalName);\n registry.usedOutgoing.add(originalName);\n return;\n }\n\n const masked = buildAvailableMaskedToolName(originalName, registry);\n originalToOutgoing.set(originalName, masked);\n outgoingToOriginal.set(masked, originalName);\n registry.usedOutgoing.add(masked);\n };\n\n for (const originalName of collectCurrentToolNames(parsed)) {\n registerCurrent(originalName);\n }\n\n for (const originalName of collectReferencedToolNames(parsed)) {\n registerReference(originalName);\n }\n\n return { originalToOutgoing, outgoingToOriginal };\n}\n\nfunction getOutgoingName(name: string | undefined, lookup: ToolFlowLookup): string | undefined {\n if (!name) {\n return name;\n }\n\n if (lookup.outgoingToOriginal.has(name)) {\n return name;\n }\n\n return lookup.originalToOutgoing.get(name) ?? name;\n}\n\nfunction getOriginalName(name: string, reverseLookup: ReverseLookup): string {\n return reverseLookup.get(name) ?? name;\n}\n\nfunction rewriteToolUseNames(value: unknown, lookup: ToolFlowLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => rewriteToolUseNames(item, lookup));\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const cloned: JsonRecord = {};\n for (const [key, nested] of Object.entries(value)) {\n cloned[key] = rewriteToolUseNames(nested, lookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getOutgoingName(cloned.name, lookup);\n }\n\n return cloned;\n}\n\nfunction reverseToolUseNames(value: unknown, reverseLookup: ReverseLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => reverseToolUseNames(item, reverseLookup));\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const cloned: JsonRecord = {};\n for (const [key, nested] of Object.entries(value)) {\n cloned[key] = reverseToolUseNames(nested, reverseLookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getOriginalName(cloned.name, reverseLookup);\n }\n\n return cloned;\n}\n\nexport function applyOutboundToolFlow(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): { body: string; reverseLookup: ReverseLookup } {\n const lookup = buildToolFlowLookup(parsed, claudeToolNames);\n const next: RequestPayload = { ...parsed };\n\n if (Array.isArray(parsed.tools)) {\n next.tools = parsed.tools.map((tool) => ({\n ...tool,\n name: getOutgoingName(tool.name, lookup),\n }));\n }\n\n if (Array.isArray(parsed.messages)) {\n next.messages = parsed.messages.map((message) => {\n if (!isRecord(message) || !Array.isArray(message.content)) {\n return message;\n }\n\n return {\n ...message,\n content: rewriteToolUseNames(message.content, lookup),\n };\n });\n }\n\n if (isRecord(parsed.tool_choice) && parsed.tool_choice.type === \"tool\") {\n next.tool_choice = {\n ...parsed.tool_choice,\n name: getOutgoingName(parsed.tool_choice.name as string | undefined, lookup),\n };\n }\n\n return {\n body: JSON.stringify(next),\n reverseLookup: lookup.outgoingToOriginal,\n };\n}\n\nexport function reverseToolFlowPayload<T>(value: T, reverseLookup?: ReverseLookup): T {\n if (!reverseLookup || reverseLookup.size === 0) {\n return value;\n }\n\n return reverseToolUseNames(value, reverseLookup) as T;\n}\n","import {\n createClaudeCodePerRequestHeaders,\n createClaudeCodeStaticHeaders,\n orderClaudeCodeHeadersForOutbound,\n} from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { claudeCodeIntegration } from \"../claude-code\";\n\nconst STAINLESS_PACKAGE_VERSION = \"0.81.0\";\n\nconst BILLABLE_BETA_PREFIXES = [\"extended-cache-ttl-\"];\n\nexport function getStaticHeaders(): Record<string, string> {\n const profile = claudeCodeIntegration.loadRequestProfile();\n return createClaudeCodeStaticHeaders({\n headerValues: profile.template.header_values,\n packageVersion: STAINLESS_PACKAGE_VERSION,\n userAgent: profile.userAgent,\n xApp: profile.xApp,\n });\n}\n\nexport function getPerRequestHeaders(sessionId: string): Record<string, string> {\n return createClaudeCodePerRequestHeaders({\n anthropicVersion: getAnthropicVersion(),\n sessionId,\n });\n}\n\nexport function getAnthropicVersion(): string {\n return claudeCodeIntegration.loadRequestProfile().anthropicVersion;\n}\n\nexport function getBetaHeader(): string {\n return claudeCodeIntegration.loadRequestProfile().betaHeader;\n}\n\nexport function orderHeadersForOutbound(\n headers: Record<string, string>,\n overrideHeaderOrder?: string[],\n): Record<string, string> | Array<[string, string]> {\n const { template } = claudeCodeIntegration.loadRequestProfile();\n return orderClaudeCodeHeadersForOutbound(headers, overrideHeaderOrder ?? template.header_order);\n}\n\nexport function filterBillableBetas(betas: string): string {\n return betas\n .split(\",\")\n .map((beta) => beta.trim())\n .filter(\n (beta) =>\n beta.length > 0\n && !BILLABLE_BETA_PREFIXES.some((prefix) => beta.startsWith(prefix)),\n )\n .join(\",\");\n}\n","import { promises as fs } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getConfigDir } from \"../shared/utils\";\n\nconst OBSERVED_TOOL_FILE = \"anthropic-observed-tools.json\";\nconst FILE_MODE = 0o600;\n\ntype ObservedToolEntry = {\n count: number;\n firstSeenAt: string;\n lastSeenAt: string;\n};\n\nexport type ObservedToolInventory = {\n observedTools: Record<string, ObservedToolEntry>;\n};\n\nfunction getObservedToolPath(): string {\n return join(getConfigDir(), OBSERVED_TOOL_FILE);\n}\n\nasync function loadObservedToolInventory(): Promise<ObservedToolInventory> {\n try {\n const content = await fs.readFile(getObservedToolPath(), \"utf8\");\n const parsed = JSON.parse(content) as ObservedToolInventory;\n return typeof parsed === \"object\" && parsed && typeof parsed.observedTools === \"object\"\n ? parsed\n : { observedTools: {} };\n } catch {\n return { observedTools: {} };\n }\n}\n\nasync function saveObservedToolInventory(inventory: ObservedToolInventory): Promise<void> {\n const targetPath = getObservedToolPath();\n await fs.mkdir(dirname(targetPath), { recursive: true });\n await fs.writeFile(targetPath, `${JSON.stringify(inventory, null, 2)}\\n`, { mode: FILE_MODE });\n await fs.chmod(targetPath, FILE_MODE).catch(() => {});\n}\n\nexport async function readObservedToolInventory(): Promise<ObservedToolInventory> {\n return loadObservedToolInventory();\n}\n\nexport async function recordObservedToolNames(toolNames: string[]): Promise<void> {\n if (toolNames.length === 0) {\n return;\n }\n\n const inventory = await loadObservedToolInventory();\n const now = new Date().toISOString();\n\n for (const toolName of toolNames) {\n const entry = inventory.observedTools[toolName];\n if (!entry) {\n inventory.observedTools[toolName] = {\n count: 1,\n firstSeenAt: now,\n lastSeenAt: now,\n };\n continue;\n }\n\n entry.count += 1;\n entry.lastSeenAt = now;\n }\n\n await saveObservedToolInventory(inventory);\n}\n","export function sanitizeError(err: unknown): string {\n const msg = err instanceof Error ? err.message : String(err);\n\n return msg\n .replace(/sk-ant-[a-zA-Z0-9_-]+/g, \"[REDACTED]\")\n .replace(/eyJ[a-zA-Z0-9_-]+\\.eyJ[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+/g, \"[REDACTED_JWT]\")\n .replace(/Bearer\\s+[^\\s,;]+/gi, \"Bearer [REDACTED]\");\n}\n\nexport function enrich429(body: string, headers: Headers): string {\n try {\n const parsed = JSON.parse(body) as {\n error?: {\n message?: string;\n };\n };\n const error = parsed.error;\n\n if (error && (error.message === \"Error\" || !error.message)) {\n const claim = headers.get(\"anthropic-ratelimit-unified-representative-claim\") || \"unknown\";\n const status = headers.get(\"anthropic-ratelimit-unified-status\") || \"rejected\";\n const util5h = headers.get(\"anthropic-ratelimit-unified-5h-utilization\");\n const util7d = headers.get(\"anthropic-ratelimit-unified-7d-utilization\");\n const reset = headers.get(\"anthropic-ratelimit-unified-reset\");\n const parts = [`Rate limited (${status}). Limiting window: ${claim}`];\n\n if (util5h) {\n const parsedUtil5h = Number.parseFloat(util5h);\n if (Number.isFinite(parsedUtil5h)) {\n parts.push(`5h utilization: ${Math.round(parsedUtil5h * 100)}%`);\n }\n }\n\n if (util7d) {\n const parsedUtil7d = Number.parseFloat(util7d);\n if (Number.isFinite(parsedUtil7d)) {\n parts.push(`7d utilization: ${Math.round(parsedUtil7d * 100)}%`);\n }\n }\n\n if (reset) {\n const parsedReset = Number.parseInt(reset, 10);\n if (Number.isFinite(parsedReset)) {\n const resetDate = new Date(parsedReset * 1000);\n const minutesUntilReset = Math.max(0, Math.round((resetDate.getTime() - Date.now()) / 60000));\n parts.push(`resets in ${minutesUntilReset}m`);\n }\n }\n\n error.message = parts.join(\". \");\n }\n\n return JSON.stringify(parsed);\n } catch {\n return body;\n }\n}\n","export interface PacingConfig {\n minGapMs: number;\n jitterMs: number;\n}\n\nfunction pickNonNegativeInt(...values: (number | string | undefined)[]): number | undefined {\n for (const v of values) {\n if (v === undefined) continue;\n const n = typeof v === \"number\" ? v : Number.parseInt(v, 10);\n if (Number.isFinite(n) && n >= 0) return n;\n }\n return undefined;\n}\n\nexport function computePacingDelay(\n now: number,\n lastRequestTime: number,\n cfg: PacingConfig,\n rng: () => number = Math.random,\n): number {\n if (lastRequestTime <= 0) return 0;\n const minGap = Math.max(0, cfg.minGapMs);\n const jitter = Math.max(0, cfg.jitterMs);\n const jitterAdd = jitter > 0 ? Math.floor(rng() * jitter) : 0;\n const effectiveGap = minGap + jitterAdd;\n const elapsed = now - lastRequestTime;\n if (elapsed >= effectiveGap) return 0;\n return effectiveGap - elapsed;\n}\n\nexport function resolvePacingConfig(\n explicit: { minGapMs?: number; jitterMs?: number } = {},\n env: NodeJS.ProcessEnv = process.env,\n): PacingConfig {\n const minGap = pickNonNegativeInt(explicit.minGapMs, env.ANTHROPIC_PACE_MIN_MS, env.MIN_REQUEST_INTERVAL_MS) ?? 500;\n const jitter = pickNonNegativeInt(explicit.jitterMs, env.ANTHROPIC_PACE_JITTER_MS) ?? 0;\n return { minGapMs: minGap, jitterMs: jitter };\n}\n","import {\n __openCodeNativeBootstrapAuthTestUtils,\n syncOpenCodeNativeBootstrapAuth,\n} from \"opencode-multi-account-core\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport type { AccountStore } from \"../accounts/store\";\nimport type { PluginClient } from \"../shared/types\";\n\nexport function syncBootstrapAuth(\n client: PluginClient,\n store: AccountStore,\n): Promise<boolean> {\n return syncOpenCodeNativeBootstrapAuth({\n client,\n store,\n providerId: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n });\n}\n\nexport const __bootstrapAuthTestUtils = __openCodeNativeBootstrapAuthTestUtils;\n","import { getUpstreamSessionId } from \"./request/upstream-request\";\nimport { claudeCodeIntegration } from \"./claude-code\";\nimport { getAnthropicVersion } from \"./request/headers\";\n\nconst DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;\nconst CLIENT_PLATFORM = \"cli\";\n\ninterface HeartbeatOptions {\n sessionId: string;\n deviceId: string;\n accessToken: string;\n intervalMs?: number;\n}\n\ninterface HeartbeatHandle {\n stop(): void;\n}\n\ninterface HeartbeatTestOverrides {\n fetch?: typeof globalThis.fetch;\n onStart?: (options: HeartbeatOptions) => void;\n}\n\nlet testOverrides: HeartbeatTestOverrides = {};\n\nfunction presenceUrl(sessionId: string): string {\n return `${claudeCodeIntegration.loadRequestProfile().baseApiUrl}/v1/code/sessions/${sessionId}/client/presence`;\n}\n\nfunction fetchFn(): typeof globalThis.fetch {\n return testOverrides.fetch ?? globalThis.fetch;\n}\n\nexport function startHeartbeat(options: HeartbeatOptions): HeartbeatHandle {\n testOverrides.onStart?.(options);\n\n const {\n sessionId,\n deviceId,\n accessToken,\n intervalMs = DEFAULT_HEARTBEAT_INTERVAL_MS,\n } = options;\n\n let activeController: AbortController | null = null;\n let stopped = false;\n\n const sendPresence = async (): Promise<void> => {\n if (stopped) return;\n\n const controller = new AbortController();\n activeController = controller;\n\n try {\n await fetchFn()(presenceUrl(sessionId), {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"anthropic-version\": getAnthropicVersion(),\n \"anthropic-client-platform\": CLIENT_PLATFORM,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n client_id: deviceId,\n connected_at: new Date().toISOString(),\n }),\n signal: controller.signal,\n });\n } catch {\n // Intentional silent catch: the presence endpoint is undocumented\n // and heartbeat failures must never propagate to callers.\n } finally {\n if (activeController === controller) {\n activeController = null;\n }\n }\n };\n\n const timer = setInterval(sendPresence, intervalMs);\n\n if (typeof timer === \"object\" && \"unref\" in timer && typeof timer.unref === \"function\") {\n timer.unref();\n }\n\n return {\n stop() {\n if (stopped) return;\n stopped = true;\n clearInterval(timer);\n activeController?.abort();\n activeController = null;\n },\n };\n}\n\nexport function getSessionId(): string {\n return getUpstreamSessionId();\n}\n\nexport { DEFAULT_HEARTBEAT_INTERVAL_MS };\n\nexport function setHeartbeatTestOverridesForTest(overrides: HeartbeatTestOverrides | null): void {\n testOverrides = overrides ?? {};\n}\n\nexport function resetHeartbeatForTest(): void {\n testOverrides = {};\n}\n"],"mappings":"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","names":["v2","v3","readRecord","platform","randomUUID","v","createHash","createHash","config","derivedDefaults","template","homedir","join","createHash","execFile","v","platform","randomUUID","now","detectOAuthConfig","createExecutorForProvider","executeWithAccountRotation","createExecutorForProvider","config","now","randomUUID","now","randomUUID","randomUUID","isRecord","randomUUID","isRecord","template","filterInjectedSystemTexts","template","isRecord","template","filterInjectedSystemTexts","lines","createHash","isRecord","isRecord","isRecord","STAINLESS_PACKAGE_VERSION","sessionId","template","dirname","join","join","dirname","toolNames","now","v","now","isRecord","excludedBetas","sessionId","template","response","sessionId","extractFirstUserText","template","sessionId"]}
1
+ {"version":3,"sources":["../../providers/claude-code/src/opencode-shared.ts","../../providers/claude-code/src/fingerprint-template.ts","../../providers/claude-code/src/cch.ts","../../providers/claude-code/src/effort-capability.ts","../../providers/claude-code/src/model-aliases.ts","../src/index.ts","../src/accounts/manager.ts","../src/shared/config.ts","../src/accounts/claims.ts","../src/shared/constants.ts","../src/oauth/anthropic-oauth.ts","../src/fixtures/defaults/cc-derived-defaults.json","../src/claude-code/oauth-config/detect.ts","../src/shared/utils.ts","../src/claude-code/derived-profile.ts","../src/claude-code/identity.ts","../src/claude-code/index.ts","../src/oauth/callback-server.ts","../src/oauth/pkce.ts","../src/oauth/token-node-request.ts","../src/usage.ts","../src/shared/types.ts","../src/oauth/token.ts","../src/runtime/executor.ts","../src/accounts/rate-limit.ts","../src/runtime/pool-chain.ts","../src/auth-ux/menu/ansi.ts","../src/auth-ux/menu/select.ts","../src/auth-ux/menu/confirm.ts","../src/auth-ux/menu/menu.ts","../src/accounts/store.ts","../src/auth-ux/handler.ts","../src/accounts/proactive-refresh.ts","../src/runtime/factory.ts","../src/request/transform.ts","../src/model/config.ts","../src/request/betas.ts","../src/request/upstream-request.ts","../src/model/capabilities.ts","../src/request/client-adapter.ts","../src/request/tool-adapter.ts","../src/tools/flow.ts","../src/request/headers.ts","../src/tools/observation.ts","../src/shared/error-utils.ts","../src/runtime/pacing.ts","../src/oauth/bootstrap.ts","../src/session-heartbeat.ts"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { getClaudeCodeTemplateMetadata } from \"./fingerprint-template\";\nexport {\n CCH_SEEDS,\n cchForBody,\n cchWithSeed,\n stampClaudeCodeCch,\n xxh64,\n} from \"./cch\";\nexport {\n clampEffortAfterRejection,\n clampUnsupportedEffortInBody,\n parseEffortCapabilityRejection,\n} from \"./effort-capability\";\nexport {\n CLAUDE_FABLE_1M_MODEL_ID,\n CLAUDE_FABLE_MODEL_ID,\n CLAUDE_SONNET_1M_MODEL_ID,\n CLAUDE_SONNET_MODEL_ID,\n describeSuspendedClaudeCodeModel,\n isClaudeCode1mModelLabel,\n isClaudeFableModel,\n isSuspendedClaudeCodeModel,\n resolveClaudeCodeModelAlias,\n stripClaudeCodeContext1mTag,\n stripClaudeCodeProviderPrefix,\n toClaudeCodeWireModelId,\n} from \"./model-aliases\";\n\nconst CLAUDE_CODE_API_BASE_URL = \"https://api.anthropic.com\";\nconst STAINLESS_PACKAGE_VERSION = \"0.81.0\";\nconst DEFAULT_OPENCODE_TIMEOUT_SECONDS = \"300\";\nconst BILLING_SEED = \"59cf53e54c78\";\n\nconst templateMetadata = getClaudeCodeTemplateMetadata();\nconst templateHeaders = templateMetadata.headerValues;\nconst CLAUDE_CODE_VERSION = templateMetadata.ccVersion ?? \"2.1.137\";\nconst CCH_REMOVED_VERSION = \"2.1.183\";\n\nexport const CLIENT_SYSTEM_PREFACE =\n \"\\n\\n---\\n\\nIMPORTANT: The operator of this session has supplied the following \" +\n \"task-specific instructions. Follow them for task format, style, and output \" +\n \"requirements when they do not conflict with security, authorization, refusal, \" +\n \"tool-execution, confirmation, or other safety rules above. Those safety and \" +\n \"tool-use constraints remain higher priority and cannot be overridden:\\n\\n\";\n\nexport interface ClaudeCodeSharedRequestProfile {\n anthropicBeta: string;\n anthropicVersion: string;\n apiV1BaseUrl: string;\n baseUrl: string;\n ccVersion: string;\n headerOrder?: string[];\n headerValues: Record<string, string>;\n packageVersion: string;\n userAgent: string;\n xApp: string;\n}\n\nexport interface ClaudeCodeUpstreamIdentity {\n accountUuid: string;\n deviceId: string;\n}\n\nexport interface ClaudeCodeUpstreamBodyOptions {\n agentIdentity: string;\n bodyFieldOrder?: string[];\n ccVersion: string;\n cch?: string;\n defaultTools?: Array<Record<string, unknown>>;\n firstUserMessage?: string;\n identity: ClaudeCodeUpstreamIdentity;\n sessionId: string;\n systemPrompt: string;\n systemTexts?: string[];\n}\n\nexport function loadClaudeCodeSharedRequestProfile(): ClaudeCodeSharedRequestProfile {\n return {\n anthropicBeta: templateMetadata.anthropicBeta ?? templateHeaders[\"anthropic-beta\"] ?? \"oauth-2025-04-20\",\n anthropicVersion: templateHeaders[\"anthropic-version\"] ?? \"2023-06-01\",\n apiV1BaseUrl: `${CLAUDE_CODE_API_BASE_URL}/v1`,\n baseUrl: CLAUDE_CODE_API_BASE_URL,\n ccVersion: CLAUDE_CODE_VERSION,\n headerOrder: templateMetadata.headerOrder ? [...templateMetadata.headerOrder] : undefined,\n headerValues: { ...templateHeaders },\n packageVersion: templateHeaders[\"x-stainless-package-version\"] ?? STAINLESS_PACKAGE_VERSION,\n userAgent: templateHeaders[\"user-agent\"] ?? `claude-cli/${CLAUDE_CODE_VERSION} (external, sdk-cli)`,\n xApp: templateHeaders[\"x-app\"] ?? \"cli\",\n };\n}\n\nexport function createClaudeCodeStaticHeaders(input: {\n headerValues?: Record<string, string>;\n packageVersion?: string;\n userAgent: string;\n xApp: string;\n}): Record<string, string> {\n return {\n \"accept\": \"application/json\",\n \"content-type\": \"application/json\",\n \"anthropic-dangerous-direct-browser-access\": \"true\",\n \"user-agent\": input.userAgent,\n \"x-app\": input.xApp,\n \"x-stainless-arch\": process.arch,\n \"x-stainless-lang\": \"js\",\n \"x-stainless-os\": getOsName(),\n \"x-stainless-package-version\": input.packageVersion ?? STAINLESS_PACKAGE_VERSION,\n \"x-stainless-retry-count\": \"0\",\n \"x-stainless-runtime\": \"node\",\n \"x-stainless-runtime-version\": process.version,\n ...(input.headerValues ?? {}),\n };\n}\n\nexport function createClaudeCodePerRequestHeaders(input: {\n anthropicVersion: string;\n sessionId: string;\n timeoutSeconds?: string;\n}): Record<string, string> {\n return {\n \"x-claude-code-session-id\": input.sessionId,\n \"x-client-request-id\": randomUUID(),\n \"anthropic-version\": input.anthropicVersion,\n \"x-stainless-timeout\": input.timeoutSeconds ?? DEFAULT_OPENCODE_TIMEOUT_SECONDS,\n };\n}\n\nexport function orderClaudeCodeHeadersForOutbound(\n headers: Record<string, string>,\n headerOrder?: string[],\n): Record<string, string> | Array<[string, string]> {\n if (!Array.isArray(headerOrder) || headerOrder.length === 0) return headers;\n\n const lowerToValue = new Map<string, string>();\n for (const [key, value] of Object.entries(headers)) {\n lowerToValue.set(key.toLowerCase(), value);\n }\n\n const ordered: Array<[string, string]> = [];\n const seen = new Set<string>();\n for (const name of headerOrder) {\n const key = name.toLowerCase();\n const value = lowerToValue.get(key);\n if (value === undefined || seen.has(key)) continue;\n ordered.push([name, value]);\n seen.add(key);\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (seen.has(key.toLowerCase())) continue;\n ordered.push([key, value]);\n }\n\n return ordered;\n}\n\nexport function computeClaudeCodeBuildTag(userMessage: string, version: string): string {\n const chars = [4, 7, 20].map((index) => userMessage[index] ?? \"0\").join(\"\");\n return createHash(\"sha256\")\n .update(`${BILLING_SEED}${chars}${version}`)\n .digest(\"hex\")\n .slice(0, 3);\n}\n\nexport function composeClaudeCodeBillingSystemEntry(\n firstUserMessage: string,\n version: string,\n cch = \"00000\",\n): string {\n const buildTag = computeClaudeCodeBuildTag(firstUserMessage, version);\n const base = `x-anthropic-billing-header: cc_version=${version}.${buildTag}; cc_entrypoint=sdk-cli;`;\n return claudeCodeBillingUsesCch(version) ? `${base} cch=${cch};` : base;\n}\n\nfunction claudeCodeBillingUsesCch(version: string): boolean {\n const comparison = compareSemver(version, CCH_REMOVED_VERSION);\n return comparison === null || comparison < 0;\n}\n\nfunction compareSemver(left: string, right: string): number | null {\n const leftParts = parseSemver(left);\n const rightParts = parseSemver(right);\n if (!leftParts || !rightParts) return null;\n for (let index = 0; index < leftParts.length; index += 1) {\n const diff = leftParts[index]! - rightParts[index]!;\n if (diff !== 0) return diff;\n }\n return 0;\n}\n\nfunction parseSemver(version: string): [number, number, number] | null {\n const match = /^(\\d+)\\.(\\d+)\\.(\\d+)/.exec(version);\n if (!match) return null;\n return [Number(match[1]), Number(match[2]), Number(match[3])];\n}\n\n// Claude Code caches the two system blocks above, plus the tools prefix and\n// one rolling conversation breakpoint. Client-supplied cache_control is stripped\n// before this shared helper runs; these markers are Kyoli-owned outbound hints.\nexport function applyClaudeCodePromptCaching(\n body: Record<string, unknown>,\n cacheControl: { type: \"ephemeral\" } = { type: \"ephemeral\" },\n): void {\n const tools = body.tools as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(tools) && tools.length > 0) {\n const clonedTools = tools.map((tool) => {\n const cloned = { ...tool };\n delete cloned.cache_control;\n return cloned;\n });\n clonedTools[clonedTools.length - 1] = {\n ...clonedTools[clonedTools.length - 1],\n cache_control: cacheControl,\n };\n body.tools = clonedTools;\n }\n\n const messages = body.messages as Array<Record<string, unknown>> | undefined;\n if (!Array.isArray(messages) || messages.length === 0) {\n return;\n }\n\n const lastMessage = messages[messages.length - 1];\n const content = lastMessage?.content;\n if (!Array.isArray(content) || content.length === 0) {\n return;\n }\n\n content[content.length - 1] = {\n ...content[content.length - 1],\n cache_control: cacheControl,\n };\n}\n\nexport function applyClaudeCodeUpstreamBodyFields(\n body: Record<string, unknown>,\n input: ClaudeCodeUpstreamBodyOptions,\n): Record<string, unknown> {\n const firstUserMessage = input.firstUserMessage ?? extractFirstUserText(body.messages);\n const billingHeader = composeClaudeCodeBillingSystemEntry(\n firstUserMessage,\n input.ccVersion,\n input.cch,\n );\n const systemTexts = input.systemTexts ?? normalizeClaudeCodeSystemTexts(body.system);\n const injectedSystemTexts = filterInjectedSystemTexts(systemTexts, {\n agentIdentity: input.agentIdentity,\n billingHeader,\n systemPrompt: input.systemPrompt,\n });\n const mergedSystemPrompt = injectedSystemTexts.length > 0\n ? `${input.systemPrompt}${CLIENT_SYSTEM_PREFACE}${injectedSystemTexts.join(\"\\n\\n\")}`\n : input.systemPrompt;\n\n body.system = [\n { type: \"text\", text: billingHeader },\n {\n type: \"text\",\n text: input.agentIdentity,\n cache_control: { type: \"ephemeral\" },\n },\n {\n type: \"text\",\n text: mergedSystemPrompt,\n cache_control: { type: \"ephemeral\" },\n },\n ];\n body.metadata = {\n ...readRecord(body.metadata),\n user_id: JSON.stringify({\n device_id: input.identity.deviceId,\n account_uuid: input.identity.accountUuid,\n session_id: input.sessionId,\n }),\n };\n\n if (\n input.defaultTools &&\n (!Array.isArray(body.tools) || body.tools.length === 0)\n ) {\n body.tools = input.defaultTools.map((tool) => ({ ...tool }));\n }\n\n applyClaudeCodePromptCaching(body);\n\n return orderClaudeCodeBodyForOutbound(body, input.bodyFieldOrder);\n}\n\nexport function orderClaudeCodeBodyForOutbound(\n body: Record<string, unknown>,\n fieldOrder?: string[],\n): Record<string, unknown> {\n if (!Array.isArray(fieldOrder) || fieldOrder.length === 0) return body;\n\n const ordered: Record<string, unknown> = {};\n const seen = new Set<string>();\n for (const field of fieldOrder) {\n if (seen.has(field)) continue;\n if (Object.prototype.hasOwnProperty.call(body, field)) {\n ordered[field] = body[field];\n seen.add(field);\n }\n }\n\n for (const [field, value] of Object.entries(body)) {\n if (seen.has(field)) continue;\n ordered[field] = value;\n }\n\n return ordered;\n}\n\nexport function normalizeClaudeCodeSystemTexts(system: unknown): string[] {\n if (typeof system === \"string\" && system.length > 0) return [system];\n if (!Array.isArray(system)) return [];\n\n const texts: string[] = [];\n for (const entry of system) {\n if (typeof entry === \"string\" && entry.length > 0) {\n texts.push(entry);\n continue;\n }\n const record = readRecord(entry);\n const text = typeof record?.text === \"string\" && record.text.length > 0\n ? record.text\n : undefined;\n if (text) texts.push(text);\n }\n return texts;\n}\n\nfunction filterInjectedSystemTexts(\n systemTexts: string[],\n input: {\n agentIdentity: string;\n billingHeader: string;\n systemPrompt: string;\n },\n): string[] {\n return systemTexts.filter((entry) => (\n entry !== input.billingHeader &&\n entry !== input.agentIdentity &&\n entry !== input.systemPrompt &&\n !entry.startsWith(\"x-anthropic-billing-header:\")\n ));\n}\n\nfunction extractFirstUserText(messages: unknown): string {\n if (!Array.isArray(messages)) return \"\";\n\n for (const message of messages) {\n const record = readRecord(message);\n if (record?.role !== \"user\") continue;\n\n if (typeof record.content === \"string\") return record.content;\n if (!Array.isArray(record.content)) return \"\";\n\n return record.content\n .map((block) => {\n const text = readRecord(block)?.text;\n return typeof text === \"string\" && text.length > 0 ? text : undefined;\n })\n .filter((text): text is string => Boolean(text))\n .join(\"\\n\\n\");\n }\n\n return \"\";\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\nfunction getOsName(): string {\n const platform = process.platform;\n if (platform === \"win32\") return \"Windows\";\n if (platform === \"darwin\") return \"MacOS\";\n return \"Linux\";\n}\n","import fingerprintData from \"./fingerprint-data\";\n\ntype TemplateTool = {\n name: string;\n [key: string]: unknown;\n};\n\ninterface FingerprintTemplate {\n agent_identity?: string;\n anthropic_beta?: string;\n body_field_order?: string[];\n cc_version?: string;\n header_order?: string[];\n header_values?: Record<string, string>;\n system_prompt?: string;\n system_prompt_fable?: string;\n tool_names?: string[];\n tools: TemplateTool[];\n}\n\nconst template = fingerprintData as FingerprintTemplate;\nconst toolNames = new Set(template.tools.map((tool) => tool.name));\n\nexport function getClaudeCodeTemplateTools(): TemplateTool[] {\n return template.tools.map((tool) => ({ ...tool }));\n}\n\nexport function isClaudeCodeTemplateToolName(name: string): boolean {\n return toolNames.has(name);\n}\n\nexport function getClaudeCodeTemplateMetadata(): {\n agentIdentity?: string;\n anthropicBeta?: string;\n bodyFieldOrder?: string[];\n ccVersion?: string;\n headerValues: Record<string, string>;\n headerOrder?: string[];\n systemPrompt?: string;\n systemPromptFable?: string;\n toolNames: string[];\n} {\n return {\n agentIdentity: template.agent_identity,\n anthropicBeta: template.anthropic_beta,\n bodyFieldOrder: template.body_field_order ? [...template.body_field_order] : undefined,\n ccVersion: template.cc_version,\n headerValues: { ...template.header_values },\n headerOrder: template.header_order ? [...template.header_order] : undefined,\n systemPrompt: template.system_prompt,\n systemPromptFable: template.system_prompt_fable,\n toolNames: template.tool_names ? [...template.tool_names] : template.tools.map((tool) => tool.name),\n };\n}\n","/** Claude Code request-integrity hash (`cch`) helpers.\n *\n * Claude Code writes a 5-hex `cch` token into the billing system block. For\n * versions whose seed has been verified, Kyoli stamps the deterministic value\n * over the placeholder after the final outbound body has been assembled. For\n * unknown or rotated seeds we deliberately leave the existing placeholder in\n * place rather than emitting a confident-but-wrong deterministic hash.\n */\n\nexport const CCH_SEEDS: Record<string, bigint> = {\n \"2.1.177\": 0x4d659218e32a3268n,\n // 2.1.178 was checked during the issue #91 review; the 2.1.177 seed did\n // not reproduce the captured cch, so leave it unstamped until a new seed is\n // independently extracted and verified.\n};\n\nconst MASK = 0xfffffn;\nconst U64 = (1n << 64n) - 1n;\nconst P1 = 0x9e3779b185ebca87n;\nconst P2 = 0xc2b2ae3d27d4eb4fn;\nconst P3 = 0x165667b19e3779f9n;\nconst P4 = 0x85ebca77c2b2ae63n;\nconst P5 = 0x27d4eb2f165667c5n;\nconst BILLING_HEADER_PREFIX = \"x-anthropic-billing-header:\";\nconst CCH_RE = /(cc_entrypoint=[a-z0-9-]{1,32}; cch=)[0-9a-fA-F]{5}(?=;)/;\nconst CC_VERSION_RE = /\\bcc_version=([0-9]+(?:\\.[0-9]+){2})(?:\\.[0-9a-f]+)?;/;\n\nfunction rotl(value: bigint, bits: bigint): bigint {\n return ((value << bits) | (value >> (64n - bits))) & U64;\n}\n\nfunction round(accumulator: bigint, input: bigint): bigint {\n let next = (accumulator + input * P2) & U64;\n next = rotl(next, 31n);\n return (next * P1) & U64;\n}\n\nfunction mergeRound(accumulator: bigint, value: bigint): bigint {\n const rounded = round(0n, value);\n const next = (accumulator ^ rounded) & U64;\n return (next * P1 + P4) & U64;\n}\n\nexport function xxh64(data: Uint8Array, seed: bigint): bigint {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const length = data.length;\n let offset = 0;\n let hash: bigint;\n\n if (length >= 32) {\n let v1 = (seed + P1 + P2) & U64;\n let v2 = (seed + P2) & U64;\n let v3 = seed & U64;\n let v4 = (seed - P1) & U64;\n const limit = length - 32;\n\n while (offset <= limit) {\n v1 = round(v1, view.getBigUint64(offset, true));\n offset += 8;\n v2 = round(v2, view.getBigUint64(offset, true));\n offset += 8;\n v3 = round(v3, view.getBigUint64(offset, true));\n offset += 8;\n v4 = round(v4, view.getBigUint64(offset, true));\n offset += 8;\n }\n\n hash = (rotl(v1, 1n) + rotl(v2, 7n) + rotl(v3, 12n) + rotl(v4, 18n)) & U64;\n hash = mergeRound(hash, v1);\n hash = mergeRound(hash, v2);\n hash = mergeRound(hash, v3);\n hash = mergeRound(hash, v4);\n } else {\n hash = (seed + P5) & U64;\n }\n\n hash = (hash + BigInt(length)) & U64;\n\n while (offset + 8 <= length) {\n const k1 = round(0n, view.getBigUint64(offset, true));\n hash = (hash ^ k1) & U64;\n hash = (rotl(hash, 27n) * P1 + P4) & U64;\n offset += 8;\n }\n\n if (offset + 4 <= length) {\n hash = (hash ^ ((BigInt(view.getUint32(offset, true)) * P1) & U64)) & U64;\n hash = (rotl(hash, 23n) * P2 + P3) & U64;\n offset += 4;\n }\n\n while (offset < length) {\n hash = (hash ^ ((BigInt(data[offset] ?? 0) * P5) & U64)) & U64;\n hash = (rotl(hash, 11n) * P1) & U64;\n offset += 1;\n }\n\n hash = (hash ^ (hash >> 33n)) & U64;\n hash = (hash * P2) & U64;\n hash = (hash ^ (hash >> 29n)) & U64;\n hash = (hash * P3) & U64;\n hash = (hash ^ (hash >> 32n)) & U64;\n return hash;\n}\n\nfunction replaceBillingCch(\n body: Record<string, unknown>,\n cch: string,\n): { replaced: boolean; version?: string } {\n const system = body.system;\n if (!Array.isArray(system)) return { replaced: false };\n\n for (const entry of system) {\n if (!entry || typeof entry !== \"object\") continue;\n const systemEntry = entry as { text?: unknown };\n if (typeof systemEntry.text !== \"string\") continue;\n if (!systemEntry.text.startsWith(BILLING_HEADER_PREFIX)) continue;\n if (!CCH_RE.test(systemEntry.text)) continue;\n\n const version = CC_VERSION_RE.exec(systemEntry.text)?.[1];\n systemEntry.text = systemEntry.text.replace(CCH_RE, (_match, prefix: string) => `${prefix}${cch}`);\n return { replaced: true, version };\n }\n\n return { replaced: false };\n}\n\nfunction cchMaterial(bodyText: string): { bytes: Uint8Array; version?: string } | null {\n const body = JSON.parse(bodyText) as Record<string, unknown>;\n const { replaced, version } = replaceBillingCch(body, \"00000\");\n if (!replaced) return null;\n body.model = \"\";\n delete body.fallbacks;\n delete body.fallback_credit_token;\n delete body.max_tokens;\n return { bytes: new TextEncoder().encode(JSON.stringify(body)), version };\n}\n\nexport function cchWithSeed(bodyText: string, seed: bigint): string | null {\n let material: { bytes: Uint8Array; version?: string } | null;\n try {\n material = cchMaterial(bodyText);\n } catch {\n return null;\n }\n if (!material) return null;\n const hash = xxh64(material.bytes, seed) & MASK;\n return hash.toString(16).padStart(5, \"0\");\n}\n\nexport function cchForBody(bodyText: string, version?: string): string | null {\n let material: { bytes: Uint8Array; version?: string } | null;\n try {\n material = cchMaterial(bodyText);\n } catch {\n return null;\n }\n if (!material) return null;\n\n const seed = CCH_SEEDS[material.version ?? version ?? \"\"];\n if (seed === undefined) return null;\n const hash = xxh64(material.bytes, seed) & MASK;\n return hash.toString(16).padStart(5, \"0\");\n}\n\nexport function stampClaudeCodeCch(bodyText: string, version?: string): string {\n const cch = cchForBody(bodyText, version);\n if (cch === null) return bodyText;\n try {\n const body = JSON.parse(bodyText) as Record<string, unknown>;\n const { replaced } = replaceBillingCch(body, cch);\n return replaced ? JSON.stringify(body) : bodyText;\n } catch {\n return bodyText;\n }\n}\n","export interface EffortCapabilityRejection {\n rejected: string;\n supported: string[];\n}\n\nexport interface EffortClampResult<TBody> {\n body: TBody;\n changed: boolean;\n modelId?: string;\n effort?: string;\n}\n\nexport const EFFORT_PREFERENCE = [\"xhigh\", \"max\", \"high\", \"medium\", \"low\"] as const;\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? value as Record<string, unknown>\n : undefined;\n}\n\nfunction normalizeEffortValue(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z_-]+$/g, \"\");\n}\n\nexport function parseEffortCapabilityRejection(body: string): EffortCapabilityRejection | null {\n const match = /does not support effort level\\s+['\"`]?([^'\"`.\\s]+)['\"`]?\\.?\\s*Supported levels:\\s*([a-z,\\s_-]+)/i.exec(body);\n if (!match?.[1] || !match[2]) {\n return null;\n }\n\n const supported = match[2]\n .split(\",\")\n .map(normalizeEffortValue)\n .filter(Boolean);\n\n return supported.length > 0\n ? { rejected: normalizeEffortValue(match[1]), supported }\n : null;\n}\n\nexport function bestSupportedEffort(supported: readonly string[]): string {\n for (const effort of EFFORT_PREFERENCE) {\n if (supported.includes(effort)) {\n return effort;\n }\n }\n\n return supported[0] ?? \"high\";\n}\n\nexport function clampUnsupportedEffortInBody<TBody extends BodyInit | null | undefined>(\n body: TBody,\n supportedEffortsByModel: ReadonlyMap<string, readonly string[]>,\n): EffortClampResult<TBody | string> {\n if (typeof body !== \"string\") {\n return { body, changed: false };\n }\n\n try {\n const parsed = JSON.parse(body) as unknown;\n const record = readRecord(parsed);\n const modelId = typeof record?.model === \"string\" ? record.model : undefined;\n const outputConfig = readRecord(record?.output_config);\n const effort = typeof outputConfig?.effort === \"string\" ? outputConfig.effort : undefined;\n if (!modelId || !outputConfig || !effort) {\n return { body, changed: false, modelId };\n }\n\n const supported = supportedEffortsByModel.get(modelId);\n if (!supported || supported.includes(effort)) {\n return { body, changed: false, modelId, effort };\n }\n\n const clamped = bestSupportedEffort(supported);\n outputConfig.effort = clamped;\n return { body: JSON.stringify(record), changed: true, modelId, effort: clamped };\n } catch {\n return { body, changed: false };\n }\n}\n\nexport function clampEffortAfterRejection<TBody extends BodyInit | null | undefined>(\n body: TBody,\n rejection: EffortCapabilityRejection,\n supportedEffortsByModel: Map<string, string[]>,\n): EffortClampResult<TBody | string> {\n if (typeof body !== \"string\") {\n return { body, changed: false };\n }\n\n try {\n const parsed = JSON.parse(body) as unknown;\n const record = readRecord(parsed);\n const modelId = typeof record?.model === \"string\" ? record.model : undefined;\n const outputConfig = readRecord(record?.output_config);\n const effort = typeof outputConfig?.effort === \"string\" ? outputConfig.effort : undefined;\n if (!modelId || !outputConfig || !effort) {\n return { body, changed: false, modelId };\n }\n\n supportedEffortsByModel.set(modelId, [...rejection.supported]);\n if (rejection.supported.includes(effort)) {\n return { body, changed: false, modelId, effort };\n }\n\n const clamped = bestSupportedEffort(rejection.supported);\n outputConfig.effort = clamped;\n return { body: JSON.stringify(record), changed: true, modelId, effort: clamped };\n } catch {\n return { body, changed: false };\n }\n}\n","const MODEL_FAMILIES = [\"fable\", \"opus\", \"sonnet\", \"haiku\"] as const;\nconst FAMILY_RANK: Record<string, number> = { fable: 0, opus: 1, sonnet: 2, haiku: 3 };\n\nexport const CLAUDE_FABLE_MODEL_ID = \"claude-fable-5\";\nexport const CLAUDE_FABLE_1M_MODEL_ID = `${CLAUDE_FABLE_MODEL_ID}[1m]`;\nexport const CLAUDE_SONNET_MODEL_ID = \"claude-sonnet-5\";\nexport const CLAUDE_SONNET_1M_MODEL_ID = `${CLAUDE_SONNET_MODEL_ID}[1m]`;\n\nexport const FALLBACK_CLAUDE_CODE_BASE_MODEL_IDS = [\n CLAUDE_FABLE_MODEL_ID,\n \"claude-opus-4-8\",\n \"claude-opus-4-7\",\n \"claude-opus-4-6\",\n CLAUDE_SONNET_MODEL_ID,\n \"claude-sonnet-4-6\",\n \"claude-haiku-4-5\",\n] as const;\n\nconst STATIC_MODEL_ALIASES: Record<string, string> = {\n opus47: \"claude-opus-4-7\",\n opus46: \"claude-opus-4-6\",\n sonnet46: \"claude-sonnet-4-6\",\n};\n\nlet cachedBaseModelIds: string[] = [...FALLBACK_CLAUDE_CODE_BASE_MODEL_IDS];\n\nexport function setCachedClaudeCodeBaseModels(baseIds: readonly string[]): void {\n cachedBaseModelIds = [...baseIds];\n}\n\nexport function getCachedClaudeCodeBaseModels(): string[] {\n return [...cachedBaseModelIds];\n}\n\nexport function resetCachedClaudeCodeBaseModelsForTest(): void {\n cachedBaseModelIds = [...FALLBACK_CLAUDE_CODE_BASE_MODEL_IDS];\n}\n\nexport function aliasesForClaudeCodeModel(id: string, baseIds: readonly string[]): string[] {\n const aliases = [id, `claude-code/${id}`];\n const stripped = stripClaudeCodeContext1mTag(id);\n const family = modelFamily(stripped);\n if (!family || resolveFamilyBase(family, baseIds) !== stripped) return aliases;\n\n if (id.endsWith(\"[1m]\")) {\n aliases.push(`${family}1m`, `claude-code/${family}1m`, `anthropic/${family}1m`);\n } else {\n aliases.push(family, `claude-code/${family}`, `anthropic/${family}`);\n }\n return [...new Set(aliases)];\n}\n\nexport function stripClaudeCodeProviderPrefix(modelId: string): string {\n const slash = modelId.indexOf(\"/\");\n if (slash === -1) return modelId;\n\n const provider = modelId.slice(0, slash).toLowerCase();\n return provider === \"anthropic\" || provider === \"claude-code\"\n ? modelId.slice(slash + 1)\n : modelId;\n}\n\nexport function resolveClaudeCodeModelAlias(modelId: string): string {\n const unprefixed = stripClaudeCodeProviderPrefix(modelId.trim());\n return resolveAliasAgainst(unprefixed, cachedBaseModelIds) ?? STATIC_MODEL_ALIASES[unprefixed.toLowerCase()] ?? unprefixed;\n}\n\nexport function stripClaudeCodeContext1mTag(modelId: string): string {\n return modelId.replace(/\\[1m\\]$/i, \"\");\n}\n\nexport function toClaudeCodeWireModelId(modelId: string): string {\n return stripClaudeCodeContext1mTag(resolveClaudeCodeModelAlias(modelId));\n}\n\nexport function isClaudeCode1mModelLabel(modelId: string): boolean {\n return /\\[1m\\]$/i.test(resolveClaudeCodeModelAlias(modelId));\n}\n\nexport function isClaudeFableModel(modelId: string): boolean {\n return resolveClaudeCodeModelAlias(modelId).toLowerCase().includes(\"fable\");\n}\n\nexport function isSuspendedClaudeCodeModel(\n modelId: string,\n env: NodeJS.ProcessEnv = process.env,\n): boolean {\n const suspendedFamilies = readSuspendedClaudeCodeFamilies(env);\n const family = modelFamily(resolveClaudeCodeModelAlias(modelId));\n return Boolean(family && suspendedFamilies.has(family));\n}\n\nexport function describeSuspendedClaudeCodeModel(modelId: string): string {\n const normalized = resolveClaudeCodeModelAlias(modelId);\n if (isClaudeFableModel(normalized)) {\n return \"Claude Fable 5 is disabled for this Claude Code provider by configuration.\";\n }\n return `${normalized} is temporarily unavailable through Claude Code.`;\n}\n\nexport function resolveFamilyBase(family: string, baseIds: readonly string[]): string | undefined {\n return baseIds\n .filter((id) => modelFamily(id) === family && !id.includes(\"[\"))\n .sort(compareClaudeCodeBaseModelIds)[0];\n}\n\nexport function longContextEligible(id: string): boolean {\n const normalized = id.toLowerCase();\n return normalized.startsWith(\"claude-\") && !normalized.includes(\"haiku\") && !normalized.endsWith(\"[1m]\");\n}\n\nexport function compareClaudeCodeBaseModelIds(a: string, b: string): number {\n const aRank = FAMILY_RANK[modelFamily(a) ?? \"\"] ?? 99;\n const bRank = FAMILY_RANK[modelFamily(b) ?? \"\"] ?? 99;\n if (aRank !== bRank) return aRank - bRank;\n return compareVersionDesc(modelVersionKey(a), modelVersionKey(b));\n}\n\nexport function modelFamily(id: string): string | undefined {\n const normalized = stripClaudeCodeContext1mTag(stripClaudeCodeProviderPrefix(id)).toLowerCase();\n for (const family of MODEL_FAMILIES) {\n if (normalized.includes(family)) return family;\n }\n return undefined;\n}\n\nfunction resolveAliasAgainst(modelId: string, baseIds: readonly string[]): string | undefined {\n const normalized = stripClaudeCodeProviderPrefix(modelId).trim().toLowerCase();\n if (isModelFamily(normalized)) return resolveFamilyBase(normalized, baseIds) ?? undefined;\n\n const match = /^([a-z]+)1m$/.exec(normalized);\n if (match?.[1] && isModelFamily(match[1])) {\n const base = resolveFamilyBase(match[1], baseIds);\n return base && longContextEligible(base) ? `${base}[1m]` : undefined;\n }\n return undefined;\n}\n\nfunction isModelFamily(value: string): value is typeof MODEL_FAMILIES[number] {\n return (MODEL_FAMILIES as readonly string[]).includes(value);\n}\n\nfunction modelVersionKey(id: string): number[] {\n return id.match(/\\d+/g)?.map(Number) ?? [];\n}\n\nfunction compareVersionDesc(a: readonly number[], b: readonly number[]): number {\n const length = Math.max(a.length, b.length);\n for (let index = 0; index < length; index += 1) {\n const diff = (b[index] ?? -1) - (a[index] ?? -1);\n if (diff !== 0) return diff;\n }\n return 0;\n}\n\nfunction readSuspendedClaudeCodeFamilies(env: NodeJS.ProcessEnv): Set<string> {\n const raw = env.KYOLI_SUSPENDED_CLAUDE_CODE_FAMILIES\n ?? env.KYOLI_SUSPENDED_CLAUDE_MODELS\n ?? \"\";\n return new Set(\n raw\n .split(\",\")\n .map((entry) => entry.trim().toLowerCase())\n .filter(Boolean)\n .map((entry) => modelFamily(entry) ?? entry),\n );\n}\n","import type { Plugin } from \"@opencode-ai/plugin\";\nimport { composeClaudeCodeBillingSystemEntry } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport {\n CascadeStateManager,\n createOpenCodeNativeAuthMethods,\n createOpenCodeNativeAuthLoader,\n createOpenCodeNativePluginLifecycle,\n zeroCostProviderModels,\n loadPoolChainConfig,\n migrateFromAuthJson,\n PoolManager,\n type PoolChainConfig,\n} from \"opencode-multi-account-core\";\nimport { AccountManager } from \"./accounts/manager\";\nimport { executeWithAccountRotation } from \"./runtime/executor\";\nimport { handleAuthorize } from \"./auth-ux/handler\";\nimport { loadConfig } from \"./shared/config\";\nimport { ProactiveRefreshQueue } from \"./accounts/proactive-refresh\";\nimport { AccountStore } from \"./accounts/store\";\nimport { AccountRuntimeFactory } from \"./runtime/factory\";\nimport { debugLog, getAccountLabel } from \"./shared/utils\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./shared/constants\";\nimport { claudeCodeIntegration } from \"./claude-code\";\nimport {\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./request/headers\";\nimport {\n getClientOutputEffort,\n getUpstreamSessionId,\n OPENCODE_OUTPUT_EFFORT_HEADER,\n readOpenCodeVariantEffort,\n type OutputEffortValue,\n} from \"./request/upstream-request\";\nimport { syncBootstrapAuth } from \"./oauth/bootstrap\";\nimport { sanitizeError } from \"./shared/error-utils\";\nimport { getSessionId, startHeartbeat } from \"./session-heartbeat\";\nimport type { ManagedAccount, PluginClient } from \"./shared/types\";\nimport { ingestProviderModelsCapabilities, readProviderModels } from \"./model/capabilities\";\n\nif (process.env.CLAUDE_MULTI_ACCOUNT_TRACE_PLUGIN === \"1\") {\n console.error(\"[anthropic-multi-account] module loaded\");\n}\n\nfunction extractFirstUserText(input: Record<string, unknown>): string {\n try {\n const raw = input as { messages?: unknown; request?: { messages?: unknown } };\n const messages = (raw.messages ?? raw.request?.messages) as\n Array<{ role?: string; content?: string | Array<{ type?: string; text?: string }> }> | undefined;\n if (!Array.isArray(messages)) return \"\";\n for (const msg of messages) {\n if (msg.role !== \"user\") continue;\n if (typeof msg.content === \"string\") return msg.content;\n if (Array.isArray(msg.content)) {\n for (const block of msg.content) {\n if (block.type === \"text\" && block.text) return block.text;\n }\n }\n }\n } catch {}\n return \"\";\n}\n\nfunction composeBillingSystemEntry(firstUserMessage: string, version: string): string {\n return composeClaudeCodeBillingSystemEntry(firstUserMessage, version);\n}\n\nfunction prependMissingSystemEntries(output: { system?: string[] }, entries: string[]): void {\n output.system ??= [];\n\n for (const entry of entries.toReversed()) {\n if (entry && !output.system.includes(entry)) {\n output.system.unshift(entry);\n }\n }\n}\n\nfunction applyOrderedHeaders(\n output: { headers: Record<string, string> },\n headers: Record<string, string>,\n): void {\n const orderedHeaders = orderHeadersForOutbound(headers);\n output.headers = Array.isArray(orderedHeaders)\n ? Object.fromEntries(orderedHeaders)\n : orderedHeaders;\n}\n\nfunction getMessageVariant(input: { message?: { model?: Record<string, unknown> } }): unknown {\n return input.message?.model?.variant;\n}\n\nfunction isAnthropicChatHook(input: {\n provider?: { info?: { id?: string } };\n model?: { providerID?: string };\n}): boolean {\n return input.provider?.info?.id === ANTHROPIC_OAUTH_ADAPTER.authProviderId\n || input.model?.providerID === ANTHROPIC_OAUTH_ADAPTER.authProviderId;\n}\n\nexport const ClaudeMultiAuthPlugin: Plugin = async (ctx) => {\n if (process.env.CLAUDE_MULTI_ACCOUNT_TRACE_PLUGIN === \"1\") {\n console.error(\"[anthropic-multi-account] plugin function called\");\n }\n\n const { client } = ctx as unknown as { client: PluginClient } & Record<string, unknown>;\n\n await loadConfig();\n\n const requestProfile = claudeCodeIntegration.loadRequestProfile();\n const template = requestProfile.template;\n const claudeIdentity = claudeCodeIntegration.loadIdentity();\n const claudeCodeVersion = template.cc_version ?? requestProfile.cliVersion;\n const upstreamAgentIdentity = template.agent_identity;\n const upstreamSystemPrompt = template.system_prompt;\n\n let heartbeatHandle: { stop(): void } | null = null;\n let heartbeatToken: string | null = null;\n let heartbeatSessionId: string | null = null;\n const outputEffortBySession = new Map<string, OutputEffortValue>();\n\n const stopHeartbeat = (): void => {\n heartbeatHandle?.stop();\n heartbeatHandle = null;\n heartbeatToken = null;\n heartbeatSessionId = null;\n };\n\n const getHeartbeatDeviceId = (account: Pick<ManagedAccount, \"deviceId\"> | null | undefined): string =>\n account?.deviceId || claudeIdentity.deviceId;\n\n const ensureHeartbeat = (\n accessToken: string | undefined,\n account?: Pick<ManagedAccount, \"deviceId\"> | null,\n ): void => {\n const deviceId = getHeartbeatDeviceId(account);\n if (!accessToken || !deviceId) {\n stopHeartbeat();\n return;\n }\n\n const sessionId = getSessionId();\n\n if (heartbeatHandle && heartbeatToken === accessToken && heartbeatSessionId === sessionId) {\n return;\n }\n\n stopHeartbeat();\n heartbeatToken = accessToken;\n heartbeatSessionId = sessionId;\n heartbeatHandle = startHeartbeat({\n sessionId,\n deviceId,\n accessToken,\n });\n };\n\n const startupDrift = claudeCodeIntegration.detectDrift(template);\n if (startupDrift.drifted) {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"warn\",\n message: startupDrift.message,\n extra: {\n cachedVersion: startupDrift.cachedVersion,\n installedVersion: startupDrift.installedVersion,\n },\n },\n }).catch(() => {});\n }\n\n const compat = claudeCodeIntegration.checkCompat();\n if (compat.status !== \"ok\" && compat.status !== \"unknown\") {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"warn\",\n message: compat.message,\n extra: {\n installedVersion: compat.installedVersion,\n range: compat.range,\n },\n },\n }).catch(() => {});\n }\n\n void claudeCodeIntegration.refreshLiveFingerprint({ silent: true })\n .then((refreshedTemplate) => {\n const refreshedDrift = claudeCodeIntegration.detectDrift(refreshedTemplate ?? template);\n if (!refreshedDrift.drifted) {\n return;\n }\n\n return client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"warn\",\n message: refreshedDrift.message,\n extra: {\n cachedVersion: refreshedDrift.cachedVersion,\n installedVersion: refreshedDrift.installedVersion,\n },\n },\n }).catch(() => {});\n })\n .catch((error) => {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"debug\",\n message: \"live fingerprint refresh failed\",\n extra: {\n error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n });\n\n const store = new AccountStore();\n const syncBootstrapAuthForPhase = async (phase: \"plugin-init\" | \"loader-recovery\"): Promise<boolean> => {\n try {\n const synced = await syncBootstrapAuth(client, store);\n debugLog(client, \"Bootstrap auth sync completed\", { phase, synced });\n return synced;\n } catch (error) {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"debug\",\n message: \"bootstrap auth sync failed\",\n extra: {\n phase,\n error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n return false;\n }\n };\n\n await syncBootstrapAuthForPhase(\"plugin-init\");\n\n let poolManager: PoolManager | null = null;\n let cascadeStateManager: CascadeStateManager | null = null;\n let poolChainConfig: PoolChainConfig = { pools: [], chains: [] };\n\n async function ensurePoolInfrastructure(): Promise<void> {\n poolChainConfig = await loadPoolChainConfig();\n\n poolManager ??= new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager ??= new CascadeStateManager();\n }\n\n const lifecycle = createOpenCodeNativePluginLifecycle({\n store,\n client,\n managerClass: AccountManager,\n createRuntimeFactory: () => new AccountRuntimeFactory(store, client, claudeIdentity),\n createRefreshQueue: (_client, _store, onInvalidate) =>\n new ProactiveRefreshQueue(client, store, (uuid) => {\n onInvalidate(uuid);\n void lifecycle.getManager()?.refresh();\n }),\n executeWithAccountRotation: async (activeManager, activeRuntimeFactory, _client, input, init) => {\n const activeAccount = activeManager.getActiveAccount();\n ensureHeartbeat(activeAccount?.accessToken, activeAccount);\n await ensurePoolInfrastructure();\n\n return executeWithAccountRotation(\n activeManager,\n activeRuntimeFactory,\n client,\n input,\n init,\n {\n poolManager: poolManager!,\n cascadeStateManager: cascadeStateManager!,\n poolChainConfig,\n },\n );\n },\n migrateFromAuthJson,\n afterManagerInitialized: async (activeManager) => {\n activeManager.setClient(client);\n const activeAccount = activeManager.getActiveAccount();\n ensureHeartbeat(activeAccount?.accessToken, activeAccount);\n },\n afterOAuthLoad: (credentials, activeManager) => {\n const activeAccount = activeManager.getActiveAccount?.();\n ensureHeartbeat(activeAccount?.accessToken ?? credentials.access, activeAccount);\n },\n createFetch: ({ getManager, getRuntimeFactory, defaultFetch }) => async (input, init) => {\n const activeManager = getManager();\n const activeRuntimeFactory = getRuntimeFactory();\n if (!activeManager || !activeRuntimeFactory) {\n stopHeartbeat();\n return fetch(input, init);\n }\n\n if (activeManager.getAccountCount() === 0) {\n stopHeartbeat();\n }\n\n return defaultFetch(input, init);\n },\n createLoaderExtras: async () => {\n const authProfile = await claudeCodeIntegration.loadAuthProfile();\n return {\n baseURL: authProfile.apiV1BaseUrl,\n \"chat.headers\": async (\n input: { provider?: { info?: { id?: string } } },\n output: { headers: Record<string, string> },\n ) => {\n if (input.provider?.info?.id !== ANTHROPIC_OAUTH_ADAPTER.authProviderId) return;\n\n const sessionId = getUpstreamSessionId();\n applyOrderedHeaders(output, {\n ...output.headers,\n ...getStaticHeaders(),\n ...getPerRequestHeaders(sessionId),\n \"anthropic-beta\": getBetaHeader(),\n });\n },\n };\n },\n authJsonProviderKey: \"anthropic\",\n oauthApiKey: \"\",\n noAccountsMessage: \"No Anthropic accounts configured. Run `opencode auth login` to add an account.\",\n getAccountLabel,\n });\n const authLoader = createOpenCodeNativeAuthLoader({\n lifecycle,\n debugLog: (message, extra) => debugLog(client, message, extra),\n beforeAuth: (provider) => {\n const providerModels = readProviderModels(provider);\n ingestProviderModelsCapabilities(providerModels);\n },\n beforeLoad: async ({ auth }) => {\n if (auth.type === \"oauth\") {\n return;\n }\n\n await syncBootstrapAuthForPhase(\"loader-recovery\");\n },\n afterLoad: ({ auth, manager, runtimeFactory, result }) => {\n if (auth.type !== \"oauth\") {\n if (!manager?.getAccountCount() || !runtimeFactory) {\n stopHeartbeat();\n return { apiKey: \"\", fetch };\n }\n\n return result;\n }\n\n if (!manager) {\n return { apiKey: \"\", fetch };\n }\n\n return result;\n },\n });\n\n await lifecycle.load({ type: \"api\" }).catch(() => {});\n\n const hooks = {\n \"chat.params\": async (\n input: {\n sessionID: string;\n provider?: { info?: { id?: string } };\n model?: { providerID?: string };\n message?: { model?: Record<string, unknown> };\n },\n output: { options: Record<string, unknown> },\n ): Promise<void> => {\n if (!isAnthropicChatHook(input)) return;\n\n const outputEffort = getClientOutputEffort(output.options)\n ?? readOpenCodeVariantEffort(getMessageVariant(input));\n\n if (!outputEffort || outputEffort === \"client\") {\n outputEffortBySession.delete(input.sessionID);\n return;\n }\n\n outputEffortBySession.set(input.sessionID, outputEffort);\n },\n\n \"chat.headers\": async (\n input: {\n sessionID: string;\n provider?: { info?: { id?: string } };\n model?: { providerID?: string };\n message?: { model?: Record<string, unknown> };\n },\n output: { headers: Record<string, string> },\n ): Promise<void> => {\n if (!isAnthropicChatHook(input)) return;\n\n const outputEffort = outputEffortBySession.get(input.sessionID)\n ?? readOpenCodeVariantEffort(getMessageVariant(input));\n if (!outputEffort || outputEffort === \"client\") return;\n\n output.headers[OPENCODE_OUTPUT_EFFORT_HEADER] = outputEffort;\n },\n\n \"experimental.chat.system.transform\": async (\n input: Record<string, unknown>,\n output: { system?: string[] },\n ): Promise<void> => {\n const billingHeader = composeBillingSystemEntry(extractFirstUserText(input), claudeCodeVersion);\n prependMissingSystemEntries(output, [\n billingHeader,\n upstreamAgentIdentity,\n upstreamSystemPrompt,\n ]);\n },\n\n provider: {\n id: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n models: zeroCostProviderModels,\n },\n\n auth: {\n provider: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n methods: createOpenCodeNativeAuthMethods({\n oauthLabel: ANTHROPIC_OAUTH_ADAPTER.authMethodLabel,\n authorize: (inputs) => handleAuthorize(lifecycle.getManager(), inputs, client),\n }),\n\n loader: authLoader,\n },\n };\n return hooks;\n};\n","import { createAccountManagerForProvider } from \"opencode-multi-account-core\";\nimport { getConfig } from \"../shared/config\";\nimport { isClaimedByOther, readClaims, writeClaim } from \"./claims\";\nimport { isTokenExpired, refreshToken } from \"../oauth/token\";\n\nexport const AccountManager = createAccountManagerForProvider({\n providerAuthId: \"anthropic\",\n getConfig,\n isTokenExpired,\n isClaimedByOther,\n readClaims,\n refreshToken,\n writeClaim,\n});\n\nexport type AccountManager = InstanceType<typeof AccountManager>;\n","import {\n createConfigLoader,\n} from \"opencode-multi-account-core\";\n\nconst configLoader = createConfigLoader(\"claude-multiauth.json\");\n\nexport {\n configLoader,\n};\n\nexport const { getConfig, loadConfig, resetConfigCache, updateConfigField } = configLoader;\n","import { createClaimsManager, type ClaimsMap } from \"opencode-multi-account-core\";\nimport { CLAIMS_FILENAME } from \"../shared/constants\";\n\nconst claimsManager = createClaimsManager(CLAIMS_FILENAME);\n\nexport const {\n isClaimedByOther,\n readClaims,\n releaseClaim,\n writeClaim,\n} = claimsManager;\n\nexport type { ClaimsMap };\n","import { anthropicOAuthAdapter } from \"opencode-multi-account-core\";\n\nexport const ANTHROPIC_OAUTH_ADAPTER = anthropicOAuthAdapter;\n\nexport const ANTHROPIC_CLIENT_ID = ANTHROPIC_OAUTH_ADAPTER.oauthClientId;\nexport const ANTHROPIC_TOKEN_ENDPOINT = ANTHROPIC_OAUTH_ADAPTER.tokenEndpoint;\nexport const ANTHROPIC_USAGE_ENDPOINT = ANTHROPIC_OAUTH_ADAPTER.usageEndpoint;\nexport const ANTHROPIC_PROFILE_ENDPOINT = ANTHROPIC_OAUTH_ADAPTER.profileEndpoint;\n\nexport const ACCOUNTS_FILENAME = ANTHROPIC_OAUTH_ADAPTER.accountStorageFilename;\nexport const CLAIMS_FILENAME = \"anthropic-multi-account-claims.json\";\nexport const PLAN_LABELS = ANTHROPIC_OAUTH_ADAPTER.planLabels;\n\nexport const TOKEN_EXPIRY_BUFFER_MS = 60_000;\nexport const TOKEN_REFRESH_TIMEOUT_MS = 30_000;\n","import { exec } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport * as v from \"valibot\";\nimport { TOKEN_REFRESH_TIMEOUT_MS } from \"../shared/constants\";\nimport { claudeCodeIntegration } from \"../claude-code\";\nimport { startCallbackServer } from \"./callback-server\";\nimport { generatePKCE, generateState } from \"./pkce\";\nimport { runNodeTokenRequest } from \"./token-node-request\";\nimport { fetchProfile, fetchUsage } from \"../usage\";\nimport {\n TokenResponseSchema,\n type CredentialRefreshPatch,\n type StoredAccount,\n type TokenResponse,\n} from \"../shared/types\";\n\nconst TOKEN_REQUEST_EXECUTABLE = process.env.OPENCODE_REFRESH_NODE_EXECUTABLE || \"node\";\n\ntype BrowserExec = (command: string, callback?: (error: Error | null) => void) => void;\n\nlet browserExec: BrowserExec = (command, callback) => {\n exec(command, callback);\n};\n\nlet callbackServerStarter: typeof startCallbackServer = startCallbackServer;\nlet profileFetcher: typeof fetchProfile = fetchProfile;\nlet usageFetcher: typeof fetchUsage = fetchUsage;\n\ninterface NodeTokenEnvelope {\n ok?: boolean;\n status?: number;\n body?: string;\n error?: string;\n}\n\nexport interface LoginCallbacks {\n onAuth(info: { url: string; instructions?: string }): void;\n onProgress?(msg: string): void;\n}\n\nexport type LoginResult = Partial<StoredAccount>;\n\nexport class TokenExchangeError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"TokenExchangeError\";\n }\n}\n\nexport class TokenRefreshError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"TokenRefreshError\";\n }\n}\n\nfunction buildTokenRequestError(url: string, details: string): Error {\n return new Error(`Anthropic token request failed. url=${url}; details=${details}`);\n}\n\nfunction buildTokenInvalidJsonError(url: string, body: string, details: string): Error {\n return new Error(`Anthropic token request returned invalid JSON. url=${url}; body=${body}; details=${details}`);\n}\n\nfunction parseNodeTokenEnvelope(output: string, endpoint: string): NodeTokenEnvelope {\n try {\n return JSON.parse(output) as NodeTokenEnvelope;\n } catch (error) {\n const details = error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n throw buildTokenInvalidJsonError(endpoint, output, details);\n }\n}\n\nfunction parseTokenResponseBody(body: string, endpoint: string): TokenResponse {\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(body);\n } catch (error) {\n const details = error instanceof Error ? `${error.name}: ${error.message}` : String(error);\n throw buildTokenInvalidJsonError(endpoint, body, details);\n }\n\n return v.parse(TokenResponseSchema, parsed);\n}\n\nfunction getOpenBrowserCommand(url: string, platform = process.platform): string {\n if (platform === \"win32\") {\n return `rundll32.exe url.dll,FileProtocolHandler ${JSON.stringify(url)}`;\n }\n\n if (platform === \"darwin\") {\n return `open ${JSON.stringify(url)}`;\n }\n\n return `xdg-open ${JSON.stringify(url)}`;\n}\n\nfunction openBrowser(url: string): void {\n try {\n browserExec(getOpenBrowserCommand(url), () => {});\n } catch {\n // best-effort\n }\n}\n\nfunction resolveStoredClaudeIdentity(tokens: TokenResponse): Pick<StoredAccount, \"accountId\" | \"accountUuid\" | \"deviceId\"> {\n const localIdentity = claudeCodeIntegration.loadIdentity();\n const accountUuid = tokens.account?.uuid || localIdentity.accountUuid || randomUUID();\n const deviceId = localIdentity.deviceId || randomUUID();\n\n return {\n accountId: accountUuid,\n accountUuid,\n deviceId,\n };\n}\n\nfunction buildAuthorizeUrl(params: {\n authorizeUrl: string;\n clientId: string;\n scopes: string;\n redirectUri: string;\n codeChallenge: string;\n state: string;\n}): string {\n const url = new URL(params.authorizeUrl);\n url.searchParams.set(\"code\", \"true\");\n url.searchParams.set(\"client_id\", params.clientId);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"redirect_uri\", params.redirectUri);\n url.searchParams.set(\"scope\", params.scopes);\n url.searchParams.set(\"code_challenge\", params.codeChallenge);\n url.searchParams.set(\"code_challenge_method\", \"S256\");\n url.searchParams.set(\"state\", params.state);\n return url.toString();\n}\n\nasync function postTokenEndpoint(\n contentType: string,\n body: string,\n timeoutMs = TOKEN_REFRESH_TIMEOUT_MS,\n userAgent?: string,\n): Promise<TokenResponse> {\n const derivedProfile = await claudeCodeIntegration.loadAuthProfile();\n const oauthConfig = derivedProfile.oauthConfig;\n const endpoint = oauthConfig.tokenUrl;\n const resolvedUserAgent = userAgent ?? derivedProfile.userAgent;\n\n let output: string;\n try {\n output = await runNodeTokenRequest({\n body,\n contentType,\n endpoint,\n executable: TOKEN_REQUEST_EXECUTABLE,\n timeoutMs,\n userAgent: resolvedUserAgent,\n });\n } catch (error) {\n const details = error instanceof Error ? error.message : String(error);\n throw buildTokenRequestError(endpoint, details);\n }\n\n const result = parseNodeTokenEnvelope(output, endpoint);\n if (result.ok) {\n return parseTokenResponseBody(result.body ?? \"\", endpoint);\n }\n\n if (result.error) {\n throw buildTokenRequestError(endpoint, result.error);\n }\n\n throw buildTokenRequestError(\n endpoint,\n `Error: HTTP request failed. status=${result.status ?? 0}; url=${endpoint}; body=${result.body ?? \"\"}`,\n );\n}\n\nconst CODE_EXCHANGE_TIMEOUT_MS = 30_000;\n\nasync function exchangeCodeForTokens(params: {\n code: string;\n codeVerifier: string;\n state: string;\n redirectUri: string;\n}): Promise<TokenResponse> {\n const derivedProfile = await claudeCodeIntegration.loadAuthProfile();\n const oauthConfig = derivedProfile.oauthConfig;\n\n const body = JSON.stringify({\n grant_type: \"authorization_code\",\n client_id: oauthConfig.clientId,\n code: params.code,\n redirect_uri: params.redirectUri,\n code_verifier: params.codeVerifier,\n state: params.state,\n });\n\n return postTokenEndpoint(\"application/json\", body, CODE_EXCHANGE_TIMEOUT_MS);\n}\n\nexport async function loginWithOAuth(callbacks: LoginCallbacks): Promise<Partial<StoredAccount>> {\n const { oauthConfig: cfg } = await claudeCodeIntegration.loadAuthProfile();\n const { verifier: codeVerifier, challenge: codeChallenge } = generatePKCE();\n const state = generateState();\n const { port, waitForCode, stop } = await callbackServerStarter({ expectedState: state });\n const redirectUri = `http://localhost:${port}/callback`;\n\n try {\n const authorizeUrl = buildAuthorizeUrl({\n authorizeUrl: cfg.authorizeUrl,\n clientId: cfg.clientId,\n scopes: cfg.scopes,\n redirectUri,\n codeChallenge,\n state,\n });\n\n callbacks.onAuth({\n url: authorizeUrl,\n instructions: \"Complete authorization in your browser.\",\n });\n\n openBrowser(authorizeUrl);\n callbacks.onProgress?.(\"Waiting for browser authorization...\");\n\n const { code } = await waitForCode;\n\n callbacks.onProgress?.(\"Exchanging authorization code...\");\n const tokens = await exchangeCodeForTokens({\n code,\n codeVerifier,\n state,\n redirectUri,\n });\n\n callbacks.onProgress?.(\"Fetching profile...\");\n const profileResult = await profileFetcher(tokens.access_token);\n try {\n await usageFetcher(tokens.access_token);\n } catch {\n // best-effort\n }\n const profileData = profileResult.ok ? profileResult.data : undefined;\n const now = Date.now();\n\n return {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n expiresAt: now + tokens.expires_in * 1000,\n email: profileData?.email ?? tokens.account?.email_address,\n planTier: profileData?.planTier ?? \"\",\n addedAt: now,\n lastUsed: now,\n ...resolveStoredClaudeIdentity(tokens),\n };\n } catch (error) {\n stop();\n throw error;\n }\n}\n\nconst REFRESH_TIMEOUT_MS = 15_000;\n\nexport async function refreshWithOAuth(currentRefreshToken: string): Promise<CredentialRefreshPatch> {\n const { oauthConfig } = await claudeCodeIntegration.loadAuthProfile();\n\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: currentRefreshToken,\n client_id: oauthConfig.clientId,\n }).toString();\n\n const response = await postTokenEndpoint(\n \"application/x-www-form-urlencoded\",\n body,\n REFRESH_TIMEOUT_MS,\n );\n\n const patch: CredentialRefreshPatch = {\n accessToken: response.access_token,\n expiresAt: Date.now() + response.expires_in * 1000,\n };\n\n if (response.refresh_token) {\n patch.refreshToken = response.refresh_token;\n }\n\n if (response.account?.uuid) {\n patch.accountId = response.account.uuid;\n patch.accountUuid = response.account.uuid;\n }\n\n if (response.account?.email_address) {\n patch.email = response.account.email_address;\n }\n\n return patch;\n}\n\nexport const detectOAuthConfig = claudeCodeIntegration.detectOAuthConfig;\n\nexport const anthropicOAuthTestExports = {\n getOpenBrowserCommand,\n postTokenEndpoint,\n exchangeCodeForTokens,\n loginWithOAuth,\n openBrowser,\n setCallbackServerStarterForTest(next: typeof startCallbackServer | null): void {\n callbackServerStarter = next ?? startCallbackServer;\n },\n setProfileFetcherForTest(next: typeof fetchProfile | null): void {\n profileFetcher = next ?? fetchProfile;\n },\n setUsageFetcherForTest(next: typeof fetchUsage | null): void {\n usageFetcher = next ?? fetchUsage;\n },\n setBrowserExecForTest(next: BrowserExec | null): void {\n browserExec = next ?? ((command, callback) => {\n exec(command, callback);\n });\n },\n};\n","{\n \"request\": {\n \"baseApiUrl\": \"https://api.anthropic.com\",\n \"anthropicVersion\": \"2023-06-01\",\n \"xApp\": \"cli\",\n \"betaHeader\": \"claude-code-20250219,oauth-2025-04-20,context-1m-2025-08-07,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advisor-tool-2026-03-01,effort-2025-11-24\"\n },\n \"oauth\": {\n \"clientId\": \"9d1c250a-e61b-44d9-88ed-5944d1962f5e\",\n \"authorizeUrl\": \"https://claude.ai/oauth/authorize\",\n \"tokenUrl\": \"https://platform.claude.com/v1/oauth/token\",\n \"scopes\": \"org:create_api_key user:profile user:inference user:sessions:claude_code user:mcp_servers user:file_upload\",\n \"baseApiUrl\": \"https://api.anthropic.com\"\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { execFileSync as defaultExecFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir, platform } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport derivedDefaultsJson from \"../../fixtures/defaults/cc-derived-defaults.json\";\nimport { compareVersions } from \"../fingerprint/capture\";\nimport { getConfigDir } from \"../../shared/utils\";\n\nexport interface DetectedOAuthConfig {\n clientId: string;\n authorizeUrl: string;\n tokenUrl: string;\n scopes: string;\n baseApiUrl: string;\n source: \"detected\" | \"cached\" | \"fallback\" | \"override\";\n ccPath?: string;\n ccHash?: string;\n}\n\ntype DetectedOAuthConfigPayload = Omit<DetectedOAuthConfig, \"source\" | \"ccPath\" | \"ccHash\">;\ntype OAuthConfigCache = Record<string, DetectedOAuthConfigPayload>;\n\ninterface CacheFilePayload {\n entries?: Record<string, unknown>;\n savedAt?: number;\n}\n\ninterface DetectorTestOverrides {\n findCCBinary?: () => string | null;\n readBinaryFile?: (path: string) => Promise<Buffer>;\n existsSync?: (path: string) => boolean;\n execFileSync?: typeof defaultExecFileSync;\n pathEnv?: string;\n platform?: () => NodeJS.Platform;\n}\n\nconst CONFIG_SCAN_WINDOW_CHARS = 4096;\nconst CONFIG_SCAN_LOOKBACK_CHARS = 2048;\nconst KNOWN_PROD_CLIENT_ID = \"9d1c250a-e61b-44d9-88ed-5944d1962f5e\";\nconst POLLUTED_CACHED_SCOPE = \"https://www.googleapis.com/auth/cloud-platform\";\nconst SAFE_FALLBACK_SCOPES = \"org:create_api_key user:profile user:inference user:sessions:claude_code user:mcp_servers user:file_upload\";\nconst UUID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst CLIENT_ID_ASSIGNMENT_PATTERN = /\\b(?:CLIENT_ID|[A-Z_]+CLIENT_ID)\\s*:\\s*\"([0-9a-f-]{36})\"/gi;\nconst CACHE_FILE_NAME = \"anthropic-oauth-config-cache.json\";\nconst DEFAULT_OVERRIDE_FILE_NAME = \"oauth-config.override.json\";\nconst derivedDefaults = derivedDefaultsJson as {\n oauth?: {\n clientId?: string;\n authorizeUrl?: string;\n tokenUrl?: string;\n scopes?: string;\n baseApiUrl?: string;\n };\n};\n\nconst fallbackPayload = normalizeDetectedOAuthConfigPayload({\n clientId: derivedDefaults.oauth?.clientId || KNOWN_PROD_CLIENT_ID,\n authorizeUrl: derivedDefaults.oauth?.authorizeUrl || \"https://claude.ai/oauth/authorize\",\n tokenUrl: derivedDefaults.oauth?.tokenUrl || \"https://platform.claude.com/v1/oauth/token\",\n scopes: derivedDefaults.oauth?.scopes || SAFE_FALLBACK_SCOPES,\n baseApiUrl: derivedDefaults.oauth?.baseApiUrl || \"https://api.anthropic.com\",\n});\n\nexport const FALLBACK: DetectedOAuthConfig = {\n ...fallbackPayload,\n source: \"fallback\",\n};\n\nexport const FALLBACK_FOR_DRIFT_CHECK = FALLBACK;\n\nfunction hasPollutedCachedScope(scopes: string): boolean {\n const parsedScopes = scopes.split(/\\s+/).filter(Boolean);\n return parsedScopes.includes(POLLUTED_CACHED_SCOPE) || !parsedScopes.includes(\"org:create_api_key\");\n}\n\nexport function filterScopesByBinaryPresence(buf: Buffer, expected: string[]): string[] {\n const verified: string[] = [];\n\n for (const scope of expected) {\n const needle = Buffer.from(`\"${scope}\"`);\n if (buf.includes(needle)) {\n verified.push(scope);\n }\n }\n\n return verified;\n}\n\nfunction getVerifiedCanonicalScopes(buf: Buffer, fallbackScopes: string): string | null {\n const expectedScopes = fallbackScopes.split(/\\s+/).filter(Boolean);\n const verifiedScopes = filterScopesByBinaryPresence(buf, expectedScopes);\n\n return verifiedScopes.length === expectedScopes.length ? verifiedScopes.join(\" \") : null;\n}\n\nexport function normalizeAuthorizeUrl(url: string): string {\n if (url === \"https://claude.com/cai/oauth/authorize\") {\n return \"https://claude.ai/oauth/authorize\";\n }\n\n return url;\n}\n\nfunction normalizeDetectedOAuthConfigPayload(\n payload: DetectedOAuthConfigPayload,\n): DetectedOAuthConfigPayload {\n return {\n ...payload,\n authorizeUrl: normalizeAuthorizeUrl(payload.authorizeUrl),\n };\n}\n\nfunction pickNearestScopes(block: string, centerIndex: number): string | null {\n return pickNearestValue(block, centerIndex, /SCOPES\\s*:\\s*\"([^\"]+)\"/gi)\n || pickNearestValue(block, centerIndex, /scope[s]?\\s*:\\s*\"([^\"]+)\"/gi)\n || null;\n}\n\nfunction isLikelyLocalUrl(value: string | undefined): boolean {\n if (!value) {\n return false;\n }\n\n try {\n const host = new URL(value).hostname.toLowerCase();\n return host === \"localhost\"\n || host === \"127.0.0.1\"\n || host === \"0.0.0.0\"\n || host.endsWith(\".local\");\n } catch {\n return false;\n }\n}\n\nfunction extractCandidateBlocks(binaryText: string): string[] {\n const blocks: string[] = [];\n const seenRanges = new Set<string>();\n const clientIdMatches = [...binaryText.matchAll(CLIENT_ID_ASSIGNMENT_PATTERN)];\n\n for (const [index, currentMatch] of clientIdMatches.entries()) {\n const currentIndex = currentMatch.index ?? 0;\n const previousClientIdIndex = clientIdMatches[index - 1]?.index;\n const nextClientIdIndex = clientIdMatches[index + 1]?.index;\n const range = getCandidateBlockRange(\n currentIndex,\n previousClientIdIndex,\n nextClientIdIndex,\n binaryText.length,\n );\n const start = range.start;\n const end = Math.min(\n binaryText.length,\n Math.max(range.end, currentIndex + currentMatch[0].length),\n );\n const key = `${start}:${end}`;\n\n if (seenRanges.has(key)) {\n continue;\n }\n\n seenRanges.add(key);\n blocks.push(binaryText.slice(start, end));\n }\n\n if (blocks.length === 0 && binaryText.length > 0) {\n blocks.push(binaryText.slice(0, Math.min(binaryText.length, CONFIG_SCAN_WINDOW_CHARS)));\n }\n\n return blocks;\n}\n\ninterface ScoredOAuthCandidate {\n payload: DetectedOAuthConfigPayload;\n score: number;\n}\n\nfunction midpoint(left: number, right: number): number {\n return Math.floor((left + right) / 2);\n}\n\nfunction getCandidateBlockRange(\n currentIndex: number,\n previousClientIdIndex: number | undefined,\n nextClientIdIndex: number | undefined,\n textLength: number,\n): { start: number; end: number } {\n const boundedLeftEdge = currentIndex - CONFIG_SCAN_LOOKBACK_CHARS;\n const boundedRightEdge = currentIndex + CONFIG_SCAN_WINDOW_CHARS;\n const leftBoundary = previousClientIdIndex === undefined\n ? boundedLeftEdge\n : Math.max(boundedLeftEdge, midpoint(previousClientIdIndex, currentIndex));\n const rightBoundary = nextClientIdIndex === undefined\n ? boundedRightEdge\n : Math.min(boundedRightEdge, midpoint(currentIndex, nextClientIdIndex));\n\n return {\n start: Math.max(0, leftBoundary),\n end: Math.min(textLength, Math.max(currentIndex + 1, rightBoundary)),\n };\n}\n\nfunction pickNearestValue(block: string, centerIndex: number, pattern: RegExp): string | undefined {\n let nearestValue: string | undefined;\n let nearestDistance = Number.POSITIVE_INFINITY;\n\n for (const match of block.matchAll(pattern)) {\n const matchIndex = match.index ?? 0;\n const distance = Math.abs(matchIndex - centerIndex);\n\n if (distance < nearestDistance) {\n nearestDistance = distance;\n nearestValue = match[1];\n }\n }\n\n return nearestValue;\n}\n\nfunction scoreCandidate(candidate: DetectedOAuthConfigPayload, extractedScopes: string | null): number {\n let score = 0;\n\n if (UUID_PATTERN.test(candidate.clientId)) score += 4;\n if (candidate.baseApiUrl.startsWith(\"https://\")) score += 3;\n if (!isLikelyLocalUrl(candidate.baseApiUrl)) score += 5;\n if (!isLikelyLocalUrl(candidate.authorizeUrl)) score += 2;\n if (!isLikelyLocalUrl(candidate.tokenUrl)) score += 2;\n if (extractedScopes) score += 2;\n if (candidate.scopes.includes(\"user:sessions:claude_code\")) score += 1;\n\n return score;\n}\n\nfunction extractCandidateFromBlock(block: string): ScoredOAuthCandidate | null {\n const clientIdMatch = /\\b(?:CLIENT_ID|[A-Z_]+CLIENT_ID)\\s*:\\s*\"([0-9a-f-]{36})\"/i.exec(block);\n if (!clientIdMatch?.[1]) {\n return null;\n }\n\n const clientIdIndex = clientIdMatch.index ?? 0;\n const authorizeUrl = pickNearestValue(block, clientIdIndex, /CLAUDE_AI_AUTHORIZE_URL\\s*:\\s*\"(https?:\\/\\/[^\\\"]*\\/oauth\\/authorize[^\\\"]*)\"/gi);\n const baseApiUrl = pickNearestValue(block, clientIdIndex, /BASE_API_URL\\s*:\\s*\"(https?:\\/\\/[^\\\"]+)\"/gi);\n const tokenUrl = pickNearestValue(block, clientIdIndex, /TOKEN_URL\\s*:\\s*\"(https:\\/\\/[^\\\"]*\\/oauth\\/token[^\\\"]*)\"/gi);\n const rawExtractedScopes = pickNearestScopes(block, clientIdIndex);\n const hasPollutedScope = rawExtractedScopes\n ? rawExtractedScopes.split(/\\s+/).some((scope) => scope === POLLUTED_CACHED_SCOPE)\n : false;\n const extractedScopes = rawExtractedScopes && !hasPollutedScope\n ? rawExtractedScopes\n : null;\n\n const payload: DetectedOAuthConfigPayload = {\n clientId: clientIdMatch[1],\n authorizeUrl: normalizeAuthorizeUrl(authorizeUrl || FALLBACK.authorizeUrl),\n tokenUrl: tokenUrl || FALLBACK.tokenUrl,\n scopes: extractedScopes || FALLBACK.scopes,\n baseApiUrl: baseApiUrl || FALLBACK.baseApiUrl,\n };\n\n if (!isDetectedOAuthConfigPayload(payload)) {\n return null;\n }\n\n return {\n payload,\n score: scoreCandidate(payload, extractedScopes),\n };\n}\n\nlet memoizedConfig: DetectedOAuthConfig | null = null;\nlet detectorTestOverrides: DetectorTestOverrides = {};\n\nfunction getPlatform(): NodeJS.Platform {\n return detectorTestOverrides.platform?.() ?? platform();\n}\n\nfunction fileExists(path: string): boolean {\n return (detectorTestOverrides.existsSync ?? existsSync)(path);\n}\n\nfunction candidatePaths(): string[] {\n const home = homedir();\n\n if (getPlatform() === \"win32\") {\n return [\n join(home, \".local\", \"bin\", \"claude.exe\"),\n join(home, \"AppData\", \"Roaming\", \"npm\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.js\"),\n join(home, \"AppData\", \"Roaming\", \"npm\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.mjs\"),\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.js\"),\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.mjs\"),\n ];\n }\n\n return [\n join(home, \".local\", \"bin\", \"claude\"),\n \"/usr/local/bin/claude\",\n \"/opt/homebrew/bin/claude\",\n \"/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.js\",\n \"/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.mjs\",\n \"/opt/homebrew/lib/node_modules/@anthropic-ai/claude-code/cli.js\",\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.js\"),\n join(home, \".claude\", \"local\", \"node_modules\", \"@anthropic-ai\", \"claude-code\", \"cli.mjs\"),\n ];\n}\n\nexport function enumerateCCCandidates(): string[] {\n const seen = new Set<string>();\n const candidates: string[] = [];\n const currentPlatform = getPlatform();\n const pathDelimiter = currentPlatform === \"win32\" ? \";\" : \":\";\n const pathDirs = (detectorTestOverrides.pathEnv ?? process.env.PATH ?? \"\")\n .split(pathDelimiter)\n .filter(Boolean);\n const pathCandidateNames = currentPlatform === \"win32\"\n ? [\"claude.exe\", \"claude.cmd\", \"claude\"]\n : [\"claude\"];\n\n const addCandidate = (candidatePath: string): void => {\n const key = currentPlatform === \"win32\" ? candidatePath.toLowerCase() : candidatePath;\n if (seen.has(key) || !fileExists(candidatePath)) {\n return;\n }\n\n seen.add(key);\n candidates.push(candidatePath);\n };\n\n for (const dir of pathDirs) {\n for (const fileName of pathCandidateNames) {\n addCandidate(join(dir, fileName));\n }\n }\n\n for (const candidatePath of candidatePaths()) {\n addCandidate(candidatePath);\n }\n\n return candidates;\n}\n\nfunction probeOneVersion(binPath: string): string | null {\n const currentPlatform = getPlatform();\n\n if (currentPlatform === \"win32\" && /\\.(cmd|bat)$/i.test(binPath) && /[&|><^\"'%\\r\\n`$;(){}\\[\\]]/.test(binPath)) {\n return null;\n }\n\n try {\n const output = (detectorTestOverrides.execFileSync ?? defaultExecFileSync)(binPath, [\"--version\"], {\n timeout: 2_000,\n encoding: \"utf-8\",\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n shell: currentPlatform === \"win32\" && /\\.(cmd|bat)$/i.test(binPath),\n });\n return output.match(/(\\d+\\.\\d+\\.\\d+(?:[.\\-][\\w.\\-]+)?)/)?.[1] ?? null;\n } catch {\n return null;\n }\n}\n\nfunction getCachePath(): string {\n return join(getConfigDir(), CACHE_FILE_NAME);\n}\n\nfunction getDefaultOverridePath(): string {\n return join(getConfigDir(), DEFAULT_OVERRIDE_FILE_NAME);\n}\n\nfunction isValidUrl(value: string): boolean {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isDetectedOAuthConfigPayload(value: unknown): value is DetectedOAuthConfigPayload {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const candidate = value as Partial<DetectedOAuthConfigPayload>;\n return typeof candidate.clientId === \"string\"\n && UUID_PATTERN.test(candidate.clientId)\n && typeof candidate.authorizeUrl === \"string\"\n && isValidUrl(candidate.authorizeUrl)\n && typeof candidate.tokenUrl === \"string\"\n && isValidUrl(candidate.tokenUrl)\n && typeof candidate.scopes === \"string\"\n && candidate.scopes.length > 0;\n}\n\nfunction buildResolvedConfig(\n payload: DetectedOAuthConfigPayload,\n source: DetectedOAuthConfig[\"source\"],\n ccPath?: string,\n ccHash?: string,\n): DetectedOAuthConfig {\n return {\n ...payload,\n source,\n ...(ccPath ? { ccPath } : {}),\n ...(ccHash ? { ccHash } : {}),\n };\n}\n\nfunction toFallbackConfig(ccPath?: string, ccHash?: string): DetectedOAuthConfig {\n return buildResolvedConfig(FALLBACK, \"fallback\", ccPath, ccHash);\n}\n\nfunction isOverrideDisabled(): boolean {\n return process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_DISABLE_OVERRIDE === \"1\";\n}\n\nfunction readOverrideString(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction getOverridePath(): string {\n return readOverrideString(process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_OVERRIDE_PATH) ?? getDefaultOverridePath();\n}\n\nfunction readOverrideRecord(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n\n return value as Record<string, unknown>;\n}\n\nfunction readOverrideField(candidate: Record<string, unknown>, key: keyof DetectedOAuthConfigPayload): string | undefined {\n const value = candidate[key];\n return typeof value === \"string\" ? readOverrideString(value) : undefined;\n}\n\nfunction readOverrideUrl(\n candidate: Record<string, unknown>,\n key: \"authorizeUrl\" | \"tokenUrl\" | \"baseApiUrl\",\n): string | undefined {\n const value = readOverrideField(candidate, key);\n return value && isValidUrl(value) ? value : undefined;\n}\n\nfunction normalizeOverride(value: unknown): Partial<DetectedOAuthConfigPayload> {\n const candidate = readOverrideRecord(value);\n if (!candidate) {\n return {};\n }\n\n const normalized: Partial<DetectedOAuthConfigPayload> = {};\n\n const clientId = readOverrideField(candidate, \"clientId\");\n if (clientId && UUID_PATTERN.test(clientId)) {\n normalized.clientId = clientId;\n }\n\n const authorizeUrl = readOverrideUrl(candidate, \"authorizeUrl\");\n if (authorizeUrl) {\n normalized.authorizeUrl = normalizeAuthorizeUrl(authorizeUrl);\n }\n\n const tokenUrl = readOverrideUrl(candidate, \"tokenUrl\");\n if (tokenUrl) {\n normalized.tokenUrl = tokenUrl;\n }\n\n const scopes = readOverrideField(candidate, \"scopes\");\n if (scopes) {\n normalized.scopes = scopes;\n }\n\n const baseApiUrl = readOverrideUrl(candidate, \"baseApiUrl\");\n if (baseApiUrl) {\n normalized.baseApiUrl = baseApiUrl;\n }\n\n return normalized;\n}\n\nasync function loadManualOverride(): Promise<Partial<DetectedOAuthConfigPayload>> {\n if (isOverrideDisabled()) {\n return {};\n }\n\n const envOverride = normalizeOverride({\n clientId: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_CLIENT_ID,\n authorizeUrl: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_AUTHORIZE_URL,\n tokenUrl: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_TOKEN_URL,\n scopes: process.env.ANTHROPIC_MULTI_ACCOUNT_OAUTH_SCOPES,\n });\n if (Object.keys(envOverride).length > 0) {\n return envOverride;\n }\n\n try {\n const fileOverride = JSON.parse(await readFile(getOverridePath(), \"utf-8\")) as unknown;\n return normalizeOverride(fileOverride);\n } catch {\n return {};\n }\n}\n\nasync function applyManualOverride(baseConfig: DetectedOAuthConfig): Promise<DetectedOAuthConfig> {\n const override = await loadManualOverride();\n if (Object.keys(override).length === 0) {\n return baseConfig;\n }\n\n return {\n ...baseConfig,\n ...override,\n source: \"override\",\n };\n}\n\nexport function findCCBinary(): string | null {\n const override = process.env.ANTHROPIC_CC_PATH;\n if (override && fileExists(override)) {\n return override;\n }\n\n const candidates = enumerateCCCandidates();\n if (candidates.length === 0) {\n return null;\n }\n\n if (candidates.length === 1) {\n return candidates[0] ?? null;\n }\n\n const probedCandidates = candidates\n .map((candidatePath) => {\n const version = probeOneVersion(candidatePath);\n return version ? { path: candidatePath, version } : null;\n })\n .filter((candidate): candidate is { path: string; version: string } => candidate !== null)\n .sort((left, right) => (compareVersions(right.version, left.version) ?? 0));\n\n return probedCandidates[0]?.path ?? candidates[0] ?? null;\n}\n\nexport async function fingerprintBinary(path: string): Promise<string> {\n const binaryContents = await readFile(path);\n return createHash(\"sha256\").update(binaryContents).digest(\"hex\").slice(0, 16);\n}\n\nexport function scanBinaryForOAuthConfig(buf: Buffer): DetectedOAuthConfigPayload | null {\n const binaryText = buf.toString(\"latin1\");\n const candidates = extractCandidateBlocks(binaryText)\n .map(extractCandidateFromBlock)\n .filter((candidate): candidate is ScoredOAuthCandidate => candidate !== null)\n .sort((left, right) => right.score - left.score);\n const preferredCandidate = candidates.find((candidate) => candidate.payload.clientId === KNOWN_PROD_CLIENT_ID);\n\n return preferredCandidate?.payload ?? candidates[0]?.payload ?? null;\n}\n\nasync function readRawCacheEntries(): Promise<Record<string, unknown>> {\n const raw = await readFile(getCachePath(), \"utf-8\");\n const parsed = JSON.parse(raw) as CacheFilePayload;\n\n if (typeof parsed !== \"object\" || parsed === null || typeof parsed.entries !== \"object\" || parsed.entries === null) {\n return {};\n }\n\n return parsed.entries;\n}\n\nexport async function loadCache(): Promise<OAuthConfigCache> {\n try {\n const rawEntries = await readRawCacheEntries();\n const validEntries: OAuthConfigCache = {};\n\n for (const [hash, value] of Object.entries(rawEntries)) {\n if (isDetectedOAuthConfigPayload(value) && !hasPollutedCachedScope(value.scopes)) {\n validEntries[hash] = normalizeDetectedOAuthConfigPayload(value);\n }\n }\n\n return validEntries;\n } catch {\n return {};\n }\n}\n\nexport async function saveCache(hash: string, config: DetectedOAuthConfigPayload): Promise<void> {\n try {\n const cachePath = getCachePath();\n const currentEntries: Record<string, unknown> = {};\n\n try {\n Object.assign(currentEntries, await readRawCacheEntries());\n } catch {\n }\n\n currentEntries[hash] = config;\n\n await mkdir(dirname(cachePath), { recursive: true });\n await writeFile(\n cachePath,\n JSON.stringify({ entries: currentEntries, savedAt: Date.now() }, null, 2),\n \"utf-8\",\n );\n } catch {\n }\n}\n\nexport async function detectOAuthConfig(): Promise<DetectedOAuthConfig> {\n if (memoizedConfig) {\n return memoizedConfig;\n }\n\n try {\n const ccPath = (detectorTestOverrides.findCCBinary || findCCBinary)();\n if (!ccPath) {\n memoizedConfig = await applyManualOverride(FALLBACK);\n return memoizedConfig;\n }\n\n const ccHash = await fingerprintBinary(ccPath);\n const cachedEntries = await loadCache();\n const cachedConfig = cachedEntries[ccHash];\n\n if (cachedConfig) {\n memoizedConfig = await applyManualOverride(buildResolvedConfig(cachedConfig, \"cached\", ccPath, ccHash));\n return memoizedConfig;\n }\n\n const readBinaryFile = detectorTestOverrides.readBinaryFile || readFile;\n const binaryBuffer = await readBinaryFile(ccPath);\n const scannedConfig = scanBinaryForOAuthConfig(binaryBuffer);\n if (!scannedConfig) {\n memoizedConfig = await applyManualOverride(toFallbackConfig(ccPath, ccHash));\n return memoizedConfig;\n }\n\n const verifiedCanonicalScopes = getVerifiedCanonicalScopes(binaryBuffer, FALLBACK.scopes);\n if (verifiedCanonicalScopes) {\n scannedConfig.scopes = verifiedCanonicalScopes;\n }\n\n const runtimeDetectedConfig = normalizeDetectedOAuthConfigPayload(scannedConfig);\n\n await saveCache(ccHash, runtimeDetectedConfig);\n memoizedConfig = await applyManualOverride(buildResolvedConfig(runtimeDetectedConfig, \"detected\", ccPath, ccHash));\n return memoizedConfig;\n } catch {\n memoizedConfig = await applyManualOverride(FALLBACK);\n return memoizedConfig;\n }\n}\n\nexport function resetOAuthConfigDetectionForTest(): void {\n memoizedConfig = null;\n detectorTestOverrides = {};\n}\n\nexport function setOAuthConfigDetectionOverridesForTest(overrides: DetectorTestOverrides | null): void {\n detectorTestOverrides = overrides ?? {};\n}\n","export {\n createMinimalClient,\n formatWaitTime,\n getAccountLabel,\n getConfigDir,\n getErrorCode,\n sleep,\n} from \"opencode-multi-account-core\";\nimport type { PluginClient } from \"./types\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { getConfig } from \"./config\";\n\nexport async function showToast(\n client: PluginClient,\n message: string,\n variant: \"info\" | \"warning\" | \"success\" | \"error\",\n): Promise<void> {\n if (getConfig().quiet_mode) return;\n try {\n await client.tui.showToast({ body: { message, variant } });\n } catch {\n }\n}\n\nexport function debugLog(\n client: PluginClient,\n message: string,\n extra?: Record<string, unknown>,\n): void {\n if (!getConfig().debug) return;\n client.app.log({\n body: { service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName, level: \"debug\", message, extra },\n }).catch(() => {});\n}\n","import derivedDefaultsJson from \"../fixtures/defaults/cc-derived-defaults.json\";\nimport bundledTemplateJson from \"@kyoli-gam/provider-claude-code/fingerprint-data\";\nimport { loadClaudeCodeSharedRequestProfile } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { detectCliVersion } from \"./cli-version\";\nimport { loadTemplate, type TemplateData } from \"./fingerprint/capture\";\nimport { detectOAuthConfig, type DetectedOAuthConfig } from \"./oauth-config/detect\";\n\nconst bundledTemplate = bundledTemplateJson as {\n anthropic_beta?: string;\n header_values?: Record<string, string>;\n};\nconst derivedDefaults = derivedDefaultsJson as {\n request?: {\n baseApiUrl?: string;\n anthropicVersion?: string;\n xApp?: string;\n betaHeader?: string;\n };\n};\n\nconst DEFAULT_BASE_API_URL = derivedDefaults.request?.baseApiUrl || \"https://api.anthropic.com\";\nconst sharedProfile = loadClaudeCodeSharedRequestProfile();\nconst DEFAULT_ANTHROPIC_VERSION = bundledTemplate.header_values?.[\"anthropic-version\"] || sharedProfile.anthropicVersion || derivedDefaults.request?.anthropicVersion || \"2023-06-01\";\nconst DEFAULT_X_APP = bundledTemplate.header_values?.[\"x-app\"] || sharedProfile.xApp || derivedDefaults.request?.xApp || \"cli\";\nconst DEFAULT_BETA_HEADER = bundledTemplate.anthropic_beta || bundledTemplate.header_values?.[\"anthropic-beta\"] || sharedProfile.anthropicBeta || derivedDefaults.request?.betaHeader || \"oauth-2025-04-20,interleaved-thinking-2025-05-14\";\n\nexport interface CCDerivedRequestProfile {\n template: TemplateData;\n cliVersion: string;\n userAgent: string;\n anthropicVersion: string;\n betaHeader: string;\n xApp: string;\n baseApiUrl: string;\n apiV1BaseUrl: string;\n}\n\nexport interface CCDerivedAuthProfile extends CCDerivedRequestProfile {\n oauthConfig: DetectedOAuthConfig;\n}\n\nexport function loadCCDerivedRequestProfile(): CCDerivedRequestProfile {\n const template = loadTemplate();\n const cliVersion = detectCliVersion();\n const anthropicVersion = template.header_values?.[\"anthropic-version\"] || DEFAULT_ANTHROPIC_VERSION;\n const betaHeader = template.anthropic_beta || template.header_values?.[\"anthropic-beta\"] || DEFAULT_BETA_HEADER;\n const xApp = template.header_values?.[\"x-app\"] || DEFAULT_X_APP;\n\n return {\n template,\n cliVersion,\n userAgent: `claude-cli/${cliVersion} (external, cli)`,\n anthropicVersion,\n betaHeader,\n xApp,\n baseApiUrl: sharedProfile.baseUrl || DEFAULT_BASE_API_URL,\n apiV1BaseUrl: sharedProfile.apiV1BaseUrl || `${DEFAULT_BASE_API_URL}/v1`,\n };\n}\n\nexport async function loadCCDerivedAuthProfile(): Promise<CCDerivedAuthProfile> {\n const requestProfile = loadCCDerivedRequestProfile();\n const oauthConfig = await detectOAuthConfig();\n const baseApiUrl = oauthConfig.baseApiUrl || requestProfile.baseApiUrl;\n\n return {\n ...requestProfile,\n oauthConfig,\n baseApiUrl,\n apiV1BaseUrl: `${baseApiUrl}/v1`,\n };\n}\n","import { readFileSync, readdirSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport interface ClaudeIdentity {\n deviceId: string;\n accountUuid: string;\n}\n\ninterface ClaudeIdentityFile {\n userID?: string;\n accountUuid?: string;\n oauthAccount?: {\n accountUuid?: string;\n };\n}\n\nconst EMPTY_IDENTITY: ClaudeIdentity = {\n deviceId: \"\",\n accountUuid: \"\",\n};\n\nlet testOverrideIdentity: ClaudeIdentity | null = null;\n\nfunction getCandidatePaths(): string[] {\n const home = homedir();\n const paths = [\n join(home, \".claude.json\"),\n join(home, \".claude\", \".claude.json\"),\n join(home, \".claude\", \"claude.json\"),\n ];\n\n try {\n const backupDir = join(home, \".claude\", \"backups\");\n const backups = readdirSync(backupDir)\n .filter((file) => file.startsWith(\".claude.json.backup.\"))\n .sort()\n .reverse();\n\n for (const backup of backups) {\n paths.push(join(backupDir, backup));\n }\n } catch {\n }\n\n return paths;\n}\n\nfunction parseIdentityFile(path: string): ClaudeIdentity | null {\n try {\n const data = JSON.parse(readFileSync(path, \"utf-8\")) as ClaudeIdentityFile;\n\n if (!data.userID) {\n return null;\n }\n\n return {\n deviceId: data.userID,\n accountUuid: data.oauthAccount?.accountUuid ?? data.accountUuid ?? \"\",\n };\n } catch {\n return null;\n }\n}\n\nexport function loadClaudeIdentity(): ClaudeIdentity {\n if (testOverrideIdentity) {\n return testOverrideIdentity;\n }\n\n for (const path of getCandidatePaths()) {\n const identity = parseIdentityFile(path);\n if (identity) {\n return identity;\n }\n }\n\n return EMPTY_IDENTITY;\n}\n\nexport function setClaudeIdentityForTest(identity: ClaudeIdentity | null): void {\n testOverrideIdentity = identity;\n}\n\nexport function resetClaudeIdentityForTest(): void {\n testOverrideIdentity = null;\n}\n","import {\n DEFAULT_CLI_VERSION,\n detectCliVersion,\n resetDetectedVersionForTest,\n setCliVersionDetectionOverridesForTest,\n} from \"./cli-version\";\nimport {\n loadCCDerivedAuthProfile,\n loadCCDerivedRequestProfile,\n} from \"./derived-profile\";\nimport type {\n CCDerivedAuthProfile,\n CCDerivedRequestProfile,\n} from \"./derived-profile\";\nimport {\n checkCCCompat,\n captureLiveTemplateAsync,\n compareVersions,\n detectDrift,\n extractTemplate,\n loadTemplate,\n matchesBundledClaudeCodeFingerprint,\n prepareBundledTemplate,\n refreshLiveFingerprintAsync,\n resetFingerprintCaptureForTest,\n setFingerprintCaptureTestOverridesForTest,\n} from \"./fingerprint/capture\";\nimport type {\n CapturedRequest,\n CompatResult,\n DriftResult,\n TemplateData,\n} from \"./fingerprint/capture\";\nimport {\n loadClaudeIdentity,\n resetClaudeIdentityForTest,\n setClaudeIdentityForTest,\n} from \"./identity\";\nimport type { ClaudeIdentity } from \"./identity\";\nimport {\n detectOAuthConfig,\n enumerateCCCandidates,\n FALLBACK,\n FALLBACK_FOR_DRIFT_CHECK,\n filterScopesByBinaryPresence,\n findCCBinary,\n fingerprintBinary,\n loadCache,\n normalizeAuthorizeUrl,\n resetOAuthConfigDetectionForTest,\n saveCache,\n scanBinaryForOAuthConfig,\n setOAuthConfigDetectionOverridesForTest,\n} from \"./oauth-config/detect\";\nimport type { DetectedOAuthConfig } from \"./oauth-config/detect\";\nimport {\n findUserPathHits,\n removeHostContextSections,\n scrubObjectStrings,\n scrubTemplate,\n scrubText,\n} from \"./scrub-template\";\n\nexport interface ClaudeCodeIntegration {\n loadRequestProfile: typeof loadCCDerivedRequestProfile;\n loadAuthProfile: typeof loadCCDerivedAuthProfile;\n loadIdentity: typeof loadClaudeIdentity;\n loadTemplate: typeof loadTemplate;\n detectCliVersion: typeof detectCliVersion;\n detectOAuthConfig: typeof detectOAuthConfig;\n detectDrift: typeof detectDrift;\n checkCompat: typeof checkCCCompat;\n refreshLiveFingerprint: typeof refreshLiveFingerprintAsync;\n}\n\nexport const claudeCodeIntegration: ClaudeCodeIntegration = {\n loadRequestProfile: loadCCDerivedRequestProfile,\n loadAuthProfile: loadCCDerivedAuthProfile,\n loadIdentity: loadClaudeIdentity,\n loadTemplate,\n detectCliVersion,\n detectOAuthConfig,\n detectDrift,\n checkCompat: checkCCCompat,\n refreshLiveFingerprint: refreshLiveFingerprintAsync,\n};\n\nexport {\n DEFAULT_CLI_VERSION,\n detectCliVersion,\n resetDetectedVersionForTest,\n setCliVersionDetectionOverridesForTest,\n loadCCDerivedAuthProfile,\n loadCCDerivedRequestProfile,\n checkCCCompat,\n captureLiveTemplateAsync,\n compareVersions,\n detectDrift,\n extractTemplate,\n loadTemplate,\n matchesBundledClaudeCodeFingerprint,\n prepareBundledTemplate,\n refreshLiveFingerprintAsync,\n resetFingerprintCaptureForTest,\n setFingerprintCaptureTestOverridesForTest,\n loadClaudeIdentity,\n resetClaudeIdentityForTest,\n setClaudeIdentityForTest,\n detectOAuthConfig,\n enumerateCCCandidates,\n FALLBACK,\n FALLBACK_FOR_DRIFT_CHECK,\n filterScopesByBinaryPresence,\n findCCBinary,\n fingerprintBinary,\n loadCache,\n normalizeAuthorizeUrl,\n resetOAuthConfigDetectionForTest,\n saveCache,\n scanBinaryForOAuthConfig,\n setOAuthConfigDetectionOverridesForTest,\n findUserPathHits,\n removeHostContextSections,\n scrubObjectStrings,\n scrubTemplate,\n scrubText,\n};\n\nexport type {\n CCDerivedAuthProfile,\n CCDerivedRequestProfile,\n CapturedRequest,\n ClaudeIdentity,\n CompatResult,\n DetectedOAuthConfig,\n DriftResult,\n TemplateData,\n};\n","import { createServer } from \"node:http\";\nimport type { Server, IncomingMessage, ServerResponse } from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\n\nconst DEFAULT_TIMEOUT_MS = 300_000;\nconst SUCCESS_REDIRECT_URL =\n \"https://platform.claude.com/oauth/code/success?app=claude-code\";\n\ninterface CallbackServerOptions {\n expectedState: string;\n timeoutMs?: number;\n}\n\ninterface CallbackResult {\n code: string;\n state: string;\n}\n\ninterface CallbackServer {\n port: number;\n waitForCode: Promise<CallbackResult>;\n stop: () => void;\n}\n\nexport function startCallbackServer(\n options: CallbackServerOptions,\n): Promise<CallbackServer> {\n const { expectedState, timeoutMs = DEFAULT_TIMEOUT_MS } = options;\n\n return new Promise<CallbackServer>((resolveServer, rejectServer) => {\n let settled = false;\n let resolveCode: ((result: CallbackResult) => void) | null = null;\n let rejectCode: ((reason: Error) => void) | null = null;\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\n const waitForCode = new Promise<CallbackResult>((resolve, reject) => {\n resolveCode = resolve;\n rejectCode = reject;\n });\n\n function settle(error: Error | null, result?: CallbackResult): void {\n if (settled) return;\n settled = true;\n\n if (timeoutHandle !== null) {\n clearTimeout(timeoutHandle);\n timeoutHandle = null;\n }\n\n if (error) {\n rejectCode?.(error);\n } else if (result) {\n resolveCode?.(result);\n }\n\n resolveCode = null;\n rejectCode = null;\n\n server.close();\n }\n\n function stop(): void {\n settle(new Error(\"OAuth callback server stopped\"));\n }\n\n function sendResponse(\n res: ServerResponse,\n status: number,\n headers: Record<string, string>,\n body: string | undefined,\n onFinish: () => void,\n ): void {\n res.writeHead(status, { ...headers, Connection: \"close\" });\n res.end(body ?? \"\", onFinish);\n }\n\n const server: Server = createServer(\n (req: IncomingMessage, res: ServerResponse) => {\n const url = new URL(req.url ?? \"/\", `http://localhost`);\n\n if (url.pathname !== \"/callback\") {\n res.writeHead(404, {\n \"Content-Type\": \"text/plain\",\n Connection: \"close\",\n });\n res.end(\"Not Found\");\n return;\n }\n\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n\n if (state !== expectedState) {\n sendResponse(\n res,\n 400,\n { \"Content-Type\": \"text/plain\" },\n \"State mismatch\",\n () => settle(new Error(\"OAuth callback state mismatch\")),\n );\n return;\n }\n\n if (!code) {\n sendResponse(\n res,\n 400,\n { \"Content-Type\": \"text/plain\" },\n \"Missing code\",\n () => settle(new Error(\"OAuth callback missing code\")),\n );\n return;\n }\n\n sendResponse(res, 302, { Location: SUCCESS_REDIRECT_URL }, undefined, () =>\n settle(null, { code, state }),\n );\n },\n );\n\n server.listen(0, \"localhost\", () => {\n const addr = server.address() as AddressInfo;\n const port = addr.port;\n\n timeoutHandle = setTimeout(() => {\n settle(new Error(\"OAuth callback timed out\"));\n }, timeoutMs);\n\n resolveServer({ port, waitForCode, stop });\n });\n\n server.on(\"error\", (err: Error) => {\n if (!settled) {\n rejectServer(err);\n }\n });\n });\n}\n","import { createHash, randomBytes } from \"node:crypto\";\n\nexport function base64url(buffer: Buffer): string {\n return buffer\n .toString(\"base64\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/g, \"\");\n}\n\nexport function generatePKCE(): { verifier: string; challenge: string } {\n const verifier = base64url(randomBytes(32));\n const challenge = base64url(createHash(\"sha256\").update(verifier).digest());\n return { verifier, challenge };\n}\n\nexport function generateState(): string {\n return base64url(randomBytes(32));\n}\n","import * as childProcess from \"node:child_process\";\n\nexport interface NodeTokenRequestOptions {\n body: string;\n contentType?: string;\n endpoint: string;\n executable: string;\n timeoutMs: number;\n userAgent?: string;\n}\n\ntype NodeTokenRequestRunner = (options: NodeTokenRequestOptions) => Promise<string>;\ntype ExecFile = typeof childProcess.execFile;\n\nlet execFile: ExecFile = childProcess.execFile;\n\nfunction buildNodeTokenRequestScript(): string {\n return `\nconst https = require(\"node:https\");\nconst endpoint = process.env.ANTHROPIC_REFRESH_ENDPOINT;\nconst contentType = process.env.ANTHROPIC_REFRESH_CONTENT_TYPE || \"application/json\";\nconst timeoutMs = Number(process.env.ANTHROPIC_REFRESH_TIMEOUT_MS || \"30000\");\nconst payload = process.env.ANTHROPIC_REFRESH_REQUEST_BODY || \"\";\nconst userAgent = process.env.ANTHROPIC_REFRESH_USER_AGENT;\n\nfunction printSuccess(body) {\n console.log(JSON.stringify({ ok: true, body }));\n}\n\nfunction printFailure(error) {\n console.log(JSON.stringify({ ok: false, ...error }));\n}\n\nconst request = https.request(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": contentType,\n Accept: \"application/json\",\n \"Content-Length\": Buffer.byteLength(payload).toString(),\n ...(userAgent ? { \"User-Agent\": userAgent } : {}),\n },\n}, (response) => {\n let body = \"\";\n response.setEncoding(\"utf8\");\n response.on(\"data\", (chunk) => {\n body += chunk;\n });\n response.on(\"end\", () => {\n const status = response.statusCode ?? 0;\n if (status < 200 || status >= 300) {\n printFailure({ status, body });\n return;\n }\n\n printSuccess(body);\n });\n});\n\nrequest.setTimeout(timeoutMs, () => {\n request.destroy(new Error(\"Request timed out after \" + timeoutMs + \"ms\"));\n});\n\nrequest.on(\"error\", (error) => {\n printFailure({ error: error instanceof Error ? error.name + \": \" + error.message : String(error) });\n});\n\nrequest.write(payload);\nrequest.end();\n`;\n}\n\nasync function defaultRunNodeTokenRequest(options: NodeTokenRequestOptions): Promise<string> {\n const script = buildNodeTokenRequestScript();\n const contentType = options.contentType ?? \"application/json\";\n\n return new Promise<string>((resolve, reject) => {\n execFile(\n options.executable,\n [\"-e\", script],\n {\n timeout: options.timeoutMs + 1000,\n maxBuffer: 1024 * 1024,\n env: {\n ...process.env,\n ANTHROPIC_REFRESH_CONTENT_TYPE: contentType,\n ANTHROPIC_REFRESH_ENDPOINT: options.endpoint,\n ANTHROPIC_REFRESH_REQUEST_BODY: options.body,\n ANTHROPIC_REFRESH_TIMEOUT_MS: String(options.timeoutMs),\n ANTHROPIC_REFRESH_USER_AGENT: options.userAgent ?? \"\",\n },\n },\n (error, stdout, stderr) => {\n const trimmedStdout = stdout.trim();\n\n if (error) {\n reject(new Error(stderr.trim() || error.message));\n return;\n }\n\n if (!trimmedStdout) {\n reject(new Error(\"Empty response from Node refresh helper\"));\n return;\n }\n\n resolve(trimmedStdout);\n },\n );\n });\n}\n\nlet nodeTokenRequestRunner: NodeTokenRequestRunner = defaultRunNodeTokenRequest;\n\nexport async function runNodeTokenRequest(options: NodeTokenRequestOptions): Promise<string> {\n return nodeTokenRequestRunner(options);\n}\n\nexport function setNodeTokenRequestRunnerForTest(runner: NodeTokenRequestRunner | null): void {\n nodeTokenRequestRunner = runner ?? defaultRunNodeTokenRequest;\n}\n\nexport function setNodeTokenRequestExecFileForTest(mockExecFile: ExecFile | null): void {\n execFile = mockExecFile ?? childProcess.execFile;\n}\n","import {\n ANTHROPIC_OAUTH_ADAPTER,\n ANTHROPIC_PROFILE_ENDPOINT,\n ANTHROPIC_USAGE_ENDPOINT,\n PLAN_LABELS,\n} from \"./shared/constants\";\nimport { formatWaitTime } from \"./shared/utils\";\nimport * as v from \"valibot\";\nimport { UsageLimitsSchema } from \"./shared/types\";\nimport type { ManagedAccount, UsageLimits } from \"./shared/types\";\n\nconst OAUTH_BETA_HEADER = ANTHROPIC_OAUTH_ADAPTER.oauthBetaHeader;\n\nconst ProfileResponseSchema = v.object({\n account: v.object({\n email: v.optional(v.string()),\n has_claude_pro: v.optional(v.boolean(), false),\n has_claude_max: v.optional(v.boolean(), false),\n }),\n});\n\nexport type ProfileData = {\n email?: string;\n planTier: string;\n};\n\nexport type FetchUsageResult =\n | { ok: true; data: UsageLimits }\n | { ok: false; reason: string };\n\nexport type FetchProfileResult =\n | { ok: true; data: ProfileData }\n | { ok: false; reason: string };\n\nexport async function fetchUsage(accessToken: string): Promise<FetchUsageResult> {\n try {\n const response = await fetch(ANTHROPIC_USAGE_ENDPOINT, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"anthropic-beta\": OAUTH_BETA_HEADER,\n },\n });\n\n if (!response.ok) {\n return { ok: false, reason: `HTTP ${response.status} ${response.statusText}` };\n }\n\n const result = v.safeParse(UsageLimitsSchema, await response.json());\n if (!result.success) {\n return { ok: false, reason: `Invalid response: ${result.issues[0]?.message ?? \"unknown\"}` };\n }\n\n return { ok: true, data: result.output };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return { ok: false, reason: message };\n }\n}\n\nexport async function fetchProfile(accessToken: string): Promise<FetchProfileResult> {\n try {\n const response = await fetch(ANTHROPIC_PROFILE_ENDPOINT, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"anthropic-beta\": OAUTH_BETA_HEADER,\n },\n });\n\n if (!response.ok) {\n return { ok: false, reason: `HTTP ${response.status} ${response.statusText}` };\n }\n\n const result = v.safeParse(ProfileResponseSchema, await response.json());\n if (!result.success) {\n return { ok: false, reason: `Invalid response: ${result.issues[0]?.message ?? \"unknown\"}` };\n }\n\n const planTier = result.output.account.has_claude_max ? \"max\"\n : result.output.account.has_claude_pro ? \"pro\"\n : \"free\";\n\n return { ok: true, data: { email: result.output.account.email, planTier } };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return { ok: false, reason: message };\n }\n}\n\nfunction formatTimeRemaining(resetAt: string | null): string {\n if (!resetAt) return \"unknown\";\n const diffMs = new Date(resetAt).getTime() - Date.now();\n if (diffMs <= 0) return \"0m\";\n return formatWaitTime(diffMs);\n}\n\nexport function getUsageSummary(account: ManagedAccount): string {\n if (!account.cachedUsage) return \"no data\";\n\n const parts: string[] = [];\n const { five_hour, seven_day } = account.cachedUsage;\n\n if (five_hour) {\n const reset = five_hour.resets_at\n ? ` (resets ${formatTimeRemaining(five_hour.resets_at)})`\n : \"\";\n parts.push(`5h: ${five_hour.utilization.toFixed(0)}%${reset}`);\n }\n if (seven_day) {\n const reset = seven_day.resets_at\n ? ` (resets ${formatTimeRemaining(seven_day.resets_at)})`\n : \"\";\n parts.push(`7d: ${seven_day.utilization.toFixed(0)}%${reset}`);\n }\n\n return parts.length > 0 ? parts.join(\", \") : \"no data\";\n}\n\nexport function getPlanLabel(account: ManagedAccount): string {\n if (!account.planTier || account.planTier === \"free\") return \"\";\n return PLAN_LABELS[account.planTier]\n ?? account.planTier.charAt(0).toUpperCase() + account.planTier.slice(1);\n}\n","import * as v from \"valibot\";\n\nexport const OAuthCredentialsSchema = v.object({\n type: v.literal(\"oauth\"),\n refresh: v.string(),\n access: v.string(),\n expires: v.number(),\n});\n\nexport const UsageLimitEntrySchema = v.object({\n utilization: v.number(),\n resets_at: v.nullable(v.string()),\n});\n\nexport const UsageLimitsSchema = v.object({\n five_hour: v.optional(v.nullable(UsageLimitEntrySchema), null),\n seven_day: v.optional(v.nullable(UsageLimitEntrySchema), null),\n seven_day_sonnet: v.optional(v.nullable(UsageLimitEntrySchema), null),\n});\n\nexport const CredentialRefreshPatchSchema = v.object({\n accessToken: v.string(),\n expiresAt: v.number(),\n refreshToken: v.optional(v.string()),\n uuid: v.optional(v.string()),\n accountId: v.optional(v.string()),\n accountUuid: v.optional(v.string()),\n deviceId: v.optional(v.string()),\n email: v.optional(v.string()),\n});\n\nexport const StoredAccountSchema = v.object({\n uuid: v.optional(v.string()),\n accountId: v.optional(v.string()),\n accountUuid: v.optional(v.string()),\n deviceId: v.optional(v.string()),\n label: v.optional(v.string()),\n email: v.optional(v.string()),\n planTier: v.optional(v.string(), \"\"),\n refreshToken: v.string(),\n accessToken: v.optional(v.string()),\n expiresAt: v.optional(v.number()),\n addedAt: v.number(),\n lastUsed: v.number(),\n enabled: v.optional(v.boolean(), true),\n rateLimitResetAt: v.optional(v.number()),\n cachedUsage: v.optional(UsageLimitsSchema),\n cachedUsageAt: v.optional(v.number()),\n consecutiveAuthFailures: v.optional(v.number(), 0),\n isAuthDisabled: v.optional(v.boolean(), false),\n authDisabledReason: v.optional(v.string()),\n});\n\nexport const AccountStorageSchema = v.object({\n version: v.literal(1),\n accounts: v.optional(v.array(StoredAccountSchema), []),\n activeAccountUuid: v.optional(v.string()),\n});\n\n/** Anthropic /v1/oauth/token response */\nexport const TokenResponseSchema = v.object({\n access_token: v.string(),\n refresh_token: v.optional(v.string()),\n expires_in: v.number(),\n account: v.optional(v.object({\n uuid: v.optional(v.string()),\n email_address: v.optional(v.string()),\n })),\n});\n\nexport type OAuthCredentials = v.InferOutput<typeof OAuthCredentialsSchema>;\nexport type UsageLimitEntry = v.InferOutput<typeof UsageLimitEntrySchema>;\nexport type UsageLimits = v.InferOutput<typeof UsageLimitsSchema>;\nexport type CredentialRefreshPatch = v.InferOutput<typeof CredentialRefreshPatchSchema>;\nexport type StoredAccount = v.InferOutput<typeof StoredAccountSchema>;\nexport type AccountStorage = v.InferOutput<typeof AccountStorageSchema>;\nexport type TokenResponse = v.InferOutput<typeof TokenResponseSchema>;\n\nexport const AccountSelectionStrategySchema = v.picklist([\"sticky\", \"round-robin\", \"hybrid\"]);\nexport type AccountSelectionStrategy = v.InferOutput<typeof AccountSelectionStrategySchema>;\n\nexport const PluginConfigSchema = v.object({\n /** sticky: same account until failure, round-robin: rotate every request, hybrid: health+usage scoring */\n account_selection_strategy: v.optional(AccountSelectionStrategySchema, \"sticky\"),\n\n /** Use cross-process claim file to distribute parallel sessions across accounts */\n cross_process_claims: v.optional(v.boolean(), true),\n /** Skip account when any usage tier utilization >= this % (100 = disabled) */\n soft_quota_threshold_percent: v.optional(v.pipe(v.number(), v.minValue(0), v.maxValue(100)), 100),\n /** Minimum backoff after rate limit (ms) */\n rate_limit_min_backoff_ms: v.optional(v.pipe(v.number(), v.minValue(0)), 30_000),\n /** Default retry-after when header is missing (ms) */\n default_retry_after_ms: v.optional(v.pipe(v.number(), v.minValue(0)), 60_000),\n /** Consecutive auth failures before disabling account */\n max_consecutive_auth_failures: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)), 3),\n /** Backoff after token refresh failure (ms) */\n token_failure_backoff_ms: v.optional(v.pipe(v.number(), v.minValue(0)), 30_000),\n /** Enable proactive background token refresh */\n proactive_refresh: v.optional(v.boolean(), true),\n /** Seconds before expiry to trigger proactive refresh (default 30 min) */\n proactive_refresh_buffer_seconds: v.optional(v.pipe(v.number(), v.minValue(60)), 1800),\n /** Interval between background refresh checks in seconds (default 5 min) */\n proactive_refresh_interval_seconds: v.optional(v.pipe(v.number(), v.minValue(30)), 300),\n /** Suppress toast notifications */\n quiet_mode: v.optional(v.boolean(), false),\n /** Enable debug logging */\n debug: v.optional(v.boolean(), false),\n});\n\nexport type PluginConfig = v.InferOutput<typeof PluginConfigSchema>;\n\nexport interface OriginalAuthHook {\n methods?: Array<{\n authorize?: (inputs?: Record<string, string>) => Promise<unknown>;\n }>;\n loader: (\n getAuth: () => Promise<unknown>,\n provider: unknown,\n ) => Promise<{ apiKey: string; fetch: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response> }>;\n}\n\nexport type TokenRefreshResult =\n | { ok: true; patch: CredentialRefreshPatch }\n | { ok: false; permanent: boolean };\n\nexport interface ManagedAccount {\n index: number;\n uuid?: string;\n accountId?: string;\n accountUuid?: string;\n deviceId?: string;\n label?: string;\n email?: string;\n planTier?: string;\n refreshToken: string;\n accessToken?: string;\n expiresAt?: number;\n addedAt: number;\n lastUsed: number;\n enabled: boolean;\n rateLimitResetAt?: number;\n last429At?: number;\n cachedUsage?: UsageLimits;\n cachedUsageAt?: number;\n consecutiveAuthFailures: number;\n isAuthDisabled: boolean;\n authDisabledReason?: string;\n}\n\nexport interface PluginClient {\n auth: {\n set: (params: {\n path: { id: string };\n body: {\n type: string;\n refresh: string;\n access: string;\n expires: number;\n };\n }) => Promise<void>;\n };\n tui: {\n showToast: (params: {\n body: {\n title?: string;\n message: string;\n variant: \"info\" | \"warning\" | \"success\" | \"error\";\n };\n }) => Promise<void>;\n };\n app: {\n log: (params: {\n body: {\n service: string;\n level: \"debug\" | \"info\" | \"warn\" | \"error\";\n message: string;\n extra?: Record<string, unknown>;\n };\n }) => Promise<void>;\n };\n}\n","import {\n ANTHROPIC_OAUTH_ADAPTER,\n TOKEN_EXPIRY_BUFFER_MS,\n} from \"../shared/constants\";\nimport { refreshWithOAuth } from \"./anthropic-oauth\";\nimport type {\n ManagedAccount,\n PluginClient,\n TokenRefreshResult,\n} from \"../shared/types\";\n\nconst PERMANENT_FAILURE_MESSAGE_PATTERNS = [\n /\\binvalid_grant\\b/i,\n /\\binvalid_scope\\b/i,\n /\\bunauthorized_client\\b/i,\n /\\brefresh token\\b.*\\b(invalid|expired|revoked|no longer valid)\\b/i,\n /\\bauth(?:entication)?(?:[_\\s-]+)?invalid\\b/i,\n];\nconst refreshMutexByAccountId = new Map<string, Promise<TokenRefreshResult>>();\n\nexport function isTokenExpired(account: Pick<ManagedAccount, \"accessToken\" | \"expiresAt\">): boolean {\n if (!account.accessToken || !account.expiresAt) return true;\n return account.expiresAt <= Date.now() + TOKEN_EXPIRY_BUFFER_MS;\n}\n\nexport async function refreshToken(\n currentRefreshToken: string,\n accountId: string,\n client: PluginClient,\n): Promise<TokenRefreshResult> {\n if (!currentRefreshToken) return { ok: false, permanent: true };\n\n const inFlightRefresh = refreshMutexByAccountId.get(accountId);\n if (inFlightRefresh) return inFlightRefresh;\n\n const refreshPromise = (async (): Promise<TokenRefreshResult> => {\n try {\n const patch = await refreshWithOAuth(currentRefreshToken);\n return { ok: true, patch };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const isPermanent = PERMANENT_FAILURE_MESSAGE_PATTERNS\n .some((pattern) => pattern.test(message));\n\n await client.app\n .log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: isPermanent ? \"error\" : \"warn\",\n message: `Token refresh failed: ${message}${isPermanent ? \" (permanent)\" : \"\"}`,\n extra: { accountId },\n },\n })\n .catch(() => {});\n\n return { ok: false, permanent: isPermanent };\n } finally {\n refreshMutexByAccountId.delete(accountId);\n }\n })();\n\n refreshMutexByAccountId.set(accountId, refreshPromise);\n return refreshPromise;\n}\n\nexport function clearRefreshMutex(accountId?: string): void {\n if (accountId) {\n refreshMutexByAccountId.delete(accountId);\n return;\n }\n\n refreshMutexByAccountId.clear();\n}\n","import { createExecutorForProvider, getClearedOAuthBody } from \"opencode-multi-account-core\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport type {\n CascadeStateManager,\n ExecutorAccountManager,\n ExecutorRuntimeFactory,\n PluginClient,\n PoolChainConfig,\n PoolManager,\n RateLimitAccountManager,\n} from \"opencode-multi-account-core\";\nimport { handleRateLimitResponse as handleRateLimitResponseForProvider } from \"../accounts/rate-limit\";\nimport { executeWithPoolChainRotation } from \"./pool-chain\";\nimport type { PoolChainAccountManager } from \"./pool-chain\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"../shared/utils\";\n\nconst { executeWithAccountRotation: executeWithCoreAccountRotation } = createExecutorForProvider(\"Anthropic\", {\n handleRateLimitResponse: async (manager, client, account, response) =>\n handleRateLimitResponseForProvider(\n manager as RateLimitAccountManager,\n client,\n account,\n response,\n ),\n formatWaitTime,\n sleep,\n showToast,\n getAccountLabel,\n});\n\ninterface PoolChainExecutorOptions {\n poolManager: PoolManager;\n cascadeStateManager: CascadeStateManager;\n poolChainConfig: PoolChainConfig;\n}\n\nfunction isAllAccountsTerminalError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n return error.message.includes(\"All Anthropic accounts\");\n}\n\nasync function clearAuthIfNoUsableAccount(\n manager: ExecutorAccountManager,\n client: PluginClient,\n): Promise<void> {\n await manager.refresh();\n if (manager.hasAnyUsableAccount()) return;\n\n await client.auth\n .set({\n path: { id: ANTHROPIC_OAUTH_ADAPTER.authProviderId },\n body: getClearedOAuthBody(),\n })\n .catch(() => {});\n}\n\nfunction hasPoolChainEntries(config: PoolChainConfig): boolean {\n return (config.pools?.length ?? 0) > 0 || (config.chains?.length ?? 0) > 0;\n}\n\nexport async function executeWithAccountRotation(\n manager: ExecutorAccountManager,\n runtimeFactory: ExecutorRuntimeFactory,\n client: PluginClient,\n input: RequestInfo | URL,\n init?: RequestInit,\n options?: PoolChainExecutorOptions,\n): Promise<Response> {\n try {\n if (!options || !hasPoolChainEntries(options.poolChainConfig)) {\n return await executeWithCoreAccountRotation(manager, runtimeFactory, client, input, init);\n }\n\n return await executeWithPoolChainRotation(\n manager as unknown as PoolChainAccountManager,\n runtimeFactory,\n options.poolManager,\n options.cascadeStateManager,\n options.poolChainConfig,\n client,\n input,\n init,\n );\n } catch (error) {\n if (isAllAccountsTerminalError(error)) {\n await clearAuthIfNoUsableAccount(manager, client);\n }\n throw error;\n }\n}\n","import { createRateLimitHandlers } from \"opencode-multi-account-core\";\nimport { getConfig } from \"../shared/config\";\nimport { fetchUsage } from \"../usage\";\nimport { formatWaitTime, getAccountLabel, showToast } from \"../shared/utils\";\n\nconst {\n fetchUsageLimits,\n getResetMsFromUsage,\n handleRateLimitResponse,\n retryAfterMsFromResponse,\n} = createRateLimitHandlers({\n fetchUsage: async (accessToken: string) => fetchUsage(accessToken),\n getConfig,\n formatWaitTime,\n getAccountLabel,\n showToast,\n});\n\nexport {\n fetchUsageLimits,\n getResetMsFromUsage,\n handleRateLimitResponse,\n retryAfterMsFromResponse,\n};\n","import { createExecutorForProvider } from \"opencode-multi-account-core\";\nimport type {\n CascadeStateManager,\n ExecutorAccountManager,\n ExecutorRuntimeFactory,\n PoolChainConfig,\n PoolManager,\n} from \"opencode-multi-account-core\";\nimport { handleRateLimitResponse as handleRateLimitResponseForProvider } from \"../accounts/rate-limit\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"../shared/utils\";\nimport type { ManagedAccount, PluginClient } from \"../shared/types\";\n\ninterface PoolChainQueueEntry {\n accountUuid: string;\n chainIndex?: number;\n}\n\ntype RateLimitManager = Parameters<typeof handleRateLimitResponseForProvider>[0];\n\nexport interface PoolChainAccountManager extends ExecutorAccountManager, RateLimitManager {\n getAccounts(): ManagedAccount[];\n isRateLimited(account: ManagedAccount): boolean;\n getActiveAccount(): ManagedAccount | null;\n}\n\nfunction buildCascadePrompt(input: RequestInfo | URL, init?: RequestInit): string {\n if (typeof init?.body === \"string\" && init.body.length > 0) {\n return init.body;\n }\n\n const method = init?.method ?? \"GET\";\n return `${method}:${String(input)}`;\n}\n\nfunction createQueueAwareManager(\n manager: PoolChainAccountManager,\n queue: PoolChainQueueEntry[],\n cascadeStateManager: CascadeStateManager,\n): PoolChainAccountManager {\n return Object.create(manager, {\n selectAccount: { value: async function selectAccount(stickyKey?: string) {\n await manager.refresh();\n\n while (queue.length > 0) {\n const next = queue.shift();\n if (!next) break;\n\n const account = manager\n .getAccounts()\n .find((candidate) => candidate.uuid === next.accountUuid);\n\n if (!account?.uuid) continue;\n if (!account.enabled || account.isAuthDisabled) continue;\n if (manager.isRateLimited(account)) continue;\n\n cascadeStateManager.markAttempted(account.uuid);\n if (next.chainIndex !== undefined) {\n cascadeStateManager.markVisitedChainIndex(next.chainIndex);\n }\n return account;\n }\n\n return manager.selectAccount(stickyKey);\n }},\n });\n}\n\nexport async function executeWithPoolChainRotation(\n manager: PoolChainAccountManager,\n runtimeFactory: ExecutorRuntimeFactory,\n poolManager: PoolManager,\n cascadeStateManager: CascadeStateManager,\n poolChainConfig: PoolChainConfig,\n client: PluginClient,\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<Response> {\n const cascadePrompt = buildCascadePrompt(input, init);\n const currentAccountUuid = manager.getActiveAccount()?.uuid;\n cascadeStateManager.startTurn(cascadePrompt, currentAccountUuid);\n\n const queue: PoolChainQueueEntry[] = [];\n const queuedAccountUuids = new Set<string>();\n const queueAwareManager = createQueueAwareManager(manager, queue, cascadeStateManager);\n\n const { executeWithAccountRotation } = createExecutorForProvider(\"Anthropic\", {\n handleRateLimitResponse: async (rawManager, rawClient, account, response) => {\n await handleRateLimitResponseForProvider(\n rawManager as Parameters<typeof handleRateLimitResponseForProvider>[0],\n rawClient,\n account,\n response,\n );\n\n if (!account.uuid) return;\n\n poolManager.markExhausted(account.uuid);\n cascadeStateManager.markAttempted(account.uuid);\n\n const cascadeState = cascadeStateManager.ensureCascadeState(cascadePrompt, account.uuid);\n const failoverPlan = await poolManager.buildFailoverPlan(\n account,\n poolChainConfig,\n manager,\n {\n attemptedAccounts: cascadeState.attemptedAccounts,\n visitedChainIndexes: cascadeState.visitedChainIndexes,\n },\n );\n\n for (const candidate of failoverPlan.candidates) {\n if (queuedAccountUuids.has(candidate.accountUuid)) continue;\n queue.push({\n accountUuid: candidate.accountUuid,\n chainIndex: candidate.chainIndex,\n });\n queuedAccountUuids.add(candidate.accountUuid);\n }\n },\n formatWaitTime,\n sleep,\n showToast,\n getAccountLabel,\n });\n\n try {\n return await executeWithAccountRotation(\n queueAwareManager,\n runtimeFactory,\n client,\n input,\n init,\n );\n } finally {\n cascadeStateManager.clearCascadeState();\n }\n}\n","export {\n ANSI,\n isTTY,\n parseKey,\n type KeyAction,\n} from \"opencode-multi-account-core\";\n","export {\n select,\n type MenuItem,\n type SelectOptions,\n} from \"opencode-multi-account-core\";\n","export { confirm } from \"opencode-multi-account-core\";\n","import { ANSI } from \"./ansi\";\nimport { select, type MenuItem } from \"./select\";\nimport { confirm } from \"./confirm\";\nimport { getAccountLabel } from \"../../shared/utils\";\nimport { getPlanLabel } from \"../../usage\";\nimport type { AccountSelectionStrategy, ManagedAccount, UsageLimits } from \"../../shared/types\";\n\nexport type AuthMenuAction =\n | { type: \"add\" }\n | { type: \"check-quotas\" }\n | { type: \"manage\" }\n | { type: \"load-balancing\" }\n | { type: \"delete-all\" }\n | { type: \"cancel\" };\n\nexport type AccountAction = \"back\" | \"toggle\" | \"delete\" | \"retry-auth\" | \"cancel\";\n\nfunction formatRelativeTime(timestamp: number | undefined): string {\n if (!timestamp) return \"never\";\n const days = Math.floor((Date.now() - timestamp) / 86_400_000);\n if (days === 0) return \"today\";\n if (days === 1) return \"yesterday\";\n if (days < 7) return `${days}d ago`;\n if (days < 30) return `${Math.floor(days / 7)}w ago`;\n return new Date(timestamp).toLocaleDateString();\n}\n\nfunction formatDate(timestamp: number | undefined): string {\n if (!timestamp) return \"unknown\";\n return new Date(timestamp).toLocaleDateString();\n}\n\ntype AccountStatus = \"active\" | \"rate-limited\" | \"auth-disabled\" | \"disabled\";\n\nexport function getAccountStatus(account: ManagedAccount): AccountStatus {\n if (account.isAuthDisabled) return \"auth-disabled\";\n if (!account.enabled) return \"disabled\";\n if (account.cachedUsage) {\n const now = Date.now();\n const usage = account.cachedUsage;\n const hasEvaluableUsageTier = [usage.five_hour, usage.seven_day].some((tier) => tier != null);\n const exhaustedTiers = [usage.five_hour, usage.seven_day].filter((tier) =>\n tier\n && tier.utilization >= 100\n && tier.resets_at != null\n && Date.parse(tier.resets_at) > now,\n );\n if (exhaustedTiers.length > 0) {\n return \"rate-limited\";\n }\n if (hasEvaluableUsageTier) {\n return \"active\";\n }\n }\n if (account.rateLimitResetAt && account.rateLimitResetAt > Date.now()) return \"rate-limited\";\n return \"active\";\n}\n\nconst STATUS_BADGE: Record<AccountStatus, string> = {\n \"active\": `${ANSI.green}[active]${ANSI.reset}`,\n \"rate-limited\": `${ANSI.yellow}[rate-limited]${ANSI.reset}`,\n \"auth-disabled\": `${ANSI.red}[auth-disabled]${ANSI.reset}`,\n \"disabled\": `${ANSI.red}[disabled]${ANSI.reset}`,\n};\n\nfunction buildAccountMenuItem(account: ManagedAccount): MenuItem<ManagedAccount> {\n const label = getAccountLabel(account);\n const status = getAccountStatus(account);\n const badge = STATUS_BADGE[status];\n\n return {\n label: `${label} ${badge}`,\n hint: account.lastUsed ? `used ${formatRelativeTime(account.lastUsed)}` : \"\",\n value: account,\n };\n}\n\nexport async function showAuthMenu(accounts: ManagedAccount[]): Promise<AuthMenuAction> {\n const items: MenuItem<AuthMenuAction>[] = [\n { label: \"Add new account\", value: { type: \"add\" }, color: \"green\" },\n { label: \"Check quotas\", value: { type: \"check-quotas\" }, color: \"cyan\" },\n { label: \"Manage accounts\", value: { type: \"manage\" } },\n { label: \"Load balancing\", value: { type: \"load-balancing\" } },\n { label: \"\", value: { type: \"cancel\" }, separator: true },\n { label: \"Delete all accounts\", value: { type: \"delete-all\" }, color: \"red\" },\n ];\n\n while (true) {\n const subtitle = `${accounts.length} account(s) registered`;\n const result = await select(items, {\n message: \"Claude Multi-Auth\",\n subtitle,\n });\n\n if (!result) return { type: \"cancel\" };\n\n if (result.type === \"delete-all\") {\n const confirmed = await confirm(\"Delete ALL accounts? This cannot be undone.\");\n if (!confirmed) continue;\n }\n\n return result;\n }\n}\n\nexport async function showManageAccounts(accounts: ManagedAccount[]): Promise<{ action: AccountAction; account?: ManagedAccount }> {\n const items: MenuItem<ManagedAccount | null>[] = [\n { label: \"Back\", value: null },\n { label: \"\", value: null, separator: true },\n ...accounts.map(buildAccountMenuItem),\n ];\n\n const selected = await select(items, {\n message: \"Manage Accounts\",\n subtitle: \"Select an account to manage\",\n });\n\n if (!selected) return { action: \"back\" };\n\n return showAccountDetails(selected);\n}\n\nasync function showAccountDetails(account: ManagedAccount): Promise<{ action: AccountAction; account: ManagedAccount }> {\n const label = getAccountLabel(account);\n const status = getAccountStatus(account);\n const badge = STATUS_BADGE[status];\n\n console.log(\"\");\n console.log(`${ANSI.bold}Account: ${label} ${badge}${ANSI.reset}`);\n console.log(`${ANSI.dim}Added: ${formatDate(account.addedAt)}${ANSI.reset}`);\n console.log(`${ANSI.dim}Last used: ${formatRelativeTime(account.lastUsed)}${ANSI.reset}`);\n if (account.isAuthDisabled) {\n console.log(`${ANSI.red}Auth disabled: ${account.authDisabledReason ?? \"unknown\"}${ANSI.reset}`);\n }\n console.log(\"\");\n\n while (true) {\n const toggleLabel = account.enabled ? \"Disable account\" : \"Enable account\";\n const toggleColor = account.enabled ? \"yellow\" as const : \"green\" as const;\n\n const items: MenuItem<AccountAction>[] = [\n { label: \"Back\", value: \"back\" },\n ];\n\n items.push({ label: toggleLabel, value: \"toggle\", color: toggleColor });\n\n items.push({ label: \"Re-authenticate\", value: \"retry-auth\", color: \"cyan\" });\n\n items.push({ label: \"Delete this account\", value: \"delete\", color: \"red\" });\n\n const result = await select(items, {\n message: \"Account options\",\n subtitle: label,\n });\n\n if (result === \"delete\") {\n const confirmed = await confirm(`Delete ${label}?`);\n if (!confirmed) continue;\n }\n\n return { action: result ?? \"cancel\", account };\n }\n}\n\nfunction getUsageColor(utilization: number): string {\n if (utilization >= 90) return ANSI.red;\n if (utilization >= 60) return ANSI.yellow;\n return ANSI.green;\n}\n\nfunction createProgressBar(utilization: number, width = 20): string {\n const filled = Math.round((utilization / 100) * width);\n const empty = width - filled;\n const color = getUsageColor(utilization);\n return `${color}${\"█\".repeat(filled)}${ANSI.reset}${\"░\".repeat(empty)} ${color}${Math.round(utilization)}% used${ANSI.reset}`;\n}\n\nfunction formatResetTime(resetAt: string | null): string {\n if (!resetAt) return \"\";\n const date = new Date(resetAt);\n const now = new Date();\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n const timeStr = date.toLocaleTimeString(undefined, { hour: \"numeric\", minute: \"2-digit\", hour12: true });\n\n const isSameDay = date.getFullYear() === now.getFullYear()\n && date.getMonth() === now.getMonth()\n && date.getDate() === now.getDate();\n\n if (isSameDay) {\n return ` (resets ${timeStr}, ${tz})`;\n }\n const dateStr = date.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n return ` (resets ${dateStr} ${timeStr}, ${tz})`;\n}\n\nfunction printUsageEntry(name: string, entry: { utilization: number; resets_at: string | null } | null, isLast: boolean): void {\n const connector = isLast ? \"└─\" : \"├─\";\n if (!entry) {\n console.log(` ${connector} ${name.padEnd(16)} no data`);\n return;\n }\n const bar = createProgressBar(entry.utilization);\n const reset = entry.resets_at\n ? formatResetTime(entry.resets_at)\n : \"\";\n console.log(` ${connector} ${name.padEnd(16)} ${bar}${reset}`);\n}\n\nexport function printQuotaReport(account: ManagedAccount, usage: UsageLimits): void {\n const label = getAccountLabel(account);\n const status = getAccountStatus(account);\n const badge = STATUS_BADGE[status];\n const planLabel = getPlanLabel(account) || \"Free\";\n\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n console.log(` ${label} ${badge}`);\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n if (account.email) {\n console.log(` 📧 ${account.email}`);\n }\n console.log(` 📋 ${planLabel}`);\n\n console.log(`\\n └─ Claude Quota`);\n printUsageEntry(\"Current session\", usage.five_hour, false);\n printUsageEntry(\"Current week\", usage.seven_day, !usage.seven_day_sonnet);\n if (usage.seven_day_sonnet) {\n printUsageEntry(\"Sonnet only\", usage.seven_day_sonnet, true);\n }\n console.log(\"\");\n}\n\nconst STRATEGY_DESCRIPTIONS: Record<AccountSelectionStrategy, string> = {\n \"sticky\": \"Same account until rate-limited\",\n \"round-robin\": \"Rotate every request\",\n \"hybrid\": \"Score-based (usage + health)\",\n};\n\nexport async function showStrategySelect(current: AccountSelectionStrategy): Promise<AccountSelectionStrategy | null> {\n const strategies: AccountSelectionStrategy[] = [\"sticky\", \"round-robin\", \"hybrid\"];\n\n const items: MenuItem<AccountSelectionStrategy>[] = strategies.map((s) => ({\n label: `${s}${s === current ? \" (current)\" : \"\"}`,\n hint: STRATEGY_DESCRIPTIONS[s],\n value: s,\n }));\n\n return select(items, {\n message: \"Load Balancing Strategy\",\n subtitle: `Current: ${current}`,\n });\n}\n\nexport function printQuotaError(account: ManagedAccount, error: string): void {\n const label = getAccountLabel(account);\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n console.log(` ${label}`);\n if (account.email) {\n console.log(` 📧 ${account.email}`);\n }\n console.log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);\n console.log(` ${ANSI.red}Error: ${error}${ANSI.reset}\\n`);\n}\n","import {\n AccountStore as CoreAccountStore,\n type DiskCredentials,\n} from \"opencode-multi-account-core\";\nimport { ACCOUNTS_FILENAME } from \"../shared/constants\";\n\nexport class AccountStore extends CoreAccountStore {\n constructor() {\n super(ACCOUNTS_FILENAME);\n }\n}\n\nexport type { DiskCredentials };\n","import { AccountManager } from \"../accounts/manager\";\nimport { fetchProfile, fetchUsage } from \"../usage\";\nimport { isTokenExpired } from \"../oauth/token\";\nimport { getConfig, updateConfigField } from \"../shared/config\";\nimport { isTTY } from \"./menu/ansi\";\nimport { showAuthMenu, showManageAccounts, showStrategySelect, printQuotaReport, printQuotaError } from \"./menu/menu\";\nimport { createMinimalClient, getAccountLabel } from \"../shared/utils\";\nimport { AccountStore } from \"../accounts/store\";\nimport { loginWithOAuth } from \"../oauth/anthropic-oauth\";\nimport { randomUUID } from \"node:crypto\";\nimport type { ManagedAccount, OAuthCredentials, PluginClient, StoredAccount } from \"../shared/types\";\n\ntype OAuthCallbackResponse =\n | ({ type: \"success\" } & { refresh: string; access: string; expires: number })\n | { type: \"failed\" };\n\nexport interface OAuthFlowResult {\n url: string;\n instructions: string;\n method: \"auto\";\n callback(code?: string): Promise<OAuthCallbackResponse>;\n _email?: string;\n _account?: Partial<StoredAccount>;\n}\n\nfunction makeFailedFlowResult(message: string): OAuthFlowResult {\n return {\n url: \"\",\n instructions: message,\n method: \"auto\",\n callback: async () => ({ type: \"failed\" }),\n };\n}\n\nfunction toOAuthCredentials(result: OAuthCallbackResponse & { type: \"success\" }): OAuthCredentials {\n return { type: \"oauth\", refresh: result.refresh, access: result.access, expires: result.expires };\n}\n\nfunction asOAuthCallbackResponse(account: Partial<StoredAccount>): OAuthCallbackResponse {\n if (!account.refreshToken || !account.accessToken || typeof account.expiresAt !== \"number\") {\n return { type: \"failed\" };\n }\n\n return {\n type: \"success\",\n refresh: account.refreshToken,\n access: account.accessToken,\n expires: account.expiresAt,\n };\n}\n\nfunction extractAccountMetadata(account: Partial<StoredAccount> | undefined): Partial<StoredAccount> | undefined {\n if (!account) return undefined;\n\n return {\n accountId: account.accountId,\n accountUuid: account.accountUuid,\n deviceId: account.deviceId,\n email: account.email,\n planTier: account.planTier,\n };\n}\n\nasync function startOAuthFlow(): Promise<OAuthFlowResult> {\n try {\n const completedAccount = await loginWithOAuth({\n onAuth: (info) => {\n const instruction = info.instructions ?? \"Complete authorization in your browser.\";\n const urlLine = info.url ? `\\nAuth URL (manual fallback): ${info.url}` : \"\";\n console.log(`\\n${instruction}${urlLine}\\n`);\n },\n });\n\n const completedResult = asOAuthCallbackResponse(completedAccount);\n const accountEmail = completedAccount.email;\n\n return {\n url: \"\",\n instructions: \"\",\n method: \"auto\",\n callback: async () => completedResult,\n _email: accountEmail,\n _account: completedAccount,\n };\n } catch {\n return makeFailedFlowResult(\"Failed to start OAuth flow\");\n }\n}\n\nfunction wrapCallbackWithAccountReplace(\n result: OAuthFlowResult,\n manager: AccountManager,\n targetAccount: ManagedAccount,\n): OAuthFlowResult {\n const originalCallback = result.callback;\n return {\n ...result,\n callback: async function (code?: string) {\n const callbackResult = await originalCallback(code);\n\n if (callbackResult.type === \"success\") {\n if (targetAccount.uuid) {\n await manager.replaceAccountCredentials(\n targetAccount.uuid,\n toOAuthCredentials(callbackResult),\n extractAccountMetadata(result._account),\n );\n }\n console.log(`\\n✅ ${getAccountLabel(targetAccount)} re-authenticated successfully.\\n`);\n }\n\n return callbackResult;\n },\n };\n}\n\nfunction wrapCallbackWithManagerSync(\n result: OAuthFlowResult & { _email?: string; _account?: Partial<StoredAccount> },\n manager: AccountManager | null,\n): OAuthFlowResult {\n const originalCallback = result.callback;\n const email = result._email;\n return {\n ...result,\n callback: async function (code?: string) {\n const callbackResult = await originalCallback(code);\n\n if (callbackResult.type === \"success\") {\n const auth = toOAuthCredentials(callbackResult);\n const metadata = extractAccountMetadata(result._account);\n\n if (manager) {\n const countBefore = manager.getAccounts().length;\n await manager.addAccount(auth, email, metadata);\n const countAfter = manager.getAccounts().length;\n const added = countAfter > countBefore;\n console.log(added\n ? `\\n✅ Account added to multi-auth pool (${countAfter} total).\\n`\n : `\\nℹ️ Account already exists in multi-auth pool (${countAfter} total).\\n`);\n } else {\n await persistFallback(auth, email, metadata);\n console.log(\"\\n✅ Account saved.\\n\");\n }\n }\n\n return callbackResult;\n },\n };\n}\n\nasync function persistFallback(\n auth: OAuthCredentials,\n email?: string,\n metadata?: Partial<StoredAccount>,\n): Promise<void> {\n try {\n const store = new AccountStore();\n const now = Date.now();\n const account: StoredAccount = {\n uuid: randomUUID(),\n email,\n refreshToken: auth.refresh,\n accessToken: auth.access,\n expiresAt: auth.expires,\n addedAt: now,\n lastUsed: now,\n enabled: true,\n planTier: \"\",\n consecutiveAuthFailures: 0,\n isAuthDisabled: false,\n accountId: metadata?.accountId,\n accountUuid: metadata?.accountUuid,\n deviceId: metadata?.deviceId,\n };\n if (metadata?.planTier !== undefined) account.planTier = metadata.planTier;\n await store.addAccount(account);\n await store.setActiveUuid(account.uuid);\n } catch {\n // best-effort\n }\n}\n\nexport async function handleAuthorize(\n manager: AccountManager | null,\n inputs?: Record<string, string>,\n client?: PluginClient,\n): Promise<OAuthFlowResult> {\n if (!inputs || !isTTY()) {\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n }\n\n const effectiveManager = manager ?? await loadManagerFromDisk(client);\n if (!effectiveManager || effectiveManager.getAccounts().length === 0) {\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n }\n\n return runAccountManagementMenu(effectiveManager, client);\n}\n\nasync function loadManagerFromDisk(client?: PluginClient): Promise<AccountManager | null> {\n const store = new AccountStore();\n const stored = await store.load();\n if (stored.accounts.length === 0) return null;\n const emptyAuth: OAuthCredentials = { type: \"oauth\", refresh: \"\", access: \"\", expires: 0 };\n return AccountManager.create(store, emptyAuth, client);\n}\n\nasync function runAccountManagementMenu(\n manager: AccountManager,\n client?: PluginClient,\n): Promise<OAuthFlowResult> {\n while (true) {\n const allAccounts = manager.getAccounts();\n const menuAction = await showAuthMenu(allAccounts);\n\n switch (menuAction.type) {\n case \"add\":\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n\n case \"check-quotas\":\n await handleCheckQuotas(manager, client);\n continue;\n\n case \"manage\": {\n const result = await showManageAccounts(allAccounts);\n if (result.action === \"back\" || result.action === \"cancel\") continue;\n const manageResult = await handleManageAction(manager, result.action, result.account, client);\n if (manageResult.triggerOAuth) {\n return wrapCallbackWithAccountReplace(await startOAuthFlow(), manager, manageResult.account);\n }\n continue;\n }\n\n case \"load-balancing\":\n await handleLoadBalancing();\n continue;\n\n case \"delete-all\":\n await manager.clearAllAccounts();\n console.log(\"\\nAll accounts deleted.\\n\");\n return wrapCallbackWithManagerSync(await startOAuthFlow(), manager);\n\n case \"cancel\":\n return makeFailedFlowResult(\"Authentication cancelled\");\n }\n }\n}\n\nasync function handleCheckQuotas(manager: AccountManager, client?: PluginClient): Promise<void> {\n await manager.refresh();\n const accounts = manager.getAccounts();\n const effectiveClient = client ?? createMinimalClient();\n if (client) manager.setClient(client);\n console.log(`\\n📊 Checking quotas for ${accounts.length} account(s)...\\n`);\n\n for (const account of accounts) {\n await checkAccountQuota(manager, account, effectiveClient);\n }\n}\n\nasync function checkAccountQuota(\n manager: AccountManager,\n account: ManagedAccount,\n client: PluginClient,\n): Promise<void> {\n if (account.isAuthDisabled || !account.accessToken || isTokenExpired(account)) {\n if (!account.uuid) {\n printQuotaError(account, \"Missing account UUID\");\n return;\n }\n\n const refreshResult = await manager.ensureValidToken(account.uuid, client);\n if (!refreshResult.ok) {\n await manager.markAuthFailure(account.uuid, refreshResult);\n await manager.refresh();\n\n const updatedAccount = manager.getAccounts().find((candidate) => candidate.uuid === account.uuid);\n if (!updatedAccount) {\n printQuotaError(account, refreshResult.permanent\n ? \"Refresh failed permanently; account removed\"\n : \"Failed to refresh token\");\n return;\n }\n\n printQuotaError(updatedAccount, updatedAccount.isAuthDisabled\n ? `${updatedAccount.authDisabledReason ?? \"Auth disabled\"} (refresh failed)`\n : \"Failed to refresh token\");\n return;\n }\n\n await manager.refresh();\n }\n\n const freshAccounts = manager.getAccounts();\n const freshAccount = freshAccounts.find((candidate) => candidate.uuid === account.uuid);\n\n if (!freshAccount?.accessToken) {\n printQuotaError(account, \"No access token available\");\n return;\n }\n\n const usageResult = await fetchUsage(freshAccount.accessToken);\n if (!usageResult.ok) {\n printQuotaError(freshAccount, `Failed to fetch usage: ${usageResult.reason}`);\n return;\n }\n\n if (freshAccount.uuid) {\n await manager.applyUsageCache(freshAccount.uuid, usageResult.data);\n }\n\n let reportAccount = freshAccount;\n const profileResult = await fetchProfile(freshAccount.accessToken);\n if (profileResult.ok) {\n if (freshAccount.uuid) {\n await manager.applyProfileCache(freshAccount.uuid, profileResult.data);\n }\n reportAccount = {\n ...freshAccount,\n email: profileResult.data.email ?? freshAccount.email,\n planTier: profileResult.data.planTier,\n };\n }\n\n printQuotaReport(reportAccount, usageResult.data);\n}\n\nasync function handleLoadBalancing(): Promise<void> {\n const current = getConfig().account_selection_strategy;\n const selected = await showStrategySelect(current);\n\n if (!selected || selected === current) return;\n\n await updateConfigField(\"account_selection_strategy\", selected);\n console.log(`\\nLoad balancing strategy changed: ${current} → ${selected}\\n`);\n}\n\ntype ManageActionResult =\n | { triggerOAuth: false }\n | { triggerOAuth: true; account: ManagedAccount };\n\nasync function handleManageAction(\n manager: AccountManager,\n action: string,\n account?: ManagedAccount,\n client?: PluginClient,\n): Promise<ManageActionResult> {\n if (!account) return { triggerOAuth: false };\n\n const label = getAccountLabel(account);\n\n switch (action) {\n case \"toggle\":\n if (!account.uuid) break;\n await manager.toggleEnabled(account.uuid);\n await manager.refresh();\n {\n const updated = manager.getAccounts().find((candidate) => candidate.uuid === account.uuid);\n console.log(`\\n${label} ${updated?.enabled ? \"enabled\" : \"disabled\"}.\\n`);\n }\n break;\n\n case \"delete\":\n if (!account.uuid) break;\n {\n const removed = await manager.removeAccount(account.index);\n console.log(removed ? \"\\nAccount deleted.\\n\" : \"\\nFailed to delete account.\\n\");\n }\n break;\n\n case \"retry-auth\": {\n if (!account.uuid) break;\n const effectiveClient = client ?? createMinimalClient();\n console.log(`\\nRetrying authentication for ${label}...\\n`);\n const result = await manager.retryAuth(account.uuid, effectiveClient);\n\n if (result.ok) {\n console.log(`✅ ${label} re-authenticated successfully.\\n`);\n } else {\n console.log(\"Token refresh failed — starting OAuth flow...\\n\");\n return { triggerOAuth: true, account };\n }\n break;\n }\n }\n\n return { triggerOAuth: false };\n}\n","import { createProactiveRefreshQueueForProvider } from \"opencode-multi-account-core\";\nimport { getConfig } from \"../shared/config\";\nimport { isTokenExpired, refreshToken } from \"../oauth/token\";\nimport { debugLog } from \"../shared/utils\";\n\nexport const ProactiveRefreshQueue = createProactiveRefreshQueueForProvider({\n providerAuthId: \"anthropic\",\n getConfig,\n isTokenExpired,\n refreshToken,\n debugLog,\n});\n\nexport type ProactiveRefreshQueue = InstanceType<typeof ProactiveRefreshQueue>;\n","import { AccountStore } from \"../accounts/store\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport { isTokenExpired, refreshToken } from \"../oauth/token\";\nimport { TokenRefreshError } from \"opencode-multi-account-core\";\nimport {\n applyRequestToolMasking,\n extractModelIdFromBody,\n extractToolNamesFromRequestBody,\n transformRequestUrl,\n} from \"../request/transform\";\nimport {\n clampEffortAfterRejection,\n clampUnsupportedEffortInBody,\n parseEffortCapabilityRejection,\n} from \"@kyoli-gam/provider-claude-code/opencode\";\nimport {\n addExcludedBeta,\n ensureOauthBeta,\n extractRejectedBetas,\n getExcludedBetas,\n getModelBetas,\n isUnexpectedBetaError,\n isLongContextError,\n LONG_CONTEXT_BETAS,\n} from \"../request/betas\";\nimport {\n filterBillableBetas,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"../request/headers\";\nimport {\n buildUpstreamRequest,\n createStreamingReverseMapper,\n getDanglingToolUseError,\n OPENCODE_OUTPUT_EFFORT_HEADER,\n readOpenCodeVariantEffort,\n stampClaudeCodeCch,\n getUpstreamSessionId,\n reverseMapResponse,\n type OutputEffortValue,\n} from \"../request/upstream-request\";\nimport { claudeCodeIntegration, type ClaudeIdentity } from \"../claude-code\";\nimport type { PluginClient, StoredAccount } from \"../shared/types\";\nimport { recordObservedToolNames } from \"../tools/observation\";\nimport { debugLog } from \"../shared/utils\";\nimport { enrich429, sanitizeError } from \"../shared/error-utils\";\nimport { computePacingDelay, resolvePacingConfig } from \"./pacing\";\n\ntype BaseFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\ntype JsonRecord = Record<string, unknown>;\ntype Message = JsonRecord & {\n role?: string;\n content?: unknown;\n};\n\ninterface AccountRuntime {\n fetch: BaseFetch;\n}\n\nconst TOKEN_REFRESH_PERMANENT_FAILURE_STATUS = 401;\nconst ASSISTANT_PREFILL_UNSUPPORTED_MESSAGE = \"This model does not support assistant message prefill\";\nconst NON_SUBSCRIPTION_BILLING_BACKOFF_MS = 24 * 60 * 60 * 1000;\n\nfunction mergeHeaders(target: Record<string, string>, headers: HeadersInit | undefined): void {\n if (!headers) {\n return;\n }\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n target[key.toLowerCase()] = value;\n });\n return;\n }\n\n if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n target[String(key).toLowerCase()] = String(value);\n }\n return;\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n target[key.toLowerCase()] = String(value);\n }\n }\n}\n\nfunction extractIncomingHeaders(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (input instanceof Request) {\n mergeHeaders(headers, input.headers);\n }\n\n mergeHeaders(headers, init?.headers);\n return headers;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readHeaderOutputEffort(headers: Record<string, string>): OutputEffortValue | undefined {\n return readOpenCodeVariantEffort(headers[OPENCODE_OUTPUT_EFFORT_HEADER]);\n}\n\nfunction messageHasToolUse(message: Message): boolean {\n return Array.isArray(message.content)\n && message.content.some((block) => isRecord(block) && block.type === \"tool_use\");\n}\n\nfunction removeTrailingAssistantPrefillBody(body: BodyInit | null | undefined): string | null {\n if (typeof body !== \"string\") {\n return null;\n }\n\n try {\n const parsed = JSON.parse(body) as unknown;\n if (!isRecord(parsed) || !Array.isArray(parsed.messages)) {\n return null;\n }\n\n const messages = parsed.messages as Message[];\n const originalLength = messages.length;\n\n while (messages.length > 0) {\n const lastMessage = messages[messages.length - 1];\n if (!lastMessage || lastMessage.role !== \"assistant\" || messageHasToolUse(lastMessage)) {\n break;\n }\n\n messages.pop();\n }\n\n return messages.length === originalLength ? null : JSON.stringify(parsed);\n } catch {\n return null;\n }\n}\n\nasync function isAssistantPrefillUnsupportedResponse(response: Response): Promise<boolean> {\n if (response.status !== 400) {\n return false;\n }\n\n return (await response.clone().text()).includes(ASSISTANT_PREFILL_UNSUPPORTED_MESSAGE);\n}\n\nfunction splitBetaValues(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return value.split(\",\").map((entry) => entry.trim()).filter(Boolean);\n}\n\nfunction deduplicateBetas(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))];\n}\n\nfunction excludeBetas(values: string[], excludedBetas: Set<string>): string[] {\n if (excludedBetas.size === 0) {\n return values;\n }\n\n return values.filter((beta) => !excludedBetas.has(beta));\n}\n\nfunction transformBodyToUpstream(\n body: string,\n identity: ClaudeIdentity,\n sessionId: string,\n outputEffort?: OutputEffortValue,\n): { body: string; reverseLookup: Map<string, string>; validationError: string | null } {\n try {\n const parsed = JSON.parse(body) as unknown;\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return { body, reverseLookup: new Map(), validationError: null };\n }\n\n const template = claudeCodeIntegration.loadTemplate();\n\n const upstreamRequest = buildUpstreamRequest(\n parsed as Record<string, unknown>,\n identity,\n template,\n { sessionId, outputEffort },\n );\n\n const validationError = getDanglingToolUseError(\n Array.isArray(upstreamRequest.messages) ? upstreamRequest.messages as Array<Record<string, unknown>> : [],\n );\n\n const maskedRequest = applyRequestToolMasking(upstreamRequest as Record<string, unknown>, template.tool_names) as {\n body: string;\n reverseLookup: Map<string, string>;\n };\n\n return {\n ...maskedRequest,\n validationError,\n };\n } catch {\n return { body, reverseLookup: new Map(), validationError: null };\n }\n}\n\nfunction resolveAccountIdentity(storedAccount: StoredAccount, fallback: ClaudeIdentity): ClaudeIdentity {\n return {\n deviceId: storedAccount.deviceId || fallback.deviceId,\n accountUuid: storedAccount.accountUuid || storedAccount.accountId || fallback.accountUuid || storedAccount.uuid || \"\",\n };\n}\n\nasync function applyResponseReverseLookup(\n response: Response,\n reverseLookup: Map<string, string>,\n): Promise<Response> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"text/event-stream\")) {\n return createStreamingReverseMapper(response, reverseLookup);\n }\n\n if (!contentType.includes(\"application/json\") || reverseLookup.size === 0) {\n return response;\n }\n\n try {\n const payload = await response.clone().json();\n const remapped = reverseMapResponse(payload, reverseLookup);\n return new Response(JSON.stringify(remapped), {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers(response.headers),\n });\n } catch {\n return response;\n }\n}\n\nasync function enrichRateLimitResponse(response: Response): Promise<Response> {\n if (response.status !== 429) {\n return response;\n }\n\n const body = await response.clone().text();\n const enrichedBody = enrich429(body, response.headers);\n if (enrichedBody === body) {\n return response;\n }\n\n return new Response(enrichedBody, {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers(response.headers),\n });\n}\n\nfunction isNonSubscriptionBillingClaim(claim: string | null): claim is string {\n if (!claim || claim === \"unknown\") return false;\n const normalized = claim.toLowerCase();\n return normalized === \"api\"\n || normalized.startsWith(\"api_\")\n || normalized === \"overage\"\n || normalized.startsWith(\"overage_\")\n || normalized.includes(\"credit\")\n || normalized.startsWith(\"sdk\");\n}\n\nasync function blockNonSubscriptionBillingClaim(response: Response): Promise<Response> {\n const claim = response.headers.get(\"anthropic-ratelimit-unified-representative-claim\");\n if (!isNonSubscriptionBillingClaim(claim)) {\n return response;\n }\n\n await response.body?.cancel().catch(() => undefined);\n const headers = new Headers(response.headers);\n headers.set(\"content-type\", \"application/json\");\n headers.set(\"retry-after-ms\", String(NON_SUBSCRIPTION_BILLING_BACKOFF_MS));\n headers.set(\"x-kyoli-non-subscription-billing-claim\", claim);\n\n return new Response(\n JSON.stringify({\n error: {\n type: \"non_subscription_billing_claim\",\n message: `Claude Code response used non-subscription billing claim '${claim}'. Kyoli blocked this account to avoid API/credit billing bleed.`,\n },\n }),\n {\n status: 429,\n headers,\n },\n );\n}\n\nexport interface PacingTestOverrides {\n now?: () => number;\n sleep?: (ms: number) => Promise<void>;\n}\n\nexport class AccountRuntimeFactory {\n private runtimes = new Map<string, AccountRuntime>();\n private initLocks = new Map<string, Promise<AccountRuntime>>();\n private effortSupportByModel = new Map<string, string[]>();\n private lastRequestTime = 0;\n private pacingGate = Promise.resolve();\n private pacingTestOverrides: PacingTestOverrides = {};\n private tokenRefreshLocks = new Map<string, Promise<{ accessToken: string; expiresAt: number }>>();\n\n constructor(\n private readonly store: AccountStore,\n private readonly client: PluginClient,\n private readonly identity: ClaudeIdentity = claudeCodeIntegration.loadIdentity(),\n ) {}\n\n setPacingTestOverrides(overrides: PacingTestOverrides): void {\n this.pacingTestOverrides = overrides;\n }\n\n resetPacingForTest(): void {\n this.lastRequestTime = 0;\n this.pacingGate = Promise.resolve();\n this.pacingTestOverrides = {};\n }\n\n async getRuntime(uuid: string): Promise<AccountRuntime> {\n const cached = this.runtimes.get(uuid);\n if (cached) return cached;\n\n const existing = this.initLocks.get(uuid);\n if (existing) return existing;\n\n const initPromise = this.createRuntime(uuid);\n this.initLocks.set(uuid, initPromise);\n\n try {\n const runtime = await initPromise;\n this.runtimes.set(uuid, runtime);\n return runtime;\n } finally {\n this.initLocks.delete(uuid);\n }\n }\n\n invalidate(uuid: string): void {\n this.runtimes.delete(uuid);\n }\n\n invalidateAll(): void {\n this.runtimes.clear();\n }\n\n private async ensureFreshToken(\n storedAccount: StoredAccount,\n uuid: string,\n ): Promise<{ accessToken: string; expiresAt: number }> {\n const existingRefresh = this.tokenRefreshLocks.get(uuid);\n if (existingRefresh) return existingRefresh;\n\n const refreshPromise = this.refreshAndPersistToken(storedAccount, uuid);\n this.tokenRefreshLocks.set(uuid, refreshPromise);\n\n try {\n return await refreshPromise;\n } finally {\n this.tokenRefreshLocks.delete(uuid);\n }\n }\n\n private async refreshAndPersistToken(\n storedAccount: StoredAccount,\n uuid: string,\n ): Promise<{ accessToken: string; expiresAt: number }> {\n const latestStorage = await this.store.load();\n const latestAccount = latestStorage.accounts.find((account: StoredAccount) => account.uuid === uuid);\n const accountToRefresh = latestAccount ?? storedAccount;\n const latestAccessToken = accountToRefresh.accessToken;\n\n if (\n latestAccessToken\n && accountToRefresh.expiresAt\n && !isTokenExpired({ accessToken: latestAccessToken, expiresAt: accountToRefresh.expiresAt })\n ) {\n return { accessToken: latestAccessToken, expiresAt: accountToRefresh.expiresAt };\n }\n\n const refreshed = await refreshToken(accountToRefresh.refreshToken, uuid, this.client);\n if (!refreshed.ok) {\n throw new TokenRefreshError(\n refreshed.permanent,\n refreshed.permanent ? TOKEN_REFRESH_PERMANENT_FAILURE_STATUS : undefined,\n );\n }\n\n await this.store.mutateAccount(uuid, (account) => {\n account.accessToken = refreshed.patch.accessToken;\n account.expiresAt = refreshed.patch.expiresAt;\n if (refreshed.patch.refreshToken) account.refreshToken = refreshed.patch.refreshToken;\n if (refreshed.patch.uuid) account.uuid = refreshed.patch.uuid;\n if (refreshed.patch.accountId) account.accountId = refreshed.patch.accountId;\n if (refreshed.patch.accountUuid && !account.accountUuid) account.accountUuid = refreshed.patch.accountUuid;\n if (refreshed.patch.deviceId && !account.deviceId) account.deviceId = refreshed.patch.deviceId;\n if (refreshed.patch.email) account.email = refreshed.patch.email;\n account.consecutiveAuthFailures = 0;\n account.isAuthDisabled = false;\n account.authDisabledReason = undefined;\n });\n\n this.client.auth\n .set({\n path: { id: ANTHROPIC_OAUTH_ADAPTER.authProviderId },\n body: {\n type: \"oauth\",\n refresh: refreshed.patch.refreshToken ?? accountToRefresh.refreshToken,\n access: refreshed.patch.accessToken,\n expires: refreshed.patch.expiresAt,\n },\n })\n .catch(() => {});\n\n return { accessToken: refreshed.patch.accessToken, expiresAt: refreshed.patch.expiresAt };\n }\n\n private buildOutboundHeaders(\n incomingHeaders: Record<string, string>,\n sessionId: string,\n accessToken: string,\n modelId: string,\n excludedBetas: Set<string>,\n ): HeadersInit {\n const mergedBetas = deduplicateBetas(ensureOauthBeta([\n ...getModelBetas(modelId, excludedBetas),\n ...excludeBetas(splitBetaValues(incomingHeaders[\"anthropic-beta\"]), excludedBetas),\n ])).join(\",\");\n\n const outbound: Record<string, string> = {\n ...incomingHeaders,\n ...getStaticHeaders(),\n ...getPerRequestHeaders(sessionId),\n \"authorization\": `Bearer ${accessToken}`,\n \"anthropic-beta\": filterBillableBetas(mergedBetas),\n };\n delete outbound[\"x-api-key\"];\n\n return orderHeadersForOutbound(outbound);\n }\n\n private async executeTransformedFetch(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n accessToken: string,\n identity: ClaudeIdentity,\n ): Promise<Response> {\n const transformedInput = transformRequestUrl(input);\n const modelId = extractModelIdFromBody(init?.body);\n const excludedBetas = getExcludedBetas(modelId);\n\n const incomingHeaders = extractIncomingHeaders(transformedInput, init);\n const sessionId = incomingHeaders[\"x-claude-code-session-id\"] ?? getUpstreamSessionId();\n const outputEffort = readHeaderOutputEffort(incomingHeaders);\n delete incomingHeaders[OPENCODE_OUTPUT_EFFORT_HEADER];\n const headers = this.buildOutboundHeaders(\n incomingHeaders,\n sessionId,\n accessToken,\n modelId,\n excludedBetas,\n );\n\n if (typeof init?.body === \"string\") {\n void recordObservedToolNames(extractToolNamesFromRequestBody(init.body)).catch(() => {});\n }\n\n const transformedRequest = typeof init?.body === \"string\"\n ? transformBodyToUpstream(init.body, identity, sessionId, outputEffort)\n : { body: init?.body, reverseLookup: new Map<string, string>(), validationError: null };\n\n if (transformedRequest.validationError) {\n return new Response(JSON.stringify({\n error: {\n message: transformedRequest.validationError,\n type: \"invalid_request_error\",\n },\n }), {\n status: 400,\n headers: { \"content-type\": \"application/json\" },\n });\n }\n\n const pacingCfg = resolvePacingConfig();\n const getNow = this.pacingTestOverrides.now ?? Date.now;\n const sleepFn = this.pacingTestOverrides.sleep\n ?? ((ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)));\n\n const reservePacingSlot = async (): Promise<void> => {\n let releaseGate: (() => void) | undefined;\n const previousGate = this.pacingGate;\n this.pacingGate = new Promise<void>((resolve) => {\n releaseGate = resolve;\n });\n\n await previousGate;\n\n try {\n const delay = computePacingDelay(getNow(), this.lastRequestTime, pacingCfg);\n if (delay > 0) {\n await sleepFn(delay);\n }\n this.lastRequestTime = getNow();\n } finally {\n releaseGate?.();\n }\n };\n\n const performFetch = async (requestHeaders: HeadersInit, requestBody: BodyInit | null | undefined): Promise<Response> => {\n await reservePacingSlot();\n const stampedBody = typeof requestBody === \"string\"\n ? stampClaudeCodeCch(requestBody)\n : requestBody;\n\n try {\n const response = await fetch(transformedInput, {\n ...init,\n headers: requestHeaders,\n body: stampedBody,\n });\n return await enrichRateLimitResponse(await blockNonSubscriptionBillingClaim(response));\n } catch (error) {\n debugLog(this.client, \"Anthropic upstream fetch failed\", {\n error: sanitizeError(error),\n });\n throw error;\n }\n };\n\n let outboundBody = clampUnsupportedEffortInBody(\n transformedRequest.body,\n this.effortSupportByModel,\n ).body;\n const retryEffortCapability = async (\n currentResponse: Response,\n requestHeaders: HeadersInit,\n ): Promise<Response> => {\n if (currentResponse.status !== 400) {\n return currentResponse;\n }\n\n const responseBody = await currentResponse.clone().text().catch(() => \"\");\n const rejection = parseEffortCapabilityRejection(responseBody);\n if (!rejection) {\n return currentResponse;\n }\n\n const clamped = clampEffortAfterRejection(\n outboundBody,\n rejection,\n this.effortSupportByModel,\n );\n if (!clamped.changed) {\n return currentResponse;\n }\n\n outboundBody = clamped.body;\n return performFetch(requestHeaders, outboundBody);\n };\n\n let response = await performFetch(headers, outboundBody);\n response = await retryEffortCapability(response, headers);\n\n if (await isAssistantPrefillUnsupportedResponse(response)) {\n const retryBody = removeTrailingAssistantPrefillBody(outboundBody);\n if (retryBody) {\n outboundBody = retryBody;\n response = await performFetch(headers, outboundBody);\n response = await retryEffortCapability(response, headers);\n }\n }\n\n for (let attempt = 0; attempt < LONG_CONTEXT_BETAS.length; attempt += 1) {\n if (response.status !== 400 && response.status !== 429) {\n break;\n }\n\n const responseBody = await response.clone().text();\n if (!isLongContextError(responseBody) && !isUnexpectedBetaError(responseBody)) {\n break;\n }\n\n if (isUnexpectedBetaError(responseBody)) {\n const rejectedBetas = extractRejectedBetas(responseBody);\n if (rejectedBetas.length === 0) {\n break;\n }\n\n for (const rejectedBeta of rejectedBetas) {\n addExcludedBeta(modelId, rejectedBeta);\n }\n } else {\n const betasToExclude = LONG_CONTEXT_BETAS.filter((beta) => !getExcludedBetas(modelId).has(beta));\n if (betasToExclude.length === 0) {\n break;\n }\n\n for (const beta of betasToExclude) {\n addExcludedBeta(modelId, beta);\n }\n }\n\n const retryHeaders = this.buildOutboundHeaders(\n incomingHeaders,\n sessionId,\n accessToken,\n modelId,\n getExcludedBetas(modelId),\n );\n\n response = await performFetch(retryHeaders, outboundBody);\n response = await retryEffortCapability(response, retryHeaders);\n }\n\n return applyResponseReverseLookup(response, transformedRequest.reverseLookup);\n }\n\n private async createRuntime(uuid: string): Promise<AccountRuntime> {\n const fetchWithAccount: BaseFetch = async (input, init) => {\n const storage = await this.store.load();\n const storedAccount = storage.accounts.find((account: StoredAccount) => account.uuid === uuid);\n if (!storedAccount) {\n throw new Error(`No credentials found for account ${uuid}`);\n }\n\n let accessToken = storedAccount.accessToken;\n\n if (!accessToken || !storedAccount.expiresAt || isTokenExpired({ accessToken, expiresAt: storedAccount.expiresAt })) {\n ({ accessToken } = await this.ensureFreshToken(storedAccount, uuid));\n }\n\n if (!accessToken) {\n throw new Error(`No access token available for account ${uuid}`);\n }\n\n return this.executeTransformedFetch(\n input,\n init,\n accessToken,\n resolveAccountIdentity(storedAccount, this.identity),\n );\n };\n\n debugLog(this.client, `Runtime created for account ${uuid.slice(0, 8)}`);\n return { fetch: fetchWithAccount };\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport { resolveClaudeCodeModelAlias } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { ensureOauthBeta, getModelBetas } from \"./betas\";\nimport { claudeCodeIntegration } from \"../claude-code\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport {\n createStreamingReverseMapper,\n buildUpstreamRequest,\n} from \"./upstream-request\";\nimport {\n applyOutboundToolFlow,\n buildRequestScopedToolLookup,\n type ReverseLookup,\n} from \"../tools/flow\";\nimport {\n filterBillableBetas,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./headers\";\n\ntype JsonRecord = Record<string, unknown>;\ntype ToolEntry = { name?: string; [key: string]: unknown };\ntype RequestPayload = {\n model?: string;\n tools?: ToolEntry[];\n messages?: Array<Record<string, unknown>>;\n tool_choice?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction mergeHeaders(target: Record<string, string>, headers: HeadersInit | undefined): void {\n if (!headers) {\n return;\n }\n\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n target[key.toLowerCase()] = value;\n });\n return;\n }\n\n if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n target[String(key).toLowerCase()] = String(value);\n }\n return;\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (value !== undefined) {\n target[key.toLowerCase()] = String(value);\n }\n }\n}\n\nfunction getMergedIncomingHeaders(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (input instanceof Request) {\n mergeHeaders(headers, input.headers);\n }\n\n mergeHeaders(headers, init?.headers);\n return headers;\n}\n\nfunction splitHeaderValues(value: string | undefined): string[] {\n if (!value) {\n return [];\n }\n\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n\nfunction dedupeHeaderValues(values: string[]): string[] {\n return [...new Set(values.filter(Boolean))];\n}\n\nfunction excludeBetas(values: string[], excluded?: Set<string>): string[] {\n if (!excluded || excluded.size === 0) {\n return values;\n }\n\n return values.filter((value) => !excluded.has(value));\n}\n\nfunction resolveSessionId(headers: Record<string, string>): string {\n return headers[\"x-claude-code-session-id\"] ?? randomUUID();\n}\n\nfunction invertLookup(forwardLookup: ReadonlyMap<string, string>): ReverseLookup {\n const reverseLookup: ReverseLookup = new Map();\n\n for (const [originalName, upstreamName] of forwardLookup) {\n reverseLookup.set(upstreamName, originalName);\n }\n\n return reverseLookup;\n}\n\nexport function extractRequestToolMaskMap(body: string | undefined): ReverseLookup {\n if (!body) {\n return new Map();\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n return isRecord(parsed) ? buildRequestScopedToolLookup(parsed, claudeCodeIntegration.loadTemplate().tool_names) : new Map();\n } catch {\n return new Map();\n }\n}\n\nexport function applyRequestToolMasking(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): { body: string; reverseLookup: ReverseLookup } {\n return applyOutboundToolFlow(parsed, claudeToolNames);\n}\n\nexport function transformRequestBodyWithLookup(\n body: string | undefined,\n identity = claudeCodeIntegration.loadIdentity(),\n): { body: string | undefined; reverseLookup: ReverseLookup } {\n if (!body) {\n return { body, reverseLookup: new Map() };\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n if (!isRecord(parsed)) {\n return { body, reverseLookup: new Map() };\n }\n\n const template = claudeCodeIntegration.loadTemplate();\n const upstreamRequest = buildUpstreamRequest(parsed, identity, template);\n return applyRequestToolMasking(upstreamRequest as RequestPayload, template.tool_names);\n } catch {\n return { body, reverseLookup: new Map() };\n }\n}\n\nexport function buildRequestHeaders(\n input: RequestInfo | URL,\n init: RequestInit | undefined,\n accessToken: string,\n modelId = \"unknown\",\n excludedBetas?: Set<string>,\n): HeadersInit {\n const incomingHeaders = getMergedIncomingHeaders(input, init);\n const sessionId = resolveSessionId(incomingHeaders);\n const mergedBetas = dedupeHeaderValues(ensureOauthBeta([\n ...getModelBetas(modelId, excludedBetas),\n ...excludeBetas(splitHeaderValues(incomingHeaders[\"anthropic-beta\"]), excludedBetas),\n ])).join(\",\");\n\n const outboundHeaders: Record<string, string> = {\n ...incomingHeaders,\n ...getStaticHeaders(),\n ...getPerRequestHeaders(sessionId),\n authorization: `Bearer ${accessToken}`,\n \"anthropic-beta\": filterBillableBetas(mergedBetas),\n };\n\n delete outboundHeaders[\"x-api-key\"];\n\n return orderHeadersForOutbound(outboundHeaders);\n}\n\nexport function transformRequestBody(body: string | undefined): string | undefined {\n return transformRequestBodyWithLookup(body).body;\n}\n\nexport function extractModelIdFromBody(body: BodyInit | null | undefined): string {\n if (typeof body !== \"string\") {\n return \"unknown\";\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n return typeof parsed.model === \"string\" ? resolveClaudeCodeModelAlias(parsed.model) : \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nexport function transformRequestUrl(input: RequestInfo | URL): RequestInfo | URL {\n let url: URL | null = null;\n try {\n if (typeof input === \"string\" || input instanceof URL) {\n url = new URL(input.toString());\n } else if (input instanceof Request) {\n url = new URL(input.url);\n }\n } catch {\n return input;\n }\n\n if (\n ANTHROPIC_OAUTH_ADAPTER.transform.enableMessagesBetaQuery\n && url\n && url.pathname === \"/v1/messages\"\n && !url.searchParams.has(\"beta\")\n ) {\n url.searchParams.set(\"beta\", \"true\");\n return input instanceof Request ? new Request(url.toString(), input) : url;\n }\n\n return input;\n}\n\nexport function extractToolNamesFromRequestBody(body: string | undefined): string[] {\n if (!body) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(body) as RequestPayload;\n if (!Array.isArray(parsed.tools)) {\n return [];\n }\n\n return parsed.tools\n .map((tool) => (typeof tool.name === \"string\" ? tool.name : null))\n .filter((toolName): toolName is string => Boolean(toolName));\n } catch {\n return [];\n }\n}\n\nexport function createResponseStreamTransform(\n response: Response,\n reverseLookup: ReadonlyMap<string, string> = new Map(),\n): Response {\n return createStreamingReverseMapper(response, invertLookup(reverseLookup));\n}\n","import { claudeCodeIntegration } from \"../claude-code\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\n\nexport const FABLE_FALLBACK_CREDIT_BETA = \"fallback-credit-2026-06-01\";\nexport const MID_CONVERSATION_SYSTEM_BETA = \"mid-conversation-system-2026-04-07\";\nexport const EFFORT_BETA = \"effort-2025-11-24\";\n\nexport interface ModelOverride {\n exclude?: string[];\n add?: string[];\n}\n\nexport interface ModelConfig {\n baseBetas: string[];\n longContextBetas: string[];\n modelOverrides: Record<string, ModelOverride>;\n}\n\nfunction splitBetaFlags(value: string): string[] {\n return value\n .split(\",\")\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n\nexport const config: ModelConfig = {\n baseBetas: splitBetaFlags(ANTHROPIC_OAUTH_ADAPTER.requestBetaHeader),\n longContextBetas: [\"context-1m-2025-08-07\", \"context-management-2025-06-27\"],\n modelOverrides: {\n fable: {\n add: [FABLE_FALLBACK_CREDIT_BETA],\n },\n \"sonnet-5\": {\n add: [EFFORT_BETA],\n },\n sonnet: {\n exclude: [MID_CONVERSATION_SYSTEM_BETA],\n add: [EFFORT_BETA],\n },\n haiku: {\n exclude: [MID_CONVERSATION_SYSTEM_BETA, EFFORT_BETA],\n },\n \"4-6\": {\n add: [EFFORT_BETA],\n },\n },\n};\n\nexport function getCliVersion(): string {\n return claudeCodeIntegration.loadRequestProfile().cliVersion;\n}\n\nexport function getUserAgent(): string {\n return claudeCodeIntegration.loadRequestProfile().userAgent;\n}\n\nexport function getRequiredBetas(): string[] {\n return splitBetaFlags(\n process.env.ANTHROPIC_BETA_FLAGS\n ?? claudeCodeIntegration.loadRequestProfile().betaHeader\n ?? config.baseBetas.join(\",\"),\n );\n}\n\nexport function getModelOverride(modelId: string): ModelOverride | null {\n const lowerModelId = modelId.toLowerCase();\n for (const [pattern, override] of Object.entries(config.modelOverrides)) {\n if (lowerModelId.includes(pattern)) {\n return override;\n }\n }\n\n return null;\n}\n","import { resolveClaudeCodeModelAlias, isClaudeCode1mModelLabel } from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { config, getModelOverride, getRequiredBetas } from \"../model/config\";\n\nexport const LONG_CONTEXT_BETAS = config.longContextBetas;\nexport const OAUTH_BETA = \"oauth-2025-04-20\";\n\nconst excludedBetas = new Map<string, Set<string>>();\n\nlet lastBetaFlagsEnv = process.env.ANTHROPIC_BETA_FLAGS;\nlet lastModelId: string | undefined;\n\nexport function getExcludedBetas(modelId: string): Set<string> {\n const currentBetaFlags = process.env.ANTHROPIC_BETA_FLAGS;\n if (currentBetaFlags !== lastBetaFlagsEnv) {\n excludedBetas.clear();\n lastBetaFlagsEnv = currentBetaFlags;\n }\n\n if (lastModelId !== undefined && lastModelId !== modelId) {\n excludedBetas.clear();\n }\n lastModelId = modelId;\n\n return excludedBetas.get(modelId) ?? new Set();\n}\n\nexport function addExcludedBeta(modelId: string, beta: string): void {\n const nextExcludedBetas = excludedBetas.get(modelId) ?? new Set<string>();\n nextExcludedBetas.add(beta);\n excludedBetas.set(modelId, nextExcludedBetas);\n}\n\nexport function resetExcludedBetas(): void {\n excludedBetas.clear();\n lastModelId = undefined;\n lastBetaFlagsEnv = process.env.ANTHROPIC_BETA_FLAGS;\n}\n\nexport function isLongContextError(responseBody: string): boolean {\n return responseBody.includes(\"Extra usage is required for long context requests\")\n || responseBody.includes(\"long context beta is not yet available\");\n}\n\nexport function isUnexpectedBetaError(responseBody: string): boolean {\n return responseBody.includes(\"Unexpected value\") && responseBody.includes(\"anthropic-beta\");\n}\n\nexport function extractRejectedBetas(responseBody: string): string[] {\n const match = /Unexpected value\\(s\\):\\s*([^\\n]+?)\\s*for the anthropic-beta header/i.exec(responseBody);\n if (!match?.[1]) {\n return [];\n }\n\n return match[1]\n .split(\",\")\n .map((value) => value.trim().replace(/^['\"]|['\"]$/g, \"\"))\n .filter(Boolean);\n}\n\nexport function ensureOauthBeta(betas: string[]): string[] {\n return betas.includes(OAUTH_BETA) ? betas : [OAUTH_BETA, ...betas];\n}\n\nexport function getNextBetaToExclude(modelId: string): string | null {\n const excluded = getExcludedBetas(modelId);\n for (const beta of LONG_CONTEXT_BETAS) {\n if (!excluded.has(beta)) {\n return beta;\n }\n }\n\n return null;\n}\n\nexport function supports1mContext(modelId: string): boolean {\n const lowerModelId = resolveClaudeCodeModelAlias(modelId).toLowerCase();\n if (isClaudeCode1mModelLabel(modelId)) {\n return lowerModelId.includes(\"fable\") || lowerModelId.includes(\"opus\") || lowerModelId.includes(\"sonnet\");\n }\n\n if (!lowerModelId.includes(\"opus\") && !lowerModelId.includes(\"sonnet\") && !lowerModelId.includes(\"fable\")) {\n return false;\n }\n\n const versionMatch = lowerModelId.match(/(opus|sonnet|fable)-(\\d+)(?:-(\\d+))?/);\n if (!versionMatch) {\n return false;\n }\n\n const major = Number.parseInt(versionMatch[2]!, 10);\n const minor = versionMatch[3] ? Number.parseInt(versionMatch[3], 10) : 0;\n const effectiveMinor = minor > 99 ? 0 : minor;\n return major > 4 || (major === 4 && effectiveMinor >= 6);\n}\n\nexport function getModelBetas(modelId: string, excluded?: Set<string>): string[] {\n const normalizedModelId = resolveClaudeCodeModelAlias(modelId);\n const betas = [...getRequiredBetas()];\n const longContextBeta = config.longContextBetas[0];\n\n if (\n longContextBeta\n && (process.env.ANTHROPIC_ENABLE_1M_CONTEXT === \"true\" || isClaudeCode1mModelLabel(normalizedModelId))\n && supports1mContext(normalizedModelId)\n ) {\n betas.push(longContextBeta);\n }\n\n const override = getModelOverride(normalizedModelId);\n if (override?.exclude) {\n for (const excludedBeta of override.exclude) {\n const index = betas.indexOf(excludedBeta);\n if (index !== -1) {\n betas.splice(index, 1);\n }\n }\n }\n\n if (override?.add) {\n for (const addedBeta of override.add) {\n if (!betas.includes(addedBeta)) {\n betas.push(addedBeta);\n }\n }\n }\n\n if (!excluded || excluded.size === 0) {\n return betas;\n }\n\n return betas.filter((beta) => !excluded.has(beta));\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n applyClaudeCodeUpstreamBodyFields,\n composeClaudeCodeBillingSystemEntry,\n computeClaudeCodeBuildTag,\n isClaudeFableModel,\n orderClaudeCodeBodyForOutbound,\n resolveClaudeCodeModelAlias,\n stampClaudeCodeCch,\n toClaudeCodeWireModelId,\n} from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { claudeCodeIntegration, type ClaudeIdentity, type TemplateData } from \"../claude-code\";\nimport { getRuntimeModelCapability } from \"../model/capabilities\";\nimport {\n MAX_TOOL_RESULT_TEXT_LENGTH,\n TRUNCATION_SUFFIX,\n normalizeAnthropicClientRequest,\n sanitizeMessages,\n scrubFrameworkIdentifiers,\n type JsonRecord,\n type Message,\n} from \"./client-adapter\";\nimport { selectOpenCodeNativeTools, type ToolDefinition } from \"./tool-adapter\";\n\nconst BILLING_SEED = \"59cf53e54c78\";\nconst SESSION_IDLE_ROTATE_MS = 15 * 60 * 1000;\nconst DEFAULT_CONTEXT_MANAGEMENT = {};\nconst DEFAULT_OUTPUT_EFFORT = \"high\";\nconst VALID_OUTPUT_EFFORT_VALUES = new Set([\"low\", \"medium\", \"high\", \"xhigh\", \"ultracode\", \"max\", \"client\"]);\n\nexport const OPENCODE_OUTPUT_EFFORT_HEADER = \"x-kyoli-opencode-effort\";\n\nexport type OutputEffortValue = \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"ultracode\" | \"max\" | \"client\";\n\ntype ReverseLookup = Map<string, string> | Record<string, string> | undefined;\n\ninterface UpstreamRequestTestOverrides {\n now?: () => number;\n createSessionId?: () => string;\n outputEffort?: OutputEffortValue;\n}\n\nlet upstreamRequestTestOverrides: UpstreamRequestTestOverrides = {};\nlet sessionId: string = randomUUID();\nlet sessionLastUsed = 0;\n\nfunction now(): number {\n return upstreamRequestTestOverrides.now?.() ?? Date.now();\n}\n\nfunction createSessionId(): string {\n return upstreamRequestTestOverrides.createSessionId?.() ?? randomUUID();\n}\n\nfunction getActiveSessionId(): string {\n const currentTime = now();\n\n if (sessionLastUsed === 0 || (currentTime - sessionLastUsed) > SESSION_IDLE_ROTATE_MS) {\n sessionId = createSessionId();\n }\n\n sessionLastUsed = currentTime;\n return sessionId;\n}\n\nexport function getUpstreamSessionId(): string {\n return getActiveSessionId();\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function readOutputEffortValue(value: unknown): OutputEffortValue | undefined {\n const normalized = readString(value)?.toLowerCase();\n return normalized && VALID_OUTPUT_EFFORT_VALUES.has(normalized)\n ? normalized as OutputEffortValue\n : undefined;\n}\n\nexport function readOpenCodeVariantEffort(value: unknown): OutputEffortValue | undefined {\n const normalized = readString(value)?.toLowerCase();\n if (normalized === \"minimal\") return \"low\";\n return readOutputEffortValue(normalized);\n}\n\nfunction normalizeEffortForWire(effort: OutputEffortValue): string {\n return effort === \"ultracode\" ? \"xhigh\" : effort;\n}\n\nfunction readPositiveNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction effortFromThinkingBudget(thinking: JsonRecord | undefined): OutputEffortValue | undefined {\n const budgetTokens = readPositiveNumber(thinking?.budget_tokens) ?? readPositiveNumber(thinking?.budgetTokens);\n if (budgetTokens === undefined) return undefined;\n if (budgetTokens >= 31_999) return \"max\";\n if (budgetTokens >= 16_000) return \"high\";\n if (budgetTokens >= 8_000) return \"medium\";\n return \"low\";\n}\n\nfunction getConfiguredOutputEffort(): OutputEffortValue | undefined {\n return upstreamRequestTestOverrides.outputEffort\n ?? readOutputEffortValue(process.env.CLAUDE_MULTI_ACCOUNT_EFFORT)\n ?? readOutputEffortValue(process.env.ANTHROPIC_MULTI_ACCOUNT_EFFORT);\n}\n\nexport function getClientOutputEffort(inputBody: Record<string, unknown>): OutputEffortValue | undefined {\n const outputConfig = isRecord(inputBody.output_config) ? inputBody.output_config : undefined;\n const reasoning = isRecord(inputBody.reasoning) ? inputBody.reasoning : undefined;\n const thinking = isRecord(inputBody.thinking) ? inputBody.thinking : undefined;\n\n return readOutputEffortValue(outputConfig?.effort)\n ?? readOutputEffortValue(inputBody.effort)\n ?? readOutputEffortValue(reasoning?.effort)\n ?? readOutputEffortValue(inputBody.reasoning_effort)\n ?? readOutputEffortValue(inputBody.reasoningEffort)\n ?? readOutputEffortValue(thinking?.effort)\n ?? effortFromThinkingBudget(thinking);\n}\n\nexport function resolveOutputEffort(\n inputBody: Record<string, unknown>,\n configuredEffort = getConfiguredOutputEffort(),\n modelId?: string,\n): string {\n if (configuredEffort && configuredEffort !== \"client\") {\n return normalizeEffortForWire(configuredEffort);\n }\n\n const clientEffort = getClientOutputEffort(inputBody);\n return normalizeEffortForWire(clientEffort ?? DEFAULT_OUTPUT_EFFORT);\n}\n\nfunction isHaikuModel(modelId: string): boolean {\n return resolveClaudeCodeModelAlias(modelId).toLowerCase().includes(\"haiku\");\n}\n\nfunction getSystemPromptForModel(template: TemplateData, modelId: string): string {\n return modelId.toLowerCase().includes(\"fable\") && template.system_prompt_fable\n ? template.system_prompt_fable\n : template.system_prompt;\n}\n\nfunction collectToolUseIds(message: Message): string[] {\n if (!Array.isArray(message.content)) {\n return [];\n }\n\n return message.content\n .filter((block) => isRecord(block) && block.type === \"tool_use\" && typeof block.id === \"string\")\n .map((block) => String(block.id));\n}\n\nfunction collectToolResultIds(message: Message): Set<string> {\n if (!Array.isArray(message.content)) {\n return new Set();\n }\n\n return new Set(\n message.content\n .filter((block) => isRecord(block) && block.type === \"tool_result\" && typeof block.tool_use_id === \"string\")\n .map((block) => String(block.tool_use_id)),\n );\n}\n\nexport function getDanglingToolUseError(messages: Message[]): string | null {\n for (let index = 0; index < messages.length; index += 1) {\n const current = messages[index];\n if (!current || current.role !== \"assistant\") {\n continue;\n }\n\n const toolUseIds = collectToolUseIds(current);\n if (toolUseIds.length === 0) {\n continue;\n }\n\n const next = messages[index + 1];\n if (!next || next.role !== \"user\") {\n return `Dangling tool_use after assistant turn ${index}: ${toolUseIds.join(\", \")}`;\n }\n\n const toolResultIds = collectToolResultIds(next);\n const missing = toolUseIds.filter((toolUseId) => !toolResultIds.has(toolUseId));\n if (missing.length > 0) {\n return `Missing tool_result for assistant turn ${index}: ${missing.join(\", \")}`;\n }\n }\n\n return null;\n}\n\nconst ADAPTIVE_THINKING_MODEL_MATCHERS = [\n (modelId: string) => /claude-sonnet-(?:[5-9]|\\d{2,})(?:[-._]\\d+)?(?:\\[1m\\])?$/.test(modelId),\n (modelId: string) => modelId.includes(\"claude-sonnet-4-6\") || modelId.includes(\"claude-sonnet-4.6\"),\n (modelId: string) => modelId.includes(\"claude-opus-4-6\") || modelId.includes(\"claude-opus-4.6\"),\n (modelId: string) => /claude-opus-4[-._]([7-9]|\\d{2,})/.test(modelId),\n (modelId: string) => /claude-fable-(?:[5-9]|\\d{2,})(?:[-._]\\d+)?(?:\\[1m\\])?$/.test(modelId),\n];\nconst DEFAULT_MAX_OUTPUT_TOKENS = 32_000;\n\nfunction supportsAdaptiveThinking(modelId: string): boolean {\n const runtimeCapability = getRuntimeModelCapability(modelId);\n if (typeof runtimeCapability?.supportsThinking === \"boolean\") {\n return runtimeCapability.supportsThinking;\n }\n\n const normalized = resolveClaudeCodeModelAlias(modelId).toLowerCase();\n if (normalized.includes(\"haiku\")) {\n return false;\n }\n\n return ADAPTIVE_THINKING_MODEL_MATCHERS.some((matches) => matches(normalized));\n}\n\nexport function resolveMaxTokens(requestedMaxTokens: unknown): number {\n if (typeof requestedMaxTokens !== \"number\" || !Number.isFinite(requestedMaxTokens)) {\n return DEFAULT_MAX_OUTPUT_TOKENS;\n }\n\n const normalized = Math.floor(requestedMaxTokens);\n if (normalized <= 0) {\n return DEFAULT_MAX_OUTPUT_TOKENS;\n }\n\n return Math.min(normalized, DEFAULT_MAX_OUTPUT_TOKENS);\n}\n\nfunction filterInjectedSystemTexts(\n systemTexts: string[],\n template: TemplateData,\n billingHeader: string,\n): string[] {\n return systemTexts.filter((entry) => (\n entry !== billingHeader\n && entry !== template.agent_identity\n && entry !== template.system_prompt\n && !entry.startsWith(\"x-anthropic-billing-header:\")\n ));\n}\n\nexport function getCcVersion(template?: TemplateData): string {\n return template?.cc_version ?? claudeCodeIntegration.detectCliVersion();\n}\n\nexport { stampClaudeCodeCch };\n\nfunction buildBillingHeader(firstUserMessage: string, template: TemplateData): string {\n const version = getCcVersion(template);\n return composeClaudeCodeBillingSystemEntry(firstUserMessage, version);\n}\n\nfunction getReverseName(name: string, reverseLookup: ReverseLookup): string {\n if (!reverseLookup) {\n return name;\n }\n\n if (reverseLookup instanceof Map) {\n return reverseLookup.get(name) ?? name;\n }\n\n return typeof reverseLookup[name] === \"string\" ? reverseLookup[name] : name;\n}\n\nfunction reverseMapToolUseNames(value: unknown, reverseLookup: ReverseLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => reverseMapToolUseNames(item, reverseLookup));\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const cloned: JsonRecord = {};\n\n for (const [key, nested] of Object.entries(value)) {\n cloned[key] = reverseMapToolUseNames(nested, reverseLookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getReverseName(cloned.name, reverseLookup);\n }\n\n return cloned;\n}\n\nfunction remapSseLine(line: string, reverseLookup: ReverseLookup): string {\n if (!line.startsWith(\"data:\")) {\n return line;\n }\n\n const payload = line.slice(5).trimStart();\n if (payload.length === 0 || payload === \"[DONE]\") {\n return line;\n }\n\n try {\n const parsed = JSON.parse(payload) as unknown;\n return `data: ${JSON.stringify(reverseMapResponse(parsed, reverseLookup))}`;\n } catch {\n return line;\n }\n}\n\nexport function computeBuildTag(userMessage: string, version: string): string {\n return computeClaudeCodeBuildTag(userMessage, version);\n}\n\nexport function buildUpstreamRequest(\n inputBody: Record<string, unknown>,\n identity: ClaudeIdentity,\n template: TemplateData,\n options?: { sessionId?: string; outputEffort?: OutputEffortValue },\n): Record<string, unknown> {\n const { body, firstUserMessage, systemTexts } = normalizeAnthropicClientRequest(inputBody);\n const activeSessionId = options?.sessionId ?? getActiveSessionId();\n const configuredEffort = getConfiguredOutputEffort() ?? options?.outputEffort;\n\n const incomingTools = Array.isArray(body.tools) ? body.tools as ToolDefinition[] : [];\n const selectedTools = selectOpenCodeNativeTools({\n incomingTools,\n templateTools: template.tools,\n });\n body.tools = selectedTools.tools;\n const modelId = typeof body.model === \"string\" ? resolveClaudeCodeModelAlias(body.model) : \"\";\n if (typeof body.model === \"string\") {\n body.model = toClaudeCodeWireModelId(body.model);\n }\n if (isClaudeFableModel(modelId) && incomingTools.length === 0 && selectedTools.tools.length > 0) {\n body.tool_choice = { type: \"none\" };\n }\n if (supportsAdaptiveThinking(modelId)) {\n body.thinking = { type: \"adaptive\", display: \"omitted\" };\n body.context_management = DEFAULT_CONTEXT_MANAGEMENT;\n }\n if (modelId && !isHaikuModel(modelId)) {\n body.output_config = { effort: resolveOutputEffort(inputBody, configuredEffort, modelId) };\n }\n body.max_tokens = resolveMaxTokens(body.max_tokens);\n\n return applyClaudeCodeUpstreamBodyFields(body, {\n agentIdentity: template.agent_identity,\n bodyFieldOrder: template.body_field_order,\n ccVersion: getCcVersion(template),\n firstUserMessage,\n identity: {\n accountUuid: identity.accountUuid,\n deviceId: identity.deviceId,\n },\n sessionId: activeSessionId,\n systemPrompt: getSystemPromptForModel(template, modelId),\n systemTexts: filterInjectedSystemTexts(\n systemTexts,\n template,\n buildBillingHeader(firstUserMessage, template),\n ),\n });\n}\n\nexport function orderBodyForOutbound(\n body: Record<string, unknown>,\n overrideOrder?: string[],\n): Record<string, unknown> {\n return orderClaudeCodeBodyForOutbound(body, overrideOrder);\n}\n\nexport function reverseMapResponse<T>(response: T, reverseLookup?: ReverseLookup): T {\n return reverseMapToolUseNames(response, reverseLookup) as T;\n}\n\nexport function createStreamingReverseMapper(response: Response, reverseLookup?: ReverseLookup): Response {\n if (!response.body) {\n return response;\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n let buffer = \"\";\n\n const stream = new ReadableStream({\n async pull(controller) {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n buffer += decoder.decode();\n if (buffer) {\n const lines = buffer.split(\"\\n\").map((line) => remapSseLine(line, reverseLookup));\n controller.enqueue(encoder.encode(lines.join(\"\\n\")));\n buffer = \"\";\n }\n controller.close();\n return;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n if (lines.length > 0) {\n const remapped = `${lines.map((line) => remapSseLine(line, reverseLookup)).join(\"\\n\")}\\n`;\n controller.enqueue(encoder.encode(remapped));\n return;\n }\n }\n } catch (error) {\n try {\n await reader.cancel();\n } catch {\n }\n controller.error(error);\n }\n },\n async cancel(reason) {\n await reader.cancel(reason);\n },\n });\n\n return new Response(stream, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n\nexport function setUpstreamRequestTestOverridesForTest(overrides: UpstreamRequestTestOverrides | null): void {\n upstreamRequestTestOverrides = overrides ?? {};\n}\n\nexport function resetUpstreamRequestForTest(): void {\n upstreamRequestTestOverrides = {};\n sessionId = randomUUID();\n sessionLastUsed = 0;\n}\n\nexport {\n BILLING_SEED,\n MAX_TOOL_RESULT_TEXT_LENGTH,\n SESSION_IDLE_ROTATE_MS,\n sanitizeMessages,\n scrubFrameworkIdentifiers,\n TRUNCATION_SUFFIX,\n};\n","type JsonRecord = Record<string, unknown>;\n\nexport interface RuntimeModelCapability {\n maxOutputTokens?: number;\n supportsThinking?: boolean;\n}\n\nconst runtimeModelCapabilities = new Map<string, RuntimeModelCapability>();\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction normalizeModelId(modelId: string): string {\n const trimmed = modelId.trim().toLowerCase();\n const slashIndex = trimmed.indexOf(\"/\");\n return slashIndex >= 0 ? trimmed.slice(slashIndex + 1) : trimmed;\n}\n\nexport function readProviderModels(provider: Record<string, unknown>): Record<string, unknown> {\n return isRecord(provider.models) && !Array.isArray(provider.models)\n ? provider.models\n : {};\n}\n\nfunction readLimitOutput(raw: JsonRecord): number | undefined {\n const limit = isRecord(raw.limit) ? raw.limit : undefined;\n const capabilityLimit = isRecord(raw.capabilities) && isRecord(raw.capabilities.limit)\n ? raw.capabilities.limit\n : undefined;\n return readNumber(limit?.output) ?? readNumber(capabilityLimit?.output);\n}\n\nfunction readThinkingSupport(raw: JsonRecord): boolean | undefined {\n return readBoolean(raw.reasoning)\n ?? readBoolean(raw.thinking)\n ?? readBoolean(raw.supportsThinking)\n ?? (isRecord(raw.capabilities)\n ? readBoolean(raw.capabilities.reasoning)\n ?? readBoolean(raw.capabilities.thinking)\n ?? readBoolean(raw.capabilities.supportsThinking)\n : undefined);\n}\n\nexport function ingestProviderModelsCapabilities(models: unknown): void {\n runtimeModelCapabilities.clear();\n\n if (!isRecord(models)) {\n return;\n }\n\n for (const [key, value] of Object.entries(models)) {\n if (!isRecord(value)) {\n continue;\n }\n\n const resolvedId = typeof value.id === \"string\" ? value.id : key;\n const capability: RuntimeModelCapability = {\n maxOutputTokens: readLimitOutput(value),\n supportsThinking: readThinkingSupport(value),\n };\n\n runtimeModelCapabilities.set(normalizeModelId(resolvedId), capability);\n runtimeModelCapabilities.set(normalizeModelId(key), capability);\n }\n}\n\nexport function getRuntimeModelCapability(modelId: string): RuntimeModelCapability | undefined {\n return runtimeModelCapabilities.get(normalizeModelId(modelId));\n}\n\nexport function resetRuntimeModelCapabilitiesForTest(): void {\n runtimeModelCapabilities.clear();\n}\n","const MAX_TOOL_RESULT_TEXT_LENGTH = 30 * 1024;\nconst TRUNCATION_SUFFIX = \"[...truncated]\";\n\nconst ORCHESTRATION_TAG_NAMES = [\n \"system-reminder\",\n \"env\",\n \"system_information\",\n \"current_working_directory\",\n \"operating_system\",\n \"default_shell\",\n \"home_directory\",\n \"task_metadata\",\n \"directories\",\n \"thinking\",\n \"agent_persona\",\n \"agent_context\",\n \"tool_context\",\n \"persona\",\n \"tool_call\",\n] as const;\n\nconst ORCHESTRATION_PATTERNS = ORCHESTRATION_TAG_NAMES.flatMap((tag) => [\n new RegExp(`<${tag}\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/${tag}>`, \"gi\"),\n new RegExp(`<${tag}\\\\b[^>]*/>`, \"gi\"),\n]);\n\nconst FRAMEWORK_PATTERNS: RegExp[] = [\n /\\b(roo[- ]?cline|roo[- ]?code|big[- ]?agi|claude[- ]?bridge|amazon\\s+q)\\b/gi,\n /\\b(openclaw|hermes|aider|cursor|windsurf|cline|continue|copilot|cody)\\b/gi,\n /\\b(zed|plandex|tabby|opencode|daytona)\\b/gi,\n /\\b(librechat|typingmind)\\b/gi,\n /\\b(openai|gpt-4|gpt-3\\.5)\\b/gi,\n /powered by [a-z]+/gi,\n /\\bgateway\\b/gi,\n /\\bsessions_[a-z_]+\\b/gi,\n];\n\n// Message and tool-result content is user-owned code/data. Only scrub\n// distinctive multi-word framework identifiers here; bare words like\n// `continue`, `cursor`, `gateway`, `openai`, `hermes`, or `powered by ...`\n// can be legitimate payload text and must not be removed.\nconst CONTENT_FRAMEWORK_PATTERNS: RegExp[] = [\n /\\b(roo[- ]?cline|roo[- ]?code|big[- ]?agi|claude[- ]?bridge)\\b/gi,\n /\\b(librechat|typingmind)\\b/gi,\n];\n\nexport type JsonRecord = Record<string, unknown>;\n\nexport type ContentBlock = JsonRecord & {\n type?: string;\n name?: string;\n text?: string;\n content?: unknown;\n};\n\nexport type Message = JsonRecord & {\n role?: string;\n content?: string | ContentBlock[];\n};\n\nexport interface AdaptedClientRequest {\n body: JsonRecord;\n firstUserMessage: string;\n messages: Message[];\n systemTexts: string[];\n}\n\nexport function normalizeAnthropicClientRequest(inputBody: JsonRecord): AdaptedClientRequest {\n const body = structuredClone(inputBody);\n const messages = Array.isArray(body.messages) ? body.messages as Message[] : [];\n const systemTexts = normalizeSystemTexts(body.system);\n\n stripCacheControl(body);\n sanitizeMessages(body);\n stripAssistantThinkingBlocks(messages);\n\n for (const message of messages) {\n if (typeof message.content === \"string\") {\n message.content = sanitizeAndScrubContent(message.content);\n continue;\n }\n\n if (!Array.isArray(message.content)) {\n continue;\n }\n\n for (const block of message.content) {\n sanitizeMessageBlock(block);\n }\n }\n\n compactMessageContent(messages);\n removeEmptyTurns(messages);\n trimTrailingEmptyTurns(messages);\n body.messages = messages;\n stripUnsupportedSamplingFields(body);\n stripThinkingControlFields(body);\n\n return {\n body,\n firstUserMessage: extractFirstUserMessage(messages),\n messages,\n systemTexts,\n };\n}\n\nexport function sanitizeMessages(body: JsonRecord): void {\n const messages = body.messages;\n if (!Array.isArray(messages)) {\n return;\n }\n\n for (const message of messages) {\n if (!isRecord(message)) {\n continue;\n }\n\n if (typeof message.content === \"string\") {\n message.content = sanitizeContent(message.content);\n continue;\n }\n\n if (!Array.isArray(message.content)) {\n continue;\n }\n\n for (const block of message.content) {\n if (isRecord(block) && typeof block.text === \"string\") {\n block.text = sanitizeContent(block.text);\n }\n }\n\n message.content = message.content.filter((block) => {\n return !isRecord(block) || block.type !== \"text\" || block.text !== \"\";\n });\n }\n}\n\nfunction scrubWithPatterns(text: string, patterns: readonly RegExp[]): string {\n let result = text;\n\n for (const pattern of patterns) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, (match, ...args: unknown[]) => {\n const offset = args.at(-2);\n const source = args.at(-1);\n\n if (typeof offset !== \"number\" || typeof source !== \"string\") {\n return match;\n }\n\n const before = offset > 0 ? source[offset - 1] ?? \"\" : \"\";\n const after = (offset + match.length) < source.length ? source[offset + match.length] ?? \"\" : \"\";\n\n if (before === \".\" || before === \"/\" || before === \"\\\\\" || before === \"-\" || before === \"_\") {\n return match;\n }\n\n if (after === \"/\" || after === \"\\\\\") {\n return match;\n }\n\n return \"\";\n });\n }\n\n return result;\n}\n\nexport function scrubFrameworkIdentifiers(text: string): string {\n return scrubWithPatterns(text, FRAMEWORK_PATTERNS);\n}\n\nexport function scrubFrameworkIdentifiersInContent(text: string): string {\n return scrubWithPatterns(text, CONTENT_FRAMEWORK_PATTERNS);\n}\n\nexport function truncateToolResultText(text: string): string {\n if (text.length <= MAX_TOOL_RESULT_TEXT_LENGTH) {\n return text;\n }\n\n return `${text.slice(0, MAX_TOOL_RESULT_TEXT_LENGTH)}${TRUNCATION_SUFFIX}`;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction sanitizeContent(text: string): string {\n let result = text;\n\n for (const pattern of ORCHESTRATION_PATTERNS) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, \"\");\n }\n\n return result.replace(/\\n{3,}/g, \"\\n\\n\").trim();\n}\n\nfunction sanitizeAndScrubText(text: string): string {\n return scrubFrameworkIdentifiers(sanitizeContent(text))\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n}\n\nfunction sanitizeAndScrubContent(text: string): string {\n return scrubFrameworkIdentifiersInContent(sanitizeContent(text))\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n}\n\nfunction stripCacheControl(value: unknown): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n stripCacheControl(item);\n }\n return;\n }\n\n if (!isRecord(value)) {\n return;\n }\n\n delete value.cache_control;\n\n for (const nested of Object.values(value)) {\n stripCacheControl(nested);\n }\n}\n\nfunction sanitizeMessageBlock(block: ContentBlock): void {\n if (typeof block.text === \"string\") {\n block.text = sanitizeAndScrubContent(block.text);\n }\n\n if (block.type !== \"tool_result\") {\n return;\n }\n\n if (typeof block.content === \"string\") {\n block.content = truncateToolResultText(sanitizeAndScrubContent(block.content));\n return;\n }\n\n if (!Array.isArray(block.content)) {\n return;\n }\n\n block.content = block.content\n .map((item) => {\n if (isRecord(item) && typeof item.text === \"string\") {\n return {\n ...item,\n text: truncateToolResultText(sanitizeAndScrubContent(item.text)),\n };\n }\n\n return item;\n })\n .filter((item) => !isRecord(item) || typeof item.text !== \"string\" || item.text.trim().length > 0);\n}\n\nfunction stripAssistantThinkingBlocks(messages: Message[]): void {\n for (const message of messages) {\n if (message.role !== \"assistant\" || !Array.isArray(message.content)) {\n continue;\n }\n\n message.content = message.content.filter((block) => block.type !== \"thinking\");\n }\n}\n\nfunction hasMeaningfulContent(content: unknown): boolean {\n if (typeof content === \"string\") {\n return content.trim().length > 0;\n }\n\n if (!Array.isArray(content)) {\n return false;\n }\n\n return content.some((block) => {\n if (!isRecord(block)) {\n return false;\n }\n\n if (block.type === \"tool_use\" || block.type === \"tool_result\") {\n return true;\n }\n\n if (typeof block.text === \"string\" && block.text.trim().length > 0) {\n return true;\n }\n\n if (typeof block.content === \"string\" && block.content.trim().length > 0) {\n return true;\n }\n\n return false;\n });\n}\n\nfunction trimTrailingEmptyTurns(messages: Message[]): void {\n while (messages.length > 0) {\n const lastMessage = messages[messages.length - 1];\n if (!lastMessage || hasMeaningfulContent(lastMessage.content)) {\n return;\n }\n\n messages.pop();\n }\n}\n\nfunction removeEmptyTurns(messages: Message[]): void {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message && hasMeaningfulContent(message.content)) {\n continue;\n }\n\n messages.splice(index, 1);\n }\n}\n\nfunction compactMessageContent(messages: Message[]): void {\n for (const message of messages) {\n if (!Array.isArray(message.content)) {\n continue;\n }\n\n message.content = message.content.filter((block) => {\n if (!isRecord(block)) {\n return false;\n }\n\n if (block.type === \"text\") {\n return typeof block.text !== \"string\" || block.text.trim().length > 0;\n }\n\n return true;\n });\n }\n}\n\nfunction stripUnsupportedSamplingFields(body: JsonRecord): void {\n delete body.temperature;\n delete body.top_p;\n delete body.top_k;\n}\n\nfunction stripThinkingControlFields(body: JsonRecord): void {\n delete body.thinking;\n delete body.context_management;\n delete body.output_config;\n}\n\nfunction normalizeSystemTexts(system: unknown): string[] {\n if (typeof system === \"string\") {\n const next = sanitizeAndScrubText(system);\n return next ? [next] : [];\n }\n\n if (!Array.isArray(system)) {\n return [];\n }\n\n const texts: string[] = [];\n\n for (const entry of system) {\n if (typeof entry === \"string\") {\n const next = sanitizeAndScrubText(entry);\n if (next) {\n texts.push(next);\n }\n continue;\n }\n\n if (isRecord(entry) && typeof entry.text === \"string\") {\n const next = sanitizeAndScrubText(entry.text);\n if (next) {\n texts.push(next);\n }\n }\n }\n\n return texts;\n}\n\nfunction extractFirstUserMessage(messages: Message[] | undefined): string {\n if (!Array.isArray(messages)) {\n return \"\";\n }\n\n for (const message of messages) {\n if (message.role !== \"user\") {\n continue;\n }\n\n if (typeof message.content === \"string\") {\n return message.content;\n }\n\n if (!Array.isArray(message.content)) {\n return \"\";\n }\n\n const text = message.content\n .filter((block) => typeof block.text === \"string\")\n .map((block) => block.text)\n .join(\"\\n\\n\")\n .trim();\n\n return text;\n }\n\n return \"\";\n}\n\nexport {\n MAX_TOOL_RESULT_TEXT_LENGTH,\n ORCHESTRATION_TAG_NAMES,\n TRUNCATION_SUFFIX,\n};\n","export type ToolDefinition = Record<string, unknown>;\n\nexport interface OpenCodeNativeToolSelection {\n reason: \"incoming-tools\" | \"template-tools\" | \"no-tools\";\n tools: ToolDefinition[];\n}\n\nexport function selectOpenCodeNativeTools(input: {\n incomingTools: ToolDefinition[];\n templateTools: ToolDefinition[];\n}): OpenCodeNativeToolSelection {\n if (input.incomingTools.length > 0) {\n return {\n reason: \"incoming-tools\",\n tools: enrichIncomingToolsWithTemplateSchemas(input.incomingTools, input.templateTools),\n };\n }\n\n if (!hasCompleteToolSchemas(input.templateTools)) {\n return {\n reason: \"no-tools\",\n tools: [],\n };\n }\n\n return {\n reason: \"template-tools\",\n tools: input.templateTools.map((tool) => ({ ...tool })),\n };\n}\n\nfunction hasCompleteToolSchemas(tools: ToolDefinition[]): boolean {\n return tools.length > 0\n && tools.every((tool) => typeof tool === \"object\" && tool !== null && \"input_schema\" in tool);\n}\n\nfunction enrichIncomingToolsWithTemplateSchemas(\n incomingTools: ToolDefinition[],\n templateTools: ToolDefinition[],\n): ToolDefinition[] {\n if (!hasCompleteToolSchemas(templateTools) || incomingTools.length !== templateTools.length) {\n return incomingTools;\n }\n\n return incomingTools.map((tool, index) => {\n if (\"input_schema\" in tool) {\n return tool;\n }\n\n const templateTool = templateTools[index];\n return templateTool && \"input_schema\" in templateTool\n ? { ...tool, input_schema: templateTool.input_schema }\n : tool;\n });\n}\n","import { createHash } from \"node:crypto\";\n\ntype JsonRecord = Record<string, unknown>;\ntype ToolEntry = { name?: string; [key: string]: unknown };\ntype RequestPayload = {\n tools?: ToolEntry[];\n messages?: Array<Record<string, unknown>>;\n tool_choice?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport type ReverseLookup = Map<string, string>;\n\nconst TOOL_MASK_PREFIX = \"tool_\";\n\ntype ToolFlowLookup = {\n originalToOutgoing: Map<string, string>;\n outgoingToOriginal: ReverseLookup;\n};\n\ntype OutgoingNameRegistry = {\n usedOutgoing: Set<string>;\n reservedOriginals: ReadonlySet<string>;\n};\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction shouldMaskToolName(\n name: string | undefined,\n claudeToolNames: ReadonlySet<string>,\n options: { preserveToolPrefix: boolean },\n): name is string {\n if (!name) {\n return false;\n }\n\n return !claudeToolNames.has(name)\n && !name.startsWith(\"mcp__\")\n && (!options.preserveToolPrefix || !name.startsWith(TOOL_MASK_PREFIX));\n}\n\nfunction buildMaskedToolName(toolName: string, length = 8): string {\n const digest = createHash(\"sha256\")\n .update(`tool-mask:${toolName}`)\n .digest(\"hex\")\n .slice(0, length);\n\n return `${TOOL_MASK_PREFIX}${digest}`;\n}\n\nfunction isOutgoingNameAvailable(name: string, registry: OutgoingNameRegistry): boolean {\n return !registry.usedOutgoing.has(name) && !registry.reservedOriginals.has(name);\n}\n\nfunction buildAvailableMaskedToolName(toolName: string, registry: OutgoingNameRegistry): string {\n for (let length = 8; length <= 64; length += 2) {\n const masked = buildMaskedToolName(toolName, length);\n if (isOutgoingNameAvailable(masked, registry)) {\n return masked;\n }\n }\n\n const fullDigestName = buildMaskedToolName(toolName, 64);\n for (let suffix = 1; suffix <= 1_024; suffix += 1) {\n const masked = `${fullDigestName}_${suffix}`;\n if (isOutgoingNameAvailable(masked, registry)) {\n return masked;\n }\n }\n\n return `${fullDigestName}_${registry.usedOutgoing.size + registry.reservedOriginals.size}`;\n}\n\nfunction collectCurrentToolNames(parsed: RequestPayload): string[] {\n const names = new Set<string>();\n\n if (Array.isArray(parsed.tools)) {\n for (const tool of parsed.tools) {\n if (isRecord(tool) && typeof tool.name === \"string\") {\n names.add(tool.name);\n }\n }\n }\n\n return [...names];\n}\n\nfunction collectReferencedToolNames(parsed: RequestPayload): string[] {\n const names = new Set<string>();\n\n if (Array.isArray(parsed.messages)) {\n for (const message of parsed.messages) {\n if (!isRecord(message) || !Array.isArray(message.content)) {\n continue;\n }\n\n for (const block of message.content) {\n if (isRecord(block) && block.type === \"tool_use\" && typeof block.name === \"string\") {\n names.add(block.name);\n }\n }\n }\n }\n\n if (isRecord(parsed.tool_choice) && parsed.tool_choice.type === \"tool\" && typeof parsed.tool_choice.name === \"string\") {\n names.add(parsed.tool_choice.name);\n }\n\n return [...names];\n}\n\nfunction buildClaudeToolNameSet(claudeToolNames: readonly string[]): ReadonlySet<string> {\n return new Set(claudeToolNames.filter((name) => typeof name === \"string\" && name.length > 0));\n}\n\nexport function buildRequestScopedToolLookup(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): ReverseLookup {\n return buildToolFlowLookup(parsed, claudeToolNames).outgoingToOriginal;\n}\n\nfunction buildToolFlowLookup(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): ToolFlowLookup {\n const originalToOutgoing = new Map<string, string>();\n const outgoingToOriginal: ReverseLookup = new Map();\n const registry: OutgoingNameRegistry = {\n usedOutgoing: new Set<string>(),\n reservedOriginals: new Set(collectCurrentToolNames(parsed)),\n };\n const claudeToolSet = buildClaudeToolNameSet(claudeToolNames);\n\n const registerCurrent = (originalName: string) => {\n if (originalToOutgoing.has(originalName)) {\n return;\n }\n\n if (!shouldMaskToolName(originalName, claudeToolSet, { preserveToolPrefix: false })) {\n originalToOutgoing.set(originalName, originalName);\n outgoingToOriginal.set(originalName, originalName);\n registry.usedOutgoing.add(originalName);\n return;\n }\n\n const masked = buildAvailableMaskedToolName(originalName, registry);\n\n originalToOutgoing.set(originalName, masked);\n outgoingToOriginal.set(masked, originalName);\n registry.usedOutgoing.add(masked);\n };\n\n const registerReference = (originalName: string) => {\n if (originalToOutgoing.has(originalName) || outgoingToOriginal.has(originalName)) {\n return;\n }\n\n if (!shouldMaskToolName(originalName, claudeToolSet, { preserveToolPrefix: true })) {\n originalToOutgoing.set(originalName, originalName);\n outgoingToOriginal.set(originalName, originalName);\n registry.usedOutgoing.add(originalName);\n return;\n }\n\n const masked = buildAvailableMaskedToolName(originalName, registry);\n originalToOutgoing.set(originalName, masked);\n outgoingToOriginal.set(masked, originalName);\n registry.usedOutgoing.add(masked);\n };\n\n for (const originalName of collectCurrentToolNames(parsed)) {\n registerCurrent(originalName);\n }\n\n for (const originalName of collectReferencedToolNames(parsed)) {\n registerReference(originalName);\n }\n\n return { originalToOutgoing, outgoingToOriginal };\n}\n\nfunction getOutgoingName(name: string | undefined, lookup: ToolFlowLookup): string | undefined {\n if (!name) {\n return name;\n }\n\n if (lookup.outgoingToOriginal.has(name)) {\n return name;\n }\n\n return lookup.originalToOutgoing.get(name) ?? name;\n}\n\nfunction getOriginalName(name: string, reverseLookup: ReverseLookup): string {\n return reverseLookup.get(name) ?? name;\n}\n\nfunction rewriteToolUseNames(value: unknown, lookup: ToolFlowLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => rewriteToolUseNames(item, lookup));\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const cloned: JsonRecord = {};\n for (const [key, nested] of Object.entries(value)) {\n cloned[key] = rewriteToolUseNames(nested, lookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getOutgoingName(cloned.name, lookup);\n }\n\n return cloned;\n}\n\nfunction reverseToolUseNames(value: unknown, reverseLookup: ReverseLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => reverseToolUseNames(item, reverseLookup));\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n const cloned: JsonRecord = {};\n for (const [key, nested] of Object.entries(value)) {\n cloned[key] = reverseToolUseNames(nested, reverseLookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getOriginalName(cloned.name, reverseLookup);\n }\n\n return cloned;\n}\n\nexport function applyOutboundToolFlow(\n parsed: RequestPayload,\n claudeToolNames: readonly string[],\n): { body: string; reverseLookup: ReverseLookup } {\n const lookup = buildToolFlowLookup(parsed, claudeToolNames);\n const next: RequestPayload = { ...parsed };\n\n if (Array.isArray(parsed.tools)) {\n next.tools = parsed.tools.map((tool) => ({\n ...tool,\n name: getOutgoingName(tool.name, lookup),\n }));\n }\n\n if (Array.isArray(parsed.messages)) {\n next.messages = parsed.messages.map((message) => {\n if (!isRecord(message) || !Array.isArray(message.content)) {\n return message;\n }\n\n return {\n ...message,\n content: rewriteToolUseNames(message.content, lookup),\n };\n });\n }\n\n if (isRecord(parsed.tool_choice) && parsed.tool_choice.type === \"tool\") {\n next.tool_choice = {\n ...parsed.tool_choice,\n name: getOutgoingName(parsed.tool_choice.name as string | undefined, lookup),\n };\n }\n\n return {\n body: JSON.stringify(next),\n reverseLookup: lookup.outgoingToOriginal,\n };\n}\n\nexport function reverseToolFlowPayload<T>(value: T, reverseLookup?: ReverseLookup): T {\n if (!reverseLookup || reverseLookup.size === 0) {\n return value;\n }\n\n return reverseToolUseNames(value, reverseLookup) as T;\n}\n","import {\n createClaudeCodePerRequestHeaders,\n createClaudeCodeStaticHeaders,\n orderClaudeCodeHeadersForOutbound,\n} from \"@kyoli-gam/provider-claude-code/opencode\";\nimport { claudeCodeIntegration } from \"../claude-code\";\n\nconst STAINLESS_PACKAGE_VERSION = \"0.81.0\";\n\nconst BILLABLE_BETA_PREFIXES = [\"extended-cache-ttl-\"];\n\nexport function getStaticHeaders(): Record<string, string> {\n const profile = claudeCodeIntegration.loadRequestProfile();\n return createClaudeCodeStaticHeaders({\n headerValues: profile.template.header_values,\n packageVersion: STAINLESS_PACKAGE_VERSION,\n userAgent: profile.userAgent,\n xApp: profile.xApp,\n });\n}\n\nexport function getPerRequestHeaders(sessionId: string): Record<string, string> {\n return createClaudeCodePerRequestHeaders({\n anthropicVersion: getAnthropicVersion(),\n sessionId,\n });\n}\n\nexport function getAnthropicVersion(): string {\n return claudeCodeIntegration.loadRequestProfile().anthropicVersion;\n}\n\nexport function getBetaHeader(): string {\n return claudeCodeIntegration.loadRequestProfile().betaHeader;\n}\n\nexport function orderHeadersForOutbound(\n headers: Record<string, string>,\n overrideHeaderOrder?: string[],\n): Record<string, string> | Array<[string, string]> {\n const { template } = claudeCodeIntegration.loadRequestProfile();\n return orderClaudeCodeHeadersForOutbound(headers, overrideHeaderOrder ?? template.header_order);\n}\n\nexport function filterBillableBetas(betas: string): string {\n return betas\n .split(\",\")\n .map((beta) => beta.trim())\n .filter(\n (beta) =>\n beta.length > 0\n && !BILLABLE_BETA_PREFIXES.some((prefix) => beta.startsWith(prefix)),\n )\n .join(\",\");\n}\n","import { promises as fs } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getConfigDir } from \"../shared/utils\";\n\nconst OBSERVED_TOOL_FILE = \"anthropic-observed-tools.json\";\nconst FILE_MODE = 0o600;\n\ntype ObservedToolEntry = {\n count: number;\n firstSeenAt: string;\n lastSeenAt: string;\n};\n\nexport type ObservedToolInventory = {\n observedTools: Record<string, ObservedToolEntry>;\n};\n\nfunction getObservedToolPath(): string {\n return join(getConfigDir(), OBSERVED_TOOL_FILE);\n}\n\nasync function loadObservedToolInventory(): Promise<ObservedToolInventory> {\n try {\n const content = await fs.readFile(getObservedToolPath(), \"utf8\");\n const parsed = JSON.parse(content) as ObservedToolInventory;\n return typeof parsed === \"object\" && parsed && typeof parsed.observedTools === \"object\"\n ? parsed\n : { observedTools: {} };\n } catch {\n return { observedTools: {} };\n }\n}\n\nasync function saveObservedToolInventory(inventory: ObservedToolInventory): Promise<void> {\n const targetPath = getObservedToolPath();\n await fs.mkdir(dirname(targetPath), { recursive: true });\n await fs.writeFile(targetPath, `${JSON.stringify(inventory, null, 2)}\\n`, { mode: FILE_MODE });\n await fs.chmod(targetPath, FILE_MODE).catch(() => {});\n}\n\nexport async function readObservedToolInventory(): Promise<ObservedToolInventory> {\n return loadObservedToolInventory();\n}\n\nexport async function recordObservedToolNames(toolNames: string[]): Promise<void> {\n if (toolNames.length === 0) {\n return;\n }\n\n const inventory = await loadObservedToolInventory();\n const now = new Date().toISOString();\n\n for (const toolName of toolNames) {\n const entry = inventory.observedTools[toolName];\n if (!entry) {\n inventory.observedTools[toolName] = {\n count: 1,\n firstSeenAt: now,\n lastSeenAt: now,\n };\n continue;\n }\n\n entry.count += 1;\n entry.lastSeenAt = now;\n }\n\n await saveObservedToolInventory(inventory);\n}\n","export function sanitizeError(err: unknown): string {\n const msg = err instanceof Error ? err.message : String(err);\n\n return msg\n .replace(/sk-ant-[a-zA-Z0-9_-]+/g, \"[REDACTED]\")\n .replace(/eyJ[a-zA-Z0-9_-]+\\.eyJ[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+/g, \"[REDACTED_JWT]\")\n .replace(/Bearer\\s+[^\\s,;]+/gi, \"Bearer [REDACTED]\");\n}\n\nexport function enrich429(body: string, headers: Headers): string {\n try {\n const parsed = JSON.parse(body) as {\n error?: {\n message?: string;\n };\n };\n const error = parsed.error;\n\n if (error && (error.message === \"Error\" || !error.message)) {\n const claim = headers.get(\"anthropic-ratelimit-unified-representative-claim\") || \"unknown\";\n const status = headers.get(\"anthropic-ratelimit-unified-status\") || \"rejected\";\n const util5h = headers.get(\"anthropic-ratelimit-unified-5h-utilization\");\n const util7d = headers.get(\"anthropic-ratelimit-unified-7d-utilization\");\n const reset = headers.get(\"anthropic-ratelimit-unified-reset\");\n const parts = [`Rate limited (${status}). Limiting window: ${claim}`];\n\n if (util5h) {\n const parsedUtil5h = Number.parseFloat(util5h);\n if (Number.isFinite(parsedUtil5h)) {\n parts.push(`5h utilization: ${Math.round(parsedUtil5h * 100)}%`);\n }\n }\n\n if (util7d) {\n const parsedUtil7d = Number.parseFloat(util7d);\n if (Number.isFinite(parsedUtil7d)) {\n parts.push(`7d utilization: ${Math.round(parsedUtil7d * 100)}%`);\n }\n }\n\n if (reset) {\n const parsedReset = Number.parseInt(reset, 10);\n if (Number.isFinite(parsedReset)) {\n const resetDate = new Date(parsedReset * 1000);\n const minutesUntilReset = Math.max(0, Math.round((resetDate.getTime() - Date.now()) / 60000));\n parts.push(`resets in ${minutesUntilReset}m`);\n }\n }\n\n error.message = parts.join(\". \");\n }\n\n return JSON.stringify(parsed);\n } catch {\n return body;\n }\n}\n","export interface PacingConfig {\n minGapMs: number;\n jitterMs: number;\n}\n\nfunction pickNonNegativeInt(...values: (number | string | undefined)[]): number | undefined {\n for (const v of values) {\n if (v === undefined) continue;\n const n = typeof v === \"number\" ? v : Number.parseInt(v, 10);\n if (Number.isFinite(n) && n >= 0) return n;\n }\n return undefined;\n}\n\nexport function computePacingDelay(\n now: number,\n lastRequestTime: number,\n cfg: PacingConfig,\n rng: () => number = Math.random,\n): number {\n if (lastRequestTime <= 0) return 0;\n const minGap = Math.max(0, cfg.minGapMs);\n const jitter = Math.max(0, cfg.jitterMs);\n const jitterAdd = jitter > 0 ? Math.floor(rng() * jitter) : 0;\n const effectiveGap = minGap + jitterAdd;\n const elapsed = now - lastRequestTime;\n if (elapsed >= effectiveGap) return 0;\n return effectiveGap - elapsed;\n}\n\nexport function resolvePacingConfig(\n explicit: { minGapMs?: number; jitterMs?: number } = {},\n env: NodeJS.ProcessEnv = process.env,\n): PacingConfig {\n const minGap = pickNonNegativeInt(explicit.minGapMs, env.ANTHROPIC_PACE_MIN_MS, env.MIN_REQUEST_INTERVAL_MS) ?? 500;\n const jitter = pickNonNegativeInt(explicit.jitterMs, env.ANTHROPIC_PACE_JITTER_MS) ?? 0;\n return { minGapMs: minGap, jitterMs: jitter };\n}\n","import {\n __openCodeNativeBootstrapAuthTestUtils,\n syncOpenCodeNativeBootstrapAuth,\n} from \"opencode-multi-account-core\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"../shared/constants\";\nimport type { AccountStore } from \"../accounts/store\";\nimport type { PluginClient } from \"../shared/types\";\n\nexport function syncBootstrapAuth(\n client: PluginClient,\n store: AccountStore,\n): Promise<boolean> {\n return syncOpenCodeNativeBootstrapAuth({\n client,\n store,\n providerId: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n });\n}\n\nexport const __bootstrapAuthTestUtils = __openCodeNativeBootstrapAuthTestUtils;\n","import { getUpstreamSessionId } from \"./request/upstream-request\";\nimport { claudeCodeIntegration } from \"./claude-code\";\nimport { getAnthropicVersion } from \"./request/headers\";\n\nconst DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;\nconst CLIENT_PLATFORM = \"cli\";\n\ninterface HeartbeatOptions {\n sessionId: string;\n deviceId: string;\n accessToken: string;\n intervalMs?: number;\n}\n\ninterface HeartbeatHandle {\n stop(): void;\n}\n\ninterface HeartbeatTestOverrides {\n fetch?: typeof globalThis.fetch;\n onStart?: (options: HeartbeatOptions) => void;\n}\n\nlet testOverrides: HeartbeatTestOverrides = {};\n\nfunction presenceUrl(sessionId: string): string {\n return `${claudeCodeIntegration.loadRequestProfile().baseApiUrl}/v1/code/sessions/${sessionId}/client/presence`;\n}\n\nfunction fetchFn(): typeof globalThis.fetch {\n return testOverrides.fetch ?? globalThis.fetch;\n}\n\nexport function startHeartbeat(options: HeartbeatOptions): HeartbeatHandle {\n testOverrides.onStart?.(options);\n\n const {\n sessionId,\n deviceId,\n accessToken,\n intervalMs = DEFAULT_HEARTBEAT_INTERVAL_MS,\n } = options;\n\n let activeController: AbortController | null = null;\n let stopped = false;\n\n const sendPresence = async (): Promise<void> => {\n if (stopped) return;\n\n const controller = new AbortController();\n activeController = controller;\n\n try {\n await fetchFn()(presenceUrl(sessionId), {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"anthropic-version\": getAnthropicVersion(),\n \"anthropic-client-platform\": CLIENT_PLATFORM,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n client_id: deviceId,\n connected_at: new Date().toISOString(),\n }),\n signal: controller.signal,\n });\n } catch {\n // Intentional silent catch: the presence endpoint is undocumented\n // and heartbeat failures must never propagate to callers.\n } finally {\n if (activeController === controller) {\n activeController = null;\n }\n }\n };\n\n const timer = setInterval(sendPresence, intervalMs);\n\n if (typeof timer === \"object\" && \"unref\" in timer && typeof timer.unref === \"function\") {\n timer.unref();\n }\n\n return {\n stop() {\n if (stopped) return;\n stopped = true;\n clearInterval(timer);\n activeController?.abort();\n activeController = null;\n },\n };\n}\n\nexport function getSessionId(): string {\n return getUpstreamSessionId();\n}\n\nexport { DEFAULT_HEARTBEAT_INTERVAL_MS };\n\nexport function setHeartbeatTestOverridesForTest(overrides: HeartbeatTestOverrides | null): void {\n testOverrides = overrides ?? {};\n}\n\nexport function resetHeartbeatForTest(): void {\n testOverrides = {};\n}\n"],"mappings":"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","names":["v2","v3","readRecord","platform","randomUUID","v","createHash","createHash","config","derivedDefaults","template","homedir","join","createHash","execFile","v","platform","randomUUID","now","detectOAuthConfig","createExecutorForProvider","executeWithAccountRotation","createExecutorForProvider","config","now","randomUUID","now","randomUUID","randomUUID","isRecord","randomUUID","isRecord","template","filterInjectedSystemTexts","template","isRecord","template","filterInjectedSystemTexts","lines","createHash","isRecord","isRecord","isRecord","STAINLESS_PACKAGE_VERSION","sessionId","template","dirname","join","join","dirname","toolNames","now","v","now","isRecord","excludedBetas","sessionId","template","response","sessionId","extractFirstUserText","template","sessionId"]}