@jeffreycao/copilot-api 2.6.28 → 2.6.29

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-runtime-B4x9RzsD.js","names":["getCopilotModels"],"sources":["../src/lib/models.ts","../src/services/copilot/get-models.ts","../src/services/copilot/models-cache.ts","../src/lib/deviceid.ts","../src/services/get-vscode-version.ts","../src/services/vscode-env.ts","../src/lib/copilot-runtime.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","import consola from \"consola\"\n\nimport { copilotBaseUrl, copilotModelsHeaders } from \"~/lib/api-config\"\n\nimport { HTTPError } from \"~/lib/error\"\nimport { state } from \"~/lib/state\"\nimport type { ModelsResponse } from \"~/lib/types/models\"\n\nexport const getModels = async () => {\n consola.info(`Fetching models from ${copilotBaseUrl(state)}/models`)\n const response = await fetch(`${copilotBaseUrl(state)}/models`, {\n headers: copilotModelsHeaders(state),\n })\n\n if (!response.ok) {\n const errorText = await response.clone().text()\n\n consola.error(\"Failed to get models response body\", errorText)\n\n throw new HTTPError(\"Failed to get models\", response)\n }\n\n return (await response.json()) as ModelsResponse\n}\n","import consola from \"consola\"\n\nimport { state } from \"~/lib/state\"\nimport { getModels as getCopilotModels } from \"~/services/copilot/get-models\"\n\n// Periodically refresh models so long-running daemons pick up new SKUs.\nconst MODELS_REFRESH_BASE_MS = 30 * 60 * 1000\nlet modelsRefreshTimer: ReturnType<typeof setTimeout> | null = null\n// This loop runs on a plain timer that no AbortController owns, so stopping it\n// cannot cancel a response that is already on the wire. The generation lets a\n// stopped loop neither write state.models nor schedule itself again.\nlet refreshGeneration = 0\n\nconst cancelModelsRefreshTimer = () => {\n if (modelsRefreshTimer) {\n clearTimeout(modelsRefreshTimer)\n modelsRefreshTimer = null\n }\n}\n\nexport const stopModelsRefreshLoop = () => {\n // Bump before cancelling so a refresh already awaiting its response sees a\n // different generation and drops both its result and its next tick.\n refreshGeneration++\n cancelModelsRefreshTimer()\n}\n\ntype ModelsFetcher = typeof getCopilotModels\n\nconst refreshModels = async (fetcher: ModelsFetcher, generation: number) => {\n const prevIds = new Set(state.models?.data.map((m) => m.id) ?? [])\n const models = await fetcher()\n if (generation !== refreshGeneration) return\n\n state.models = {\n ...models,\n data: models.data.filter(\n (model) =>\n model.policy?.state !== \"disabled\"\n && (model.model_picker_enabled\n || model.capabilities.type === \"embeddings\"),\n ),\n }\n const nextIds = state.models.data.map((m) => m.id)\n const added = nextIds.filter((id) => !prevIds.has(id))\n if (added.length > 0) {\n consola.info(`Models refresh: ${added.length} new`)\n } else {\n consola.debug(`Models refresh: no changes (${nextIds.length} total)`)\n }\n}\n\nconst scheduleModelsRefresh = (fetcher: ModelsFetcher, intervalMs: number) => {\n const generation = refreshGeneration\n const jitter = Math.floor(Math.random() * (intervalMs / 6))\n const delay = intervalMs + jitter\n consola.debug(\n `Scheduling next models refresh in ${Math.round(delay / 1000)} seconds`,\n )\n\n cancelModelsRefreshTimer()\n modelsRefreshTimer = setTimeout(async () => {\n try {\n await refreshModels(fetcher, generation)\n } catch (error) {\n if (generation === refreshGeneration) {\n consola.warn(\"Failed to refresh models, keeping previous cache.\", error)\n }\n } finally {\n if (generation === refreshGeneration) {\n scheduleModelsRefresh(fetcher, intervalMs)\n }\n }\n }, delay)\n}\n\nexport async function cacheModels(\n fetcher: ModelsFetcher = getCopilotModels,\n intervalMs: number = MODELS_REFRESH_BASE_MS,\n): Promise<void> {\n // A fresh population supersedes whatever the previous loop was doing. This\n // is the path a config reload takes when the GitHub token changes, so a\n // request still in flight for the old account must not join this generation\n // and overwrite state.models once it comes back.\n refreshGeneration++\n const generation = refreshGeneration\n await refreshModels(fetcher, generation)\n if (generation !== refreshGeneration) return\n\n scheduleModelsRefresh(fetcher, intervalMs)\n}\n","import consola from \"consola\"\nimport { randomUUID } from \"node:crypto\"\nimport path from \"node:path\"\n\nconst WINDOWS_DEVICE_ID_KEY = String.raw`\\SOFTWARE\\Microsoft\\DeveloperTools`\nconst WINDOWS_DEVICE_ID_NAME = \"deviceid\"\n\ntype RegistryArch = \"x86\" | \"x64\"\n\ninterface WinregConstructor {\n new (options: {\n hive: string\n key: string\n arch?: RegistryArch\n }): WinregRegistry\n HKCU: string\n REG_SZ: string\n}\n\ninterface WinregRegistry {\n get(\n name: string,\n callback: (error: RegistryError | null, item: RegistryItem | null) => void,\n ): void\n set(\n name: string,\n type: string,\n value: string,\n callback: (error: RegistryError | null) => void,\n ): void\n}\n\ninterface RegistryItem {\n value?: string\n}\n\ninterface RegistryError extends Error {\n code?: number | string\n}\n\nconst windows64Architectures = new Set([\"AMD64\", \"ARM64\", \"IA64\"])\n\nconst getPosixHomeDir = (): string => {\n if (!process.env.HOME) {\n throw new Error(\"Home directory not found\")\n }\n\n return process.env.HOME\n}\n\nconst getDeviceIdFilePath = (): string => {\n let folder: string\n\n switch (process.platform) {\n case \"darwin\": {\n folder = path.posix.join(\n getPosixHomeDir(),\n \"Library\",\n \"Application Support\",\n )\n break\n }\n case \"linux\": {\n folder =\n process.env.XDG_CACHE_HOME\n ?? path.posix.join(getPosixHomeDir(), \".cache\")\n break\n }\n default: {\n throw new Error(\"Unsupported platform\")\n }\n }\n\n return path.posix.join(folder, \"Microsoft\", \"DeveloperTools\", \"deviceid\")\n}\n\nconst isMissingFileError = (error: unknown): error is NodeJS.ErrnoException => {\n return error instanceof Error && \"code\" in error && error.code === \"ENOENT\"\n}\n\nconst readStoredDeviceIdFile = async (\n filePath: string,\n): Promise<string | undefined> => {\n const { readFile } = await import(\"node:fs/promises\")\n\n try {\n return await readFile(filePath, \"utf8\")\n } catch (error) {\n if (isMissingFileError(error)) {\n return undefined\n }\n\n throw error\n }\n}\n\nconst writeStoredDeviceIdFile = async (\n filePath: string,\n deviceId: string,\n): Promise<void> => {\n const { mkdir, writeFile } = await import(\"node:fs/promises\")\n\n await mkdir(path.posix.dirname(filePath), { recursive: true })\n await writeFile(filePath, deviceId, \"utf8\")\n}\n\nconst getWindowsRegistryArch = (): RegistryArch | undefined => {\n const architecture = (\n process.env.PROCESSOR_ARCHITEW6432 ?? process.env.PROCESSOR_ARCHITECTURE\n )?.toUpperCase()\n\n return architecture && windows64Architectures.has(architecture) ?\n \"x64\"\n : undefined\n}\n\nconst loadWinreg = async (): Promise<WinregConstructor> => {\n const module = await import(\"winreg\")\n const winreg =\n \"default\" in module ? (module.default as unknown) : (module as unknown)\n\n return winreg as WinregConstructor\n}\n\nconst isMissingRegistryError = (error: RegistryError | null): boolean => {\n if (!error) {\n return false\n }\n\n const errorCode = Number(error.code)\n\n return Number.isFinite(errorCode) && errorCode === 1\n}\n\nconst createWindowsRegistry = async (): Promise<{\n registry: WinregRegistry\n regSz: string\n}> => {\n const Winreg = await loadWinreg()\n\n return {\n registry: new Winreg({\n hive: Winreg.HKCU,\n key: WINDOWS_DEVICE_ID_KEY,\n arch: getWindowsRegistryArch(),\n }),\n regSz: Winreg.REG_SZ,\n }\n}\n\nconst readRegistryString = async (\n registry: WinregRegistry,\n name: string,\n): Promise<string | undefined> => {\n return new Promise((resolve, reject) => {\n registry.get(name, (error, item) => {\n if (isMissingRegistryError(error)) {\n resolve(undefined)\n return\n }\n\n if (error) {\n reject(\n error instanceof Error ? error : new Error(\"Unknown registry error\"),\n )\n return\n }\n\n resolve(item?.value)\n })\n })\n}\n\nconst writeRegistryString = async ({\n registry,\n regSz,\n name,\n value,\n}: {\n registry: WinregRegistry\n regSz: string\n name: string\n value: string\n}): Promise<void> => {\n return new Promise((resolve, reject) => {\n registry.set(name, regSz, value, (error) => {\n if (error) {\n reject(\n error instanceof Error ? error : new Error(\"Unknown registry error\"),\n )\n return\n }\n\n resolve()\n })\n })\n}\n\nexport const getStoredVSCodeDeviceId = async (): Promise<\n string | undefined\n> => {\n switch (process.platform) {\n case \"win32\": {\n const { registry } = await createWindowsRegistry()\n\n return readRegistryString(registry, WINDOWS_DEVICE_ID_NAME)\n }\n case \"darwin\":\n case \"linux\": {\n return readStoredDeviceIdFile(getDeviceIdFilePath())\n }\n default: {\n throw new Error(\"Unsupported platform\")\n }\n }\n}\n\nconst setStoredVSCodeDeviceId = async (deviceId: string): Promise<void> => {\n switch (process.platform) {\n case \"win32\": {\n const { registry, regSz } = await createWindowsRegistry()\n\n await writeRegistryString({\n registry,\n regSz,\n name: WINDOWS_DEVICE_ID_NAME,\n value: deviceId,\n })\n return\n }\n case \"darwin\":\n case \"linux\": {\n await writeStoredDeviceIdFile(getDeviceIdFilePath(), deviceId)\n return\n }\n default: {\n throw new Error(\"Unsupported platform\")\n }\n }\n}\n\nconst createVSCodeDeviceId = (): string => randomUUID().toLowerCase()\n\nexport async function getVSCodeDeviceId(): Promise<string> {\n let deviceId: string | undefined\n\n try {\n deviceId = await getStoredVSCodeDeviceId()\n } catch (error) {\n consola.debug(\"Failed to read VSCode device id\", error)\n }\n\n if (deviceId) {\n return deviceId\n }\n\n const newDeviceId = createVSCodeDeviceId()\n\n try {\n await setStoredVSCodeDeviceId(newDeviceId)\n } catch (error) {\n consola.warn(\n \"Failed to persist VSCode device id, using ephemeral id\",\n error,\n )\n }\n\n return newDeviceId\n}\n","const FALLBACK = \"1.139.1\"\n\nexport async function getVSCodeVersion() {\n await Promise.resolve()\n return FALLBACK\n}\n","import consola from \"consola\"\nimport { createHash, randomUUID } from \"node:crypto\"\nimport { networkInterfaces } from \"node:os\"\n\nimport { getVSCodeDeviceId } from \"~/lib/deviceid\"\nimport { state } from \"~/lib/state\"\nimport { getVSCodeVersion } from \"~/services/get-vscode-version\"\n\nexport const cacheVSCodeVersion = async () => {\n const response = await getVSCodeVersion()\n state.vsCodeVersion = response\n\n consola.info(`Using VSCode version: ${response}`)\n}\n\nconst invalidMacAddresses = new Set([\n \"00:00:00:00:00:00\",\n \"ff:ff:ff:ff:ff:ff\",\n \"ac:de:48:00:11:22\",\n])\n\nfunction validateMacAddress(candidate: string): boolean {\n const tempCandidate = candidate.replaceAll(\"-\", \":\").toLowerCase()\n return !invalidMacAddresses.has(tempCandidate)\n}\n\nexport function getMac(): string | null {\n const ifaces = networkInterfaces()\n // eslint-disable-next-line guard-for-in\n for (const name in ifaces) {\n const networkInterface = ifaces[name]\n if (networkInterface) {\n for (const { mac } of networkInterface) {\n if (validateMacAddress(mac)) {\n return mac\n }\n }\n }\n }\n return null\n}\n\nexport const cacheMacMachineId = () => {\n const macAddress = getMac() ?? randomUUID()\n state.macMachineId = createHash(\"sha256\")\n .update(macAddress, \"utf8\")\n .digest(\"hex\")\n consola.debug(`Using machine ID: ${state.macMachineId}`)\n}\n\nexport const cacheVsCodeDeviceId = async () => {\n state.vsCodeDeviceId = await getVSCodeDeviceId()\n consola.debug(`Using VSCode device ID: ${state.vsCodeDeviceId}`)\n}\n\nconst SESSION_REFRESH_BASE_MS = 60 * 60 * 1000\nconst SESSION_REFRESH_JITTER_MS = 20 * 60 * 1000\nlet vsCodeSessionRefreshTimer: ReturnType<typeof setTimeout> | null = null\n\nconst generateSessionId = () => {\n state.vsCodeSessionId = randomUUID() + Date.now().toString()\n consola.debug(`Generated VSCode session ID: ${state.vsCodeSessionId}`)\n}\n\nexport const stopVsCodeSessionRefreshLoop = () => {\n if (vsCodeSessionRefreshTimer) {\n clearTimeout(vsCodeSessionRefreshTimer)\n vsCodeSessionRefreshTimer = null\n }\n}\n\nconst scheduleSessionIdRefresh = () => {\n const randomDelay = Math.floor(Math.random() * SESSION_REFRESH_JITTER_MS)\n const delay = SESSION_REFRESH_BASE_MS + randomDelay\n consola.debug(\n `Scheduling next VSCode session ID refresh in ${Math.round(\n delay / 1000,\n )} seconds`,\n )\n\n stopVsCodeSessionRefreshLoop()\n vsCodeSessionRefreshTimer = setTimeout(() => {\n try {\n generateSessionId()\n } catch (error) {\n consola.error(\"Failed to refresh session ID, rescheduling...\", error)\n } finally {\n scheduleSessionIdRefresh()\n }\n }, delay)\n}\n\nexport const cacheVsCodeSessionId = () => {\n stopVsCodeSessionRefreshLoop()\n generateSessionId()\n scheduleSessionIdRefresh()\n}\n","import { state } from \"~/lib/state\"\nimport { logUser, setupCopilotToken } from \"~/lib/token\"\nimport { cacheModels } from \"~/services/copilot/models-cache\"\nimport {\n cacheMacMachineId,\n cacheVSCodeVersion,\n cacheVsCodeSessionId,\n cacheVsCodeDeviceId,\n} from \"~/services/vscode-env\"\n\nexport async function setupCopilotRuntime(githubToken: string): Promise<void> {\n state.githubToken = githubToken\n await logUser()\n await cacheVSCodeVersion()\n cacheMacMachineId()\n cacheVsCodeSessionId()\n await cacheVsCodeDeviceId()\n await setupCopilotToken()\n await cacheModels()\n}\n"],"mappings":"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"}
package/dist/main.js CHANGED
@@ -27,10 +27,10 @@ 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-C5B75e7U.js");
30
+ const { auth } = await import("./auth-B4LfP6nc.js");
31
31
  const { debug } = await import("./debug-CcfAczV9.js");
32
32
  const { mcp } = await import("./mcp-Byz9h_xz.js");
33
- const { start } = await import("./start-DPRCrNJa.js");
33
+ const { start } = await import("./start-DX3Q5lol.js");
34
34
  const { provider } = await import("./provider-DktH3jcC.js");
35
35
  await runMain(defineCommand({
36
36
  meta: {
@@ -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-CARrUljo.js";
1
+ import { a as getAnthropicApiKey, c as getConfig, 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, v as reloadConfig, x as PATHS } from "./config-store-CARrUljo.js";
2
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
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";
4
+ import { $ as state, A as compactAutoContinuePromptStarts, B as CODEX_API_BASE_URL, C as copilotHeaders, D as prepareInteractionHeaders, E as prepareForCompact, F as createAuthMiddleware, G as resolveTraceId$1, H as forwardCodexResponses, I as getConfiguredAdminApiKeys, J as createResponsesSafeStream, K as fetchUpstreamWithLifecycle, N as compactSystemPromptStarts, O as prepareMessageProxyHeaders, P as compactTextOnlyGuard, Q as createWebSocketUrl, S as copilotBaseUrl, T as copilotWebSocketHeaders, U as generateTraceId, V as buildCodexRequestHeaders, W as requestContext, X as getResponsesStreamTerminalDisposition, Y as encodePoolKeyPart, Z as createPooledWebSocketStream, _ as parseUserIdMetadata, b as readGitHubToken, d as generateRequestIdFromPayload, f as getRootSessionId, g as isResponsesStream, h as isNullish, j as compactMessageSections, m as isAsyncIterable, n as invalidateCodexRuntime, p as getUUID, q as createResponsesHttpEventStream, s as setupCodexToken, tt as stripInternalRequestHeaders, u as stopCopilotRefreshLoop, v as getCopilotUsage, x as readGitHubTokenFromEnv } from "./token-0pmwyQAu.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
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";
7
+ import { a as normalizeSdkModelId, n as stopModelsRefreshLoop, o as toClientModelId, r as findEndpointModel, t as setupCopilotRuntime } from "./copilot-runtime-B4x9RzsD.js";
8
8
  import consola from "consola";
9
9
  import { createHash } from "node:crypto";
10
10
  import fs, { createWriteStream, readFileSync, rmSync } from "node:fs";
@@ -3305,9 +3305,66 @@ completionRoutes.post("/", async (c) => {
3305
3305
  }
3306
3306
  });
3307
3307
  //#endregion
3308
+ //#region src/lib/config-reload.ts
3309
+ let pendingReload = Promise.resolve();
3310
+ async function applyConfigReload() {
3311
+ const previousConfig = getConfig();
3312
+ const wasCopilotEnabled = isGitHubCopilotEnabled(previousConfig);
3313
+ const config = reloadConfig();
3314
+ invalidateCodexRuntime();
3315
+ if (!isGitHubCopilotEnabled(config)) {
3316
+ consola.debug("Config reload: Copilot is disabled; stopping its refresh loop");
3317
+ stopCopilotRefreshLoop();
3318
+ stopModelsRefreshLoop();
3319
+ return;
3320
+ }
3321
+ const envToken = readGitHubTokenFromEnv();
3322
+ const githubToken = state.githubTokenSource === "cli" ? state.githubToken : envToken ?? await readGitHubToken();
3323
+ if (!githubToken) {
3324
+ consola.debug("Config reload: no GitHub token is available; clearing Copilot credentials");
3325
+ stopCopilotRefreshLoop();
3326
+ stopModelsRefreshLoop();
3327
+ state.githubToken = void 0;
3328
+ state.copilotToken = void 0;
3329
+ state.models = void 0;
3330
+ state.userName = void 0;
3331
+ state.copilotApiUrl = void 0;
3332
+ state.tokenBasedBilling = void 0;
3333
+ return;
3334
+ }
3335
+ if (wasCopilotEnabled && githubToken === state.githubToken && state.copilotToken && state.models) {
3336
+ consola.debug("Config reload: GitHub token unchanged and Copilot runtime ready; keeping current credentials");
3337
+ return;
3338
+ }
3339
+ stopCopilotRefreshLoop();
3340
+ stopModelsRefreshLoop();
3341
+ state.copilotToken = void 0;
3342
+ state.models = void 0;
3343
+ if (state.githubTokenSource !== "cli") state.githubTokenSource = envToken ? "env" : "file";
3344
+ consola.debug(`Config reload: initializing Copilot runtime with the ${state.githubTokenSource} GitHub token`);
3345
+ await setupCopilotRuntime(githubToken);
3346
+ consola.debug("Config reload: Copilot runtime initialized");
3347
+ }
3348
+ function reloadServerConfig() {
3349
+ const reload = pendingReload.then(applyConfigReload);
3350
+ pendingReload = reload.catch(() => {});
3351
+ return reload;
3352
+ }
3353
+ //#endregion
3308
3354
  //#region src/routes/admin/config/route.ts
3309
3355
  const configRoutes = new Hono();
3310
3356
  const modelMappingsRequestSchema = z.object({ modelMappings: z.record(z.string(), z.string()) });
3357
+ configRoutes.post("/reload", async (c) => {
3358
+ try {
3359
+ await reloadServerConfig();
3360
+ return c.json({
3361
+ configPath: PATHS.CONFIG_PATH,
3362
+ reloaded: true
3363
+ });
3364
+ } catch (error) {
3365
+ return await forwardError(c, error);
3366
+ }
3367
+ });
3311
3368
  configRoutes.get("/model-mappings", (c) => {
3312
3369
  return c.json({
3313
3370
  configPath: PATHS.CONFIG_PATH,
@@ -6495,6 +6552,19 @@ const MESSAGES_TOOL_CALL_TIPS = [
6495
6552
  "- For long-running commands, keep the returned `session_id` and poll it with `tools.write_stdin` until the command finishes; do not redirect output to a temp file and read it back in a second call.",
6496
6553
  "- If `functions__exec` returns `aborted`, retry at most 3 times. After 3 failures, terminate immediately and inform the user that `functions__exec` is unavailable."
6497
6554
  ].join("\n");
6555
+ const JSON_OUTPUT_CONSTRAINT = "Do not wrap the JSON in markdown code fences and do not add any text outside the JSON object.";
6556
+ const buildOutputFormatInstruction = (format) => {
6557
+ if (!format) return null;
6558
+ if (format.type === "json_schema") return [
6559
+ `Respond with a single JSON object that strictly matches the "${format.name}" JSON schema below.`,
6560
+ JSON_OUTPUT_CONSTRAINT,
6561
+ "",
6562
+ "JSON schema:",
6563
+ JSON.stringify(format.schema, null, 2)
6564
+ ].join("\n");
6565
+ if (format.type === "json_object") return ["Respond with a single JSON object.", JSON_OUTPUT_CONSTRAINT].join("\n");
6566
+ return null;
6567
+ };
6498
6568
  const COMPACTION_REPLAY_PROMPT = "The previous conversation was compacted. Continue from this handoff summary:\n\n";
6499
6569
  const MAX_DEVELOPER_PROMPTS = 5;
6500
6570
  const TOOL_NAME_PATTERN = /^[A-Za-z0-9_-]{1,64}$/u;
@@ -6515,12 +6585,17 @@ var ResponsesMessagesTranslationError = class extends Error {
6515
6585
  function translateResponsesToMessages(payload, options) {
6516
6586
  const registry = createToolRegistry(payload);
6517
6587
  const normalized = normalizeResponsesInput(payload.input);
6588
+ const outputFormatInstruction = buildOutputFormatInstruction(payload.text?.format);
6518
6589
  const { messages, system } = translateInputToAnthropic(normalized.input, registry, payload.instructions, payload.input, options.toolCallTips ?? false);
6519
6590
  if (normalized.compaction) messages.push({
6520
6591
  role: "user",
6521
6592
  content: MESSAGES_COMPACTION_PROMPT
6522
6593
  });
6523
6594
  if (messages.length === 0) throw new ResponsesMessagesTranslationError("Responses input must contain at least one translatable message");
6595
+ if (outputFormatInstruction) messages.push({
6596
+ role: "user",
6597
+ content: outputFormatInstruction
6598
+ });
6524
6599
  applyEphemeralCacheControl(messages, system);
6525
6600
  const reasoningEffort = translateReasoningEffort(payload.reasoning?.effort);
6526
6601
  const metadataUserId = resolveMetadataUserId(payload);
@@ -12798,4 +12873,4 @@ createServer();
12798
12873
  //#endregion
12799
12874
  export { createServer };
12800
12875
 
12801
- //# sourceMappingURL=server-sTarDtg3.js.map
12876
+ //# sourceMappingURL=server-VjfrS2Aw.js.map