@caeliq/llms 1.0.56 → 1.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/README.md +91 -10
  2. package/dist/api/middleware.d.ts +9 -0
  3. package/dist/api/routes.d.ts +15 -0
  4. package/dist/cjs/server.cjs +234 -227
  5. package/dist/cjs/server.cjs.map +4 -4
  6. package/dist/cursor-sdk/events-to-sse.d.ts +113 -0
  7. package/dist/cursor-sdk/hooks-template.d.ts +1 -0
  8. package/dist/cursor-sdk/prompt.d.ts +29 -0
  9. package/dist/cursor-sdk/runner.d.ts +11 -0
  10. package/dist/cursor-sdk/send.d.ts +9 -0
  11. package/dist/cursor-sdk/session.d.ts +146 -0
  12. package/dist/cursor-sdk/shared.d.ts +14 -0
  13. package/dist/cursor-sdk/tools.d.ts +4 -0
  14. package/dist/cursor-sdk/usage.d.ts +28 -0
  15. package/dist/esm/server.mjs +235 -228
  16. package/dist/esm/server.mjs.map +4 -4
  17. package/dist/index.d.ts +2 -0
  18. package/dist/plugins/index.d.ts +4 -0
  19. package/dist/plugins/output/console-handler.d.ts +23 -0
  20. package/dist/plugins/output/index.d.ts +29 -0
  21. package/dist/plugins/output/output-manager.d.ts +110 -0
  22. package/dist/plugins/output/temp-file-handler.d.ts +53 -0
  23. package/dist/plugins/output/types.d.ts +157 -0
  24. package/dist/plugins/output/webhook-handler.d.ts +37 -0
  25. package/dist/plugins/plugin-manager.d.ts +62 -0
  26. package/dist/plugins/token-speed.d.ts +22 -0
  27. package/dist/plugins/types.d.ts +25 -0
  28. package/dist/server.d.ts +60 -0
  29. package/dist/services/config.d.ts +32 -0
  30. package/dist/services/provider.d.ts +34 -0
  31. package/dist/services/tokenizer.d.ts +44 -0
  32. package/dist/services/transformer.d.ts +28 -0
  33. package/dist/tests/anthropic.stream-boundaries.d.ts +1 -0
  34. package/dist/tests/anthropic.stream-cancel.d.ts +1 -0
  35. package/dist/tests/antigravity.claude-tool-schema.d.ts +1 -0
  36. package/dist/tests/antigravity.endpoint-fallback.d.ts +1 -0
  37. package/dist/tests/cache-control.strip.d.ts +1 -0
  38. package/dist/tests/cache-paths.integration.d.ts +1 -0
  39. package/dist/tests/claude-auth.beta-headers.d.ts +1 -0
  40. package/dist/tests/codex-auth.reliability.d.ts +1 -0
  41. package/dist/tests/cursor-sdk.cancel.d.ts +1 -0
  42. package/dist/tests/cursor-sdk.on-delta-thinking.d.ts +1 -0
  43. package/dist/tests/cursor-sdk.progress-only.d.ts +1 -0
  44. package/dist/tests/cursor-sdk.runner-recovery.d.ts +1 -0
  45. package/dist/tests/cursor-sdk.send.d.ts +1 -0
  46. package/dist/tests/cursor-sdk.stream-error.d.ts +1 -0
  47. package/dist/tests/cursor-sdk.thinking-signature.d.ts +1 -0
  48. package/dist/tests/cursor-sdk.usage.d.ts +1 -0
  49. package/dist/tests/deepseek.reasoning.d.ts +1 -0
  50. package/dist/tests/gemini.abnormal-finish.d.ts +1 -0
  51. package/dist/tests/gemini.dual-dialect-request.d.ts +1 -0
  52. package/dist/tests/gemini.function-call-signatures.d.ts +1 -0
  53. package/dist/tests/gemini.parity.d.ts +1 -0
  54. package/dist/tests/gemini.thinking-effort.d.ts +1 -0
  55. package/dist/tests/gemini.thought-signature-roundtrip.d.ts +1 -0
  56. package/dist/tests/opencode-headers.no-provider-retry.d.ts +1 -0
  57. package/dist/tests/thinking-sequencer.dual-dialect.d.ts +1 -0
  58. package/dist/tests/transformer-service.endpoints.d.ts +1 -0
  59. package/dist/tests/upstream-ports.smoke.d.ts +1 -0
  60. package/dist/tokenizer/api-tokenizer.d.ts +45 -0
  61. package/dist/tokenizer/huggingface-tokenizer.d.ts +52 -0
  62. package/dist/tokenizer/tiktoken-tokenizer.d.ts +20 -0
  63. package/dist/transformer/anthropic.transformer.d.ts +22 -0
  64. package/dist/transformer/antigravity-auth.transformer.d.ts +15 -0
  65. package/dist/transformer/cerebras.transformer.d.ts +16 -0
  66. package/dist/transformer/chrome-on-device.transformer.d.ts +7 -0
  67. package/dist/transformer/claude-auth.transformer.d.ts +25 -0
  68. package/dist/transformer/cleancache.transformer.d.ts +6 -0
  69. package/dist/transformer/codex.transformer.d.ts +61 -0
  70. package/dist/transformer/cursor-sdk.transformer.d.ts +23 -0
  71. package/dist/transformer/customparams.transformer.d.ts +30 -0
  72. package/dist/transformer/deepseek.transformer.d.ts +7 -0
  73. package/dist/transformer/enhancetool.transformer.d.ts +6 -0
  74. package/dist/transformer/extrathinktag.transformer.d.ts +10 -0
  75. package/dist/transformer/forcereasoning.transformer.d.ts +8 -0
  76. package/dist/transformer/gemini.transformer.d.ts +15 -0
  77. package/dist/transformer/groq.transformer.d.ts +7 -0
  78. package/dist/transformer/index.d.ts +65 -0
  79. package/dist/transformer/maxcompletiontokens.transformer.d.ts +6 -0
  80. package/dist/transformer/maxtoken.transformer.d.ts +9 -0
  81. package/dist/transformer/mistral.transformer.d.ts +25 -0
  82. package/dist/transformer/openai.responses.transformer.d.ts +13 -0
  83. package/dist/transformer/openai.transformer.d.ts +52 -0
  84. package/dist/transformer/opencode-headers.transformer.d.ts +30 -0
  85. package/dist/transformer/openrouter.transformer.d.ts +10 -0
  86. package/dist/transformer/qwen-auth.transformer.d.ts +9 -0
  87. package/dist/transformer/reasoning.transformer.d.ts +10 -0
  88. package/dist/transformer/sampling.transformer.d.ts +13 -0
  89. package/dist/transformer/streamoptions.transformer.d.ts +6 -0
  90. package/dist/transformer/tooluse.transformer.d.ts +7 -0
  91. package/dist/transformer/vercel.transformer.d.ts +11 -0
  92. package/dist/transformer/vertex-claude.transformer.d.ts +9 -0
  93. package/dist/transformer/vertex-gemini.transformer.d.ts +12 -0
  94. package/dist/transformer/vertex-openai.transformer.d.ts +19 -0
  95. package/dist/types/llm.d.ts +255 -0
  96. package/dist/types/transformer.d.ts +23 -0
  97. package/dist/utils/antigravity-auth.d.ts +75 -0
  98. package/dist/utils/auth-recovery.d.ts +2 -0
  99. package/dist/utils/cache.d.ts +14 -0
  100. package/dist/utils/cacheControl.d.ts +44 -0
  101. package/dist/utils/claude-auth.d.ts +22 -0
  102. package/dist/utils/codex-auth.d.ts +33 -0
  103. package/dist/utils/converter.d.ts +11 -0
  104. package/dist/utils/cursor-auth.d.ts +3 -0
  105. package/dist/utils/deepseek.util.d.ts +28 -0
  106. package/dist/utils/gemini-cache.d.ts +8 -0
  107. package/dist/utils/gemini-thinking.d.ts +66 -0
  108. package/dist/utils/gemini.util.d.ts +43 -0
  109. package/dist/utils/google.util.d.ts +160 -0
  110. package/dist/utils/image.d.ts +1 -0
  111. package/dist/utils/mistral.util.d.ts +14 -0
  112. package/dist/utils/openai.util.d.ts +17 -0
  113. package/dist/utils/qwen-auth.d.ts +13 -0
  114. package/dist/utils/redact.d.ts +30 -0
  115. package/dist/utils/request.d.ts +4 -0
  116. package/dist/utils/retry.d.ts +27 -0
  117. package/dist/utils/router.d.ts +42 -0
  118. package/dist/utils/schema.d.ts +46 -0
  119. package/dist/utils/sse/SSEParser.transform.d.ts +6 -0
  120. package/dist/utils/sse/SSESerializer.transform.d.ts +3 -0
  121. package/dist/utils/sse/index.d.ts +3 -0
  122. package/dist/utils/sse/rewriteStream.d.ts +9 -0
  123. package/dist/utils/stream.d.ts +11 -0
  124. package/dist/utils/thinking.d.ts +33 -0
  125. package/dist/utils/thought-signature-cache.d.ts +34 -0
  126. package/dist/utils/toolArgumentsParser.d.ts +8 -0
  127. package/dist/utils/vertex-claude.util.d.ts +47 -0
  128. package/package.json +3 -3
@@ -0,0 +1,44 @@
1
+ import { ConfigService } from "./config";
2
+ import { ITokenizer, TokenizeRequest, TokenizerConfig, TokenizerResult, TokenizerOptions } from "../types/tokenizer";
3
+ /**
4
+ * TokenizerService - Manages tokenization for different model types
5
+ *
6
+ * Supports three types of tokenizers:
7
+ * - tiktoken: Fast, OpenAI-compatible tokenizer (default)
8
+ * - huggingface: Local model-based tokenizer for open-source models
9
+ * - api: API-based tokenizer for closed-source models
10
+ *
11
+ * Features:
12
+ * - Automatic fallback to tiktoken on errors
13
+ * - Config-driven tokenizer selection
14
+ * - Per-provider and per-model configuration
15
+ */
16
+ export declare class TokenizerService {
17
+ private tokenizers;
18
+ private configService;
19
+ private logger;
20
+ private options;
21
+ private fallbackTokenizer?;
22
+ constructor(configService: ConfigService, logger: any, options?: TokenizerOptions);
23
+ initialize(): Promise<void>;
24
+ /**
25
+ * Get or create a tokenizer for specific configuration
26
+ */
27
+ getTokenizer(config: TokenizerConfig): Promise<ITokenizer>;
28
+ /**
29
+ * Count tokens for a request using the specified tokenizer configuration
30
+ */
31
+ countTokens(request: TokenizeRequest, config?: TokenizerConfig): Promise<TokenizerResult>;
32
+ /**
33
+ * Get tokenizer configuration for a specific model/provider
34
+ */
35
+ getTokenizerConfigForModel(providerName: string, modelName: string): TokenizerConfig | undefined;
36
+ /**
37
+ * Dispose all tokenizers
38
+ */
39
+ dispose(): void;
40
+ /**
41
+ * Generate cache key from tokenizer config
42
+ */
43
+ private getCacheKey;
44
+ }
@@ -0,0 +1,28 @@
1
+ import { Transformer, TransformerConstructor } from "../types/transformer";
2
+ import { ConfigService } from "./config";
3
+ export declare class TransformerService {
4
+ private readonly configService;
5
+ private readonly logger;
6
+ private transformers;
7
+ constructor(configService: ConfigService, logger: any);
8
+ registerTransformer(name: string, transformer: Transformer): void;
9
+ getTransformer(name: string): Transformer | TransformerConstructor | undefined;
10
+ getAllTransformers(): Map<string, Transformer | TransformerConstructor>;
11
+ getTransformersWithEndpoint(): {
12
+ name: string;
13
+ transformer: Transformer;
14
+ }[];
15
+ getTransformersWithoutEndpoint(): {
16
+ name: string;
17
+ transformer: Transformer;
18
+ }[];
19
+ removeTransformer(name: string): boolean;
20
+ hasTransformer(name: string): boolean;
21
+ registerTransformerFromConfig(config: {
22
+ path?: string;
23
+ options?: any;
24
+ }): Promise<boolean>;
25
+ initialize(): Promise<void>;
26
+ private registerDefaultTransformersInternal;
27
+ private loadFromConfig;
28
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
1
+ import { ITokenizer, TokenizeRequest, TokenizerConfig } from "../types/tokenizer";
2
+ /**
3
+ * Options for API tokenizer
4
+ */
5
+ interface ApiTokenizerOptions {
6
+ timeout?: number;
7
+ }
8
+ /**
9
+ * API-based tokenizer implementation
10
+ * Calls provider's tokenization API to get token counts
11
+ * Supports flexible configuration for different API formats
12
+ */
13
+ export declare class ApiTokenizer implements ITokenizer {
14
+ readonly type = "api";
15
+ readonly name: string;
16
+ private config;
17
+ private logger;
18
+ private options;
19
+ constructor(config: TokenizerConfig, logger: any, options?: ApiTokenizerOptions);
20
+ initialize(): Promise<void>;
21
+ countTokens(request: TokenizeRequest): Promise<number>;
22
+ isInitialized(): boolean;
23
+ dispose(): void;
24
+ /**
25
+ * Format request body based on requestFormat
26
+ */
27
+ private formatRequestBody;
28
+ /**
29
+ * Extract messages in OpenAI format
30
+ */
31
+ private extractMessagesAsOpenAIFormat;
32
+ /**
33
+ * Extract text from a message
34
+ */
35
+ private extractTextFromMessage;
36
+ /**
37
+ * Extract all text from request
38
+ */
39
+ private extractConcatenatedText;
40
+ /**
41
+ * Extract token count from response using the configured field path
42
+ */
43
+ private extractTokenCount;
44
+ }
45
+ export {};
@@ -0,0 +1,52 @@
1
+ import { ITokenizer, TokenizeRequest } from "../types/tokenizer";
2
+ /**
3
+ * Options for HuggingFace tokenizer
4
+ */
5
+ interface HFTokenizerOptions {
6
+ timeout?: number;
7
+ cacheDir?: string;
8
+ }
9
+ /**
10
+ * HuggingFace tokenizer implementation
11
+ * Uses @huggingface/tokenizers library for lightweight tokenization
12
+ */
13
+ export declare class HuggingFaceTokenizer implements ITokenizer {
14
+ readonly type = "huggingface";
15
+ readonly name: string;
16
+ private readonly modelId;
17
+ private readonly logger;
18
+ private readonly options;
19
+ private tokenizer;
20
+ private readonly cacheDir;
21
+ private readonly safeModelName;
22
+ constructor(modelId: string, logger: any, options?: HFTokenizerOptions);
23
+ /**
24
+ * Get cache file paths for tokenizer files
25
+ */
26
+ private getCachePaths;
27
+ /**
28
+ * Ensure directory exists
29
+ */
30
+ private ensureDir;
31
+ /**
32
+ * Load tokenizer files from local cache
33
+ */
34
+ private loadFromCache;
35
+ /**
36
+ * Download tokenizer files from Hugging Face Hub and save to cache
37
+ */
38
+ private downloadAndCache;
39
+ initialize(): Promise<void>;
40
+ countTokens(request: TokenizeRequest): Promise<number>;
41
+ isInitialized(): boolean;
42
+ /**
43
+ * Encode text to tokens (for simple text tokenization)
44
+ */
45
+ encodeText(text: string): number[];
46
+ dispose(): void;
47
+ /**
48
+ * Extract text from tokenize request
49
+ */
50
+ private extractTextFromRequest;
51
+ }
52
+ export {};
@@ -0,0 +1,20 @@
1
+ import { TiktokenEncoding } from "tiktoken";
2
+ import type { ITokenizer, TokenizeRequest } from "../types/tokenizer";
3
+ /**
4
+ * Tiktoken-based tokenizer implementation
5
+ * Uses tiktoken library for fast token counting (OpenAI compatible)
6
+ */
7
+ export declare class TiktokenTokenizer implements ITokenizer {
8
+ readonly type = "tiktoken";
9
+ readonly name: string;
10
+ private encoding?;
11
+ constructor(encodingName?: TiktokenEncoding);
12
+ initialize(): Promise<void>;
13
+ countTokens(request: TokenizeRequest): Promise<number>;
14
+ isInitialized(): boolean;
15
+ /**
16
+ * Encode text to tokens (for simple text tokenization)
17
+ */
18
+ encodeText(text: string): number[];
19
+ dispose(): void;
20
+ }
@@ -0,0 +1,22 @@
1
+ import { LLMProvider, UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerContext, TransformerOptions } from "../types/transformer";
3
+ export declare class AnthropicTransformer implements Transformer {
4
+ private readonly options?;
5
+ name: string;
6
+ endPoint: string;
7
+ private useBearer;
8
+ logger?: any;
9
+ constructor(options?: TransformerOptions | undefined);
10
+ auth(request: any, provider: LLMProvider, _context?: any): Promise<any>;
11
+ transformRequestOut(request: Record<string, any>, context?: any): Promise<UnifiedChatRequest>;
12
+ transformResponseIn(response: Response, context?: TransformerContext): Promise<Response>;
13
+ /**
14
+ * Rebuild an Anthropic-format request body from a UnifiedChatRequest.
15
+ * Used by claude-auth.transformRequestIn() to reconstruct the body before
16
+ * sending to Anthropic, preserving all original parameters.
17
+ */
18
+ static buildAnthropicBody(request: UnifiedChatRequest, logger?: any): Record<string, any>;
19
+ private convertAnthropicToolsToUnified;
20
+ private convertOpenAIStreamToAnthropic;
21
+ private convertOpenAIResponseToAnthropic;
22
+ }
@@ -0,0 +1,15 @@
1
+ import { Transformer } from "../types/transformer";
2
+ export declare class AntigravityAuthTransformer implements Transformer {
3
+ name: string;
4
+ logger?: any;
5
+ private buildAuthAndEnvelope;
6
+ private buildHeaders;
7
+ /**
8
+ * Own the upstream fetch so we can refresh on 401, walk endpoint fallbacks,
9
+ * and surface 429 RetryInfo without leaking into the generic pipeline.
10
+ */
11
+ private sendWithFallback;
12
+ transformRequestIn(request: any, provider: any, context: any): Promise<Record<string, any>>;
13
+ auth(_request: any, provider: any, context: any): Promise<any>;
14
+ transformResponseOut(response: Response): Promise<Response>;
15
+ }
@@ -0,0 +1,16 @@
1
+ import { LLMProvider, UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ /**
4
+ * Transformer class for Cerebras
5
+ */
6
+ export declare class CerebrasTransformer implements Transformer {
7
+ name: string;
8
+ /**
9
+ * Transform the request from Claude Code format to Cerebras format
10
+ * @param request - The incoming request
11
+ * @param provider - The LLM provider information
12
+ * @returns The transformed request
13
+ */
14
+ transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider, context?: any): Promise<Record<string, unknown>>;
15
+ transformResponseOut(response: Response): Promise<Response>;
16
+ }
@@ -0,0 +1,7 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class ChromeOnDeviceTransformer implements Transformer {
4
+ name: string;
5
+ transformRequestIn(request: UnifiedChatRequest, provider: any, context?: any): Promise<Record<string, any>>;
6
+ transformResponseOut(response: Response): Promise<Response>;
7
+ }
@@ -0,0 +1,25 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerContext } from "../types/transformer";
3
+ /** Anthropic beta required for Claude subscription / Claude Code OAuth Bearer auth. */
4
+ export declare const CLAUDE_OAUTH_REQUIRED_BETA = "oauth-2025-04-20";
5
+ export declare function mergeAnthropicBetaValues(...values: Array<string | undefined | null>): string;
6
+ /** Read a named header value from a Fastify/Node headers object (case-insensitive). */
7
+ export declare function readHeaderValue(headers: Record<string, unknown> | undefined, name: string): string | undefined;
8
+ /**
9
+ * Build outbound anthropic-beta for Claude subscription OAuth.
10
+ *
11
+ * - If the client sent anthropic-beta (e.g. Claude Code), merge with
12
+ * oauth-2025-04-20 (deduped, case-insensitive).
13
+ * - Otherwise, send only oauth-2025-04-20. Do not synthesise Claude Code
14
+ * betas — Anthropic validates the attestation on claude-code-20250219
15
+ * and subscription OAuth works without it for non-Claude-Code clients.
16
+ */
17
+ export declare function resolveClaudeAuthAnthropicBeta(input: {
18
+ clientBeta?: string;
19
+ }): string;
20
+ export declare class ClaudeAuthTransformer implements Transformer {
21
+ name: string;
22
+ logger?: any;
23
+ transformRequestIn(request: UnifiedChatRequest, provider: any, context?: TransformerContext): Promise<Record<string, any>>;
24
+ transformResponseOut(response: Response): Promise<Response>;
25
+ }
@@ -0,0 +1,6 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class CleancacheTransformer implements Transformer {
4
+ name: string;
5
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
6
+ }
@@ -0,0 +1,61 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class CodexTransformer implements Transformer {
4
+ name: string;
5
+ logger?: any;
6
+ private streamIntent;
7
+ transformRequestIn(request: UnifiedChatRequest, provider: any, context?: any): Promise<Record<string, any>>;
8
+ auth(request: any, provider: any): Promise<any>;
9
+ private resolveAuth;
10
+ private buildAuthHeaders;
11
+ private recoverUnauthorizedAuth;
12
+ private resolvePatAuth;
13
+ private requestPatAuth;
14
+ transformResponseOut(response: Response, context?: {
15
+ req?: {
16
+ id?: string;
17
+ };
18
+ }): Promise<Response>;
19
+ private transformResponseOutInner;
20
+ private convertStreamEvent;
21
+ /**
22
+ * Consume a Codex SSE response fully and return a single OpenAI
23
+ * ChatCompletion JSON. Used for non-streaming Anthropic SDK calls
24
+ * (e.g. client.beta.messages.create with stream:false) where the
25
+ * SDK expects a flat BetaMessage. The SDK accumulates the response
26
+ * by reading a single JSON object, not by parsing SSE, so we
27
+ * have to materialize the response here.
28
+ */
29
+ /**
30
+ * Re-emit a single OpenAI ChatCompletion JSON as a one-shot SSE stream of
31
+ * `chat.completion.chunk` events, so a streaming caller (which expects SSE)
32
+ * still receives the content when codex returned a flat JSON instead of a
33
+ * stream. The downstream anthropic transformer's stream reader parses each
34
+ * `data:` line as a chunk, so we split the full message into proper delta
35
+ * chunks (text content first, then a final chunk with finish_reason + usage)
36
+ * — emitting the raw chat.completion would put the text under `message`
37
+ * instead of `delta` and the content would be dropped.
38
+ */
39
+ private jsonToSseStream;
40
+ /**
41
+ * Peek at the first non-whitespace character of a cloned response body to
42
+ * distinguish a real SSE stream (starts with `data:` or `event:`, first
43
+ * char `d` or `e`) from a flat JSON body (first char `{` or `[`) that the
44
+ * codex API sometimes returns even with text/event-stream Content-Type.
45
+ *
46
+ * - **For flat JSON** (`{` / `[`): reads the full clone body and returns
47
+ * `{ firstChar, text }` so the caller can parse and handle it.
48
+ * - **For SSE** (anything else): returns `null` immediately after reading
49
+ * only the first chunk from the clone. The original `response.body` on
50
+ * the other side of the tee is untouched and can still be streamed live
51
+ * by the SSE reader — avoiding buffering the entire response.
52
+ *
53
+ * Callers must pass `response.clone().body!` so the original body is not
54
+ * consumed by the peek.
55
+ */
56
+ private readBodyAndPeek;
57
+ private collectSseIntoChatCompletion;
58
+ private normalizeRequestContent;
59
+ private convertResponseToChat;
60
+ private buildImageContent;
61
+ }
@@ -0,0 +1,23 @@
1
+ import type { UnifiedChatRequest } from "../types/llm";
2
+ import type { Transformer, TransformerOptions } from "../types/transformer";
3
+ import { type CursorSdkMode } from "../cursor-sdk/shared";
4
+ export interface CursorSdkTransformerOptions extends TransformerOptions {
5
+ cursorMode?: CursorSdkMode;
6
+ cursorCwd?: string;
7
+ /** Opt-in only; forced off in Docker. Default false. */
8
+ sandboxEnabled?: boolean;
9
+ }
10
+ /**
11
+ * Thin CCR transformer that owns the full upstream call via @cursor/sdk.
12
+ * Returns OpenAI-compatible SSE/JSON through config.__providerResponse so
13
+ * AnthropicTransformer can convert to Claude Code's wire format unchanged.
14
+ */
15
+ export declare class CursorSdkTransformer implements Transformer {
16
+ static TransformerName: string;
17
+ name: string;
18
+ logger?: any;
19
+ private options;
20
+ constructor(options?: CursorSdkTransformerOptions);
21
+ transformRequestIn(request: UnifiedChatRequest, provider: any, context?: any): Promise<Record<string, any>>;
22
+ transformResponseOut(response: Response): Promise<Response>;
23
+ }
@@ -0,0 +1,30 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerOptions } from "../types/transformer";
3
+ export interface CustomParamsOptions extends TransformerOptions {
4
+ /**
5
+ * Custom parameters to inject into the request body
6
+ * Any key-value pairs will be added to the request
7
+ * Supports: string, number, boolean, object, array
8
+ */
9
+ [key: string]: any;
10
+ }
11
+ /**
12
+ * Transformer for injecting dynamic custom parameters into LLM requests
13
+ * Allows runtime configuration of arbitrary parameters that get merged
14
+ * into the request body using deep merge strategy
15
+ */
16
+ export declare class CustomParamsTransformer implements Transformer {
17
+ static TransformerName: string;
18
+ private options;
19
+ constructor(options?: CustomParamsOptions);
20
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
21
+ transformResponseOut(response: Response): Promise<Response>;
22
+ /**
23
+ * Deep merge two objects recursively
24
+ */
25
+ private deepMergeObjects;
26
+ /**
27
+ * Clone a value to prevent reference issues
28
+ */
29
+ private cloneValue;
30
+ }
@@ -0,0 +1,7 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class DeepseekTransformer implements Transformer {
4
+ name: string;
5
+ transformRequestIn(request: UnifiedChatRequest, provider?: any, context?: any): Promise<UnifiedChatRequest>;
6
+ transformResponseOut(response: Response, context?: any): Promise<Response>;
7
+ }
@@ -0,0 +1,6 @@
1
+ import { Transformer } from "../types/transformer";
2
+ export declare class EnhanceToolTransformer implements Transformer {
3
+ logger?: any;
4
+ name: string;
5
+ transformResponseOut(response: Response): Promise<Response>;
6
+ }
@@ -0,0 +1,10 @@
1
+ import { Transformer } from "../types/transformer";
2
+ /**
3
+ * Extracts <think>...</think> blocks from OpenAI-compatible responses into
4
+ * thinking.content (and streaming thinking deltas).
5
+ */
6
+ export declare class ExtraThinkTagTransformer implements Transformer {
7
+ name: string;
8
+ transformRequestIn(request: any): Promise<any>;
9
+ transformResponseOut(response: Response): Promise<Response>;
10
+ }
@@ -0,0 +1,8 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class ForceReasoningTransformer implements Transformer {
4
+ logger?: any;
5
+ name: string;
6
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
7
+ transformResponseOut(response: Response): Promise<Response>;
8
+ }
@@ -0,0 +1,15 @@
1
+ import { LLMProvider, UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerContext, TransformerOptions } from "../types/transformer";
3
+ export declare class GeminiTransformer implements Transformer {
4
+ private readonly options?;
5
+ static TransformerName: string;
6
+ logger?: any;
7
+ name: string;
8
+ endPoint: string;
9
+ private readonly cachedContent;
10
+ private readonly thoughtSignatureFallback;
11
+ constructor(options?: TransformerOptions | undefined);
12
+ transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider, context: any): Promise<Record<string, any>>;
13
+ transformRequestOut(request: any): Promise<UnifiedChatRequest>;
14
+ transformResponseOut(response: Response, context?: TransformerContext): Promise<Response>;
15
+ }
@@ -0,0 +1,7 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class GroqTransformer implements Transformer {
4
+ name: string;
5
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
6
+ transformResponseOut(response: Response): Promise<Response>;
7
+ }
@@ -0,0 +1,65 @@
1
+ import { AnthropicTransformer } from "./anthropic.transformer";
2
+ import { GeminiTransformer } from "./gemini.transformer";
3
+ import { VertexGeminiTransformer } from "./vertex-gemini.transformer";
4
+ import { DeepseekTransformer } from "./deepseek.transformer";
5
+ import { TooluseTransformer } from "./tooluse.transformer";
6
+ import { OpenrouterTransformer } from "./openrouter.transformer";
7
+ import { MaxTokenTransformer } from "./maxtoken.transformer";
8
+ import { GroqTransformer } from "./groq.transformer";
9
+ import { CleancacheTransformer } from "./cleancache.transformer";
10
+ import { EnhanceToolTransformer } from "./enhancetool.transformer";
11
+ import { ReasoningTransformer } from "./reasoning.transformer";
12
+ import { SamplingTransformer } from "./sampling.transformer";
13
+ import { MaxCompletionTokens } from "./maxcompletiontokens.transformer";
14
+ import { VertexClaudeTransformer } from "./vertex-claude.transformer";
15
+ import { VertexOpenaiTransformer } from "./vertex-openai.transformer";
16
+ import { CerebrasTransformer } from "./cerebras.transformer";
17
+ import { StreamOptionsTransformer } from "./streamoptions.transformer";
18
+ import { OpenAITransformer } from "./openai.transformer";
19
+ import { CustomParamsTransformer } from "./customparams.transformer";
20
+ import { VercelTransformer } from "./vercel.transformer";
21
+ import { OpenAIResponsesTransformer } from "./openai.responses.transformer";
22
+ import { CodexTransformer } from "./codex.transformer";
23
+ import { QwenAuthTransformer } from "./qwen-auth.transformer";
24
+ import { ForceReasoningTransformer } from "./forcereasoning.transformer";
25
+ import { ExtraThinkTagTransformer } from "./extrathinktag.transformer";
26
+ import { MistralTransformer } from "./mistral.transformer";
27
+ import { ChromeOnDeviceTransformer } from "./chrome-on-device.transformer";
28
+ import { OpencodeHeadersTransformer } from "./opencode-headers.transformer";
29
+ import { ClaudeAuthTransformer } from "./claude-auth.transformer";
30
+ import { CursorSdkTransformer } from "./cursor-sdk.transformer";
31
+ import { AntigravityAuthTransformer } from "./antigravity-auth.transformer";
32
+ declare const _default: {
33
+ AnthropicTransformer: typeof AnthropicTransformer;
34
+ GeminiTransformer: typeof GeminiTransformer;
35
+ VertexGeminiTransformer: typeof VertexGeminiTransformer;
36
+ VertexClaudeTransformer: typeof VertexClaudeTransformer;
37
+ VertexOpenaiTransformer: typeof VertexOpenaiTransformer;
38
+ DeepseekTransformer: typeof DeepseekTransformer;
39
+ TooluseTransformer: typeof TooluseTransformer;
40
+ OpenrouterTransformer: typeof OpenrouterTransformer;
41
+ OpenAITransformer: typeof OpenAITransformer;
42
+ MaxTokenTransformer: typeof MaxTokenTransformer;
43
+ GroqTransformer: typeof GroqTransformer;
44
+ CleancacheTransformer: typeof CleancacheTransformer;
45
+ EnhanceToolTransformer: typeof EnhanceToolTransformer;
46
+ ReasoningTransformer: typeof ReasoningTransformer;
47
+ SamplingTransformer: typeof SamplingTransformer;
48
+ MaxCompletionTokens: typeof MaxCompletionTokens;
49
+ CerebrasTransformer: typeof CerebrasTransformer;
50
+ StreamOptionsTransformer: typeof StreamOptionsTransformer;
51
+ CustomParamsTransformer: typeof CustomParamsTransformer;
52
+ VercelTransformer: typeof VercelTransformer;
53
+ OpenAIResponsesTransformer: typeof OpenAIResponsesTransformer;
54
+ CodexTransformer: typeof CodexTransformer;
55
+ QwenAuthTransformer: typeof QwenAuthTransformer;
56
+ ForceReasoningTransformer: typeof ForceReasoningTransformer;
57
+ ExtraThinkTagTransformer: typeof ExtraThinkTagTransformer;
58
+ MistralTransformer: typeof MistralTransformer;
59
+ ChromeOnDeviceTransformer: typeof ChromeOnDeviceTransformer;
60
+ OpencodeHeadersTransformer: typeof OpencodeHeadersTransformer;
61
+ ClaudeAuthTransformer: typeof ClaudeAuthTransformer;
62
+ CursorSdkTransformer: typeof CursorSdkTransformer;
63
+ AntigravityAuthTransformer: typeof AntigravityAuthTransformer;
64
+ };
65
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class MaxCompletionTokens implements Transformer {
4
+ static TransformerName: string;
5
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
6
+ }