{
  "version": 3,
  "sources": ["../src/codex-compact.ts", "../src/checkpoint.ts", "../src/protocol.ts", "../src/remote-compact.ts", "../src/remote-types.ts", "../src/remote-shared.ts", "../src/remote-v2.ts", "../src/remote.ts", "../src/settings.ts"],
  "sourcesContent": ["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Api, Context, Model, Tool } from \"@earendil-works/pi-ai\";\nimport {\n  buildContextEntries,\n  buildSessionContext,\n  convertToLlm,\n  type ExtensionAPI,\n  type ExtensionContext,\n  type SessionBeforeCompactEvent,\n  sessionEntryToContextMessages,\n} from \"@earendil-works/pi-coding-agent\";\nimport {\n  buildReplacementHistory,\n  type CodexCheckpointDetails,\n  checkpointMarker,\n  createCheckpointDetails,\n  fallbackSummary,\n  latestCheckpoint,\n  projectCheckpointContext,\n} from \"./checkpoint.js\";\nimport { type CompactionRoute, resolveCompactionRoute } from \"./model-api.js\";\nimport { hasCheckpointMarker, rewriteCheckpointMarker } from \"./protocol.js\";\nimport { requestRemoteCompaction } from \"./remote.js\";\nimport {\n  type CodexCompactSettings,\n  type CodexCompactSettingsRuntime,\n  type CodexCompactSettingsState,\n  createCodexCompactSettingsRuntime,\n} from \"./settings.js\";\nimport { terminalText } from \"./terminal.js\";\n\nconst STATUS_KEY = \"codex-compact\";\n\nfunction activeCheckpoint(ctx: ExtensionContext) {\n  return latestCheckpoint(ctx.sessionManager.getBranch());\n}\n\nfunction isCheckpointCompatible(\n  details: CodexCheckpointDetails,\n  model: Model<Api> | undefined,\n  settings: CodexCompactSettings,\n): boolean {\n  const route = resolveCompactionRoute(model, settings);\n  return (\n    route.kind === \"remote\" &&\n    model !== undefined &&\n    route.api === details.api &&\n    route.profile === details.profile &&\n    model.id === details.modelId\n  );\n}\n\nfunction keptMessages(event: SessionBeforeCompactEvent): AgentMessage[] {\n  const leafId = event.branchEntries.at(-1)?.id ?? null;\n  const contextEntries = buildContextEntries(event.branchEntries, leafId);\n  const keptIndex = contextEntries.findIndex((entry) => entry.id === event.preparation.firstKeptEntryId);\n  if (keptIndex < 0) {\n    throw new Error(\"Pi compaction cut point is not present in the active context\");\n  }\n  return contextEntries.slice(keptIndex).flatMap(sessionEntryToContextMessages);\n}\n\nfunction activeTools(pi: ExtensionAPI): Tool[] {\n  const available = new Map(pi.getAllTools().map((tool) => [tool.name, tool]));\n  return pi.getActiveTools().flatMap((name) => {\n    const tool = available.get(name);\n    return tool\n      ? [\n          {\n            name: tool.name,\n            description: tool.description,\n            parameters: tool.parameters,\n          },\n        ]\n      : [];\n  });\n}\n\nfunction projectedCurrentMessages(\n  event: SessionBeforeCompactEvent,\n  model: Model<Api>,\n  route: Extract<CompactionRoute, { kind: \"remote\" }>,\n): { messages: AgentMessage[]; prior?: CodexCheckpointDetails } {\n  const leafId = event.branchEntries.at(-1)?.id ?? null;\n  const session = buildSessionContext(event.branchEntries, leafId);\n  const prior = latestCheckpoint(event.branchEntries);\n  if (!prior) return { messages: session.messages };\n  if (\n    prior.details.api !== route.api ||\n    prior.details.profile !== route.profile ||\n    prior.details.modelId !== model.id\n  ) {\n    throw new Error(\"The active opaque checkpoint belongs to a different Responses model\");\n  }\n  const projected = projectCheckpointContext(session.messages, prior.details, prior.entry.summary);\n  if (!projected) {\n    throw new Error(\"The previous opaque checkpoint could not be projected safely\");\n  }\n  return { messages: projected, prior: prior.details };\n}\n\nfunction notifyFailure(ctx: ExtensionContext, error: unknown, settings: CodexCompactSettings): void {\n  if (!ctx.hasUI || !settings.notifyOnFallback) return;\n  const message = terminalText(error instanceof Error ? error.message : String(error));\n  ctx.ui.notify(`Responses compaction failed; using Pi compaction. ${message}`, \"warning\");\n}\n\nfunction sessionStillOwned(ctx: ExtensionContext, sessionId: string, signal: AbortSignal): boolean {\n  return !signal.aborted && ctx.sessionManager.getSessionId() === sessionId;\n}\n\nasync function compactRemotely(\n  pi: ExtensionAPI,\n  event: SessionBeforeCompactEvent,\n  ctx: ExtensionContext,\n  settings: CodexCompactSettings,\n  ownerSignal: AbortSignal,\n  fetch?: typeof globalThis.fetch,\n) {\n  const model = ctx.model;\n  const route = resolveCompactionRoute(model, settings);\n  if (route.kind === \"native\" || !model) return undefined;\n  const signal = AbortSignal.any([event.signal, ownerSignal]);\n  if (signal.aborted) return { cancel: true };\n  const sessionId = ctx.sessionManager.getSessionId();\n  ctx.ui.setStatus(STATUS_KEY, route.protocol === \"remote-v2\" ? \"Responses Remote V2\u2026\" : \"Responses Compact API\u2026\");\n  try {\n    const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);\n    if (!sessionStillOwned(ctx, sessionId, signal)) return { cancel: true };\n    if (!auth.ok) throw new Error(auth.error);\n    const provider = ctx.modelRegistry.getProvider(model.provider);\n    if (!provider) throw new Error(\"The active Responses provider is unavailable\");\n    const current = projectedCurrentMessages(event, model, route);\n    const context: Context = {\n      systemPrompt: ctx.getSystemPrompt(),\n      messages: convertToLlm(current.messages),\n      tools: activeTools(pi),\n    };\n    const response = await requestRemoteCompaction({\n      provider,\n      model,\n      context,\n      protocol: route.protocol,\n      profile: route.profile,\n      apiKey: auth.apiKey,\n      headers: auth.headers,\n      env: auth.env,\n      signal,\n      priorCheckpoint: current.prior\n        ? {\n            marker: checkpointMarker(current.prior.checkpointId),\n            replacementHistory: current.prior.replacementHistory,\n          }\n        : undefined,\n      requestTimeoutMs: settings.requestTimeoutMs,\n      maxRetries: settings.maxRetries,\n      fetch,\n    });\n    if (!sessionStillOwned(ctx, sessionId, signal)) return { cancel: true };\n    const replacementHistory = buildReplacementHistory(\n      response.compactedOutput?.slice(0, -1) ?? response.promptInput,\n      response.item,\n      { tokenBudget: settings.replacementTokenBudget },\n    );\n    const details = createCheckpointDetails({\n      provider: model.provider,\n      api: route.api,\n      profile: route.profile,\n      modelId: model.id,\n      protocol: route.protocol,\n      replacementHistory,\n      keptMessages: keptMessages(event),\n    });\n    return {\n      compaction: {\n        summary: fallbackSummary(details.checkpointId),\n        firstKeptEntryId: event.preparation.firstKeptEntryId,\n        tokensBefore: event.preparation.tokensBefore,\n        usage: response.usage,\n        details,\n      },\n    };\n  } catch (error) {\n    if (signal.aborted || ctx.sessionManager.getSessionId() !== sessionId) {\n      return { cancel: true };\n    }\n    notifyFailure(ctx, error, settings);\n    return undefined;\n  } finally {\n    if (ctx.sessionManager.getSessionId() === sessionId) ctx.ui.setStatus(STATUS_KEY, undefined);\n  }\n}\n\nexport function createCodexCompactExtension(\n  options: { fetch?: typeof globalThis.fetch; settingsRuntime?: CodexCompactSettingsRuntime } = {},\n): (pi: ExtensionAPI) => void {\n  return (pi) => {\n    const providerWarnings = new Set<string>();\n    const settingsRuntime = options.settingsRuntime ?? createCodexCompactSettingsRuntime();\n    let sessionController = new AbortController();\n    let generation = 0;\n\n    pi.registerCommand(\"codex-compact\", {\n      description: \"Compact now or configure Responses compaction\",\n      handler: async (args, ctx) => {\n        if (args.trim()) throw new Error(\"Usage: /codex-compact\");\n        const ownerGeneration = generation;\n        const controller = sessionController;\n        const { showCodexCompactMenu } = await import(\"./settings-menu.js\");\n        if (ownerGeneration !== generation || controller.signal.aborted) return;\n        await showCodexCompactMenu(settingsRuntime, ctx, {\n          signal: controller.signal,\n          isCurrent: () => ownerGeneration === generation && !controller.signal.aborted,\n        });\n      },\n    });\n\n    pi.on(\"session_start\", async (_event, ctx) => {\n      sessionController.abort();\n      sessionController = new AbortController();\n      generation += 1;\n      const ownerGeneration = generation;\n      const sessionId = ctx.sessionManager.getSessionId();\n      providerWarnings.clear();\n      let state: Readonly<CodexCompactSettingsState>;\n      try {\n        state = await settingsRuntime.reload(sessionController.signal);\n      } catch (error) {\n        if (sessionController.signal.aborted || ownerGeneration !== generation) return;\n        if (ctx.hasUI) {\n          ctx.ui.notify(\n            `Could not load pi-codex-compact.json; using defaults. ${terminalText(error instanceof Error ? error.message : String(error))}`,\n            \"warning\",\n          );\n        }\n        return;\n      }\n      if (\n        sessionController.signal.aborted ||\n        ownerGeneration !== generation ||\n        ctx.sessionManager.getSessionId() !== sessionId\n      ) {\n        return;\n      }\n      if (ctx.hasUI && state.kind === \"invalid\") {\n        ctx.ui.notify(\n          `Invalid pi-codex-compact.json; using defaults without overwriting it. ${terminalText(state.issue ?? \"unknown validation error\")}`,\n          \"warning\",\n        );\n      }\n    });\n\n    pi.on(\"session_before_compact\", (event, ctx) =>\n      compactRemotely(pi, event, ctx, settingsRuntime.get().settings, sessionController.signal, options.fetch),\n    );\n\n    pi.on(\"context\", (event, ctx) => {\n      if (!settingsRuntime.get().settings.enabled) return undefined;\n      const settings = settingsRuntime.get().settings;\n      const checkpoint = activeCheckpoint(ctx);\n      if (!checkpoint || !isCheckpointCompatible(checkpoint.details, ctx.model, settings)) return undefined;\n      const messages = projectCheckpointContext(event.messages, checkpoint.details, checkpoint.entry.summary);\n      return messages ? { messages } : undefined;\n    });\n\n    pi.on(\"before_provider_request\", (event, ctx) => {\n      if (!settingsRuntime.get().settings.enabled) return undefined;\n      const settings = settingsRuntime.get().settings;\n      const checkpoint = activeCheckpoint(ctx);\n      if (!checkpoint || !isCheckpointCompatible(checkpoint.details, ctx.model, settings)) return undefined;\n      const marker = checkpointMarker(checkpoint.details.checkpointId);\n      if (!hasCheckpointMarker(event.payload, marker)) return undefined;\n      return rewriteCheckpointMarker(event.payload, marker, checkpoint.details.replacementHistory);\n    });\n\n    pi.on(\"model_select\", (event, ctx) => {\n      if (!settingsRuntime.get().settings.enabled) return;\n      const settings = settingsRuntime.get().settings;\n      const checkpoint = activeCheckpoint(ctx);\n      if (!checkpoint || isCheckpointCompatible(checkpoint.details, event.model, settings)) return;\n      const key = `${ctx.sessionManager.getSessionId()}:${event.model.provider}:${event.model.id}`;\n      if (providerWarnings.has(key)) return;\n      providerWarnings.add(key);\n      if (ctx.hasUI) {\n        ctx.ui.notify(\n          \"The active Responses checkpoint cannot replay on this model; Pi will expose only its fallback marker and retained recent messages.\",\n          \"warning\",\n        );\n      }\n    });\n\n    pi.on(\"session_shutdown\", async (_event, ctx) => {\n      generation += 1;\n      sessionController.abort();\n      providerWarnings.clear();\n      ctx.ui.setStatus(STATUS_KEY, undefined);\n      await settingsRuntime.flush();\n    });\n  };\n}\n\nexport default createCodexCompactExtension();\n", "import { createHash, randomUUID } from \"node:crypto\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Api } from \"@earendil-works/pi-ai\";\nimport type { CompactionEntry, SessionEntry } from \"@earendil-works/pi-coding-agent\";\nimport type { RemoteCompactionProtocol, ResponsesCompactionProfile } from \"./model-api.js\";\nimport { type JsonObject, validateCompactionItem } from \"./protocol.js\";\n\nexport const CHECKPOINT_KIND = \"pi-codex-remote-compaction\";\nexport const CHECKPOINT_VERSION = 3;\nexport const REPLACEMENT_TOKEN_BUDGET = 64_000;\nexport const REPLACEMENT_BYTE_BUDGET = 8 * 1024 * 1024;\nconst MAX_MEDIA_ITEM_BYTES = 2 * 1024 * 1024;\nconst MAX_CHECKPOINT_DETAILS_BYTES = 10 * 1024 * 1024;\nconst MAX_CHECKPOINT_ID_LENGTH = 128;\nconst MAX_PROVIDER_ID_LENGTH = 256;\nconst MAX_API_ID_LENGTH = 256;\nconst MAX_MODEL_ID_LENGTH = 512;\nconst MAX_KEPT_FINGERPRINTS = 100_000;\n\nexport interface CodexCheckpointDetails {\n  kind: typeof CHECKPOINT_KIND;\n  version: typeof CHECKPOINT_VERSION;\n  checkpointId: string;\n  provider: string;\n  api: Api;\n  profile: ResponsesCompactionProfile;\n  modelId: string;\n  protocol: RemoteCompactionProtocol;\n  replacementHistory: JsonObject[];\n  keptMessageFingerprints: string[];\n  createdAt: string;\n}\n\nfunction isObject(value: unknown): value is JsonObject {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stableValue(value: unknown): unknown {\n  if (Array.isArray(value)) return value.map(stableValue);\n  if (!isObject(value)) return value;\n  return Object.fromEntries(\n    Object.entries(value)\n      .sort(([left], [right]) => left.localeCompare(right))\n      .map(([key, child]) => [key, stableValue(child)]),\n  );\n}\n\nfunction serializedBytes(value: unknown): number {\n  return Buffer.byteLength(JSON.stringify(value), \"utf8\");\n}\n\nexport function fingerprintMessage(message: AgentMessage): string {\n  return createHash(\"sha256\")\n    .update(JSON.stringify(stableValue(message)))\n    .digest(\"hex\");\n}\n\nexport function checkpointMarker(checkpointId: string): string {\n  return [\n    `[PI_CODEX_REMOTE_CHECKPOINT:${checkpointId}]`,\n    \"Opaque checkpoint injection failed. Do not infer missing history; tell the user to re-enable\",\n    \"@narumitw/pi-codex-compact with the same model and Responses API.\",\n  ].join(\" \");\n}\n\nexport function fallbackSummary(checkpointId: string): string {\n  return [\n    `Responses compaction checkpoint ${checkpointId} stores the older history opaquely.`,\n    \"Full replay requires @narumitw/pi-codex-compact and the same model through a compatible Responses provider.\",\n    \"Without them, only Pi's retained recent messages remain available.\",\n  ].join(\" \");\n}\n\nfunction markerMessage(checkpointId: string, timestamp: number): AgentMessage {\n  return {\n    role: \"user\",\n    content: [{ type: \"text\", text: checkpointMarker(checkpointId) }],\n    timestamp,\n  };\n}\n\nexport function parseCheckpointDetails(value: unknown): CodexCheckpointDetails | undefined {\n  if (!isObject(value)) return undefined;\n  try {\n    if (serializedBytes(value) > MAX_CHECKPOINT_DETAILS_BYTES) return undefined;\n  } catch {\n    return undefined;\n  }\n  const isVersionOne =\n    value.version === 1 && value.api === \"openai-codex-responses\" && value.protocol === \"remote-compaction-v2\";\n  const isVersionTwo =\n    value.version === 2 &&\n    (value.api === \"openai-codex-responses\" ||\n      value.api === \"openai-responses\" ||\n      value.api === \"azure-openai-responses\") &&\n    (value.protocol === \"remote-v2\" || value.protocol === \"responses-compact\");\n  const isVersionThree =\n    value.version === CHECKPOINT_VERSION &&\n    typeof value.api === \"string\" &&\n    value.api.length > 0 &&\n    value.api.length <= MAX_API_ID_LENGTH &&\n    (value.profile === \"codex-responses-v1\" || value.profile === \"openai-responses-v1\") &&\n    (value.protocol === \"remote-v2\" || value.protocol === \"responses-compact\");\n  if (\n    value.kind !== CHECKPOINT_KIND ||\n    (!isVersionOne && !isVersionTwo && !isVersionThree) ||\n    typeof value.checkpointId !== \"string\" ||\n    value.checkpointId.length < 8 ||\n    value.checkpointId.length > MAX_CHECKPOINT_ID_LENGTH ||\n    typeof value.provider !== \"string\" ||\n    value.provider.length === 0 ||\n    value.provider.length > MAX_PROVIDER_ID_LENGTH ||\n    typeof value.modelId !== \"string\" ||\n    value.modelId.length === 0 ||\n    value.modelId.length > MAX_MODEL_ID_LENGTH ||\n    !Array.isArray(value.replacementHistory) ||\n    !Array.isArray(value.keptMessageFingerprints) ||\n    value.keptMessageFingerprints.length > MAX_KEPT_FINGERPRINTS ||\n    typeof value.createdAt !== \"string\" ||\n    value.createdAt.length > 64\n  ) {\n    return undefined;\n  }\n  const api = value.api as Api;\n  const profile =\n    api === \"openai-codex-responses\"\n      ? \"codex-responses-v1\"\n      : api === \"openai-responses\" || api === \"azure-openai-responses\"\n        ? \"openai-responses-v1\"\n        : value.profile;\n  if (\n    (profile !== \"codex-responses-v1\" && profile !== \"openai-responses-v1\") ||\n    (api !== \"openai-codex-responses\" &&\n      api !== \"openai-responses\" &&\n      api !== \"azure-openai-responses\" &&\n      profile !== \"codex-responses-v1\") ||\n    (isVersionThree && value.profile !== profile)\n  ) {\n    return undefined;\n  }\n  if (\n    value.replacementHistory.length === 0 ||\n    !value.replacementHistory.every(isObject) ||\n    !value.keptMessageFingerprints.every(\n      (fingerprint) => typeof fingerprint === \"string\" && /^[a-f0-9]{64}$/.test(fingerprint),\n    ) ||\n    serializedBytes(value.replacementHistory) > REPLACEMENT_BYTE_BUDGET\n  ) {\n    return undefined;\n  }\n  const last = value.replacementHistory.at(-1);\n  try {\n    validateCompactionItem(last);\n  } catch {\n    return undefined;\n  }\n  return {\n    kind: CHECKPOINT_KIND,\n    version: CHECKPOINT_VERSION,\n    checkpointId: value.checkpointId,\n    provider: value.provider,\n    api,\n    profile,\n    modelId: value.modelId,\n    protocol: isVersionOne ? \"remote-v2\" : (value.protocol as RemoteCompactionProtocol),\n    replacementHistory: structuredClone(value.replacementHistory),\n    keptMessageFingerprints: [...value.keptMessageFingerprints],\n    createdAt: value.createdAt,\n  };\n}\n\nexport function latestCheckpoint(entries: readonly SessionEntry[]):\n  | {\n      entry: CompactionEntry<CodexCheckpointDetails>;\n      details: CodexCheckpointDetails;\n    }\n  | undefined {\n  for (let index = entries.length - 1; index >= 0; index--) {\n    const entry = entries[index];\n    if (entry.type !== \"compaction\") continue;\n    const details = parseCheckpointDetails(entry.details);\n    return details ? { entry: entry as CompactionEntry<CodexCheckpointDetails>, details } : undefined;\n  }\n  return undefined;\n}\n\nfunction isOlderCompactionSummary(message: AgentMessage, timestamp: number): boolean {\n  return (\n    message.role === \"compactionSummary\" &&\n    Number.isFinite(message.timestamp) &&\n    Number.isFinite(timestamp) &&\n    message.timestamp < timestamp\n  );\n}\n\nexport function projectCheckpointContext(\n  messages: readonly AgentMessage[],\n  details: CodexCheckpointDetails,\n  checkpointSummary: string,\n): AgentMessage[] | undefined {\n  const summaryIndex = messages.findIndex(\n    (message) => message.role === \"compactionSummary\" && message.summary === checkpointSummary,\n  );\n  if (summaryIndex < 0) return undefined;\n  const timestamp = messages[summaryIndex].timestamp;\n  let messageIndex = summaryIndex + 1;\n  let fingerprintIndex = 0;\n  while (fingerprintIndex < details.keptMessageFingerprints.length) {\n    if (messageIndex >= messages.length) return undefined;\n    const message = messages[messageIndex];\n    if (fingerprintMessage(message) === details.keptMessageFingerprints[fingerprintIndex]) {\n      messageIndex += 1;\n      fingerprintIndex += 1;\n      continue;\n    }\n    if (isOlderCompactionSummary(message, timestamp)) {\n      messageIndex += 1;\n      continue;\n    }\n    return undefined;\n  }\n  while (messageIndex < messages.length && isOlderCompactionSummary(messages[messageIndex], timestamp)) {\n    messageIndex += 1;\n  }\n  return [\n    ...messages.slice(0, summaryIndex),\n    markerMessage(details.checkpointId, timestamp),\n    ...messages.slice(messageIndex),\n  ];\n}\n\nfunction rawText(item: JsonObject): string {\n  if (!Array.isArray(item.content)) return \"\";\n  return item.content\n    .flatMap((part) =>\n      isObject(part) && typeof part.text === \"string\" && part.type === \"input_text\" ? [part.text] : [],\n    )\n    .join(\"\\n\");\n}\n\nfunction hasMedia(item: JsonObject): boolean {\n  return Array.isArray(item.content) && item.content.some((part) => isObject(part) && part.type === \"input_image\");\n}\n\nfunction truncateTextItem(item: JsonObject, maxChars: number): JsonObject | undefined {\n  if (!Array.isArray(item.content) || maxChars <= 32) return undefined;\n  let remaining = maxChars - 16;\n  const content = [...item.content].reverse().flatMap((part) => {\n    if (!isObject(part) || part.type !== \"input_text\" || typeof part.text !== \"string\" || remaining <= 0) {\n      return [];\n    }\n    const text = part.text.slice(-remaining);\n    remaining -= text.length;\n    return [{ ...part, text: `[truncated]\\n${text}` }];\n  });\n  if (content.length === 0) return undefined;\n  return { ...item, content: content.reverse() };\n}\n\nexport function buildReplacementHistory(\n  input: readonly unknown[],\n  compactionItem: JsonObject,\n  options: { tokenBudget?: number; byteBudget?: number } = {},\n): JsonObject[] {\n  const tokenBudget = options.tokenBudget ?? REPLACEMENT_TOKEN_BUDGET;\n  const byteBudget = options.byteBudget ?? REPLACEMENT_BYTE_BUDGET;\n  const opaque = validateCompactionItem(compactionItem);\n  let remainingBytes = byteBudget - serializedBytes(opaque);\n  let remainingChars = tokenBudget * 4;\n  if (remainingBytes <= 0) throw new Error(\"Opaque compaction item exceeds replacement history budget\");\n  const retainedNewestFirst: JsonObject[] = [];\n  const candidates = input.filter(\n    (item): item is JsonObject => isObject(item) && item.role === \"user\" && item.type !== \"compaction_trigger\",\n  );\n  for (let index = candidates.length - 1; index >= 0; index--) {\n    const candidate = candidates[index];\n    const bytes = serializedBytes(candidate);\n    if (hasMedia(candidate) && bytes > MAX_MEDIA_ITEM_BYTES) continue;\n    const text = rawText(candidate);\n    let retained = candidate;\n    if (text.length > remainingChars) {\n      if (hasMedia(candidate)) continue;\n      const truncated = truncateTextItem(candidate, remainingChars);\n      if (!truncated) continue;\n      retained = truncated;\n    }\n    if (serializedBytes(retained) > remainingBytes) {\n      if (hasMedia(retained)) continue;\n      const maxCharsByBytes = Math.max(0, remainingBytes - 128);\n      const truncated = truncateTextItem(retained, Math.min(remainingChars, maxCharsByBytes));\n      if (!truncated || serializedBytes(truncated) > remainingBytes) continue;\n      retained = truncated;\n    }\n    retainedNewestFirst.push(structuredClone(retained));\n    remainingBytes -= serializedBytes(retained);\n    remainingChars -= Math.min(remainingChars, rawText(retained).length);\n    if (remainingBytes <= 128 || remainingChars <= 32) break;\n  }\n  return [...retainedNewestFirst.reverse(), opaque];\n}\n\nexport function createCheckpointDetails(input: {\n  provider: string;\n  api: Api;\n  profile: ResponsesCompactionProfile;\n  modelId: string;\n  protocol: RemoteCompactionProtocol;\n  replacementHistory: JsonObject[];\n  keptMessages: readonly AgentMessage[];\n  checkpointId?: string;\n  createdAt?: string;\n}): CodexCheckpointDetails {\n  const details: CodexCheckpointDetails = {\n    kind: CHECKPOINT_KIND,\n    version: CHECKPOINT_VERSION,\n    checkpointId: input.checkpointId ?? randomUUID(),\n    provider: input.provider,\n    api: input.api,\n    profile: input.profile,\n    modelId: input.modelId,\n    protocol: input.protocol,\n    replacementHistory: structuredClone(input.replacementHistory),\n    keptMessageFingerprints: input.keptMessages.map(fingerprintMessage),\n    createdAt: input.createdAt ?? new Date().toISOString(),\n  };\n  const parsed = parseCheckpointDetails(details);\n  if (!parsed) throw new Error(\"Created an invalid Codex checkpoint\");\n  return parsed;\n}\n", "export const MAX_SSE_BYTES = 8 * 1024 * 1024;\nexport const MAX_COMPACT_JSON_BYTES = 8 * 1024 * 1024;\nexport const MAX_COMPACTION_ITEM_BYTES = 2 * 1024 * 1024;\n\nexport type JsonObject = Record<string, unknown>;\n\nexport class CodexCompactionProtocolError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"CodexCompactionProtocolError\";\n  }\n}\n\nfunction isObject(value: unknown): value is JsonObject {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction byteLength(value: unknown): number {\n  return Buffer.byteLength(JSON.stringify(value), \"utf8\");\n}\n\nexport function isCompactionItem(value: unknown): value is JsonObject {\n  return (\n    isObject(value) &&\n    value.type === \"compaction\" &&\n    typeof value.encrypted_content === \"string\" &&\n    value.encrypted_content.length > 0\n  );\n}\n\nexport function validateCompactionItem(value: unknown, maxBytes = MAX_COMPACTION_ITEM_BYTES): JsonObject {\n  if (!isCompactionItem(value)) {\n    throw new CodexCompactionProtocolError(\"Remote response did not contain a valid compaction item\");\n  }\n  if (byteLength(value) > maxBytes) {\n    throw new CodexCompactionProtocolError(\"Remote compaction item exceeded the size limit\");\n  }\n  return structuredClone(value);\n}\n\nexport interface CollectedCompaction {\n  item: JsonObject;\n  completedResponse?: JsonObject;\n}\n\nexport interface CollectedCompactResponse {\n  item: JsonObject;\n  output: JsonObject[];\n  response: JsonObject;\n}\n\nfunction compactionItemsFromEvent(event: JsonObject): unknown[] {\n  const items: unknown[] = [];\n  if (event.type === \"response.output_item.done\" && isObject(event.item)) {\n    items.push(event.item);\n  }\n  if (event.type === \"response.completed\" && isObject(event.response)) {\n    const output = event.response.output;\n    if (Array.isArray(output)) items.push(...output);\n  }\n  return items.filter((item) => isObject(item) && item.type === \"compaction\");\n}\n\nexport async function collectCompactionSse(\n  stream: ReadableStream<Uint8Array>,\n  options: {\n    signal?: AbortSignal;\n    maxBytes?: number;\n    maxItemBytes?: number;\n  } = {},\n): Promise<CollectedCompaction> {\n  const maxBytes = options.maxBytes ?? MAX_SSE_BYTES;\n  const reader = stream.getReader();\n  const onAbort = () => {\n    void reader.cancel(new DOMException(\"Compaction aborted\", \"AbortError\")).catch(() => undefined);\n  };\n  options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n  const decoder = new TextDecoder();\n  let bytes = 0;\n  let pending = \"\";\n  let dataLines: string[] = [];\n  let completedResponse: JsonObject | undefined;\n  const items = new Map<string, JsonObject>();\n\n  const checkAbort = () => {\n    if (options.signal?.aborted) throw new DOMException(\"Compaction aborted\", \"AbortError\");\n  };\n  const dispatch = () => {\n    if (dataLines.length === 0) return;\n    const data = dataLines.join(\"\\n\");\n    dataLines = [];\n    if (data === \"[DONE]\") return;\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(data);\n    } catch {\n      throw new CodexCompactionProtocolError(\"Remote compaction returned malformed SSE JSON\");\n    }\n    if (!isObject(parsed)) return;\n    if (parsed.type === \"response.completed\") {\n      completedResponse = isObject(parsed.response) ? parsed.response : {};\n    }\n    for (const candidate of compactionItemsFromEvent(parsed)) {\n      const item = validateCompactionItem(candidate, options.maxItemBytes);\n      items.set(JSON.stringify(item), item);\n    }\n  };\n  const processLine = (line: string) => {\n    if (line === \"\") {\n      dispatch();\n      return;\n    }\n    if (line.startsWith(\":\")) return;\n    if (line === \"data\") dataLines.push(\"\");\n    else if (line.startsWith(\"data:\")) dataLines.push(line.slice(5).replace(/^ /, \"\"));\n  };\n\n  try {\n    while (true) {\n      checkAbort();\n      const { done, value } = await reader.read();\n      if (done) break;\n      bytes += value.byteLength;\n      if (bytes > maxBytes) {\n        throw new CodexCompactionProtocolError(\"Remote compaction stream exceeded the size limit\");\n      }\n      pending += decoder.decode(value, { stream: true });\n      let newline = pending.indexOf(\"\\n\");\n      while (newline !== -1) {\n        const rawLine = pending.slice(0, newline);\n        pending = pending.slice(newline + 1);\n        processLine(rawLine.endsWith(\"\\r\") ? rawLine.slice(0, -1) : rawLine);\n        newline = pending.indexOf(\"\\n\");\n      }\n    }\n    pending += decoder.decode();\n    if (pending.length > 0) processLine(pending.endsWith(\"\\r\") ? pending.slice(0, -1) : pending);\n    dispatch();\n    checkAbort();\n  } catch (error) {\n    await reader.cancel(error).catch(() => undefined);\n    throw error;\n  } finally {\n    options.signal?.removeEventListener(\"abort\", onAbort);\n    reader.releaseLock();\n  }\n\n  if (!completedResponse) {\n    throw new CodexCompactionProtocolError(\"Remote compaction stream ended without response.completed\");\n  }\n  if (items.size !== 1) {\n    throw new CodexCompactionProtocolError(\n      `Remote compaction returned ${items.size} distinct compaction items; expected exactly one`,\n    );\n  }\n  return { item: [...items.values()][0], completedResponse };\n}\n\nfunction isRetainedCompactContent(value: unknown): value is JsonObject {\n  if (!isObject(value)) return false;\n  if (value.type === \"input_text\") return typeof value.text === \"string\";\n  if (value.type !== \"input_image\") return false;\n  if (\n    value.detail !== undefined &&\n    value.detail !== null &&\n    value.detail !== \"auto\" &&\n    value.detail !== \"low\" &&\n    value.detail !== \"high\" &&\n    value.detail !== \"original\"\n  ) {\n    return false;\n  }\n  if (\n    (value.file_id !== undefined && value.file_id !== null && typeof value.file_id !== \"string\") ||\n    (value.image_url !== undefined && value.image_url !== null && typeof value.image_url !== \"string\")\n  ) {\n    return false;\n  }\n  return (\n    (typeof value.file_id === \"string\" && value.file_id.length > 0) ||\n    (typeof value.image_url === \"string\" && value.image_url.length > 0)\n  );\n}\n\nfunction isRetainedCompactMessage(value: unknown): value is JsonObject {\n  return (\n    isObject(value) &&\n    value.role === \"user\" &&\n    (value.type === undefined || value.type === \"message\") &&\n    Array.isArray(value.content) &&\n    value.content.length > 0 &&\n    value.content.every(isRetainedCompactContent)\n  );\n}\n\nexport function validateCompactedResponse(\n  value: unknown,\n  options: { maxBytes?: number; maxItemBytes?: number } = {},\n): CollectedCompactResponse {\n  if (!isObject(value) || !Array.isArray(value.output)) {\n    throw new CodexCompactionProtocolError(\"Responses Compact returned an invalid response object\");\n  }\n  const maxBytes = options.maxBytes ?? MAX_COMPACT_JSON_BYTES;\n  const maxItemBytes = options.maxItemBytes ?? MAX_COMPACTION_ITEM_BYTES;\n  if (byteLength(value) > maxBytes) {\n    throw new CodexCompactionProtocolError(\"Responses Compact response exceeded the size limit\");\n  }\n  if (value.output.length === 0) {\n    throw new CodexCompactionProtocolError(\"Responses Compact returned no output items\");\n  }\n  const output = value.output.map((item) => {\n    if (!isObject(item)) {\n      throw new CodexCompactionProtocolError(\"Responses Compact returned a non-object output item\");\n    }\n    if (byteLength(item) > maxItemBytes) {\n      throw new CodexCompactionProtocolError(\"Responses Compact output item exceeded the size limit\");\n    }\n    return structuredClone(item);\n  });\n  const compactionItems = output.filter((item) => item.type === \"compaction\");\n  if (compactionItems.length !== 1 || output.at(-1)?.type !== \"compaction\") {\n    throw new CodexCompactionProtocolError(\n      \"Responses Compact must return retained messages followed by one compaction item\",\n    );\n  }\n  for (const item of output.slice(0, -1)) {\n    if (!isRetainedCompactMessage(item)) {\n      throw new CodexCompactionProtocolError(\"Responses Compact returned an unsupported retained output item\");\n    }\n  }\n  const item = validateCompactionItem(output.at(-1), maxItemBytes);\n  return { item, output: [...output.slice(0, -1), item], response: structuredClone(value) };\n}\n\nexport async function collectCompactResponse(\n  response: Response,\n  options: { signal?: AbortSignal; maxBytes?: number; maxItemBytes?: number } = {},\n): Promise<CollectedCompactResponse> {\n  const maxBytes = options.maxBytes ?? MAX_COMPACT_JSON_BYTES;\n  const declaredLength = Number(response.headers.get(\"content-length\"));\n  if (Number.isFinite(declaredLength) && declaredLength > maxBytes) {\n    const error = new CodexCompactionProtocolError(\"Responses Compact response exceeded the size limit\");\n    await response.body?.cancel(error).catch(() => undefined);\n    throw error;\n  }\n  if (!response.body) {\n    throw new CodexCompactionProtocolError(\"Responses Compact response did not contain a body\");\n  }\n  const reader = response.body.getReader();\n  const chunks: Uint8Array[] = [];\n  let bytes = 0;\n  const onAbort = () => {\n    void reader.cancel(new DOMException(\"Compaction aborted\", \"AbortError\")).catch(() => undefined);\n  };\n  options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n  try {\n    while (true) {\n      if (options.signal?.aborted) throw new DOMException(\"Compaction aborted\", \"AbortError\");\n      const { done, value } = await reader.read();\n      if (done) break;\n      bytes += value.byteLength;\n      if (bytes > maxBytes) {\n        throw new CodexCompactionProtocolError(\"Responses Compact response exceeded the size limit\");\n      }\n      chunks.push(value);\n    }\n    if (options.signal?.aborted) throw new DOMException(\"Compaction aborted\", \"AbortError\");\n  } catch (error) {\n    await reader.cancel(error).catch(() => undefined);\n    throw error;\n  } finally {\n    options.signal?.removeEventListener(\"abort\", onAbort);\n    reader.releaseLock();\n  }\n  const body = new Uint8Array(bytes);\n  let offset = 0;\n  for (const chunk of chunks) {\n    body.set(chunk, offset);\n    offset += chunk.byteLength;\n  }\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(new TextDecoder().decode(body));\n  } catch {\n    throw new CodexCompactionProtocolError(\"Responses Compact returned malformed JSON\");\n  }\n  return validateCompactedResponse(parsed, options);\n}\n\nfunction markerTextFromItem(item: unknown): string | undefined {\n  if (!isObject(item) || item.role !== \"user\" || !Array.isArray(item.content)) return undefined;\n  if (item.content.length !== 1) return undefined;\n  const content = item.content[0];\n  if (!isObject(content) || content.type !== \"input_text\" || typeof content.text !== \"string\") {\n    return undefined;\n  }\n  return content.text;\n}\n\nexport function rewriteCheckpointMarker(\n  payload: unknown,\n  marker: string,\n  replacementHistory: readonly unknown[],\n): JsonObject {\n  if (!isObject(payload) || !Array.isArray(payload.input)) {\n    throw new CodexCompactionProtocolError(\"Codex Responses payload is missing an input array\");\n  }\n  const matches = payload.input\n    .map((item, index) => (markerTextFromItem(item) === marker ? index : -1))\n    .filter((index) => index >= 0);\n  if (matches.length !== 1) {\n    throw new CodexCompactionProtocolError(\n      `Provider payload contained ${matches.length} checkpoint markers; expected exactly one`,\n    );\n  }\n  const index = matches[0];\n  return {\n    ...payload,\n    input: [\n      ...payload.input.slice(0, index),\n      ...structuredClone(replacementHistory),\n      ...payload.input.slice(index + 1),\n    ],\n  };\n}\n\nexport function appendCompactionTrigger(payload: unknown): JsonObject {\n  if (!isObject(payload) || !Array.isArray(payload.input)) {\n    throw new CodexCompactionProtocolError(\"Codex Responses payload is missing an input array\");\n  }\n  if (payload.input.some((item) => isObject(item) && item.type === \"compaction_trigger\")) {\n    throw new CodexCompactionProtocolError(\"Provider payload already contains a compaction trigger\");\n  }\n  return { ...payload, input: [...payload.input, { type: \"compaction_trigger\" }] };\n}\n\nexport function expandRemoteCompactionPayload(\n  payload: unknown,\n  checkpoint?: { marker: string; replacementHistory: readonly unknown[] },\n): JsonObject {\n  if (checkpoint) {\n    return rewriteCheckpointMarker(payload, checkpoint.marker, checkpoint.replacementHistory);\n  }\n  if (!isObject(payload) || !Array.isArray(payload.input)) {\n    throw new CodexCompactionProtocolError(\"Responses payload is missing an input array\");\n  }\n  return structuredClone(payload);\n}\n\nexport function prepareRemoteCompactionPayload(\n  payload: unknown,\n  checkpoint?: { marker: string; replacementHistory: readonly unknown[] },\n): JsonObject {\n  return appendCompactionTrigger(expandRemoteCompactionPayload(payload, checkpoint));\n}\n\nexport function hasCheckpointMarker(payload: unknown, marker: string): boolean {\n  return (\n    isObject(payload) &&\n    Array.isArray(payload.input) &&\n    payload.input.some((item) => markerTextFromItem(item) === marker)\n  );\n}\n", "import { normalizeContext, type Usage } from \"@earendil-works/pi-ai\";\nimport type { ResponsesCompactionProfile } from \"./model-api.js\";\nimport {\n  CodexCompactionProtocolError,\n  type CollectedCompactResponse,\n  collectCompactResponse,\n  expandRemoteCompactionPayload,\n  type JsonObject,\n} from \"./protocol.js\";\nimport { collectProviderUsage } from \"./remote-shared.js\";\nimport {\n  abortError,\n  assertPreparedInput,\n  isJsonObject,\n  type RemoteCompactionRequest,\n  type RemoteCompactionResponse,\n} from \"./remote-types.js\";\n\nconst OFFICIAL_COMPACT_FIELDS = [\n  \"model\",\n  \"input\",\n  \"instructions\",\n  \"previous_response_id\",\n  \"prompt_cache_key\",\n  \"prompt_cache_retention\",\n  \"service_tier\",\n] as const;\n\nconst CODEX_COMPACT_FIELDS = [\n  \"model\",\n  \"input\",\n  \"instructions\",\n  \"tools\",\n  \"parallel_tool_calls\",\n  \"reasoning\",\n  \"service_tier\",\n  \"prompt_cache_key\",\n  \"text\",\n  \"access_programs\",\n] as const;\n\nfunction compactPayload(payload: JsonObject, profile: ResponsesCompactionProfile): JsonObject {\n  const fields = profile === \"codex-responses-v1\" ? CODEX_COMPACT_FIELDS : OFFICIAL_COMPACT_FIELDS;\n  const result: JsonObject = {};\n  for (const field of fields) {\n    if (Object.hasOwn(payload, field) && payload[field] !== undefined) {\n      result[field] = structuredClone(payload[field]);\n    }\n  }\n  if (typeof result.model !== \"string\" || result.model.length === 0) {\n    throw new CodexCompactionProtocolError(\"Responses payload is missing a model\");\n  }\n  assertPreparedInput(result);\n  return result;\n}\n\nfunction requestUrl(input: string | URL | Request): URL {\n  return new URL(input instanceof Request ? input.url : String(input));\n}\n\nexport function responsesCompactUrl(input: string | URL | Request): URL {\n  const original = requestUrl(input);\n  if (!original.pathname.endsWith(\"/responses\")) {\n    throw new CodexCompactionProtocolError(\"Provider request URL does not end with the Responses endpoint\");\n  }\n  const compact = new URL(original);\n  compact.pathname = `${compact.pathname}/compact`;\n  if (compact.origin !== original.origin) {\n    throw new CodexCompactionProtocolError(\"Responses Compact URL changed origin\");\n  }\n  return compact;\n}\n\nfunction mergedHeaders(input: string | URL | Request, init?: RequestInit): Headers {\n  const headers = new Headers(input instanceof Request ? input.headers : undefined);\n  new Headers(init?.headers).forEach((value, name) => {\n    headers.set(name, value);\n  });\n  headers.delete(\"content-encoding\");\n  headers.delete(\"content-length\");\n  headers.set(\"accept\", \"application/json\");\n  headers.set(\"content-type\", \"application/json\");\n  return headers;\n}\n\nfunction mergedSignal(\n  input: string | URL | Request,\n  init: RequestInit | undefined,\n  ownerSignal: AbortSignal,\n): AbortSignal {\n  const signals = [ownerSignal];\n  if (input instanceof Request) signals.push(input.signal);\n  if (init?.signal) signals.push(init.signal);\n  return signals.length === 1 ? ownerSignal : AbortSignal.any(signals);\n}\n\nfunction nonRetryableBridgeFailure(error: unknown): Response {\n  const message = error instanceof Error ? error.message : String(error);\n  return Response.json(\n    {\n      error: {\n        message,\n        type: \"invalid_request_error\",\n        code: \"invalid_compact_response\",\n      },\n    },\n    { status: 400 },\n  );\n}\n\nfunction nonNegativeInteger(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0;\n}\n\nfunction optionalUsageDetail(details: unknown, field: string): number {\n  if (details === undefined || details === null) return 0;\n  if (!isJsonObject(details)) {\n    throw new CodexCompactionProtocolError(\"Responses Compact response has invalid usage details\");\n  }\n  const value = details[field];\n  if (value === undefined || value === null) return 0;\n  if (!nonNegativeInteger(value)) {\n    throw new CodexCompactionProtocolError(`Responses Compact response has invalid usage detail ${field}`);\n  }\n  return value;\n}\n\nfunction validatedUsage(response: JsonObject): JsonObject {\n  const usage = response.usage;\n  if (!isJsonObject(usage)) {\n    throw new CodexCompactionProtocolError(\"Responses Compact response is missing usage\");\n  }\n  for (const field of [\"input_tokens\", \"output_tokens\", \"total_tokens\"] as const) {\n    if (!nonNegativeInteger(usage[field])) {\n      throw new CodexCompactionProtocolError(`Responses Compact response has invalid ${field}`);\n    }\n  }\n  const inputTokens = usage.input_tokens as number;\n  const outputTokens = usage.output_tokens as number;\n  const totalTokens = usage.total_tokens as number;\n  const cachedTokens = optionalUsageDetail(usage.input_tokens_details, \"cached_tokens\");\n  const cacheWriteTokens = optionalUsageDetail(usage.input_tokens_details, \"cache_write_tokens\");\n  const reasoningTokens = optionalUsageDetail(usage.output_tokens_details, \"reasoning_tokens\");\n  if (cachedTokens + cacheWriteTokens > inputTokens || reasoningTokens > outputTokens) {\n    throw new CodexCompactionProtocolError(\"Responses Compact response has inconsistent usage details\");\n  }\n  if (totalTokens !== inputTokens + outputTokens) {\n    throw new CodexCompactionProtocolError(\"Responses Compact response has inconsistent total usage\");\n  }\n  return structuredClone(usage);\n}\n\nfunction syntheticCompletion(result: CollectedCompactResponse, payload: JsonObject): Response {\n  const completed = {\n    id: typeof result.response.id === \"string\" ? result.response.id : \"resp_pi_compact_bridge\",\n    object: \"response\",\n    created_at:\n      typeof result.response.created_at === \"number\" ? result.response.created_at : Math.floor(Date.now() / 1000),\n    status: \"completed\",\n    model: payload.model,\n    output: [],\n    parallel_tool_calls: false,\n    tool_choice: \"auto\",\n    tools: [],\n    usage: validatedUsage(result.response),\n  };\n  const events = [\n    { type: \"response.created\", response: { ...completed, status: \"in_progress\" } },\n    { type: \"response.completed\", response: completed },\n  ];\n  return new Response(events.map((event) => `data: ${JSON.stringify(event)}\\n\\n`).join(\"\"), {\n    status: 200,\n    headers: { \"content-type\": \"text/event-stream\" },\n  });\n}\n\nexport async function requestResponsesCompact(request: RemoteCompactionRequest): Promise<RemoteCompactionResponse> {\n  if (request.signal.aborted) throw abortError();\n  let preparedPayload: JsonObject | undefined;\n  let sentInput: JsonObject[] | undefined;\n  let compactResult: CollectedCompactResponse | undefined;\n  let bridgeError: unknown;\n  let dispatchInFlight = false;\n  let successfulResponses = 0;\n  const baseFetch = request.fetch ?? globalThis.fetch;\n  const bridgeFetch: typeof globalThis.fetch = async (input, init) => {\n    if (request.signal.aborted) throw abortError();\n    if (successfulResponses > 0) {\n      bridgeError = new CodexCompactionProtocolError(\"Provider dispatched again after Responses Compact succeeded\");\n      return nonRetryableBridgeFailure(bridgeError);\n    }\n    if (dispatchInFlight) {\n      bridgeError = new CodexCompactionProtocolError(\"Provider dispatched overlapping Responses Compact requests\");\n      return nonRetryableBridgeFailure(bridgeError);\n    }\n    if (!preparedPayload) {\n      bridgeError = new CodexCompactionProtocolError(\"Provider dispatched before exposing its request payload\");\n      return nonRetryableBridgeFailure(bridgeError);\n    }\n    let compactUrl: URL;\n    try {\n      compactUrl = responsesCompactUrl(input);\n    } catch (error) {\n      bridgeError = error;\n      return nonRetryableBridgeFailure(error);\n    }\n    const signal = mergedSignal(input, init, request.signal);\n    dispatchInFlight = true;\n    try {\n      const response = await baseFetch(compactUrl, {\n        ...init,\n        method: \"POST\",\n        headers: mergedHeaders(input, init),\n        body: JSON.stringify(preparedPayload),\n        signal,\n      });\n      if (!response.ok) return response;\n      try {\n        const result = await collectCompactResponse(response, { signal });\n        successfulResponses += 1;\n        if (successfulResponses !== 1) {\n          throw new CodexCompactionProtocolError(\n            \"Provider returned more than one successful Responses Compact response\",\n          );\n        }\n        compactResult = result;\n        return syntheticCompletion(result, preparedPayload);\n      } catch (error) {\n        bridgeError = error;\n        return nonRetryableBridgeFailure(error);\n      }\n    } finally {\n      dispatchInFlight = false;\n    }\n  };\n\n  const stream = request.provider.stream(request.model, normalizeContext(request.context), {\n    apiKey: request.apiKey,\n    headers: request.headers,\n    env: request.env,\n    signal: request.signal,\n    transport: \"sse\",\n    cacheRetention: \"none\",\n    timeoutMs: request.requestTimeoutMs ?? 5 * 60 * 1000,\n    maxRetries: request.maxRetries ?? 2,\n    fetch: bridgeFetch,\n    onPayload: (payload) => {\n      if (preparedPayload) {\n        throw new CodexCompactionProtocolError(\"Provider exposed more than one compaction request payload\");\n      }\n      const expanded = expandRemoteCompactionPayload(payload, request.priorCheckpoint);\n      preparedPayload = compactPayload(expanded, request.profile);\n      sentInput = assertPreparedInput(preparedPayload);\n      return expanded;\n    },\n  });\n\n  let usage: Usage;\n  try {\n    usage = await collectProviderUsage(stream, request.signal);\n  } catch (error) {\n    if (bridgeError) throw bridgeError;\n    throw error;\n  }\n  if (request.signal.aborted) throw abortError();\n  if (bridgeError) throw bridgeError;\n  if (!preparedPayload || !sentInput || !compactResult || successfulResponses !== 1) {\n    throw new CodexCompactionProtocolError(\"Provider did not complete exactly one Responses Compact request\");\n  }\n  return {\n    item: compactResult.item,\n    promptInput: sentInput,\n    compactedOutput: compactResult.output,\n    usage,\n  };\n}\n", "import type { Api, Context, Model, Provider, ProviderHeaders, Usage } from \"@earendil-works/pi-ai\";\nimport type { RemoteCompactionProtocol, ResponsesCompactionProfile } from \"./model-api.js\";\nimport type { JsonObject } from \"./protocol.js\";\n\nexport interface PriorCheckpointPayload {\n  marker: string;\n  replacementHistory: readonly unknown[];\n}\n\nexport interface RemoteCompactionRequest {\n  provider: Provider;\n  model: Model<Api>;\n  profile: ResponsesCompactionProfile;\n  context: Context;\n  protocol: RemoteCompactionProtocol;\n  apiKey?: string;\n  headers?: ProviderHeaders;\n  env?: Record<string, string>;\n  signal: AbortSignal;\n  priorCheckpoint?: PriorCheckpointPayload;\n  requestTimeoutMs?: number;\n  maxRetries?: number;\n  fetch?: typeof globalThis.fetch;\n}\n\nexport interface RemoteCompactionResponse {\n  item: JsonObject;\n  promptInput: JsonObject[];\n  compactedOutput?: JsonObject[];\n  usage: Usage;\n}\n\nexport function isJsonObject(value: unknown): value is JsonObject {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function abortError(): DOMException {\n  return new DOMException(\"Compaction aborted\", \"AbortError\");\n}\n\nexport function assertPreparedInput(payload: JsonObject): JsonObject[] {\n  if (!Array.isArray(payload.input) || !payload.input.every(isJsonObject)) {\n    throw new Error(\"Prepared compaction payload has invalid input items\");\n  }\n  return structuredClone(payload.input);\n}\n", "import type { AssistantMessageEventStream, Usage } from \"@earendil-works/pi-ai\";\nimport { abortError } from \"./remote-types.js\";\n\nexport async function collectProviderUsage(stream: AssistantMessageEventStream, signal: AbortSignal): Promise<Usage> {\n  let usage: Usage | undefined;\n  for await (const event of stream) {\n    if (signal.aborted) throw abortError();\n    if (event.type === \"error\") {\n      throw new Error(event.error.errorMessage ?? \"Responses compaction request failed\");\n    }\n    if (event.type === \"done\") usage = event.message.usage;\n  }\n  if (signal.aborted) throw abortError();\n  if (!usage) throw new Error(\"Responses provider stream ended without completion usage\");\n  return usage;\n}\n", "import { normalizeContext } from \"@earendil-works/pi-ai\";\nimport {\n  CodexCompactionProtocolError,\n  type CollectedCompaction,\n  collectCompactionSse,\n  prepareRemoteCompactionPayload,\n} from \"./protocol.js\";\nimport { collectProviderUsage } from \"./remote-shared.js\";\nimport {\n  abortError,\n  assertPreparedInput,\n  type RemoteCompactionRequest,\n  type RemoteCompactionResponse,\n} from \"./remote-types.js\";\n\nexport async function requestRemoteCompactionV2(request: RemoteCompactionRequest): Promise<RemoteCompactionResponse> {\n  if (request.signal.aborted) throw abortError();\n  let sentInput: ReturnType<typeof assertPreparedInput> | undefined;\n  const inspections: Promise<{ ok: true; value: CollectedCompaction } | { ok: false; error: unknown }>[] = [];\n  const baseFetch = request.fetch ?? globalThis.fetch;\n  const inspectedFetch: typeof globalThis.fetch = async (input, init) => {\n    const response = await baseFetch(input, init);\n    if (!response.ok || !response.body) return response;\n    const [providerBody, inspectionBody] = response.body.tee();\n    const inspection = collectCompactionSse(inspectionBody, { signal: request.signal }).then(\n      (value) => ({ ok: true as const, value }),\n      (error: unknown) => ({ ok: false as const, error }),\n    );\n    inspections.push(inspection);\n    return new Response(providerBody, {\n      status: response.status,\n      statusText: response.statusText,\n      headers: response.headers,\n    });\n  };\n\n  const stream = request.provider.stream(request.model, normalizeContext(request.context), {\n    apiKey: request.apiKey,\n    headers: request.headers,\n    env: request.env,\n    signal: request.signal,\n    transport: \"sse\",\n    cacheRetention: \"none\",\n    timeoutMs: request.requestTimeoutMs ?? 5 * 60 * 1000,\n    maxRetries: request.maxRetries ?? 2,\n    fetch: inspectedFetch,\n    onPayload: (payload) => {\n      const prepared = prepareRemoteCompactionPayload(payload, request.priorCheckpoint);\n      sentInput = assertPreparedInput(prepared).slice(0, -1);\n      return prepared;\n    },\n  });\n\n  const usage = await collectProviderUsage(stream, request.signal);\n  if (!sentInput) {\n    throw new CodexCompactionProtocolError(\"Provider did not expose a request payload\");\n  }\n  if (inspections.length !== 1) {\n    throw new CodexCompactionProtocolError(\n      `Provider exposed ${inspections.length} successful SSE responses; expected exactly one`,\n    );\n  }\n  const inspection = await inspections[0];\n  if (request.signal.aborted) throw abortError();\n  if (!inspection.ok) throw inspection.error;\n  return { item: inspection.value.item, promptInput: sentInput, usage };\n}\n", "import { requestResponsesCompact } from \"./remote-compact.js\";\nimport type { RemoteCompactionRequest, RemoteCompactionResponse } from \"./remote-types.js\";\nimport { requestRemoteCompactionV2 } from \"./remote-v2.js\";\n\nexport type {\n  PriorCheckpointPayload,\n  RemoteCompactionRequest,\n  RemoteCompactionResponse,\n} from \"./remote-types.js\";\n\nexport function requestRemoteCompaction(request: RemoteCompactionRequest): Promise<RemoteCompactionResponse> {\n  return request.protocol === \"responses-compact\"\n    ? requestResponsesCompact(request)\n    : requestRemoteCompactionV2(request);\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { constants } from \"node:fs\";\nimport { mkdir, open, rename, rm, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\nimport type { RemoteCompactionProtocolSetting } from \"./model-api.js\";\n\nexport const CODEX_COMPACT_SETTINGS_FILE = \"pi-codex-compact.json\";\nexport const MAX_SETTINGS_BYTES = 64 * 1024;\n\nexport interface CodexCompactSettings {\n  enabled: boolean;\n  protocol: RemoteCompactionProtocolSetting;\n  apiProfiles: Record<string, \"codex-responses-v1\">;\n  requestTimeoutMs: number;\n  maxRetries: number;\n  replacementTokenBudget: number;\n  notifyOnFallback: boolean;\n}\n\nexport const DEFAULT_CODEX_COMPACT_SETTINGS: Readonly<CodexCompactSettings> = Object.freeze({\n  enabled: true,\n  protocol: \"auto\",\n  apiProfiles: {},\n  requestTimeoutMs: 300_000,\n  maxRetries: 2,\n  replacementTokenBudget: 64_000,\n  notifyOnFallback: true,\n});\n\nconst LIMITS = Object.freeze({\n  requestTimeoutMs: { minimum: 30_000, maximum: 600_000 },\n  maxRetries: { minimum: 0, maximum: 2 },\n  replacementTokenBudget: { minimum: 8_000, maximum: 128_000 },\n});\n\nconst BUILT_IN_APIS = new Set([\n  \"openai-completions\",\n  \"mistral-conversations\",\n  \"openai-codex-responses\",\n  \"openai-responses\",\n  \"azure-openai-responses\",\n  \"anthropic-messages\",\n  \"bedrock-converse-stream\",\n  \"google-generative-ai\",\n  \"google-vertex\",\n  \"pi-messages\",\n]);\nconst MAX_API_PROFILE_ID_LENGTH = 256;\n\nexport interface CodexCompactSettingsState {\n  kind: \"missing\" | \"loaded\" | \"invalid\";\n  path: string;\n  settings: CodexCompactSettings;\n  document?: Record<string, unknown>;\n  issue?: string;\n}\n\nexport interface CodexCompactSettingsRuntime {\n  get(): Readonly<CodexCompactSettingsState>;\n  reload(signal?: AbortSignal): Promise<Readonly<CodexCompactSettingsState>>;\n  update(patch: Partial<CodexCompactSettings>, signal?: AbortSignal): Promise<Readonly<CodexCompactSettingsState>>;\n  flush(): Promise<void>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction validInteger(value: unknown, minimum: number, maximum: number): value is number {\n  return typeof value === \"number\" && Number.isSafeInteger(value) && value >= minimum && value <= maximum;\n}\n\nfunction hasWhitespaceOrControl(value: string): boolean {\n  return [...value].some((character) => {\n    const code = character.codePointAt(0) ?? 0;\n    return code <= 0x20 || code === 0x7f;\n  });\n}\n\nfunction normalizeApiProfiles(value: unknown): Record<string, \"codex-responses-v1\"> | undefined {\n  if (\n    !isRecord(value) ||\n    (Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null)\n  ) {\n    return undefined;\n  }\n  const profiles: Record<string, \"codex-responses-v1\"> = {};\n  for (const [api, profile] of Object.entries(value)) {\n    if (\n      api.length === 0 ||\n      api.length > MAX_API_PROFILE_ID_LENGTH ||\n      api.trim() !== api ||\n      hasWhitespaceOrControl(api) ||\n      BUILT_IN_APIS.has(api) ||\n      api === \"__proto__\" ||\n      api === \"constructor\" ||\n      api === \"prototype\" ||\n      profile !== \"codex-responses-v1\"\n    ) {\n      return undefined;\n    }\n    profiles[api] = profile;\n  }\n  return profiles;\n}\n\nexport function normalizeCodexCompactSettings(value: unknown): CodexCompactSettings | undefined {\n  if (!isRecord(value)) return undefined;\n  if (Object.hasOwn(value, \"enabled\") && typeof value.enabled !== \"boolean\") return undefined;\n  if (\n    Object.hasOwn(value, \"protocol\") &&\n    value.protocol !== \"auto\" &&\n    value.protocol !== \"remote-v2\" &&\n    value.protocol !== \"responses-compact\"\n  ) {\n    return undefined;\n  }\n  if (Object.hasOwn(value, \"notifyOnFallback\") && typeof value.notifyOnFallback !== \"boolean\") {\n    return undefined;\n  }\n  if (Object.hasOwn(value, \"apiProfiles\") && normalizeApiProfiles(value.apiProfiles) === undefined) return undefined;\n  for (const [field, limits] of Object.entries(LIMITS) as [\n    keyof typeof LIMITS,\n    { minimum: number; maximum: number },\n  ][]) {\n    if (Object.hasOwn(value, field) && !validInteger(value[field], limits.minimum, limits.maximum)) {\n      return undefined;\n    }\n  }\n  return {\n    enabled: typeof value.enabled === \"boolean\" ? value.enabled : DEFAULT_CODEX_COMPACT_SETTINGS.enabled,\n    protocol:\n      value.protocol === \"remote-v2\" || value.protocol === \"responses-compact\"\n        ? value.protocol\n        : DEFAULT_CODEX_COMPACT_SETTINGS.protocol,\n    apiProfiles: normalizeApiProfiles(value.apiProfiles) ?? structuredClone(DEFAULT_CODEX_COMPACT_SETTINGS.apiProfiles),\n    requestTimeoutMs:\n      typeof value.requestTimeoutMs === \"number\"\n        ? value.requestTimeoutMs\n        : DEFAULT_CODEX_COMPACT_SETTINGS.requestTimeoutMs,\n    maxRetries: typeof value.maxRetries === \"number\" ? value.maxRetries : DEFAULT_CODEX_COMPACT_SETTINGS.maxRetries,\n    replacementTokenBudget:\n      typeof value.replacementTokenBudget === \"number\"\n        ? value.replacementTokenBudget\n        : DEFAULT_CODEX_COMPACT_SETTINGS.replacementTokenBudget,\n    notifyOnFallback:\n      typeof value.notifyOnFallback === \"boolean\"\n        ? value.notifyOnFallback\n        : DEFAULT_CODEX_COMPACT_SETTINGS.notifyOnFallback,\n  };\n}\n\nexport function codexCompactSettingsPath(): string {\n  return join(getAgentDir(), CODEX_COMPACT_SETTINGS_FILE);\n}\n\nfunction aborted(signal?: AbortSignal): void {\n  if (signal?.aborted) throw new DOMException(\"Settings operation aborted\", \"AbortError\");\n}\n\nexport async function loadCodexCompactSettings(\n  path = codexCompactSettingsPath(),\n  signal?: AbortSignal,\n): Promise<CodexCompactSettingsState> {\n  aborted(signal);\n  try {\n    const handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);\n    let text: string;\n    try {\n      const stats = await handle.stat();\n      aborted(signal);\n      if (!stats.isFile()) throw new Error(\"settings path is not a regular file\");\n      if (stats.size > MAX_SETTINGS_BYTES) throw new Error(\"settings file exceeds 64 KiB\");\n      text = await handle.readFile(\"utf8\");\n    } finally {\n      await handle.close();\n    }\n    aborted(signal);\n    const document = JSON.parse(text) as unknown;\n    const settings = normalizeCodexCompactSettings(document);\n    if (!settings || !isRecord(document)) throw new Error(\"invalid settings shape or bounds\");\n    return { kind: \"loaded\", path, settings, document };\n  } catch (error) {\n    if (signal?.aborted) throw error;\n    if (isNodeError(error) && error.code === \"ENOENT\") {\n      return {\n        kind: \"missing\",\n        path,\n        settings: { ...DEFAULT_CODEX_COMPACT_SETTINGS },\n        document: {},\n      };\n    }\n    return {\n      kind: \"invalid\",\n      path,\n      settings: { ...DEFAULT_CODEX_COMPACT_SETTINGS },\n      issue:\n        isNodeError(error) && error.code === \"ELOOP\"\n          ? \"symbolic links are not accepted\"\n          : error instanceof Error\n            ? error.message\n            : String(error),\n    };\n  }\n}\n\nasync function savePatch(\n  path: string,\n  patch: Partial<CodexCompactSettings>,\n  signal?: AbortSignal,\n): Promise<CodexCompactSettingsState> {\n  const latest = await loadCodexCompactSettings(path, signal);\n  if (latest.kind === \"invalid\") {\n    throw new Error(\"Cannot overwrite an invalid pi-codex-compact.json; repair it and reload first\");\n  }\n  const document = { ...latest.document, ...patch };\n  const settings = normalizeCodexCompactSettings(document);\n  if (!settings) throw new Error(\"Refusing to save invalid Codex compaction settings\");\n  const temporaryPath = join(dirname(path), `.${basename(path)}.${randomUUID()}.tmp`);\n  await mkdir(dirname(path), { recursive: true });\n  aborted(signal);\n  try {\n    await writeFile(temporaryPath, `${JSON.stringify(document, null, 2)}\\n`, {\n      encoding: \"utf8\",\n      flag: \"wx\",\n      mode: 0o600,\n    });\n    aborted(signal);\n    const current = await loadCodexCompactSettings(path, signal);\n    if (\n      current.kind === \"invalid\" ||\n      current.kind !== latest.kind ||\n      JSON.stringify(current.document) !== JSON.stringify(latest.document)\n    ) {\n      throw new Error(\"pi-codex-compact.json changed while saving; reopen settings and retry\");\n    }\n    await rename(temporaryPath, path);\n  } finally {\n    await rm(temporaryPath, { force: true }).catch(() => undefined);\n  }\n  return { kind: \"loaded\", path, settings, document };\n}\n\nexport function createCodexCompactSettingsRuntime(path = codexCompactSettingsPath()): CodexCompactSettingsRuntime {\n  let state: CodexCompactSettingsState = {\n    kind: \"missing\",\n    path,\n    settings: { ...DEFAULT_CODEX_COMPACT_SETTINGS },\n    document: {},\n  };\n  let queue = Promise.resolve();\n  const enqueue = <T>(operation: () => Promise<T>): Promise<T> => {\n    const result = queue.then(operation, operation);\n    queue = result.then(\n      () => undefined,\n      () => undefined,\n    );\n    return result;\n  };\n  return {\n    get: () => structuredClone(state),\n    reload: (signal) =>\n      enqueue(async () => {\n        state = await loadCodexCompactSettings(path, signal);\n        return structuredClone(state);\n      }),\n    update: (patch, signal) =>\n      enqueue(async () => {\n        state = await savePatch(path, patch, signal);\n        return structuredClone(state);\n      }),\n    flush: () => queue,\n  };\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n  return error instanceof Error && \"code\" in error;\n}\n"],
  "mappings": "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",
  "names": ["item", "index", "isObject", "normalizeContext", "inspection", "normalizeContext", "randomUUID"]
}
