@omnicross/core 0.1.1 → 0.1.2
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/dist/ApiConverter.cjs +3 -778
- package/dist/ApiConverter.js +12 -751
- package/dist/{CompletionService-DtOF_War.d.cts → CompletionService-D3a47vdU.d.cts} +2 -1
- package/dist/{CompletionService-7fCmKAP3.d.ts → CompletionService-DdWaAxq0.d.ts} +2 -1
- package/dist/auth/GeminiCodeAssistProjectResolver.cjs +27 -60
- package/dist/auth/GeminiCodeAssistProjectResolver.js +5 -9
- package/dist/builtin-web-fetch-77JZUZGM.cjs +100 -0
- package/dist/builtin-web-fetch-IGLBX2XY.js +100 -0
- package/dist/chunk-2DCNB7DF.cjs +514 -0
- package/dist/chunk-2FEVTJWG.js +4400 -0
- package/dist/chunk-3MEACFK3.js +193 -0
- package/dist/chunk-3OPYJG76.cjs +266 -0
- package/dist/chunk-46RLHI7D.js +0 -0
- package/dist/chunk-46ZIFWYG.cjs +277 -0
- package/dist/chunk-4NBS6KPV.cjs +43 -0
- package/dist/chunk-4VAVYUZS.cjs +991 -0
- package/dist/chunk-5ERIZW3D.js +44 -0
- package/dist/chunk-5HTVET6E.js +514 -0
- package/dist/chunk-5ZQBEOMD.js +764 -0
- package/dist/chunk-6VIXXLMX.cjs +14 -0
- package/dist/chunk-745DV5FL.js +147 -0
- package/dist/chunk-74TMJA7Z.js +53 -0
- package/dist/chunk-7VU7V2E4.js +0 -0
- package/dist/chunk-7YN22L2H.cjs +87 -0
- package/dist/chunk-A2YMUCBT.cjs +105 -0
- package/dist/chunk-AQ5TNQB7.js +13 -0
- package/dist/chunk-AVYJ4YBN.js +58 -0
- package/dist/chunk-C72S6TTV.cjs +49 -0
- package/dist/chunk-C7PSERMH.js +87 -0
- package/dist/chunk-CDHS2QDC.js +179 -0
- package/dist/chunk-DK4A7DLE.js +266 -0
- package/dist/chunk-DRWHTIIZ.js +13 -0
- package/dist/chunk-DWKQZ2SK.cjs +254 -0
- package/dist/chunk-E3WHL7CO.js +14 -0
- package/dist/chunk-EYZYXJTJ.cjs +1 -0
- package/dist/chunk-FMOBD2OQ.js +39 -0
- package/dist/chunk-FTQ7IQUC.js +991 -0
- package/dist/chunk-FZ46M34D.cjs +1 -0
- package/dist/chunk-G2FUJNA2.cjs +193 -0
- package/dist/chunk-G2UTNSGU.js +277 -0
- package/dist/chunk-GBHYAGX3.cjs +26 -0
- package/dist/chunk-GMMT7RVN.cjs +39 -0
- package/dist/chunk-H5JUT3KV.js +105 -0
- package/dist/chunk-HQP3K7PU.cjs +431 -0
- package/dist/chunk-JO5NLTLY.js +46 -0
- package/dist/chunk-JWC6APFQ.js +23 -0
- package/dist/chunk-KUU2RNG6.cjs +46 -0
- package/dist/chunk-LKZJEL6E.cjs +124 -0
- package/dist/chunk-MNYKI4CI.js +94 -0
- package/dist/chunk-MZNPGW5Q.js +26 -0
- package/dist/chunk-N3V2J5ZO.cjs +53 -0
- package/dist/chunk-NYUNU75A.cjs +44 -0
- package/dist/chunk-NZYN7C3P.cjs +179 -0
- package/dist/chunk-O466Y272.js +235 -0
- package/dist/chunk-PXUJF5HS.js +124 -0
- package/dist/chunk-QBZJ7P2T.cjs +13 -0
- package/dist/chunk-QOCNX236.js +46 -0
- package/dist/chunk-QXD4MV2X.cjs +23 -0
- package/dist/chunk-R3HK6R4B.cjs +13 -0
- package/dist/chunk-RSJ3TWJQ.cjs +186 -0
- package/dist/chunk-S4WBV25P.js +913 -0
- package/dist/chunk-SN3YWBX7.cjs +4400 -0
- package/dist/chunk-SPVWWUHX.cjs +46 -0
- package/dist/chunk-SUEGJ75D.cjs +764 -0
- package/dist/chunk-SVNDB62D.cjs +58 -0
- package/dist/chunk-UYPEN5XE.cjs +235 -0
- package/dist/chunk-V5KPWNYX.cjs +147 -0
- package/dist/chunk-VVEHS2LI.js +431 -0
- package/dist/chunk-XBSYYZIY.cjs +94 -0
- package/dist/chunk-YGXJGRFI.cjs +913 -0
- package/dist/chunk-YMFAJFQT.cjs +173 -0
- package/dist/chunk-Z7LUNECE.js +49 -0
- package/dist/chunk-Z7Y2NPHY.js +186 -0
- package/dist/chunk-ZJZAOKI7.js +254 -0
- package/dist/chunk-ZLX3KGXX.js +173 -0
- package/dist/chunk-ZSVQT3PW.js +43 -0
- package/dist/completion/ApiKeyPoolService.cjs +23 -48
- package/dist/completion/ApiKeyPoolService.d.cts +150 -2
- package/dist/completion/ApiKeyPoolService.d.ts +150 -2
- package/dist/completion/BuiltinToolExecutor.cjs +9 -324
- package/dist/completion/BuiltinToolExecutor.js +6 -290
- package/dist/completion/CompletionService.cjs +38 -3487
- package/dist/completion/CompletionService.d.cts +3 -2
- package/dist/completion/CompletionService.d.ts +3 -2
- package/dist/completion/CompletionService.js +34 -3457
- package/dist/completion/NativeSearchInjector.cjs +8 -192
- package/dist/completion/NativeSearchInjector.js +7 -162
- package/dist/completion/ProviderSearchInjector.cjs +12 -39
- package/dist/completion/native-search-types.cjs +13 -66
- package/dist/completion/native-search-types.js +7 -31
- package/dist/completion/openrouter-headers.cjs +15 -71
- package/dist/completion/openrouter-headers.js +8 -34
- package/dist/completion/openrouter-models.cjs +10 -67
- package/dist/completion/openrouter-models.js +4 -34
- package/dist/completion/types.cjs +1 -18
- package/dist/completion/url-builder.cjs +24 -138
- package/dist/completion/url-builder.js +12 -92
- package/dist/completion.cjs +55 -3989
- package/dist/completion.d.cts +3 -2
- package/dist/completion.d.ts +3 -2
- package/dist/completion.js +63 -3953
- package/dist/index.cjs +197 -10429
- package/dist/index.d.cts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +125 -10268
- package/dist/logger-4GvQNzhE.d.cts +22 -0
- package/dist/logger-4GvQNzhE.d.ts +22 -0
- package/dist/outbound-api/routeResolver.cjs +7 -217
- package/dist/outbound-api/routeResolver.d.cts +2 -1
- package/dist/outbound-api/routeResolver.d.ts +2 -1
- package/dist/outbound-api/routeResolver.js +6 -187
- package/dist/outbound-api/subscriptionRegistryPort.cjs +7 -37
- package/dist/outbound-api/subscriptionRegistryPort.d.cts +2 -1
- package/dist/outbound-api/subscriptionRegistryPort.d.ts +2 -1
- package/dist/outbound-api/subscriptionRegistryPort.js +4 -8
- package/dist/outbound-api/types.cjs +1 -18
- package/dist/outbound-api/types.d.cts +2 -1
- package/dist/outbound-api/types.d.ts +2 -1
- package/dist/outbound-api.cjs +35 -5221
- package/dist/outbound-api.d.cts +2 -1
- package/dist/outbound-api.d.ts +2 -1
- package/dist/outbound-api.js +54 -5194
- package/dist/pipeline/AuthSource.cjs +1 -18
- package/dist/pipeline/LlmConfigProviderAuth.cjs +5 -166
- package/dist/pipeline/LlmConfigProviderAuth.d.cts +2 -1
- package/dist/pipeline/LlmConfigProviderAuth.d.ts +2 -1
- package/dist/pipeline/LlmConfigProviderAuth.js +5 -139
- package/dist/pipeline/SubscriptionAuthSource.cjs +6 -128
- package/dist/pipeline/SubscriptionAuthSource.js +5 -99
- package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
- package/dist/pipeline/executeProviderCall.cjs +5 -69
- package/dist/pipeline/executeProviderCall.js +3 -42
- package/dist/pipeline/resolveProviderChain.cjs +5 -46
- package/dist/pipeline/resolveProviderChain.js +3 -19
- package/dist/pipeline/resolveSubscriptionChain.cjs +5 -67
- package/dist/pipeline/resolveSubscriptionChain.js +3 -40
- package/dist/ports/gemini-code-assist-resolver.cjs +7 -37
- package/dist/ports/gemini-code-assist-resolver.js +4 -8
- package/dist/ports/pricing-store.cjs +1 -0
- package/dist/ports/pricing-store.d.cts +50 -0
- package/dist/ports/pricing-store.d.ts +50 -0
- package/dist/ports/pricing-store.js +0 -0
- package/dist/ports/provider-config-source.cjs +1 -18
- package/dist/ports/usage-event-store.cjs +1 -0
- package/dist/ports/usage-event-store.d.cts +29 -0
- package/dist/ports/usage-event-store.d.ts +29 -0
- package/dist/ports/usage-event-store.js +0 -0
- package/dist/ports/web-search-backend.cjs +1 -18
- package/dist/ports.cjs +1 -18
- package/dist/ports.d.cts +6 -1
- package/dist/ports.d.ts +6 -1
- package/dist/provider-proxy/ProviderProxy.cjs +40 -4643
- package/dist/provider-proxy/ProviderProxy.d.cts +2 -1
- package/dist/provider-proxy/ProviderProxy.d.ts +2 -1
- package/dist/provider-proxy/ProviderProxy.js +35 -4613
- package/dist/provider-proxy/ingress/providerProxyShared.cjs +35 -2941
- package/dist/provider-proxy/ingress/providerProxyShared.d.cts +2 -1
- package/dist/provider-proxy/ingress/providerProxyShared.d.ts +2 -1
- package/dist/provider-proxy/ingress/providerProxyShared.js +41 -2914
- package/dist/provider-proxy/matchText.cjs +11 -72
- package/dist/provider-proxy/matchText.js +6 -39
- package/dist/provider-proxy/types.cjs +1 -18
- package/dist/provider-proxy/types.d.cts +2 -1
- package/dist/provider-proxy/types.d.ts +2 -1
- package/dist/provider-proxy.cjs +35 -4655
- package/dist/provider-proxy.d.cts +2 -1
- package/dist/provider-proxy.d.ts +2 -1
- package/dist/provider-proxy.js +39 -4628
- package/dist/serializeError.cjs +5 -81
- package/dist/serializeError.js +3 -54
- package/dist/sse-parser.cjs +7 -455
- package/dist/sse-parser.js +4 -426
- package/dist/transformer/TransformerChainExecutor.cjs +4 -318
- package/dist/transformer/TransformerChainExecutor.js +4 -291
- package/dist/transformer/TransformerService.cjs +5 -289
- package/dist/transformer/TransformerService.js +3 -262
- package/dist/transformer/anthropicBetaInject.cjs +7 -50
- package/dist/transformer/anthropicBetaInject.js +4 -21
- package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -1014
- package/dist/transformer/transformers/AnthropicTransformer.js +3 -987
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -1106
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +7 -1079
- package/dist/transformer/transformers/GeminiTransformer.cjs +4 -1010
- package/dist/transformer/transformers/GeminiTransformer.js +4 -983
- package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -535
- package/dist/transformer/transformers/OpenAIResponseTransformer.js +3 -510
- package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +5 -72
- package/dist/transformer/transformers/OpenCodeGoTransformer.js +3 -45
- package/dist/transformer/transformers/ReasoningTransformer.cjs +3 -270
- package/dist/transformer/transformers/ReasoningTransformer.js +2 -249
- package/dist/transformer/transformers.cjs +10 -3177
- package/dist/transformer/transformers.js +23 -3158
- package/dist/transformer/types.cjs +1 -18
- package/dist/transformer.cjs +13 -3726
- package/dist/transformer.js +17 -3706
- package/dist/usage/pricing-engine.cjs +6 -0
- package/dist/usage/pricing-engine.d.cts +83 -0
- package/dist/usage/pricing-engine.d.ts +83 -0
- package/dist/usage/pricing-engine.js +6 -0
- package/dist/usage/usage-recorder.cjs +6 -0
- package/dist/usage/usage-recorder.d.cts +73 -0
- package/dist/usage/usage-recorder.d.ts +73 -0
- package/dist/usage/usage-recorder.js +6 -0
- package/dist/usage.cjs +11 -0
- package/dist/usage.d.cts +8 -0
- package/dist/usage.d.ts +8 -0
- package/dist/usage.js +11 -0
- package/package.json +1 -1
- package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
- package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveApiFormat
|
|
3
|
+
} from "./chunk-H5JUT3KV.js";
|
|
4
|
+
import {
|
|
5
|
+
OPENROUTER_APP_HEADERS,
|
|
6
|
+
isOpenRouterProvider
|
|
7
|
+
} from "./chunk-E3WHL7CO.js";
|
|
8
|
+
|
|
9
|
+
// src/completion/header-builder.ts
|
|
10
|
+
function getProviderHeaders(provider, apiKey) {
|
|
11
|
+
const format = resolveApiFormat(provider);
|
|
12
|
+
let headers;
|
|
13
|
+
switch (format) {
|
|
14
|
+
case "anthropic":
|
|
15
|
+
headers = {
|
|
16
|
+
"Content-Type": "application/json",
|
|
17
|
+
"x-api-key": apiKey,
|
|
18
|
+
"anthropic-version": "2025-01-10"
|
|
19
|
+
// Required for extended thinking feature
|
|
20
|
+
};
|
|
21
|
+
break;
|
|
22
|
+
case "google":
|
|
23
|
+
headers = {
|
|
24
|
+
"Content-Type": "application/json",
|
|
25
|
+
"x-goog-api-key": apiKey
|
|
26
|
+
};
|
|
27
|
+
break;
|
|
28
|
+
case "azure-openai":
|
|
29
|
+
headers = {
|
|
30
|
+
"Content-Type": "application/json",
|
|
31
|
+
"api-key": apiKey
|
|
32
|
+
};
|
|
33
|
+
break;
|
|
34
|
+
case "openai":
|
|
35
|
+
case "openai-response":
|
|
36
|
+
default:
|
|
37
|
+
headers = {
|
|
38
|
+
"Content-Type": "application/json",
|
|
39
|
+
"Authorization": `Bearer ${apiKey}`
|
|
40
|
+
};
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
if (isOpenRouterProvider(provider)) {
|
|
44
|
+
return { ...headers, ...OPENROUTER_APP_HEADERS };
|
|
45
|
+
}
|
|
46
|
+
return headers;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// src/pipeline/LlmConfigProviderAuth.ts
|
|
50
|
+
function isReportableStatus(status) {
|
|
51
|
+
return status === 429 || status === 529 || status === 401 || status === 403;
|
|
52
|
+
}
|
|
53
|
+
var LlmConfigProviderAuth = class {
|
|
54
|
+
provider;
|
|
55
|
+
apiKeyPool;
|
|
56
|
+
providerId;
|
|
57
|
+
sessionId;
|
|
58
|
+
/**
|
|
59
|
+
* The current resolved key. Mutable so a Phase-3 caller can read the
|
|
60
|
+
* rotated key after `onResult`; this phase it is only set at construction
|
|
61
|
+
* and updated inside `onResult` (mirroring the inline re-point in
|
|
62
|
+
* `callWithPoolReporting`).
|
|
63
|
+
*/
|
|
64
|
+
apiKey;
|
|
65
|
+
constructor(opts) {
|
|
66
|
+
this.provider = opts.provider;
|
|
67
|
+
this.apiKey = opts.apiKey;
|
|
68
|
+
this.apiKeyPool = opts.apiKeyPool ?? null;
|
|
69
|
+
this.providerId = opts.providerId;
|
|
70
|
+
this.sessionId = opts.sessionId;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Merge the provider auth headers (and content-type / OpenRouter app
|
|
74
|
+
* headers) into `headers`, exactly as a direct `getProviderHeaders` call
|
|
75
|
+
* would produce them. `hints` are accepted for contract symmetry but the
|
|
76
|
+
* provider-key path does not vary headers by URL/model.
|
|
77
|
+
*/
|
|
78
|
+
applyHeaders(headers, _hints) {
|
|
79
|
+
const authHeaders = getProviderHeaders(this.provider, this.apiKey);
|
|
80
|
+
for (const [k, v] of Object.entries(authHeaders)) {
|
|
81
|
+
headers[k] = v;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* React to the final HTTP status — the pool-rotation seam (design D5).
|
|
86
|
+
*
|
|
87
|
+
* Reproduces `callWithPoolReporting`'s reportable + success branches:
|
|
88
|
+
* - reportable status (429/529/401/403) on a pool-backed request →
|
|
89
|
+
* `reportError(providerId, sessionId, status)`; when it hands back a
|
|
90
|
+
* `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
|
|
91
|
+
* return `{ rebound: true, newKey }`. When no key is available it returns
|
|
92
|
+
* `{ rebound: false }` (the session is still cooled/disabled by the report).
|
|
93
|
+
* - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
|
|
94
|
+
* - non-reportable, non-success, or non-pool request → no-op
|
|
95
|
+
* `{ rebound: false }`.
|
|
96
|
+
*
|
|
97
|
+
* NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
|
|
98
|
+
*/
|
|
99
|
+
async onResult(status) {
|
|
100
|
+
const pool = this.apiKeyPool;
|
|
101
|
+
const providerId = this.providerId;
|
|
102
|
+
const sessionId = this.sessionId;
|
|
103
|
+
if (!pool || !providerId || !sessionId) {
|
|
104
|
+
return { rebound: false };
|
|
105
|
+
}
|
|
106
|
+
if (isReportableStatus(status)) {
|
|
107
|
+
const newKey = await pool.reportError(providerId, sessionId, status);
|
|
108
|
+
if (newKey) {
|
|
109
|
+
this.apiKey = newKey;
|
|
110
|
+
return { rebound: true, newKey };
|
|
111
|
+
}
|
|
112
|
+
return { rebound: false };
|
|
113
|
+
}
|
|
114
|
+
if (status !== null && status >= 200 && status < 300) {
|
|
115
|
+
pool.reportSuccess(sessionId);
|
|
116
|
+
}
|
|
117
|
+
return { rebound: false };
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export {
|
|
122
|
+
getProviderHeaders,
|
|
123
|
+
LlmConfigProviderAuth
|
|
124
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/outbound-api/subscriptionRegistryPort.ts
|
|
2
|
+
var _registry = null;
|
|
3
|
+
function setSubscriptionRegistryForOutbound(registry) {
|
|
4
|
+
_registry = registry;
|
|
5
|
+
}
|
|
6
|
+
function getSubscriptionRegistryForOutbound() {
|
|
7
|
+
return _registry;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.setSubscriptionRegistryForOutbound = setSubscriptionRegistryForOutbound; exports.getSubscriptionRegistryForOutbound = getSubscriptionRegistryForOutbound;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// src/provider-proxy/matchText.ts
|
|
2
|
+
var MATCH_TEXT_PER_MESSAGE_CAP = 8192;
|
|
3
|
+
var MATCH_TEXT_RECENT_MESSAGES = 6;
|
|
4
|
+
function flattenMatchText(value) {
|
|
5
|
+
if (typeof value === "string") return value;
|
|
6
|
+
if (Array.isArray(value)) {
|
|
7
|
+
const parts = [];
|
|
8
|
+
for (const item of value) {
|
|
9
|
+
const text = flattenMatchText(item);
|
|
10
|
+
if (text) parts.push(text);
|
|
11
|
+
}
|
|
12
|
+
return parts.join("\n");
|
|
13
|
+
}
|
|
14
|
+
if (value && typeof value === "object") {
|
|
15
|
+
const obj = value;
|
|
16
|
+
if (obj.type === "tool_result" && obj.content !== void 0) {
|
|
17
|
+
return flattenMatchText(obj.content);
|
|
18
|
+
}
|
|
19
|
+
if (typeof obj.text === "string") return obj.text;
|
|
20
|
+
}
|
|
21
|
+
return "";
|
|
22
|
+
}
|
|
23
|
+
function collectMatchText(anthropicBody) {
|
|
24
|
+
const messages = Array.isArray(anthropicBody.messages) ? anthropicBody.messages : [];
|
|
25
|
+
const slices = [];
|
|
26
|
+
const sys = flattenMatchText(anthropicBody.system).trim();
|
|
27
|
+
if (sys) slices.push(sys.slice(0, MATCH_TEXT_PER_MESSAGE_CAP));
|
|
28
|
+
const recent = [];
|
|
29
|
+
for (let i = messages.length - 1; i >= 0 && recent.length < MATCH_TEXT_RECENT_MESSAGES; i--) {
|
|
30
|
+
const message = messages[i];
|
|
31
|
+
if (!message || typeof message !== "object") continue;
|
|
32
|
+
const role = message.role;
|
|
33
|
+
if (role !== "user" && role !== "system") continue;
|
|
34
|
+
const text = flattenMatchText(message.content).trim();
|
|
35
|
+
if (text) recent.push(text.slice(0, MATCH_TEXT_PER_MESSAGE_CAP));
|
|
36
|
+
}
|
|
37
|
+
for (let i = recent.length - 1; i >= 0; i--) slices.push(recent[i]);
|
|
38
|
+
return slices;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export {
|
|
42
|
+
MATCH_TEXT_PER_MESSAGE_CAP,
|
|
43
|
+
MATCH_TEXT_RECENT_MESSAGES,
|
|
44
|
+
flattenMatchText,
|
|
45
|
+
collectMatchText
|
|
46
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/pipeline/resolveProviderChain.ts
|
|
2
|
+
async function resolveProviderChain(llmConfig, providerId, model) {
|
|
3
|
+
const cachedChain = await llmConfig.resolveTransformerChain(providerId, model);
|
|
4
|
+
const mainTransformer = await llmConfig.getMainTransformer(providerId);
|
|
5
|
+
const chain = {
|
|
6
|
+
providerTransformers: [...cachedChain.providerTransformers],
|
|
7
|
+
modelTransformers: [...cachedChain.modelTransformers]
|
|
8
|
+
};
|
|
9
|
+
if (mainTransformer) {
|
|
10
|
+
const alreadyInChain = chain.providerTransformers.some(
|
|
11
|
+
(t) => t.name === mainTransformer.name
|
|
12
|
+
);
|
|
13
|
+
if (!alreadyInChain) {
|
|
14
|
+
chain.providerTransformers.unshift(mainTransformer);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const hasTransformers = chain.providerTransformers.length > 0 || chain.modelTransformers.length > 0;
|
|
18
|
+
return { chain, mainTransformer, hasTransformers };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
exports.resolveProviderChain = resolveProviderChain;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/ports/gemini-code-assist-resolver.ts
|
|
2
|
+
var resolver = null;
|
|
3
|
+
function setGeminiCodeAssistResolver(impl) {
|
|
4
|
+
resolver = impl;
|
|
5
|
+
}
|
|
6
|
+
function getGeminiCodeAssistResolver() {
|
|
7
|
+
return resolver;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.setGeminiCodeAssistResolver = setGeminiCodeAssistResolver; exports.getGeminiCodeAssistResolver = getGeminiCodeAssistResolver;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkYGXJGRFIcjs = require('./chunk-YGXJGRFI.cjs');
|
|
7
|
+
|
|
8
|
+
// src/transformer/transformers/GeminiCodeAssistTransformer.ts
|
|
9
|
+
var DEFAULT_CODE_ASSIST_ENDPOINT = "https://cloudcode-pa.googleapis.com";
|
|
10
|
+
var DEFAULT_CODE_ASSIST_API_VERSION = "v1internal";
|
|
11
|
+
function resolveCodeAssistEndpoint() {
|
|
12
|
+
return (process.env.CODE_ASSIST_ENDPOINT || DEFAULT_CODE_ASSIST_ENDPOINT).replace(/\/+$/, "");
|
|
13
|
+
}
|
|
14
|
+
function resolveCodeAssistApiVersion() {
|
|
15
|
+
return process.env.CODE_ASSIST_API_VERSION || DEFAULT_CODE_ASSIST_API_VERSION;
|
|
16
|
+
}
|
|
17
|
+
function buildCodeAssistUrl(stream) {
|
|
18
|
+
const base = resolveCodeAssistEndpoint();
|
|
19
|
+
const version = resolveCodeAssistApiVersion();
|
|
20
|
+
const method = stream ? "streamGenerateContent?alt=sse" : "generateContent";
|
|
21
|
+
return `${base}/${version}:${method}`;
|
|
22
|
+
}
|
|
23
|
+
function generateUserPromptId() {
|
|
24
|
+
const c = globalThis.crypto;
|
|
25
|
+
if (_optionalChain([c, 'optionalAccess', _ => _.randomUUID])) return c.randomUUID();
|
|
26
|
+
return `omnicross-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
27
|
+
}
|
|
28
|
+
function peelResponseEnvelope(parsed) {
|
|
29
|
+
if (parsed && typeof parsed === "object" && "response" in parsed) {
|
|
30
|
+
return parsed.response;
|
|
31
|
+
}
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
async function unwrapCodeAssistResponse(response) {
|
|
35
|
+
const contentType = _nullishCoalesce(response.headers.get("Content-Type"), () => ( ""));
|
|
36
|
+
if (contentType.includes("stream") || contentType.includes("text/event-stream")) {
|
|
37
|
+
const sourceBody = response.body;
|
|
38
|
+
if (!sourceBody) return response;
|
|
39
|
+
const decoder = new TextDecoder();
|
|
40
|
+
const encoder = new TextEncoder();
|
|
41
|
+
const peeled = new ReadableStream({
|
|
42
|
+
async start(controller) {
|
|
43
|
+
const reader = sourceBody.getReader();
|
|
44
|
+
let buffer = "";
|
|
45
|
+
const processLine = (line) => {
|
|
46
|
+
if (!line.startsWith("data:")) {
|
|
47
|
+
if (line.length > 0) controller.enqueue(encoder.encode(`${line}
|
|
48
|
+
`));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const payload = line.slice(line.indexOf(":") + 1).trim();
|
|
52
|
+
if (!payload || payload === "[DONE]") {
|
|
53
|
+
controller.enqueue(encoder.encode(`${line}
|
|
54
|
+
`));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const parsed = JSON.parse(payload);
|
|
59
|
+
const inner2 = peelResponseEnvelope(parsed);
|
|
60
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(inner2)}
|
|
61
|
+
`));
|
|
62
|
+
} catch (e) {
|
|
63
|
+
controller.enqueue(encoder.encode(`${line}
|
|
64
|
+
`));
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
try {
|
|
68
|
+
while (true) {
|
|
69
|
+
const { done, value } = await reader.read();
|
|
70
|
+
if (done) {
|
|
71
|
+
if (buffer) processLine(buffer);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
buffer += decoder.decode(value, { stream: true });
|
|
75
|
+
const lines = buffer.split("\n");
|
|
76
|
+
buffer = lines.pop() || "";
|
|
77
|
+
for (const line of lines) processLine(line);
|
|
78
|
+
}
|
|
79
|
+
} catch (err) {
|
|
80
|
+
controller.error(err);
|
|
81
|
+
} finally {
|
|
82
|
+
controller.close();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
return new Response(peeled, {
|
|
87
|
+
status: response.status,
|
|
88
|
+
statusText: response.statusText,
|
|
89
|
+
headers: response.headers
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
const raw = await response.json().catch(() => null);
|
|
93
|
+
const inner = peelResponseEnvelope(raw);
|
|
94
|
+
return new Response(JSON.stringify(inner), {
|
|
95
|
+
status: response.status,
|
|
96
|
+
statusText: response.statusText,
|
|
97
|
+
headers: response.headers
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
|
|
101
|
+
static __initStatic() {this.TransformerName = "gemini-code-assist"}
|
|
102
|
+
__init() {this.name = "gemini-code-assist"}
|
|
103
|
+
|
|
104
|
+
/** Code Assist has no fixed `/models/:modelAndAction` endpoint pattern — the
|
|
105
|
+
* URL is built per-request in `transformRequestIn`. Left undefined so the
|
|
106
|
+
* TransformerService does NOT treat this as an endpoint (reverse) transformer. */
|
|
107
|
+
__init2() {this.endPoint = void 0}
|
|
108
|
+
/**
|
|
109
|
+
* unified → Code Assist envelope.
|
|
110
|
+
*
|
|
111
|
+
* Builds the inner public-Gemini body via the shared `buildRequestBody`, then
|
|
112
|
+
* wraps it as `{ model, project, user_prompt_id, request: <inner> }` and sets
|
|
113
|
+
* the Code Assist URL + Bearer-only headers.
|
|
114
|
+
*
|
|
115
|
+
* The resolved Code Assist `project` is threaded in via `provider.geminiProject`
|
|
116
|
+
* (stashed by the subscription dispatch seam — see SubscriptionDispatcher /
|
|
117
|
+
* openaiResponsesIngress). `undefined` is the valid fresh free-tier value.
|
|
118
|
+
*/
|
|
119
|
+
async transformRequestIn(request, provider, _context) {
|
|
120
|
+
const inner = _chunkYGXJGRFIcjs.buildRequestBody.call(void 0, request);
|
|
121
|
+
const envelope = {
|
|
122
|
+
model: request.model,
|
|
123
|
+
project: provider.geminiProject,
|
|
124
|
+
user_prompt_id: generateUserPromptId(),
|
|
125
|
+
request: inner
|
|
126
|
+
};
|
|
127
|
+
const url = buildCodeAssistUrl(Boolean(request.stream));
|
|
128
|
+
const headers = {
|
|
129
|
+
"x-goog-api-key": void 0,
|
|
130
|
+
"X-Goog-Api-Key": void 0
|
|
131
|
+
};
|
|
132
|
+
return {
|
|
133
|
+
body: envelope,
|
|
134
|
+
config: { url, headers }
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Code Assist request → unified (endpoint-decode parity with GeminiTransformer).
|
|
139
|
+
* Peels the top-level `request` envelope first, then delegates to the shared
|
|
140
|
+
* gemini request decoder. Not used on the subscription dispatch path (the
|
|
141
|
+
* endpoint transformer there is Anthropic/OpenAI-Response), but provided for
|
|
142
|
+
* completeness so this transformer is a drop-in for the gemini one.
|
|
143
|
+
*/
|
|
144
|
+
async transformRequestOut(request, _context) {
|
|
145
|
+
const r = request;
|
|
146
|
+
const inner = r && typeof r === "object" && "request" in r ? r.request : r;
|
|
147
|
+
if (inner && typeof inner === "object" && !("model" in inner) && "model" in r) {
|
|
148
|
+
inner.model = r.model;
|
|
149
|
+
}
|
|
150
|
+
return _chunkYGXJGRFIcjs.transformRequestOut.call(void 0, inner);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Code Assist response → OpenAI-compatible. PEEL the `.response` envelope from
|
|
154
|
+
* the body / each SSE chunk, then DELEGATE to the existing gemini parser.
|
|
155
|
+
*/
|
|
156
|
+
async transformResponseOut(response, _context) {
|
|
157
|
+
const unwrapped = await unwrapCodeAssistResponse(response);
|
|
158
|
+
return _chunkYGXJGRFIcjs.transformResponseOut.call(void 0, unwrapped, this.name, this.logger);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* OpenAI-compatible response → Code Assist (endpoint-encode parity). Re-wraps
|
|
162
|
+
* the standard gemini response under the top-level `response` key after the
|
|
163
|
+
* shared gemini encoder produces a public-Gemini body. Symmetric with
|
|
164
|
+
* `transformResponseOut`'s peel.
|
|
165
|
+
*/
|
|
166
|
+
async transformResponseIn(response, _context) {
|
|
167
|
+
const geminiResponse = await _chunkYGXJGRFIcjs.transformResponseIn.call(void 0, response, this.logger);
|
|
168
|
+
const contentType = _nullishCoalesce(geminiResponse.headers.get("Content-Type"), () => ( ""));
|
|
169
|
+
if (contentType.includes("text/event-stream")) {
|
|
170
|
+
return geminiResponse;
|
|
171
|
+
}
|
|
172
|
+
const data = await geminiResponse.json().catch(() => null);
|
|
173
|
+
return new Response(JSON.stringify({ response: data }), {
|
|
174
|
+
status: geminiResponse.status,
|
|
175
|
+
statusText: geminiResponse.statusText,
|
|
176
|
+
headers: { "Content-Type": "application/json" }
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}, _class.__initStatic(), _class);
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
exports.resolveCodeAssistEndpoint = resolveCodeAssistEndpoint; exports.resolveCodeAssistApiVersion = resolveCodeAssistApiVersion; exports.buildCodeAssistUrl = buildCodeAssistUrl; exports.GeminiCodeAssistTransformer = GeminiCodeAssistTransformer;
|