@omnicross/core 0.4.2 → 0.4.4
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/auth/GeminiCodeAssistProjectResolver.cjs +11 -184
- package/dist/auth/GeminiCodeAssistProjectResolver.d.cts +41 -3
- package/dist/auth/GeminiCodeAssistProjectResolver.d.ts +41 -3
- package/dist/auth/GeminiCodeAssistProjectResolver.js +12 -185
- package/dist/{chunk-POUTD5AM.cjs → chunk-47E3I5PF.cjs} +10 -3
- package/dist/chunk-4LSZ7NFM.js +50 -0
- package/dist/{chunk-WX2E2G7H.cjs → chunk-4NAMH4UE.cjs} +79 -51
- package/dist/{chunk-LQYS2N47.js → chunk-4RM22ETG.js} +14 -2
- package/dist/{chunk-YEVWA4C7.cjs → chunk-57Y2EA2G.cjs} +6 -5
- package/dist/chunk-6I4SAWCN.js +24 -0
- package/dist/{chunk-KIQ2HA2A.cjs → chunk-BTSADEX4.cjs} +5 -5
- package/dist/chunk-CGEZQC2G.cjs +67 -0
- package/dist/chunk-E5RCCGE7.cjs +95 -0
- package/dist/chunk-EE7VP4O3.js +230 -0
- package/dist/chunk-F6P4DIBL.js +95 -0
- package/dist/{chunk-BKXC4XM6.cjs → chunk-FORICQ5U.cjs} +15 -11
- package/dist/{chunk-PF7YQBKX.js → chunk-FYPKKMB3.js} +6 -2
- package/dist/chunk-GWC7HCZI.cjs +44 -0
- package/dist/{chunk-LFEH7CEO.js → chunk-IDPMD4B7.js} +22 -0
- package/dist/{chunk-UPQIWJIE.cjs → chunk-INY54AYX.cjs} +14 -2
- package/dist/{chunk-C3NPMQTK.js → chunk-JHJRZ75C.js} +14 -10
- package/dist/chunk-K6J2RIEX.js +67 -0
- package/dist/chunk-KSMK45RD.cjs +45 -0
- package/dist/chunk-LL3MZ7O5.cjs +24 -0
- package/dist/{chunk-PAXJGABW.js → chunk-MPFOC7AT.js} +10 -5
- package/dist/{chunk-DKBXDV5U.cjs → chunk-N3MGNLCU.cjs} +49 -44
- package/dist/chunk-NCZDUBC2.js +44 -0
- package/dist/chunk-NDIBVTBZ.cjs +230 -0
- package/dist/{chunk-5DJSOFEP.js → chunk-NTF7TLT7.js} +1 -1
- package/dist/chunk-ONTTXSRL.js +32 -0
- package/dist/{chunk-HN74IGEO.js → chunk-OXBGNEYR.js} +1 -1
- package/dist/{chunk-5GXOYVLB.js → chunk-QSOHEDKO.js} +44 -39
- package/dist/{chunk-QEOV6Y4E.cjs → chunk-RX3BCX53.cjs} +359 -170
- package/dist/{chunk-TX3AEV6H.cjs → chunk-RXMF7GNF.cjs} +4 -3
- package/dist/chunk-SQU2FGXI.cjs +50 -0
- package/dist/{chunk-EUZRH544.js → chunk-TKZ3DZS5.js} +10 -3
- package/dist/{chunk-MXI2PWIC.cjs → chunk-UKQHBK4Q.cjs} +1 -32
- package/dist/{chunk-3XVDFRCQ.cjs → chunk-UOOLU64V.cjs} +13 -8
- package/dist/{chunk-ZSA44G7J.cjs → chunk-VFFCV4J6.cjs} +3 -3
- package/dist/{chunk-6DDYNS2B.cjs → chunk-VGBJPHHD.cjs} +36 -14
- package/dist/{chunk-2T6D7LWE.cjs → chunk-VYOBVPNB.cjs} +6 -2
- package/dist/chunk-X6GHTNDL.cjs +482 -0
- package/dist/chunk-XBQTVRMK.js +45 -0
- package/dist/{chunk-R4VCO2CB.js → chunk-YEHQ5FXZ.js} +28 -0
- package/dist/{chunk-5TEWZN5J.js → chunk-YV4JSBPA.js} +278 -89
- package/dist/{chunk-HDXSPXIN.js → chunk-ZBDDPWVQ.js} +4 -3
- package/dist/chunk-ZJJBITUN.js +482 -0
- package/dist/{chunk-QRXOLINS.js → chunk-ZMERU7D3.js} +3 -2
- package/dist/completion/CompletionService.cjs +29 -22
- package/dist/completion/CompletionService.js +28 -21
- package/dist/completion.cjs +29 -22
- package/dist/completion.js +28 -21
- package/dist/image-generation.cjs +2 -2
- package/dist/image-generation.d.cts +2 -2
- package/dist/image-generation.d.ts +2 -2
- package/dist/image-generation.js +1 -1
- package/dist/index.cjs +40 -29
- package/dist/index.d.cts +6 -3
- package/dist/index.d.ts +6 -3
- package/dist/index.js +40 -29
- package/dist/outbound-api/routeResolver.cjs +3 -3
- package/dist/outbound-api/routeResolver.d.cts +3 -3
- package/dist/outbound-api/routeResolver.d.ts +3 -3
- package/dist/outbound-api/routeResolver.js +2 -2
- package/dist/outbound-api/types.cjs +6 -2
- package/dist/outbound-api/types.d.cts +2 -2
- package/dist/outbound-api/types.d.ts +2 -2
- package/dist/outbound-api/types.js +7 -3
- package/dist/outbound-api.cjs +33 -22
- package/dist/outbound-api.d.cts +4 -4
- package/dist/outbound-api.d.ts +4 -4
- package/dist/outbound-api.js +33 -22
- package/dist/pipeline/AccountAllowanceScheduling.cjs +4 -3
- package/dist/pipeline/AccountAllowanceScheduling.d.cts +4 -4
- package/dist/pipeline/AccountAllowanceScheduling.d.ts +4 -4
- package/dist/pipeline/AccountAllowanceScheduling.js +3 -2
- package/dist/pipeline/AccountAllowanceStore.cjs +2 -2
- package/dist/pipeline/AccountAllowanceStore.js +1 -1
- package/dist/pipeline/AuthSource.d.cts +6 -0
- package/dist/pipeline/AuthSource.d.ts +6 -0
- package/dist/pipeline/SubscriptionAuthSource.cjs +5 -4
- package/dist/pipeline/SubscriptionAuthSource.js +4 -3
- package/dist/pipeline/SubscriptionAuthStrategy.d.cts +7 -0
- package/dist/pipeline/SubscriptionAuthStrategy.d.ts +7 -0
- package/dist/pipeline/antigravityQuotaFamily.cjs +16 -0
- package/dist/pipeline/antigravityQuotaFamily.d.cts +52 -0
- package/dist/pipeline/antigravityQuotaFamily.d.ts +52 -0
- package/dist/pipeline/antigravityQuotaFamily.js +16 -0
- package/dist/pipeline/upstreamFetch.cjs +3 -3
- package/dist/pipeline/upstreamFetch.js +2 -2
- package/dist/ports.d.cts +2 -2
- package/dist/ports.d.ts +2 -2
- package/dist/provider-proxy/ProviderProxy.cjs +29 -22
- package/dist/provider-proxy/ProviderProxy.js +28 -21
- package/dist/provider-proxy/identity/codexCliHeaders.cjs +8 -2
- package/dist/provider-proxy/identity/codexCliHeaders.d.cts +36 -7
- package/dist/provider-proxy/identity/codexCliHeaders.d.ts +36 -7
- package/dist/provider-proxy/identity/codexCliHeaders.js +7 -1
- package/dist/provider-proxy/identity/openCodeGoHeaders.cjs +17 -0
- package/dist/provider-proxy/identity/openCodeGoHeaders.d.cts +71 -0
- package/dist/provider-proxy/identity/openCodeGoHeaders.d.ts +71 -0
- package/dist/provider-proxy/identity/openCodeGoHeaders.js +17 -0
- package/dist/provider-proxy/ingress/providerProxyShared.cjs +29 -22
- package/dist/provider-proxy/ingress/providerProxyShared.js +28 -21
- package/dist/provider-proxy.cjs +29 -22
- package/dist/provider-proxy.d.cts +2 -2
- package/dist/provider-proxy.d.ts +2 -2
- package/dist/provider-proxy.js +28 -21
- package/dist/{routeResolver-STwMz_G4.d.ts → routeResolver-BLTleO4H.d.ts} +1 -1
- package/dist/{routeResolver-Da0yvkL1.d.cts → routeResolver-C2z0pp-q.d.cts} +1 -1
- package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.cjs +2 -2
- package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.js +1 -1
- package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -3
- package/dist/transformer/transformers/AnthropicTransformer.js +2 -2
- package/dist/transformer/transformers/AntigravityTransformer.cjs +31 -0
- package/dist/transformer/transformers/AntigravityTransformer.d.cts +104 -0
- package/dist/transformer/transformers/AntigravityTransformer.d.ts +104 -0
- package/dist/transformer/transformers/AntigravityTransformer.js +31 -0
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +3 -3
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.cts +2 -1
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.d.ts +2 -1
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +2 -2
- package/dist/transformer/transformers/GeminiTransformer.cjs +3 -3
- package/dist/transformer/transformers/GeminiTransformer.js +2 -2
- package/dist/transformer/transformers/antigravityFailover.cjs +30 -0
- package/dist/transformer/transformers/antigravityFailover.d.cts +52 -0
- package/dist/transformer/transformers/antigravityFailover.d.ts +52 -0
- package/dist/transformer/transformers/antigravityFailover.js +30 -0
- package/dist/transformer/transformers/antigravityIdentity.cjs +24 -0
- package/dist/transformer/transformers/antigravityIdentity.d.cts +76 -0
- package/dist/transformer/transformers/antigravityIdentity.d.ts +76 -0
- package/dist/transformer/transformers/antigravityIdentity.js +24 -0
- package/dist/transformer/transformers.cjs +61 -9
- package/dist/transformer/transformers.d.cts +7 -2
- package/dist/transformer/transformers.d.ts +7 -2
- package/dist/transformer/transformers.js +61 -9
- package/dist/transformer/types.d.cts +11 -0
- package/dist/transformer/types.d.ts +11 -0
- package/dist/transformer.cjs +21 -12
- package/dist/transformer.d.cts +3 -0
- package/dist/transformer.d.ts +3 -0
- package/dist/transformer.js +20 -11
- package/dist/{types-Be-yt_6T.d.cts → types-BVwJQ9ZS.d.cts} +3 -0
- package/dist/{types-D-oHYusb.d.cts → types-C6m-Db26.d.cts} +25 -4
- package/dist/{types-Dvlpjn0d.d.ts → types-Da735j2d.d.ts} +25 -4
- package/dist/{types-Dm4_36V4.d.ts → types-VAHRysdP.d.ts} +3 -0
- package/package.json +2 -2
- package/dist/chunk-4IH4EL7M.cjs +0 -9
- package/dist/chunk-ECZ3ZE2C.js +0 -63
- package/dist/chunk-XEKD23J5.js +0 -9
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
antigravityModelFamily
|
|
3
|
+
} from "./chunk-XBQTVRMK.js";
|
|
1
4
|
import {
|
|
2
5
|
getSharedAccountAllowanceStore
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-FYPKKMB3.js";
|
|
4
7
|
|
|
5
8
|
// src/pipeline/AccountAllowanceScheduling.ts
|
|
6
9
|
var DEFAULT_POLICY = {
|
|
@@ -30,8 +33,9 @@ function isAccountAllowanceExhaustedError(error) {
|
|
|
30
33
|
const value = error;
|
|
31
34
|
return value.code === "account_allowance_exhausted" && value.status === 429;
|
|
32
35
|
}
|
|
33
|
-
function freshWorstWindow(snapshot) {
|
|
34
|
-
|
|
36
|
+
function freshWorstWindow(snapshot, resolvedModel) {
|
|
37
|
+
const family = snapshot.providerId === "antigravity" && resolvedModel ? antigravityModelFamily(resolvedModel) : void 0;
|
|
38
|
+
return snapshot.windows.filter((window) => window.state === "fresh" && (typeof window.usedPercent === "number" || window.disabled === true) && (!resolvedModel || snapshot.providerId !== "antigravity" || window.scope === "all" || window.modelFamily === family)).map((window) => window.disabled === true ? { ...window, usedPercent: 100 } : window).sort((left, right) => (right.usedPercent ?? -1) - (left.usedPercent ?? -1))[0];
|
|
35
39
|
}
|
|
36
40
|
var AccountAllowanceScheduling = class {
|
|
37
41
|
constructor(store = getSharedAccountAllowanceStore(), now = Date.now) {
|
|
@@ -49,8 +53,8 @@ var AccountAllowanceScheduling = class {
|
|
|
49
53
|
getConfig() {
|
|
50
54
|
return { ...this.config };
|
|
51
55
|
}
|
|
52
|
-
evaluate(providerId, accountId, basePriority, now = this.now()) {
|
|
53
|
-
const decision = this.decide(providerId, accountId, basePriority, now);
|
|
56
|
+
evaluate(providerId, accountId, basePriority, now = this.now(), resolvedModel) {
|
|
57
|
+
const decision = this.decide(providerId, accountId, basePriority, now, resolvedModel);
|
|
54
58
|
this.recordApplied(decision);
|
|
55
59
|
return decision;
|
|
56
60
|
}
|
|
@@ -59,10 +63,10 @@ var AccountAllowanceScheduling = class {
|
|
|
59
63
|
* Admin/read-model callers use this so polling an account list never creates
|
|
60
64
|
* synthetic demotion/pause history entries.
|
|
61
65
|
*/
|
|
62
|
-
preview(providerId, accountId, basePriority, now = this.now()) {
|
|
63
|
-
return this.decide(providerId, accountId, basePriority, now);
|
|
66
|
+
preview(providerId, accountId, basePriority, now = this.now(), resolvedModel) {
|
|
67
|
+
return this.decide(providerId, accountId, basePriority, now, resolvedModel);
|
|
64
68
|
}
|
|
65
|
-
decide(providerId, accountId, basePriority, now) {
|
|
69
|
+
decide(providerId, accountId, basePriority, now, resolvedModel) {
|
|
66
70
|
const decidedAt = new Date(now).toISOString();
|
|
67
71
|
const base = {
|
|
68
72
|
providerId,
|
|
@@ -73,12 +77,12 @@ var AccountAllowanceScheduling = class {
|
|
|
73
77
|
decidedAt
|
|
74
78
|
};
|
|
75
79
|
if (!this.config.enabled) return { ...base, action: "ignore", reason: "policy-disabled" };
|
|
76
|
-
if (providerId !== "claude" && providerId !== "codex" && providerId !== "kimi" && providerId !== "opencodego" && providerId !== "grok" && providerId !== "copilot") {
|
|
80
|
+
if (providerId !== "claude" && providerId !== "codex" && providerId !== "kimi" && providerId !== "opencodego" && providerId !== "grok" && providerId !== "copilot" && providerId !== "antigravity") {
|
|
77
81
|
return { ...base, action: "ignore", reason: "provider-unsupported" };
|
|
78
82
|
}
|
|
79
83
|
const snapshot = this.store.get(providerId, accountId, now);
|
|
80
84
|
if (!snapshot) return { ...base, action: "ignore", reason: "snapshot-missing" };
|
|
81
|
-
const worst = freshWorstWindow(snapshot);
|
|
85
|
+
const worst = freshWorstWindow(snapshot, resolvedModel);
|
|
82
86
|
if (!worst || worst.usedPercent === null) {
|
|
83
87
|
return { ...base, action: "ignore", reason: "snapshot-not-fresh", observedAt: snapshot.observedAt };
|
|
84
88
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ANTIGRAVITY_ENDPOINT
|
|
3
|
+
} from "./chunk-ZJJBITUN.js";
|
|
4
|
+
|
|
5
|
+
// src/transformer/transformers/antigravityFailover.ts
|
|
6
|
+
var ANTIGRAVITY_SANDBOX_ENDPOINT = "https://daily-cloudcode-pa.sandbox.googleapis.com";
|
|
7
|
+
var sandboxFailoverEnabled = false;
|
|
8
|
+
function setAntigravitySandboxFailover(enabled) {
|
|
9
|
+
sandboxFailoverEnabled = enabled;
|
|
10
|
+
}
|
|
11
|
+
function isAntigravitySandboxFailoverEnabled() {
|
|
12
|
+
return sandboxFailoverEnabled;
|
|
13
|
+
}
|
|
14
|
+
function __resetAntigravityFailoverState() {
|
|
15
|
+
sandboxFailoverEnabled = false;
|
|
16
|
+
}
|
|
17
|
+
function isAntigravityRetryableFailure(status, bodyText) {
|
|
18
|
+
if (status === null) return true;
|
|
19
|
+
if (status === 429 || status >= 500) return true;
|
|
20
|
+
if (status === 400 || status === 404) {
|
|
21
|
+
const message = (bodyText ?? "").toLowerCase();
|
|
22
|
+
return message.includes("requested model is currently unavailable") || message.includes("requested entity was not found") || message.includes("not found") || message.includes("tool_use") || message.includes("tool_result");
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
function maybeAntigravityFailoverUrl(failedUrl, status, bodyText, methodPath) {
|
|
27
|
+
if (!sandboxFailoverEnabled) return null;
|
|
28
|
+
if (!isAntigravityRetryableFailure(status, bodyText)) return null;
|
|
29
|
+
let parsed;
|
|
30
|
+
try {
|
|
31
|
+
parsed = new URL(failedUrl);
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
if (parsed.origin !== ANTIGRAVITY_ENDPOINT) return null;
|
|
36
|
+
const tail = methodPath ?? `${parsed.pathname}${parsed.search}`;
|
|
37
|
+
return `${ANTIGRAVITY_SANDBOX_ENDPOINT}${tail.startsWith("/") ? tail : `/${tail}`}`;
|
|
38
|
+
}
|
|
39
|
+
async function fetchWithAntigravityFailover(url, fetcher, signal) {
|
|
40
|
+
signal?.throwIfAborted();
|
|
41
|
+
let response;
|
|
42
|
+
try {
|
|
43
|
+
response = await fetcher(url);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
signal?.throwIfAborted();
|
|
46
|
+
const fallback2 = maybeAntigravityFailoverUrl(url, null);
|
|
47
|
+
if (!fallback2) throw error;
|
|
48
|
+
return fetcher(fallback2);
|
|
49
|
+
}
|
|
50
|
+
if (!sandboxFailoverEnabled || response.ok) return response;
|
|
51
|
+
const body = response.status === 400 || response.status === 404 ? await response.clone().text().catch(() => "") : void 0;
|
|
52
|
+
const fallback = maybeAntigravityFailoverUrl(url, response.status, body);
|
|
53
|
+
if (!fallback) return response;
|
|
54
|
+
await response.body?.cancel().catch(() => void 0);
|
|
55
|
+
signal?.throwIfAborted();
|
|
56
|
+
return fetcher(fallback);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export {
|
|
60
|
+
ANTIGRAVITY_SANDBOX_ENDPOINT,
|
|
61
|
+
setAntigravitySandboxFailover,
|
|
62
|
+
isAntigravitySandboxFailoverEnabled,
|
|
63
|
+
__resetAntigravityFailoverState,
|
|
64
|
+
isAntigravityRetryableFailure,
|
|
65
|
+
maybeAntigravityFailoverUrl,
|
|
66
|
+
fetchWithAntigravityFailover
|
|
67
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/pipeline/antigravityQuotaFamily.ts
|
|
2
|
+
var ANTIGRAVITY_COUNTER_TO_MODEL_FAMILY = {
|
|
3
|
+
google: "gemini",
|
|
4
|
+
anthropic: "claude",
|
|
5
|
+
openai: "gpt-oss"
|
|
6
|
+
};
|
|
7
|
+
var ANTIGRAVITY_MODEL_TO_COUNTER_FAMILY = {
|
|
8
|
+
gemini: "google",
|
|
9
|
+
claude: "anthropic",
|
|
10
|
+
"gpt-oss": "openai"
|
|
11
|
+
};
|
|
12
|
+
var ANTIGRAVITY_COUNTER_FAMILY_KEYS = [
|
|
13
|
+
"google",
|
|
14
|
+
"anthropic",
|
|
15
|
+
"openai"
|
|
16
|
+
];
|
|
17
|
+
function antigravityModelFamily(modelId) {
|
|
18
|
+
if (!modelId) return void 0;
|
|
19
|
+
if (modelId.startsWith("claude-")) return "claude";
|
|
20
|
+
if (modelId.startsWith("gpt-oss-")) return "gpt-oss";
|
|
21
|
+
if (modelId.startsWith("gemini-") || modelId.startsWith("tab_")) return "gemini";
|
|
22
|
+
return void 0;
|
|
23
|
+
}
|
|
24
|
+
function antigravityCounterFamilyForModel(modelId) {
|
|
25
|
+
const family = antigravityModelFamily(modelId);
|
|
26
|
+
return family ? ANTIGRAVITY_MODEL_TO_COUNTER_FAMILY[family] : void 0;
|
|
27
|
+
}
|
|
28
|
+
function antigravityCounterFamiliesForBucketId(bucketId, groupName) {
|
|
29
|
+
const bucket = (_nullishCoalesce(bucketId, () => ( ""))).toLowerCase();
|
|
30
|
+
const group = (_nullishCoalesce(groupName, () => ( ""))).toLowerCase();
|
|
31
|
+
if (bucket.startsWith("gemini-") || group.includes("gemini")) return ["google"];
|
|
32
|
+
if (bucket.startsWith("3p-") || group.includes("claude") || group.includes("gpt") || group.includes("third party")) {
|
|
33
|
+
return ["anthropic", "openai"];
|
|
34
|
+
}
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
exports.ANTIGRAVITY_COUNTER_TO_MODEL_FAMILY = ANTIGRAVITY_COUNTER_TO_MODEL_FAMILY; exports.ANTIGRAVITY_MODEL_TO_COUNTER_FAMILY = ANTIGRAVITY_MODEL_TO_COUNTER_FAMILY; exports.ANTIGRAVITY_COUNTER_FAMILY_KEYS = ANTIGRAVITY_COUNTER_FAMILY_KEYS; exports.antigravityModelFamily = antigravityModelFamily; exports.antigravityCounterFamilyForModel = antigravityCounterFamilyForModel; exports.antigravityCounterFamiliesForBucketId = antigravityCounterFamiliesForBucketId;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/outbound-api/types.ts
|
|
2
|
+
var IMAGE_PROVIDER_IDS = [
|
|
3
|
+
"codex-subscription",
|
|
4
|
+
"antigravity-subscription"
|
|
5
|
+
];
|
|
6
|
+
var DEFAULT_IMAGE_MODEL_ROUTES = Object.freeze({
|
|
7
|
+
"gpt-image-2": "codex-subscription",
|
|
8
|
+
"gpt-image-2-5": "codex-subscription",
|
|
9
|
+
"gemini-2.5-flash-image": "antigravity-subscription",
|
|
10
|
+
"gemini-2.5-flash-image-preview": "antigravity-subscription",
|
|
11
|
+
"gemini-3.1-flash-image": "antigravity-subscription",
|
|
12
|
+
"gemini-3.1-flash-image-preview": "antigravity-subscription",
|
|
13
|
+
"gemini-3-pro-image-preview": "antigravity-subscription"
|
|
14
|
+
});
|
|
15
|
+
var ENDPOINT_MODEL_KINDS = {
|
|
16
|
+
messages: ["fable", "opus", "sonnet", "haiku"],
|
|
17
|
+
responses: ["codex", "mini"]
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
exports.IMAGE_PROVIDER_IDS = IMAGE_PROVIDER_IDS; exports.DEFAULT_IMAGE_MODEL_ROUTES = DEFAULT_IMAGE_MODEL_ROUTES; exports.ENDPOINT_MODEL_KINDS = ENDPOINT_MODEL_KINDS;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
GeminiTransformer
|
|
3
|
-
} from "./chunk-HN74IGEO.js";
|
|
4
1
|
import {
|
|
5
2
|
OpenAIResponseTransformer
|
|
6
3
|
} from "./chunk-V53ZEFXC.js";
|
|
@@ -9,16 +6,23 @@ import {
|
|
|
9
6
|
} from "./chunk-7PIUVCKK.js";
|
|
10
7
|
import {
|
|
11
8
|
AnthropicTransformer
|
|
12
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-TKZ3DZS5.js";
|
|
10
|
+
import {
|
|
11
|
+
AntigravityTransformer
|
|
12
|
+
} from "./chunk-ZJJBITUN.js";
|
|
13
|
+
import {
|
|
14
|
+
GeminiTransformer
|
|
15
|
+
} from "./chunk-OXBGNEYR.js";
|
|
13
16
|
import {
|
|
14
17
|
GeminiCodeAssistTransformer
|
|
15
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-QSOHEDKO.js";
|
|
16
19
|
|
|
17
20
|
// src/transformer/transformers/index.ts
|
|
18
21
|
var BuiltinTransformers = {
|
|
19
22
|
OpenAITransformer,
|
|
20
23
|
GeminiTransformer,
|
|
21
24
|
GeminiCodeAssistTransformer,
|
|
25
|
+
AntigravityTransformer,
|
|
22
26
|
AnthropicTransformer,
|
|
23
27
|
OpenAIResponseTransformer
|
|
24
28
|
};
|
|
@@ -29,6 +33,7 @@ var BUILTIN_TRANSFORMER_NAMES = [
|
|
|
29
33
|
"openai",
|
|
30
34
|
"gemini",
|
|
31
35
|
"gemini-code-assist",
|
|
36
|
+
"antigravity",
|
|
32
37
|
"anthropic",
|
|
33
38
|
"openai-response"
|
|
34
39
|
];
|
|
@@ -3,48 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunk4NAMH4UEcjs = require('./chunk-4NAMH4UE.cjs');
|
|
7
7
|
|
|
8
|
-
// src/transformer/transformers/
|
|
9
|
-
|
|
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
|
-
var DEFAULT_GEMINI_CLI_VERSION = "0.46.0";
|
|
18
|
-
function getGeminiCliUserAgent(modelId = "gemini-3.1-pro-preview") {
|
|
19
|
-
const version = process.env.GEMINI_CLI_VERSION || DEFAULT_GEMINI_CLI_VERSION;
|
|
20
|
-
const platform = process.platform === "win32" ? "win32" : process.platform;
|
|
21
|
-
const arch = process.arch === "x64" ? "x64" : process.arch;
|
|
22
|
-
return `GeminiCLI/${version}/${modelId} (${platform}; ${arch}; terminal)`;
|
|
23
|
-
}
|
|
24
|
-
function getGeminiCliIdentityHeaders(modelId) {
|
|
25
|
-
return {
|
|
26
|
-
"User-Agent": getGeminiCliUserAgent(modelId),
|
|
27
|
-
"Client-Metadata": "ideType=IDE_UNSPECIFIED,platform=PLATFORM_UNSPECIFIED,pluginType=GEMINI"
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
function buildCodeAssistUrl(stream) {
|
|
31
|
-
const base = resolveCodeAssistEndpoint();
|
|
32
|
-
const version = resolveCodeAssistApiVersion();
|
|
33
|
-
const method = stream ? "streamGenerateContent?alt=sse" : "generateContent";
|
|
34
|
-
return `${base}/${version}:${method}`;
|
|
35
|
-
}
|
|
36
|
-
function generateUserPromptId() {
|
|
37
|
-
const c = globalThis.crypto;
|
|
38
|
-
if (_optionalChain([c, 'optionalAccess', _ => _.randomUUID])) return c.randomUUID();
|
|
39
|
-
return `omnicross-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
40
|
-
}
|
|
41
|
-
function peelResponseEnvelope(parsed) {
|
|
8
|
+
// src/transformer/transformers/ccaEnvelope.ts
|
|
9
|
+
function peelCcaResponseEnvelope(parsed) {
|
|
42
10
|
if (parsed && typeof parsed === "object" && "response" in parsed) {
|
|
43
11
|
return parsed.response;
|
|
44
12
|
}
|
|
45
13
|
return parsed;
|
|
46
14
|
}
|
|
47
|
-
async function
|
|
15
|
+
async function unwrapCcaResponse(response) {
|
|
48
16
|
const contentType = _nullishCoalesce(response.headers.get("Content-Type"), () => ( ""));
|
|
49
17
|
if (contentType.includes("stream") || contentType.includes("text/event-stream")) {
|
|
50
18
|
const sourceBody = response.body;
|
|
@@ -69,7 +37,7 @@ async function unwrapCodeAssistResponse(response) {
|
|
|
69
37
|
}
|
|
70
38
|
try {
|
|
71
39
|
const parsed = JSON.parse(payload);
|
|
72
|
-
const inner2 =
|
|
40
|
+
const inner2 = peelCcaResponseEnvelope(parsed);
|
|
73
41
|
controller.enqueue(encoder.encode(`data: ${JSON.stringify(inner2)}
|
|
74
42
|
`));
|
|
75
43
|
} catch (e) {
|
|
@@ -103,13 +71,48 @@ async function unwrapCodeAssistResponse(response) {
|
|
|
103
71
|
});
|
|
104
72
|
}
|
|
105
73
|
const raw = await response.json().catch(() => null);
|
|
106
|
-
const inner =
|
|
74
|
+
const inner = peelCcaResponseEnvelope(raw);
|
|
107
75
|
return new Response(JSON.stringify(inner), {
|
|
108
76
|
status: response.status,
|
|
109
77
|
statusText: response.statusText,
|
|
110
78
|
headers: response.headers
|
|
111
79
|
});
|
|
112
80
|
}
|
|
81
|
+
function buildCcaMethodUrl(base, version, stream) {
|
|
82
|
+
const method = stream ? "streamGenerateContent?alt=sse" : "generateContent";
|
|
83
|
+
return `${base}/${version}:${method}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// src/transformer/transformers/GeminiCodeAssistTransformer.ts
|
|
87
|
+
var DEFAULT_CODE_ASSIST_ENDPOINT = "https://cloudcode-pa.googleapis.com";
|
|
88
|
+
var DEFAULT_CODE_ASSIST_API_VERSION = "v1internal";
|
|
89
|
+
function resolveCodeAssistEndpoint() {
|
|
90
|
+
return (process.env.CODE_ASSIST_ENDPOINT || DEFAULT_CODE_ASSIST_ENDPOINT).replace(/\/+$/, "");
|
|
91
|
+
}
|
|
92
|
+
function resolveCodeAssistApiVersion() {
|
|
93
|
+
return process.env.CODE_ASSIST_API_VERSION || DEFAULT_CODE_ASSIST_API_VERSION;
|
|
94
|
+
}
|
|
95
|
+
var DEFAULT_GEMINI_CLI_VERSION = "0.46.0";
|
|
96
|
+
function getGeminiCliUserAgent(modelId = "gemini-3.1-pro-preview") {
|
|
97
|
+
const version = process.env.GEMINI_CLI_VERSION || DEFAULT_GEMINI_CLI_VERSION;
|
|
98
|
+
const platform = process.platform === "win32" ? "win32" : process.platform;
|
|
99
|
+
const arch = process.arch === "x64" ? "x64" : process.arch;
|
|
100
|
+
return `GeminiCLI/${version}/${modelId} (${platform}; ${arch}; terminal)`;
|
|
101
|
+
}
|
|
102
|
+
function getGeminiCliIdentityHeaders(modelId) {
|
|
103
|
+
return {
|
|
104
|
+
"User-Agent": getGeminiCliUserAgent(modelId),
|
|
105
|
+
"Client-Metadata": "ideType=IDE_UNSPECIFIED,platform=PLATFORM_UNSPECIFIED,pluginType=GEMINI"
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function buildCodeAssistUrl(stream) {
|
|
109
|
+
return buildCcaMethodUrl(resolveCodeAssistEndpoint(), resolveCodeAssistApiVersion(), stream);
|
|
110
|
+
}
|
|
111
|
+
function generateUserPromptId() {
|
|
112
|
+
const c = globalThis.crypto;
|
|
113
|
+
if (_optionalChain([c, 'optionalAccess', _ => _.randomUUID])) return c.randomUUID();
|
|
114
|
+
return `omnicross-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
115
|
+
}
|
|
113
116
|
var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
|
|
114
117
|
static __initStatic() {this.TransformerName = "gemini-code-assist"}
|
|
115
118
|
__init() {this.name = "gemini-code-assist"}
|
|
@@ -130,7 +133,7 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
|
|
|
130
133
|
* openaiResponsesIngress). `undefined` is the valid fresh free-tier value.
|
|
131
134
|
*/
|
|
132
135
|
async transformRequestIn(request, provider, _context) {
|
|
133
|
-
const inner =
|
|
136
|
+
const inner = _chunk4NAMH4UEcjs.buildRequestBody.call(void 0, request, provider);
|
|
134
137
|
const envelope = {
|
|
135
138
|
model: request.model,
|
|
136
139
|
project: provider.geminiProject,
|
|
@@ -161,15 +164,15 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
|
|
|
161
164
|
if (inner && typeof inner === "object" && !("model" in inner) && "model" in r) {
|
|
162
165
|
inner.model = r.model;
|
|
163
166
|
}
|
|
164
|
-
return
|
|
167
|
+
return _chunk4NAMH4UEcjs.transformRequestOut.call(void 0, inner);
|
|
165
168
|
}
|
|
166
169
|
/**
|
|
167
170
|
* Code Assist response → OpenAI-compatible. PEEL the `.response` envelope from
|
|
168
171
|
* the body / each SSE chunk, then DELEGATE to the existing gemini parser.
|
|
169
172
|
*/
|
|
170
173
|
async transformResponseOut(response, _context) {
|
|
171
|
-
const unwrapped = await
|
|
172
|
-
return
|
|
174
|
+
const unwrapped = await unwrapCcaResponse(response);
|
|
175
|
+
return _chunk4NAMH4UEcjs.transformResponseOut.call(void 0, unwrapped, this.name, this.logger);
|
|
173
176
|
}
|
|
174
177
|
/**
|
|
175
178
|
* OpenAI-compatible response → Code Assist (endpoint-encode parity). Re-wraps
|
|
@@ -178,7 +181,7 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
|
|
|
178
181
|
* `transformResponseOut`'s peel.
|
|
179
182
|
*/
|
|
180
183
|
async transformResponseIn(response, _context) {
|
|
181
|
-
const geminiResponse = await
|
|
184
|
+
const geminiResponse = await _chunk4NAMH4UEcjs.transformResponseIn.call(void 0, response, this.logger);
|
|
182
185
|
const contentType = _nullishCoalesce(geminiResponse.headers.get("Content-Type"), () => ( ""));
|
|
183
186
|
if (contentType.includes("text/event-stream")) {
|
|
184
187
|
return geminiResponse;
|
|
@@ -199,4 +202,6 @@ var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.protot
|
|
|
199
202
|
|
|
200
203
|
|
|
201
204
|
|
|
202
|
-
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
exports.unwrapCcaResponse = unwrapCcaResponse; exports.buildCcaMethodUrl = buildCcaMethodUrl; exports.resolveCodeAssistEndpoint = resolveCodeAssistEndpoint; exports.resolveCodeAssistApiVersion = resolveCodeAssistApiVersion; exports.getGeminiCliUserAgent = getGeminiCliUserAgent; exports.getGeminiCliIdentityHeaders = getGeminiCliIdentityHeaders; exports.buildCodeAssistUrl = buildCodeAssistUrl; exports.GeminiCodeAssistTransformer = GeminiCodeAssistTransformer;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {
|
|
2
|
+
flattenHeaderValue
|
|
3
|
+
} from "./chunk-ONTTXSRL.js";
|
|
4
|
+
|
|
5
|
+
// src/provider-proxy/identity/openCodeGoHeaders.ts
|
|
6
|
+
var OPENCODE_SESSION_HEADER = "x-opencode-session";
|
|
7
|
+
var configuredUserAgent;
|
|
8
|
+
function setOpenCodeGoUserAgent(userAgent) {
|
|
9
|
+
const trimmed = typeof userAgent === "string" ? userAgent.trim() : "";
|
|
10
|
+
configuredUserAgent = trimmed.length > 0 ? trimmed : void 0;
|
|
11
|
+
}
|
|
12
|
+
function getOpenCodeGoUserAgent() {
|
|
13
|
+
if (configuredUserAgent) return configuredUserAgent;
|
|
14
|
+
const version = true ? "0.4.4" : "0.0.0-dev";
|
|
15
|
+
return `omnicross/${version}`;
|
|
16
|
+
}
|
|
17
|
+
function extractOpenCodeSessionHeader(reqHeaders) {
|
|
18
|
+
for (const [rawKey, rawVal] of Object.entries(reqHeaders)) {
|
|
19
|
+
if (rawKey.toLowerCase() !== OPENCODE_SESSION_HEADER) continue;
|
|
20
|
+
const value = flattenHeaderValue(rawVal);
|
|
21
|
+
if (value === void 0) continue;
|
|
22
|
+
const trimmed = value.trim();
|
|
23
|
+
if (trimmed.length > 0) return trimmed;
|
|
24
|
+
}
|
|
25
|
+
return void 0;
|
|
26
|
+
}
|
|
27
|
+
function resolveOpenCodeSessionHeader(callerSession, sessionKey) {
|
|
28
|
+
const caller = typeof callerSession === "string" ? callerSession.trim() : "";
|
|
29
|
+
if (caller.length > 0) return caller;
|
|
30
|
+
if (typeof sessionKey === "string" && sessionKey.trim().length > 0) return sessionKey;
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
function __resetOpenCodeGoHeadersForTests() {
|
|
34
|
+
configuredUserAgent = void 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
OPENCODE_SESSION_HEADER,
|
|
39
|
+
setOpenCodeGoUserAgent,
|
|
40
|
+
getOpenCodeGoUserAgent,
|
|
41
|
+
extractOpenCodeSessionHeader,
|
|
42
|
+
resolveOpenCodeSessionHeader,
|
|
43
|
+
__resetOpenCodeGoHeadersForTests
|
|
44
|
+
};
|
|
@@ -0,0 +1,230 @@
|
|
|
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
|
+
var _chunkN3MGNLCUcjs = require('./chunk-N3MGNLCU.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkVFFCV4J6cjs = require('./chunk-VFFCV4J6.cjs');
|
|
8
|
+
|
|
9
|
+
// src/auth/GeminiCodeAssistProjectResolver.ts
|
|
10
|
+
var FREE_TIER_ID = "free-tier";
|
|
11
|
+
var LEGACY_TIER_ID = "legacy-tier";
|
|
12
|
+
var ONBOARD_POLL_INTERVAL_MS = 5e3;
|
|
13
|
+
var ONBOARD_MAX_POLLS = 24;
|
|
14
|
+
var GeminiCodeAssistHandshakeError = class extends Error {
|
|
15
|
+
constructor(message, status, code) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.status = status;
|
|
18
|
+
this.code = code;
|
|
19
|
+
this.name = "GeminiCodeAssistHandshakeError";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
};
|
|
24
|
+
var ANTIGRAVITY_CODE_ASSIST_ENDPOINT = "https://daily-cloudcode-pa.googleapis.com";
|
|
25
|
+
var GeminiCodeAssistProjectResolver = (_class = class {
|
|
26
|
+
/** account access token → resolved project id (undefined = free-tier, no project). */
|
|
27
|
+
__init() {this.cache = /* @__PURE__ */ new Map()}
|
|
28
|
+
/** In-flight handshakes so concurrent callers share one round-trip. */
|
|
29
|
+
__init2() {this.inflight = /* @__PURE__ */ new Map()}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
// upstream-proxy: the Code Assist handshake is upstream egress → honor the
|
|
33
|
+
// dialect's proxy layer by default (still injectable for tests).
|
|
34
|
+
constructor(fetchImpl, options = {}) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
|
|
35
|
+
this.dialect = _nullishCoalesce(options.dialect, () => ( "gemini-cli"));
|
|
36
|
+
this.endpoint = options.endpoint;
|
|
37
|
+
const providerId = _nullishCoalesce(options.proxyProviderId, () => ( "gemini"));
|
|
38
|
+
this.fetchImpl = _nullishCoalesce(fetchImpl, () => ( ((url, init) => _chunkVFFCV4J6cjs.fetchUpstream.call(void 0, url, init, { providerId }))));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Test/diagnostic helper — clear the cached resolution for an account. */
|
|
42
|
+
clearCache() {
|
|
43
|
+
this.cache.clear();
|
|
44
|
+
this.inflight.clear();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve (and cache) the Code Assist project for the given access token.
|
|
48
|
+
* Runs the handshake at most once per token. Returns `undefined` for a
|
|
49
|
+
* brand-new free-tier account (valid — the envelope sends no project).
|
|
50
|
+
*/
|
|
51
|
+
async resolveProject(accessToken) {
|
|
52
|
+
if (this.cache.has(accessToken)) {
|
|
53
|
+
return this.cache.get(accessToken);
|
|
54
|
+
}
|
|
55
|
+
const existing = this.inflight.get(accessToken);
|
|
56
|
+
if (existing) return existing;
|
|
57
|
+
const run = this.runHandshake(accessToken).then((project) => {
|
|
58
|
+
this.cache.set(accessToken, project);
|
|
59
|
+
return project;
|
|
60
|
+
}).finally(() => {
|
|
61
|
+
this.inflight.delete(accessToken);
|
|
62
|
+
});
|
|
63
|
+
this.inflight.set(accessToken, run);
|
|
64
|
+
return run;
|
|
65
|
+
}
|
|
66
|
+
codeAssistUrl(method) {
|
|
67
|
+
const base = _nullishCoalesce(this.endpoint, () => ( _chunkN3MGNLCUcjs.resolveCodeAssistEndpoint.call(void 0, )));
|
|
68
|
+
return `${base}/${_chunkN3MGNLCUcjs.resolveCodeAssistApiVersion.call(void 0, )}:${method}`;
|
|
69
|
+
}
|
|
70
|
+
/** The client metadata the dialect's upstream expects on the handshake calls. */
|
|
71
|
+
handshakeMetadata(project) {
|
|
72
|
+
if (this.dialect === "antigravity") {
|
|
73
|
+
return { ideType: "ANTIGRAVITY" };
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
ideType: "IDE_UNSPECIFIED",
|
|
77
|
+
platform: "PLATFORM_UNSPECIFIED",
|
|
78
|
+
pluginType: "GEMINI",
|
|
79
|
+
duetProject: project
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** The tier id used when `allowedTiers` carries no default. */
|
|
83
|
+
get fallbackTierId() {
|
|
84
|
+
return this.dialect === "antigravity" ? FREE_TIER_ID : LEGACY_TIER_ID;
|
|
85
|
+
}
|
|
86
|
+
/** Seed project id from env; reject a purely-numeric value (project NUMBER). */
|
|
87
|
+
seedProjectId() {
|
|
88
|
+
const seed = process.env.GOOGLE_CLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT_ID || "";
|
|
89
|
+
if (seed && /^\d+$/.test(seed.trim())) return "";
|
|
90
|
+
return seed.trim();
|
|
91
|
+
}
|
|
92
|
+
async runHandshake(accessToken) {
|
|
93
|
+
const seededProject = this.seedProjectId();
|
|
94
|
+
const load = await this.postCodeAssist("loadCodeAssist", accessToken, {
|
|
95
|
+
cloudaicompanionProject: seededProject || void 0,
|
|
96
|
+
metadata: this.handshakeMetadata(seededProject || void 0)
|
|
97
|
+
});
|
|
98
|
+
if (_optionalChain([load, 'access', _ => _.currentTier, 'optionalAccess', _2 => _2.id])) {
|
|
99
|
+
return this.settleProject(load.cloudaicompanionProject || void 0);
|
|
100
|
+
}
|
|
101
|
+
const defaultTier = _optionalChain([load, 'access', _3 => _3.allowedTiers, 'optionalAccess', _4 => _4.find, 'call', _5 => _5((t) => t.isDefault)]);
|
|
102
|
+
const tierId = _nullishCoalesce(_optionalChain([defaultTier, 'optionalAccess', _6 => _6.id]), () => ( this.fallbackTierId));
|
|
103
|
+
const isFreeish = tierId === FREE_TIER_ID || tierId === LEGACY_TIER_ID;
|
|
104
|
+
const onboardProject = isFreeish ? void 0 : seededProject || void 0;
|
|
105
|
+
let lro = await this.postCodeAssist("onboardUser", accessToken, {
|
|
106
|
+
tierId,
|
|
107
|
+
cloudaicompanionProject: onboardProject,
|
|
108
|
+
metadata: this.handshakeMetadata(onboardProject)
|
|
109
|
+
});
|
|
110
|
+
let polls = 0;
|
|
111
|
+
while (!lro.done && polls < ONBOARD_MAX_POLLS) {
|
|
112
|
+
await delay(ONBOARD_POLL_INTERVAL_MS);
|
|
113
|
+
polls++;
|
|
114
|
+
lro = await this.getOperation(accessToken, lro.name);
|
|
115
|
+
}
|
|
116
|
+
if (lro.error) {
|
|
117
|
+
throw new GeminiCodeAssistHandshakeError(
|
|
118
|
+
`Code Assist onboardUser failed: ${_nullishCoalesce(lro.error.message, () => ( "unknown"))}`,
|
|
119
|
+
_nullishCoalesce(lro.error.code, () => ( 500))
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
return this.settleProject(_optionalChain([lro, 'access', _7 => _7.response, 'optionalAccess', _8 => _8.cloudaicompanionProject, 'optionalAccess', _9 => _9.id]) || void 0);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Final project settlement per dialect: gemini-cli treats `undefined` as the
|
|
126
|
+
* valid fresh free-tier value; antigravity ALWAYS carries a project (its
|
|
127
|
+
* envelope is rejected without one), so an absent project is a hard error.
|
|
128
|
+
*/
|
|
129
|
+
settleProject(project) {
|
|
130
|
+
if (project === void 0 && this.dialect === "antigravity") {
|
|
131
|
+
throw new GeminiCodeAssistHandshakeError(
|
|
132
|
+
"Code Assist loadCodeAssist did not return a cloudaicompanionProject (antigravity requires one)",
|
|
133
|
+
502
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
return project;
|
|
137
|
+
}
|
|
138
|
+
/** POST a Code Assist method, surfacing the documented hard failures clearly. */
|
|
139
|
+
async postCodeAssist(method, accessToken, body) {
|
|
140
|
+
const url = this.codeAssistUrl(method);
|
|
141
|
+
const res = await this.fetchImpl(url, {
|
|
142
|
+
method: "POST",
|
|
143
|
+
headers: {
|
|
144
|
+
Authorization: `Bearer ${accessToken}`,
|
|
145
|
+
"Content-Type": "application/json"
|
|
146
|
+
},
|
|
147
|
+
body: JSON.stringify(body)
|
|
148
|
+
});
|
|
149
|
+
if (!res.ok) {
|
|
150
|
+
await this.throwForStatus(res, method);
|
|
151
|
+
}
|
|
152
|
+
return await res.json();
|
|
153
|
+
}
|
|
154
|
+
async getOperation(accessToken, name) {
|
|
155
|
+
const url = this.codeAssistUrl("getOperation");
|
|
156
|
+
const res = await this.fetchImpl(url, {
|
|
157
|
+
method: "POST",
|
|
158
|
+
headers: {
|
|
159
|
+
Authorization: `Bearer ${accessToken}`,
|
|
160
|
+
"Content-Type": "application/json"
|
|
161
|
+
},
|
|
162
|
+
body: JSON.stringify({ name })
|
|
163
|
+
});
|
|
164
|
+
if (!res.ok) {
|
|
165
|
+
await this.throwForStatus(res, "getOperation");
|
|
166
|
+
}
|
|
167
|
+
return await res.json();
|
|
168
|
+
}
|
|
169
|
+
/** Map a non-2xx Code Assist response to a clear, surfaced error. */
|
|
170
|
+
async throwForStatus(res, method) {
|
|
171
|
+
let detailCode;
|
|
172
|
+
let detailMessage = "";
|
|
173
|
+
try {
|
|
174
|
+
const errBody = await res.json();
|
|
175
|
+
detailCode = _optionalChain([errBody, 'access', _10 => _10.error, 'optionalAccess', _11 => _11.status]);
|
|
176
|
+
detailMessage = _nullishCoalesce(_optionalChain([errBody, 'access', _12 => _12.error, 'optionalAccess', _13 => _13.message]), () => ( ""));
|
|
177
|
+
} catch (e) {
|
|
178
|
+
}
|
|
179
|
+
if (res.status === 403) {
|
|
180
|
+
throw new GeminiCodeAssistHandshakeError(
|
|
181
|
+
`Code Assist ${method} denied (403 ${_nullishCoalesce(detailCode, () => ( "PERMISSION_DENIED"))}): ${detailMessage || "enable the Cloud AI Companion API and grant the required role"}`,
|
|
182
|
+
403,
|
|
183
|
+
detailCode
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
if (res.status === 429) {
|
|
187
|
+
throw new GeminiCodeAssistHandshakeError(
|
|
188
|
+
`Code Assist ${method} rate-limited (429): ${detailMessage || "quota exceeded, retry later"}`,
|
|
189
|
+
429,
|
|
190
|
+
detailCode
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
throw new GeminiCodeAssistHandshakeError(
|
|
194
|
+
`Code Assist ${method} failed (${res.status}): ${detailMessage || res.statusText}`,
|
|
195
|
+
res.status,
|
|
196
|
+
detailCode
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
}, _class);
|
|
200
|
+
function delay(ms) {
|
|
201
|
+
return new Promise((resolve) => {
|
|
202
|
+
setTimeout(resolve, ms);
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
var _resolverSingleton = null;
|
|
206
|
+
function getGeminiCodeAssistProjectResolver() {
|
|
207
|
+
if (!_resolverSingleton) {
|
|
208
|
+
_resolverSingleton = new GeminiCodeAssistProjectResolver();
|
|
209
|
+
}
|
|
210
|
+
return _resolverSingleton;
|
|
211
|
+
}
|
|
212
|
+
var _antigravityResolverSingleton = null;
|
|
213
|
+
function getAntigravityProjectResolver() {
|
|
214
|
+
if (!_antigravityResolverSingleton) {
|
|
215
|
+
_antigravityResolverSingleton = new GeminiCodeAssistProjectResolver(void 0, {
|
|
216
|
+
endpoint: ANTIGRAVITY_CODE_ASSIST_ENDPOINT,
|
|
217
|
+
dialect: "antigravity",
|
|
218
|
+
proxyProviderId: "antigravity"
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return _antigravityResolverSingleton;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
exports.GeminiCodeAssistHandshakeError = GeminiCodeAssistHandshakeError; exports.ANTIGRAVITY_CODE_ASSIST_ENDPOINT = ANTIGRAVITY_CODE_ASSIST_ENDPOINT; exports.GeminiCodeAssistProjectResolver = GeminiCodeAssistProjectResolver; exports.getGeminiCodeAssistProjectResolver = getGeminiCodeAssistProjectResolver; exports.getAntigravityProjectResolver = getAntigravityProjectResolver;
|