/** * GlmtProxy - Embedded HTTP proxy for GLM thinking support * * Architecture: * - Intercepts Claude CLI → Z.AI calls * - Transforms Anthropic format → OpenAI format * - Converts reasoning_content → thinking blocks * - Supports both streaming and buffered modes * * Lifecycle: * - Spawned by bin/ccs.js when 'glmt' profile detected * - Binds to 127.0.0.1:random_port (security + avoid conflicts) * - Terminates when parent process exits * * Debugging: * - Verbose: Pass --verbose to see request/response logs * - Debug: Set CCS_DEBUG=1 to write logs to ~/.ccs/logs/ */ /// import * as http from 'http'; interface GlmtProxyConfig { verbose?: boolean; debugLog?: boolean; timeout?: number; } export declare class GlmtProxy { private transformer; private upstreamUrl; private server; private port; private verbose; private timeout; private retryConfig; private httpsAgent; constructor(config?: GlmtProxyConfig); /** * Start HTTP server on random port */ start(): Promise; /** * Handle incoming HTTP request */ handleRequest(req: http.IncomingMessage, res: http.ServerResponse): Promise; /** * Handle buffered (non-streaming) request */ private handleBufferedRequest; /** * Handle streaming request */ private handleStreamingRequest; /** * Read request body */ private readBody; /** * Sleep for specified milliseconds */ private sleep; /** * Calculate retry delay with exponential backoff and jitter * Honors Retry-After header if provided */ private calculateRetryDelay; /** * Check if error is retryable (429 rate limit) * Returns retryable status and optional Retry-After value */ private isRetryableError; /** * Forward request with retry logic for rate limit errors */ private forwardWithRetry; /** * Forward streaming request with retry logic for rate limit errors * Only retries if headers haven't been sent yet */ private forwardAndStreamWithRetry; /** * Forward request to Z.AI upstream */ private forwardToUpstream; /** * Forward request to Z.AI and stream response */ private forwardAndStreamUpstream; /** * Stop proxy server */ stop(): void; /** * Log message if verbose */ private log; /** * Format Authorization header based on endpoint type * OpenAI-compatible endpoints (chat/completions) require "Bearer " prefix * Anthropic-compatible endpoints use token directly */ private formatAuthHeader; /** * Parse upstream error and return user-friendly error info */ private parseUpstreamError; } export default GlmtProxy; //# sourceMappingURL=glmt-proxy.d.ts.map