@jeffreycao/copilot-api 2.6.12 → 2.6.13
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/README.md +5 -2
- package/README.zh-CN.md +5 -2
- package/dist/auth-B0w9MzMB.js +2 -0
- package/dist/{auth-BmwqHw2M.js → auth-B1iccyyN.js} +3 -3
- package/dist/{auth-BmwqHw2M.js.map → auth-B1iccyyN.js.map} +1 -1
- package/dist/{config-DrIQvPh1.js → config-B_pC8QXv.js} +13 -4
- package/dist/config-B_pC8QXv.js.map +1 -0
- package/dist/{debug-CsnBCL0y.js → debug-C4rsL806.js} +2 -2
- package/dist/{debug-CsnBCL0y.js.map → debug-C4rsL806.js.map} +1 -1
- package/dist/main.js +3 -3
- package/dist/{models-DBLluNx2.js → models-NNzBeGzA.js} +2 -2
- package/dist/{models-DBLluNx2.js.map → models-NNzBeGzA.js.map} +1 -1
- package/dist/{server-DDx3vRfk.js → server-w3-DhBM0.js} +33 -9
- package/dist/server-w3-DhBM0.js.map +1 -0
- package/dist/{start-lV093nRP.js → start-B2vhz_qK.js} +6 -6
- package/dist/{start-lV093nRP.js.map → start-B2vhz_qK.js.map} +1 -1
- package/dist/{token-BffZVEF7.js → token-3SWNt25T.js} +2 -2
- package/dist/{token-BffZVEF7.js.map → token-3SWNt25T.js.map} +1 -1
- package/package.json +1 -1
- package/dist/auth--lP6X6CT.js +0 -2
- package/dist/config-DrIQvPh1.js.map +0 -1
- package/dist/server-DDx3vRfk.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-
|
|
1
|
+
{"version":3,"file":"models-NNzBeGzA.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,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { $ as forwardError, 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, Q as HTTPError, 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 { B as PATHS, C as resolveMappedModel, D as getAnthropicApiKey, E as getAlphaSearchModel, F as isResponsesApiWebSearchEnabled, I as isResponsesApiWebSocketEnabled, M as getUpstreamTransportConfig, N as isAlphaSearchCodexPriorityEnabled, O as getClaudeAutoModel, P as isMessagesApiEnabled, S as isGpt56OrAbove, _ as getReasoningEffortForModel, b as isContextManagementEnabledForMessages, d as getOpencodeGoModelRecords, g as getModelResponsesApiCompactThreshold$1, h as getModelMappings, i as listEnabledProviders, j as getMessageApiWebSearchModel, k as getClaudeTokenMultiplier, 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-B_pC8QXv.js";
|
|
2
|
+
import { $ as forwardError, 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, Q as HTTPError, 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-3SWNt25T.js";
|
|
3
3
|
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";
|
|
4
|
-
import { i as toClientModelId, r as normalizeSdkModelId, t as findEndpointModel } from "./models-
|
|
4
|
+
import { i as toClientModelId, r as normalizeSdkModelId, t as findEndpointModel } from "./models-NNzBeGzA.js";
|
|
5
5
|
import consola from "consola";
|
|
6
6
|
import { createHash } from "node:crypto";
|
|
7
7
|
import fs, { createWriteStream, readFileSync, rmSync } from "node:fs";
|
|
@@ -3052,10 +3052,9 @@ const resolveSupportedReasoningEffort = (requestedEffort, supportedEfforts) => {
|
|
|
3052
3052
|
//#region src/routes/provider/utils.ts
|
|
3053
3053
|
const forwardProviderResponseHeaders = (c, upstreamHeaders) => {
|
|
3054
3054
|
const headers = createProviderProxyResponseHeaders(upstreamHeaders);
|
|
3055
|
-
const setCookies = headers.getSetCookie();
|
|
3056
3055
|
headers.delete("set-cookie");
|
|
3056
|
+
headers.delete("x-models-etag");
|
|
3057
3057
|
for (const [headerName, headerValue] of headers) c.header(headerName, headerValue);
|
|
3058
|
-
for (const setCookie of setCookies) c.header("set-cookie", setCookie, { append: true });
|
|
3059
3058
|
};
|
|
3060
3059
|
const applyModelDefaults = (payload, modelConfig) => {
|
|
3061
3060
|
payload.temperature ??= modelConfig?.temperature;
|
|
@@ -5362,6 +5361,7 @@ const translateAnthropicMessagesToResponsesPayload = (payload, subagentAgentId)
|
|
|
5362
5361
|
};
|
|
5363
5362
|
if (translatedTools && translatedTools.length > 0) responsesPayload.tool_choice = toolChoice;
|
|
5364
5363
|
if (hasOriginalTools) responsesPayload.prompt_cache_key = promptCacheKey;
|
|
5364
|
+
if (responsesPayload.model.includes("grok")) delete responsesPayload.metadata;
|
|
5365
5365
|
return responsesPayload;
|
|
5366
5366
|
};
|
|
5367
5367
|
const encodeCompactionCarrierSignature = (compaction) => {
|
|
@@ -8917,7 +8917,11 @@ async function handleCompletionPayload(c, anthropicPayload, dispatchOptions = {}
|
|
|
8917
8917
|
if (!state.tokenBasedBilling && !shouldUseClaudeAutoModel) {
|
|
8918
8918
|
const tools = anthropicPayload.tools;
|
|
8919
8919
|
const noTools = !tools || tools.length === 0;
|
|
8920
|
-
if (anthropicBeta && noTools && compactType === 0)
|
|
8920
|
+
if (anthropicBeta && noTools && compactType === 0) {
|
|
8921
|
+
const smallModel = getSmallModel();
|
|
8922
|
+
consola.debug(`Claude Code warmup small model: ${anthropicPayload.model} -> ${smallModel}`);
|
|
8923
|
+
anthropicPayload.model = smallModel;
|
|
8924
|
+
}
|
|
8921
8925
|
}
|
|
8922
8926
|
if (compactType) logger$9.debug("Compact request type:", compactType);
|
|
8923
8927
|
if (!state.tokenBasedBilling) {
|
|
@@ -11946,11 +11950,28 @@ function isAnthropicResponse(value) {
|
|
|
11946
11950
|
return typeof value === "object" && value !== null && "type" in value && value.type === "message" && "content" in value && Array.isArray(value.content);
|
|
11947
11951
|
}
|
|
11948
11952
|
//#endregion
|
|
11953
|
+
//#region src/routes/responses/task-title.ts
|
|
11954
|
+
const TASK_TITLE_PROMPT_PREFIX = "Generate a concise, single-line task title of at most 36 characters and under five words where possible.";
|
|
11955
|
+
const taskTitleDependencies = { getSmallModelForProvider };
|
|
11956
|
+
const getCodexTaskTitleModel = (userAgent, input, provider) => {
|
|
11957
|
+
if (!isCodexUserAgent(userAgent) || !Array.isArray(input)) return void 0;
|
|
11958
|
+
if (!input.slice(-2).some((item) => {
|
|
11959
|
+
const message = item;
|
|
11960
|
+
return message?.role === "user" && Array.isArray(message.content) && message.content.some((part) => part?.type === "input_text" && typeof part.text === "string" && part.text.startsWith(TASK_TITLE_PROMPT_PREFIX));
|
|
11961
|
+
})) return void 0;
|
|
11962
|
+
const model = taskTitleDependencies.getSmallModelForProvider(provider);
|
|
11963
|
+
if (model) consola.debug(`Codex task title small model: ${provider} -> ${model}`);
|
|
11964
|
+
return model;
|
|
11965
|
+
};
|
|
11966
|
+
//#endregion
|
|
11949
11967
|
//#region src/routes/provider/responses/handler.ts
|
|
11950
11968
|
const logger$2 = createHandlerLogger("provider-responses-handler");
|
|
11951
11969
|
const providerResponsesHandlerDependencies = { resolveProviderConfig };
|
|
11952
11970
|
async function handleProviderResponsesForProvider(c, options) {
|
|
11953
11971
|
const { payload, provider } = options;
|
|
11972
|
+
const taskTitleModel = getCodexTaskTitleModel(c.req.header("user-agent"), payload.input, provider);
|
|
11973
|
+
if (taskTitleModel) payload.model = taskTitleModel;
|
|
11974
|
+
const publicModel = taskTitleModel ?? options.publicModel ?? payload.model;
|
|
11954
11975
|
debugJson(logger$2, "Responses request payload:", {
|
|
11955
11976
|
payload,
|
|
11956
11977
|
provider
|
|
@@ -11968,7 +11989,7 @@ async function handleProviderResponsesForProvider(c, options) {
|
|
|
11968
11989
|
filterReasoningForTransport(payload, true);
|
|
11969
11990
|
return await handleResponsesViaMessages(c, {
|
|
11970
11991
|
payload,
|
|
11971
|
-
publicModel
|
|
11992
|
+
publicModel,
|
|
11972
11993
|
targetModel: `${provider}/${payload.model}`
|
|
11973
11994
|
});
|
|
11974
11995
|
}
|
|
@@ -12180,6 +12201,9 @@ const handleResponses = async (c) => {
|
|
|
12180
12201
|
publicModel: requestedModel
|
|
12181
12202
|
});
|
|
12182
12203
|
}
|
|
12204
|
+
const taskTitleModel = getCodexTaskTitleModel(c.req.header("user-agent"), payload.input, "copilot");
|
|
12205
|
+
if (taskTitleModel) payload.model = taskTitleModel;
|
|
12206
|
+
const publicModel = taskTitleModel ?? requestedModel;
|
|
12183
12207
|
debugJson(logger$1, "Responses request payload:", payload);
|
|
12184
12208
|
const subagentMarker = getCodexResponsesSubagentMarker(c);
|
|
12185
12209
|
if (subagentMarker) debugJson(logger$1, "Detected Codex subagent headers:", subagentMarker);
|
|
@@ -12198,7 +12222,7 @@ const handleResponses = async (c) => {
|
|
|
12198
12222
|
filterReasoningForTransport(payload, true);
|
|
12199
12223
|
return await handleResponsesViaMessages(c, {
|
|
12200
12224
|
payload,
|
|
12201
|
-
publicModel
|
|
12225
|
+
publicModel,
|
|
12202
12226
|
targetModel: payload.model,
|
|
12203
12227
|
subagentMarker,
|
|
12204
12228
|
requestId,
|
|
@@ -12491,4 +12515,4 @@ createServer();
|
|
|
12491
12515
|
//#endregion
|
|
12492
12516
|
export { createServer };
|
|
12493
12517
|
|
|
12494
|
-
//# sourceMappingURL=server-
|
|
12518
|
+
//# sourceMappingURL=server-w3-DhBM0.js.map
|