@caeliq/llms 1.0.56 → 1.0.58

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 (148) hide show
  1. package/README.md +92 -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 +225 -215
  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 +2 -0
  8. package/dist/cursor-sdk/host-env.d.ts +38 -0
  9. package/dist/cursor-sdk/lifecycle-planner.d.ts +69 -0
  10. package/dist/cursor-sdk/prompt.d.ts +59 -0
  11. package/dist/cursor-sdk/runner.d.ts +40 -0
  12. package/dist/cursor-sdk/send.d.ts +9 -0
  13. package/dist/cursor-sdk/session.d.ts +199 -0
  14. package/dist/cursor-sdk/shared.d.ts +28 -0
  15. package/dist/cursor-sdk/tool-paths.d.ts +26 -0
  16. package/dist/cursor-sdk/tools.d.ts +15 -0
  17. package/dist/cursor-sdk/turn-identity.d.ts +46 -0
  18. package/dist/cursor-sdk/turn-output.d.ts +77 -0
  19. package/dist/cursor-sdk/usage.d.ts +28 -0
  20. package/dist/esm/server.mjs +225 -215
  21. package/dist/esm/server.mjs.map +4 -4
  22. package/dist/index.d.ts +2 -0
  23. package/dist/plugins/index.d.ts +4 -0
  24. package/dist/plugins/output/console-handler.d.ts +23 -0
  25. package/dist/plugins/output/index.d.ts +29 -0
  26. package/dist/plugins/output/output-manager.d.ts +110 -0
  27. package/dist/plugins/output/temp-file-handler.d.ts +53 -0
  28. package/dist/plugins/output/types.d.ts +157 -0
  29. package/dist/plugins/output/webhook-handler.d.ts +37 -0
  30. package/dist/plugins/plugin-manager.d.ts +62 -0
  31. package/dist/plugins/token-speed.d.ts +22 -0
  32. package/dist/plugins/types.d.ts +25 -0
  33. package/dist/server.d.ts +60 -0
  34. package/dist/services/config.d.ts +32 -0
  35. package/dist/services/provider.d.ts +34 -0
  36. package/dist/services/tokenizer.d.ts +44 -0
  37. package/dist/services/transformer.d.ts +28 -0
  38. package/dist/tests/anthropic.stream-boundaries.d.ts +1 -0
  39. package/dist/tests/anthropic.stream-cancel.d.ts +1 -0
  40. package/dist/tests/anthropic.tool-call-id-sanitize.d.ts +1 -0
  41. package/dist/tests/anthropic.turn-intent.d.ts +1 -0
  42. package/dist/tests/antigravity.claude-tool-schema.d.ts +1 -0
  43. package/dist/tests/antigravity.endpoint-fallback.d.ts +1 -0
  44. package/dist/tests/cache-control.strip.d.ts +1 -0
  45. package/dist/tests/cache-paths.integration.d.ts +1 -0
  46. package/dist/tests/claude-auth.beta-headers.d.ts +1 -0
  47. package/dist/tests/codex-auth.reliability.d.ts +1 -0
  48. package/dist/tests/cursor-sdk.cancel.d.ts +1 -0
  49. package/dist/tests/cursor-sdk.host-env.d.ts +1 -0
  50. package/dist/tests/cursor-sdk.interrupt-reentry.d.ts +1 -0
  51. package/dist/tests/cursor-sdk.lifecycle-planner.d.ts +1 -0
  52. package/dist/tests/cursor-sdk.on-delta-thinking.d.ts +1 -0
  53. package/dist/tests/cursor-sdk.pending-next-rejection.d.ts +1 -0
  54. package/dist/tests/cursor-sdk.progress-only.d.ts +1 -0
  55. package/dist/tests/cursor-sdk.runner-recovery.d.ts +1 -0
  56. package/dist/tests/cursor-sdk.scratch-paths.d.ts +1 -0
  57. package/dist/tests/cursor-sdk.scratch-report.d.ts +1 -0
  58. package/dist/tests/cursor-sdk.send.d.ts +1 -0
  59. package/dist/tests/cursor-sdk.stream-error.d.ts +1 -0
  60. package/dist/tests/cursor-sdk.thinking-signature.d.ts +1 -0
  61. package/dist/tests/cursor-sdk.tool-call-id.d.ts +1 -0
  62. package/dist/tests/cursor-sdk.trailing-turn-fallback.d.ts +1 -0
  63. package/dist/tests/cursor-sdk.turn-coordination.d.ts +1 -0
  64. package/dist/tests/cursor-sdk.turn-identity.d.ts +1 -0
  65. package/dist/tests/cursor-sdk.usage.d.ts +1 -0
  66. package/dist/tests/deepseek.reasoning.d.ts +1 -0
  67. package/dist/tests/gemini.abnormal-finish.d.ts +1 -0
  68. package/dist/tests/gemini.dual-dialect-request.d.ts +1 -0
  69. package/dist/tests/gemini.function-call-signatures.d.ts +1 -0
  70. package/dist/tests/gemini.parity.d.ts +1 -0
  71. package/dist/tests/gemini.thinking-effort.d.ts +1 -0
  72. package/dist/tests/gemini.thought-signature-roundtrip.d.ts +1 -0
  73. package/dist/tests/opencode-headers.no-provider-retry.d.ts +1 -0
  74. package/dist/tests/stream.upstream-terminated.d.ts +1 -0
  75. package/dist/tests/thinking-sequencer.dual-dialect.d.ts +1 -0
  76. package/dist/tests/transformer-service.endpoints.d.ts +1 -0
  77. package/dist/tests/upstream-ports.smoke.d.ts +1 -0
  78. package/dist/tokenizer/api-tokenizer.d.ts +45 -0
  79. package/dist/tokenizer/huggingface-tokenizer.d.ts +52 -0
  80. package/dist/tokenizer/tiktoken-tokenizer.d.ts +20 -0
  81. package/dist/transformer/anthropic.transformer.d.ts +22 -0
  82. package/dist/transformer/antigravity-auth.transformer.d.ts +15 -0
  83. package/dist/transformer/cerebras.transformer.d.ts +16 -0
  84. package/dist/transformer/chrome-on-device.transformer.d.ts +7 -0
  85. package/dist/transformer/claude-auth.transformer.d.ts +25 -0
  86. package/dist/transformer/cleancache.transformer.d.ts +6 -0
  87. package/dist/transformer/codex.transformer.d.ts +61 -0
  88. package/dist/transformer/cursor-sdk.transformer.d.ts +25 -0
  89. package/dist/transformer/customparams.transformer.d.ts +30 -0
  90. package/dist/transformer/deepseek.transformer.d.ts +7 -0
  91. package/dist/transformer/enhancetool.transformer.d.ts +6 -0
  92. package/dist/transformer/extrathinktag.transformer.d.ts +10 -0
  93. package/dist/transformer/forcereasoning.transformer.d.ts +8 -0
  94. package/dist/transformer/gemini.transformer.d.ts +15 -0
  95. package/dist/transformer/groq.transformer.d.ts +7 -0
  96. package/dist/transformer/index.d.ts +65 -0
  97. package/dist/transformer/maxcompletiontokens.transformer.d.ts +6 -0
  98. package/dist/transformer/maxtoken.transformer.d.ts +9 -0
  99. package/dist/transformer/mistral.transformer.d.ts +25 -0
  100. package/dist/transformer/openai.responses.transformer.d.ts +13 -0
  101. package/dist/transformer/openai.transformer.d.ts +52 -0
  102. package/dist/transformer/opencode-headers.transformer.d.ts +30 -0
  103. package/dist/transformer/openrouter.transformer.d.ts +10 -0
  104. package/dist/transformer/qwen-auth.transformer.d.ts +9 -0
  105. package/dist/transformer/reasoning.transformer.d.ts +10 -0
  106. package/dist/transformer/sampling.transformer.d.ts +13 -0
  107. package/dist/transformer/streamoptions.transformer.d.ts +6 -0
  108. package/dist/transformer/tooluse.transformer.d.ts +7 -0
  109. package/dist/transformer/vercel.transformer.d.ts +11 -0
  110. package/dist/transformer/vertex-claude.transformer.d.ts +9 -0
  111. package/dist/transformer/vertex-gemini.transformer.d.ts +12 -0
  112. package/dist/transformer/vertex-openai.transformer.d.ts +19 -0
  113. package/dist/types/llm.d.ts +255 -0
  114. package/dist/types/transformer.d.ts +29 -0
  115. package/dist/types/turn-intent.d.ts +26 -0
  116. package/dist/utils/antigravity-auth.d.ts +75 -0
  117. package/dist/utils/auth-recovery.d.ts +2 -0
  118. package/dist/utils/cache.d.ts +14 -0
  119. package/dist/utils/cacheControl.d.ts +44 -0
  120. package/dist/utils/claude-auth.d.ts +22 -0
  121. package/dist/utils/codex-auth.d.ts +33 -0
  122. package/dist/utils/converter.d.ts +11 -0
  123. package/dist/utils/cursor-auth.d.ts +3 -0
  124. package/dist/utils/deepseek.util.d.ts +28 -0
  125. package/dist/utils/gemini-cache.d.ts +8 -0
  126. package/dist/utils/gemini-thinking.d.ts +66 -0
  127. package/dist/utils/gemini.util.d.ts +43 -0
  128. package/dist/utils/google.util.d.ts +160 -0
  129. package/dist/utils/image.d.ts +1 -0
  130. package/dist/utils/mistral.util.d.ts +14 -0
  131. package/dist/utils/openai.util.d.ts +17 -0
  132. package/dist/utils/qwen-auth.d.ts +13 -0
  133. package/dist/utils/redact.d.ts +30 -0
  134. package/dist/utils/request.d.ts +4 -0
  135. package/dist/utils/retry.d.ts +27 -0
  136. package/dist/utils/router.d.ts +42 -0
  137. package/dist/utils/schema.d.ts +46 -0
  138. package/dist/utils/sse/SSEParser.transform.d.ts +6 -0
  139. package/dist/utils/sse/SSESerializer.transform.d.ts +3 -0
  140. package/dist/utils/sse/index.d.ts +3 -0
  141. package/dist/utils/sse/rewriteStream.d.ts +9 -0
  142. package/dist/utils/stream.d.ts +11 -0
  143. package/dist/utils/thinking.d.ts +33 -0
  144. package/dist/utils/thought-signature-cache.d.ts +34 -0
  145. package/dist/utils/toolArgumentsParser.d.ts +8 -0
  146. package/dist/utils/toolCallId.d.ts +15 -0
  147. package/dist/utils/vertex-claude.util.d.ts +47 -0
  148. package/package.json +3 -3
@@ -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
+ }
@@ -0,0 +1,9 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerOptions } from "../types/transformer";
3
+ export declare class MaxTokenTransformer implements Transformer {
4
+ private readonly options?;
5
+ static TransformerName: string;
6
+ max_tokens: number;
7
+ constructor(options?: TransformerOptions | undefined);
8
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
9
+ }
@@ -0,0 +1,25 @@
1
+ import { LLMProvider, UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerContext } from "../types/transformer";
3
+ import { transformRequestOut } from "../utils/mistral.util";
4
+ /**
5
+ * Mistral Transformer for Claude Code Router
6
+ *
7
+ * Transforms Anthropic-style requests to Mistral's OpenAI-compatible API format.
8
+ */
9
+ export declare class MistralTransformer implements Transformer {
10
+ name: string;
11
+ logger?: any;
12
+ /**
13
+ * Transform incoming request to Mistral-compatible format
14
+ */
15
+ transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider, context: TransformerContext): Promise<Record<string, any>>;
16
+ /**
17
+ * Transform Mistral-specific request back to UnifiedChatRequest
18
+ */
19
+ transformRequestOut: typeof transformRequestOut;
20
+ /**
21
+ * Transform response back — convert Mistral's content-array thinking format
22
+ * to the delta.thinking / delta.content shape expected by @caeliq/llms.
23
+ */
24
+ transformResponseOut(response: Response, _context: TransformerContext): Promise<Response>;
25
+ }
@@ -0,0 +1,13 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class OpenAIResponsesTransformer implements Transformer {
4
+ logger?: any;
5
+ name: string;
6
+ endPoint: string;
7
+ transformRequestIn(request: UnifiedChatRequest, provider?: any, context?: any): Promise<UnifiedChatRequest>;
8
+ transformResponseOut(response: Response): Promise<Response>;
9
+ private convertStreamEvent;
10
+ private normalizeRequestContent;
11
+ private convertResponseToChat;
12
+ private buildImageContent;
13
+ }
@@ -0,0 +1,52 @@
1
+ import { Transformer } from "../types/transformer";
2
+ import { UnifiedChatRequest } from "../types/llm";
3
+ /**
4
+ * Server-side route handler for the OpenAI Chat Completions API.
5
+ *
6
+ * ## How endPoint works
7
+ *
8
+ * At startup, `registerApiRoutes` (see `api/routes.ts`) scans all registered
9
+ * transformers for ones that define `endPoint`. For each, it registers a
10
+ * `POST` route at that path. When a request hits the route,
11
+ * `handleTransformerEndpoint` is invoked with the matching transformer as
12
+ * the "endpoint transformer" — the one responsible for converting between
13
+ * the external wire format and the internal Unified format.
14
+ *
15
+ * ## Request handling
16
+ *
17
+ * The Unified format IS the OpenAI Chat Completions format. The conversion
18
+ * from Anthropic → Unified already happened in
19
+ * `AnthropicTransformer.transformRequestOut()` (which runs first in the
20
+ * pipeline). So by the time the provider chain executes, the body is already
21
+ * in the right shape — no further conversion is needed.
22
+ *
23
+ * `transformRequestIn` also translates Claude Code cache intent to the
24
+ * selected provider's native Chat Completions behavior. The provider identity
25
+ * is checked before adding request-level fields so OpenAI-compatible services
26
+ * do not receive OpenAI-only parameters.
27
+ *
28
+ * ## Relationship to OpenAIResponsesTransformer
29
+ *
30
+ * `OpenAIResponsesTransformer` (in `openai.responses.transformer.ts`) is the
31
+ * counterpart for the Responses API (`/v1/responses`). Unlike this
32
+ * transformer, it defines `transformRequestIn` / `transformResponseOut`
33
+ * because the Responses API uses a different wire format (e.g. `messages`
34
+ * → `input`, function tools → flat tool definitions). It also uses the
35
+ * shared utilities in `openai.util.ts` (`validateOpenAIToolCalls`,
36
+ * `injectPromptCaching`) to sanitize the Unified body before converting it.
37
+ *
38
+ * ## Full request pipeline (for context)
39
+ *
40
+ * Client → POST /v1/messages
41
+ * → AnthropicTransformer.transformRequestOut() // Anthropic → Unified (OpenAI)
42
+ * → provider.transformer.use[].transformRequestIn() // provider middleware
43
+ * → sendRequestToProvider() // HTTP call upstream
44
+ * → provider.transformer.use[].transformResponseOut() // provider middleware (reversed)
45
+ * → AnthropicTransformer.transformResponseIn() // Unified (OpenAI) → Anthropic
46
+ * → Client
47
+ */
48
+ export declare class OpenAITransformer implements Transformer {
49
+ name: string;
50
+ endPoint: string;
51
+ transformRequestIn(request: UnifiedChatRequest, provider: any, context: any): Promise<UnifiedChatRequest>;
52
+ }
@@ -0,0 +1,30 @@
1
+ import { Transformer } from "../types/transformer";
2
+ export declare class OpencodeHeadersTransformer implements Transformer {
3
+ name: string;
4
+ private sessionCache;
5
+ private readonly MAX_SESSIONS;
6
+ private lastTimestamp;
7
+ private counter;
8
+ transformRequestIn(request: any, provider: any, context: any): Promise<Record<string, any>>;
9
+ /**
10
+ * Own the full upstream call so a `No provider available` 401 can be retried
11
+ * with a fresh session in isolation. Any other non-ok response is re-thrown in
12
+ * the exact shape sendRequestToProvider would have produced, so genuine
13
+ * auth/rate/server errors keep flowing through the normal error + fallback
14
+ * path unchanged.
15
+ */
16
+ private sendWithSessionRetry;
17
+ private buildHeaders;
18
+ /**
19
+ * True only for the two Zen session-hash routing failures — a re-roll can
20
+ * recover these. Kept deliberately narrow (exact status + message) so genuine
21
+ * auth errors (401 invalid key) and request errors (400 validation) are never
22
+ * mistaken for routing failures and pass straight through.
23
+ */
24
+ private isZenRoutingFailure;
25
+ private retryAfterHeaders;
26
+ private fingerprintConversation;
27
+ private getOrCreateSessionId;
28
+ private invalidateSession;
29
+ private generateId;
30
+ }
@@ -0,0 +1,10 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerOptions } from "../types/transformer";
3
+ export declare class OpenrouterTransformer implements Transformer {
4
+ private readonly options?;
5
+ static TransformerName: string;
6
+ logger?: any;
7
+ constructor(options?: TransformerOptions | undefined);
8
+ transformRequestIn(request: UnifiedChatRequest, provider?: any, context?: any): Promise<UnifiedChatRequest>;
9
+ transformResponseOut(response: Response): Promise<Response>;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { Transformer } from "../types/transformer";
2
+ export declare class QwenAuthTransformer implements Transformer {
3
+ name: string;
4
+ logger?: any;
5
+ private buildAuthConfig;
6
+ transformRequestIn(request: any, provider: any): Promise<Record<string, any>>;
7
+ auth(_request: any, provider: any): Promise<any>;
8
+ transformResponseOut(response: Response): Promise<Response>;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerOptions } from "../types/transformer";
3
+ export declare class ReasoningTransformer implements Transformer {
4
+ private readonly options?;
5
+ static TransformerName: string;
6
+ enable: any;
7
+ constructor(options?: TransformerOptions | undefined);
8
+ transformRequestIn(request: UnifiedChatRequest, provider?: any, context?: any): Promise<UnifiedChatRequest>;
9
+ transformResponseOut(response: Response, context?: any): Promise<Response>;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerOptions } from "../types/transformer";
3
+ export declare class SamplingTransformer implements Transformer {
4
+ private readonly options?;
5
+ static TransformerName: string;
6
+ max_tokens: number;
7
+ temperature: number;
8
+ top_p: number;
9
+ top_k: number;
10
+ repetition_penalty: number;
11
+ constructor(options?: TransformerOptions | undefined);
12
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
13
+ }
@@ -0,0 +1,6 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class StreamOptionsTransformer implements Transformer {
4
+ name: string;
5
+ transformRequestIn(request: UnifiedChatRequest): Promise<UnifiedChatRequest>;
6
+ }
@@ -0,0 +1,7 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class TooluseTransformer implements Transformer {
4
+ name: string;
5
+ transformRequestIn(request: UnifiedChatRequest, provider?: any, context?: any): Promise<any>;
6
+ transformResponseOut(response: Response): Promise<Response>;
7
+ }
@@ -0,0 +1,11 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerOptions } from "../types/transformer";
3
+ export declare class VercelTransformer implements Transformer {
4
+ private readonly options?;
5
+ static TransformerName: string;
6
+ logger?: any;
7
+ endPoint: string;
8
+ constructor(options?: TransformerOptions | undefined);
9
+ transformRequestIn(request: UnifiedChatRequest, provider?: any, context?: any): Promise<UnifiedChatRequest>;
10
+ transformResponseOut(response: Response): Promise<Response>;
11
+ }
@@ -0,0 +1,9 @@
1
+ import { LLMProvider, UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer } from "../types/transformer";
3
+ export declare class VertexClaudeTransformer implements Transformer {
4
+ logger?: any;
5
+ name: string;
6
+ transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider): Promise<Record<string, any>>;
7
+ transformRequestOut(request: Record<string, any>): Promise<UnifiedChatRequest>;
8
+ transformResponseOut(response: Response): Promise<Response>;
9
+ }
@@ -0,0 +1,12 @@
1
+ import { LLMProvider, UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerContext, TransformerOptions } from "../types/transformer";
3
+ export declare class VertexGeminiTransformer implements Transformer {
4
+ static TransformerName: string;
5
+ logger?: any;
6
+ name: string;
7
+ private readonly thoughtSignatureFallback;
8
+ constructor(options?: TransformerOptions);
9
+ transformRequestIn(request: UnifiedChatRequest, provider: LLMProvider, context?: any): Promise<Record<string, any>>;
10
+ transformRequestOut(request: Record<string, any>): Promise<UnifiedChatRequest>;
11
+ transformResponseOut(response: Response, context?: TransformerContext): Promise<Response>;
12
+ }
@@ -0,0 +1,19 @@
1
+ import { UnifiedChatRequest } from "../types/llm";
2
+ import { Transformer, TransformerOptions } from "../types/transformer";
3
+ export interface VertexOpenaiOptions extends TransformerOptions {
4
+ client_email?: string;
5
+ private_key?: string;
6
+ }
7
+ /**
8
+ * Auth-only transformer for Vertex AI OpenAI-compatible endpoints.
9
+ * Injects a Google service-account Bearer token into outbound requests.
10
+ */
11
+ export declare class VertexOpenaiTransformer implements Transformer {
12
+ static TransformerName: string;
13
+ private client?;
14
+ private readonly client_email?;
15
+ private readonly private_key?;
16
+ constructor(options?: VertexOpenaiOptions);
17
+ private getClient;
18
+ transformRequestIn(request: UnifiedChatRequest): Promise<Record<string, any>>;
19
+ }
@@ -0,0 +1,255 @@
1
+ import type { ChatCompletionMessageParam as OpenAIMessage } from "openai/resources/chat/completions";
2
+ import type { MessageParam as AnthropicMessage } from "@anthropic-ai/sdk/resources/messages";
3
+ import type { ChatCompletionChunk } from "openai/resources/chat/completions";
4
+ import type { MessageStreamEvent } from "@anthropic-ai/sdk/resources/messages";
5
+ import type { ChatCompletionTool } from "openai/resources/chat/completions";
6
+ import type { Tool as AnthropicTool } from "@anthropic-ai/sdk/resources/messages";
7
+ import { Transformer } from "./transformer";
8
+ import type { ProviderTokenizerConfig } from "./tokenizer";
9
+ export type TransformerConfigEntry = string | [string, Record<string, any>?];
10
+ export interface UrlCitation {
11
+ url: string;
12
+ title: string;
13
+ content: string;
14
+ start_index: number;
15
+ end_index: number;
16
+ }
17
+ export interface Annotation {
18
+ type: "url_citation";
19
+ url_citation?: UrlCitation;
20
+ }
21
+ export interface TextContent {
22
+ type: "text";
23
+ text: string;
24
+ cache_control?: {
25
+ type?: string;
26
+ ttl?: "5m" | "1h";
27
+ };
28
+ }
29
+ export interface ImageContent {
30
+ type: "image_url";
31
+ image_url: {
32
+ url: string;
33
+ };
34
+ media_type: string;
35
+ cache_control?: {
36
+ type?: string;
37
+ ttl?: "5m" | "1h";
38
+ };
39
+ }
40
+ export type MessageContent = TextContent | ImageContent;
41
+ export interface UnifiedMessage {
42
+ role: "user" | "assistant" | "system" | "tool";
43
+ content: string | null | MessageContent[];
44
+ reasoning_content?: string;
45
+ tool_calls?: Array<{
46
+ id: string;
47
+ type: "function";
48
+ function: {
49
+ name: string;
50
+ arguments: string;
51
+ };
52
+ /** Gemini/Antigravity thought signature; must round-trip on functionCall parts. */
53
+ thought_signature?: string;
54
+ cache_control?: {
55
+ type?: string;
56
+ ttl?: "5m" | "1h";
57
+ };
58
+ }>;
59
+ tool_call_id?: string;
60
+ cache_control?: {
61
+ type?: string;
62
+ ttl?: "5m" | "1h";
63
+ };
64
+ thinking?: {
65
+ content: string;
66
+ signature?: string;
67
+ };
68
+ }
69
+ export interface UnifiedTool {
70
+ type: "function";
71
+ function: {
72
+ name: string;
73
+ description: string;
74
+ parameters: {
75
+ type: "object";
76
+ properties: Record<string, any>;
77
+ required?: string[];
78
+ additionalProperties?: boolean;
79
+ $schema?: string;
80
+ };
81
+ };
82
+ cache_control?: {
83
+ type?: string;
84
+ ttl?: "5m" | "1h";
85
+ };
86
+ }
87
+ export type ThinkLevel = "none" | "low" | "medium" | "high" | "xhigh" | "max";
88
+ export interface UnifiedChatRequest {
89
+ messages: UnifiedMessage[];
90
+ model: string;
91
+ system?: string | MessageContent[];
92
+ max_tokens?: number;
93
+ max_completion_tokens?: number;
94
+ temperature?: number;
95
+ top_p?: number;
96
+ top_k?: number;
97
+ repetition_penalty?: number;
98
+ stream?: boolean;
99
+ stream_options?: {
100
+ include_usage?: boolean;
101
+ [key: string]: any;
102
+ };
103
+ tools?: UnifiedTool[];
104
+ tool_choice?: "auto" | "none" | "required" | string | {
105
+ type: "function";
106
+ function: {
107
+ name: string;
108
+ };
109
+ };
110
+ reasoning?: {
111
+ effort?: ThinkLevel;
112
+ max_tokens?: number;
113
+ enabled?: boolean;
114
+ };
115
+ enable_thinking?: boolean;
116
+ thinking?: {
117
+ type: "enabled" | "disabled";
118
+ budget_tokens?: number;
119
+ };
120
+ parallel_tool_calls?: boolean;
121
+ cache_control?: {
122
+ type?: string;
123
+ ttl?: "5m" | "1h";
124
+ };
125
+ anthropic_thinking?: Record<string, any>;
126
+ anthropic_output_config?: Record<string, any>;
127
+ anthropic_metadata?: Record<string, any>;
128
+ anthropic_stop_sequences?: string[];
129
+ reasoning_effort?: string;
130
+ }
131
+ export interface UnifiedChatResponse {
132
+ id: string;
133
+ model: string;
134
+ content: string | null;
135
+ usage?: {
136
+ prompt_tokens: number;
137
+ completion_tokens: number;
138
+ total_tokens: number;
139
+ };
140
+ tool_calls?: Array<{
141
+ id: string;
142
+ type: "function";
143
+ function: {
144
+ name: string;
145
+ arguments: string;
146
+ };
147
+ }>;
148
+ annotations?: Annotation[];
149
+ }
150
+ export interface StreamChunk {
151
+ id: string;
152
+ object: string;
153
+ created: number;
154
+ model: string;
155
+ choices?: Array<{
156
+ index: number;
157
+ delta: {
158
+ role?: string;
159
+ content?: string;
160
+ thinking?: {
161
+ content?: string;
162
+ signature?: string;
163
+ };
164
+ tool_calls?: Array<{
165
+ id?: string;
166
+ type?: "function";
167
+ function?: {
168
+ name?: string;
169
+ arguments?: string;
170
+ };
171
+ thought_signature?: string;
172
+ }>;
173
+ annotations?: Annotation[];
174
+ };
175
+ finish_reason?: string | null;
176
+ }>;
177
+ }
178
+ export type AnthropicStreamEvent = MessageStreamEvent;
179
+ export type OpenAIStreamChunk = ChatCompletionChunk;
180
+ export interface OpenAIChatRequest {
181
+ messages: OpenAIMessage[];
182
+ model: string;
183
+ max_tokens?: number;
184
+ temperature?: number;
185
+ stream?: boolean;
186
+ tools?: ChatCompletionTool[];
187
+ tool_choice?: "auto" | "none" | {
188
+ type: "function";
189
+ function: {
190
+ name: string;
191
+ };
192
+ };
193
+ }
194
+ export interface AnthropicChatRequest {
195
+ messages: AnthropicMessage[];
196
+ model: string;
197
+ max_tokens: number;
198
+ temperature?: number;
199
+ stream?: boolean;
200
+ system?: string;
201
+ tools?: AnthropicTool[];
202
+ tool_choice?: {
203
+ type: "auto";
204
+ } | {
205
+ type: "tool";
206
+ name: string;
207
+ };
208
+ }
209
+ export interface ConversionOptions {
210
+ targetProvider: "openai" | "anthropic";
211
+ sourceProvider: "openai" | "anthropic";
212
+ }
213
+ export interface LLMProvider {
214
+ name: string;
215
+ baseUrl: string;
216
+ apiKey: string;
217
+ models: string[];
218
+ /** Optional GCP / Antigravity project id (provider-specific). */
219
+ project_id?: string;
220
+ transformer?: {
221
+ [key: string]: {
222
+ use?: Transformer[];
223
+ } | any;
224
+ } & {
225
+ use?: Transformer[];
226
+ passthrough?: any;
227
+ };
228
+ }
229
+ export type RegisterProviderRequest = LLMProvider;
230
+ export interface ModelRoute {
231
+ provider: string;
232
+ model: string;
233
+ fullModel: string;
234
+ }
235
+ export interface RequestRouteInfo {
236
+ provider: LLMProvider;
237
+ originalModel: string;
238
+ targetModel: string;
239
+ }
240
+ export interface ConfigProvider {
241
+ name: string;
242
+ api_base_url: string;
243
+ api_key: string;
244
+ models: string[];
245
+ /** Optional GCP / Antigravity project id (kept as `$ENV` placeholders in config). */
246
+ project_id?: string;
247
+ transformer: {
248
+ use?: TransformerConfigEntry[];
249
+ } & {
250
+ [key: string]: {
251
+ use?: TransformerConfigEntry[];
252
+ } | any;
253
+ };
254
+ tokenizer?: ProviderTokenizerConfig;
255
+ }
@@ -0,0 +1,29 @@
1
+ import { LLMProvider, UnifiedChatRequest } from "./llm";
2
+ import type { UnifiedRequestRuntime } from "./turn-intent";
3
+ export interface TransformerOptions {
4
+ [key: string]: any;
5
+ }
6
+ interface TransformerWithStaticName {
7
+ new (options?: TransformerOptions): Transformer;
8
+ TransformerName?: string;
9
+ }
10
+ export type TransformerConstructor = TransformerWithStaticName;
11
+ export interface TransformerContext {
12
+ req?: any;
13
+ provider?: any;
14
+ signal?: AbortSignal;
15
+ /** Protocol semantics that must not be serialized into the provider body. */
16
+ unifiedRequest?: UnifiedRequestRuntime;
17
+ [key: string]: any;
18
+ }
19
+ export type Transformer = {
20
+ transformRequestIn?: (request: UnifiedChatRequest, provider: LLMProvider, context: TransformerContext) => Promise<Record<string, any>>;
21
+ transformResponseIn?: (response: Response, context?: TransformerContext) => Promise<Response>;
22
+ transformRequestOut?: (request: any, context: TransformerContext) => Promise<UnifiedChatRequest>;
23
+ transformResponseOut?: (response: Response, context: TransformerContext) => Promise<Response>;
24
+ endPoint?: string;
25
+ name?: string;
26
+ auth?: (request: any, provider: LLMProvider, context: TransformerContext) => Promise<any>;
27
+ logger?: any;
28
+ };
29
+ export {};
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Request-local semantics recovered by a wire-protocol transformer.
3
+ *
4
+ * This state belongs on TransformerContext, not UnifiedChatRequest: the latter
5
+ * is also the OpenAI-compatible outbound body and is serialized for providers.
6
+ */
7
+ export type UnifiedTrailingToolResult = {
8
+ toolCallId: string;
9
+ content: string;
10
+ isError: boolean;
11
+ };
12
+ export type UnifiedTurnIntent = {
13
+ source: "anthropic" | "unified-fallback";
14
+ trailingToolResults: UnifiedTrailingToolResult[];
15
+ interruption: "none" | "synthetic_client_interrupt";
16
+ steering: "none" | "meaningful";
17
+ };
18
+ export type UnifiedRequestRuntime = {
19
+ source: "anthropic";
20
+ sourceSessionIdentity?: string;
21
+ turnIntent: UnifiedTurnIntent;
22
+ };
23
+ export declare const ANTHROPIC_SYNTHETIC_INTERRUPT_MARKERS: readonly ["[Request interrupted by user]", "[Request interrupted by user for tool use]"];
24
+ export declare function classifyAnthropicTurnIntent(requestMessages: unknown): UnifiedTurnIntent;
25
+ export declare function extractAnthropicSourceSessionIdentity(metadata: unknown): string | undefined;
26
+ export declare function buildAnthropicRequestRuntime(request: Record<string, any>): UnifiedRequestRuntime;