@jeffreycao/copilot-api 2.6.1 → 2.6.3

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.
@@ -1,7 +1,7 @@
1
- import { A as isResponsesApiWebSocketEnabled, C as getClaudeTokenMultiplier, D as isAlphaSearchCodexPriorityEnabled, E as getUpstreamTransportConfig, O as isMessagesApiEnabled, P as PATHS, S as getClaudeAutoModel, T as getMessageApiWebSearchModel, _ as resolveMappedModel, b as getAlphaSearchModel, d as getModelResponsesApiCompactThreshold$1, f as getReasoningEffortForModel, g as isGpt56OrAbove, h as isContextManagementEnabledForResponses, i as listEnabledProviders, k as isResponsesApiWebSearchEnabled, l as getExtraPromptForModel, m as isContextManagementEnabledForMessages, n as getRawProviderConfig, o as resolveEffectiveProviderType, p as getSmallModel, s as resolveProviderAuthType, t as getProviderConfig, u as getModelMappings, v as setModelMappings, x as getAnthropicApiKey } from "./config-DTZzVvur.js";
2
- import { $ as forwardError, B as forwardCodexResponses, C as copilotWebSocketHeaders, E as prepareMessageProxyHeaders, G as createResponsesHttpEventStream, H as requestContext, J as isTerminalResponsesStreamChunk, 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-CGvXQOSn.js";
1
+ import { A as isResponsesApiWebSocketEnabled, C as getClaudeTokenMultiplier, D as isAlphaSearchCodexPriorityEnabled, E as getUpstreamTransportConfig, O as isMessagesApiEnabled, P as PATHS, S as getClaudeAutoModel, T as getMessageApiWebSearchModel, _ as resolveMappedModel, b as getAlphaSearchModel, d as getModelResponsesApiCompactThreshold$1, f as getReasoningEffortForModel, g as isGpt56OrAbove, h as isContextManagementEnabledForResponses, i as listEnabledProviders, k as isResponsesApiWebSearchEnabled, l as getExtraPromptForModel, m as isContextManagementEnabledForMessages, n as getRawProviderConfig, o as resolveEffectiveProviderType, p as getSmallModel, s as resolveProviderAuthType, t as getProviderConfig, u as getModelMappings, v as setModelMappings, x as getAnthropicApiKey } from "./config-q6afpNQS.js";
2
+ import { $ as forwardError, B as forwardCodexResponses, C as copilotWebSocketHeaders, E as prepareMessageProxyHeaders, G as createResponsesHttpEventStream, H as requestContext, J as isTerminalResponsesStreamChunk, 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-BKdtOxtd.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-DAMOou_f.js";
4
+ import { i as toClientModelId, r as normalizeSdkModelId, t as findEndpointModel } from "./models-BYxswH_g.js";
5
5
  import consola from "consola";
6
6
  import { createHash } from "node:crypto";
7
7
  import fs, { createWriteStream, readFileSync, rmSync } from "node:fs";
@@ -2019,6 +2019,7 @@ function normalizeResponsesUsage(usage) {
2019
2019
  return {
2020
2020
  ...cacheWriteTokens > 0 && { cache_creation_input_tokens: cacheWriteTokens },
2021
2021
  cache_read_input_tokens: cachedTokens,
2022
+ cost: normalizeOptionalCost(usage?.cost),
2022
2023
  input_tokens: Math.max(0, inputTokens - cachedTokens - cacheWriteTokens),
2023
2024
  output_tokens: normalizeToken(usage?.output_tokens),
2024
2025
  total_tokens: normalizeOptionalToken(usage?.total_tokens)
@@ -2523,14 +2524,17 @@ const applyOpencodeSessionHeader = (providerConfig, headers, session) => {
2523
2524
  headers[OPENCODE_SESSION_HEADER] = session;
2524
2525
  };
2525
2526
  function createProviderProxyResponse(upstreamResponse, body) {
2526
- const headers = new Headers(upstreamResponse.headers);
2527
- for (const headerName of STRIPPED_RESPONSE_HEADERS) headers.delete(headerName);
2528
2527
  return new Response(body ?? upstreamResponse.body, {
2529
- headers,
2528
+ headers: createProviderProxyResponseHeaders(upstreamResponse.headers),
2530
2529
  status: upstreamResponse.status,
2531
2530
  statusText: upstreamResponse.statusText
2532
2531
  });
2533
2532
  }
2533
+ function createProviderProxyResponseHeaders(upstreamHeaders) {
2534
+ const headers = new Headers(upstreamHeaders);
2535
+ for (const headerName of STRIPPED_RESPONSE_HEADERS) headers.delete(headerName);
2536
+ return headers;
2537
+ }
2534
2538
  async function forwardProviderMessages(providerConfig, payload, requestHeaders, options = {}) {
2535
2539
  consola.log(`<-- model: ${payload.model}`);
2536
2540
  const headers = buildProviderUpstreamHeaders(providerConfig, requestHeaders);
@@ -3380,6 +3384,13 @@ const resolveSupportedReasoningEffort = (requestedEffort, supportedEfforts) => {
3380
3384
  };
3381
3385
  //#endregion
3382
3386
  //#region src/routes/provider/utils.ts
3387
+ const forwardProviderResponseHeaders = (c, upstreamHeaders) => {
3388
+ const headers = createProviderProxyResponseHeaders(upstreamHeaders);
3389
+ const setCookies = headers.getSetCookie();
3390
+ headers.delete("set-cookie");
3391
+ for (const [headerName, headerValue] of headers) c.header(headerName, headerValue);
3392
+ for (const setCookie of setCookies) c.header("set-cookie", setCookie, { append: true });
3393
+ };
3383
3394
  const applyModelDefaults = (payload, modelConfig) => {
3384
3395
  payload.temperature ??= modelConfig?.temperature;
3385
3396
  payload.top_p ??= modelConfig?.topP;
@@ -11011,7 +11022,7 @@ function createProviderCodexCandidate(providerConfig, modelId, remoteModel, mode
11011
11022
  const builtinReasoningEfforts = normalizeReasoningEfforts(builtinModelConfig?.reasoningEfforts);
11012
11023
  const reasoningEfforts = configuredReasoningEfforts.length > 0 ? configuredReasoningEfforts : remoteReasoningEfforts.length > 0 ? remoteReasoningEfforts : builtinReasoningEfforts;
11013
11024
  const configuredModalities = normalizeInputModalities(modelConfig?.inputModalities);
11014
- const remoteModalities = normalizeInputModalities(remoteModel?.input_modalities ?? remoteModel?.modalities);
11025
+ const remoteModalities = normalizeInputModalities(remoteModel?.input_modalities ?? remoteModel?.modalities ?? getRecordField(remoteModel, "architecture")?.input_modalities);
11015
11026
  const builtinModalities = normalizeInputModalities(builtinModelConfig?.inputModalities);
11016
11027
  const displayName = getStringField(remoteModel ?? {}, "display_name") ?? getStringField(remoteModel ?? {}, "name") ?? modelId;
11017
11028
  const adapterName = describeProviderAdapter(effectiveType);
@@ -11067,6 +11078,10 @@ function selectDefaultReasoningEffort(efforts, configured) {
11067
11078
  function positiveNumber(value, fallback) {
11068
11079
  return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;
11069
11080
  }
11081
+ function getRecordField(model, field) {
11082
+ const value = model?.[field];
11083
+ return isRecord(value) ? value : void 0;
11084
+ }
11070
11085
  function getFirstPositiveNumber(model, fields) {
11071
11086
  if (!model) return void 0;
11072
11087
  for (const field of fields) {
@@ -12186,7 +12201,10 @@ async function handleProviderResponsesForProvider(c, options) {
12186
12201
  });
12187
12202
  const modelConfig = providerConfig.models?.[payload.model];
12188
12203
  if (providerConfig.name === "codex") {
12189
- const upstreamResponse = await forwardCodexResponses(payload, c.req.raw.headers, providerConfig.baseUrl, { clientSignal: c.req.raw.signal });
12204
+ const upstreamResponse = await forwardCodexResponses(payload, c.req.raw.headers, providerConfig.baseUrl, {
12205
+ clientSignal: c.req.raw.signal,
12206
+ onResponseHeaders: (headers) => forwardProviderResponseHeaders(c, headers)
12207
+ });
12190
12208
  const recordUsage = createProviderResponsesUsageRecorder(payload, provider, modelConfig, providerConfig.pricingCurrency);
12191
12209
  if (payload.stream && isResponsesStream(upstreamResponse)) return streamProviderResponses(c, upstreamResponse, {
12192
12210
  normalizeCodex: true,
@@ -12686,4 +12704,4 @@ createServer();
12686
12704
  //#endregion
12687
12705
  export { createServer };
12688
12706
 
12689
- //# sourceMappingURL=server-BfbNbfYw.js.map
12707
+ //# sourceMappingURL=server-BKdgtu7Z.js.map