opencode-anthropic-multi-account 0.2.23 → 0.2.24
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 +7 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/account-manager.ts","../src/claims.ts","../src/anthropic-oauth.ts","../src/cc-derived-profile.ts","../src/oauth-callback-server.ts","../src/oauth-pkce.ts","../src/token-node-request.ts","../src/usage.ts","../src/types.ts","../src/token.ts","../src/executor.ts","../src/rate-limit.ts","../src/pool-chain-executor.ts","../src/ui/ansi.ts","../src/ui/select.ts","../src/ui/confirm.ts","../src/ui/auth-menu.ts","../src/account-store.ts","../src/auth-handler.ts","../src/proactive-refresh.ts","../src/runtime-factory.ts","../src/request-transform.ts","../src/model-config.ts","../src/betas.ts","../src/claude-identity.ts","../src/upstream-request.ts","../src/model-capabilities.ts","../src/tool-flow.ts","../src/upstream-headers.ts","../src/tool-observation.ts","../src/error-utils.ts","../src/pacing.ts","../src/bootstrap-auth.ts","../src/session-heartbeat.ts"],"sourcesContent":["import { tool } from \"@opencode-ai/plugin\";\nimport type { Plugin } from \"@opencode-ai/plugin\";\nimport {\n CascadeStateManager,\n loadPoolChainConfig,\n migrateFromAuthJson,\n PoolManager,\n type PoolChainConfig,\n} from \"opencode-multi-account-core\";\nimport { AccountManager } from \"./account-manager\";\nimport { executeWithAccountRotation } from \"./executor\";\nimport { getPlanLabel, getUsageSummary } from \"./usage\";\nimport { handleAuthorize } from \"./auth-handler\";\nimport { loadConfig } from \"./config\";\nimport { ProactiveRefreshQueue } from \"./proactive-refresh\";\nimport { AccountStore } from \"./account-store\";\nimport { AccountRuntimeFactory } from \"./runtime-factory\";\nimport { debugLog, formatWaitTime, getAccountLabel, showToast } from \"./utils\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { loadCCDerivedAuthProfile, loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\nimport {\n checkCCCompat,\n detectDrift,\n refreshLiveFingerprintAsync,\n} from \"./fingerprint-capture\";\nimport {\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./upstream-headers\";\nimport { computeBuildTag, getUpstreamSessionId } from \"./upstream-request\";\nimport { loadClaudeIdentity } from \"./claude-identity\";\nimport { syncBootstrapAuth } from \"./bootstrap-auth\";\nimport { sanitizeError } from \"./error-utils\";\nimport { getSessionId, startHeartbeat } from \"./session-heartbeat\";\nimport type { OAuthCredentials, PluginClient } from \"./types\";\nimport { ingestProviderModelsCapabilities } from \"./model-capabilities\";\n\nconst EMPTY_OAUTH_CREDENTIALS: OAuthCredentials = {\n type: \"oauth\",\n refresh: \"\",\n access: \"\",\n expires: 0,\n};\n\nif (process.env.CLAUDE_MULTI_ACCOUNT_TRACE_PLUGIN === \"1\") {\n console.error(\"[anthropic-multi-account] module loaded\");\n}\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 const buildTag = computeBuildTag(firstUserMessage, version);\n return `x-anthropic-billing-header: cc_version=${version}.${buildTag}; cc_entrypoint=cli; cch=00000;`;\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\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 = loadCCDerivedRequestProfile();\n const template = requestProfile.template;\n const claudeIdentity = loadClaudeIdentity();\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\n const stopHeartbeat = (): void => {\n heartbeatHandle?.stop();\n heartbeatHandle = null;\n heartbeatToken = null;\n heartbeatSessionId = null;\n };\n\n const ensureHeartbeat = (accessToken: string | undefined): void => {\n if (!accessToken || !claudeIdentity.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: claudeIdentity.deviceId,\n accessToken,\n });\n };\n\n const startupDrift = 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 = checkCCCompat();\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 refreshLiveFingerprintAsync({ silent: true })\n .then((refreshedTemplate) => {\n const refreshedDrift = 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 await syncBootstrapAuth(client, store)\n .then((synced) => {\n debugLog(client, \"Bootstrap auth sync completed\", { synced });\n })\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 error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n });\n\n let manager: AccountManager | null = null;\n let runtimeFactory: AccountRuntimeFactory | null = null;\n let refreshQueue: ProactiveRefreshQueue | null = null;\n let poolManager: PoolManager | null = null;\n let cascadeStateManager: CascadeStateManager | null = null;\n let poolChainConfig: PoolChainConfig = { pools: [], chains: [] };\n\n async function ensureExecutionInfrastructure(): Promise<void> {\n runtimeFactory ??= new AccountRuntimeFactory(store, client, claudeIdentity);\n poolChainConfig = await loadPoolChainConfig();\n\n poolManager ??= new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager ??= new CascadeStateManager();\n\n if (manager) {\n manager.setRuntimeFactory(runtimeFactory);\n manager.setClient(client);\n }\n }\n\n async function startRefreshQueueIfNeeded(): Promise<void> {\n if (!manager || manager.getAccountCount() === 0) {\n return;\n }\n\n await ensureExecutionInfrastructure();\n\n if (refreshQueue) {\n return;\n }\n\n refreshQueue = new ProactiveRefreshQueue(\n client,\n store,\n (uuid) => {\n runtimeFactory?.invalidate(uuid);\n void manager?.refresh();\n },\n );\n refreshQueue.start();\n }\n\n async function initializeManagerFromStore(): Promise<boolean> {\n if (manager) {\n return manager.getAccountCount() > 0;\n }\n\n const storage = await store.load();\n if (storage.accounts.length === 0) {\n return false;\n }\n\n manager = await AccountManager.create(store, EMPTY_OAUTH_CREDENTIALS, client);\n await ensureExecutionInfrastructure();\n await startRefreshQueueIfNeeded();\n ensureHeartbeat(manager.getActiveAccount()?.accessToken);\n return manager.getAccountCount() > 0;\n }\n\n async function initializeManagerFromAuth(credentials: OAuthCredentials): Promise<void> {\n if (!manager) {\n manager = await AccountManager.create(store, credentials, client);\n }\n\n await ensureExecutionInfrastructure();\n await startRefreshQueueIfNeeded();\n }\n\n await initializeManagerFromStore().catch(() => {});\n\n return {\n \"experimental.chat.system.transform\": (input: Record<string, unknown>, output: { system?: string[] }) => {\n const billingHeader = composeBillingSystemEntry(extractFirstUserText(input), claudeCodeVersion);\n prependMissingSystemEntries(output, [\n billingHeader,\n upstreamAgentIdentity,\n upstreamSystemPrompt,\n ]);\n },\n\n tool: {\n [ANTHROPIC_OAUTH_ADAPTER.statusToolName]: tool({\n description:\n \"Show status of all multi-auth accounts including rate limits and usage.\",\n args: {},\n async execute(_args, _context) {\n if (!manager) {\n return \"Multi-auth not initialized. No OAuth accounts detected.\";\n }\n\n const accounts = manager.getAccounts();\n if (accounts.length === 0) {\n return \"No accounts configured. Run `opencode auth login` to add an account.\";\n }\n\n const lines: string[] = [\n `## ${ANTHROPIC_OAUTH_ADAPTER.modelDisplayName} Multi-Auth Status (${accounts.length} accounts)\\n`,\n ];\n\n for (const account of accounts) {\n const isActive = account.uuid === manager.getActiveAccount()?.uuid;\n const marker = isActive ? \" **[ACTIVE]**\" : \"\";\n const label = getAccountLabel(account);\n const usage = getUsageSummary(account);\n const planLabel = getPlanLabel(account);\n const planBadge = planLabel ? ` [${planLabel}]` : \"\";\n\n const statusParts: string[] = [];\n if (account.isAuthDisabled) statusParts.push(`AUTH DISABLED: ${account.authDisabledReason}`);\n else if (!account.enabled) statusParts.push(\"disabled\");\n else statusParts.push(\"enabled\");\n\n if (account.rateLimitResetAt) {\n if (account.rateLimitResetAt > Date.now()) {\n const remaining = formatWaitTime(account.rateLimitResetAt - Date.now());\n statusParts.push(`RATE LIMITED (resets in ${remaining})`);\n } else {\n statusParts.push(\"RATE LIMIT RESET\");\n }\n }\n\n if (account.cachedUsage) {\n const now = Date.now();\n const usage = account.cachedUsage;\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 statusParts.push(\"USAGE EXHAUSTED\");\n }\n }\n\n lines.push(\n `- **${label}**${planBadge}${marker}: ${statusParts.join(\" | \")} | ${usage}`,\n );\n }\n\n return lines.join(\"\\n\");\n },\n }),\n },\n\n auth: {\n provider: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n methods: [\n {\n label: ANTHROPIC_OAUTH_ADAPTER.authMethodLabel,\n type: \"oauth\" as const,\n async authorize() {\n const inputs = arguments.length > 0 ? (arguments[0] as Record<string, string>) : undefined;\n return handleAuthorize(manager, inputs, client);\n },\n },\n { type: \"api\" as const, label: \"Create an API Key\" },\n { type: \"api\" as const, label: \"Manually enter API Key\" },\n ],\n\n async loader(\n getAuth: () => Promise<unknown>,\n provider: Record<string, unknown>,\n ) {\n const providerModels = (provider.models ?? {}) as Record<string, unknown>;\n ingestProviderModelsCapabilities(providerModels);\n debugLog(client, \"Auth loader received provider metadata\", {\n providerId: typeof provider.id === \"string\" ? provider.id : undefined,\n providerName: typeof provider.name === \"string\" ? provider.name : undefined,\n modelCount: Object.keys(providerModels).length,\n modelIds: Object.keys(providerModels),\n });\n\n const auth = await getAuth() as Record<string, unknown>;\n debugLog(client, \"Auth loader resolved auth payload\", {\n authType: typeof auth.type === \"string\" ? auth.type : undefined,\n authKeys: Object.keys(auth),\n });\n\n if (auth.type !== \"oauth\") {\n await syncBootstrapAuth(client, store)\n .then((synced) => {\n debugLog(client, \"Auth loader requested bootstrap auth sync\", { synced });\n })\n .catch((error) => {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"debug\",\n message: \"auth loader bootstrap sync failed\",\n extra: {\n error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n });\n\n const recoveredFromStore = await initializeManagerFromStore();\n debugLog(client, \"Auth loader attempted store recovery\", {\n recoveredFromStore,\n });\n\n if (!recoveredFromStore || !manager || !runtimeFactory) {\n stopHeartbeat();\n return { apiKey: \"\", fetch };\n }\n\n const authProfile = await loadCCDerivedAuthProfile();\n\n return {\n apiKey: \"\",\n baseURL: authProfile.apiV1BaseUrl,\n \"chat.headers\": async (input: { provider?: { info?: { id?: string } } }, output: { headers: Record<string, string> }) => {\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 async fetch(input: RequestInfo | URL, init?: RequestInit) {\n if (!manager || !runtimeFactory) {\n stopHeartbeat();\n return fetch(input, init);\n }\n\n if (manager.getAccountCount() === 0) {\n stopHeartbeat();\n throw new Error(\n \"No Anthropic accounts configured. Run `opencode auth login` to add an account.\",\n );\n }\n\n ensureHeartbeat(manager.getActiveAccount()?.accessToken);\n\n if (!poolManager || !cascadeStateManager) {\n poolManager = new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager = new CascadeStateManager();\n }\n\n return executeWithAccountRotation(\n manager,\n runtimeFactory,\n client,\n input,\n init,\n {\n poolManager,\n cascadeStateManager,\n poolChainConfig,\n },\n );\n },\n };\n }\n\n for (const model of Object.values(providerModels) as Record<string, unknown>[]) {\n if (model) {\n model.cost = { input: 0, output: 0, cache: { read: 0, write: 0 } };\n }\n }\n\n const credentials = auth as OAuthCredentials;\n await migrateFromAuthJson(\"anthropic\", store);\n await initializeManagerFromAuth(credentials);\n ensureHeartbeat(credentials.access);\n\n const initializedManager = manager;\n if (!initializedManager) {\n return { apiKey: \"\", fetch };\n }\n\n debugLog(client, \"Auth loader initialized manager state\", {\n accountCount: initializedManager.getAccountCount(),\n activeAccountUuid: initializedManager.getActiveAccount()?.uuid,\n });\n\n if (initializedManager.getAccountCount() > 0) {\n const activeAccount = initializedManager.getActiveAccount();\n const activeLabel = activeAccount ? getAccountLabel(activeAccount) : \"none\";\n void showToast(\n client,\n `Multi-Auth: ${initializedManager.getAccountCount()} account(s) loaded. Active: ${activeLabel}`,\n \"info\",\n );\n await initializedManager.validateNonActiveTokens(client);\n\n const disabledCount = initializedManager.getAccounts().filter((a) => a.isAuthDisabled).length;\n if (disabledCount > 0) {\n void showToast(\n client,\n `${disabledCount} account(s) have auth failures.`,\n \"warning\",\n );\n }\n }\n\n const authProfile = await loadCCDerivedAuthProfile();\n\n return {\n apiKey: \"\",\n baseURL: authProfile.apiV1BaseUrl,\n \"chat.headers\": async (input: { provider?: { info?: { id?: string } } }, output: { headers: Record<string, string> }) => {\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 async fetch(input: RequestInfo | URL, init?: RequestInit) {\n if (!initializedManager || !runtimeFactory) {\n stopHeartbeat();\n return fetch(input, init);\n }\n\n if (initializedManager.getAccountCount() === 0) {\n stopHeartbeat();\n throw new Error(\n \"No Anthropic accounts configured. Run `opencode auth login` to add an account.\",\n );\n }\n\n ensureHeartbeat(initializedManager.getActiveAccount()?.accessToken);\n\n if (!poolManager || !cascadeStateManager) {\n poolManager = new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager = new CascadeStateManager();\n }\n\n return executeWithAccountRotation(\n initializedManager,\n runtimeFactory,\n client,\n input,\n init,\n {\n poolManager,\n cascadeStateManager,\n poolChainConfig,\n },\n );\n },\n };\n },\n },\n };\n};\n","import { createAccountManagerForProvider } from \"opencode-multi-account-core\";\nimport { getConfig } from \"./config\";\nimport { isClaimedByOther, readClaims, writeClaim } from \"./claims\";\nimport { isTokenExpired, refreshToken } from \"./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 { createClaimsManager, type ClaimsMap } from \"opencode-multi-account-core\";\nimport { CLAIMS_FILENAME } from \"./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 { exec } from \"node:child_process\";\nimport * as v from \"valibot\";\nimport { TOKEN_REFRESH_TIMEOUT_MS } from \"./constants\";\nimport { loadCCDerivedAuthProfile } from \"./cc-derived-profile\";\nimport { detectOAuthConfig } from \"./oauth-config-detect\";\nimport { startCallbackServer } from \"./oauth-callback-server\";\nimport { generatePKCE, generateState } from \"./oauth-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 \"./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 `start \"\" ${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\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 loadCCDerivedAuthProfile();\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 loadCCDerivedAuthProfile();\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 loadCCDerivedAuthProfile();\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 = `${cfg.authorizeUrl}?${new URLSearchParams({\n code: \"true\",\n client_id: cfg.clientId,\n response_type: \"code\",\n redirect_uri: redirectUri,\n scope: cfg.scopes,\n code_challenge: codeChallenge,\n code_challenge_method: \"S256\",\n state,\n }).toString()}`;\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,\n planTier: profileData?.planTier ?? \"\",\n addedAt: now,\n lastUsed: now,\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 loadCCDerivedAuthProfile();\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.uuid = 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 { 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","import derivedDefaultsJson from \"./fixtures/defaults/cc-derived-defaults.json\";\nimport bundledTemplateJson from \"./fingerprint-data.json\";\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 DEFAULT_ANTHROPIC_VERSION = bundledTemplate.header_values?.[\"anthropic-version\"] || derivedDefaults.request?.anthropicVersion || \"2023-06-01\";\nconst DEFAULT_X_APP = bundledTemplate.header_values?.[\"x-app\"] || derivedDefaults.request?.xApp || \"cli\";\nconst DEFAULT_BETA_HEADER = bundledTemplate.anthropic_beta || bundledTemplate.header_values?.[\"anthropic-beta\"] || 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: DEFAULT_BASE_API_URL,\n 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 { 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>;\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 await new Promise<string>((resolve, reject) => {\n childProcess.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 await nodeTokenRequestRunner(options);\n}\n\nexport function setNodeTokenRequestRunnerForTest(runner: NodeTokenRequestRunner | null): void {\n nodeTokenRequestRunner = runner ?? defaultRunNodeTokenRequest;\n}\n","import {\n ANTHROPIC_OAUTH_ADAPTER,\n ANTHROPIC_PROFILE_ENDPOINT,\n ANTHROPIC_USAGE_ENDPOINT,\n PLAN_LABELS,\n} from \"./constants\";\nimport { formatWaitTime } from \"./utils\";\nimport * as v from \"valibot\";\nimport { UsageLimitsSchema } from \"./types\";\nimport type { ManagedAccount, UsageLimits } from \"./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\n// ─── Schemas (Single Source of Truth) ───────────────────────────\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 email: v.optional(v.string()),\n});\n\nexport const StoredAccountSchema = v.object({\n uuid: 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\n// ─── Types (derived from schemas) ───────────────────────────────\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\n// ─── Plugin Config Schema ────────────────────────────────────────\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\n// ─── External Plugin Auth Hook ───────────────────────────────────\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\n// ─── Types (manual — not from external data) ────────────────────\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 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 \"./constants\";\nimport { refreshWithOAuth } from \"./anthropic-oauth\";\nimport type {\n ManagedAccount,\n PluginClient,\n TokenRefreshResult,\n} from \"./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 hasPermanentMessage = PERMANENT_FAILURE_MESSAGE_PATTERNS\n .some((pattern) => pattern.test(message));\n const isPermanent = hasPermanentMessage;\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 \"./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 \"./rate-limit\";\nimport { executeWithPoolChainRotation } from \"./pool-chain-executor\";\nimport type { PoolChainAccountManager } from \"./pool-chain-executor\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"./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 \"./config\";\nimport { fetchUsage } from \"./usage\";\nimport { formatWaitTime, getAccountLabel, showToast } from \"./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 \"./rate-limit\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"./utils\";\nimport type { ManagedAccount, PluginClient } from \"./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 \"../utils\";\nimport { getPlanLabel } from \"../usage\";\nimport type { AccountSelectionStrategy, ManagedAccount, UsageLimits } from \"../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 const fullLabel = `${label} ${badge}`;\n\n return {\n label: fullLabel,\n hint: account.lastUsed ? `used ${formatRelativeTime(account.lastUsed)}` : \"\",\n value: account,\n disabled: false,\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 \"./constants\";\n\nexport class AccountStore extends CoreAccountStore {\n constructor() {\n super(ACCOUNTS_FILENAME);\n }\n}\n\nexport type { DiskCredentials };\n","import { AccountManager } from \"./account-manager\";\nimport { fetchProfile, fetchUsage } from \"./usage\";\nimport { isTokenExpired } from \"./token\";\nimport { getConfig, updateConfigField } from \"./config\";\nimport { isTTY } from \"./ui/ansi\";\nimport { showAuthMenu, showManageAccounts, showStrategySelect, printQuotaReport, printQuotaError } from \"./ui/auth-menu\";\nimport { createMinimalClient, getAccountLabel } from \"./utils\";\nimport { AccountStore } from \"./account-store\";\nimport { loginWithOAuth } from \"./anthropic-oauth\";\nimport { randomUUID } from \"node:crypto\";\nimport { exec } from \"node:child_process\";\nimport type { ManagedAccount, OAuthCredentials, PluginClient, StoredAccount } from \"./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}\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\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 };\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(targetAccount.uuid, toOAuthCredentials(callbackResult));\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 },\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\n if (manager) {\n const countBefore = manager.getAccounts().length;\n await manager.addAccount(auth, email);\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);\n console.log(\"\\n✅ Account saved.\\n\");\n }\n }\n\n return callbackResult;\n },\n };\n}\n\nfunction openBrowser(url: string): void {\n const commands: Record<string, string> = {\n darwin: \"open\",\n win32: \"start\",\n };\n const cmd = commands[process.platform] ?? \"xdg-open\";\n exec(`${cmd} ${JSON.stringify(url)}`);\n}\n\nasync function persistFallback(auth: OAuthCredentials): Promise<void> {\n try {\n const store = new AccountStore();\n const now = Date.now();\n const account: StoredAccount = {\n uuid: randomUUID(),\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 };\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 \"./config\";\nimport { isTokenExpired, refreshToken } from \"./token\";\nimport { debugLog } from \"./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 \"./account-store\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { isTokenExpired, refreshToken } from \"./token\";\nimport { TokenRefreshError } from \"opencode-multi-account-core\";\nimport {\n applyRequestToolMasking,\n extractModelIdFromBody,\n extractToolNamesFromRequestBody,\n transformRequestUrl,\n} from \"./request-transform\";\nimport {\n addExcludedBeta,\n ensureOauthBeta,\n extractRejectedBetas,\n getExcludedBetas,\n getModelBetas,\n isUnexpectedBetaError,\n getNextBetaToExclude,\n isLongContextError,\n LONG_CONTEXT_BETAS,\n} from \"./betas\";\nimport {\n filterBillableBetas,\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./upstream-headers\";\nimport {\n buildUpstreamRequest,\n createStreamingReverseMapper,\n getDanglingToolUseError,\n getUpstreamSessionId,\n reverseMapResponse,\n} from \"./upstream-request\";\nimport { loadClaudeIdentity, type ClaudeIdentity } from \"./claude-identity\";\nimport { loadTemplate } from \"./fingerprint-capture\";\nimport type { PluginClient, StoredAccount } from \"./types\";\nimport { recordObservedToolNames } from \"./tool-observation\";\nimport { debugLog } from \"./utils\";\nimport { enrich429, sanitizeError } from \"./error-utils\";\nimport { computePacingDelay, resolvePacingConfig } from \"./pacing\";\n\ntype BaseFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\n\ninterface AccountRuntime {\n fetch: BaseFetch;\n}\n\nconst TOKEN_REFRESH_PERMANENT_FAILURE_STATUS = 401;\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 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): { 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 = loadTemplate();\n\n const upstreamRequest = buildUpstreamRequest(\n parsed as Record<string, unknown>,\n identity,\n template,\n { sessionId },\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\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\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 lastRequestTime = 0;\n private pacingGate = Promise.resolve();\n private pacingTestOverrides: PacingTestOverrides = {};\n\n constructor(\n private readonly store: AccountStore,\n private readonly client: PluginClient,\n private readonly identity: ClaudeIdentity = loadClaudeIdentity(),\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 refreshed = await refreshToken(storedAccount.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.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 ?? storedAccount.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 ...excludeBetas(splitBetaValues(getBetaHeader()), excludedBetas),\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 ): 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 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, this.identity, sessionId)\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): Promise<Response> => {\n await reservePacingSlot();\n\n try {\n const response = await fetch(transformedInput, {\n ...init,\n headers: requestHeaders,\n body: transformedRequest.body,\n });\n return await enrichRateLimitResponse(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 response = await performFetch(headers);\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 betaToExclude = getNextBetaToExclude(modelId);\n if (!betaToExclude) {\n break;\n }\n\n addExcludedBeta(modelId, betaToExclude);\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);\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(input, init, accessToken);\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 { ensureOauthBeta, getModelBetas } from \"./betas\";\nimport { loadClaudeIdentity } from \"./claude-identity\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { loadTemplate } from \"./fingerprint-capture\";\nimport {\n createStreamingReverseMapper,\n buildUpstreamRequest,\n} from \"./upstream-request\";\nimport {\n applyOutboundToolFlow,\n buildRequestScopedToolLookup,\n type ReverseLookup,\n} from \"./tool-flow\";\nimport {\n filterBillableBetas,\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./upstream-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, 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 = loadClaudeIdentity(),\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 = 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 ...excludeBetas(splitHeaderValues(getBetaHeader()), excludedBetas),\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\" ? 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 { loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\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\", \"interleaved-thinking-2025-05-14\"],\n modelOverrides: {\n \"4-6\": {\n add: [\"effort-2025-11-24\"],\n },\n },\n};\n\nexport function getCliVersion(): string {\n return loadCCDerivedRequestProfile().cliVersion;\n}\n\nexport function getUserAgent(): string {\n return loadCCDerivedRequestProfile().userAgent;\n}\n\nexport function getRequiredBetas(): string[] {\n return splitBetaFlags(process.env.ANTHROPIC_BETA_FLAGS ?? config.baseBetas.join(\",\"));\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 { 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 = modelId.toLowerCase();\n if (!lowerModelId.includes(\"opus\") && !lowerModelId.includes(\"sonnet\")) {\n return false;\n }\n\n const versionMatch = lowerModelId.match(/(opus|sonnet)-(\\d+)-(\\d+)/);\n if (!versionMatch) {\n return false;\n }\n\n const major = Number.parseInt(versionMatch[2] ?? \"0\", 10);\n const minor = Number.parseInt(versionMatch[3] ?? \"0\", 10);\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 betas = [...getRequiredBetas()];\n const longContextBeta = config.longContextBetas[0];\n\n if (\n longContextBeta\n && process.env.ANTHROPIC_ENABLE_1M_CONTEXT === \"true\"\n && supports1mContext(modelId)\n ) {\n betas.push(longContextBeta);\n }\n\n const override = getModelOverride(modelId);\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 { 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 try {\n for (const path of getCandidatePaths()) {\n const identity = parseIdentityFile(path);\n if (identity) {\n return identity;\n }\n }\n } catch {\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 { createHash, randomUUID } from \"node:crypto\";\nimport type { ClaudeIdentity } from \"./claude-identity\";\nimport type { TemplateData } from \"./fingerprint-capture\";\nimport { getRuntimeModelCapability } from \"./model-capabilities\";\nimport { detectCliVersion } from \"./cli-version\";\n\nconst BILLING_SEED = \"59cf53e54c78\";\nconst SESSION_IDLE_ROTATE_MS = 15 * 60 * 1000;\nconst MAX_TOOL_RESULT_TEXT_LENGTH = 30 * 1024;\nconst TRUNCATION_SUFFIX = \"[...truncated]\";\nconst DEFAULT_CONTEXT_MANAGEMENT = {};\nconst DEFAULT_OUTPUT_CONFIG = {};\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;\nconst ORCHESTRATION_PATTERNS = ORCHESTRATION_TAG_NAMES.flatMap((tag) => [\n new RegExp(`<${tag}\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/${tag}>`, \"gi\"),\n new RegExp(`<${tag}\\\\b[^>]*/>`, \"gi\"),\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\ntype JsonRecord = Record<string, unknown>;\n\ntype ContentBlock = JsonRecord & {\n type?: string;\n name?: string;\n text?: string;\n content?: unknown;\n};\n\ntype Message = JsonRecord & {\n role?: string;\n content?: string | ContentBlock[];\n};\n\ntype ReverseLookup = Map<string, string> | Record<string, string> | undefined;\n\ninterface UpstreamRequestTestOverrides {\n now?: () => number;\n createSessionId?: () => string;\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\nfunction cloneBody<T>(value: T): T {\n return structuredClone(value);\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 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 = sanitizeAndScrubText(block.text);\n }\n\n if (block.type !== \"tool_result\") {\n return;\n }\n\n if (typeof block.content === \"string\") {\n block.content = truncateToolResultText(sanitizeAndScrubText(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(sanitizeAndScrubText(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 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 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\nfunction stripUnsupportedSamplingFields(body: Record<string, unknown>): void {\n delete body.temperature;\n delete body.top_p;\n delete body.top_k;\n}\n\nfunction stripThinkingControlFields(body: Record<string, unknown>): void {\n delete body.thinking;\n delete body.context_management;\n delete body.output_config;\n}\n\nconst ADAPTIVE_THINKING_MODEL_MATCHERS = [\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];\nconst DEFAULT_MAX_OUTPUT_TOKENS = 64_000;\n\nfunction normalizeModelId(modelId: string): string {\n return modelId.trim().toLowerCase();\n}\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 = normalizeModelId(modelId);\n if (normalized.includes(\"haiku\")) {\n return false;\n }\n\n return ADAPTIVE_THINKING_MODEL_MATCHERS.some((matches) => matches(normalized));\n}\n\nfunction getModelMaxOutputTokens(): number {\n return DEFAULT_MAX_OUTPUT_TOKENS;\n}\n\nexport function resolveMaxTokens(requestedMaxTokens: unknown): number {\n const modelCap = getModelMaxOutputTokens();\n if (typeof requestedMaxTokens !== \"number\" || !Number.isFinite(requestedMaxTokens)) {\n return modelCap;\n }\n\n const normalized = Math.floor(requestedMaxTokens);\n if (normalized <= 0) {\n return modelCap;\n }\n\n return Math.min(normalized, modelCap);\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 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\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\nfunction hasCompleteToolSchemas(tools: Array<{ [key: string]: unknown }>): 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: Array<{ [key: string]: unknown }>,\n templateTools: Array<{ [key: string]: unknown }>,\n): Array<{ [key: string]: unknown }> {\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\nfunction buildOutboundTools(\n incomingTools: Array<{ [key: string]: unknown }>,\n templateTools: Array<{ [key: string]: unknown }>,\n): Array<{ [key: string]: unknown }> {\n if (incomingTools.length > 0) {\n return enrichIncomingToolsWithTemplateSchemas(incomingTools, templateTools);\n }\n\n if (!hasCompleteToolSchemas(templateTools)) {\n return incomingTools;\n }\n\n return templateTools.map((tool) => ({ ...tool }));\n}\n\nfunction getCcVersion(template: TemplateData): string {\n return template.cc_version ?? detectCliVersion();\n}\n\nfunction buildBillingHeader(firstUserMessage: string, template: TemplateData): string {\n const version = getCcVersion(template);\n const buildTag = computeBuildTag(firstUserMessage, version);\n return `x-anthropic-billing-header: cc_version=${version}.${buildTag}; cc_entrypoint=cli; cch=00000;`;\n}\n\nfunction 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 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\" ? 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 sanitizeMessages(body: Record<string, unknown>): 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}\n\nexport function scrubFrameworkIdentifiers(text: string): string {\n let result = text;\n\n for (const pattern of FRAMEWORK_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 computeBuildTag(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 buildUpstreamRequest(\n inputBody: Record<string, unknown>,\n identity: ClaudeIdentity,\n template: TemplateData,\n options?: { sessionId?: string },\n): Record<string, unknown> {\n const body = cloneBody(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 = sanitizeAndScrubText(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\n compactMessageContent(messages);\n trimTrailingEmptyTurns(messages);\n\n const firstUserMessage = extractFirstUserMessage(messages);\n const billingHeader = buildBillingHeader(firstUserMessage, template);\n const mergedSystemPrompt = [\n template.system_prompt,\n ...filterInjectedSystemTexts(systemTexts, template, billingHeader),\n ]\n .map((entry) => sanitizeAndScrubText(entry))\n .filter(Boolean)\n .join(\"\\n\\n\");\n const activeSessionId = options?.sessionId ?? getActiveSessionId();\n\n body.messages = messages;\n stripUnsupportedSamplingFields(body);\n stripThinkingControlFields(body);\n\n const incomingTools = Array.isArray(body.tools) ? body.tools as Array<{ [key: string]: unknown }> : [];\n body.tools = buildOutboundTools(incomingTools, template.tools);\n body.system = [\n {\n type: \"text\",\n text: billingHeader,\n },\n {\n type: \"text\",\n text: template.agent_identity,\n cache_control: { type: \"ephemeral\" },\n },\n {\n type: \"text\",\n text: mergedSystemPrompt,\n cache_control: { type: \"ephemeral\" },\n },\n ];\n body.metadata = {\n ...(isRecord(body.metadata) ? body.metadata : {}),\n user_id: JSON.stringify({\n device_id: identity.deviceId,\n account_uuid: identity.accountUuid,\n session_id: activeSessionId,\n }),\n };\n const modelId = typeof body.model === \"string\" ? body.model : \"\";\n if (supportsAdaptiveThinking(modelId)) {\n body.thinking = { type: \"adaptive\" };\n body.context_management = DEFAULT_CONTEXT_MANAGEMENT;\n body.output_config = DEFAULT_OUTPUT_CONFIG;\n }\n body.max_tokens = resolveMaxTokens(body.max_tokens);\n\n return orderBodyForOutbound(body, template.body_field_order);\n}\n\nexport function orderBodyForOutbound(\n body: Record<string, unknown>,\n overrideOrder?: string[],\n): Record<string, unknown> {\n if (!Array.isArray(overrideOrder) || overrideOrder.length === 0) return body;\n\n const ordered: Record<string, unknown> = {};\n const seen = new Set<string>();\n\n for (const name of overrideOrder) {\n if (seen.has(name)) continue;\n if (Object.prototype.hasOwnProperty.call(body, name)) {\n ordered[name] = body[name];\n seen.add(name);\n }\n }\n\n for (const k of Object.keys(body)) {\n if (!seen.has(k)) ordered[k] = body[k];\n }\n\n return ordered;\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 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\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: Record<string, unknown>): void {\n runtimeModelCapabilities.clear();\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","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\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction shouldMaskToolName(name: string | undefined, claudeToolNames: ReadonlySet<string>): name is string {\n if (!name) {\n return false;\n }\n\n return !claudeToolNames.has(name)\n && !name.startsWith(\"mcp__\")\n && !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 collectToolNames(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 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 const lookup: ReverseLookup = new Map();\n const usedOutgoing = new Set<string>();\n const claudeToolSet = buildClaudeToolNameSet(claudeToolNames);\n\n for (const originalName of collectToolNames(parsed)) {\n if (!shouldMaskToolName(originalName, claudeToolSet)) {\n lookup.set(originalName, originalName);\n usedOutgoing.add(originalName);\n continue;\n }\n\n let length = 8;\n let masked = buildMaskedToolName(originalName, length);\n while (usedOutgoing.has(masked)) {\n length += 2;\n masked = buildMaskedToolName(originalName, length);\n }\n\n lookup.set(masked, originalName);\n usedOutgoing.add(masked);\n }\n\n return lookup;\n}\n\nfunction getOutgoingName(name: string | undefined, reverseLookup: ReverseLookup): string | undefined {\n if (!name) {\n return name;\n }\n\n for (const [outgoing, original] of reverseLookup) {\n if (original === name) {\n return outgoing;\n }\n }\n\n return name;\n}\n\nfunction rewriteToolUseNames(value: unknown, reverseLookup: ReverseLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => rewriteToolUseNames(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] = rewriteToolUseNames(nested, reverseLookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getOutgoingName(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 reverseLookup = buildRequestScopedToolLookup(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, reverseLookup),\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, reverseLookup),\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, reverseLookup),\n };\n }\n\n return {\n body: JSON.stringify(next),\n reverseLookup,\n };\n}\n\nexport function reverseToolFlowPayload<T>(value: T, reverseLookup?: ReverseLookup): T {\n if (!reverseLookup || reverseLookup.size === 0) {\n return rewriteToolUseNames(value, new Map()) as T;\n }\n\n return rewriteToolUseNames(value, reverseLookup) as T;\n}\n","import { randomUUID } from \"node:crypto\";\nimport { loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\n\nconst UPSTREAM_TIMEOUT_MS = 300_000;\nconst STAINLESS_PACKAGE_VERSION = \"0.81.0\";\n\nconst BILLABLE_BETA_PREFIXES = [\"extended-cache-ttl-\"];\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\nexport function getStaticHeaders(): Record<string, string> {\n const profile = loadCCDerivedRequestProfile();\n\n const headers: Record<string, string> = {\n \"accept\": \"application/json\",\n \"content-type\": \"application/json\",\n \"anthropic-dangerous-direct-browser-access\": \"true\",\n \"user-agent\": profile.userAgent,\n \"x-app\": profile.xApp,\n \"x-stainless-arch\": process.arch,\n \"x-stainless-lang\": \"js\",\n \"x-stainless-os\": getOsName(),\n \"x-stainless-package-version\": STAINLESS_PACKAGE_VERSION,\n \"x-stainless-retry-count\": \"0\",\n \"x-stainless-runtime\": \"node\",\n \"x-stainless-runtime-version\": process.version,\n };\n\n const { template } = profile;\n if (template.header_values) {\n for (const [key, value] of Object.entries(template.header_values)) {\n headers[key] = value;\n }\n }\n\n return headers;\n}\n\nexport function getPerRequestHeaders(sessionId: string): Record<string, string> {\n return {\n \"x-claude-code-session-id\": sessionId,\n \"x-client-request-id\": randomUUID(),\n \"anthropic-version\": getAnthropicVersion(),\n \"x-stainless-timeout\": String(UPSTREAM_TIMEOUT_MS / 1000),\n };\n}\n\nexport function getAnthropicVersion(): string {\n return loadCCDerivedRequestProfile().anthropicVersion;\n}\n\nexport function getBetaHeader(): string {\n return loadCCDerivedRequestProfile().betaHeader;\n}\n\nexport function orderHeadersForOutbound(\n headers: Record<string, string>,\n overrideHeaderOrder?: string[],\n): Record<string, string> | Array<[string, string]> {\n const { template } = loadCCDerivedRequestProfile();\n const order = overrideHeaderOrder ?? template.header_order;\n\n if (!Array.isArray(order) || order.length === 0) {\n return headers;\n }\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\n for (const name of order) {\n const key = name.toLowerCase();\n if (seen.has(key)) {\n continue;\n }\n\n const value = lowerToValue.get(key);\n if (value !== undefined) {\n ordered.push([name, value]);\n seen.add(key);\n }\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (!seen.has(key.toLowerCase())) {\n ordered.push([key, value]);\n }\n }\n\n return ordered;\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 \"./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 || v === null) 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 { promises as fs } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { getConfigDir } from \"opencode-multi-account-core\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport type { AccountStore } from \"./account-store\";\nimport type { OAuthCredentials, PluginClient, StoredAccount } from \"./types\";\n\nconst AUTH_JSON_FILENAME = \"auth.json\";\n\nfunction hasCompleteOAuthCredential(account: StoredAccount): account is StoredAccount & {\n refreshToken: string;\n accessToken: string;\n expiresAt: number;\n} {\n return (\n typeof account.refreshToken === \"string\"\n && account.refreshToken.length > 0\n && typeof account.accessToken === \"string\"\n && account.accessToken.length > 0\n && typeof account.expiresAt === \"number\"\n && Number.isFinite(account.expiresAt)\n );\n}\n\nfunction selectBootstrapAccount(\n accounts: StoredAccount[],\n activeAccountUuid?: string,\n): (StoredAccount & { refreshToken: string; accessToken: string; expiresAt: number }) | null {\n const completeAccounts = accounts.filter(hasCompleteOAuthCredential);\n if (completeAccounts.length === 0) {\n return null;\n }\n\n const activeAccount = activeAccountUuid\n ? completeAccounts.find((account) => account.uuid === activeAccountUuid)\n : undefined;\n if (activeAccount) {\n return activeAccount;\n }\n\n const firstUsableAccount = completeAccounts.find(\n (account) => account.enabled !== false && account.isAuthDisabled !== true,\n );\n return firstUsableAccount ?? completeAccounts[0] ?? null;\n}\n\nasync function readCurrentAuth(providerId: string): Promise<OAuthCredentials | null> {\n const authPath = join(getConfigDir(), AUTH_JSON_FILENAME);\n\n let raw: string;\n try {\n raw = await fs.readFile(authPath, \"utf-8\");\n } catch {\n return null;\n }\n\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const providerAuth = parsed[providerId] as Partial<OAuthCredentials> | undefined;\n if (\n providerAuth?.type !== \"oauth\"\n || typeof providerAuth.refresh !== \"string\"\n || typeof providerAuth.access !== \"string\"\n || typeof providerAuth.expires !== \"number\"\n ) {\n return null;\n }\n\n return {\n type: \"oauth\",\n refresh: providerAuth.refresh,\n access: providerAuth.access,\n expires: providerAuth.expires,\n };\n } catch {\n return null;\n }\n}\n\nfunction shouldSyncBootstrapAuth(currentAuth: OAuthCredentials | null, nextAuth: OAuthCredentials): boolean {\n if (!currentAuth) {\n return true;\n }\n\n if (\n currentAuth.refresh === nextAuth.refresh\n && currentAuth.access === nextAuth.access\n && currentAuth.expires === nextAuth.expires\n ) {\n return false;\n }\n\n return currentAuth.expires < nextAuth.expires;\n}\n\nexport async function syncBootstrapAuth(\n client: PluginClient,\n store: AccountStore,\n): Promise<boolean> {\n const storage = await store.load();\n const bootstrapAccount = selectBootstrapAccount(storage.accounts, storage.activeAccountUuid);\n if (!bootstrapAccount) {\n return false;\n }\n\n const nextAuth: OAuthCredentials = {\n type: \"oauth\",\n refresh: bootstrapAccount.refreshToken,\n access: bootstrapAccount.accessToken,\n expires: bootstrapAccount.expiresAt,\n };\n\n const currentAuth = await readCurrentAuth(ANTHROPIC_OAUTH_ADAPTER.authProviderId);\n if (!shouldSyncBootstrapAuth(currentAuth, nextAuth)) {\n return false;\n }\n\n await client.auth.set({\n path: { id: ANTHROPIC_OAUTH_ADAPTER.authProviderId },\n body: nextAuth,\n });\n return true;\n}\n\nexport const __bootstrapAuthTestUtils = {\n selectBootstrapAccount,\n shouldSyncBootstrapAuth,\n};\n","import { getUpstreamSessionId } from \"./upstream-request\";\nimport { loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\nimport { getAnthropicVersion } from \"./upstream-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 `${loadCCDerivedRequestProfile().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":["v","v","now","createExecutorForProvider","executeWithAccountRotation","createExecutorForProvider","config","now","exec","now","randomUUID","createHash","randomUUID","randomUUID","isRecord","normalizeModelId","tool","createHash","lines","createHash","isRecord","tool","randomUUID","sessionId","randomUUID","tool","join","join","now","v","now","excludedBetas","sessionId","response","fs","join","getConfigDir","join","getConfigDir","fs","sessionId","sessionId","now","usage","authProfile"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/account-manager.ts","../src/claims.ts","../src/anthropic-oauth.ts","../src/cc-derived-profile.ts","../src/oauth-callback-server.ts","../src/oauth-pkce.ts","../src/token-node-request.ts","../src/usage.ts","../src/types.ts","../src/token.ts","../src/executor.ts","../src/rate-limit.ts","../src/pool-chain-executor.ts","../src/ui/ansi.ts","../src/ui/select.ts","../src/ui/confirm.ts","../src/ui/auth-menu.ts","../src/account-store.ts","../src/auth-handler.ts","../src/proactive-refresh.ts","../src/runtime-factory.ts","../src/request-transform.ts","../src/model-config.ts","../src/betas.ts","../src/claude-identity.ts","../src/upstream-request.ts","../src/model-capabilities.ts","../src/tool-flow.ts","../src/upstream-headers.ts","../src/tool-observation.ts","../src/error-utils.ts","../src/pacing.ts","../src/bootstrap-auth.ts","../src/session-heartbeat.ts"],"sourcesContent":["import { tool } from \"@opencode-ai/plugin\";\nimport type { Plugin } from \"@opencode-ai/plugin\";\nimport {\n CascadeStateManager,\n loadPoolChainConfig,\n migrateFromAuthJson,\n PoolManager,\n type PoolChainConfig,\n} from \"opencode-multi-account-core\";\nimport { AccountManager } from \"./account-manager\";\nimport { executeWithAccountRotation } from \"./executor\";\nimport { getPlanLabel, getUsageSummary } from \"./usage\";\nimport { handleAuthorize } from \"./auth-handler\";\nimport { loadConfig } from \"./config\";\nimport { ProactiveRefreshQueue } from \"./proactive-refresh\";\nimport { AccountStore } from \"./account-store\";\nimport { AccountRuntimeFactory } from \"./runtime-factory\";\nimport { debugLog, formatWaitTime, getAccountLabel, showToast } from \"./utils\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { loadCCDerivedAuthProfile, loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\nimport {\n checkCCCompat,\n detectDrift,\n refreshLiveFingerprintAsync,\n} from \"./fingerprint-capture\";\nimport {\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./upstream-headers\";\nimport { computeBuildTag, getUpstreamSessionId } from \"./upstream-request\";\nimport { loadClaudeIdentity } from \"./claude-identity\";\nimport { syncBootstrapAuth } from \"./bootstrap-auth\";\nimport { sanitizeError } from \"./error-utils\";\nimport { getSessionId, startHeartbeat } from \"./session-heartbeat\";\nimport type { OAuthCredentials, PluginClient } from \"./types\";\nimport { ingestProviderModelsCapabilities } from \"./model-capabilities\";\n\nconst EMPTY_OAUTH_CREDENTIALS: OAuthCredentials = {\n type: \"oauth\",\n refresh: \"\",\n access: \"\",\n expires: 0,\n};\n\nif (process.env.CLAUDE_MULTI_ACCOUNT_TRACE_PLUGIN === \"1\") {\n console.error(\"[anthropic-multi-account] module loaded\");\n}\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 const buildTag = computeBuildTag(firstUserMessage, version);\n return `x-anthropic-billing-header: cc_version=${version}.${buildTag}; cc_entrypoint=sdk-cli; cch=00000;`;\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\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 = loadCCDerivedRequestProfile();\n const template = requestProfile.template;\n const claudeIdentity = loadClaudeIdentity();\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\n const stopHeartbeat = (): void => {\n heartbeatHandle?.stop();\n heartbeatHandle = null;\n heartbeatToken = null;\n heartbeatSessionId = null;\n };\n\n const ensureHeartbeat = (accessToken: string | undefined): void => {\n if (!accessToken || !claudeIdentity.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: claudeIdentity.deviceId,\n accessToken,\n });\n };\n\n const startupDrift = 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 = checkCCCompat();\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 refreshLiveFingerprintAsync({ silent: true })\n .then((refreshedTemplate) => {\n const refreshedDrift = 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 await syncBootstrapAuth(client, store)\n .then((synced) => {\n debugLog(client, \"Bootstrap auth sync completed\", { synced });\n })\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 error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n });\n\n let manager: AccountManager | null = null;\n let runtimeFactory: AccountRuntimeFactory | null = null;\n let refreshQueue: ProactiveRefreshQueue | null = null;\n let poolManager: PoolManager | null = null;\n let cascadeStateManager: CascadeStateManager | null = null;\n let poolChainConfig: PoolChainConfig = { pools: [], chains: [] };\n\n async function ensureExecutionInfrastructure(): Promise<void> {\n runtimeFactory ??= new AccountRuntimeFactory(store, client, claudeIdentity);\n poolChainConfig = await loadPoolChainConfig();\n\n poolManager ??= new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager ??= new CascadeStateManager();\n\n if (manager) {\n manager.setRuntimeFactory(runtimeFactory);\n manager.setClient(client);\n }\n }\n\n async function startRefreshQueueIfNeeded(): Promise<void> {\n if (!manager || manager.getAccountCount() === 0) {\n return;\n }\n\n await ensureExecutionInfrastructure();\n\n if (refreshQueue) {\n return;\n }\n\n refreshQueue = new ProactiveRefreshQueue(\n client,\n store,\n (uuid) => {\n runtimeFactory?.invalidate(uuid);\n void manager?.refresh();\n },\n );\n refreshQueue.start();\n }\n\n async function initializeManagerFromStore(): Promise<boolean> {\n if (manager) {\n return manager.getAccountCount() > 0;\n }\n\n const storage = await store.load();\n if (storage.accounts.length === 0) {\n return false;\n }\n\n manager = await AccountManager.create(store, EMPTY_OAUTH_CREDENTIALS, client);\n await ensureExecutionInfrastructure();\n await startRefreshQueueIfNeeded();\n ensureHeartbeat(manager.getActiveAccount()?.accessToken);\n return manager.getAccountCount() > 0;\n }\n\n async function initializeManagerFromAuth(credentials: OAuthCredentials): Promise<void> {\n if (!manager) {\n manager = await AccountManager.create(store, credentials, client);\n }\n\n await ensureExecutionInfrastructure();\n await startRefreshQueueIfNeeded();\n }\n\n await initializeManagerFromStore().catch(() => {});\n\n return {\n \"experimental.chat.system.transform\": (input: Record<string, unknown>, output: { system?: string[] }) => {\n const billingHeader = composeBillingSystemEntry(extractFirstUserText(input), claudeCodeVersion);\n prependMissingSystemEntries(output, [\n billingHeader,\n upstreamAgentIdentity,\n upstreamSystemPrompt,\n ]);\n },\n\n tool: {\n [ANTHROPIC_OAUTH_ADAPTER.statusToolName]: tool({\n description:\n \"Show status of all multi-auth accounts including rate limits and usage.\",\n args: {},\n async execute(_args, _context) {\n if (!manager) {\n return \"Multi-auth not initialized. No OAuth accounts detected.\";\n }\n\n const accounts = manager.getAccounts();\n if (accounts.length === 0) {\n return \"No accounts configured. Run `opencode auth login` to add an account.\";\n }\n\n const lines: string[] = [\n `## ${ANTHROPIC_OAUTH_ADAPTER.modelDisplayName} Multi-Auth Status (${accounts.length} accounts)\\n`,\n ];\n\n for (const account of accounts) {\n const isActive = account.uuid === manager.getActiveAccount()?.uuid;\n const marker = isActive ? \" **[ACTIVE]**\" : \"\";\n const label = getAccountLabel(account);\n const usage = getUsageSummary(account);\n const planLabel = getPlanLabel(account);\n const planBadge = planLabel ? ` [${planLabel}]` : \"\";\n\n const statusParts: string[] = [];\n if (account.isAuthDisabled) statusParts.push(`AUTH DISABLED: ${account.authDisabledReason}`);\n else if (!account.enabled) statusParts.push(\"disabled\");\n else statusParts.push(\"enabled\");\n\n if (account.rateLimitResetAt) {\n if (account.rateLimitResetAt > Date.now()) {\n const remaining = formatWaitTime(account.rateLimitResetAt - Date.now());\n statusParts.push(`RATE LIMITED (resets in ${remaining})`);\n } else {\n statusParts.push(\"RATE LIMIT RESET\");\n }\n }\n\n if (account.cachedUsage) {\n const now = Date.now();\n const usage = account.cachedUsage;\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 statusParts.push(\"USAGE EXHAUSTED\");\n }\n }\n\n lines.push(\n `- **${label}**${planBadge}${marker}: ${statusParts.join(\" | \")} | ${usage}`,\n );\n }\n\n return lines.join(\"\\n\");\n },\n }),\n },\n\n auth: {\n provider: ANTHROPIC_OAUTH_ADAPTER.authProviderId,\n methods: [\n {\n label: ANTHROPIC_OAUTH_ADAPTER.authMethodLabel,\n type: \"oauth\" as const,\n async authorize() {\n const inputs = arguments.length > 0 ? (arguments[0] as Record<string, string>) : undefined;\n return handleAuthorize(manager, inputs, client);\n },\n },\n { type: \"api\" as const, label: \"Create an API Key\" },\n { type: \"api\" as const, label: \"Manually enter API Key\" },\n ],\n\n async loader(\n getAuth: () => Promise<unknown>,\n provider: Record<string, unknown>,\n ) {\n const providerModels = (provider.models ?? {}) as Record<string, unknown>;\n ingestProviderModelsCapabilities(providerModels);\n debugLog(client, \"Auth loader received provider metadata\", {\n providerId: typeof provider.id === \"string\" ? provider.id : undefined,\n providerName: typeof provider.name === \"string\" ? provider.name : undefined,\n modelCount: Object.keys(providerModels).length,\n modelIds: Object.keys(providerModels),\n });\n\n const auth = await getAuth() as Record<string, unknown>;\n debugLog(client, \"Auth loader resolved auth payload\", {\n authType: typeof auth.type === \"string\" ? auth.type : undefined,\n authKeys: Object.keys(auth),\n });\n\n if (auth.type !== \"oauth\") {\n await syncBootstrapAuth(client, store)\n .then((synced) => {\n debugLog(client, \"Auth loader requested bootstrap auth sync\", { synced });\n })\n .catch((error) => {\n client.app.log({\n body: {\n service: ANTHROPIC_OAUTH_ADAPTER.serviceLogName,\n level: \"debug\",\n message: \"auth loader bootstrap sync failed\",\n extra: {\n error: sanitizeError(error),\n },\n },\n }).catch(() => {});\n });\n\n const recoveredFromStore = await initializeManagerFromStore();\n debugLog(client, \"Auth loader attempted store recovery\", {\n recoveredFromStore,\n });\n\n if (!recoveredFromStore || !manager || !runtimeFactory) {\n stopHeartbeat();\n return { apiKey: \"\", fetch };\n }\n\n const authProfile = await loadCCDerivedAuthProfile();\n\n return {\n apiKey: \"\",\n baseURL: authProfile.apiV1BaseUrl,\n \"chat.headers\": async (input: { provider?: { info?: { id?: string } } }, output: { headers: Record<string, string> }) => {\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 async fetch(input: RequestInfo | URL, init?: RequestInit) {\n if (!manager || !runtimeFactory) {\n stopHeartbeat();\n return fetch(input, init);\n }\n\n if (manager.getAccountCount() === 0) {\n stopHeartbeat();\n throw new Error(\n \"No Anthropic accounts configured. Run `opencode auth login` to add an account.\",\n );\n }\n\n ensureHeartbeat(manager.getActiveAccount()?.accessToken);\n\n if (!poolManager || !cascadeStateManager) {\n poolManager = new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager = new CascadeStateManager();\n }\n\n return executeWithAccountRotation(\n manager,\n runtimeFactory,\n client,\n input,\n init,\n {\n poolManager,\n cascadeStateManager,\n poolChainConfig,\n },\n );\n },\n };\n }\n\n for (const model of Object.values(providerModels) as Record<string, unknown>[]) {\n if (model) {\n model.cost = { input: 0, output: 0, cache: { read: 0, write: 0 } };\n }\n }\n\n const credentials = auth as OAuthCredentials;\n await migrateFromAuthJson(\"anthropic\", store);\n await initializeManagerFromAuth(credentials);\n ensureHeartbeat(credentials.access);\n\n const initializedManager = manager;\n if (!initializedManager) {\n return { apiKey: \"\", fetch };\n }\n\n debugLog(client, \"Auth loader initialized manager state\", {\n accountCount: initializedManager.getAccountCount(),\n activeAccountUuid: initializedManager.getActiveAccount()?.uuid,\n });\n\n if (initializedManager.getAccountCount() > 0) {\n const activeAccount = initializedManager.getActiveAccount();\n const activeLabel = activeAccount ? getAccountLabel(activeAccount) : \"none\";\n void showToast(\n client,\n `Multi-Auth: ${initializedManager.getAccountCount()} account(s) loaded. Active: ${activeLabel}`,\n \"info\",\n );\n await initializedManager.validateNonActiveTokens(client);\n\n const disabledCount = initializedManager.getAccounts().filter((a) => a.isAuthDisabled).length;\n if (disabledCount > 0) {\n void showToast(\n client,\n `${disabledCount} account(s) have auth failures.`,\n \"warning\",\n );\n }\n }\n\n const authProfile = await loadCCDerivedAuthProfile();\n\n return {\n apiKey: \"\",\n baseURL: authProfile.apiV1BaseUrl,\n \"chat.headers\": async (input: { provider?: { info?: { id?: string } } }, output: { headers: Record<string, string> }) => {\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 async fetch(input: RequestInfo | URL, init?: RequestInit) {\n if (!initializedManager || !runtimeFactory) {\n stopHeartbeat();\n return fetch(input, init);\n }\n\n if (initializedManager.getAccountCount() === 0) {\n stopHeartbeat();\n throw new Error(\n \"No Anthropic accounts configured. Run `opencode auth login` to add an account.\",\n );\n }\n\n ensureHeartbeat(initializedManager.getActiveAccount()?.accessToken);\n\n if (!poolManager || !cascadeStateManager) {\n poolManager = new PoolManager();\n poolManager.loadPools(poolChainConfig.pools);\n cascadeStateManager = new CascadeStateManager();\n }\n\n return executeWithAccountRotation(\n initializedManager,\n runtimeFactory,\n client,\n input,\n init,\n {\n poolManager,\n cascadeStateManager,\n poolChainConfig,\n },\n );\n },\n };\n },\n },\n };\n};\n","import { createAccountManagerForProvider } from \"opencode-multi-account-core\";\nimport { getConfig } from \"./config\";\nimport { isClaimedByOther, readClaims, writeClaim } from \"./claims\";\nimport { isTokenExpired, refreshToken } from \"./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 { createClaimsManager, type ClaimsMap } from \"opencode-multi-account-core\";\nimport { CLAIMS_FILENAME } from \"./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 { exec } from \"node:child_process\";\nimport * as v from \"valibot\";\nimport { TOKEN_REFRESH_TIMEOUT_MS } from \"./constants\";\nimport { loadCCDerivedAuthProfile } from \"./cc-derived-profile\";\nimport { detectOAuthConfig } from \"./oauth-config-detect\";\nimport { startCallbackServer } from \"./oauth-callback-server\";\nimport { generatePKCE, generateState } from \"./oauth-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 \"./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 `start \"\" ${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\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 loadCCDerivedAuthProfile();\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 loadCCDerivedAuthProfile();\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 loadCCDerivedAuthProfile();\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 = `${cfg.authorizeUrl}?${new URLSearchParams({\n code: \"true\",\n client_id: cfg.clientId,\n response_type: \"code\",\n redirect_uri: redirectUri,\n scope: cfg.scopes,\n code_challenge: codeChallenge,\n code_challenge_method: \"S256\",\n state,\n }).toString()}`;\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,\n planTier: profileData?.planTier ?? \"\",\n addedAt: now,\n lastUsed: now,\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 loadCCDerivedAuthProfile();\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.uuid = 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 { 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","import derivedDefaultsJson from \"./fixtures/defaults/cc-derived-defaults.json\";\nimport bundledTemplateJson from \"./fingerprint-data.json\";\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 DEFAULT_ANTHROPIC_VERSION = bundledTemplate.header_values?.[\"anthropic-version\"] || derivedDefaults.request?.anthropicVersion || \"2023-06-01\";\nconst DEFAULT_X_APP = bundledTemplate.header_values?.[\"x-app\"] || derivedDefaults.request?.xApp || \"cli\";\nconst DEFAULT_BETA_HEADER = bundledTemplate.anthropic_beta || bundledTemplate.header_values?.[\"anthropic-beta\"] || 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: DEFAULT_BASE_API_URL,\n 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 { 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>;\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 await new Promise<string>((resolve, reject) => {\n childProcess.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 await nodeTokenRequestRunner(options);\n}\n\nexport function setNodeTokenRequestRunnerForTest(runner: NodeTokenRequestRunner | null): void {\n nodeTokenRequestRunner = runner ?? defaultRunNodeTokenRequest;\n}\n","import {\n ANTHROPIC_OAUTH_ADAPTER,\n ANTHROPIC_PROFILE_ENDPOINT,\n ANTHROPIC_USAGE_ENDPOINT,\n PLAN_LABELS,\n} from \"./constants\";\nimport { formatWaitTime } from \"./utils\";\nimport * as v from \"valibot\";\nimport { UsageLimitsSchema } from \"./types\";\nimport type { ManagedAccount, UsageLimits } from \"./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\n// ─── Schemas (Single Source of Truth) ───────────────────────────\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 email: v.optional(v.string()),\n});\n\nexport const StoredAccountSchema = v.object({\n uuid: 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\n// ─── Types (derived from schemas) ───────────────────────────────\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\n// ─── Plugin Config Schema ────────────────────────────────────────\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\n// ─── External Plugin Auth Hook ───────────────────────────────────\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\n// ─── Types (manual — not from external data) ────────────────────\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 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 \"./constants\";\nimport { refreshWithOAuth } from \"./anthropic-oauth\";\nimport type {\n ManagedAccount,\n PluginClient,\n TokenRefreshResult,\n} from \"./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 hasPermanentMessage = PERMANENT_FAILURE_MESSAGE_PATTERNS\n .some((pattern) => pattern.test(message));\n const isPermanent = hasPermanentMessage;\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 \"./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 \"./rate-limit\";\nimport { executeWithPoolChainRotation } from \"./pool-chain-executor\";\nimport type { PoolChainAccountManager } from \"./pool-chain-executor\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"./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 \"./config\";\nimport { fetchUsage } from \"./usage\";\nimport { formatWaitTime, getAccountLabel, showToast } from \"./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 \"./rate-limit\";\nimport { formatWaitTime, getAccountLabel, showToast, sleep } from \"./utils\";\nimport type { ManagedAccount, PluginClient } from \"./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 \"../utils\";\nimport { getPlanLabel } from \"../usage\";\nimport type { AccountSelectionStrategy, ManagedAccount, UsageLimits } from \"../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 const fullLabel = `${label} ${badge}`;\n\n return {\n label: fullLabel,\n hint: account.lastUsed ? `used ${formatRelativeTime(account.lastUsed)}` : \"\",\n value: account,\n disabled: false,\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 \"./constants\";\n\nexport class AccountStore extends CoreAccountStore {\n constructor() {\n super(ACCOUNTS_FILENAME);\n }\n}\n\nexport type { DiskCredentials };\n","import { AccountManager } from \"./account-manager\";\nimport { fetchProfile, fetchUsage } from \"./usage\";\nimport { isTokenExpired } from \"./token\";\nimport { getConfig, updateConfigField } from \"./config\";\nimport { isTTY } from \"./ui/ansi\";\nimport { showAuthMenu, showManageAccounts, showStrategySelect, printQuotaReport, printQuotaError } from \"./ui/auth-menu\";\nimport { createMinimalClient, getAccountLabel } from \"./utils\";\nimport { AccountStore } from \"./account-store\";\nimport { loginWithOAuth } from \"./anthropic-oauth\";\nimport { randomUUID } from \"node:crypto\";\nimport { exec } from \"node:child_process\";\nimport type { ManagedAccount, OAuthCredentials, PluginClient, StoredAccount } from \"./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}\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\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 };\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(targetAccount.uuid, toOAuthCredentials(callbackResult));\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 },\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\n if (manager) {\n const countBefore = manager.getAccounts().length;\n await manager.addAccount(auth, email);\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);\n console.log(\"\\n✅ Account saved.\\n\");\n }\n }\n\n return callbackResult;\n },\n };\n}\n\nfunction openBrowser(url: string): void {\n const commands: Record<string, string> = {\n darwin: \"open\",\n win32: \"start\",\n };\n const cmd = commands[process.platform] ?? \"xdg-open\";\n exec(`${cmd} ${JSON.stringify(url)}`);\n}\n\nasync function persistFallback(auth: OAuthCredentials): Promise<void> {\n try {\n const store = new AccountStore();\n const now = Date.now();\n const account: StoredAccount = {\n uuid: randomUUID(),\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 };\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 \"./config\";\nimport { isTokenExpired, refreshToken } from \"./token\";\nimport { debugLog } from \"./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 \"./account-store\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { isTokenExpired, refreshToken } from \"./token\";\nimport { TokenRefreshError } from \"opencode-multi-account-core\";\nimport {\n applyRequestToolMasking,\n extractModelIdFromBody,\n extractToolNamesFromRequestBody,\n transformRequestUrl,\n} from \"./request-transform\";\nimport {\n addExcludedBeta,\n ensureOauthBeta,\n extractRejectedBetas,\n getExcludedBetas,\n getModelBetas,\n isUnexpectedBetaError,\n getNextBetaToExclude,\n isLongContextError,\n LONG_CONTEXT_BETAS,\n} from \"./betas\";\nimport {\n filterBillableBetas,\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./upstream-headers\";\nimport {\n buildUpstreamRequest,\n createStreamingReverseMapper,\n getDanglingToolUseError,\n getUpstreamSessionId,\n reverseMapResponse,\n} from \"./upstream-request\";\nimport { loadClaudeIdentity, type ClaudeIdentity } from \"./claude-identity\";\nimport { loadTemplate } from \"./fingerprint-capture\";\nimport type { PluginClient, StoredAccount } from \"./types\";\nimport { recordObservedToolNames } from \"./tool-observation\";\nimport { debugLog } from \"./utils\";\nimport { enrich429, sanitizeError } from \"./error-utils\";\nimport { computePacingDelay, resolvePacingConfig } from \"./pacing\";\n\ntype BaseFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;\n\ninterface AccountRuntime {\n fetch: BaseFetch;\n}\n\nconst TOKEN_REFRESH_PERMANENT_FAILURE_STATUS = 401;\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 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): { 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 = loadTemplate();\n\n const upstreamRequest = buildUpstreamRequest(\n parsed as Record<string, unknown>,\n identity,\n template,\n { sessionId },\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\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\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 lastRequestTime = 0;\n private pacingGate = Promise.resolve();\n private pacingTestOverrides: PacingTestOverrides = {};\n\n constructor(\n private readonly store: AccountStore,\n private readonly client: PluginClient,\n private readonly identity: ClaudeIdentity = loadClaudeIdentity(),\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 refreshed = await refreshToken(storedAccount.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.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 ?? storedAccount.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 ...excludeBetas(splitBetaValues(getBetaHeader()), excludedBetas),\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 ): 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 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, this.identity, sessionId)\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): Promise<Response> => {\n await reservePacingSlot();\n\n try {\n const response = await fetch(transformedInput, {\n ...init,\n headers: requestHeaders,\n body: transformedRequest.body,\n });\n return await enrichRateLimitResponse(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 response = await performFetch(headers);\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 betaToExclude = getNextBetaToExclude(modelId);\n if (!betaToExclude) {\n break;\n }\n\n addExcludedBeta(modelId, betaToExclude);\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);\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(input, init, accessToken);\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 { ensureOauthBeta, getModelBetas } from \"./betas\";\nimport { loadClaudeIdentity } from \"./claude-identity\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport { loadTemplate } from \"./fingerprint-capture\";\nimport {\n createStreamingReverseMapper,\n buildUpstreamRequest,\n} from \"./upstream-request\";\nimport {\n applyOutboundToolFlow,\n buildRequestScopedToolLookup,\n type ReverseLookup,\n} from \"./tool-flow\";\nimport {\n filterBillableBetas,\n getBetaHeader,\n getPerRequestHeaders,\n getStaticHeaders,\n orderHeadersForOutbound,\n} from \"./upstream-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, 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 = loadClaudeIdentity(),\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 = 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 ...excludeBetas(splitHeaderValues(getBetaHeader()), excludedBetas),\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\" ? 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 { loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\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\", \"interleaved-thinking-2025-05-14\"],\n modelOverrides: {\n \"4-6\": {\n add: [\"effort-2025-11-24\"],\n },\n },\n};\n\nexport function getCliVersion(): string {\n return loadCCDerivedRequestProfile().cliVersion;\n}\n\nexport function getUserAgent(): string {\n return loadCCDerivedRequestProfile().userAgent;\n}\n\nexport function getRequiredBetas(): string[] {\n return splitBetaFlags(process.env.ANTHROPIC_BETA_FLAGS ?? config.baseBetas.join(\",\"));\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 { 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 = modelId.toLowerCase();\n if (!lowerModelId.includes(\"opus\") && !lowerModelId.includes(\"sonnet\")) {\n return false;\n }\n\n const versionMatch = lowerModelId.match(/(opus|sonnet)-(\\d+)-(\\d+)/);\n if (!versionMatch) {\n return false;\n }\n\n const major = Number.parseInt(versionMatch[2] ?? \"0\", 10);\n const minor = Number.parseInt(versionMatch[3] ?? \"0\", 10);\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 betas = [...getRequiredBetas()];\n const longContextBeta = config.longContextBetas[0];\n\n if (\n longContextBeta\n && process.env.ANTHROPIC_ENABLE_1M_CONTEXT === \"true\"\n && supports1mContext(modelId)\n ) {\n betas.push(longContextBeta);\n }\n\n const override = getModelOverride(modelId);\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 { 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 try {\n for (const path of getCandidatePaths()) {\n const identity = parseIdentityFile(path);\n if (identity) {\n return identity;\n }\n }\n } catch {\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 { createHash, randomUUID } from \"node:crypto\";\nimport type { ClaudeIdentity } from \"./claude-identity\";\nimport type { TemplateData } from \"./fingerprint-capture\";\nimport { getRuntimeModelCapability } from \"./model-capabilities\";\nimport { detectCliVersion } from \"./cli-version\";\n\nconst BILLING_SEED = \"59cf53e54c78\";\nconst SESSION_IDLE_ROTATE_MS = 15 * 60 * 1000;\nconst MAX_TOOL_RESULT_TEXT_LENGTH = 30 * 1024;\nconst TRUNCATION_SUFFIX = \"[...truncated]\";\nconst DEFAULT_CONTEXT_MANAGEMENT = {};\nconst DEFAULT_OUTPUT_CONFIG = { effort: \"high\" };\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;\nconst ORCHESTRATION_PATTERNS = ORCHESTRATION_TAG_NAMES.flatMap((tag) => [\n new RegExp(`<${tag}\\\\b[^>]*>[\\\\s\\\\S]*?<\\\\/${tag}>`, \"gi\"),\n new RegExp(`<${tag}\\\\b[^>]*/>`, \"gi\"),\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\ntype JsonRecord = Record<string, unknown>;\n\ntype ContentBlock = JsonRecord & {\n type?: string;\n name?: string;\n text?: string;\n content?: unknown;\n};\n\ntype Message = JsonRecord & {\n role?: string;\n content?: string | ContentBlock[];\n};\n\ntype ReverseLookup = Map<string, string> | Record<string, string> | undefined;\n\ninterface UpstreamRequestTestOverrides {\n now?: () => number;\n createSessionId?: () => string;\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\nfunction cloneBody<T>(value: T): T {\n return structuredClone(value);\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 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 = sanitizeAndScrubText(block.text);\n }\n\n if (block.type !== \"tool_result\") {\n return;\n }\n\n if (typeof block.content === \"string\") {\n block.content = truncateToolResultText(sanitizeAndScrubText(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(sanitizeAndScrubText(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 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 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\nfunction stripUnsupportedSamplingFields(body: Record<string, unknown>): void {\n delete body.temperature;\n delete body.top_p;\n delete body.top_k;\n}\n\nfunction stripThinkingControlFields(body: Record<string, unknown>): void {\n delete body.thinking;\n delete body.context_management;\n delete body.output_config;\n}\n\nconst ADAPTIVE_THINKING_MODEL_MATCHERS = [\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];\nconst DEFAULT_MAX_OUTPUT_TOKENS = 32_000;\n\nfunction normalizeModelId(modelId: string): string {\n return modelId.trim().toLowerCase();\n}\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 = normalizeModelId(modelId);\n if (normalized.includes(\"haiku\")) {\n return false;\n }\n\n return ADAPTIVE_THINKING_MODEL_MATCHERS.some((matches) => matches(normalized));\n}\n\nfunction getModelMaxOutputTokens(): number {\n return DEFAULT_MAX_OUTPUT_TOKENS;\n}\n\nexport function resolveMaxTokens(requestedMaxTokens: unknown): number {\n const modelCap = getModelMaxOutputTokens();\n if (typeof requestedMaxTokens !== \"number\" || !Number.isFinite(requestedMaxTokens)) {\n return modelCap;\n }\n\n const normalized = Math.floor(requestedMaxTokens);\n if (normalized <= 0) {\n return modelCap;\n }\n\n return Math.min(normalized, modelCap);\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 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\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\nfunction hasCompleteToolSchemas(tools: Array<{ [key: string]: unknown }>): 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: Array<{ [key: string]: unknown }>,\n templateTools: Array<{ [key: string]: unknown }>,\n): Array<{ [key: string]: unknown }> {\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\nfunction buildOutboundTools(\n incomingTools: Array<{ [key: string]: unknown }>,\n templateTools: Array<{ [key: string]: unknown }>,\n): Array<{ [key: string]: unknown }> {\n if (incomingTools.length > 0) {\n return enrichIncomingToolsWithTemplateSchemas(incomingTools, templateTools);\n }\n\n if (!hasCompleteToolSchemas(templateTools)) {\n return incomingTools;\n }\n\n return templateTools.map((tool) => ({ ...tool }));\n}\n\nfunction getCcVersion(template: TemplateData): string {\n return template.cc_version ?? detectCliVersion();\n}\n\nfunction buildBillingHeader(firstUserMessage: string, template: TemplateData): string {\n const version = getCcVersion(template);\n const buildTag = computeBuildTag(firstUserMessage, version);\n return `x-anthropic-billing-header: cc_version=${version}.${buildTag}; cc_entrypoint=sdk-cli; cch=00000;`;\n}\n\nfunction 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 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\" ? 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 sanitizeMessages(body: Record<string, unknown>): 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\nexport function scrubFrameworkIdentifiers(text: string): string {\n let result = text;\n\n for (const pattern of FRAMEWORK_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 computeBuildTag(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 buildUpstreamRequest(\n inputBody: Record<string, unknown>,\n identity: ClaudeIdentity,\n template: TemplateData,\n options?: { sessionId?: string },\n): Record<string, unknown> {\n const body = cloneBody(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 = sanitizeAndScrubText(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\n compactMessageContent(messages);\n trimTrailingEmptyTurns(messages);\n\n const firstUserMessage = extractFirstUserMessage(messages);\n const billingHeader = buildBillingHeader(firstUserMessage, template);\n const mergedSystemPrompt = [\n template.system_prompt,\n ...filterInjectedSystemTexts(systemTexts, template, billingHeader),\n ]\n .map((entry) => sanitizeAndScrubText(entry))\n .filter(Boolean)\n .join(\"\\n\\n\");\n const activeSessionId = options?.sessionId ?? getActiveSessionId();\n\n body.messages = messages;\n stripUnsupportedSamplingFields(body);\n stripThinkingControlFields(body);\n\n const incomingTools = Array.isArray(body.tools) ? body.tools as Array<{ [key: string]: unknown }> : [];\n body.tools = buildOutboundTools(incomingTools, template.tools);\n body.system = [\n {\n type: \"text\",\n text: billingHeader,\n },\n {\n type: \"text\",\n text: template.agent_identity,\n cache_control: { type: \"ephemeral\" },\n },\n {\n type: \"text\",\n text: mergedSystemPrompt,\n cache_control: { type: \"ephemeral\" },\n },\n ];\n body.metadata = {\n ...(isRecord(body.metadata) ? body.metadata : {}),\n user_id: JSON.stringify({\n device_id: identity.deviceId,\n account_uuid: identity.accountUuid,\n session_id: activeSessionId,\n }),\n };\n const modelId = typeof body.model === \"string\" ? body.model : \"\";\n if (supportsAdaptiveThinking(modelId)) {\n body.thinking = { type: \"adaptive\" };\n body.context_management = DEFAULT_CONTEXT_MANAGEMENT;\n body.output_config = DEFAULT_OUTPUT_CONFIG;\n }\n body.max_tokens = resolveMaxTokens(body.max_tokens);\n\n return orderBodyForOutbound(body, template.body_field_order);\n}\n\nexport function orderBodyForOutbound(\n body: Record<string, unknown>,\n overrideOrder?: string[],\n): Record<string, unknown> {\n if (!Array.isArray(overrideOrder) || overrideOrder.length === 0) return body;\n\n const ordered: Record<string, unknown> = {};\n const seen = new Set<string>();\n\n for (const name of overrideOrder) {\n if (seen.has(name)) continue;\n if (Object.prototype.hasOwnProperty.call(body, name)) {\n ordered[name] = body[name];\n seen.add(name);\n }\n }\n\n for (const k of Object.keys(body)) {\n if (!seen.has(k)) ordered[k] = body[k];\n }\n\n return ordered;\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 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\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: Record<string, unknown>): void {\n runtimeModelCapabilities.clear();\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","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\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction shouldMaskToolName(name: string | undefined, claudeToolNames: ReadonlySet<string>): name is string {\n if (!name) {\n return false;\n }\n\n return !claudeToolNames.has(name)\n && !name.startsWith(\"mcp__\")\n && !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 collectToolNames(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 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 const lookup: ReverseLookup = new Map();\n const usedOutgoing = new Set<string>();\n const claudeToolSet = buildClaudeToolNameSet(claudeToolNames);\n\n for (const originalName of collectToolNames(parsed)) {\n if (!shouldMaskToolName(originalName, claudeToolSet)) {\n lookup.set(originalName, originalName);\n usedOutgoing.add(originalName);\n continue;\n }\n\n let length = 8;\n let masked = buildMaskedToolName(originalName, length);\n while (usedOutgoing.has(masked)) {\n length += 2;\n masked = buildMaskedToolName(originalName, length);\n }\n\n lookup.set(masked, originalName);\n usedOutgoing.add(masked);\n }\n\n return lookup;\n}\n\nfunction getOutgoingName(name: string | undefined, reverseLookup: ReverseLookup): string | undefined {\n if (!name) {\n return name;\n }\n\n for (const [outgoing, original] of reverseLookup) {\n if (original === name) {\n return outgoing;\n }\n }\n\n return name;\n}\n\nfunction rewriteToolUseNames(value: unknown, reverseLookup: ReverseLookup): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => rewriteToolUseNames(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] = rewriteToolUseNames(nested, reverseLookup);\n }\n\n if (cloned.type === \"tool_use\" && typeof cloned.name === \"string\") {\n cloned.name = getOutgoingName(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 reverseLookup = buildRequestScopedToolLookup(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, reverseLookup),\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, reverseLookup),\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, reverseLookup),\n };\n }\n\n return {\n body: JSON.stringify(next),\n reverseLookup,\n };\n}\n\nexport function reverseToolFlowPayload<T>(value: T, reverseLookup?: ReverseLookup): T {\n if (!reverseLookup || reverseLookup.size === 0) {\n return rewriteToolUseNames(value, new Map()) as T;\n }\n\n return rewriteToolUseNames(value, reverseLookup) as T;\n}\n","import { randomUUID } from \"node:crypto\";\nimport { loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\n\nconst UPSTREAM_TIMEOUT_MS = 300_000;\nconst STAINLESS_PACKAGE_VERSION = \"0.81.0\";\n\nconst BILLABLE_BETA_PREFIXES = [\"extended-cache-ttl-\"];\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\nexport function getStaticHeaders(): Record<string, string> {\n const profile = loadCCDerivedRequestProfile();\n\n const headers: Record<string, string> = {\n \"accept\": \"application/json\",\n \"content-type\": \"application/json\",\n \"anthropic-dangerous-direct-browser-access\": \"true\",\n \"user-agent\": profile.userAgent,\n \"x-app\": profile.xApp,\n \"x-stainless-arch\": process.arch,\n \"x-stainless-lang\": \"js\",\n \"x-stainless-os\": getOsName(),\n \"x-stainless-package-version\": STAINLESS_PACKAGE_VERSION,\n \"x-stainless-retry-count\": \"0\",\n \"x-stainless-runtime\": \"node\",\n \"x-stainless-runtime-version\": process.version,\n };\n\n const { template } = profile;\n if (template.header_values) {\n for (const [key, value] of Object.entries(template.header_values)) {\n headers[key] = value;\n }\n }\n\n return headers;\n}\n\nexport function getPerRequestHeaders(sessionId: string): Record<string, string> {\n return {\n \"x-claude-code-session-id\": sessionId,\n \"x-client-request-id\": randomUUID(),\n \"anthropic-version\": getAnthropicVersion(),\n \"x-stainless-timeout\": String(UPSTREAM_TIMEOUT_MS / 1000),\n };\n}\n\nexport function getAnthropicVersion(): string {\n return loadCCDerivedRequestProfile().anthropicVersion;\n}\n\nexport function getBetaHeader(): string {\n return loadCCDerivedRequestProfile().betaHeader;\n}\n\nexport function orderHeadersForOutbound(\n headers: Record<string, string>,\n overrideHeaderOrder?: string[],\n): Record<string, string> | Array<[string, string]> {\n const { template } = loadCCDerivedRequestProfile();\n const order = overrideHeaderOrder ?? template.header_order;\n\n if (!Array.isArray(order) || order.length === 0) {\n return headers;\n }\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\n for (const name of order) {\n const key = name.toLowerCase();\n if (seen.has(key)) {\n continue;\n }\n\n const value = lowerToValue.get(key);\n if (value !== undefined) {\n ordered.push([name, value]);\n seen.add(key);\n }\n }\n\n for (const [key, value] of Object.entries(headers)) {\n if (!seen.has(key.toLowerCase())) {\n ordered.push([key, value]);\n }\n }\n\n return ordered;\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 \"./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 || v === null) 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 { promises as fs } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { getConfigDir } from \"opencode-multi-account-core\";\nimport { ANTHROPIC_OAUTH_ADAPTER } from \"./constants\";\nimport type { AccountStore } from \"./account-store\";\nimport type { OAuthCredentials, PluginClient, StoredAccount } from \"./types\";\n\nconst AUTH_JSON_FILENAME = \"auth.json\";\n\nfunction hasCompleteOAuthCredential(account: StoredAccount): account is StoredAccount & {\n refreshToken: string;\n accessToken: string;\n expiresAt: number;\n} {\n return (\n typeof account.refreshToken === \"string\"\n && account.refreshToken.length > 0\n && typeof account.accessToken === \"string\"\n && account.accessToken.length > 0\n && typeof account.expiresAt === \"number\"\n && Number.isFinite(account.expiresAt)\n );\n}\n\nfunction selectBootstrapAccount(\n accounts: StoredAccount[],\n activeAccountUuid?: string,\n): (StoredAccount & { refreshToken: string; accessToken: string; expiresAt: number }) | null {\n const completeAccounts = accounts.filter(hasCompleteOAuthCredential);\n if (completeAccounts.length === 0) {\n return null;\n }\n\n const activeAccount = activeAccountUuid\n ? completeAccounts.find((account) => account.uuid === activeAccountUuid)\n : undefined;\n if (activeAccount) {\n return activeAccount;\n }\n\n const firstUsableAccount = completeAccounts.find(\n (account) => account.enabled !== false && account.isAuthDisabled !== true,\n );\n return firstUsableAccount ?? completeAccounts[0] ?? null;\n}\n\nasync function readCurrentAuth(providerId: string): Promise<OAuthCredentials | null> {\n const authPath = join(getConfigDir(), AUTH_JSON_FILENAME);\n\n let raw: string;\n try {\n raw = await fs.readFile(authPath, \"utf-8\");\n } catch {\n return null;\n }\n\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const providerAuth = parsed[providerId] as Partial<OAuthCredentials> | undefined;\n if (\n providerAuth?.type !== \"oauth\"\n || typeof providerAuth.refresh !== \"string\"\n || typeof providerAuth.access !== \"string\"\n || typeof providerAuth.expires !== \"number\"\n ) {\n return null;\n }\n\n return {\n type: \"oauth\",\n refresh: providerAuth.refresh,\n access: providerAuth.access,\n expires: providerAuth.expires,\n };\n } catch {\n return null;\n }\n}\n\nfunction shouldSyncBootstrapAuth(currentAuth: OAuthCredentials | null, nextAuth: OAuthCredentials): boolean {\n if (!currentAuth) {\n return true;\n }\n\n if (\n currentAuth.refresh === nextAuth.refresh\n && currentAuth.access === nextAuth.access\n && currentAuth.expires === nextAuth.expires\n ) {\n return false;\n }\n\n return currentAuth.expires < nextAuth.expires;\n}\n\nexport async function syncBootstrapAuth(\n client: PluginClient,\n store: AccountStore,\n): Promise<boolean> {\n const storage = await store.load();\n const bootstrapAccount = selectBootstrapAccount(storage.accounts, storage.activeAccountUuid);\n if (!bootstrapAccount) {\n return false;\n }\n\n const nextAuth: OAuthCredentials = {\n type: \"oauth\",\n refresh: bootstrapAccount.refreshToken,\n access: bootstrapAccount.accessToken,\n expires: bootstrapAccount.expiresAt,\n };\n\n const currentAuth = await readCurrentAuth(ANTHROPIC_OAUTH_ADAPTER.authProviderId);\n if (!shouldSyncBootstrapAuth(currentAuth, nextAuth)) {\n return false;\n }\n\n await client.auth.set({\n path: { id: ANTHROPIC_OAUTH_ADAPTER.authProviderId },\n body: nextAuth,\n });\n return true;\n}\n\nexport const __bootstrapAuthTestUtils = {\n selectBootstrapAccount,\n shouldSyncBootstrapAuth,\n};\n","import { getUpstreamSessionId } from \"./upstream-request\";\nimport { loadCCDerivedRequestProfile } from \"./cc-derived-profile\";\nimport { getAnthropicVersion } from \"./upstream-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 `${loadCCDerivedRequestProfile().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":["v","v","now","createExecutorForProvider","executeWithAccountRotation","createExecutorForProvider","config","now","exec","now","randomUUID","createHash","randomUUID","randomUUID","isRecord","normalizeModelId","tool","createHash","lines","createHash","isRecord","tool","randomUUID","sessionId","randomUUID","tool","join","join","now","v","now","excludedBetas","sessionId","response","fs","join","getConfigDir","join","getConfigDir","fs","sessionId","sessionId","now","usage","authProfile"]}
|