@jeffreycao/copilot-api 1.10.22 → 1.10.23

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/main.js CHANGED
@@ -43,7 +43,7 @@ const { auth } = await import("./auth-Qy0uU2yI.js");
43
43
  const { checkUsage } = await import("./check-usage-DDfnCA0c.js");
44
44
  const { debug } = await import("./debug-Cc-hdADF.js");
45
45
  const { mcp } = await import("./mcp-DZgcvqQY.js");
46
- const { start } = await import("./start-C2btrZWS.js");
46
+ const { start } = await import("./start-B9cpzVBW.js");
47
47
  await runMain(defineCommand({
48
48
  meta: {
49
49
  name: "copilot-api",
@@ -5169,13 +5169,17 @@ const handleResponses = async (c) => {
5169
5169
  }
5170
5170
  debugJson(logger$1, "Responses request payload:", payload);
5171
5171
  await responsesHandlerDependencies.checkRateLimit(state);
5172
- const requestId = generateRequestIdFromPayload({ messages: payload.input });
5172
+ const subagentMarker = getCodexResponsesSubagentMarker(c);
5173
+ if (subagentMarker) debugJson(logger$1, "Detected Codex subagent headers:", subagentMarker);
5174
+ const incomingSessionId = subagentMarker ? getIncomingResponsesSessionId(c) : void 0;
5175
+ const sessionId = incomingSessionId ? getUUID(incomingSessionId) : void 0;
5176
+ const requestId = generateRequestIdFromPayload({ messages: payload.input }, sessionId);
5173
5177
  logger$1.debug("Generated request ID:", requestId);
5174
- const sessionId = getUUID(requestId);
5175
- logger$1.debug("Extracted session ID:", sessionId);
5178
+ const fallbackSessionId = sessionId ?? getUUID(requestId);
5179
+ logger$1.debug("Extracted session ID:", fallbackSessionId);
5176
5180
  const recordUsage = createCopilotTokenUsageRecorder({
5177
5181
  endpoint: "responses",
5178
- fallbackSessionId: sessionId,
5182
+ fallbackSessionId,
5179
5183
  model: payload.model
5180
5184
  });
5181
5185
  removeUnsupportedTools(payload);
@@ -5191,13 +5195,15 @@ const handleResponses = async (c) => {
5191
5195
  if (sanitizedImageCount > 0) logger$1.warn(`Omitted ${sanitizedImageCount} oversized input image(s) before forwarding to Copilot Responses`);
5192
5196
  applyResponsesApiContextManagement(payload, selectedModel?.capabilities.limits.max_prompt_tokens);
5193
5197
  debugJson(logger$1, "Translated Responses payload:", payload);
5194
- const { vision, initiator } = getResponsesRequestOptions(payload);
5198
+ const { vision, initiator: inferredInitiator } = getResponsesRequestOptions(payload);
5199
+ const initiator = subagentMarker ? "agent" : inferredInitiator;
5195
5200
  if (state.manualApprove) await awaitApproval();
5196
5201
  const response = await responsesHandlerDependencies.createResponses(payload, {
5197
5202
  vision,
5198
5203
  initiator,
5204
+ subagentMarker,
5199
5205
  requestId,
5200
- sessionId,
5206
+ sessionId: fallbackSessionId,
5201
5207
  transport: responsesTransport
5202
5208
  });
5203
5209
  if (isStreamingRequested(payload) && isAsyncIterable(response)) {
@@ -5257,6 +5263,30 @@ const removeUnsupportedTools = (payload) => {
5257
5263
  });
5258
5264
  if (dropped.length > 0) logger$1.debug("Removed unsupported tools:", dropped);
5259
5265
  };
5266
+ const getIncomingResponsesSessionId = (c) => getTrimmedHeader(c, "session-id") ?? getTrimmedHeader(c, "x-session-id");
5267
+ const codexSubagentHeaderValues = new Set([
5268
+ "collab_spawn",
5269
+ "compact",
5270
+ "memory_consolidation",
5271
+ "review"
5272
+ ]);
5273
+ const getCodexResponsesSubagentMarker = (c) => {
5274
+ const agentType = getTrimmedHeader(c, "x-openai-subagent");
5275
+ if (!agentType || !codexSubagentHeaderValues.has(agentType)) return null;
5276
+ const threadId = getTrimmedHeader(c, "thread-id");
5277
+ const rootSessionId = getIncomingResponsesSessionId(c);
5278
+ const parentThreadId = getTrimmedHeader(c, "x-codex-parent-thread-id");
5279
+ if (!threadId && !rootSessionId && !parentThreadId) return null;
5280
+ const agentId = threadId ?? parentThreadId ?? rootSessionId ?? agentType;
5281
+ return {
5282
+ agent_id: agentId,
5283
+ agent_type: agentType,
5284
+ session_id: threadId ?? rootSessionId ?? agentId
5285
+ };
5286
+ };
5287
+ const getTrimmedHeader = (c, name) => {
5288
+ return c.req.header(name)?.trim() || void 0;
5289
+ };
5260
5290
  //#endregion
5261
5291
  //#region src/routes/responses/route.ts
5262
5292
  const responsesRoutes = new Hono();
@@ -5369,4 +5399,4 @@ server.route("/:provider/v1/models", providerModelRoutes);
5369
5399
  //#endregion
5370
5400
  export { server };
5371
5401
 
5372
- //# sourceMappingURL=server-D8xBCYdO.js.map
5402
+ //# sourceMappingURL=server-G5PWGqkb.js.map