@jeffreycao/copilot-api 2.6.25 → 2.6.28
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/auth-C5B75e7U.js +2 -0
- package/dist/{auth-BM1NSmaY.js → auth-CgMFSux_.js} +4 -4
- package/dist/{auth-BM1NSmaY.js.map → auth-CgMFSux_.js.map} +1 -1
- package/dist/{config-AlcbghlW.js → config-B2OaAnpL.js} +2 -2
- package/dist/{config-AlcbghlW.js.map → config-B2OaAnpL.js.map} +1 -1
- package/dist/{config-store--1vrPTFC.js → config-store-CARrUljo.js} +10 -2
- package/dist/config-store-CARrUljo.js.map +1 -0
- package/dist/{debug-Cykqg-GL.js → debug-CcfAczV9.js} +3 -3
- package/dist/{debug-Cykqg-GL.js.map → debug-CcfAczV9.js.map} +1 -1
- package/dist/{github-copilot-provider-BWQdEbDy.js → github-copilot-provider-DlQZgaCT.js} +2 -2
- package/dist/{github-copilot-provider-BWQdEbDy.js.map → github-copilot-provider-DlQZgaCT.js.map} +1 -1
- package/dist/main.js +4 -4
- package/dist/{models-DKDMBzWM.js → models-C_0HbW3K.js} +2 -2
- package/dist/{models-DKDMBzWM.js.map → models-C_0HbW3K.js.map} +1 -1
- package/dist/{provider-C38mrz76.js → provider-DktH3jcC.js} +2 -2
- package/dist/{provider-C38mrz76.js.map → provider-DktH3jcC.js.map} +1 -1
- package/dist/{provider-management-B8wlMJ5F.js → provider-management-z3m7cUkp.js} +3 -3
- package/dist/{provider-management-B8wlMJ5F.js.map → provider-management-z3m7cUkp.js.map} +1 -1
- package/dist/{server-ihCUW7FV.js → server-sTarDtg3.js} +74 -65
- package/dist/server-sTarDtg3.js.map +1 -0
- package/dist/{start-lTEXu1xj.js → start-DPRCrNJa.js} +8 -8
- package/dist/{start-lTEXu1xj.js.map → start-DPRCrNJa.js.map} +1 -1
- package/dist/{token-CnzxfSWL.js → token-CZr63uyO.js} +31 -8
- package/dist/token-CZr63uyO.js.map +1 -0
- package/package.json +1 -1
- package/dist/auth-DGt1r0Ik.js +0 -2
- package/dist/config-store--1vrPTFC.js.map +0 -1
- package/dist/server-ihCUW7FV.js.map +0 -1
- package/dist/token-CnzxfSWL.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-store-CARrUljo.js","names":["fs"],"sources":["../src/lib/atomic-file.ts","../src/lib/paths.ts","../src/lib/config-store.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\"\nimport fs from \"node:fs\"\nimport path from \"node:path\"\n\nconst TEMP_FILE_RANDOM_BYTES = 8\n\n// The file-level fsync persists the contents, but the rename only updates the\n// parent directory entry, which needs its own fsync to survive a crash or\n// power loss. Best-effort: the rename has already taken effect, so a failure\n// here only weakens crash durability and must not fail the write. Directory\n// fsync is not supported on Windows (opening a directory handle fails there).\nconst fsyncDirectory = (directory: string): void => {\n if (process.platform === \"win32\") {\n return\n }\n\n let directoryFd: number | undefined\n try {\n directoryFd = fs.openSync(directory, \"r\")\n fs.fsyncSync(directoryFd)\n } catch (error) {\n console.warn(`Failed to fsync directory: ${directory}`, error)\n } finally {\n if (directoryFd !== undefined) {\n try {\n fs.closeSync(directoryFd)\n } catch {\n // Preserve the fsync warning.\n }\n }\n }\n}\n\nexport function writeFileAtomically(filePath: string, content: string): void {\n const directory = path.dirname(filePath)\n const tempPath = path.join(\n directory,\n `.${path.basename(filePath)}.${process.pid}.${randomBytes(TEMP_FILE_RANDOM_BYTES).toString(\"hex\")}.tmp`,\n )\n\n fs.mkdirSync(directory, { recursive: true })\n\n let fileDescriptor: number | undefined\n let tempFileCreated = false\n try {\n fileDescriptor = fs.openSync(tempPath, \"wx\", 0o600)\n tempFileCreated = true\n fs.writeFileSync(fileDescriptor, content, \"utf8\")\n fs.fsyncSync(fileDescriptor)\n fs.closeSync(fileDescriptor)\n fileDescriptor = undefined\n fs.renameSync(tempPath, filePath)\n tempFileCreated = false\n fsyncDirectory(directory)\n } catch (error) {\n if (fileDescriptor !== undefined) {\n try {\n fs.closeSync(fileDescriptor)\n } catch {\n // Preserve the original write error.\n }\n }\n\n if (tempFileCreated) {\n try {\n fs.rmSync(tempPath, { force: true })\n } catch {\n // Preserve the original write error.\n }\n }\n\n throw error\n }\n}\n","import fs from \"node:fs/promises\"\nimport os from \"node:os\"\nimport path from \"node:path\"\n\nconst AUTH_APP = process.env.COPILOT_API_OAUTH_APP?.trim() || \"\"\nconst ENTERPRISE_PREFIX = process.env.COPILOT_API_ENTERPRISE_URL ? \"ent_\" : \"\"\n\nconst DEFAULT_DIR = path.join(os.homedir(), \".local\", \"share\", \"copilot-api\")\nconst APP_DIR = process.env.COPILOT_API_HOME || DEFAULT_DIR\n\nconst GITHUB_TOKEN_PATH = path.join(\n APP_DIR,\n AUTH_APP,\n ENTERPRISE_PREFIX + \"github_token\",\n)\nconst CODEX_CREDENTIAL_PATH = path.join(APP_DIR, \"codex_credentials.json\")\nconst CONFIG_PATH = path.join(APP_DIR, \"config.json\")\n\nexport const PATHS = {\n APP_DIR,\n GITHUB_TOKEN_PATH,\n CODEX_CREDENTIAL_PATH,\n CONFIG_PATH,\n}\n\nexport async function ensurePaths(): Promise<void> {\n await fs.mkdir(path.join(PATHS.APP_DIR, AUTH_APP), { recursive: true })\n await ensureFile(PATHS.GITHUB_TOKEN_PATH)\n await ensureFile(PATHS.CONFIG_PATH)\n}\n\nasync function ensureFile(filePath: string): Promise<void> {\n try {\n await fs.access(filePath, fs.constants.W_OK)\n } catch {\n await fs.writeFile(filePath, \"\")\n await fs.chmod(filePath, 0o600)\n }\n}\n","import consola from \"consola\"\nimport { randomBytes } from \"node:crypto\"\nimport fs from \"node:fs\"\n\nimport type { TokenUsagePricingConfig } from \"~/lib/token-usage/pricing\"\n\nimport { writeFileAtomically } from \"./atomic-file\"\nimport { PATHS } from \"./paths\"\n\nexport interface AppConfig {\n auth?: {\n apiKeys?: Array<string>\n adminApiKey?: string\n }\n providers?: Record<string, ProviderConfig>\n modelMappings?: Record<string, string>\n extraPrompts?: Record<string, string>\n smallModels?: SmallModelsConfig\n contextManagement?: ContextManagementConfig\n modelResponsesApiCompactThresholds?: Record<string, number>\n modelReasoningEfforts?: Record<\n string,\n \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"\n >\n useMessagesApi?: boolean\n useResponsesApiWebSocket?: boolean\n upstreamTransport?: UpstreamTransportConfig\n anthropicApiKey?: string\n useResponsesApiWebSearch?: boolean\n alphaSearchCodexPriority?: boolean\n alphaSearchModel?: string\n // Copilot rejects Anthropic's web_search server tool on /v1/messages, so a\n // Claude request that only asks for web search is switched to this model.\n // A `provider/model` alias is passed straight through to that provider's\n // (websearch-capable) message API, while a plain GPT model runs the search\n // via /responses. Leave unset to disable (the tool is then stripped).\n // Mixing web_search with other tools is not supported.\n messageApiWebSearchModel?: string\n // Model used for Claude Code background security-monitor requests on\n // /v1/messages and provider message APIs: requests without tools, with\n // `stop_sequences: [\"</block>\"]` and a system block starting with\n // \"You are a security monitor for autonomous AI coding agents.\".\n // A `provider/model` alias is forwarded to that provider's message API on\n // the top-level route. Provider message routes use the configured value on\n // their current provider. Leave empty to disable (default).\n claudeAutoModel?: string\n claudeTokenMultiplier?: number\n}\n\nexport interface SmallModelsConfig {\n codex?: string\n copilot?: string\n [providerName: string]: string | undefined\n}\n\nexport interface ContextManagementConfig {\n messages?: boolean\n responses?: boolean\n}\n\nexport interface UpstreamTransportConfig {\n headersTimeoutMs?: number\n streamInactivityTimeoutMs?: number\n websocketMaxBufferedBytes?: number\n websocketMaxBufferedMessages?: number\n websocketOpenTimeoutMs?: number\n websocketPoolIdleTimeoutMs?: number\n}\n\nexport const defaultUpstreamTransportConfig = {\n headersTimeoutMs: 5 * 60 * 1000,\n streamInactivityTimeoutMs: 5 * 60 * 1000,\n websocketMaxBufferedBytes: 8 * 1024 * 1024,\n websocketMaxBufferedMessages: 1024,\n websocketOpenTimeoutMs: 30_000,\n websocketPoolIdleTimeoutMs: 60_000,\n} satisfies Required<UpstreamTransportConfig>\n\nexport interface ModelConfig {\n temperature?: number\n topP?: number\n topK?: number\n extraBody?: Record<string, unknown>\n contextCache?: boolean\n contextWindow?: number\n maxOutputTokens?: number\n inputModalities?: Array<\"text\" | \"image\">\n reasoningEfforts?: Array<CodexReasoningEffort>\n defaultReasoningEffort?: CodexReasoningEffort\n pricing?: TokenUsagePricingConfig\n supportPdf?: boolean\n toolContentSupportType?: Array<ToolContentSupportType>\n type?: ProviderType\n // Message field used to carry assistant thinking text when forwarding\n // requests upstream; defaults to \"reasoning_content\"\n reasoningField?: ModelReasoningField\n}\n\nexport type ModelReasoningField = \"reasoning\" | \"reasoning_content\"\n\nexport type CodexReasoningEffort =\n | \"none\"\n | \"minimal\"\n | \"low\"\n | \"medium\"\n | \"high\"\n | \"xhigh\"\n | \"max\"\n | \"ultra\"\n\nexport type ProviderAuthType =\n | \"authorization\"\n | \"azure-entra\"\n | \"oauth2\"\n | \"x-api-key\"\nexport const SUPPORTED_PROVIDER_TYPES = [\n \"anthropic\",\n \"openai-compatible\",\n \"openai-responses\",\n] as const\nexport type ProviderType = (typeof SUPPORTED_PROVIDER_TYPES)[number]\nexport type ToolContentSupportType = \"array\" | \"image\" | \"pdf\"\n\nexport interface ProviderConfig {\n type?: string\n enabled?: boolean\n baseUrl?: string\n modelsDevProviderId?: string\n apiKey?: string\n authType?: ProviderAuthType\n accountId?: string\n pricingCurrency?: string\n models?: Record<string, ModelConfig>\n codexModels?: Array<string>\n}\n\nconst modelResponsesApiCompactThresholds = {\n \"gpt-5.4\": 272_000 * 0.8,\n \"gpt-5.5\": 272_000 * 0.8,\n}\n\nexport const defaultContextManagement = {\n messages: true,\n responses: false,\n} satisfies Required<ContextManagementConfig>\n\nexport const defaultConfig: AppConfig = {\n auth: {\n apiKeys: [],\n },\n providers: {},\n modelMappings: {\n \"codex-auto-review\": \"codex/codex-auto-review\",\n \"gpt-reserve\": \"codex/gpt-reserve\",\n },\n smallModels: {\n codex: \"gpt-6-luna\",\n copilot: \"gpt-6-luna\",\n },\n contextManagement: defaultContextManagement,\n modelResponsesApiCompactThresholds,\n useMessagesApi: true,\n useResponsesApiWebSocket: true,\n upstreamTransport: defaultUpstreamTransportConfig,\n useResponsesApiWebSearch: true,\n alphaSearchCodexPriority: true,\n alphaSearchModel: \"gpt-6-luna\",\n messageApiWebSearchModel: \"gpt-6-luna\",\n}\n\nlet cachedConfig: AppConfig | null = null\n\nfunction normalizeAdminApiKey(adminApiKey: unknown): string | null {\n if (typeof adminApiKey !== \"string\") {\n if (adminApiKey !== undefined) {\n consola.warn(\n \"Invalid auth.adminApiKey config. Expected a non-empty string.\",\n )\n }\n return null\n }\n\n const normalizedAdminApiKey = adminApiKey.trim()\n if (!normalizedAdminApiKey) {\n consola.warn(\n \"Invalid auth.adminApiKey config. Expected a non-empty string.\",\n )\n return null\n }\n\n return normalizedAdminApiKey\n}\n\nfunction generateAdminApiKey(): string {\n return randomBytes(32).toString(\"hex\")\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error\n}\n\nfunction ensureConfigFile(): void {\n try {\n fs.accessSync(PATHS.CONFIG_PATH, fs.constants.F_OK)\n } catch (error) {\n if (!isNodeError(error) || error.code !== \"ENOENT\") {\n throw error\n }\n\n writeFileAtomically(\n PATHS.CONFIG_PATH,\n `${JSON.stringify(defaultConfig, null, 2)}\\n`,\n )\n }\n}\n\nfunction readConfigFromDisk(): AppConfig {\n ensureConfigFile()\n const raw = fs.readFileSync(PATHS.CONFIG_PATH, \"utf8\")\n if (!raw.trim()) {\n writeFileAtomically(\n PATHS.CONFIG_PATH,\n `${JSON.stringify(defaultConfig, null, 2)}\\n`,\n )\n return defaultConfig\n }\n\n try {\n return JSON.parse(raw) as AppConfig\n } catch (error) {\n // Fail closed: falling back to the default config here would let the\n // startup merge overwrite the corrupt file (discarding providers, API\n // keys, and model mappings) and, because the default has no apiKeys,\n // silently disable API key authentication on normal routes.\n const message = `Config file is not valid JSON: ${PATHS.CONFIG_PATH}. Refusing to start with the default config. Fix the JSON syntax or delete the file to regenerate a fresh config.`\n consola.error(message, error)\n throw new Error(message, { cause: error })\n }\n}\n\nexport function readEditableConfigFromDisk(): AppConfig {\n try {\n const raw = fs.readFileSync(PATHS.CONFIG_PATH, \"utf8\")\n if (!raw.trim()) {\n return {}\n }\n return JSON.parse(raw) as AppConfig\n } catch (error) {\n if (isNodeError(error) && error.code === \"ENOENT\") {\n return {}\n }\n if (error instanceof SyntaxError) {\n throw new Error(`Config file is not valid JSON: ${PATHS.CONFIG_PATH}`)\n }\n throw error\n }\n}\n\nexport function writeConfigToDisk(config: AppConfig): void {\n writeFileAtomically(PATHS.CONFIG_PATH, `${JSON.stringify(config, null, 2)}\\n`)\n}\n\nexport function setConfiguredApiKeys(apiKeys: Array<string>): Array<string> {\n const normalizedKeys = apiKeys\n .map((key) => key.trim())\n .filter((key) => key.length > 0)\n const uniqueKeys = [...new Set(normalizedKeys)]\n\n const editableConfig = readEditableConfigFromDisk()\n writeConfigToDisk({\n ...editableConfig,\n auth: {\n ...editableConfig.auth,\n apiKeys: uniqueKeys,\n },\n })\n reloadConfig()\n return [...uniqueKeys]\n}\n\nfunction mergeDefaultConfig(config: AppConfig): {\n mergedConfig: AppConfig\n changed: boolean\n} {\n const modelMappings = config.modelMappings ?? {}\n const defaultModelMappings = defaultConfig.modelMappings ?? {}\n const extraPrompts = config.extraPrompts ?? {}\n const defaultExtraPrompts = defaultConfig.extraPrompts ?? {}\n const responsesApiCompactThresholds =\n config.modelResponsesApiCompactThresholds ?? {}\n const defaultResponsesApiCompactThresholds =\n defaultConfig.modelResponsesApiCompactThresholds ?? {}\n const modelReasoningEfforts = config.modelReasoningEfforts ?? {}\n const defaultModelReasoningEfforts = defaultConfig.modelReasoningEfforts ?? {}\n const contextManagement = normalizeContextManagementConfig(\n config.contextManagement,\n )\n const {\n changed: upstreamTransportMigrated,\n migrated: migratedUpstreamTransport,\n } = migrateUpstreamTransportConfig(config)\n\n const upstreamTransport = normalizeUpstreamTransportConfig(\n migratedUpstreamTransport,\n )\n const defaultContextManagementConfig = defaultConfig.contextManagement ?? {}\n\n const missingModelMappings = Object.keys(defaultModelMappings).filter(\n (model) => !Object.hasOwn(modelMappings, model),\n )\n const missingExtraPromptModels = Object.keys(defaultExtraPrompts).filter(\n (model) => !Object.hasOwn(extraPrompts, model),\n )\n\n const missingReasoningEffortModels = Object.keys(\n defaultModelReasoningEfforts,\n ).filter((model) => !Object.hasOwn(modelReasoningEfforts, model))\n const missingResponsesApiCompactThresholdModels = Object.keys(\n defaultResponsesApiCompactThresholds,\n ).filter((model) => !Object.hasOwn(responsesApiCompactThresholds, model))\n const missingContextManagementKeys = Object.keys(\n defaultContextManagementConfig,\n ).filter((key) => !Object.hasOwn(contextManagement, key))\n\n const hasModelMappingChanges = missingModelMappings.length > 0\n const hasExtraPromptChanges = missingExtraPromptModels.length > 0\n const hasReasoningEffortChanges = missingReasoningEffortModels.length > 0\n const hasResponsesApiCompactThresholdChanges =\n missingResponsesApiCompactThresholdModels.length > 0\n const hasContextManagementChanges = missingContextManagementKeys.length > 0\n const hasUpstreamTransportChanges = Object.entries(upstreamTransport).some(\n ([key, value]) =>\n migratedUpstreamTransport[key as keyof UpstreamTransportConfig] !== value,\n )\n\n if (\n !hasModelMappingChanges\n && !hasExtraPromptChanges\n && !hasReasoningEffortChanges\n && !hasResponsesApiCompactThresholdChanges\n && !hasContextManagementChanges\n && !hasUpstreamTransportChanges\n && !upstreamTransportMigrated\n ) {\n return { mergedConfig: config, changed: false }\n }\n\n // The deprecated responsesTransport key is dropped once it is migrated.\n const { responsesTransport: _legacyResponsesTransport, ...persistedConfig } =\n config as LegacyAppConfig\n\n return {\n mergedConfig: {\n ...persistedConfig,\n modelMappings: {\n ...defaultModelMappings,\n ...modelMappings,\n },\n contextManagement: {\n ...defaultContextManagementConfig,\n ...contextManagement,\n },\n extraPrompts: {\n ...defaultExtraPrompts,\n ...extraPrompts,\n },\n modelResponsesApiCompactThresholds: {\n ...defaultResponsesApiCompactThresholds,\n ...responsesApiCompactThresholds,\n },\n modelReasoningEfforts: {\n ...defaultModelReasoningEfforts,\n ...modelReasoningEfforts,\n },\n upstreamTransport,\n },\n changed: true,\n }\n}\n\nfunction normalizeContextManagementConfig(\n value: ContextManagementConfig | undefined,\n): ContextManagementConfig {\n if (!value || typeof value !== \"object\") {\n return {}\n }\n\n return {\n ...(typeof value.messages === \"boolean\" ?\n { messages: value.messages }\n : {}),\n ...(typeof value.responses === \"boolean\" ?\n { responses: value.responses }\n : {}),\n }\n}\n\n// responsesTransport was renamed to upstreamTransport, and headersTimeoutMsV2\n// to headersTimeoutMs, when this block started applying to every upstream HTTP\n// transport. Legacy configs are migrated once during the startup merge and the\n// old keys are dropped from disk.\ninterface LegacyAppConfig extends AppConfig {\n responsesTransport?: LegacyUpstreamTransportConfig\n}\n\ninterface LegacyUpstreamTransportConfig extends UpstreamTransportConfig {\n headersTimeoutMsV2?: number\n}\n\nconst migrateUpstreamTransportConfig = (\n config: AppConfig,\n): { changed: boolean; migrated: UpstreamTransportConfig } => {\n const legacyBlock = (config as LegacyAppConfig).responsesTransport\n const { headersTimeoutMsV2, ...migrated } = (config.upstreamTransport\n ?? legacyBlock\n ?? {}) as LegacyUpstreamTransportConfig\n\n const hasLegacyBlock = legacyBlock !== undefined\n const hasLegacyHeadersTimeout = headersTimeoutMsV2 !== undefined\n if (!hasLegacyBlock && !hasLegacyHeadersTimeout) {\n return { changed: false, migrated }\n }\n\n consola.info(\n \"Migrating deprecated transport config: responsesTransport -> upstreamTransport, headersTimeoutMsV2 -> headersTimeoutMs\",\n )\n\n return {\n changed: true,\n migrated:\n migrated.headersTimeoutMs === undefined && hasLegacyHeadersTimeout ?\n { ...migrated, headersTimeoutMs: headersTimeoutMsV2 }\n : migrated,\n }\n}\n\nfunction ensureAdminApiKey(config: AppConfig): {\n mergedConfig: AppConfig\n changed: boolean\n} {\n const normalizedAdminApiKey = normalizeAdminApiKey(config.auth?.adminApiKey)\n if (normalizedAdminApiKey) {\n if (config.auth?.adminApiKey === normalizedAdminApiKey) {\n return { mergedConfig: config, changed: false }\n }\n\n return {\n mergedConfig: {\n ...config,\n auth: {\n ...config.auth,\n adminApiKey: normalizedAdminApiKey,\n },\n },\n changed: true,\n }\n }\n\n const editableConfig = readEditableConfigFromDisk()\n const { mergedConfig } = mergeDefaultConfig({\n ...editableConfig,\n auth: {\n ...editableConfig.auth,\n adminApiKey: generateAdminApiKey(),\n },\n })\n\n return { mergedConfig, changed: true }\n}\n\nexport function mergeConfigWithDefaults(): AppConfig {\n const config = readConfigFromDisk()\n const { mergedConfig, changed } = mergeDefaultConfig(config)\n const {\n mergedConfig: mergedConfigWithAdminApiKey,\n changed: adminApiKeyChanged,\n } = ensureAdminApiKey(mergedConfig)\n const shouldPersistConfig = changed || adminApiKeyChanged\n\n if (shouldPersistConfig) {\n try {\n writeConfigToDisk(mergedConfigWithAdminApiKey)\n } catch (writeError) {\n if (adminApiKeyChanged) {\n throw writeError\n }\n\n consola.warn(\n \"Failed to write merged default config to config file\",\n writeError,\n )\n }\n }\n\n cachedConfig = mergedConfigWithAdminApiKey\n return mergedConfigWithAdminApiKey\n}\n\nexport function getConfig(): AppConfig {\n cachedConfig ??= mergeDefaultConfig(readConfigFromDisk()).mergedConfig\n return cachedConfig\n}\n\n// Refresh this process on its next read without rewriting defaults to disk.\nexport function invalidateConfigCache(): void {\n cachedConfig = null\n}\n\nexport function reloadConfig(): AppConfig {\n return mergeConfigWithDefaults()\n}\n\nexport function isMessagesApiEnabled(): boolean {\n const config = getConfig()\n return config.useMessagesApi ?? true\n}\n\nexport function isResponsesApiWebSocketEnabled(): boolean {\n const config = getConfig()\n return config.useResponsesApiWebSocket ?? true\n}\n\n// Applies to every upstream HTTP transport (Copilot Chat Completions and\n// Messages, Codex Responses, and provider-forwarded requests), not only the\n// Responses API.\nexport function getUpstreamTransportConfig(): Required<UpstreamTransportConfig> {\n return normalizeUpstreamTransportConfig(getConfig().upstreamTransport)\n}\n\nexport const normalizeUpstreamTransportConfig = (\n configured: UpstreamTransportConfig | undefined,\n): Required<UpstreamTransportConfig> => ({\n headersTimeoutMs: positiveIntegerOrDefault(\n configured?.headersTimeoutMs,\n defaultUpstreamTransportConfig.headersTimeoutMs,\n ),\n streamInactivityTimeoutMs: positiveIntegerOrDefault(\n configured?.streamInactivityTimeoutMs,\n defaultUpstreamTransportConfig.streamInactivityTimeoutMs,\n ),\n websocketMaxBufferedBytes: positiveIntegerOrDefault(\n configured?.websocketMaxBufferedBytes,\n defaultUpstreamTransportConfig.websocketMaxBufferedBytes,\n ),\n websocketMaxBufferedMessages: positiveIntegerOrDefault(\n configured?.websocketMaxBufferedMessages,\n defaultUpstreamTransportConfig.websocketMaxBufferedMessages,\n ),\n websocketOpenTimeoutMs: positiveIntegerOrDefault(\n configured?.websocketOpenTimeoutMs,\n defaultUpstreamTransportConfig.websocketOpenTimeoutMs,\n ),\n websocketPoolIdleTimeoutMs: positiveIntegerOrDefault(\n configured?.websocketPoolIdleTimeoutMs,\n defaultUpstreamTransportConfig.websocketPoolIdleTimeoutMs,\n ),\n})\n\nconst positiveIntegerOrDefault = (value: unknown, fallback: number): number => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return fallback\n\n const normalized = Math.floor(value)\n return normalized > 0 ? normalized : fallback\n}\n\nexport function getAnthropicApiKey(): string | undefined {\n const config = getConfig()\n return config.anthropicApiKey ?? process.env.ANTHROPIC_API_KEY ?? undefined\n}\n\nexport function isResponsesApiWebSearchEnabled(): boolean {\n const config = getConfig()\n return config.useResponsesApiWebSearch ?? true\n}\n\nexport function isAlphaSearchCodexPriorityEnabled(): boolean {\n const config = getConfig()\n return config.alphaSearchCodexPriority ?? true\n}\n\nexport function getAlphaSearchModel(): string | undefined {\n const model = getConfig().alphaSearchModel ?? \"gpt-6-luna\"\n return model.trim() || undefined\n}\n\nexport function getMessageApiWebSearchModel(): string | undefined {\n const config = getConfig()\n const model = config.messageApiWebSearchModel ?? \"gpt-6-luna\"\n return model && model.trim().length > 0 ? model : undefined\n}\n\nexport function getClaudeAutoModel(): string | undefined {\n const config = getConfig()\n const model = config.claudeAutoModel\n return model && model.trim().length > 0 ? model.trim() : undefined\n}\n\nexport function getClaudeTokenMultiplier(): number {\n const config = getConfig()\n return config.claudeTokenMultiplier ?? 1.15\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { x as PATHS } from "./config-store
|
|
2
|
-
import { i as listEnabledProviders, n as getRawProviderConfig } from "./config-
|
|
1
|
+
import { x as PATHS } from "./config-store-CARrUljo.js";
|
|
2
|
+
import { i as listEnabledProviders, n as getRawProviderConfig } from "./config-B2OaAnpL.js";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
import consola from "consola";
|
|
5
5
|
import fs from "node:fs/promises";
|
|
@@ -90,4 +90,4 @@ const debug = defineCommand({
|
|
|
90
90
|
//#endregion
|
|
91
91
|
export { debug };
|
|
92
92
|
|
|
93
|
-
//# sourceMappingURL=debug-
|
|
93
|
+
//# sourceMappingURL=debug-CcfAczV9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-
|
|
1
|
+
{"version":3,"file":"debug-CcfAczV9.js","names":[],"sources":["../src/debug.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { defineCommand } from \"citty\"\nimport consola from \"consola\"\nimport fs from \"node:fs/promises\"\nimport os from \"node:os\"\nimport { fileURLToPath } from \"node:url\"\n\nimport { getRawProviderConfig, listEnabledProviders } from \"./lib/config\"\nimport { PATHS } from \"./lib/paths\"\n\ninterface DebugInfo {\n providers: {\n codexConfigured: boolean\n enabled: Array<string>\n }\n version: string\n runtime: {\n name: string\n version: string\n platform: string\n arch: string\n }\n paths: {\n APP_DIR: string\n CONFIG_PATH: string\n GITHUB_TOKEN_PATH: string\n }\n tokenExists: boolean\n}\n\ninterface RunDebugOptions {\n json: boolean\n}\n\nasync function getPackageVersion(): Promise<string> {\n try {\n const packageJsonPath = fileURLToPath(\n new URL(\"../package.json\", import.meta.url),\n )\n // @ts-expect-error https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v59.0.1/docs/rules/prefer-json-parse-buffer.md\n // JSON.parse() can actually parse buffers\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath)) as {\n version: string\n }\n return packageJson.version\n } catch {\n return \"unknown\"\n }\n}\n\nfunction getRuntimeInfo() {\n const isBun = typeof Bun !== \"undefined\"\n\n return {\n name: isBun ? \"bun\" : \"node\",\n version: isBun ? Bun.version : process.version.slice(1),\n platform: os.platform(),\n arch: os.arch(),\n }\n}\n\nasync function checkFileExists(filePath: string): Promise<boolean> {\n try {\n const stats = await fs.stat(filePath)\n if (!stats.isFile()) return false\n\n const content = await fs.readFile(filePath, \"utf8\")\n return content.trim().length > 0\n } catch {\n return false\n }\n}\n\nasync function getDebugInfo(): Promise<DebugInfo> {\n const [version, tokenExists] = await Promise.all([\n getPackageVersion(),\n checkFileExists(PATHS.GITHUB_TOKEN_PATH),\n ])\n\n return {\n providers: {\n codexConfigured: getRawProviderConfig(\"codex\") !== null,\n enabled: listEnabledProviders(),\n },\n version,\n runtime: getRuntimeInfo(),\n paths: {\n APP_DIR: PATHS.APP_DIR,\n CONFIG_PATH: PATHS.CONFIG_PATH,\n GITHUB_TOKEN_PATH: PATHS.GITHUB_TOKEN_PATH,\n },\n tokenExists,\n }\n}\n\nfunction printDebugInfoPlain(info: DebugInfo): void {\n consola.info(`copilot-api debug\n\nVersion: ${info.version}\nRuntime: ${info.runtime.name} ${info.runtime.version} (${info.runtime.platform} ${info.runtime.arch})\n\nProviders:\n- enabled: ${info.providers.enabled.join(\", \") || \"none\"}\n- codex configured: ${info.providers.codexConfigured ? \"Yes\" : \"No\"}\n\nPaths:\n- APP_DIR: ${info.paths.APP_DIR}\n- CONFIG_PATH: ${info.paths.CONFIG_PATH}\n- GITHUB_TOKEN_PATH: ${info.paths.GITHUB_TOKEN_PATH}\n\nGitHub token exists: ${info.tokenExists ? \"Yes\" : \"No\"}`)\n}\n\nfunction printDebugInfoJson(info: DebugInfo): void {\n console.log(JSON.stringify(info, null, 2))\n}\n\nexport async function runDebug(options: RunDebugOptions): Promise<void> {\n const debugInfo = await getDebugInfo()\n\n if (options.json) {\n printDebugInfoJson(debugInfo)\n } else {\n printDebugInfoPlain(debugInfo)\n }\n}\n\nexport const debug = defineCommand({\n meta: {\n name: \"debug\",\n description: \"Print debug information about the application\",\n },\n args: {\n json: {\n type: \"boolean\",\n default: false,\n description: \"Output debug information as JSON\",\n },\n },\n run({ args }) {\n return runDebug({\n json: args.json,\n })\n },\n})\n"],"mappings":";;;;;;;;AAmCA,eAAe,oBAAqC;CAClD,IAAI;EACF,MAAM,kBAAkB,cACtB,IAAI,IAAI,mBAAmB,YAAY,GAAG,CAC5C;EAMA,OAHoB,KAAK,MAAM,MAAM,GAAG,SAAS,eAAe,CAG/C,CAAC,CAAC;CACrB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,iBAAiB;CACxB,MAAM,QAAQ,OAAO,QAAQ;CAE7B,OAAO;EACL,MAAM,QAAQ,QAAQ;EACtB,SAAS,QAAQ,IAAI,UAAU,QAAQ,QAAQ,MAAM,CAAC;EACtD,UAAU,GAAG,SAAS;EACtB,MAAM,GAAG,KAAK;CAChB;AACF;AAEA,eAAe,gBAAgB,UAAoC;CACjE,IAAI;EAEF,IAAI,EAAC,MADe,GAAG,KAAK,QAAQ,EAAA,CACzB,OAAO,GAAG,OAAO;EAG5B,QAAO,MADe,GAAG,SAAS,UAAU,MAAM,EAAA,CACnC,KAAK,CAAC,CAAC,SAAS;CACjC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,eAAe,eAAmC;CAChD,MAAM,CAAC,SAAS,eAAe,MAAM,QAAQ,IAAI,CAC/C,kBAAkB,GAClB,gBAAgB,MAAM,iBAAiB,CACzC,CAAC;CAED,OAAO;EACL,WAAW;GACT,iBAAiB,qBAAqB,OAAO,MAAM;GACnD,SAAS,qBAAqB;EAChC;EACA;EACA,SAAS,eAAe;EACxB,OAAO;GACL,SAAS,MAAM;GACf,aAAa,MAAM;GACnB,mBAAmB,MAAM;EAC3B;EACA;CACF;AACF;AAEA,SAAS,oBAAoB,MAAuB;CAClD,QAAQ,KAAK;;WAEJ,KAAK,QAAQ;WACb,KAAK,QAAQ,KAAK,GAAG,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,SAAS,GAAG,KAAK,QAAQ,KAAK;;;aAGvF,KAAK,UAAU,QAAQ,KAAK,IAAI,KAAK,OAAO;sBACnC,KAAK,UAAU,kBAAkB,QAAQ,KAAK;;;aAGvD,KAAK,MAAM,QAAQ;iBACf,KAAK,MAAM,YAAY;uBACjB,KAAK,MAAM,kBAAkB;;uBAE7B,KAAK,cAAc,QAAQ,MAAM;AACxD;AAEA,SAAS,mBAAmB,MAAuB;CACjD,QAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAC3C;AAEA,eAAsB,SAAS,SAAyC;CACtE,MAAM,YAAY,MAAM,aAAa;CAErC,IAAI,QAAQ,MACV,mBAAmB,SAAS;MAE5B,oBAAoB,SAAS;AAEjC;AAEA,MAAa,QAAQ,cAAc;CACjC,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM,EACJ,MAAM;EACJ,MAAM;EACN,SAAS;EACT,aAAa;CACf,EACF;CACA,IAAI,EAAE,QAAQ;EACZ,OAAO,SAAS,EACd,MAAM,KAAK,KACb,CAAC;CACH;AACF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as getConfig } from "./config-store
|
|
1
|
+
import { c as getConfig } from "./config-store-CARrUljo.js";
|
|
2
2
|
import consola from "consola";
|
|
3
3
|
//#region src/lib/error.ts
|
|
4
4
|
var HTTPError = class extends Error {
|
|
@@ -76,4 +76,4 @@ function assertGitHubCopilotEnabled() {
|
|
|
76
76
|
//#endregion
|
|
77
77
|
export { UpstreamHeadersTimeoutError as a, HTTPError as i, assertGitHubCopilotEnabled as n, UpstreamStreamInactivityTimeoutError as o, isGitHubCopilotEnabled as r, forwardError as s, GITHUB_COPILOT_PROVIDER as t };
|
|
78
78
|
|
|
79
|
-
//# sourceMappingURL=github-copilot-provider-
|
|
79
|
+
//# sourceMappingURL=github-copilot-provider-DlQZgaCT.js.map
|
package/dist/{github-copilot-provider-BWQdEbDy.js.map → github-copilot-provider-DlQZgaCT.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-copilot-provider-
|
|
1
|
+
{"version":3,"file":"github-copilot-provider-DlQZgaCT.js","names":[],"sources":["../src/lib/error.ts","../src/lib/github-copilot-provider.ts"],"sourcesContent":["import type { Context } from \"hono\"\nimport type { ContentfulStatusCode } from \"hono/utils/http-status\"\n\nimport consola from \"consola\"\n\nexport class HTTPError extends Error {\n response: Response\n\n constructor(message: string, response: Response) {\n super(message)\n this.response = response\n }\n}\n\nexport class UpstreamHeadersTimeoutError extends Error {\n readonly timeoutMs: number\n\n constructor(timeoutMs: number) {\n super(`Upstream did not return headers within ${timeoutMs}ms`)\n this.name = \"UpstreamHeadersTimeoutError\"\n this.timeoutMs = timeoutMs\n }\n}\n\nexport class UpstreamStreamInactivityTimeoutError extends Error {\n readonly timeoutMs: number\n\n constructor(timeoutMs: number) {\n super(`Upstream stream was inactive for ${timeoutMs}ms`)\n this.name = \"UpstreamStreamInactivityTimeoutError\"\n this.timeoutMs = timeoutMs\n }\n}\n\nexport async function forwardError(\n c: Context,\n error: unknown,\n): Promise<Response> {\n if (\n error instanceof UpstreamHeadersTimeoutError\n || error instanceof UpstreamStreamInactivityTimeoutError\n ) {\n consola.error(\"Error occurred:\", error)\n return c.json(\n {\n error: {\n message: error.message,\n type: \"upstream_timeout\",\n },\n },\n 504,\n )\n }\n\n if (c.req.raw.signal.aborted || isAbortError(error)) {\n return new Response(null, {\n status: 499,\n statusText: \"Client Closed Request\",\n })\n }\n\n consola.error(\"Error occurred:\", error)\n\n if (error instanceof HTTPError) {\n if (error.response.status === 429) {\n for (const [name, value] of error.response.headers) {\n const lowerName = name.toLowerCase()\n if (lowerName === \"retry-after\" || lowerName.startsWith(\"x-\")) {\n c.header(name, value)\n }\n }\n }\n\n const errorText = await error.response.text()\n let errorJson: unknown\n try {\n errorJson = JSON.parse(errorText)\n } catch {\n errorJson = errorText\n }\n consola.error(\"HTTP error:\", errorJson)\n return c.json(\n {\n error: {\n message: errorText,\n type: \"error\",\n },\n },\n error.response.status as ContentfulStatusCode,\n )\n }\n\n return c.json(\n {\n error: {\n message: (error as Error).message,\n type: \"error\",\n },\n },\n 500,\n )\n}\n\nconst isAbortError = (error: unknown): boolean =>\n error instanceof Error && error.name === \"AbortError\"\n","import { getConfig, type AppConfig } from \"./config-store\"\nimport { HTTPError } from \"./error\"\n\nexport const GITHUB_COPILOT_PROVIDER = \"github-copilot\"\n\n// Missing configuration preserves the legacy builtin Copilot behavior.\nexport function isGitHubCopilotEnabled(\n config: AppConfig = getConfig(),\n): boolean {\n return config.providers?.[GITHUB_COPILOT_PROVIDER]?.enabled !== false\n}\n\nexport function assertGitHubCopilotEnabled(): void {\n if (!isGitHubCopilotEnabled()) {\n throw new HTTPError(\n \"GitHub Copilot provider is disabled\",\n Response.json(\n {\n error: {\n message: \"GitHub Copilot provider is disabled\",\n type: \"provider_disabled\",\n },\n },\n { status: 403 },\n ),\n )\n }\n}\n"],"mappings":";;;AAKA,IAAa,YAAb,cAA+B,MAAM;CACnC;CAEA,YAAY,SAAiB,UAAoB;EAC/C,MAAM,OAAO;EACb,KAAK,WAAW;CAClB;AACF;AAEA,IAAa,8BAAb,cAAiD,MAAM;CACrD;CAEA,YAAY,WAAmB;EAC7B,MAAM,0CAA0C,UAAU,GAAG;EAC7D,KAAK,OAAO;EACZ,KAAK,YAAY;CACnB;AACF;AAEA,IAAa,uCAAb,cAA0D,MAAM;CAC9D;CAEA,YAAY,WAAmB;EAC7B,MAAM,oCAAoC,UAAU,GAAG;EACvD,KAAK,OAAO;EACZ,KAAK,YAAY;CACnB;AACF;AAEA,eAAsB,aACpB,GACA,OACmB;CACnB,IACE,iBAAiB,+BACd,iBAAiB,sCACpB;EACA,QAAQ,MAAM,mBAAmB,KAAK;EACtC,OAAO,EAAE,KACP,EACE,OAAO;GACL,SAAS,MAAM;GACf,MAAM;EACR,EACF,GACA,GACF;CACF;CAEA,IAAI,EAAE,IAAI,IAAI,OAAO,WAAW,aAAa,KAAK,GAChD,OAAO,IAAI,SAAS,MAAM;EACxB,QAAQ;EACR,YAAY;CACd,CAAC;CAGH,QAAQ,MAAM,mBAAmB,KAAK;CAEtC,IAAI,iBAAiB,WAAW;EAC9B,IAAI,MAAM,SAAS,WAAW,KAC5B,KAAK,MAAM,CAAC,MAAM,UAAU,MAAM,SAAS,SAAS;GAClD,MAAM,YAAY,KAAK,YAAY;GACnC,IAAI,cAAc,iBAAiB,UAAU,WAAW,IAAI,GAC1D,EAAE,OAAO,MAAM,KAAK;EAExB;EAGF,MAAM,YAAY,MAAM,MAAM,SAAS,KAAK;EAC5C,IAAI;EACJ,IAAI;GACF,YAAY,KAAK,MAAM,SAAS;EAClC,QAAQ;GACN,YAAY;EACd;EACA,QAAQ,MAAM,eAAe,SAAS;EACtC,OAAO,EAAE,KACP,EACE,OAAO;GACL,SAAS;GACT,MAAM;EACR,EACF,GACA,MAAM,SAAS,MACjB;CACF;CAEA,OAAO,EAAE,KACP,EACE,OAAO;EACL,SAAU,MAAgB;EAC1B,MAAM;CACR,EACF,GACA,GACF;AACF;AAEA,MAAM,gBAAgB,UACpB,iBAAiB,SAAS,MAAM,SAAS;;;ACrG3C,MAAa,0BAA0B;AAGvC,SAAgB,uBACd,SAAoB,UAAU,GACrB;CACT,OAAO,OAAO,YAAY,wBAAwB,EAAE,YAAY;AAClE;AAEA,SAAgB,6BAAmC;CACjD,IAAI,CAAC,uBAAuB,GAC1B,MAAM,IAAI,UACR,uCACA,SAAS,KACP,EACE,OAAO;EACL,SAAS;EACT,MAAM;CACR,EACF,GACA,EAAE,QAAQ,IAAI,CAChB,CACF;AAEJ"}
|
package/dist/main.js
CHANGED
|
@@ -27,11 +27,11 @@ if (isMcpFastPath(process.argv)) {
|
|
|
27
27
|
if (process.platform === "win32" && process.stdout.isTTY && !process.env.WT_SESSION) process.env.WT_SESSION = "copilot-api";
|
|
28
28
|
const { bindElectronFetch } = await import("./electron-fetch-DsMaRX6v.js");
|
|
29
29
|
bindElectronFetch();
|
|
30
|
-
const { auth } = await import("./auth-
|
|
31
|
-
const { debug } = await import("./debug-
|
|
30
|
+
const { auth } = await import("./auth-C5B75e7U.js");
|
|
31
|
+
const { debug } = await import("./debug-CcfAczV9.js");
|
|
32
32
|
const { mcp } = await import("./mcp-Byz9h_xz.js");
|
|
33
|
-
const { start } = await import("./start-
|
|
34
|
-
const { provider } = await import("./provider-
|
|
33
|
+
const { start } = await import("./start-DPRCrNJa.js");
|
|
34
|
+
const { provider } = await import("./provider-DktH3jcC.js");
|
|
35
35
|
await runMain(defineCommand({
|
|
36
36
|
meta: {
|
|
37
37
|
name: "copilot-api",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Z as state } from "./token-
|
|
1
|
+
import { Z as state } from "./token-CZr63uyO.js";
|
|
2
2
|
//#region src/lib/models.ts
|
|
3
3
|
/**
|
|
4
4
|
* Converts a Copilot upstream model ID to a client-friendly ID that Claude Code
|
|
@@ -87,4 +87,4 @@ const normalizeSdkModelId = (sdkModelId) => {
|
|
|
87
87
|
//#endregion
|
|
88
88
|
export { toClientModelId as i, getLatestModelForFamily as n, normalizeSdkModelId as r, findEndpointModel as t };
|
|
89
89
|
|
|
90
|
-
//# sourceMappingURL=models-
|
|
90
|
+
//# sourceMappingURL=models-C_0HbW3K.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-
|
|
1
|
+
{"version":3,"file":"models-C_0HbW3K.js","names":[],"sources":["../src/lib/models.ts"],"sourcesContent":["import type { Model } from \"~/lib/types/models\"\n\nimport { state } from \"~/lib/state\"\n\n/**\n * Converts a Copilot upstream model ID to a client-friendly ID that Claude Code\n * and Claude Desktop recognize (dots in version replaced with hyphens).\n * e.g. \"claude-sonnet-4.6\" -> \"claude-sonnet-4-6\"\n * Non-Claude models are returned unchanged.\n */\nexport const toClientModelId = (modelId: string): string => {\n const normalized = normalizeSdkModelId(modelId)\n if (!normalized) return modelId\n const versionHyphenated = normalized.version.replaceAll(\".\", \"-\")\n return `claude-${normalized.family}-${versionHyphenated}`\n}\n\nexport interface NormalizedSdkModelId {\n family: string\n version: string\n}\n\nexport const findEndpointModel = (sdkModelId: string): Model | undefined => {\n const models = state.models?.data ?? []\n const exactMatch = models.find((m) => m.id === sdkModelId)\n if (exactMatch) {\n return exactMatch\n }\n\n const normalized = normalizeSdkModelId(sdkModelId)\n if (!normalized) {\n return undefined\n }\n\n const modelName = `claude-${normalized.family}-${normalized.version}`\n const model = models.find((m) => m.id === modelName)\n if (model) {\n return model\n }\n\n return undefined\n}\n\n/**\n * Finds the latest available model for a given Claude family (e.g. \"opus\",\n * \"sonnet\", \"haiku\") among the models currently cached in `state.models`.\n * \"Latest\" is determined by the highest semantic version parsed from the model\n * ID. Returns `undefined` when no model of that family is available.\n */\nexport const getLatestModelForFamily = (family: string): Model | undefined => {\n const models = state.models?.data ?? []\n\n let best: { model: Model; major: number; minor: number } | undefined\n\n for (const model of models) {\n const normalized = normalizeSdkModelId(model.id)\n if (!normalized || normalized.family !== family) {\n continue\n }\n\n const [majorPart, minorPart = \"0\"] = normalized.version.split(\".\")\n const major = Number.parseInt(majorPart, 10)\n const minor = Number.parseInt(minorPart, 10)\n if (Number.isNaN(major) || Number.isNaN(minor)) {\n continue\n }\n\n if (\n !best\n || major > best.major\n || (major === best.major && minor > best.minor)\n ) {\n best = { model, major, minor }\n }\n }\n\n return best?.model\n}\n\n/**\n * Normalizes an SDK model ID to extract the model family and version.\n * this method from github copilot extension\n * Examples:\n * - \"claude-opus-4-5-20251101\" -> { family: \"opus\", version: \"4.5\" }\n * - \"claude-3-5-sonnet-20241022\" -> { family: \"sonnet\", version: \"3.5\" }\n * - \"claude-sonnet-4-20250514\" -> { family: \"sonnet\", version: \"4\" }\n * - \"claude-haiku-3-5-20250514\" -> { family: \"haiku\", version: \"3.5\" }\n * - \"claude-haiku-4.5\" -> { family: \"haiku\", version: \"4.5\" }\n */\nexport const normalizeSdkModelId = (\n sdkModelId: string,\n): NormalizedSdkModelId | undefined => {\n const lower = sdkModelId.toLowerCase()\n\n // Strip date suffix (8 digits at the end)\n const withoutDate = lower.replace(/-\\d{8}$/, \"\")\n\n // Pattern 1: claude-{family}-{major}.{minor} (e.g., claude-haiku-4.5)\n const pattern1 = withoutDate.match(/^claude-(\\w+)-(\\d+)\\.(\\d+)$/)\n if (pattern1) {\n return { family: pattern1[1], version: `${pattern1[2]}.${pattern1[3]}` }\n }\n\n // Pattern 2: claude-{family}-{major}-{minor} (e.g., claude-opus-4-5, claude-haiku-3-5)\n const pattern2 = withoutDate.match(/^claude-(\\w+)-(\\d+)-(\\d+)$/)\n if (pattern2) {\n return { family: pattern2[1], version: `${pattern2[2]}.${pattern2[3]}` }\n }\n\n // Pattern 3: claude-{major}-{minor}-{family} (e.g., claude-3-5-sonnet)\n const pattern3 = withoutDate.match(/^claude-(\\d+)-(\\d+)-(\\w+)$/)\n if (pattern3) {\n return { family: pattern3[3], version: `${pattern3[1]}.${pattern3[2]}` }\n }\n\n // Pattern 4: claude-{family}-{major} (e.g., claude-sonnet-4)\n const pattern4 = withoutDate.match(/^claude-(\\w+)-(\\d+)$/)\n if (pattern4) {\n return { family: pattern4[1], version: pattern4[2] }\n }\n\n // Pattern 5: claude-{major}-{family} (e.g., claude-3-opus)\n const pattern5 = withoutDate.match(/^claude-(\\d+)-(\\w+)$/)\n if (pattern5) {\n return { family: pattern5[2], version: pattern5[1] }\n }\n\n return undefined\n}\n"],"mappings":";;;;;;;;AAUA,MAAa,mBAAmB,YAA4B;CAC1D,MAAM,aAAa,oBAAoB,OAAO;CAC9C,IAAI,CAAC,YAAY,OAAO;CACxB,MAAM,oBAAoB,WAAW,QAAQ,WAAW,KAAK,GAAG;CAChE,OAAO,UAAU,WAAW,OAAO,GAAG;AACxC;AAOA,MAAa,qBAAqB,eAA0C;CAC1E,MAAM,SAAS,MAAM,QAAQ,QAAQ,CAAC;CACtC,MAAM,aAAa,OAAO,MAAM,MAAM,EAAE,OAAO,UAAU;CACzD,IAAI,YACF,OAAO;CAGT,MAAM,aAAa,oBAAoB,UAAU;CACjD,IAAI,CAAC,YACH;CAGF,MAAM,YAAY,UAAU,WAAW,OAAO,GAAG,WAAW;CAC5D,MAAM,QAAQ,OAAO,MAAM,MAAM,EAAE,OAAO,SAAS;CACnD,IAAI,OACF,OAAO;AAIX;;;;;;;AAQA,MAAa,2BAA2B,WAAsC;CAC5E,MAAM,SAAS,MAAM,QAAQ,QAAQ,CAAC;CAEtC,IAAI;CAEJ,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,aAAa,oBAAoB,MAAM,EAAE;EAC/C,IAAI,CAAC,cAAc,WAAW,WAAW,QACvC;EAGF,MAAM,CAAC,WAAW,YAAY,OAAO,WAAW,QAAQ,MAAM,GAAG;EACjE,MAAM,QAAQ,OAAO,SAAS,WAAW,EAAE;EAC3C,MAAM,QAAQ,OAAO,SAAS,WAAW,EAAE;EAC3C,IAAI,OAAO,MAAM,KAAK,KAAK,OAAO,MAAM,KAAK,GAC3C;EAGF,IACE,CAAC,QACE,QAAQ,KAAK,SACZ,UAAU,KAAK,SAAS,QAAQ,KAAK,OAEzC,OAAO;GAAE;GAAO;GAAO;EAAM;CAEjC;CAEA,OAAO,MAAM;AACf;;;;;;;;;;;AAYA,MAAa,uBACX,eACqC;CAIrC,MAAM,cAHQ,WAAW,YAGD,CAAC,CAAC,QAAQ,WAAW,EAAE;CAG/C,MAAM,WAAW,YAAY,MAAM,6BAA6B;CAChE,IAAI,UACF,OAAO;EAAE,QAAQ,SAAS;EAAI,SAAS,GAAG,SAAS,GAAG,GAAG,SAAS;CAAK;CAIzE,MAAM,WAAW,YAAY,MAAM,4BAA4B;CAC/D,IAAI,UACF,OAAO;EAAE,QAAQ,SAAS;EAAI,SAAS,GAAG,SAAS,GAAG,GAAG,SAAS;CAAK;CAIzE,MAAM,WAAW,YAAY,MAAM,4BAA4B;CAC/D,IAAI,UACF,OAAO;EAAE,QAAQ,SAAS;EAAI,SAAS,GAAG,SAAS,GAAG,GAAG,SAAS;CAAK;CAIzE,MAAM,WAAW,YAAY,MAAM,sBAAsB;CACzD,IAAI,UACF,OAAO;EAAE,QAAQ,SAAS;EAAI,SAAS,SAAS;CAAG;CAIrD,MAAM,WAAW,YAAY,MAAM,sBAAsB;CACzD,IAAI,UACF,OAAO;EAAE,QAAQ,SAAS;EAAI,SAAS,SAAS;CAAG;AAIvD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as saveProviderManagementConfig } from "./provider-management-
|
|
1
|
+
import { r as saveProviderManagementConfig } from "./provider-management-z3m7cUkp.js";
|
|
2
2
|
import { defineCommand } from "citty";
|
|
3
3
|
//#region src/provider.ts
|
|
4
4
|
function providerStateCommand(enabled) {
|
|
@@ -33,4 +33,4 @@ const provider = defineCommand({
|
|
|
33
33
|
//#endregion
|
|
34
34
|
export { provider };
|
|
35
35
|
|
|
36
|
-
//# sourceMappingURL=provider-
|
|
36
|
+
//# sourceMappingURL=provider-DktH3jcC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-
|
|
1
|
+
{"version":3,"file":"provider-DktH3jcC.js","names":[],"sources":["../src/provider.ts"],"sourcesContent":["import { defineCommand } from \"citty\"\n\nimport { saveProviderManagementConfig } from \"./lib/provider-management\"\n\nfunction providerStateCommand(enabled: boolean) {\n return defineCommand({\n meta: {\n description: `${enabled ? \"Enable\" : \"Disable\"} a configured provider`,\n },\n args: {\n name: {\n type: \"positional\",\n required: true,\n description: \"Provider name\",\n },\n },\n run({ args }) {\n try {\n saveProviderManagementConfig({\n providers: { [args.name]: { enabled } },\n })\n process.stdout.write(\n `Provider '${args.name}' ${enabled ? \"enabled\" : \"disabled\"}. Restart the running server to apply the change.\\n`,\n )\n } catch (error) {\n process.stderr.write(\n `${error instanceof Error ? error.message : String(error)}\\n`,\n )\n process.exitCode = 1\n }\n },\n })\n}\n\nexport const provider = defineCommand({\n meta: { name: \"provider\", description: \"Manage configured providers\" },\n subCommands: {\n enable: providerStateCommand(true),\n disable: providerStateCommand(false),\n },\n})\n"],"mappings":";;;AAIA,SAAS,qBAAqB,SAAkB;CAC9C,OAAO,cAAc;EACnB,MAAM,EACJ,aAAa,GAAG,UAAU,WAAW,UAAU,wBACjD;EACA,MAAM,EACJ,MAAM;GACJ,MAAM;GACN,UAAU;GACV,aAAa;EACf,EACF;EACA,IAAI,EAAE,QAAQ;GACZ,IAAI;IACF,6BAA6B,EAC3B,WAAW,GAAG,KAAK,OAAO,EAAE,QAAQ,EAAE,EACxC,CAAC;IACD,QAAQ,OAAO,MACb,aAAa,KAAK,KAAK,IAAI,UAAU,YAAY,WAAW,oDAC9D;GACF,SAAS,OAAO;IACd,QAAQ,OAAO,MACb,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAC5D;IACA,QAAQ,WAAW;GACrB;EACF;CACF,CAAC;AACH;AAEA,MAAa,WAAW,cAAc;CACpC,MAAM;EAAE,MAAM;EAAY,aAAa;CAA8B;CACrE,aAAa;EACX,QAAQ,qBAAqB,IAAI;EACjC,SAAS,qBAAqB,KAAK;CACrC;AACF,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as readEditableConfigFromDisk, b as writeConfigToDisk, d as invalidateConfigCache, x as PATHS } from "./config-store
|
|
2
|
-
import { t as GITHUB_COPILOT_PROVIDER } from "./github-copilot-provider-
|
|
1
|
+
import { _ as readEditableConfigFromDisk, b as writeConfigToDisk, d as invalidateConfigCache, x as PATHS } from "./config-store-CARrUljo.js";
|
|
2
|
+
import { t as GITHUB_COPILOT_PROVIDER } from "./github-copilot-provider-DlQZgaCT.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
//#region src/lib/provider-management.ts
|
|
5
5
|
const updateSchema = z.object({ providers: z.record(z.string(), z.object({
|
|
@@ -58,4 +58,4 @@ function saveProviderManagementConfig(input) {
|
|
|
58
58
|
//#endregion
|
|
59
59
|
export { isProviderCodexModelVisible as n, saveProviderManagementConfig as r, getProviderCodexModels as t };
|
|
60
60
|
|
|
61
|
-
//# sourceMappingURL=provider-management-
|
|
61
|
+
//# sourceMappingURL=provider-management-z3m7cUkp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-management-
|
|
1
|
+
{"version":3,"file":"provider-management-z3m7cUkp.js","names":[],"sources":["../src/lib/provider-management.ts"],"sourcesContent":["import { z } from \"zod\"\n\nimport { GITHUB_COPILOT_PROVIDER } from \"./github-copilot-provider\"\n\nimport {\n invalidateConfigCache,\n readEditableConfigFromDisk,\n writeConfigToDisk,\n type AppConfig,\n type ProviderConfig,\n} from \"./config-store\"\nimport { PATHS } from \"./paths\"\nimport type { ProviderManagementConfig } from \"./types/provider-management\"\nexport type {\n ProviderManagementConfig,\n ProviderManagementUpdate,\n} from \"./types/provider-management\"\n\nconst updateSchema = z\n .object({\n providers: z\n .record(\n z.string(),\n z\n .object({\n enabled: z.boolean().optional(),\n codexModels: z\n .array(z.string().trim().min(1))\n .nullable()\n .optional(),\n })\n .strict(),\n )\n .optional(),\n })\n .strict()\n\nexport function getProviderCodexModels(\n provider: ProviderConfig | null | undefined,\n): Array<string> | undefined {\n const models = provider?.codexModels\n if (!Array.isArray(models) || !models.every((id) => typeof id === \"string\")) {\n return undefined\n }\n return [...new Set(models.map((id) => id.trim()).filter(Boolean))]\n}\n\nexport function isProviderCodexModelVisible(\n provider: ProviderConfig | null | undefined,\n modelId: string,\n): boolean {\n if (provider?.enabled === false) return false\n const models = getProviderCodexModels(provider)\n return models === undefined || models.includes(modelId)\n}\n\nexport function getProviderManagementConfig(\n config: AppConfig = readEditableConfigFromDisk(),\n): ProviderManagementConfig {\n const providers: NonNullable<AppConfig[\"providers\"]> = {\n [GITHUB_COPILOT_PROVIDER]: {},\n ...config.providers,\n }\n return {\n configPath: PATHS.CONFIG_PATH,\n providers: Object.entries(providers)\n .filter(([name]) => name !== \"copilot\")\n .map(([name, provider]) => ({\n name,\n type:\n name === GITHUB_COPILOT_PROVIDER ? \"github-copilot\" : (\n (provider.type ?? \"anthropic\")\n ),\n enabled: provider.enabled !== false,\n codexModels: getProviderCodexModels(provider),\n })),\n }\n}\n\nexport function applyProviderManagementUpdate(\n config: AppConfig,\n input: unknown,\n): AppConfig {\n const parsed = updateSchema.safeParse(input)\n if (!parsed.success) {\n throw new Error(\n parsed.error.issues[0]?.message ?? \"Invalid provider update\",\n )\n }\n const { providers: updates } = parsed.data\n const providers = { ...config.providers }\n for (const [name, update] of Object.entries(updates ?? {})) {\n if (\n name === \"copilot\"\n || (name !== GITHUB_COPILOT_PROVIDER && !Object.hasOwn(providers, name))\n ) {\n throw new Error(`Provider '${name}' is not configured`)\n }\n const provider = { ...providers[name] }\n if (update.enabled !== undefined) provider.enabled = update.enabled\n if (update.codexModels === null) {\n delete provider.codexModels\n } else if (update.codexModels !== undefined) {\n provider.codexModels = [...new Set(update.codexModels)]\n }\n providers[name] = provider\n }\n return {\n ...config,\n ...(updates !== undefined ? { providers } : {}),\n }\n}\n\nexport function saveProviderManagementConfig(\n input: unknown,\n): ProviderManagementConfig {\n const updated = applyProviderManagementUpdate(\n readEditableConfigFromDisk(),\n input,\n )\n writeConfigToDisk(updated)\n invalidateConfigCache()\n return getProviderManagementConfig(updated)\n}\n"],"mappings":";;;;AAkBA,MAAM,eAAe,EAClB,OAAO,EACN,WAAW,EACR,OACC,EAAE,OAAO,GACT,EACG,OAAO;CACN,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC9B,aAAa,EACV,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/B,SAAS,CAAC,CACV,SAAS;AACd,CAAC,CAAC,CACD,OAAO,CACZ,CAAC,CACA,SAAS,EACd,CAAC,CAAC,CACD,OAAO;AAEV,SAAgB,uBACd,UAC2B;CAC3B,MAAM,SAAS,UAAU;CACzB,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,QAAQ,GACxE;CAEF,OAAO,CAAC,GAAG,IAAI,IAAI,OAAO,KAAK,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC;AACnE;AAEA,SAAgB,4BACd,UACA,SACS;CACT,IAAI,UAAU,YAAY,OAAO,OAAO;CACxC,MAAM,SAAS,uBAAuB,QAAQ;CAC9C,OAAO,WAAW,KAAA,KAAa,OAAO,SAAS,OAAO;AACxD;AAEA,SAAgB,4BACd,SAAoB,2BAA2B,GACrB;CAC1B,MAAM,YAAiD;GACpD,0BAA0B,CAAC;EAC5B,GAAG,OAAO;CACZ;CACA,OAAO;EACL,YAAY,MAAM;EAClB,WAAW,OAAO,QAAQ,SAAS,CAAC,CACjC,QAAQ,CAAC,UAAU,SAAS,SAAS,CAAC,CACtC,KAAK,CAAC,MAAM,eAAe;GAC1B;GACA,MACE,SAAA,mBAAmC,mBAChC,SAAS,QAAQ;GAEtB,SAAS,SAAS,YAAY;GAC9B,aAAa,uBAAuB,QAAQ;EAC9C,EAAE;CACN;AACF;AAEA,SAAgB,8BACd,QACA,OACW;CACX,MAAM,SAAS,aAAa,UAAU,KAAK;CAC3C,IAAI,CAAC,OAAO,SACV,MAAM,IAAI,MACR,OAAO,MAAM,OAAO,EAAE,EAAE,WAAW,yBACrC;CAEF,MAAM,EAAE,WAAW,YAAY,OAAO;CACtC,MAAM,YAAY,EAAE,GAAG,OAAO,UAAU;CACxC,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,WAAW,CAAC,CAAC,GAAG;EAC1D,IACE,SAAS,aACL,SAAA,oBAAoC,CAAC,OAAO,OAAO,WAAW,IAAI,GAEtE,MAAM,IAAI,MAAM,aAAa,KAAK,oBAAoB;EAExD,MAAM,WAAW,EAAE,GAAG,UAAU,MAAM;EACtC,IAAI,OAAO,YAAY,KAAA,GAAW,SAAS,UAAU,OAAO;EAC5D,IAAI,OAAO,gBAAgB,MACzB,OAAO,SAAS;OACX,IAAI,OAAO,gBAAgB,KAAA,GAChC,SAAS,cAAc,CAAC,GAAG,IAAI,IAAI,OAAO,WAAW,CAAC;EAExD,UAAU,QAAQ;CACpB;CACA,OAAO;EACL,GAAG;EACH,GAAI,YAAY,KAAA,IAAY,EAAE,UAAU,IAAI,CAAC;CAC/C;AACF;AAEA,SAAgB,6BACd,OAC0B;CAC1B,MAAM,UAAU,8BACd,2BAA2B,GAC3B,KACF;CACA,kBAAkB,OAAO;CACzB,sBAAsB;CACtB,OAAO,4BAA4B,OAAO;AAC5C"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { a as getAnthropicApiKey, f as isAlphaSearchCodexPriorityEnabled, h as isResponsesApiWebSocketEnabled, i as getAlphaSearchModel, l as getMessageApiWebSearchModel, m as isResponsesApiWebSearchEnabled, o as getClaudeAutoModel, p as isMessagesApiEnabled, s as getClaudeTokenMultiplier, u as getUpstreamTransportConfig, x as PATHS } from "./config-store
|
|
2
|
-
import { C as resolveMappedModel, S as isGpt56OrAbove, _ as getReasoningEffortForModel, b as isContextManagementEnabledForMessages, d as getOpencodeGoModelRecords, g as getModelResponsesApiCompactThreshold$1, h as getModelMappings, i as listEnabledProviders, l as getOpencodeGoModelConfig, m as getExtraPromptForModel, n as getRawProviderConfig, o as resolveEffectiveProviderType, s as resolveProviderConfigForModel, t as getProviderConfig, u as getOpencodeGoModelIds, v as getSmallModel, w as setModelMappings, x as isContextManagementEnabledForResponses, y as getSmallModelForProvider } from "./config-
|
|
3
|
-
import { i as HTTPError, r as isGitHubCopilotEnabled, s as forwardError } from "./github-copilot-provider-
|
|
4
|
-
import { $ as stripInternalRequestHeaders, B as forwardCodexResponses, C as copilotWebSocketHeaders, E as prepareMessageProxyHeaders, G as createResponsesHttpEventStream, H as requestContext, J as getResponsesStreamTerminalDisposition, K as createResponsesSafeStream, M as compactTextOnlyGuard, N as createAuthMiddleware, O as compactAutoContinuePromptStarts, P as getConfiguredAdminApiKeys, R as CODEX_API_BASE_URL, T as prepareInteractionHeaders, U as resolveTraceId$1, V as generateTraceId, W as fetchUpstreamWithLifecycle, X as createWebSocketUrl, Y as createPooledWebSocketStream, Z as state, b as copilotBaseUrl, d as getUUID, f as isAsyncIterable, g as getCopilotUsage, h as parseUserIdMetadata, j as compactSystemPromptStarts, k as compactMessageSections, l as generateRequestIdFromPayload, m as isResponsesStream, o as setupCodexToken, p as isNullish, q as encodePoolKeyPart, u as getRootSessionId, w as prepareForCompact, x as copilotHeaders, z as buildCodexRequestHeaders } from "./token-
|
|
1
|
+
import { a as getAnthropicApiKey, f as isAlphaSearchCodexPriorityEnabled, h as isResponsesApiWebSocketEnabled, i as getAlphaSearchModel, l as getMessageApiWebSearchModel, m as isResponsesApiWebSearchEnabled, o as getClaudeAutoModel, p as isMessagesApiEnabled, s as getClaudeTokenMultiplier, u as getUpstreamTransportConfig, x as PATHS } from "./config-store-CARrUljo.js";
|
|
2
|
+
import { C as resolveMappedModel, S as isGpt56OrAbove, _ as getReasoningEffortForModel, b as isContextManagementEnabledForMessages, d as getOpencodeGoModelRecords, g as getModelResponsesApiCompactThreshold$1, h as getModelMappings, i as listEnabledProviders, l as getOpencodeGoModelConfig, m as getExtraPromptForModel, n as getRawProviderConfig, o as resolveEffectiveProviderType, s as resolveProviderConfigForModel, t as getProviderConfig, u as getOpencodeGoModelIds, v as getSmallModel, w as setModelMappings, x as isContextManagementEnabledForResponses, y as getSmallModelForProvider } from "./config-B2OaAnpL.js";
|
|
3
|
+
import { i as HTTPError, r as isGitHubCopilotEnabled, s as forwardError } from "./github-copilot-provider-DlQZgaCT.js";
|
|
4
|
+
import { $ as stripInternalRequestHeaders, B as forwardCodexResponses, C as copilotWebSocketHeaders, E as prepareMessageProxyHeaders, G as createResponsesHttpEventStream, H as requestContext, J as getResponsesStreamTerminalDisposition, K as createResponsesSafeStream, M as compactTextOnlyGuard, N as createAuthMiddleware, O as compactAutoContinuePromptStarts, P as getConfiguredAdminApiKeys, R as CODEX_API_BASE_URL, T as prepareInteractionHeaders, U as resolveTraceId$1, V as generateTraceId, W as fetchUpstreamWithLifecycle, X as createWebSocketUrl, Y as createPooledWebSocketStream, Z as state, b as copilotBaseUrl, d as getUUID, f as isAsyncIterable, g as getCopilotUsage, h as parseUserIdMetadata, j as compactSystemPromptStarts, k as compactMessageSections, l as generateRequestIdFromPayload, m as isResponsesStream, o as setupCodexToken, p as isNullish, q as encodePoolKeyPart, u as getRootSessionId, w as prepareForCompact, x as copilotHeaders, z as buildCodexRequestHeaders } from "./token-CZr63uyO.js";
|
|
5
5
|
import { a as isDeferredToolName, c as parseMcpToolSearchSentinel, d as shouldEnableResponsesToolSearch, i as isBridgeToolSearchName, l as resolveBridgeToolSearchName, o as listDeferredToolNames, r as formatToolSearchBridgeArguments, s as normalizeToolSearchBridgeArguments, t as BRIDGE_TOOL_SEARCH_NAME, u as selectDeferredToolsByNames } from "./tool-search-BgFcDbNQ.js";
|
|
6
|
-
import { n as isProviderCodexModelVisible, t as getProviderCodexModels } from "./provider-management-
|
|
7
|
-
import { i as toClientModelId, r as normalizeSdkModelId, t as findEndpointModel } from "./models-
|
|
6
|
+
import { n as isProviderCodexModelVisible, t as getProviderCodexModels } from "./provider-management-z3m7cUkp.js";
|
|
7
|
+
import { i as toClientModelId, r as normalizeSdkModelId, t as findEndpointModel } from "./models-C_0HbW3K.js";
|
|
8
8
|
import consola from "consola";
|
|
9
9
|
import { createHash } from "node:crypto";
|
|
10
10
|
import fs, { createWriteStream, readFileSync, rmSync } from "node:fs";
|
|
@@ -426,34 +426,25 @@ const dashscopePeakWindows = [{
|
|
|
426
426
|
endMinuteUtc: 840,
|
|
427
427
|
startMinuteUtc: 0
|
|
428
428
|
}];
|
|
429
|
+
//#endregion
|
|
430
|
+
//#region src/lib/builtin-provider-models.ts
|
|
431
|
+
const CODEX_LUNA_PRICING = { tiers: [{
|
|
432
|
+
cacheCreationInput: .125,
|
|
433
|
+
cachedInput: .01,
|
|
434
|
+
input: .1,
|
|
435
|
+
maxInputTokens: 272e3,
|
|
436
|
+
output: .5
|
|
437
|
+
}, {
|
|
438
|
+
cacheCreationInput: .25,
|
|
439
|
+
cachedInput: .02,
|
|
440
|
+
input: .2,
|
|
441
|
+
output: .75
|
|
442
|
+
}] };
|
|
429
443
|
const builtinProviderModelRegistry = new class BuiltinProviderModelRegistry {
|
|
430
444
|
static catalog = {
|
|
431
445
|
codex: {
|
|
432
|
-
"
|
|
433
|
-
|
|
434
|
-
input: 1.75,
|
|
435
|
-
output: 14
|
|
436
|
-
} },
|
|
437
|
-
"gpt-5.4": { pricing: { tiers: [{
|
|
438
|
-
cachedInput: .25,
|
|
439
|
-
input: 2.5,
|
|
440
|
-
maxInputTokens: 272e3,
|
|
441
|
-
output: 15
|
|
442
|
-
}, {
|
|
443
|
-
cachedInput: .5,
|
|
444
|
-
input: 5,
|
|
445
|
-
output: 22.5
|
|
446
|
-
}] } },
|
|
447
|
-
"gpt-5.4-mini": { pricing: { tiers: [{
|
|
448
|
-
cachedInput: .075,
|
|
449
|
-
input: .75,
|
|
450
|
-
maxInputTokens: 272e3,
|
|
451
|
-
output: 4.5
|
|
452
|
-
}, {
|
|
453
|
-
cachedInput: .15,
|
|
454
|
-
input: 1.5,
|
|
455
|
-
output: 6.75
|
|
456
|
-
}] } },
|
|
446
|
+
"codex-auto-review": { pricing: CODEX_LUNA_PRICING },
|
|
447
|
+
"gpt-reserve": { pricing: CODEX_LUNA_PRICING },
|
|
457
448
|
"gpt-5.5": { pricing: { tiers: [{
|
|
458
449
|
cachedInput: .5,
|
|
459
450
|
input: 5,
|
|
@@ -512,18 +503,7 @@ const builtinProviderModelRegistry = new class BuiltinProviderModelRegistry {
|
|
|
512
503
|
input: 20,
|
|
513
504
|
output: 75
|
|
514
505
|
}] } },
|
|
515
|
-
"gpt-6-luna": { pricing:
|
|
516
|
-
cacheCreationInput: .125,
|
|
517
|
-
cachedInput: .01,
|
|
518
|
-
input: .1,
|
|
519
|
-
maxInputTokens: 272e3,
|
|
520
|
-
output: .5
|
|
521
|
-
}, {
|
|
522
|
-
cacheCreationInput: .25,
|
|
523
|
-
cachedInput: .02,
|
|
524
|
-
input: .2,
|
|
525
|
-
output: .75
|
|
526
|
-
}] } },
|
|
506
|
+
"gpt-6-luna": { pricing: CODEX_LUNA_PRICING },
|
|
527
507
|
"gpt-6-sol": { pricing: { tiers: [{
|
|
528
508
|
cacheCreationInput: 2.5,
|
|
529
509
|
cachedInput: .2,
|
|
@@ -1306,11 +1286,18 @@ function getModelSummaries(db, range) {
|
|
|
1306
1286
|
return modelSummaryFromRow(row, costMap.get(model) ?? []);
|
|
1307
1287
|
});
|
|
1308
1288
|
}
|
|
1309
|
-
function getDailyModelSummaries(db,
|
|
1310
|
-
|
|
1289
|
+
function getDailyModelSummaries(db, intervals) {
|
|
1290
|
+
if (intervals.length === 0) return /* @__PURE__ */ new Map();
|
|
1291
|
+
const usageDays = `usage_days(usage_date, day_start_ms, day_end_ms) AS (VALUES ${intervals.map(() => "(?, ?, ?)").join(", ")})`;
|
|
1292
|
+
const dayParams = intervals.flatMap((interval) => [
|
|
1293
|
+
interval.date,
|
|
1294
|
+
interval.startMs,
|
|
1295
|
+
interval.endMs
|
|
1296
|
+
]);
|
|
1311
1297
|
const rows = db.prepare(`
|
|
1298
|
+
WITH ${usageDays}
|
|
1312
1299
|
SELECT
|
|
1313
|
-
|
|
1300
|
+
usage_days.usage_date AS usage_date,
|
|
1314
1301
|
model,
|
|
1315
1302
|
COUNT(*) AS request_count,
|
|
1316
1303
|
COALESCE(SUM(input_tokens), 0) AS input_tokens,
|
|
@@ -1319,25 +1306,29 @@ function getDailyModelSummaries(db, range) {
|
|
|
1319
1306
|
COALESCE(SUM(cache_creation_input_tokens), 0) AS cache_creation_input_tokens,
|
|
1320
1307
|
SUM(total_nano_aiu) AS total_nano_aiu,
|
|
1321
1308
|
COALESCE(SUM(total_tokens), 0) AS total_tokens
|
|
1322
|
-
FROM
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1309
|
+
FROM usage_days
|
|
1310
|
+
JOIN token_usage_events
|
|
1311
|
+
ON created_at_ms >= usage_days.day_start_ms
|
|
1312
|
+
AND created_at_ms < usage_days.day_end_ms
|
|
1313
|
+
GROUP BY usage_days.usage_date, model
|
|
1314
|
+
ORDER BY usage_days.usage_date ASC, total_tokens DESC, model ASC
|
|
1315
|
+
`).all(...dayParams);
|
|
1327
1316
|
const costRows = db.prepare(`
|
|
1317
|
+
WITH ${usageDays}
|
|
1328
1318
|
SELECT
|
|
1329
|
-
|
|
1319
|
+
usage_days.usage_date AS usage_date,
|
|
1330
1320
|
model,
|
|
1331
1321
|
cost_currency,
|
|
1332
1322
|
COALESCE(SUM(total_cost_nanos), 0) AS total_cost_nanos
|
|
1333
|
-
FROM
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
AND
|
|
1323
|
+
FROM usage_days
|
|
1324
|
+
JOIN token_usage_events
|
|
1325
|
+
ON created_at_ms >= usage_days.day_start_ms
|
|
1326
|
+
AND created_at_ms < usage_days.day_end_ms
|
|
1327
|
+
WHERE cost_currency IS NOT NULL
|
|
1337
1328
|
AND total_cost_nanos IS NOT NULL
|
|
1338
|
-
GROUP BY usage_date, model, cost_currency
|
|
1339
|
-
ORDER BY usage_date ASC, model ASC, cost_currency ASC
|
|
1340
|
-
`).all(
|
|
1329
|
+
GROUP BY usage_days.usage_date, model, cost_currency
|
|
1330
|
+
ORDER BY usage_days.usage_date ASC, model ASC, cost_currency ASC
|
|
1331
|
+
`).all(...dayParams);
|
|
1341
1332
|
const costsByDateAndModel = /* @__PURE__ */ new Map();
|
|
1342
1333
|
for (const row of costRows) {
|
|
1343
1334
|
const date = stringFromRow(row, "usage_date");
|
|
@@ -1388,7 +1379,7 @@ async function getTokenUsageDailySummary(period) {
|
|
|
1388
1379
|
const db = await getDb();
|
|
1389
1380
|
const range = getPeriodRangeFromDb(db, period);
|
|
1390
1381
|
const intervals = createDailyIntervals(range);
|
|
1391
|
-
const dailySummaries = getDailyModelSummaries(db,
|
|
1382
|
+
const dailySummaries = getDailyModelSummaries(db, intervals);
|
|
1392
1383
|
return {
|
|
1393
1384
|
byModel: getModelSummaries(db, range),
|
|
1394
1385
|
days: intervals.map((interval) => createDailyBucket(interval, dailySummaries.get(interval.date) ?? [])),
|
|
@@ -7802,7 +7793,22 @@ const CODEX_MODELS = [
|
|
|
7802
7793
|
"xhigh",
|
|
7803
7794
|
"max"
|
|
7804
7795
|
]
|
|
7805
|
-
}
|
|
7796
|
+
},
|
|
7797
|
+
...["codex-auto-review", "gpt-reserve"].map((id) => ({
|
|
7798
|
+
contextWindow: 872e3,
|
|
7799
|
+
id,
|
|
7800
|
+
input: ["text", "image"],
|
|
7801
|
+
maxTokens: 128e3,
|
|
7802
|
+
name: id,
|
|
7803
|
+
reasoningEfforts: [
|
|
7804
|
+
"none",
|
|
7805
|
+
"low",
|
|
7806
|
+
"medium",
|
|
7807
|
+
"high",
|
|
7808
|
+
"xhigh",
|
|
7809
|
+
"max"
|
|
7810
|
+
]
|
|
7811
|
+
}))
|
|
7806
7812
|
];
|
|
7807
7813
|
const CODEX_MODELS_URL = `${CODEX_API_BASE_URL}/codex/models`;
|
|
7808
7814
|
const CODEX_MODELS_TIMEOUT_MS = 15e3;
|
|
@@ -10703,14 +10709,17 @@ async function handleMergedCodexModels(c, candidatesRequest, options = {}) {
|
|
|
10703
10709
|
const providerName = candidate.providerName ?? "github-copilot";
|
|
10704
10710
|
const modelId = candidate.catalogSlug ?? (candidate.providerName ? candidate.slug.slice(providerName.length + 1) : candidate.slug);
|
|
10705
10711
|
const config = getRawProviderConfig(providerName);
|
|
10706
|
-
|
|
10707
|
-
|
|
10712
|
+
const selectedModels = getProviderCodexModels(config);
|
|
10713
|
+
const selectionId = providerName === "github-copilot" && selectedModels?.includes(candidate.slug) ? candidate.slug : modelId;
|
|
10714
|
+
if (!isProviderCodexModelVisible(config, selectionId)) return false;
|
|
10715
|
+
if (selectedModels?.includes(selectionId)) explicitSlugs.add(candidate.slug);
|
|
10708
10716
|
return true;
|
|
10709
10717
|
});
|
|
10710
10718
|
const seenSlugs = new Set(visibleUpstreamModels.map((model) => model.slug));
|
|
10719
|
+
const modelMappings = getModelMappings();
|
|
10711
10720
|
const codexProviderAliases = options.includeCodexProviderAliases ? visibleUpstreamModels.flatMap((model, index) => {
|
|
10712
10721
|
const slug = `codex/${model.slug}`;
|
|
10713
|
-
if (seenSlugs.has(slug)) return [];
|
|
10722
|
+
if (seenSlugs.has(slug) || modelMappings[model.slug] === slug) return [];
|
|
10714
10723
|
seenSlugs.add(slug);
|
|
10715
10724
|
return [{
|
|
10716
10725
|
...createCatalogAlias(model, slug, options.codexProviderName),
|
|
@@ -12789,4 +12798,4 @@ createServer();
|
|
|
12789
12798
|
//#endregion
|
|
12790
12799
|
export { createServer };
|
|
12791
12800
|
|
|
12792
|
-
//# sourceMappingURL=server-
|
|
12801
|
+
//# sourceMappingURL=server-sTarDtg3.js.map
|