{"version":3,"sources":["../src/errors.ts","../src/utils/case.ts","../src/utils/stream.ts","../src/client.ts","../src/utils/format.ts","../src/hooks.ts","../src/compress.ts"],"names":[],"mappings":"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","file":"chunk-R6FB52AD.cjs","sourcesContent":["/**\n * Error hierarchy matching Python headroom.exceptions.\n */\n\nexport class HeadroomError extends Error {\n  details?: Record<string, any>;\n\n  constructor(message: string, details?: Record<string, any>) {\n    super(message);\n    this.name = \"HeadroomError\";\n    this.details = details;\n  }\n}\n\nexport class HeadroomConnectionError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"HeadroomConnectionError\";\n  }\n}\n\nexport class HeadroomAuthError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"HeadroomAuthError\";\n  }\n}\n\nexport class HeadroomCompressError extends HeadroomError {\n  statusCode: number;\n  errorType: string;\n\n  constructor(statusCode: number, errorType: string, message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"HeadroomCompressError\";\n    this.statusCode = statusCode;\n    this.errorType = errorType;\n  }\n}\n\nexport class ConfigurationError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"ConfigurationError\";\n  }\n}\n\nexport class ProviderError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"ProviderError\";\n  }\n}\n\nexport class StorageError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"StorageError\";\n  }\n}\n\nexport class TokenizationError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"TokenizationError\";\n  }\n}\n\nexport class CacheError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"CacheError\";\n  }\n}\n\nexport class ValidationError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"ValidationError\";\n  }\n}\n\nexport class TransformError extends HeadroomError {\n  constructor(message: string, details?: Record<string, any>) {\n    super(message, details);\n    this.name = \"TransformError\";\n  }\n}\n\n// --- Proxy error mapping ---\n\nconst ERROR_TYPE_MAP: Record<string, new (message: string, details?: Record<string, any>) => HeadroomError> = {\n  configuration_error: ConfigurationError,\n  provider_error: ProviderError,\n  storage_error: StorageError,\n  tokenization_error: TokenizationError,\n  cache_error: CacheError,\n  validation_error: ValidationError,\n  transform_error: TransformError,\n};\n\n/**\n * Map a proxy error response to the correct HeadroomError subclass.\n */\nexport function mapProxyError(\n  status: number,\n  type: string,\n  message: string,\n): HeadroomError {\n  if (status === 401) return new HeadroomAuthError(message);\n  const ErrorClass = ERROR_TYPE_MAP[type];\n  if (ErrorClass) return new ErrorClass(message, { statusCode: status, errorType: type });\n  return new HeadroomCompressError(status, type, message);\n}\n","/**\n * Case conversion utilities for proxy communication.\n * Proxy uses snake_case (Python), SDK uses camelCase (TypeScript).\n */\n\nexport function snakeToCamel(str: string): string {\n  return str.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());\n}\n\nexport function camelToSnake(str: string): string {\n  return str.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);\n}\n\nexport function deepCamelCase<T = any>(obj: any): T {\n  if (obj === null || obj === undefined) return obj as T;\n  if (Array.isArray(obj)) return obj.map(deepCamelCase) as T;\n  if (typeof obj === \"object\" && !(obj instanceof Date)) {\n    return Object.fromEntries(\n      Object.entries(obj).map(([k, v]) => [snakeToCamel(k), deepCamelCase(v)]),\n    ) as T;\n  }\n  return obj as T;\n}\n\nexport function deepSnakeCase(obj: any): any {\n  if (obj === null || obj === undefined) return obj;\n  if (Array.isArray(obj)) return obj.map(deepSnakeCase);\n  if (typeof obj === \"object\" && !(obj instanceof Date)) {\n    return Object.fromEntries(\n      Object.entries(obj).map(([k, v]) => [camelToSnake(k), deepSnakeCase(v)]),\n    );\n  }\n  return obj;\n}\n","/**\n * SSE (Server-Sent Events) stream parser for proxy streaming responses.\n */\n\n/**\n * Parse an SSE response body into an async generator of parsed JSON events.\n */\nexport async function* parseSSE<T = any>(\n  response: Response,\n): AsyncGenerator<T> {\n  const reader = response.body!.getReader();\n  const decoder = new TextDecoder();\n  let buffer = \"\";\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n\n      buffer += decoder.decode(value, { stream: true });\n      const lines = buffer.split(\"\\n\");\n      buffer = lines.pop()!;\n\n      for (const line of lines) {\n        if (line.startsWith(\"data: \")) {\n          const data = line.slice(6).trim();\n          if (data === \"[DONE]\") return;\n          try {\n            yield JSON.parse(data) as T;\n          } catch {\n            // skip non-JSON data lines (e.g. Anthropic event metadata)\n          }\n        }\n      }\n    }\n  } finally {\n    reader.releaseLock();\n  }\n}\n\n/**\n * Collect all chunks from an async iterable into an array.\n */\nexport async function collectStream<T>(stream: AsyncIterable<T>): Promise<T[]> {\n  const chunks: T[] = [];\n  for await (const chunk of stream) {\n    chunks.push(chunk);\n  }\n  return chunks;\n}\n","/**\n * HeadroomClient — HTTP client for the Headroom compression proxy.\n *\n * Supports:\n * - compress() — direct compression via /v1/compress\n * - chat.completions.create() — OpenAI-style passthrough via /v1/chat/completions\n * - messages.create() — Anthropic-style passthrough via /v1/messages\n * - Metrics, health, CCR retrieve, telemetry, feedback, TOIN\n */\n\nimport type {\n  OpenAIMessage,\n  CompressResult,\n  HeadroomClientOptions,\n  HeadroomClientInterface,\n  ProxyCompressResponse,\n  ProxyErrorResponse,\n} from \"./types.js\";\nimport { mapProxyError, HeadroomConnectionError, HeadroomAuthError, HeadroomCompressError } from \"./errors.js\";\nimport { deepCamelCase, deepSnakeCase } from \"./utils/case.js\";\nimport { parseSSE } from \"./utils/stream.js\";\nimport type { HeadroomConfig, HeadroomMode } from \"./types/config.js\";\nimport type {\n  SimulationResult,\n  RequestMetrics,\n  MetricsSummary,\n  SessionStats,\n  ValidationResult,\n  HealthStatus,\n  ProxyStats,\n  MemoryUsage,\n  RetrieveResult,\n  RetrieveSearchResult,\n  CCRStats,\n  TelemetryStats,\n  ToolHints,\n  TOINStats,\n  TOINPattern,\n  MetricsQuery,\n  SummaryQuery,\n  StatsHistoryQuery,\n} from \"./types/models.js\";\n\nconst DEFAULT_BASE_URL = \"http://localhost:8787\";\nconst DEFAULT_TIMEOUT = 30_000;\nconst DEFAULT_RETRIES = 1;\n\nfunction getEnv(key: string): string | undefined {\n  if (typeof process !== \"undefined\" && process.env) {\n    return process.env[key];\n  }\n  return undefined;\n}\n\nfunction makeFallbackResult(messages: OpenAIMessage[]): CompressResult {\n  return {\n    messages,\n    tokensBefore: 0,\n    tokensAfter: 0,\n    tokensSaved: 0,\n    compressionRatio: 1.0,\n    transformsApplied: [],\n    ccrHashes: [],\n    compressed: false,\n  };\n}\n\n// --- Headroom request params ---\n\nexport interface HeadroomParams {\n  headroomMode?: HeadroomMode;\n  headroomCachePrefixTokens?: number;\n  headroomOutputBufferTokens?: number;\n  headroomKeepTurns?: number;\n  headroomToolProfiles?: Record<string, Record<string, any>>;\n}\n\n// --- Sub-clients ---\n\nclass ChatCompletions {\n  constructor(private client: HeadroomClient) {}\n\n  /**\n   * Create a chat completion with automatic compression.\n   * Routes through proxy's POST /v1/chat/completions.\n   */\n  async create(\n    params: { model: string; messages: OpenAIMessage[]; stream?: boolean; [key: string]: any } & HeadroomParams,\n  ): Promise<any> {\n    const { headroomMode, headroomCachePrefixTokens, headroomOutputBufferTokens, headroomKeepTurns, headroomToolProfiles, ...apiParams } = params;\n\n    const headers: Record<string, string> = {};\n    if (headroomMode) headers[\"x-headroom-mode\"] = headroomMode;\n\n    const providerKey = this.client.providerApiKey ?? getEnv(\"OPENAI_API_KEY\");\n    if (providerKey) headers[\"Authorization\"] = `Bearer ${providerKey}`;\n\n    const response = await this.client.rawFetch(\"/v1/chat/completions\", {\n      method: \"POST\",\n      headers,\n      body: apiParams,\n      stream: params.stream,\n    });\n\n    if (params.stream) {\n      return parseSSE(response);\n    }\n\n    return response.json();\n  }\n\n  /**\n   * Simulate compression without calling the LLM.\n   */\n  async simulate(\n    params: { model: string; messages: OpenAIMessage[] } & HeadroomParams,\n  ): Promise<SimulationResult> {\n    const body = {\n      messages: params.messages,\n      model: params.model,\n      config: { default_mode: \"simulate\", generate_diff_artifact: true },\n    };\n    const result = await this.client.compressRaw(body);\n    return deepCamelCase<SimulationResult>(result);\n  }\n}\n\nclass Messages {\n  constructor(private client: HeadroomClient) {}\n\n  /**\n   * Create a message with automatic compression.\n   * Routes through proxy's POST /v1/messages (Anthropic).\n   */\n  async create(\n    params: { model: string; messages: any[]; max_tokens?: number; system?: string | any[]; stream?: boolean; [key: string]: any } & HeadroomParams,\n  ): Promise<any> {\n    const { headroomMode, headroomCachePrefixTokens, headroomOutputBufferTokens, headroomKeepTurns, headroomToolProfiles, ...apiParams } = params;\n\n    const headers: Record<string, string> = {\n      \"anthropic-version\": \"2023-06-01\",\n    };\n    if (headroomMode) headers[\"x-headroom-mode\"] = headroomMode;\n\n    const providerKey = this.client.providerApiKey ?? getEnv(\"ANTHROPIC_API_KEY\");\n    if (providerKey) headers[\"x-api-key\"] = providerKey;\n\n    if (!apiParams.max_tokens) apiParams.max_tokens = 1024;\n\n    const response = await this.client.rawFetch(\"/v1/messages\", {\n      method: \"POST\",\n      headers,\n      body: apiParams,\n      stream: params.stream,\n    });\n\n    if (params.stream) {\n      return parseSSE(response);\n    }\n\n    return response.json();\n  }\n\n  /**\n   * Stream a message with automatic compression.\n   */\n  stream(\n    params: { model: string; messages: any[]; max_tokens?: number; system?: string | any[]; [key: string]: any } & HeadroomParams,\n  ): Promise<AsyncGenerator<any>> {\n    return this.create({ ...params, stream: true }) as Promise<AsyncGenerator<any>>;\n  }\n\n  /**\n   * Simulate compression without calling the LLM.\n   */\n  async simulate(\n    params: { model: string; messages: any[] } & HeadroomParams,\n  ): Promise<SimulationResult> {\n    const body = {\n      messages: params.messages,\n      model: params.model,\n      config: { default_mode: \"simulate\", generate_diff_artifact: true },\n    };\n    const result = await this.client.compressRaw(body);\n    return deepCamelCase<SimulationResult>(result);\n  }\n}\n\n// --- Main client ---\n\nexport interface ExtendedClientOptions extends HeadroomClientOptions {\n  providerApiKey?: string;\n  defaultMode?: HeadroomMode;\n  config?: HeadroomConfig;\n}\n\nexport class HeadroomClient implements HeadroomClientInterface {\n  private baseUrl: string;\n  private apiKey: string | undefined;\n  private timeout: number;\n  private fallback: boolean;\n  private retries: number;\n  private config: HeadroomConfig | undefined;\n  private stack: string | undefined;\n\n  /** @internal */ providerApiKey: string | undefined;\n\n  /** OpenAI-style chat completions API. */\n  readonly chat: { completions: ChatCompletions };\n  /** Anthropic-style messages API. */\n  readonly messages: Messages;\n\n  constructor(options: ExtendedClientOptions = {}) {\n    this.baseUrl = (\n      options.baseUrl ??\n      getEnv(\"HEADROOM_BASE_URL\") ??\n      DEFAULT_BASE_URL\n    ).replace(/\\/+$/, \"\");\n    this.apiKey = options.apiKey ?? getEnv(\"HEADROOM_API_KEY\");\n    this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n    this.fallback = options.fallback ?? true;\n    this.retries = options.retries ?? DEFAULT_RETRIES;\n    this.providerApiKey = options.providerApiKey;\n    this.config = options.config;\n    this.stack = options.stack;\n\n    this.chat = { completions: new ChatCompletions(this) };\n    this.messages = new Messages(this);\n  }\n\n  // ============================================================\n  // Core: compress\n  // ============================================================\n\n  async compress(\n    messages: OpenAIMessage[],\n    options: { model?: string; tokenBudget?: number } = {},\n  ): Promise<CompressResult> {\n    const model = options.model ?? \"gpt-4o\";\n\n    let lastError: unknown;\n    const maxAttempts = 1 + this.retries;\n\n    for (let attempt = 0; attempt < maxAttempts; attempt++) {\n      try {\n        return await this._doCompress(messages, model, options.tokenBudget);\n      } catch (error) {\n        lastError = error;\n        if (error instanceof HeadroomAuthError) throw error;\n        if (\n          error instanceof HeadroomCompressError &&\n          error.statusCode < 500\n        ) {\n          throw error;\n        }\n      }\n    }\n\n    if (this.fallback) {\n      return makeFallbackResult(messages);\n    }\n    if (lastError instanceof HeadroomConnectionError) throw lastError;\n    if (lastError instanceof HeadroomCompressError) throw lastError;\n    throw new HeadroomConnectionError(\n      `Failed after ${maxAttempts} attempts: ${lastError}`,\n    );\n  }\n\n  /**\n   * Raw compress call — sends body directly to /v1/compress.\n   * Used by simulate() and other advanced features.\n   * @internal\n   */\n  async compressRaw(body: Record<string, any>): Promise<any> {\n    const response = await this._fetch(\"/v1/compress\", {\n      method: \"POST\",\n      body: JSON.stringify(body),\n    });\n    return response.json();\n  }\n\n  // ============================================================\n  // Health & Stats\n  // ============================================================\n\n  /** Check if the proxy is running and healthy. */\n  async health(): Promise<HealthStatus> {\n    const resp = await this._fetch(\"/health\", { method: \"GET\" });\n    return deepCamelCase<HealthStatus>(await resp.json());\n  }\n\n  /** Get comprehensive proxy statistics. */\n  async proxyStats(): Promise<ProxyStats> {\n    const resp = await this._fetch(\"/stats\", { method: \"GET\" });\n    return deepCamelCase<ProxyStats>(await resp.json());\n  }\n\n  /** Get Prometheus-format metrics. */\n  async prometheusMetrics(): Promise<string> {\n    const resp = await this._fetch(\"/metrics\", { method: \"GET\" });\n    return resp.text();\n  }\n\n  /** Get historical stats. */\n  async statsHistory(query?: StatsHistoryQuery): Promise<any> {\n    const params = new URLSearchParams();\n    if (query?.format) params.set(\"format\", query.format);\n    if (query?.series) params.set(\"series\", query.series);\n    const qs = params.toString();\n    const resp = await this._fetch(`/stats-history${qs ? `?${qs}` : \"\"}`, { method: \"GET\" });\n    return resp.json();\n  }\n\n  /** Get proxy memory usage. */\n  async memoryUsage(): Promise<MemoryUsage> {\n    const resp = await this._fetch(\"/debug/memory\", { method: \"GET\" });\n    return deepCamelCase<MemoryUsage>(await resp.json());\n  }\n\n  /** Clear the response cache. */\n  async clearCache(): Promise<{ status: string }> {\n    const resp = await this._fetch(\"/cache/clear\", { method: \"POST\" });\n    return resp.json() as Promise<{ status: string }>;\n  }\n\n  // ============================================================\n  // Metrics & Observability\n  // ============================================================\n\n  /** Get request metrics from the proxy. */\n  async getMetrics(query?: MetricsQuery): Promise<RequestMetrics[]> {\n    const resp = await this._fetch(\"/stats\", { method: \"GET\" });\n    const stats = (await resp.json()) as any;\n    let metrics: any[] = stats.recent_requests ?? [];\n\n    if (query?.model) {\n      metrics = metrics.filter((m: any) => m.model === query.model);\n    }\n    if (query?.mode) {\n      metrics = metrics.filter((m: any) => m.mode === query.mode);\n    }\n    if (query?.limit) {\n      metrics = metrics.slice(0, query.limit);\n    }\n\n    return metrics.map((m: any) => deepCamelCase<RequestMetrics>(m));\n  }\n\n  /** Get aggregated metrics summary. */\n  async getSummary(query?: SummaryQuery): Promise<MetricsSummary> {\n    const resp = await this._fetch(\"/stats\", { method: \"GET\" });\n    const stats = (await resp.json()) as any;\n    return deepCamelCase<MetricsSummary>({\n      total_requests: stats.requests?.total ?? 0,\n      total_tokens_before: stats.tokens?.total_before_compression ?? 0,\n      total_tokens_after: (stats.tokens?.total_before_compression ?? 0) - (stats.tokens?.saved ?? 0),\n      total_tokens_saved: stats.tokens?.saved ?? 0,\n      average_compression_ratio: stats.tokens?.savings_percent ? stats.tokens.savings_percent / 100 : 0,\n      models: stats.requests?.by_model ?? {},\n      modes: {},\n      error_count: stats.requests?.failed ?? 0,\n    });\n  }\n\n  /** Get in-memory session stats. */\n  async getStats(): Promise<SessionStats> {\n    const resp = await this._fetch(\"/stats\", { method: \"GET\" });\n    const stats = (await resp.json()) as any;\n    return deepCamelCase<SessionStats>({\n      total_requests: stats.requests?.total ?? 0,\n      total_tokens_before: stats.tokens?.total_before_compression ?? 0,\n      total_tokens_after: (stats.tokens?.total_before_compression ?? 0) - (stats.tokens?.saved ?? 0),\n      total_tokens_saved: stats.tokens?.saved ?? 0,\n      average_compression_ratio: stats.tokens?.savings_percent ? stats.tokens.savings_percent / 100 : 0,\n      cache_hits: stats.requests?.cached ?? 0,\n      by_mode: {},\n    });\n  }\n\n  /** Validate proxy configuration. */\n  async validateSetup(): Promise<ValidationResult> {\n    const resp = await this._fetch(\"/health\", { method: \"GET\" });\n    const health = (await resp.json()) as any;\n    return {\n      valid: health.status === \"healthy\",\n      provider: \"\",\n      errors: health.status !== \"healthy\" ? [\"Proxy unhealthy\"] : [],\n      warnings: [],\n      config: health.config ?? {},\n    };\n  }\n\n  // ============================================================\n  // CCR Retrieve\n  // ============================================================\n\n  /** Retrieve original content from the CCR compression store. */\n  async retrieve(\n    hash: string,\n    options?: { query?: string },\n  ): Promise<RetrieveResult | RetrieveSearchResult> {\n    const body: Record<string, any> = { hash };\n    if (options?.query) body.query = options.query;\n    const resp = await this._fetch(\"/v1/retrieve\", {\n      method: \"POST\",\n      body: JSON.stringify(body),\n    });\n    return deepCamelCase(await resp.json());\n  }\n\n  /** Get CCR store statistics. */\n  async getCCRStats(): Promise<CCRStats> {\n    const resp = await this._fetch(\"/v1/retrieve/stats\", { method: \"GET\" });\n    return deepCamelCase<CCRStats>(await resp.json());\n  }\n\n  /** Handle an LLM tool call for headroom_retrieve. */\n  async handleToolCall(request: {\n    toolCall: any;\n    provider?: \"anthropic\" | \"openai\";\n  }): Promise<any> {\n    const resp = await this._fetch(\"/v1/retrieve/tool_call\", {\n      method: \"POST\",\n      body: JSON.stringify(deepSnakeCase(request)),\n    });\n    return deepCamelCase(await resp.json());\n  }\n\n  // ============================================================\n  // Telemetry & Feedback\n  // ============================================================\n\n  readonly telemetry = {\n    getStats: async (): Promise<TelemetryStats> => {\n      const resp = await this._fetch(\"/v1/telemetry\", { method: \"GET\" });\n      return deepCamelCase<TelemetryStats>(await resp.json());\n    },\n    export: async (): Promise<any> => {\n      const resp = await this._fetch(\"/v1/telemetry/export\", { method: \"GET\" });\n      return resp.json();\n    },\n    import: async (data: any): Promise<{ status: string }> => {\n      const resp = await this._fetch(\"/v1/telemetry/import\", {\n        method: \"POST\",\n        body: JSON.stringify(data),\n      });\n      return resp.json() as Promise<{ status: string }>;\n    },\n    getTools: async (): Promise<any> => {\n      const resp = await this._fetch(\"/v1/telemetry/tools\", { method: \"GET\" });\n      return deepCamelCase(await resp.json());\n    },\n    getTool: async (signatureHash: string): Promise<any> => {\n      const resp = await this._fetch(`/v1/telemetry/tools/${signatureHash}`, { method: \"GET\" });\n      return deepCamelCase(await resp.json());\n    },\n  };\n\n  readonly feedback = {\n    getStats: async (): Promise<any> => {\n      const resp = await this._fetch(\"/v1/feedback\", { method: \"GET\" });\n      return deepCamelCase(await resp.json());\n    },\n    getHints: async (toolName: string): Promise<ToolHints> => {\n      const resp = await this._fetch(`/v1/feedback/${encodeURIComponent(toolName)}`, { method: \"GET\" });\n      return deepCamelCase<ToolHints>(await resp.json());\n    },\n  };\n\n  readonly toin = {\n    getStats: async (): Promise<TOINStats> => {\n      const resp = await this._fetch(\"/v1/toin/stats\", { method: \"GET\" });\n      return deepCamelCase<TOINStats>(await resp.json());\n    },\n    getPatterns: async (limit?: number): Promise<TOINPattern[]> => {\n      const qs = limit ? `?limit=${limit}` : \"\";\n      const resp = await this._fetch(`/v1/toin/patterns${qs}`, { method: \"GET\" });\n      return deepCamelCase<TOINPattern[]>(await resp.json());\n    },\n    getPattern: async (hashPrefix: string): Promise<any> => {\n      const resp = await this._fetch(`/v1/toin/pattern/${encodeURIComponent(hashPrefix)}`, { method: \"GET\" });\n      return deepCamelCase(await resp.json());\n    },\n  };\n\n  // ============================================================\n  // Lifecycle\n  // ============================================================\n\n  /** Close the client (no-op for HTTP client, included for API parity). */\n  close(): void {\n    // HTTP client is stateless — nothing to close\n  }\n\n  // ============================================================\n  // Internal HTTP helpers\n  // ============================================================\n\n  /**\n   * Raw fetch with proxy base URL, auth, and timeout.\n   * @internal\n   */\n  async rawFetch(\n    path: string,\n    options: { method: string; headers?: Record<string, string>; body?: any; stream?: boolean },\n  ): Promise<Response> {\n    const url = `${this.baseUrl}${path}`;\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      ...options.headers,\n    };\n    if (this.apiKey) {\n      // Don't override provider auth headers\n      if (!headers[\"Authorization\"] && !headers[\"x-api-key\"]) {\n        headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n      }\n    }\n    if (this.stack && !headers[\"X-Headroom-Stack\"]) {\n      headers[\"X-Headroom-Stack\"] = this.stack;\n    }\n\n    let response: Response;\n    try {\n      response = await fetch(url, {\n        method: options.method,\n        headers,\n        body: options.body ? JSON.stringify(options.body) : undefined,\n        signal: AbortSignal.timeout(this.timeout),\n      });\n    } catch (error) {\n      throw new HeadroomConnectionError(\n        `Failed to connect to Headroom at ${this.baseUrl}: ${error}`,\n      );\n    }\n\n    if (!response.ok) {\n      let errorBody: ProxyErrorResponse | undefined;\n      try {\n        errorBody = (await response.json()) as ProxyErrorResponse;\n      } catch {\n        // ignore\n      }\n      throw mapProxyError(\n        response.status,\n        errorBody?.error?.type ?? \"unknown\",\n        errorBody?.error?.message ?? `HTTP ${response.status}`,\n      );\n    }\n\n    return response;\n  }\n\n  /** @internal */\n  private async _fetch(\n    path: string,\n    init: { method: string; body?: string; headers?: Record<string, string> },\n  ): Promise<Response> {\n    const url = `${this.baseUrl}${path}`;\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      ...init.headers,\n    };\n    if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n    if (this.stack && !headers[\"X-Headroom-Stack\"]) {\n      headers[\"X-Headroom-Stack\"] = this.stack;\n    }\n\n    let response: Response;\n    try {\n      response = await fetch(url, {\n        method: init.method,\n        headers,\n        body: init.body,\n        signal: AbortSignal.timeout(this.timeout),\n      });\n    } catch (error) {\n      throw new HeadroomConnectionError(\n        `Failed to connect to Headroom at ${this.baseUrl}: ${error}`,\n      );\n    }\n\n    if (!response.ok) {\n      let errorBody: ProxyErrorResponse | undefined;\n      try {\n        errorBody = (await response.json()) as ProxyErrorResponse;\n      } catch {\n        // ignore\n      }\n      throw mapProxyError(\n        response.status,\n        errorBody?.error?.type ?? \"unknown\",\n        errorBody?.error?.message ?? `HTTP ${response.status}`,\n      );\n    }\n\n    return response;\n  }\n\n  private async _doCompress(\n    messages: OpenAIMessage[],\n    model: string,\n    tokenBudget?: number,\n  ): Promise<CompressResult> {\n    const body: Record<string, unknown> = { messages, model };\n    if (tokenBudget) {\n      body.token_budget = tokenBudget;\n    }\n    if (this.config) {\n      body.config = deepSnakeCase(this.config);\n    }\n\n    const response = await this._fetch(\"/v1/compress\", {\n      method: \"POST\",\n      body: JSON.stringify(body),\n    });\n\n    const data = (await response.json()) as ProxyCompressResponse;\n\n    return {\n      messages: data.messages,\n      tokensBefore: data.tokens_before,\n      tokensAfter: data.tokens_after,\n      tokensSaved: data.tokens_saved,\n      compressionRatio: data.compression_ratio,\n      transformsApplied: data.transforms_applied,\n      ccrHashes: data.ccr_hashes,\n      compressed: true,\n    };\n  }\n}\n","/**\n * Universal message format detection and conversion.\n *\n * Supports 4 formats:\n *   - OpenAI:   { role, content, tool_calls?, tool_call_id? }\n *   - Anthropic: { role, content (string | ContentBlock[]) } with tool_use/tool_result blocks\n *   - Vercel AI SDK: { role, content (string | Part[]) } with tool-call/tool-result parts\n *   - Google Gemini: { role, parts[] } with functionCall/functionResponse\n *\n * Detection is structural (unique keys/values per format), not heuristic.\n * Conversion always targets OpenAI format (the proxy's lingua franca).\n */\n\nimport type {\n  OpenAIMessage,\n  AssistantMessage,\n  ToolCall,\n} from \"../types.js\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MessageFormat = \"openai\" | \"anthropic\" | \"vercel\" | \"gemini\";\n\n/**\n * Detect which format an array of messages is in.\n *\n * Uses structural markers unique to each format:\n *   - Gemini: messages have `parts` field (not `content`)\n *   - Vercel: content parts use hyphenated types: `tool-call`, `tool-result`\n *   - Anthropic: content blocks use underscored types: `tool_use`, `tool_result`\n *   - OpenAI: assistant messages have `tool_calls` field; tool messages have `tool_call_id`\n */\nexport function detectFormat(messages: any[]): MessageFormat {\n  for (const msg of messages) {\n    // Gemini: uses `parts` instead of `content`\n    if (\"parts\" in msg && !(\"content\" in msg)) return \"gemini\";\n\n    // Gemini: role \"model\" instead of \"assistant\"\n    if (msg.role === \"model\") return \"gemini\";\n\n    // OpenAI: tool_calls on assistant messages\n    if (msg.tool_calls && msg.role === \"assistant\") return \"openai\";\n\n    // OpenAI: tool role with tool_call_id\n    if (msg.role === \"tool\" && \"tool_call_id\" in msg && typeof msg.content === \"string\") return \"openai\";\n\n    // Check content blocks/parts for format-specific markers\n    if (Array.isArray(msg.content)) {\n      for (const part of msg.content) {\n        // Vercel: hyphenated types\n        if (part.type === \"tool-call\" || part.type === \"tool-result\") return \"vercel\";\n        // Anthropic: underscored types\n        if (part.type === \"tool_use\" || part.type === \"tool_result\") return \"anthropic\";\n        // Anthropic: image with source.type\n        if (part.type === \"image\" && part.source?.type) return \"anthropic\";\n      }\n    }\n  }\n\n  // Default: OpenAI (simple {role, content: string} is valid OpenAI)\n  return \"openai\";\n}\n\n// ============================================================\n// OpenAI ↔ OpenAI (passthrough)\n// ============================================================\n\n// No conversion needed — this is the canonical format.\n\n// ============================================================\n// Anthropic → OpenAI\n// ============================================================\n\nexport function anthropicToOpenAI(messages: any[]): OpenAIMessage[] {\n  const result: OpenAIMessage[] = [];\n\n  for (const msg of messages) {\n    if (msg.role === \"user\") {\n      if (typeof msg.content === \"string\") {\n        result.push({ role: \"user\", content: msg.content });\n        continue;\n      }\n      if (Array.isArray(msg.content)) {\n        const textBlocks = msg.content.filter((b: any) => b.type === \"text\");\n        const toolResults = msg.content.filter((b: any) => b.type === \"tool_result\");\n\n        if (textBlocks.length > 0) {\n          result.push({\n            role: \"user\",\n            content: textBlocks.map((b: any) => b.text).join(\"\\n\"),\n          });\n        }\n        for (const tr of toolResults) {\n          const content = typeof tr.content === \"string\"\n            ? tr.content\n            : Array.isArray(tr.content)\n              ? tr.content.map((b: any) => b.text ?? JSON.stringify(b)).join(\"\\n\")\n              : JSON.stringify(tr.content);\n          result.push({\n            role: \"tool\",\n            content,\n            tool_call_id: tr.tool_use_id,\n          });\n        }\n      }\n      continue;\n    }\n\n    if (msg.role === \"assistant\") {\n      if (typeof msg.content === \"string\") {\n        result.push({ role: \"assistant\", content: msg.content });\n        continue;\n      }\n      if (Array.isArray(msg.content)) {\n        const textBlocks = msg.content.filter((b: any) => b.type === \"text\");\n        const toolUseBlocks = msg.content.filter((b: any) => b.type === \"tool_use\");\n\n        const content = textBlocks.length > 0\n          ? textBlocks.map((b: any) => b.text).join(\"\\n\")\n          : null;\n\n        const openaiMsg: AssistantMessage = { role: \"assistant\", content };\n        if (toolUseBlocks.length > 0) {\n          openaiMsg.tool_calls = toolUseBlocks.map((b: any): ToolCall => ({\n            id: b.id,\n            type: \"function\",\n            function: {\n              name: b.name,\n              arguments: typeof b.input === \"string\" ? b.input : JSON.stringify(b.input),\n            },\n          }));\n        }\n        result.push(openaiMsg);\n      }\n      continue;\n    }\n  }\n\n  return result;\n}\n\nexport function openAIToAnthropic(messages: OpenAIMessage[]): any[] {\n  const result: any[] = [];\n\n  for (const msg of messages) {\n    if (msg.role === \"system\") {\n      // Anthropic system is top-level, but if it appears in messages, convert to user\n      result.push({ role: \"user\", content: msg.content });\n      continue;\n    }\n\n    if (msg.role === \"user\") {\n      if (typeof msg.content === \"string\") {\n        result.push({ role: \"user\", content: msg.content });\n      } else if (Array.isArray(msg.content)) {\n        result.push({\n          role: \"user\",\n          content: msg.content.map((p) =>\n            p.type === \"text\" ? { type: \"text\", text: p.text } : { type: \"text\", text: \"\" },\n          ),\n        });\n      }\n      continue;\n    }\n\n    if (msg.role === \"assistant\") {\n      const blocks: any[] = [];\n      if (msg.content) blocks.push({ type: \"text\", text: msg.content });\n      if (msg.tool_calls) {\n        for (const tc of msg.tool_calls) {\n          blocks.push({\n            type: \"tool_use\",\n            id: tc.id,\n            name: tc.function.name,\n            input: JSON.parse(tc.function.arguments),\n          });\n        }\n      }\n      result.push({\n        role: \"assistant\",\n        content: blocks.length === 1 && blocks[0].type === \"text\" ? blocks[0].text : blocks,\n      });\n      continue;\n    }\n\n    if (msg.role === \"tool\") {\n      result.push({\n        role: \"user\",\n        content: [\n          { type: \"tool_result\", tool_use_id: msg.tool_call_id, content: msg.content },\n        ],\n      });\n      continue;\n    }\n  }\n\n  return result;\n}\n\n// ============================================================\n// Vercel AI SDK → OpenAI\n// ============================================================\n\nexport function vercelToOpenAI(messages: any[]): OpenAIMessage[] {\n  const result: OpenAIMessage[] = [];\n\n  for (const msg of messages) {\n    if (msg.role === \"system\") {\n      result.push({ role: \"system\", content: typeof msg.content === \"string\" ? msg.content : String(msg.content) });\n      continue;\n    }\n\n    if (msg.role === \"user\") {\n      if (typeof msg.content === \"string\") {\n        result.push({ role: \"user\", content: msg.content });\n        continue;\n      }\n      const parts = Array.isArray(msg.content) ? msg.content : [];\n      const textParts = parts.filter((p: any) => p.type === \"text\");\n      const imageParts = parts.filter((p: any) => p.type === \"image\");\n\n      if (imageParts.length === 0 && textParts.length > 0) {\n        result.push({ role: \"user\", content: textParts.map((p: any) => p.text).join(\"\") });\n      } else {\n        const openaiParts = parts\n          .filter((p: any) => p.type === \"text\" || p.type === \"image\")\n          .map((p: any) => {\n            if (p.type === \"text\") return { type: \"text\" as const, text: p.text };\n            if (p.type === \"image\") {\n              const url = p.image instanceof URL ? p.image.toString() : String(p.image);\n              return { type: \"image_url\" as const, image_url: { url } };\n            }\n            return { type: \"text\" as const, text: \"\" };\n          });\n        result.push({ role: \"user\", content: openaiParts });\n      }\n      continue;\n    }\n\n    if (msg.role === \"assistant\") {\n      if (typeof msg.content === \"string\") {\n        result.push({ role: \"assistant\", content: msg.content });\n        continue;\n      }\n      const parts = Array.isArray(msg.content) ? msg.content : [];\n      const textParts = parts.filter((p: any) => p.type === \"text\");\n      const toolCallParts = parts.filter((p: any) => p.type === \"tool-call\");\n\n      const content = textParts.length > 0 ? textParts.map((p: any) => p.text).join(\"\") : null;\n      const openaiMsg: AssistantMessage = { role: \"assistant\", content };\n\n      if (toolCallParts.length > 0) {\n        openaiMsg.tool_calls = toolCallParts.map((p: any): ToolCall => ({\n          id: p.toolCallId,\n          type: \"function\",\n          // AI SDK v6 uses `input`, earlier versions used `args`\n          function: { name: p.toolName, arguments: JSON.stringify(p.input ?? p.args) },\n        }));\n      }\n      result.push(openaiMsg);\n      continue;\n    }\n\n    if (msg.role === \"tool\") {\n      const parts = Array.isArray(msg.content) ? msg.content : [];\n      for (const part of parts) {\n        if (part.type === \"tool-result\") {\n          // AI SDK v6 uses `output: { type, value }`, earlier versions used `result`\n          let contentStr: string;\n          if (part.output !== undefined) {\n            // v6 format: output is { type: 'json', value } or { type: 'text', value }\n            const val = part.output?.value ?? part.output;\n            contentStr = typeof val === \"string\" ? val : JSON.stringify(val);\n          } else if (part.result !== undefined) {\n            // Legacy format: result field directly\n            contentStr = typeof part.result === \"string\" ? part.result : JSON.stringify(part.result);\n          } else {\n            contentStr = \"\";\n          }\n          result.push({\n            role: \"tool\",\n            content: contentStr,\n            tool_call_id: part.toolCallId,\n          });\n        }\n      }\n      continue;\n    }\n  }\n\n  return result;\n}\n\nexport function openAIToVercel(messages: OpenAIMessage[]): any[] {\n  const result: any[] = [];\n\n  for (const msg of messages) {\n    if (msg.role === \"system\") {\n      result.push({ role: \"system\", content: msg.content });\n      continue;\n    }\n\n    if (msg.role === \"user\") {\n      if (typeof msg.content === \"string\") {\n        result.push({ role: \"user\", content: [{ type: \"text\", text: msg.content }] });\n      } else if (Array.isArray(msg.content)) {\n        const parts = msg.content.map((p) => {\n          if (p.type === \"text\") return { type: \"text\", text: p.text };\n          if (p.type === \"image_url\") return { type: \"image\", image: new URL(p.image_url.url) };\n          return { type: \"text\", text: \"\" };\n        });\n        result.push({ role: \"user\", content: parts });\n      }\n      continue;\n    }\n\n    if (msg.role === \"assistant\") {\n      const parts: any[] = [];\n      if (msg.content) parts.push({ type: \"text\", text: msg.content });\n      if (msg.tool_calls) {\n        for (const tc of msg.tool_calls) {\n          let input: any;\n          try { input = JSON.parse(tc.function.arguments); } catch { input = tc.function.arguments ?? {}; }\n          parts.push({\n            type: \"tool-call\",\n            toolCallId: tc.id,\n            toolName: tc.function.name,\n            input, // AI SDK v6 uses `input`, not `args`\n          });\n        }\n      }\n      result.push({ role: \"assistant\", content: parts });\n      continue;\n    }\n\n    if (msg.role === \"tool\") {\n      let parsed: any;\n      try { parsed = JSON.parse(msg.content); } catch { parsed = msg.content; }\n      // AI SDK v6 requires output: { type: 'json' | 'text', value }\n      const output = typeof parsed === \"string\"\n        ? { type: \"text\" as const, value: parsed }\n        : { type: \"json\" as const, value: parsed };\n      result.push({\n        role: \"tool\",\n        content: [{\n          type: \"tool-result\",\n          toolCallId: msg.tool_call_id,\n          toolName: \"unknown\",\n          output,\n        }],\n      });\n      continue;\n    }\n  }\n\n  return result;\n}\n\n// ============================================================\n// Google Gemini → OpenAI\n// ============================================================\n\nexport function geminiToOpenAI(messages: any[]): OpenAIMessage[] {\n  const result: OpenAIMessage[] = [];\n\n  for (const msg of messages) {\n    const role = msg.role === \"model\" ? \"assistant\" : \"user\";\n    const parts: any[] = msg.parts ?? [];\n\n    if (role === \"user\") {\n      // Check for functionResponse parts\n      const funcResponses = parts.filter((p: any) => p.functionResponse);\n      const textParts = parts.filter((p: any) => p.text !== undefined);\n\n      if (textParts.length > 0) {\n        result.push({ role: \"user\", content: textParts.map((p: any) => p.text).join(\"\\n\") });\n      }\n      for (const fr of funcResponses) {\n        result.push({\n          role: \"tool\",\n          content: JSON.stringify(fr.functionResponse.response),\n          tool_call_id: `gemini_${fr.functionResponse.name}`,\n        });\n      }\n      continue;\n    }\n\n    if (role === \"assistant\") {\n      const textParts = parts.filter((p: any) => p.text !== undefined);\n      const funcCalls = parts.filter((p: any) => p.functionCall);\n\n      const content = textParts.length > 0 ? textParts.map((p: any) => p.text).join(\"\\n\") : null;\n      const openaiMsg: AssistantMessage = { role: \"assistant\", content };\n\n      if (funcCalls.length > 0) {\n        openaiMsg.tool_calls = funcCalls.map((p: any): ToolCall => ({\n          id: `gemini_${p.functionCall.name}`,\n          type: \"function\",\n          function: {\n            name: p.functionCall.name,\n            arguments: JSON.stringify(p.functionCall.args),\n          },\n        }));\n      }\n      result.push(openaiMsg);\n      continue;\n    }\n  }\n\n  return result;\n}\n\nexport function openAIToGemini(messages: OpenAIMessage[]): any[] {\n  const result: any[] = [];\n\n  for (const msg of messages) {\n    if (msg.role === \"system\") {\n      // Gemini system is top-level; if in messages, convert to user\n      result.push({ role: \"user\", parts: [{ text: msg.content }] });\n      continue;\n    }\n\n    if (msg.role === \"user\") {\n      const text = typeof msg.content === \"string\"\n        ? msg.content\n        : (msg.content ?? []).filter((p) => p.type === \"text\").map((p) => (p as any).text).join(\"\\n\");\n      result.push({ role: \"user\", parts: [{ text }] });\n      continue;\n    }\n\n    if (msg.role === \"assistant\") {\n      const parts: any[] = [];\n      if (msg.content) parts.push({ text: msg.content });\n      if (msg.tool_calls) {\n        for (const tc of msg.tool_calls) {\n          parts.push({\n            functionCall: { name: tc.function.name, args: JSON.parse(tc.function.arguments) },\n          });\n        }\n      }\n      result.push({ role: \"model\", parts });\n      continue;\n    }\n\n    if (msg.role === \"tool\") {\n      let response: any;\n      try { response = JSON.parse(msg.content); } catch { response = { result: msg.content }; }\n      result.push({\n        role: \"user\",\n        parts: [{ functionResponse: { name: msg.tool_call_id?.replace(\"gemini_\", \"\") ?? \"unknown\", response } }],\n      });\n      continue;\n    }\n  }\n\n  return result;\n}\n\n// ============================================================\n// Universal: any format → OpenAI, and OpenAI → original format\n// ============================================================\n\nexport function toOpenAI(messages: any[]): OpenAIMessage[] {\n  const format = detectFormat(messages);\n  switch (format) {\n    case \"openai\": return messages as OpenAIMessage[];\n    case \"anthropic\": return anthropicToOpenAI(messages);\n    case \"vercel\": return vercelToOpenAI(messages);\n    case \"gemini\": return geminiToOpenAI(messages);\n  }\n}\n\nexport function fromOpenAI(messages: OpenAIMessage[], targetFormat: MessageFormat): any[] {\n  switch (targetFormat) {\n    case \"openai\": return messages;\n    case \"anthropic\": return openAIToAnthropic(messages);\n    case \"vercel\": return openAIToVercel(messages);\n    case \"gemini\": return openAIToGemini(messages);\n  }\n}\n","/**\n * Compression hooks matching Python headroom.hooks.\n * Allows customizing compression behavior with pre/post hooks.\n */\n\nexport interface CompressContext {\n  model: string;\n  userQuery: string;\n  turnNumber: number;\n  toolCalls: string[];\n  provider: string;\n}\n\nexport interface CompressEvent {\n  tokensBefore: number;\n  tokensAfter: number;\n  tokensSaved: number;\n  compressionRatio: number;\n  transformsApplied: string[];\n  ccrHashes: string[];\n  model: string;\n  userQuery: string;\n  provider: string;\n}\n\n/**\n * Base class for compression hooks. Override methods to customize behavior.\n *\n * @example\n * ```typescript\n * class LoggingHooks extends CompressionHooks {\n *   postCompress(event: CompressEvent) {\n *     console.log(`Saved ${event.tokensSaved} tokens (${event.compressionRatio})`);\n *   }\n * }\n * ```\n */\nexport class CompressionHooks {\n  /**\n   * Called before compression. Modify messages before they're sent to the proxy.\n   */\n  preCompress(\n    messages: any[],\n    _ctx: CompressContext,\n  ): any[] | Promise<any[]> {\n    return messages;\n  }\n\n  /**\n   * Compute per-message compression biases.\n   * Return a map of message index -> bias (>1 = preserve more, <1 = compress more).\n   */\n  computeBiases(\n    _messages: any[],\n    _ctx: CompressContext,\n  ): Record<number, number> | Promise<Record<number, number>> {\n    return {};\n  }\n\n  /**\n   * Called after compression. Observe-only — cannot modify the result.\n   */\n  postCompress(_event: CompressEvent): void | Promise<void> {\n    // no-op default\n  }\n}\n\n/**\n * Extract the last user message text from a messages array (any format).\n */\nexport function extractUserQuery(messages: any[]): string {\n  for (let i = messages.length - 1; i >= 0; i--) {\n    const msg = messages[i];\n    if (msg.role === \"user\") {\n      if (typeof msg.content === \"string\") return msg.content;\n      if (Array.isArray(msg.content)) {\n        const textPart = msg.content.find(\n          (p: any) => p.type === \"text\" || p.text,\n        );\n        if (textPart) return textPart.text ?? textPart.content ?? \"\";\n      }\n    }\n  }\n  return \"\";\n}\n\n/**\n * Count conversation turns (user+assistant pairs).\n */\nexport function countTurns(messages: any[]): number {\n  return messages.filter((m) => m.role === \"user\").length;\n}\n\n/**\n * Extract tool call names from messages.\n */\nexport function extractToolCalls(messages: any[]): string[] {\n  const names: string[] = [];\n  for (const msg of messages) {\n    if (msg.tool_calls) {\n      for (const tc of msg.tool_calls) {\n        names.push(tc.function?.name ?? tc.name ?? \"unknown\");\n      }\n    }\n    if (Array.isArray(msg.content)) {\n      for (const part of msg.content) {\n        if (part.type === \"tool_use\") names.push(part.name ?? \"unknown\");\n        if (part.type === \"tool-call\") names.push(part.toolName ?? \"unknown\");\n      }\n    }\n  }\n  return names;\n}\n","/**\n * Universal compress function with hooks support.\n * Accepts messages in any format: OpenAI, Anthropic, Vercel AI SDK, or Google Gemini.\n */\n\nimport { HeadroomClient } from \"./client.js\";\nimport type { CompressResult, CompressOptions } from \"./types.js\";\nimport { detectFormat, toOpenAI, fromOpenAI } from \"./utils/format.js\";\nimport type { CompressionHooks, CompressContext, CompressEvent } from \"./hooks.js\";\nimport { extractUserQuery, countTurns, extractToolCalls } from \"./hooks.js\";\n\n/**\n * Compress an array of messages using the Headroom proxy.\n *\n * Accepts messages in any format: OpenAI, Anthropic, Vercel AI SDK, or Google Gemini.\n * Detects the format automatically, compresses via the proxy, and returns\n * compressed messages in the same format as the input.\n */\nexport async function compress(\n  messages: any[],\n  options: CompressOptions = {},\n): Promise<CompressResult> {\n  const {\n    client: providedClient,\n    model,\n    tokenBudget,\n    hooks,\n    ...clientOptions\n  } = options;\n\n  // Build hook context\n  const ctx: CompressContext = {\n    model: model ?? \"gpt-4o\",\n    userQuery: extractUserQuery(messages),\n    turnNumber: countTurns(messages),\n    toolCalls: extractToolCalls(messages),\n    provider: \"\",\n  };\n\n  // 1. Pre-compress hook\n  let processedMessages = messages;\n  if (hooks) {\n    processedMessages = await hooks.preCompress(messages, ctx);\n  }\n\n  // 2. Detect input format\n  const inputFormat = detectFormat(processedMessages);\n\n  // 3. Convert to OpenAI format (the proxy's lingua franca)\n  const openaiMessages = toOpenAI(processedMessages);\n\n  // 4. Compute biases\n  let biases: Record<number, number> = {};\n  if (hooks) {\n    biases = await hooks.computeBiases(openaiMessages, ctx);\n  }\n\n  // 5. Compress via proxy\n  const client = providedClient ?? new HeadroomClient(clientOptions);\n  const result = await client.compress(openaiMessages, { model, tokenBudget });\n\n  // 6. Convert compressed messages back to original format\n  const outputMessages = fromOpenAI(result.messages, inputFormat);\n\n  const finalResult: CompressResult = {\n    ...result,\n    messages: outputMessages,\n  };\n\n  // 7. Post-compress hook\n  if (hooks) {\n    const event: CompressEvent = {\n      tokensBefore: result.tokensBefore,\n      tokensAfter: result.tokensAfter,\n      tokensSaved: result.tokensSaved,\n      compressionRatio: result.compressionRatio,\n      transformsApplied: result.transformsApplied,\n      ccrHashes: result.ccrHashes,\n      model: ctx.model,\n      userQuery: ctx.userQuery,\n      provider: ctx.provider,\n    };\n    await hooks.postCompress(event);\n  }\n\n  return finalResult;\n}\n"]}