free-antigravity-cli 1.0.0
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.
- package/LICENSE +201 -0
- package/README.md +142 -0
- package/dist/chat.d.ts +2 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +212 -0
- package/dist/chat.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +216 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +125 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto.d.ts +5 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +93 -0
- package/dist/crypto.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +10 -0
- package/dist/logger.js.map +1 -0
- package/dist/proxy/modelUtils.d.ts +31 -0
- package/dist/proxy/modelUtils.d.ts.map +1 -0
- package/dist/proxy/modelUtils.js +55 -0
- package/dist/proxy/modelUtils.js.map +1 -0
- package/dist/proxy/registry.d.ts +40 -0
- package/dist/proxy/registry.d.ts.map +1 -0
- package/dist/proxy/registry.js +176 -0
- package/dist/proxy/registry.js.map +1 -0
- package/dist/proxy/shared.d.ts +39 -0
- package/dist/proxy/shared.d.ts.map +1 -0
- package/dist/proxy/shared.js +74 -0
- package/dist/proxy/shared.js.map +1 -0
- package/dist/proxy/translators/anthropic.d.ts +119 -0
- package/dist/proxy/translators/anthropic.d.ts.map +1 -0
- package/dist/proxy/translators/anthropic.js +273 -0
- package/dist/proxy/translators/anthropic.js.map +1 -0
- package/dist/proxy/translators/google.d.ts +86 -0
- package/dist/proxy/translators/google.d.ts.map +1 -0
- package/dist/proxy/translators/google.js +111 -0
- package/dist/proxy/translators/google.js.map +1 -0
- package/dist/proxy/translators/ollama.d.ts +27 -0
- package/dist/proxy/translators/ollama.d.ts.map +1 -0
- package/dist/proxy/translators/ollama.js +82 -0
- package/dist/proxy/translators/ollama.js.map +1 -0
- package/dist/proxy/translators/openai.d.ts +132 -0
- package/dist/proxy/translators/openai.d.ts.map +1 -0
- package/dist/proxy/translators/openai.js +396 -0
- package/dist/proxy/translators/openai.js.map +1 -0
- package/dist/proxy/translators/utils.d.ts +60 -0
- package/dist/proxy/translators/utils.d.ts.map +1 -0
- package/dist/proxy/translators/utils.js +504 -0
- package/dist/proxy/translators/utils.js.map +1 -0
- package/dist/proxy.d.ts +22 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +576 -0
- package/dist/proxy.js.map +1 -0
- package/dist/schemaValidator.d.ts +50 -0
- package/dist/schemaValidator.d.ts.map +1 -0
- package/dist/schemaValidator.js +208 -0
- package/dist/schemaValidator.js.map +1 -0
- package/install.cmd +33 -0
- package/package.json +46 -0
- package/src/chat.ts +184 -0
- package/src/cli.ts +184 -0
- package/src/config.ts +99 -0
- package/src/crypto.ts +49 -0
- package/src/logger.ts +8 -0
- package/src/proxy/modelUtils.ts +86 -0
- package/src/proxy/registry.ts +196 -0
- package/src/proxy/shared.ts +102 -0
- package/src/proxy/translators/anthropic.ts +420 -0
- package/src/proxy/translators/google.ts +162 -0
- package/src/proxy/translators/ollama.ts +88 -0
- package/src/proxy/translators/openai.ts +556 -0
- package/src/proxy/translators/utils.ts +552 -0
- package/src/proxy.ts +573 -0
- package/src/schemaValidator.ts +215 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Translator Registry.
|
|
3
|
+
* Auto-discovers translator modules and provides a unified interface for request/response mapping.
|
|
4
|
+
*
|
|
5
|
+
* To add a new provider:
|
|
6
|
+
* 1. Create a file in ./translators/ named <provider>.ts
|
|
7
|
+
* 2. Export: mapGeminiTo<Provider>, map<Provider>ToGemini, map<Provider>ChunkToGemini
|
|
8
|
+
* 3. The registry detects it automatically — no config changes needed.
|
|
9
|
+
*/
|
|
10
|
+
export interface TranslatorModule {
|
|
11
|
+
mapGeminiToOpenAI?: (body: unknown, modelName: string) => unknown;
|
|
12
|
+
mapOpenAIToGemini?: (res: unknown, modelName: string) => unknown;
|
|
13
|
+
mapOpenAIChunkToGemini?: (chunk: unknown, modelName: string) => unknown | null;
|
|
14
|
+
mapGeminiToAnthropic?: (body: unknown, modelName: string) => unknown;
|
|
15
|
+
mapAnthropicToGemini?: (res: unknown, modelName: string) => unknown;
|
|
16
|
+
mapAnthropicChunkToGemini?: (chunk: unknown, modelName: string) => unknown | null;
|
|
17
|
+
mapGeminiToGoogle?: (body: unknown, modelName: string) => unknown;
|
|
18
|
+
mapGoogleToGemini?: (res: unknown, modelName: string) => unknown;
|
|
19
|
+
mapGoogleChunkToGemini?: (chunk: unknown, modelName: string) => unknown | null;
|
|
20
|
+
getGoogleApiUrl?: (baseUrl: string, modelName: string, isStream: boolean) => string;
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
export interface ProviderHeaders {
|
|
24
|
+
'Content-Type': string;
|
|
25
|
+
Authorization?: string;
|
|
26
|
+
'x-api-key'?: string;
|
|
27
|
+
'anthropic-version'?: string;
|
|
28
|
+
'x-goog-api-key'?: string;
|
|
29
|
+
'HTTP-Referer'?: string;
|
|
30
|
+
'X-Title'?: string;
|
|
31
|
+
[key: string]: string | undefined;
|
|
32
|
+
}
|
|
33
|
+
export declare function getTranslator(provider: string): TranslatorModule | null;
|
|
34
|
+
export declare function translateRequest(provider: string, geminiBody: unknown, modelName: string): unknown;
|
|
35
|
+
export declare function translateResponse(provider: string, providerRes: unknown, modelName: string): unknown;
|
|
36
|
+
export declare function translateStreamChunk(provider: string, chunk: unknown, modelName: string): unknown;
|
|
37
|
+
export declare function getProviderHeaders(provider: string, apiKey: string): ProviderHeaders;
|
|
38
|
+
export declare function supportsStreaming(provider: string): boolean;
|
|
39
|
+
export declare function getProviderUrl(baseUrl: string, modelName: string, isStream: boolean, translator: TranslatorModule | null): string;
|
|
40
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/proxy/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAC/E,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACrE,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACpE,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAClF,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;IACjE,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAC/E,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAC;IACpF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAkBD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAKvE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAuBlG;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAoBpG;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAqBjG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAgCpF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE3D;AAID,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,gBAAgB,GAAG,IAAI,GAClC,MAAM,CAUR"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider Translator Registry.
|
|
4
|
+
* Auto-discovers translator modules and provides a unified interface for request/response mapping.
|
|
5
|
+
*
|
|
6
|
+
* To add a new provider:
|
|
7
|
+
* 1. Create a file in ./translators/ named <provider>.ts
|
|
8
|
+
* 2. Export: mapGeminiTo<Provider>, map<Provider>ToGemini, map<Provider>ChunkToGemini
|
|
9
|
+
* 3. The registry detects it automatically — no config changes needed.
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.getTranslator = getTranslator;
|
|
46
|
+
exports.translateRequest = translateRequest;
|
|
47
|
+
exports.translateResponse = translateResponse;
|
|
48
|
+
exports.translateStreamChunk = translateStreamChunk;
|
|
49
|
+
exports.getProviderHeaders = getProviderHeaders;
|
|
50
|
+
exports.supportsStreaming = supportsStreaming;
|
|
51
|
+
exports.getProviderUrl = getProviderUrl;
|
|
52
|
+
const logger_1 = require("../logger");
|
|
53
|
+
const openaiModule = __importStar(require("./translators/openai"));
|
|
54
|
+
const anthropicModule = __importStar(require("./translators/anthropic"));
|
|
55
|
+
const googleModule = __importStar(require("./translators/google"));
|
|
56
|
+
const ollamaModule = __importStar(require("./translators/ollama"));
|
|
57
|
+
// ─── Registry State ───────────────────────────────────────────────────────
|
|
58
|
+
const translators = new Map();
|
|
59
|
+
// ─── Auto-Discovery ───────────────────────────────────────────────────────
|
|
60
|
+
function loadTranslators() {
|
|
61
|
+
translators.set('openai', openaiModule);
|
|
62
|
+
translators.set('anthropic', anthropicModule);
|
|
63
|
+
translators.set('google', googleModule);
|
|
64
|
+
translators.set('ollama', ollamaModule);
|
|
65
|
+
logger_1.log.info(`[TranslatorRegistry] 4 provider translator(s) loaded: openai, anthropic, google, ollama`);
|
|
66
|
+
}
|
|
67
|
+
// ─── Public API ───────────────────────────────────────────────────────────
|
|
68
|
+
function getTranslator(provider) {
|
|
69
|
+
// openrouter uses OpenAI-compatible API — reuse OpenAI translator
|
|
70
|
+
if (provider === 'openrouter')
|
|
71
|
+
return translators.get('openai') || null;
|
|
72
|
+
const key = provider === 'custom' ? 'openai' : provider;
|
|
73
|
+
return translators.get(key) || translators.get('openai') || null;
|
|
74
|
+
}
|
|
75
|
+
function translateRequest(provider, geminiBody, modelName) {
|
|
76
|
+
const t = getTranslator(provider);
|
|
77
|
+
if (provider === 'google') {
|
|
78
|
+
return geminiBody; // passthrough
|
|
79
|
+
}
|
|
80
|
+
if (provider === 'openai' || provider === 'ollama' || provider === 'custom' || provider === 'openrouter') {
|
|
81
|
+
return t?.mapGeminiToOpenAI ? t.mapGeminiToOpenAI(geminiBody, modelName) : geminiBody;
|
|
82
|
+
}
|
|
83
|
+
if (provider === 'anthropic') {
|
|
84
|
+
return t?.mapGeminiToAnthropic ? t.mapGeminiToAnthropic(geminiBody, modelName) : geminiBody;
|
|
85
|
+
}
|
|
86
|
+
// Generic: try mapGeminiTo<Provider> convention
|
|
87
|
+
const fnName = `mapGeminiTo${provider.charAt(0).toUpperCase() + provider.slice(1)}`;
|
|
88
|
+
if (t && typeof t[fnName] === 'function') {
|
|
89
|
+
return t[fnName](geminiBody, modelName);
|
|
90
|
+
}
|
|
91
|
+
logger_1.log.warn(`[TranslatorRegistry] No request translator for provider "${provider}", passing through`);
|
|
92
|
+
return geminiBody;
|
|
93
|
+
}
|
|
94
|
+
function translateResponse(provider, providerRes, modelName) {
|
|
95
|
+
const t = getTranslator(provider);
|
|
96
|
+
if (provider === 'google')
|
|
97
|
+
return providerRes;
|
|
98
|
+
if (provider === 'openai' || provider === 'ollama' || provider === 'custom' || provider === 'openrouter') {
|
|
99
|
+
return t?.mapOpenAIToGemini ? t.mapOpenAIToGemini(providerRes, modelName) : providerRes;
|
|
100
|
+
}
|
|
101
|
+
if (provider === 'anthropic') {
|
|
102
|
+
return t?.mapAnthropicToGemini ? t.mapAnthropicToGemini(providerRes, modelName) : providerRes;
|
|
103
|
+
}
|
|
104
|
+
const fnName = `map${provider.charAt(0).toUpperCase() + provider.slice(1)}ToGemini`;
|
|
105
|
+
if (t && typeof t[fnName] === 'function') {
|
|
106
|
+
return t[fnName](providerRes, modelName);
|
|
107
|
+
}
|
|
108
|
+
logger_1.log.warn(`[TranslatorRegistry] No response translator for provider "${provider}", passing through`);
|
|
109
|
+
return providerRes;
|
|
110
|
+
}
|
|
111
|
+
function translateStreamChunk(provider, chunk, modelName) {
|
|
112
|
+
const t = getTranslator(provider);
|
|
113
|
+
if (provider === 'google') {
|
|
114
|
+
return t?.mapGoogleChunkToGemini ? t.mapGoogleChunkToGemini(chunk, modelName) : null;
|
|
115
|
+
}
|
|
116
|
+
if (provider === 'openai' || provider === 'ollama' || provider === 'custom' || provider === 'openrouter') {
|
|
117
|
+
return t?.mapOpenAIChunkToGemini ? t.mapOpenAIChunkToGemini(chunk, modelName) : null;
|
|
118
|
+
}
|
|
119
|
+
if (provider === 'anthropic') {
|
|
120
|
+
return t?.mapAnthropicChunkToGemini ? t.mapAnthropicChunkToGemini(chunk, modelName) : null;
|
|
121
|
+
}
|
|
122
|
+
const fnName = `map${provider.charAt(0).toUpperCase() + provider.slice(1)}ChunkToGemini`;
|
|
123
|
+
if (t && typeof t[fnName] === 'function') {
|
|
124
|
+
return t[fnName](chunk, modelName);
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
function getProviderHeaders(provider, apiKey) {
|
|
129
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
130
|
+
switch (provider) {
|
|
131
|
+
case 'openai':
|
|
132
|
+
case 'custom':
|
|
133
|
+
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
134
|
+
break;
|
|
135
|
+
case 'openrouter':
|
|
136
|
+
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
137
|
+
// OpenRouter optional headers for leaderboard attribution
|
|
138
|
+
headers['HTTP-Referer'] = 'https://antigravity.google';
|
|
139
|
+
headers['X-Title'] = 'Antigravity';
|
|
140
|
+
break;
|
|
141
|
+
case 'anthropic':
|
|
142
|
+
headers['x-api-key'] = apiKey;
|
|
143
|
+
headers['anthropic-version'] = '2025-04-01';
|
|
144
|
+
break;
|
|
145
|
+
case 'google':
|
|
146
|
+
headers['x-goog-api-key'] = apiKey;
|
|
147
|
+
break;
|
|
148
|
+
case 'ollama':
|
|
149
|
+
// Ollama typically doesn't need auth headers
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
if (apiKey && apiKey !== 'none') {
|
|
153
|
+
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
154
|
+
}
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
return headers;
|
|
158
|
+
}
|
|
159
|
+
function supportsStreaming(provider) {
|
|
160
|
+
return ['openai', 'ollama', 'custom', 'anthropic', 'google', 'openrouter'].includes(provider);
|
|
161
|
+
}
|
|
162
|
+
// ─── URL Helpers ──────────────────────────────────────────────────────────
|
|
163
|
+
function getProviderUrl(baseUrl, modelName, isStream, translator) {
|
|
164
|
+
// Google AI Studio: dynamic streaming vs non-streaming URL
|
|
165
|
+
if (translator && typeof translator['getGoogleApiUrl'] === 'function') {
|
|
166
|
+
return translator['getGoogleApiUrl'](baseUrl, modelName, isStream);
|
|
167
|
+
}
|
|
168
|
+
// Ollama: normalize to standard /v1/chat/completions endpoint
|
|
169
|
+
if (translator && typeof translator['getOllamaApiUrl'] === 'function') {
|
|
170
|
+
return translator['getOllamaApiUrl'](baseUrl);
|
|
171
|
+
}
|
|
172
|
+
return baseUrl;
|
|
173
|
+
}
|
|
174
|
+
// ─── Boot ─────────────────────────────────────────────────────────────────
|
|
175
|
+
loadTranslators();
|
|
176
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/proxy/registry.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDH,sCAKC;AAED,4CAuBC;AAED,8CAoBC;AAED,oDAqBC;AAED,gDAgCC;AAED,8CAEC;AAID,wCAeC;AArLD,sCAAgC;AAChC,mEAAqD;AACrD,yEAA2D;AAC3D,mEAAqD;AACrD,mEAAqD;AA6BrD,6EAA6E;AAE7E,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;AAExD,6EAA6E;AAE7E,SAAS,eAAe;IACtB,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,YAA2C,CAAC,CAAC;IACvE,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,eAA8C,CAAC,CAAC;IAC7E,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,YAA2C,CAAC,CAAC;IACvE,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,YAA2C,CAAC,CAAC;IACvE,YAAG,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;AACtG,CAAC;AAED,6EAA6E;AAE7E,SAAgB,aAAa,CAAC,QAAgB;IAC5C,kEAAkE;IAClE,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACxE,MAAM,GAAG,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxD,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AACnE,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,UAAmB,EAAE,SAAiB;IACvF,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,CAAC,cAAc;IACnC,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACzG,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IACxF,CAAC;IAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC9F,CAAC;IAED,gDAAgD;IAChD,MAAM,MAAM,GAAG,cAAc,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;QACzC,OAAQ,CAAC,CAAC,MAAM,CAAqC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC/E,CAAC;IAED,YAAG,CAAC,IAAI,CAAC,4DAA4D,QAAQ,oBAAoB,CAAC,CAAC;IACnG,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAAgB,EAAE,WAAoB,EAAE,SAAiB;IACzF,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC;IAE9C,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACzG,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1F,CAAC;IAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IACpF,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;QACzC,OAAQ,CAAC,CAAC,MAAM,CAAqC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAChF,CAAC;IAED,YAAG,CAAC,IAAI,CAAC,6DAA6D,QAAQ,oBAAoB,CAAC,CAAC;IACpG,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,KAAc,EAAE,SAAiB;IACtF,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACzG,OAAO,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,CAAC;IAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,CAAC,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;IACzF,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;QACzC,OAAQ,CAAC,CAAC,MAAM,CAAqC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,MAAc;IACjE,MAAM,OAAO,GAAoB,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAExE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;YAC9C,MAAM;QACR,KAAK,YAAY;YACf,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;YAC9C,0DAA0D;YAC1D,OAAO,CAAC,cAAc,CAAC,GAAG,4BAA4B,CAAC;YACvD,OAAO,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC;YACnC,MAAM;QACR,KAAK,WAAW;YACd,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;YAC9B,OAAO,CAAC,mBAAmB,CAAC,GAAG,YAAY,CAAC;YAC5C,MAAM;QACR,KAAK,QAAQ;YACX,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;YACnC,MAAM;QACR,KAAK,QAAQ;YACX,6CAA6C;YAC7C,MAAM;QACR;YACE,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAChC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;YAChD,CAAC;YACD,MAAM;IACV,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAgB,iBAAiB,CAAC,QAAgB;IAChD,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChG,CAAC;AAED,6EAA6E;AAE7E,SAAgB,cAAc,CAC5B,OAAe,EACf,SAAiB,EACjB,QAAiB,EACjB,UAAmC;IAEnC,2DAA2D;IAC3D,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,iBAAiB,CAAC,KAAK,UAAU,EAAE,CAAC;QACtE,OAAQ,UAAU,CAAC,iBAAiB,CAAoC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzG,CAAC;IACD,8DAA8D;IAC9D,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,iBAAiB,CAAC,KAAK,UAAU,EAAE,CAAC;QACtE,OAAQ,UAAU,CAAC,iBAAiB,CAAoC,CAAC,OAAO,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6EAA6E;AAE7E,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared state module for proxy orchestration.
|
|
3
|
+
* Extracted from proxy.js to decouple translators from main orchestration.
|
|
4
|
+
*/
|
|
5
|
+
export interface StreamContext {
|
|
6
|
+
accumulatedText: string;
|
|
7
|
+
accumulatedReasoning: string;
|
|
8
|
+
toolCalls: Record<number, {
|
|
9
|
+
id: string;
|
|
10
|
+
name: string;
|
|
11
|
+
arguments: string;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export interface StateTimestamps {
|
|
15
|
+
streamCtx: Map<string, number>;
|
|
16
|
+
toolCallIds: Map<string, number>;
|
|
17
|
+
translatedCalls: Map<string, number>;
|
|
18
|
+
reasoning: Map<string, number>;
|
|
19
|
+
}
|
|
20
|
+
export interface TranslatedCallInfo {
|
|
21
|
+
originalName: string;
|
|
22
|
+
translatedName: string;
|
|
23
|
+
cmd: string;
|
|
24
|
+
cwd: string;
|
|
25
|
+
}
|
|
26
|
+
/** modelName → { "functionName": "original_tool_call_id" } */
|
|
27
|
+
export declare const modelToolCallIds: Map<string, Record<string, string>>;
|
|
28
|
+
/** modelName → preserved reasoning_content from previous turn */
|
|
29
|
+
export declare const modelReasoningContent: Map<string, string>;
|
|
30
|
+
/** streamId → { accumulatedText, accumulatedReasoning, toolCalls } */
|
|
31
|
+
export declare const activeStreamContexts: Map<string, StreamContext>;
|
|
32
|
+
/** toolCallId → { originalName, translatedName, cmd, cwd } */
|
|
33
|
+
export declare const translatedToolCalls: Map<string, TranslatedCallInfo>;
|
|
34
|
+
/** State entry timestamps for periodic cleanup */
|
|
35
|
+
export declare const stateTimestamps: StateTimestamps;
|
|
36
|
+
export declare function touchStateTimestamp(map: Map<string, number>, key: string): void;
|
|
37
|
+
export declare function startCleanupInterval(): void;
|
|
38
|
+
export declare function stopCleanupInterval(): void;
|
|
39
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/proxy/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAID,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,qCAA4C,CAAC;AAE1E,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,qBAA4B,CAAC;AAE/D,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,4BAAmC,CAAC;AAErE,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,iCAAwC,CAAC;AAEzE,kDAAkD;AAClD,eAAO,MAAM,eAAe,EAAE,eAK7B,CAAC;AAIF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/E;AAMD,wBAAgB,oBAAoB,IAAI,IAAI,CAgC3C;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared state module for proxy orchestration.
|
|
4
|
+
* Extracted from proxy.js to decouple translators from main orchestration.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.stateTimestamps = exports.translatedToolCalls = exports.activeStreamContexts = exports.modelReasoningContent = exports.modelToolCallIds = void 0;
|
|
8
|
+
exports.touchStateTimestamp = touchStateTimestamp;
|
|
9
|
+
exports.startCleanupInterval = startCleanupInterval;
|
|
10
|
+
exports.stopCleanupInterval = stopCleanupInterval;
|
|
11
|
+
// ─── State ────────────────────────────────────────────────────────────────
|
|
12
|
+
/** modelName → { "functionName": "original_tool_call_id" } */
|
|
13
|
+
exports.modelToolCallIds = new Map();
|
|
14
|
+
/** modelName → preserved reasoning_content from previous turn */
|
|
15
|
+
exports.modelReasoningContent = new Map();
|
|
16
|
+
/** streamId → { accumulatedText, accumulatedReasoning, toolCalls } */
|
|
17
|
+
exports.activeStreamContexts = new Map();
|
|
18
|
+
/** toolCallId → { originalName, translatedName, cmd, cwd } */
|
|
19
|
+
exports.translatedToolCalls = new Map();
|
|
20
|
+
/** State entry timestamps for periodic cleanup */
|
|
21
|
+
exports.stateTimestamps = {
|
|
22
|
+
streamCtx: new Map(),
|
|
23
|
+
toolCallIds: new Map(),
|
|
24
|
+
translatedCalls: new Map(),
|
|
25
|
+
reasoning: new Map(),
|
|
26
|
+
};
|
|
27
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────
|
|
28
|
+
function touchStateTimestamp(map, key) {
|
|
29
|
+
map.set(key, Date.now());
|
|
30
|
+
}
|
|
31
|
+
// ─── Periodic Cleanup (managed lifecycle) ─────────────────────────────────
|
|
32
|
+
let cleanupInterval = null;
|
|
33
|
+
function startCleanupInterval() {
|
|
34
|
+
if (cleanupInterval)
|
|
35
|
+
return; // already running
|
|
36
|
+
cleanupInterval = setInterval(() => {
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
const STREAM_TTL = 600000; // 10 minutes for active stream contexts
|
|
39
|
+
const TOOL_TTL = 1800000; // 30 minutes for tool call IDs & reasoning
|
|
40
|
+
for (const [key, ts] of exports.stateTimestamps.streamCtx) {
|
|
41
|
+
if (now - ts > STREAM_TTL) {
|
|
42
|
+
exports.activeStreamContexts.delete(key);
|
|
43
|
+
exports.stateTimestamps.streamCtx.delete(key);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
for (const [key, ts] of exports.stateTimestamps.toolCallIds) {
|
|
47
|
+
if (now - ts > TOOL_TTL) {
|
|
48
|
+
exports.modelToolCallIds.delete(key);
|
|
49
|
+
exports.stateTimestamps.toolCallIds.delete(key);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
for (const [key, ts] of exports.stateTimestamps.translatedCalls) {
|
|
53
|
+
if (now - ts > TOOL_TTL) {
|
|
54
|
+
exports.translatedToolCalls.delete(key);
|
|
55
|
+
exports.stateTimestamps.translatedCalls.delete(key);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const [key, ts] of exports.stateTimestamps.reasoning) {
|
|
59
|
+
if (now - ts > TOOL_TTL) {
|
|
60
|
+
exports.modelReasoningContent.delete(key);
|
|
61
|
+
exports.stateTimestamps.reasoning.delete(key);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}, 300000);
|
|
65
|
+
}
|
|
66
|
+
function stopCleanupInterval() {
|
|
67
|
+
if (cleanupInterval) {
|
|
68
|
+
clearInterval(cleanupInterval);
|
|
69
|
+
cleanupInterval = null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Auto-start for backward compatibility (will be replaced by proxy.ts lifecycle)
|
|
73
|
+
startCleanupInterval();
|
|
74
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/proxy/shared.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAgDH,kDAEC;AAMD,oDAgCC;AAED,kDAKC;AAvED,6EAA6E;AAE7E,8DAA8D;AACjD,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAkC,CAAC;AAE1E,iEAAiE;AACpD,QAAA,qBAAqB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE/D,sEAAsE;AACzD,QAAA,oBAAoB,GAAG,IAAI,GAAG,EAAyB,CAAC;AAErE,8DAA8D;AACjD,QAAA,mBAAmB,GAAG,IAAI,GAAG,EAA8B,CAAC;AAEzE,kDAAkD;AACrC,QAAA,eAAe,GAAoB;IAC9C,SAAS,EAAE,IAAI,GAAG,EAAE;IACpB,WAAW,EAAE,IAAI,GAAG,EAAE;IACtB,eAAe,EAAE,IAAI,GAAG,EAAE;IAC1B,SAAS,EAAE,IAAI,GAAG,EAAE;CACrB,CAAC;AAEF,6EAA6E;AAE7E,SAAgB,mBAAmB,CAAC,GAAwB,EAAE,GAAW;IACvE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED,6EAA6E;AAE7E,IAAI,eAAe,GAA0C,IAAI,CAAC;AAElE,SAAgB,oBAAoB;IAClC,IAAI,eAAe;QAAE,OAAO,CAAC,kBAAkB;IAC/C,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAO,CAAC,CAAC,wCAAwC;QACpE,MAAM,QAAQ,GAAG,OAAS,CAAC,CAAC,2CAA2C;QAEvE,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,uBAAe,CAAC,SAAS,EAAE,CAAC;YAClD,IAAI,GAAG,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;gBAC1B,4BAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjC,uBAAe,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,uBAAe,CAAC,WAAW,EAAE,CAAC;YACpD,IAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACxB,wBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7B,uBAAe,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,uBAAe,CAAC,eAAe,EAAE,CAAC;YACxD,IAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACxB,2BAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC,uBAAe,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,uBAAe,CAAC,SAAS,EAAE,CAAC;YAClD,IAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBACxB,6BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClC,uBAAe,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC,EAAE,MAAO,CAAC,CAAC;AACd,CAAC;AAED,SAAgB,mBAAmB;IACjC,IAAI,eAAe,EAAE,CAAC;QACpB,aAAa,CAAC,eAAe,CAAC,CAAC;QAC/B,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anthropic provider translator.
|
|
3
|
+
* Handles Gemini ↔ Anthropic request/response mapping and streaming SSE events.
|
|
4
|
+
*/
|
|
5
|
+
interface GeminiTool {
|
|
6
|
+
functionDeclarations?: GeminiFunctionDeclaration[];
|
|
7
|
+
}
|
|
8
|
+
interface GeminiFunctionDeclaration {
|
|
9
|
+
name: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
parameters?: GeminiParameters;
|
|
12
|
+
}
|
|
13
|
+
interface GeminiParameters {
|
|
14
|
+
type: string;
|
|
15
|
+
properties?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
interface AnthropicTool {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
input_schema: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
interface GeminiContent {
|
|
23
|
+
role?: string;
|
|
24
|
+
parts?: GeminiPart[];
|
|
25
|
+
}
|
|
26
|
+
interface GeminiPart {
|
|
27
|
+
text?: string;
|
|
28
|
+
thought?: boolean;
|
|
29
|
+
functionCall?: GeminiFunctionCall;
|
|
30
|
+
functionResponse?: GeminiFunctionResponse;
|
|
31
|
+
}
|
|
32
|
+
interface GeminiFunctionCall {
|
|
33
|
+
name: string;
|
|
34
|
+
args: Record<string, unknown>;
|
|
35
|
+
id?: string;
|
|
36
|
+
}
|
|
37
|
+
interface GeminiFunctionResponse {
|
|
38
|
+
name: string;
|
|
39
|
+
response: unknown;
|
|
40
|
+
id?: string;
|
|
41
|
+
}
|
|
42
|
+
interface GeminiRequestBody {
|
|
43
|
+
systemInstruction?: {
|
|
44
|
+
parts: GeminiPart[];
|
|
45
|
+
};
|
|
46
|
+
contents?: GeminiContent[];
|
|
47
|
+
tools?: GeminiTool[];
|
|
48
|
+
generationConfig?: {
|
|
49
|
+
temperature?: number;
|
|
50
|
+
maxOutputTokens?: number;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
interface AnthropicContentBlock {
|
|
54
|
+
type: 'text' | 'tool_use' | 'tool_result' | 'thinking';
|
|
55
|
+
text?: string;
|
|
56
|
+
thinking?: string;
|
|
57
|
+
id?: string;
|
|
58
|
+
name?: string;
|
|
59
|
+
input?: Record<string, unknown>;
|
|
60
|
+
tool_use_id?: string;
|
|
61
|
+
content?: string | AnthropicContentBlock[];
|
|
62
|
+
}
|
|
63
|
+
type AnthropicMessageRole = 'user' | 'assistant';
|
|
64
|
+
interface AnthropicMessage {
|
|
65
|
+
role: AnthropicMessageRole;
|
|
66
|
+
content: string | AnthropicContentBlock[];
|
|
67
|
+
}
|
|
68
|
+
interface AnthropicRequestBody {
|
|
69
|
+
model: string;
|
|
70
|
+
messages: AnthropicMessage[];
|
|
71
|
+
system?: string;
|
|
72
|
+
max_tokens: number;
|
|
73
|
+
temperature?: number;
|
|
74
|
+
tools?: AnthropicTool[];
|
|
75
|
+
}
|
|
76
|
+
interface AnthropicResponse {
|
|
77
|
+
content?: AnthropicContentBlock[];
|
|
78
|
+
usage?: {
|
|
79
|
+
input_tokens: number;
|
|
80
|
+
output_tokens: number;
|
|
81
|
+
};
|
|
82
|
+
stop_reason?: string;
|
|
83
|
+
type?: string;
|
|
84
|
+
message?: {
|
|
85
|
+
id: string;
|
|
86
|
+
};
|
|
87
|
+
index?: number;
|
|
88
|
+
content_block?: AnthropicContentBlock;
|
|
89
|
+
delta?: {
|
|
90
|
+
type?: string;
|
|
91
|
+
text?: string;
|
|
92
|
+
thinking?: string;
|
|
93
|
+
partial_json?: string;
|
|
94
|
+
stop_reason?: string;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
interface GeminiGenerateContentResponse {
|
|
98
|
+
candidates: GeminiCandidate[];
|
|
99
|
+
usageMetadata?: GeminiUsageMetadata;
|
|
100
|
+
}
|
|
101
|
+
interface GeminiCandidate {
|
|
102
|
+
content: {
|
|
103
|
+
parts: GeminiPart[];
|
|
104
|
+
role: string;
|
|
105
|
+
};
|
|
106
|
+
finishReason: string;
|
|
107
|
+
index: number;
|
|
108
|
+
}
|
|
109
|
+
interface GeminiUsageMetadata {
|
|
110
|
+
promptTokenCount: number;
|
|
111
|
+
candidatesTokenCount: number;
|
|
112
|
+
totalTokenCount: number;
|
|
113
|
+
}
|
|
114
|
+
declare function mapGeminiToolsToAnthropic(geminiTools: GeminiTool[]): AnthropicTool[];
|
|
115
|
+
export declare function mapGeminiToAnthropic(geminiBody: GeminiRequestBody, modelName: string): AnthropicRequestBody;
|
|
116
|
+
export declare function mapAnthropicToGemini(anthRes: AnthropicResponse, modelName: string): GeminiGenerateContentResponse;
|
|
117
|
+
export declare function mapAnthropicChunkToGemini(chunk: AnthropicResponse, modelName: string): GeminiCandidate | null;
|
|
118
|
+
export { mapGeminiToolsToAnthropic };
|
|
119
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/proxy/translators/anthropic.ts"],"names":[],"mappings":"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"}
|