@eddyskywalker/dsh-chatgpt-subscription 0.2.3 → 0.2.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/README.md +3 -1
- package/lib/client.js +2 -2
- package/lib/client.js.map +1 -1
- package/lib/index.js +38 -39
- package/lib/types/client/locales.d.ts +3 -3
- package/lib/types/host/antigravity/adapter.d.ts +4 -1
- package/lib/types/host/antigravity/adapter.d.ts.map +1 -1
- package/lib/types/host/antigravity/client.d.ts +4 -4
- package/lib/types/host/antigravity/client.d.ts.map +1 -1
- package/lib/types/host/antigravity/oauth.d.ts +6 -6
- package/lib/types/host/antigravity/oauth.d.ts.map +1 -1
- package/lib/types/host/antigravity/routes.d.ts +1 -1
- package/lib/types/host/antigravity/routes.d.ts.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -4251,9 +4251,9 @@ function extractProjectId(data) {
|
|
|
4251
4251
|
}
|
|
4252
4252
|
}
|
|
4253
4253
|
}
|
|
4254
|
-
async function listCloudAICompanionProjects(token) {
|
|
4254
|
+
async function listCloudAICompanionProjects(token, fetchFn = fetch) {
|
|
4255
4255
|
for (const endpoint of endpointCandidates()) try {
|
|
4256
|
-
const response = await
|
|
4256
|
+
const response = await fetchFn(`${endpoint}/v1internal:listCloudAICompanionProjects`, {
|
|
4257
4257
|
method: "POST",
|
|
4258
4258
|
headers: antigravityHeaders(token),
|
|
4259
4259
|
body: JSON.stringify({}),
|
|
@@ -4263,7 +4263,7 @@ async function listCloudAICompanionProjects(token) {
|
|
|
4263
4263
|
return extractProjectId(await response.json());
|
|
4264
4264
|
} catch {}
|
|
4265
4265
|
}
|
|
4266
|
-
async function loadCodeAssist(token) {
|
|
4266
|
+
async function loadCodeAssist(token, fetchFn = fetch) {
|
|
4267
4267
|
const cached = projectCache.get(token);
|
|
4268
4268
|
if (cached && cached.expiresAt > Date.now()) return cached.projectId;
|
|
4269
4269
|
const body = JSON.stringify({ metadata: {
|
|
@@ -4272,7 +4272,7 @@ async function loadCodeAssist(token) {
|
|
|
4272
4272
|
pluginType: "GEMINI"
|
|
4273
4273
|
} });
|
|
4274
4274
|
for (const endpoint of endpointCandidates()) try {
|
|
4275
|
-
const response = await
|
|
4275
|
+
const response = await fetchFn(`${endpoint}/v1internal:loadCodeAssist`, {
|
|
4276
4276
|
method: "POST",
|
|
4277
4277
|
headers: antigravityHeaders(token),
|
|
4278
4278
|
body,
|
|
@@ -4287,7 +4287,7 @@ async function loadCodeAssist(token) {
|
|
|
4287
4287
|
});
|
|
4288
4288
|
return project;
|
|
4289
4289
|
}
|
|
4290
|
-
const listProj = await listCloudAICompanionProjects(token);
|
|
4290
|
+
const listProj = await listCloudAICompanionProjects(token, fetchFn);
|
|
4291
4291
|
if (listProj) {
|
|
4292
4292
|
projectCache.set(token, {
|
|
4293
4293
|
projectId: listProj,
|
|
@@ -4297,9 +4297,9 @@ async function loadCodeAssist(token) {
|
|
|
4297
4297
|
}
|
|
4298
4298
|
} catch {}
|
|
4299
4299
|
}
|
|
4300
|
-
async function postJson(path, token, body) {
|
|
4300
|
+
async function postJson(path, token, body, fetchFn = fetch) {
|
|
4301
4301
|
for (const endpoint of endpointCandidates()) try {
|
|
4302
|
-
const response = await
|
|
4302
|
+
const response = await fetchFn(`${endpoint}${path}`, {
|
|
4303
4303
|
method: "POST",
|
|
4304
4304
|
headers: jsonHeaders(token),
|
|
4305
4305
|
body: JSON.stringify(body)
|
|
@@ -4362,16 +4362,16 @@ function parseCatalogModels(data) {
|
|
|
4362
4362
|
}
|
|
4363
4363
|
return list;
|
|
4364
4364
|
}
|
|
4365
|
-
async function fetchAccountQuota(store = new FileCredentialStore(), modelSettings) {
|
|
4366
|
-
const { token, projectId: credentialProjectId } = await ensureApiKey(store);
|
|
4365
|
+
async function fetchAccountQuota(store = new FileCredentialStore(), modelSettings, fetchFn = fetch) {
|
|
4366
|
+
const { token, projectId: credentialProjectId } = await ensureApiKey(store, fetchFn);
|
|
4367
4367
|
const [assistResult, summaryResult] = await Promise.all([postJson("/v1internal:loadCodeAssist", token, { metadata: {
|
|
4368
4368
|
ideType: "ANTIGRAVITY",
|
|
4369
4369
|
platform: "PLATFORM_UNSPECIFIED",
|
|
4370
4370
|
pluginType: "GEMINI"
|
|
4371
|
-
} }).catch(() => null), postJson("/v1internal:retrieveUserQuotaSummary", token, {}).catch(() => null)]);
|
|
4371
|
+
} }, fetchFn).catch(() => null), postJson("/v1internal:retrieveUserQuotaSummary", token, {}, fetchFn).catch(() => null)]);
|
|
4372
4372
|
const discoveredProject = assistResult ? extractProjectId(assistResult.data) : void 0;
|
|
4373
4373
|
const projectId = credentialProjectId || discoveredProject || "antigravity-default";
|
|
4374
|
-
const modelsData = (await postJson("/v1internal:fetchAvailableModels", token, { project: projectId }).catch(() => null))?.data;
|
|
4374
|
+
const modelsData = (await postJson("/v1internal:fetchAvailableModels", token, { project: projectId }, fetchFn).catch(() => null))?.data;
|
|
4375
4375
|
const { groups, description } = summaryResult ? parseQuotaSummary(summaryResult.data) : { groups: [] };
|
|
4376
4376
|
const catalogModels = modelsData ? parseCatalogModels(modelsData) : [];
|
|
4377
4377
|
const assistData = assistResult?.data || {};
|
|
@@ -4469,9 +4469,9 @@ function openBrowser(url) {
|
|
|
4469
4469
|
});
|
|
4470
4470
|
} catch {}
|
|
4471
4471
|
}
|
|
4472
|
-
async function getUserEmail(token) {
|
|
4472
|
+
async function getUserEmail(token, fetchFn = fetch) {
|
|
4473
4473
|
try {
|
|
4474
|
-
const response = await
|
|
4474
|
+
const response = await fetchFn("https://www.googleapis.com/oauth2/v1/userinfo?alt=json", { headers: { Authorization: `Bearer ${token}` } });
|
|
4475
4475
|
if (!response.ok) return void 0;
|
|
4476
4476
|
const data = await response.json();
|
|
4477
4477
|
return typeof data.email === "string" ? data.email : void 0;
|
|
@@ -4550,8 +4550,8 @@ function startCallbackServer(expectedState) {
|
|
|
4550
4550
|
});
|
|
4551
4551
|
});
|
|
4552
4552
|
}
|
|
4553
|
-
async function exchangeOAuthCode(code, verifier, callbackUrl) {
|
|
4554
|
-
const tokenResponse = await
|
|
4553
|
+
async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch) {
|
|
4554
|
+
const tokenResponse = await fetchFn(TOKEN_URL, {
|
|
4555
4555
|
method: "POST",
|
|
4556
4556
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
4557
4557
|
body: new URLSearchParams$1({
|
|
@@ -4569,7 +4569,7 @@ async function exchangeOAuthCode(code, verifier, callbackUrl) {
|
|
|
4569
4569
|
const accessToken = typeof tokenData.access_token === "string" ? tokenData.access_token : "";
|
|
4570
4570
|
const expiresIn = typeof tokenData.expires_in === "number" ? tokenData.expires_in : 3600;
|
|
4571
4571
|
if (!refreshToken) throw new Error("No refresh token received. Re-run login and allow offline access.");
|
|
4572
|
-
const [email, discoveredProject] = await Promise.all([getUserEmail(accessToken), loadCodeAssist(accessToken).catch(() => void 0)]);
|
|
4572
|
+
const [email, discoveredProject] = await Promise.all([getUserEmail(accessToken, fetchFn), loadCodeAssist(accessToken, fetchFn).catch(() => void 0)]);
|
|
4573
4573
|
return {
|
|
4574
4574
|
refresh: refreshToken,
|
|
4575
4575
|
refresh_token: refreshToken,
|
|
@@ -4581,7 +4581,7 @@ async function exchangeOAuthCode(code, verifier, callbackUrl) {
|
|
|
4581
4581
|
email
|
|
4582
4582
|
};
|
|
4583
4583
|
}
|
|
4584
|
-
async function beginWebLogin(store) {
|
|
4584
|
+
async function beginWebLogin(store, fetchFn = fetch) {
|
|
4585
4585
|
if (webLoginFlow.status === "pending") return { ...webLoginFlow };
|
|
4586
4586
|
const { verifier, challenge } = generatePKCE();
|
|
4587
4587
|
const state = base64Url(randomBytes(32));
|
|
@@ -4607,7 +4607,7 @@ async function beginWebLogin(store) {
|
|
|
4607
4607
|
try {
|
|
4608
4608
|
const { code, state: returnedState } = await waitForCode();
|
|
4609
4609
|
if (returnedState !== state) throw new Error("OAuth state mismatch");
|
|
4610
|
-
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl);
|
|
4610
|
+
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn);
|
|
4611
4611
|
await store.write(credentials);
|
|
4612
4612
|
webLoginFlow.status = "complete";
|
|
4613
4613
|
webLoginFlow.email = credentials.email;
|
|
@@ -4625,10 +4625,10 @@ async function beginWebLogin(store) {
|
|
|
4625
4625
|
function getWebLoginStatus() {
|
|
4626
4626
|
return { ...webLoginFlow };
|
|
4627
4627
|
}
|
|
4628
|
-
async function refreshAntigravityToken(credentials) {
|
|
4628
|
+
async function refreshAntigravityToken(credentials, fetchFn = fetch) {
|
|
4629
4629
|
const refreshToken = credentials.refresh || credentials.refresh_token;
|
|
4630
4630
|
if (!refreshToken) throw new Error("Missing Antigravity refresh token.");
|
|
4631
|
-
const response = await
|
|
4631
|
+
const response = await fetchFn(TOKEN_URL, {
|
|
4632
4632
|
method: "POST",
|
|
4633
4633
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
4634
4634
|
body: new URLSearchParams$1({
|
|
@@ -4653,12 +4653,12 @@ async function refreshAntigravityToken(credentials) {
|
|
|
4653
4653
|
expires_at: Date.now() + expiresIn * 1e3 - 300 * 1e3
|
|
4654
4654
|
};
|
|
4655
4655
|
}
|
|
4656
|
-
async function ensureApiKey(store) {
|
|
4656
|
+
async function ensureApiKey(store, fetchFn = fetch) {
|
|
4657
4657
|
let credentials = await store.read();
|
|
4658
4658
|
if (!credentials) throw new Error("Not logged into Antigravity. Please log in from Settings > Antigravity.");
|
|
4659
4659
|
const expires = credentials.expires || credentials.expires_at || 0;
|
|
4660
4660
|
if (!(credentials.access || credentials.access_token) || expires <= Date.now() + 6e4) {
|
|
4661
|
-
credentials = await refreshAntigravityToken(credentials);
|
|
4661
|
+
credentials = await refreshAntigravityToken(credentials, fetchFn);
|
|
4662
4662
|
await store.write(credentials);
|
|
4663
4663
|
}
|
|
4664
4664
|
return {
|
|
@@ -4666,7 +4666,7 @@ async function ensureApiKey(store) {
|
|
|
4666
4666
|
projectId: credentials.projectId
|
|
4667
4667
|
};
|
|
4668
4668
|
}
|
|
4669
|
-
async function loginAndSave(store, signal, onUrl) {
|
|
4669
|
+
async function loginAndSave(store, signal, onUrl, fetchFn = fetch) {
|
|
4670
4670
|
const { verifier, challenge } = generatePKCE();
|
|
4671
4671
|
const state = base64Url(randomBytes(32));
|
|
4672
4672
|
const { server, waitForCode } = await startCallbackServer(state);
|
|
@@ -4688,7 +4688,7 @@ async function loginAndSave(store, signal, onUrl) {
|
|
|
4688
4688
|
if (signal?.aborted) throw new Error("OAuth login aborted");
|
|
4689
4689
|
const { code, state: returnedState } = await waitForCode();
|
|
4690
4690
|
if (returnedState !== state) throw new Error("OAuth state mismatch");
|
|
4691
|
-
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl);
|
|
4691
|
+
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn);
|
|
4692
4692
|
await store.write(credentials);
|
|
4693
4693
|
return credentials;
|
|
4694
4694
|
} finally {
|
|
@@ -5173,11 +5173,13 @@ var AntigravityAdapter = class extends LlmAdapter {
|
|
|
5173
5173
|
store;
|
|
5174
5174
|
modelSettings;
|
|
5175
5175
|
preferences;
|
|
5176
|
-
|
|
5176
|
+
options;
|
|
5177
|
+
constructor(store = new FileCredentialStore(), modelSettings = new FileModelSettingsStore(), preferences, options = {}) {
|
|
5177
5178
|
super();
|
|
5178
5179
|
this.store = store;
|
|
5179
5180
|
this.modelSettings = modelSettings;
|
|
5180
5181
|
this.preferences = preferences;
|
|
5182
|
+
this.options = options;
|
|
5181
5183
|
}
|
|
5182
5184
|
providerInfo(provider) {
|
|
5183
5185
|
return {
|
|
@@ -5257,7 +5259,8 @@ var AntigravityAdapter = class extends LlmAdapter {
|
|
|
5257
5259
|
yield* wrapStreamWithWatchdog((watchdogSignal) => this.requestStream(effectiveOptions, model, watchdogSignal), options.signal, STREAM_IDLE_TIMEOUT_MS, STREAM_IDLE_TIMEOUT_CODE, "Antigravity");
|
|
5258
5260
|
}
|
|
5259
5261
|
async *requestStream(options, model, signal) {
|
|
5260
|
-
const
|
|
5262
|
+
const fetchFn = this.options.fetchFn ?? fetch;
|
|
5263
|
+
const { token, projectId: defaultProj } = await ensureApiKey(this.store, fetchFn);
|
|
5261
5264
|
const projectId = defaultProj || "antigravity-default";
|
|
5262
5265
|
const effort = String(options.reasoningEffort || "medium").toLowerCase();
|
|
5263
5266
|
const routing = ROUTING[model.id];
|
|
@@ -5276,7 +5279,7 @@ var AntigravityAdapter = class extends LlmAdapter {
|
|
|
5276
5279
|
...model.id.startsWith("claude-") ? { "anthropic-beta": "interleaved-thinking-2025-05-14" } : {}
|
|
5277
5280
|
};
|
|
5278
5281
|
for (const endpoint of endpointCandidates()) try {
|
|
5279
|
-
response = await
|
|
5282
|
+
response = await fetchFn(`${endpoint}/v1internal:streamGenerateContent?alt=sse`, {
|
|
5280
5283
|
method: "POST",
|
|
5281
5284
|
headers,
|
|
5282
5285
|
body,
|
|
@@ -5382,7 +5385,7 @@ async function getAntigravityWebStatus(store, modelSettings, preferences) {
|
|
|
5382
5385
|
defaultReasoningEffort: settings.defaultReasoningEffort || null
|
|
5383
5386
|
};
|
|
5384
5387
|
}
|
|
5385
|
-
function registerAntigravityRoutes(ctx, store, modelSettings, preferences) {
|
|
5388
|
+
function registerAntigravityRoutes(ctx, store, modelSettings, preferences, fetchFn = fetch) {
|
|
5386
5389
|
return ctx.webServer.register({
|
|
5387
5390
|
kind: "prefix",
|
|
5388
5391
|
path: "/antigravity/api",
|
|
@@ -5400,7 +5403,7 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences) {
|
|
|
5400
5403
|
if (request.method !== "POST") return sendMethodNotAllowed(response);
|
|
5401
5404
|
return sendJson(response, 200, {
|
|
5402
5405
|
ok: true,
|
|
5403
|
-
value: await beginWebLogin(store)
|
|
5406
|
+
value: await beginWebLogin(store, fetchFn)
|
|
5404
5407
|
});
|
|
5405
5408
|
}
|
|
5406
5409
|
if (path === "login/status") {
|
|
@@ -5412,7 +5415,7 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences) {
|
|
|
5412
5415
|
}
|
|
5413
5416
|
if (path === "quota") {
|
|
5414
5417
|
if (request.method !== "GET" && request.method !== "POST") return sendMethodNotAllowed(response);
|
|
5415
|
-
const quota = await fetchAccountQuota(store, modelSettings);
|
|
5418
|
+
const quota = await fetchAccountQuota(store, modelSettings, fetchFn);
|
|
5416
5419
|
return sendJson(response, 200, {
|
|
5417
5420
|
ok: true,
|
|
5418
5421
|
value: {
|
|
@@ -5485,21 +5488,15 @@ function apply(ctx) {
|
|
|
5485
5488
|
const antigravityStore = new FileCredentialStore();
|
|
5486
5489
|
const antigravityModelSettings = new FileModelSettingsStore();
|
|
5487
5490
|
const antigravityPreferences = registerAntigravityPreferenceStore(ctx.settings, antigravityModelSettings);
|
|
5488
|
-
const antigravityAdapter = new AntigravityAdapter(antigravityStore, antigravityModelSettings, antigravityPreferences);
|
|
5489
|
-
ctx.effect(() => {
|
|
5490
|
-
const disposeAntigravityAdapter = ctx.llm.registerAdapter([PROVIDER_ID], antigravityAdapter);
|
|
5491
|
-
const disposeAntigravityRoutes = registerAntigravityRoutes(ctx, antigravityStore, antigravityModelSettings, antigravityPreferences);
|
|
5492
|
-
return () => {
|
|
5493
|
-
disposeAntigravityRoutes();
|
|
5494
|
-
disposeAntigravityAdapter();
|
|
5495
|
-
};
|
|
5496
|
-
}, "dsh-antigravity: adapter, routes, and lifecycle");
|
|
5497
5491
|
ctx.effect(() => {
|
|
5498
5492
|
const proxyManager = new ProxyManager({
|
|
5499
5493
|
getPreferences: () => preferences.status(),
|
|
5500
5494
|
logger: ctx.logger
|
|
5501
5495
|
});
|
|
5502
5496
|
const proxyFetch = proxyManager.createFetch();
|
|
5497
|
+
const antigravityAdapter = new AntigravityAdapter(antigravityStore, antigravityModelSettings, antigravityPreferences, { fetchFn: proxyFetch });
|
|
5498
|
+
const disposeAntigravityAdapter = ctx.llm.registerAdapter([PROVIDER_ID], antigravityAdapter);
|
|
5499
|
+
const disposeAntigravityRoutes = registerAntigravityRoutes(ctx, antigravityStore, antigravityModelSettings, antigravityPreferences, proxyFetch);
|
|
5503
5500
|
const oauth = new OAuthService(store, {
|
|
5504
5501
|
fetchFn: proxyFetch,
|
|
5505
5502
|
logger: ctx.logger
|
|
@@ -5543,6 +5540,8 @@ function apply(ctx) {
|
|
|
5543
5540
|
disposeImageTool();
|
|
5544
5541
|
disposeAdapter();
|
|
5545
5542
|
disposeRoutes();
|
|
5543
|
+
disposeAntigravityRoutes();
|
|
5544
|
+
disposeAntigravityAdapter();
|
|
5546
5545
|
oauth.dispose();
|
|
5547
5546
|
proxyManager.dispose();
|
|
5548
5547
|
};
|
|
@@ -40,7 +40,7 @@ export declare const zh: {
|
|
|
40
40
|
readonly modelsHint: "勾选后模型才会显示在对话页的模型选择列表中;至少保留一个。";
|
|
41
41
|
readonly proxySettings: "网络代理";
|
|
42
42
|
readonly proxyMode: "代理模式";
|
|
43
|
-
readonly proxyModeHint: "
|
|
43
|
+
readonly proxyModeHint: "GPT 与 Antigravity(Gemini)共用此代理设置;支持自动读取系统代理,修改后对后续请求生效。";
|
|
44
44
|
readonly proxyModeAuto: "系统代理(自动检测)";
|
|
45
45
|
readonly proxyModeCustom: "自定义代理";
|
|
46
46
|
readonly proxyModeDirect: "直连(禁用代理)";
|
|
@@ -174,7 +174,7 @@ export declare const dictionaries: {
|
|
|
174
174
|
readonly modelsHint: "勾选后模型才会显示在对话页的模型选择列表中;至少保留一个。";
|
|
175
175
|
readonly proxySettings: "网络代理";
|
|
176
176
|
readonly proxyMode: "代理模式";
|
|
177
|
-
readonly proxyModeHint: "
|
|
177
|
+
readonly proxyModeHint: "GPT 与 Antigravity(Gemini)共用此代理设置;支持自动读取系统代理,修改后对后续请求生效。";
|
|
178
178
|
readonly proxyModeAuto: "系统代理(自动检测)";
|
|
179
179
|
readonly proxyModeCustom: "自定义代理";
|
|
180
180
|
readonly proxyModeDirect: "直连(禁用代理)";
|
|
@@ -264,6 +264,6 @@ export declare const dictionaries: {
|
|
|
264
264
|
readonly retry: "重试";
|
|
265
265
|
readonly unknown: "未知";
|
|
266
266
|
};
|
|
267
|
-
en: Record<"
|
|
267
|
+
en: Record<"tokens" | "title" | "intro" | "account" | "signedOut" | "signedIn" | "plan" | "accountId" | "expires" | "storage" | "storageWindows" | "storageMacKeychain" | "storageLinuxFile" | "storageMemory" | "storageUnavailable" | "securityWindows" | "securityMacKeychain" | "securityLinuxFile" | "securityMemory" | "securityUnavailable" | "signIn" | "signInAgain" | "cancel" | "signOut" | "refreshToken" | "pending" | "popupBlocked" | "continueLogin" | "loading" | "connection" | "provider" | "connectionState" | "connected" | "untested" | "testConnection" | "testing" | "latency" | "models" | "modelsHint" | "proxySettings" | "proxyMode" | "proxyModeHint" | "proxyModeAuto" | "proxyModeCustom" | "proxyModeDirect" | "customProxyUrl" | "customProxyUrlHint" | "customProxyUrlPlaceholder" | "saveProxyUrl" | "proxyDetected" | "proxyDetectedEffective" | "proxyNoneDetected" | "proxyDirectHint" | "enhancements" | "fastMode" | "fastModeHint" | "outputVerbosity" | "outputVerbosityHint" | "verbosityLow" | "verbosityMedium" | "verbosityHigh" | "reasoningSummary" | "reasoningSummaryHint" | "summaryAuto" | "summaryConcise" | "summaryDetailed" | "summaryNone" | "searchProvider" | "searchProviderHint" | "searchProviderDsh" | "searchProviderCodex" | "providerDefault" | "subagentEnhancements" | "subagentContextWindow" | "subagentContextWindowHint" | "subagentMaxDepth" | "subagentMaxDepthHint" | "subagentDisabled" | "levels" | "contextWindows" | "contextWindowsHint" | "contextWindow" | "contextWindowInvalid" | "saveContextWindow" | "save" | "quickQuota" | "quickQuotaHint" | "quota" | "quotaIntro" | "refreshQuota" | "refreshing" | "noQuota" | "quotaSignedOut" | "stale" | "updated" | "primary" | "secondary" | "limitWindow" | "used" | "remaining" | "available" | "unavailable" | "unlimited" | "credits" | "monthlySpend" | "resetCredits" | "resetCreditExpires" | "useResetCredit" | "usingResetCredit" | "useResetCreditConfirm" | "resetCreditUsed" | "spendControlReached" | "limit" | "exhausted" | "resets" | "quickQuotaLabel" | "quickQuotaLoading" | "imageToolRunning" | "imageToolDone" | "imageToolFailed" | "image" | "openImage" | "openNamedImage" | "imageLoading" | "imageLoadFailed" | "imagePreviewClose" | "imagePreviewOpenOriginal" | "retry" | "unknown", string>;
|
|
268
268
|
};
|
|
269
269
|
//# sourceMappingURL=locales.d.ts.map
|
|
@@ -4,7 +4,10 @@ export declare class AntigravityAdapter extends LlmAdapter {
|
|
|
4
4
|
private readonly store;
|
|
5
5
|
private readonly modelSettings;
|
|
6
6
|
private readonly preferences?;
|
|
7
|
-
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore, preferences?: AntigravityPreferenceStore | undefined, options?: {
|
|
9
|
+
fetchFn?: typeof fetch;
|
|
10
|
+
});
|
|
8
11
|
providerInfo(provider: string): LlmProviderInfo;
|
|
9
12
|
listModels(provider?: string): Promise<readonly LlmModelInfo[]>;
|
|
10
13
|
resolveModel(provider: string, modelId: string, signal?: AbortSignal): Promise<LlmResolvedModelInfo>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGV,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAU7B,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAM/G,qBAAa,kBAAmB,SAAQ,UAAU;IAE9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGV,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAU7B,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAM/G,qBAAa,kBAAmB,SAAQ,UAAU;IAE9C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,KAAK,sBAA4B,EACjC,aAAa,yBAA+B,EAC5C,WAAW,CAAC,EAAE,0BAA0B,YAAA,EACxC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;KAAO;IAK3D,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAIzC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAkB/D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAqCpG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO/F,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC;YAwBpD,aAAa;CAsG7B"}
|
|
@@ -4,9 +4,9 @@ export declare function defaultUserAgent(): string;
|
|
|
4
4
|
export declare function antigravityHeaders(token: string): Record<string, string>;
|
|
5
5
|
export declare function jsonHeaders(token: string): Record<string, string>;
|
|
6
6
|
export declare function endpointCandidates(): string[];
|
|
7
|
-
export declare function listCloudAICompanionProjects(token: string): Promise<string | undefined>;
|
|
8
|
-
export declare function loadCodeAssist(token: string): Promise<string | undefined>;
|
|
9
|
-
export declare function postJson(path: string, token: string, body: Record<string, unknown
|
|
7
|
+
export declare function listCloudAICompanionProjects(token: string, fetchFn?: typeof fetch): Promise<string | undefined>;
|
|
8
|
+
export declare function loadCodeAssist(token: string, fetchFn?: typeof fetch): Promise<string | undefined>;
|
|
9
|
+
export declare function postJson(path: string, token: string, body: Record<string, unknown>, fetchFn?: typeof fetch): Promise<{
|
|
10
10
|
endpoint: string;
|
|
11
11
|
status: number;
|
|
12
12
|
data: unknown;
|
|
@@ -16,6 +16,6 @@ export declare function parseQuotaSummary(data: unknown): {
|
|
|
16
16
|
description?: string;
|
|
17
17
|
};
|
|
18
18
|
export declare function parseCatalogModels(data: unknown): AntigravityCatalogModel[];
|
|
19
|
-
export declare function fetchAccountQuota(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore): Promise<AntigravityAccountQuota>;
|
|
19
|
+
export declare function fetchAccountQuota(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore, fetchFn?: typeof fetch): Promise<AntigravityAccountQuota>;
|
|
20
20
|
export declare function getCachedQuota(): AntigravityAccountQuota | undefined;
|
|
21
21
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/client.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,uCAAuC,CAAA;AAO9C,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKjE;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAI7C;AA+BD,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/client.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,uCAAuC,CAAA;AAO9C,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAKjE;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAI7C;AA+BD,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB5H;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsC9G;AAED,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAoB9D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG;IAChD,MAAM,EAAE,qBAAqB,EAAE,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAyCA;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,uBAAuB,EAAE,CAmB3E;AAED,wBAAsB,iBAAiB,CACrC,KAAK,sBAA4B,EACjC,aAAa,CAAC,EAAE,sBAAsB,EACtC,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAoDlC;AAED,wBAAgB,cAAc,IAAI,uBAAuB,GAAG,SAAS,CAEpE"}
|
|
@@ -18,7 +18,7 @@ export declare function generatePKCE(): {
|
|
|
18
18
|
challenge: string;
|
|
19
19
|
};
|
|
20
20
|
export declare function openBrowser(url: string): void;
|
|
21
|
-
export declare function getUserEmail(token: string): Promise<string | undefined>;
|
|
21
|
+
export declare function getUserEmail(token: string, fetchFn?: typeof fetch): Promise<string | undefined>;
|
|
22
22
|
export declare function startCallbackServer(expectedState: string): Promise<{
|
|
23
23
|
server: Server;
|
|
24
24
|
waitForCode: () => Promise<{
|
|
@@ -26,13 +26,13 @@ export declare function startCallbackServer(expectedState: string): Promise<{
|
|
|
26
26
|
state: string;
|
|
27
27
|
}>;
|
|
28
28
|
}>;
|
|
29
|
-
export declare function exchangeOAuthCode(code: string, verifier: string, callbackUrl: string): Promise<AntigravityCredentials>;
|
|
30
|
-
export declare function beginWebLogin(store: FileCredentialStore): Promise<WebLoginFlowState>;
|
|
29
|
+
export declare function exchangeOAuthCode(code: string, verifier: string, callbackUrl: string, fetchFn?: typeof fetch): Promise<AntigravityCredentials>;
|
|
30
|
+
export declare function beginWebLogin(store: FileCredentialStore, fetchFn?: typeof fetch): Promise<WebLoginFlowState>;
|
|
31
31
|
export declare function getWebLoginStatus(): WebLoginFlowState;
|
|
32
|
-
export declare function refreshAntigravityToken(credentials: AntigravityCredentials): Promise<AntigravityCredentials>;
|
|
33
|
-
export declare function ensureApiKey(store: FileCredentialStore): Promise<{
|
|
32
|
+
export declare function refreshAntigravityToken(credentials: AntigravityCredentials, fetchFn?: typeof fetch): Promise<AntigravityCredentials>;
|
|
33
|
+
export declare function ensureApiKey(store: FileCredentialStore, fetchFn?: typeof fetch): Promise<{
|
|
34
34
|
token: string;
|
|
35
35
|
projectId?: string;
|
|
36
36
|
}>;
|
|
37
|
-
export declare function loginAndSave(store: FileCredentialStore, signal?: AbortSignal, onUrl?: (url: string) => void): Promise<AntigravityCredentials>;
|
|
37
|
+
export declare function loginAndSave(store: FileCredentialStore, signal?: AbortSignal, onUrl?: (url: string) => void, fetchFn?: typeof fetch): Promise<AntigravityCredentials>;
|
|
38
38
|
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAYrD,OAAO,EAAE,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAGnF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AASD,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,qBAAkC,GAAG,MAAM,CAIjF;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD,wBAAgB,YAAY,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAItE;AAeD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAY7C;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAYrD,OAAO,EAAE,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAGnF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;IACjD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AASD,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,qBAAkC,GAAG,MAAM,CAIjF;AAED,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAMD,wBAAgB,YAAY,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAItE;AAeD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAY7C;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW5G;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5D,CAAC,CAyED;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CA0CjC;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgDzH;AAED,wBAAgB,iBAAiB,IAAI,iBAAiB,CAErD;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,sBAAsB,EACnC,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAiCjC;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkBhD;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,CAAC,EAAE,WAAW,EACpB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC7B,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAgCjC"}
|
|
@@ -2,5 +2,5 @@ import type { Context } from '@deepseek-ai/cordis';
|
|
|
2
2
|
import { FileCredentialStore, FileModelSettingsStore, type AntigravityPreferenceStore } from './token-store.ts';
|
|
3
3
|
import type { AntigravityWebStatus } from '../../shared/antigravity-contracts.ts';
|
|
4
4
|
export declare function getAntigravityWebStatus(store: FileCredentialStore, modelSettings: FileModelSettingsStore, preferences?: AntigravityPreferenceStore): Promise<AntigravityWebStatus>;
|
|
5
|
-
export declare function registerAntigravityRoutes(ctx: Context, store: FileCredentialStore, modelSettings: FileModelSettingsStore, preferences?: AntigravityPreferenceStore): () => void;
|
|
5
|
+
export declare function registerAntigravityRoutes(ctx: Context, store: FileCredentialStore, modelSettings: FileModelSettingsStore, preferences?: AntigravityPreferenceStore, fetchFn?: typeof fetch): () => void;
|
|
6
6
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAI/G,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AA+BzG,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,KAAK,0BAA0B,EAAE,MAAM,kBAAkB,CAAA;AAI/G,OAAO,KAAK,EAA0B,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AA+BzG,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,GACvC,OAAO,CAAC,oBAAoB,CAAC,CA4B/B;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,0BAA0B,EACxC,OAAO,GAAE,OAAO,KAAa,GAC5B,MAAM,IAAI,CAgFZ"}
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AA+BlD,eAAO,MAAM,MAAM,UAA4E,CAAA;AAE/F,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AA+BlD,eAAO,MAAM,MAAM,UAA4E,CAAA;AAE/F,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA8ExC;AAED,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,GAClB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA"}
|