@eddyskywalker/dsh-chatgpt-subscription 0.2.9 → 0.2.11
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/CHANGELOG.md +28 -24
- package/LICENSE +21 -21
- package/README.md +169 -169
- package/bin/antigravity-login.mjs +15 -4
- package/cordis.patch.yml +6 -6
- package/lib/client.js +42 -8
- package/lib/client.js.map +1 -1
- package/lib/index.js +206 -91
- package/lib/types/client/antigravity/AntigravityComposerQuota.d.ts.map +1 -1
- package/lib/types/client/antigravity/AntigravitySection.d.ts.map +1 -1
- package/lib/types/client/locales.d.ts +1 -1
- 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 +23 -1
- package/lib/types/host/antigravity/client.d.ts.map +1 -1
- package/lib/types/host/antigravity/oauth.d.ts +9 -3
- package/lib/types/host/antigravity/oauth.d.ts.map +1 -1
- package/lib/types/host/antigravity/routes.d.ts.map +1 -1
- package/lib/types/host/antigravity/types.d.ts +6 -0
- package/lib/types/host/antigravity/types.d.ts.map +1 -1
- package/lib/types/host/model-catalog.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +134 -134
package/lib/index.js
CHANGED
|
@@ -203,6 +203,7 @@ function resolveCodexModel(model, preferences) {
|
|
|
203
203
|
const status = preferences?.status();
|
|
204
204
|
const configuredContextWindow = isConfigurableContextModelId(model) ? status?.contextWindowOverrides[model] : void 0;
|
|
205
205
|
const efforts = reasoningEffortsForModel(model);
|
|
206
|
+
const defaultEffort = efforts.includes(entry.defaultReasoningEffort) ? entry.defaultReasoningEffort : efforts[0];
|
|
206
207
|
return {
|
|
207
208
|
provider: PROVIDER_ID$1,
|
|
208
209
|
id: model,
|
|
@@ -215,7 +216,7 @@ function resolveCodexModel(model, preferences) {
|
|
|
215
216
|
id: ReasoningEffortId(effort),
|
|
216
217
|
name: effort
|
|
217
218
|
})),
|
|
218
|
-
defaultEffort: ReasoningEffortId(
|
|
219
|
+
...defaultEffort ? { defaultEffort: ReasoningEffortId(defaultEffort) } : {}
|
|
219
220
|
}
|
|
220
221
|
};
|
|
221
222
|
}
|
|
@@ -3567,9 +3568,11 @@ const PROVIDER_ID = "antigravity";
|
|
|
3567
3568
|
const STREAM_IDLE_TIMEOUT_MS = 3e5;
|
|
3568
3569
|
const STREAM_IDLE_TIMEOUT_CODE = "LLM_STREAM_IDLE_TIMEOUT";
|
|
3569
3570
|
const DISCOVERY_TIMEOUT_MS = 8e3;
|
|
3570
|
-
const PROJECT_CACHE_TTL_MS = 1800 * 1e3;
|
|
3571
3571
|
const OAUTH_CALLBACK_TIMEOUT_MS = 300 * 1e3;
|
|
3572
3572
|
const ENDPOINT_FALLBACKS = ["https://daily-cloudcode-pa.googleapis.com", "https://cloudcode-pa.googleapis.com"];
|
|
3573
|
+
const FREE_TIER_ID = "free-tier";
|
|
3574
|
+
const ONBOARD_TIMEOUT_MS = 3e4;
|
|
3575
|
+
const ONBOARD_POLL_INTERVAL_MS = 1e3;
|
|
3573
3576
|
const REDIRECT_PATH = "/oauth-callback";
|
|
3574
3577
|
const AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
3575
3578
|
const TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
@@ -4201,13 +4204,13 @@ var FileModelSettingsStore = class {
|
|
|
4201
4204
|
return next;
|
|
4202
4205
|
}
|
|
4203
4206
|
};
|
|
4204
|
-
//#endregion
|
|
4205
|
-
//#region src/host/antigravity/client.ts
|
|
4206
|
-
const projectCache = /* @__PURE__ */ new Map();
|
|
4207
4207
|
let cachedQuota;
|
|
4208
|
+
let quotaFetchInFlight = null;
|
|
4208
4209
|
const PLATFORM = process.platform === "darwin" ? "MACOS" : process.platform === "win32" ? "WINDOWS" : "LINUX";
|
|
4209
4210
|
function defaultUserAgent() {
|
|
4210
|
-
|
|
4211
|
+
const version = process.env.DSH_ANTIGRAVITY_VERSION || "2.8.0";
|
|
4212
|
+
const cl = process.env.DSH_ANTIGRAVITY_CL || "963137146";
|
|
4213
|
+
return `antigravity/hub/${version} (aidev_client; os_type=${process.env.DSH_ANTIGRAVITY_OS || "darwin"}; arch=${process.env.DSH_ANTIGRAVITY_ARCH || "arm64"}; cl=${cl})`;
|
|
4211
4214
|
}
|
|
4212
4215
|
function antigravityHeaders(token) {
|
|
4213
4216
|
return {
|
|
@@ -4253,50 +4256,97 @@ function extractProjectId(data) {
|
|
|
4253
4256
|
}
|
|
4254
4257
|
}
|
|
4255
4258
|
}
|
|
4256
|
-
async function
|
|
4259
|
+
async function loadCodeAssistDetail(token, fetchFn = fetch, signal) {
|
|
4260
|
+
const metadata = {
|
|
4261
|
+
ideType: "ANTIGRAVITY",
|
|
4262
|
+
platform: "PLATFORM_UNSPECIFIED",
|
|
4263
|
+
pluginType: "GEMINI"
|
|
4264
|
+
};
|
|
4257
4265
|
for (const endpoint of endpointCandidates()) try {
|
|
4258
|
-
const response = await fetchFn(`${endpoint}/v1internal:
|
|
4266
|
+
const response = await fetchFn(`${endpoint}/v1internal:loadCodeAssist`, {
|
|
4259
4267
|
method: "POST",
|
|
4260
|
-
headers:
|
|
4261
|
-
body: JSON.stringify({}),
|
|
4262
|
-
signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
|
|
4268
|
+
headers: jsonHeaders(token),
|
|
4269
|
+
body: JSON.stringify({ metadata }),
|
|
4270
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)]) : AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
|
|
4263
4271
|
});
|
|
4264
4272
|
if (!response.ok) continue;
|
|
4265
|
-
|
|
4273
|
+
const data = await response.json();
|
|
4274
|
+
const projectId = extractProjectId(data);
|
|
4275
|
+
const allowedTiers = Array.isArray(data.allowedTiers) ? data.allowedTiers : [];
|
|
4276
|
+
const ineligibleTiers = Array.isArray(data.ineligibleTiers) ? data.ineligibleTiers : [];
|
|
4277
|
+
return {
|
|
4278
|
+
currentTier: data.currentTier || null,
|
|
4279
|
+
paidTier: data.paidTier || null,
|
|
4280
|
+
allowedTiers,
|
|
4281
|
+
ineligibleTiers,
|
|
4282
|
+
projectId,
|
|
4283
|
+
raw: data
|
|
4284
|
+
};
|
|
4266
4285
|
} catch {}
|
|
4267
4286
|
}
|
|
4268
|
-
async function
|
|
4269
|
-
const
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
ideType: "ANTIGRAVITY"
|
|
4273
|
-
|
|
4274
|
-
pluginType: "GEMINI"
|
|
4275
|
-
} });
|
|
4287
|
+
async function onboardUser(token, fetchFn = fetch, signal) {
|
|
4288
|
+
const deadline = Date.now() + ONBOARD_TIMEOUT_MS;
|
|
4289
|
+
const body = JSON.stringify({
|
|
4290
|
+
tierId: FREE_TIER_ID,
|
|
4291
|
+
metadata: { ideType: "ANTIGRAVITY" }
|
|
4292
|
+
});
|
|
4276
4293
|
for (const endpoint of endpointCandidates()) try {
|
|
4277
|
-
const
|
|
4294
|
+
const remainingTime = Math.max(1e3, deadline - Date.now());
|
|
4295
|
+
const timeoutSignal = AbortSignal.timeout(remainingTime);
|
|
4296
|
+
const callSignal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
|
|
4297
|
+
const response = await fetchFn(`${endpoint}/v1internal:onboardUser`, {
|
|
4278
4298
|
method: "POST",
|
|
4279
|
-
headers:
|
|
4299
|
+
headers: jsonHeaders(token),
|
|
4280
4300
|
body,
|
|
4281
|
-
signal:
|
|
4301
|
+
signal: callSignal
|
|
4282
4302
|
});
|
|
4283
|
-
if (!response.ok)
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
projectCache.set(token, {
|
|
4287
|
-
projectId: project,
|
|
4288
|
-
expiresAt: Date.now() + PROJECT_CACHE_TTL_MS
|
|
4289
|
-
});
|
|
4290
|
-
return project;
|
|
4303
|
+
if (!response.ok) {
|
|
4304
|
+
const errorText = await response.text().catch(() => "");
|
|
4305
|
+
throw new Error(`onboardUser failed: ${response.status} ${response.statusText}: ${errorText}`);
|
|
4291
4306
|
}
|
|
4292
|
-
|
|
4293
|
-
|
|
4294
|
-
|
|
4295
|
-
|
|
4296
|
-
|
|
4307
|
+
let operation = await response.json();
|
|
4308
|
+
while (true) {
|
|
4309
|
+
if (operation.done === true) {
|
|
4310
|
+
if (operation.error) {
|
|
4311
|
+
const msg = operation.error.message || `Error code ${operation.error.code}`;
|
|
4312
|
+
throw new Error(`OnboardUser operation failed: ${msg}`);
|
|
4313
|
+
}
|
|
4314
|
+
return;
|
|
4315
|
+
}
|
|
4316
|
+
const waitMs = Math.min(ONBOARD_POLL_INTERVAL_MS, Math.max(100, deadline - Date.now()));
|
|
4317
|
+
if (Date.now() >= deadline) throw new Error(`onboardUser timed out after ${ONBOARD_TIMEOUT_MS}ms`);
|
|
4318
|
+
await new Promise((r) => setTimeout(r, waitMs));
|
|
4319
|
+
if (signal?.aborted) throw new Error("OAuth login cancelled");
|
|
4320
|
+
const operationName = operation.name || "";
|
|
4321
|
+
if (!operationName) throw new Error("onboardUser returned an operation without a name");
|
|
4322
|
+
const pollTime = Math.max(1e3, deadline - Date.now());
|
|
4323
|
+
const pollTimeoutSignal = AbortSignal.timeout(pollTime);
|
|
4324
|
+
const pollSignal = signal ? AbortSignal.any([signal, pollTimeoutSignal]) : pollTimeoutSignal;
|
|
4325
|
+
const pollResp = await fetchFn(`${endpoint}/v1internal/${operationName}`, {
|
|
4326
|
+
method: "GET",
|
|
4327
|
+
headers: jsonHeaders(token),
|
|
4328
|
+
signal: pollSignal
|
|
4297
4329
|
});
|
|
4298
|
-
|
|
4330
|
+
if (!pollResp.ok) {
|
|
4331
|
+
const pollErr = await pollResp.text().catch(() => "");
|
|
4332
|
+
throw new Error(`onboardUser operation poll failed: ${pollResp.status}: ${pollErr}`);
|
|
4333
|
+
}
|
|
4334
|
+
operation = await pollResp.json();
|
|
4299
4335
|
}
|
|
4336
|
+
} catch (err) {
|
|
4337
|
+
if (Date.now() >= deadline || signal?.aborted) throw err;
|
|
4338
|
+
}
|
|
4339
|
+
}
|
|
4340
|
+
async function listCloudAICompanionProjects(token, fetchFn = fetch) {
|
|
4341
|
+
for (const endpoint of endpointCandidates()) try {
|
|
4342
|
+
const response = await fetchFn(`${endpoint}/v1internal:listCloudAICompanionProjects`, {
|
|
4343
|
+
method: "POST",
|
|
4344
|
+
headers: antigravityHeaders(token),
|
|
4345
|
+
body: JSON.stringify({}),
|
|
4346
|
+
signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS)
|
|
4347
|
+
});
|
|
4348
|
+
if (!response.ok) continue;
|
|
4349
|
+
return extractProjectId(await response.json());
|
|
4300
4350
|
} catch {}
|
|
4301
4351
|
}
|
|
4302
4352
|
async function postJson(path, token, body, fetchFn = fetch) {
|
|
@@ -4364,50 +4414,63 @@ function parseCatalogModels(data) {
|
|
|
4364
4414
|
}
|
|
4365
4415
|
return list;
|
|
4366
4416
|
}
|
|
4367
|
-
async function fetchAccountQuota(store = new FileCredentialStore(), modelSettings, fetchFn = fetch) {
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
|
|
4384
|
-
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
4393
|
-
|
|
4394
|
-
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4417
|
+
async function fetchAccountQuota(store = new FileCredentialStore(), modelSettings, fetchFn = fetch, force = false) {
|
|
4418
|
+
if (!force && cachedQuota && Date.now() - (cachedQuota.fetchedAt || 0) < 12e4) return cachedQuota;
|
|
4419
|
+
if (quotaFetchInFlight) return quotaFetchInFlight;
|
|
4420
|
+
quotaFetchInFlight = (async () => {
|
|
4421
|
+
try {
|
|
4422
|
+
const { token, projectId: credentialProjectId } = await ensureApiKey(store, fetchFn);
|
|
4423
|
+
const [assistResult, summaryResult] = await Promise.all([postJson("/v1internal:loadCodeAssist", token, { metadata: {
|
|
4424
|
+
ideType: "ANTIGRAVITY",
|
|
4425
|
+
platform: "PLATFORM_UNSPECIFIED",
|
|
4426
|
+
pluginType: "GEMINI"
|
|
4427
|
+
} }, fetchFn).catch(() => null), postJson("/v1internal:retrieveUserQuotaSummary", token, {}, fetchFn).catch(() => null)]);
|
|
4428
|
+
const discoveredProject = assistResult ? extractProjectId(assistResult.data) : void 0;
|
|
4429
|
+
const projectId = credentialProjectId || discoveredProject || "antigravity-default";
|
|
4430
|
+
const modelsData = (await postJson("/v1internal:fetchAvailableModels", token, { project: projectId }, fetchFn).catch(() => null))?.data;
|
|
4431
|
+
const { groups, description } = summaryResult ? parseQuotaSummary(summaryResult.data) : { groups: [] };
|
|
4432
|
+
const catalogModels = modelsData ? parseCatalogModels(modelsData) : [];
|
|
4433
|
+
const assistData = assistResult?.data || {};
|
|
4434
|
+
const currentTier = assistData.currentTier;
|
|
4435
|
+
const paidTier = assistData.paidTier;
|
|
4436
|
+
const planLabel = paidTier?.name || currentTier?.name || void 0;
|
|
4437
|
+
cachedQuota = {
|
|
4438
|
+
projectId,
|
|
4439
|
+
endpoint: summaryResult?.endpoint || ENDPOINT_FALLBACKS[0],
|
|
4440
|
+
planLabel,
|
|
4441
|
+
productTier: currentTier,
|
|
4442
|
+
paidTier,
|
|
4443
|
+
groups,
|
|
4444
|
+
groupDescription: description,
|
|
4445
|
+
models: catalogModels.map((m) => ({
|
|
4446
|
+
modelId: m.id,
|
|
4447
|
+
displayName: m.name,
|
|
4448
|
+
description: m.description
|
|
4449
|
+
})),
|
|
4450
|
+
catalogModels,
|
|
4451
|
+
fetchedAt: Date.now()
|
|
4452
|
+
};
|
|
4453
|
+
if (modelSettings && catalogModels.length > 0) {
|
|
4454
|
+
const current = await modelSettings.read();
|
|
4455
|
+
const isFirstTime = current.catalogModels.length === 0 && current.enabledModelIds.length === 0;
|
|
4456
|
+
const catalogIds = new Set(catalogModels.map((m) => m.id));
|
|
4457
|
+
const mergedEnabled = isFirstTime ? catalogModels.map((m) => m.id) : current.enabledModelIds.filter((id) => catalogIds.has(id));
|
|
4458
|
+
await modelSettings.setCatalogModels(catalogModels, { enabledModelIds: mergedEnabled });
|
|
4459
|
+
}
|
|
4460
|
+
return cachedQuota;
|
|
4461
|
+
} finally {
|
|
4462
|
+
quotaFetchInFlight = null;
|
|
4463
|
+
}
|
|
4464
|
+
})();
|
|
4465
|
+
return quotaFetchInFlight;
|
|
4407
4466
|
}
|
|
4408
4467
|
function getCachedQuota() {
|
|
4409
4468
|
return cachedQuota;
|
|
4410
4469
|
}
|
|
4470
|
+
function clearCachedQuota() {
|
|
4471
|
+
cachedQuota = void 0;
|
|
4472
|
+
quotaFetchInFlight = null;
|
|
4473
|
+
}
|
|
4411
4474
|
//#endregion
|
|
4412
4475
|
//#region src/host/antigravity/oauth.ts
|
|
4413
4476
|
let webLoginFlow = { status: "idle" };
|
|
@@ -4552,7 +4615,36 @@ function startCallbackServer(expectedState) {
|
|
|
4552
4615
|
});
|
|
4553
4616
|
});
|
|
4554
4617
|
}
|
|
4555
|
-
|
|
4618
|
+
function extractGoogleValidationUrl(text) {
|
|
4619
|
+
const match = /https:\/\/[^\s"'><]+/i.exec(text);
|
|
4620
|
+
return match ? match[0] : void 0;
|
|
4621
|
+
}
|
|
4622
|
+
function assertFreeTierEligible(payload) {
|
|
4623
|
+
if (payload.allowedTiers?.some((tier) => tier.id === "free-tier") === true) return;
|
|
4624
|
+
const ineligibility = payload.ineligibleTiers?.find((c) => c.tierId === FREE_TIER_ID);
|
|
4625
|
+
if (!ineligibility?.reasonMessage) return;
|
|
4626
|
+
const validation = ineligibility.validationUrl ? `\nValidation URL: ${ineligibility.validationUrl}` : "";
|
|
4627
|
+
const err = /* @__PURE__ */ new Error(`${ineligibility.reasonMessage}${validation}`);
|
|
4628
|
+
if (ineligibility.validationUrl) err.validationUrl = ineligibility.validationUrl;
|
|
4629
|
+
throw err;
|
|
4630
|
+
}
|
|
4631
|
+
async function discoverAntigravityProject(token, fetchFn = fetch, signal, onProgress) {
|
|
4632
|
+
onProgress?.("正在检查 Cloud Code Assist 账号状态...");
|
|
4633
|
+
const initial = await loadCodeAssistDetail(token, fetchFn, signal);
|
|
4634
|
+
if (!initial) throw new Error("无法连接到 Cloud Code Assist 服务,请检查网络连接");
|
|
4635
|
+
assertFreeTierEligible(initial);
|
|
4636
|
+
if (initial.allowedTiers?.some((tier) => tier.id === "free-tier") === true && !initial.currentTier) {
|
|
4637
|
+
onProgress?.("正在为新账号开通 Antigravity 免费额度...");
|
|
4638
|
+
await onboardUser(token, fetchFn, signal);
|
|
4639
|
+
onProgress?.("正在获取专属项目 (Project ID)...");
|
|
4640
|
+
const refreshed = await loadCodeAssistDetail(token, fetchFn, signal);
|
|
4641
|
+
if (refreshed?.projectId) return refreshed.projectId;
|
|
4642
|
+
} else if (initial.projectId) return initial.projectId;
|
|
4643
|
+
const fallback = await listCloudAICompanionProjects(token, fetchFn);
|
|
4644
|
+
if (fallback) return fallback;
|
|
4645
|
+
return initial.projectId;
|
|
4646
|
+
}
|
|
4647
|
+
async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch, signal, onProgress) {
|
|
4556
4648
|
const tokenResponse = await fetchFn(TOKEN_URL, {
|
|
4557
4649
|
method: "POST",
|
|
4558
4650
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
@@ -4563,7 +4655,8 @@ async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch) {
|
|
|
4563
4655
|
grant_type: "authorization_code",
|
|
4564
4656
|
redirect_uri: callbackUrl,
|
|
4565
4657
|
code_verifier: verifier
|
|
4566
|
-
}).toString()
|
|
4658
|
+
}).toString(),
|
|
4659
|
+
signal
|
|
4567
4660
|
});
|
|
4568
4661
|
if (!tokenResponse.ok) throw new Error(`Token exchange failed: ${sanitizeOAuthProviderError(await tokenResponse.text())}`);
|
|
4569
4662
|
const tokenData = await tokenResponse.json();
|
|
@@ -4571,7 +4664,7 @@ async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch) {
|
|
|
4571
4664
|
const accessToken = typeof tokenData.access_token === "string" ? tokenData.access_token : "";
|
|
4572
4665
|
const expiresIn = typeof tokenData.expires_in === "number" ? tokenData.expires_in : 3600;
|
|
4573
4666
|
if (!refreshToken) throw new Error("No refresh token received. Re-run login and allow offline access.");
|
|
4574
|
-
const [email, discoveredProject] = await Promise.all([getUserEmail(accessToken, fetchFn),
|
|
4667
|
+
const [email, discoveredProject] = await Promise.all([getUserEmail(accessToken, fetchFn), discoverAntigravityProject(accessToken, fetchFn, signal, onProgress)]);
|
|
4575
4668
|
return {
|
|
4576
4669
|
refresh: refreshToken,
|
|
4577
4670
|
refresh_token: refreshToken,
|
|
@@ -4583,7 +4676,7 @@ async function exchangeOAuthCode(code, verifier, callbackUrl, fetchFn = fetch) {
|
|
|
4583
4676
|
email
|
|
4584
4677
|
};
|
|
4585
4678
|
}
|
|
4586
|
-
async function beginWebLogin(store, fetchFn = fetch) {
|
|
4679
|
+
async function beginWebLogin(store, fetchFn = fetch, signal) {
|
|
4587
4680
|
if (webLoginFlow.status === "pending") return { ...webLoginFlow };
|
|
4588
4681
|
const { verifier, challenge } = generatePKCE();
|
|
4589
4682
|
const state = base64Url(randomBytes(32));
|
|
@@ -4603,20 +4696,28 @@ async function beginWebLogin(store, fetchFn = fetch) {
|
|
|
4603
4696
|
prompt: "consent"
|
|
4604
4697
|
}).toString()}`,
|
|
4605
4698
|
startedAt: Date.now(),
|
|
4606
|
-
|
|
4699
|
+
progress: "等待浏览器授权...",
|
|
4700
|
+
error: void 0,
|
|
4701
|
+
validationUrl: void 0
|
|
4607
4702
|
};
|
|
4608
4703
|
(async () => {
|
|
4609
4704
|
try {
|
|
4610
4705
|
const { code, state: returnedState } = await waitForCode();
|
|
4611
4706
|
if (returnedState !== state) throw new Error("OAuth state mismatch");
|
|
4612
|
-
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn)
|
|
4707
|
+
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn, signal, (stage) => {
|
|
4708
|
+
webLoginFlow.progress = stage;
|
|
4709
|
+
});
|
|
4613
4710
|
await store.write(credentials);
|
|
4614
4711
|
webLoginFlow.status = "complete";
|
|
4615
4712
|
webLoginFlow.email = credentials.email;
|
|
4616
4713
|
webLoginFlow.completedAt = Date.now();
|
|
4714
|
+
webLoginFlow.progress = "授权成功";
|
|
4617
4715
|
} catch (error) {
|
|
4618
4716
|
webLoginFlow.status = "error";
|
|
4619
|
-
|
|
4717
|
+
const errText = error instanceof Error ? error.message : String(error);
|
|
4718
|
+
webLoginFlow.error = errText;
|
|
4719
|
+
const validationUrl = error?.validationUrl || extractGoogleValidationUrl(errText);
|
|
4720
|
+
if (validationUrl) webLoginFlow.validationUrl = validationUrl;
|
|
4620
4721
|
webLoginFlow.completedAt = Date.now();
|
|
4621
4722
|
} finally {
|
|
4622
4723
|
server.close();
|
|
@@ -4652,7 +4753,8 @@ async function refreshAntigravityToken(credentials, fetchFn = fetch) {
|
|
|
4652
4753
|
access: accessToken,
|
|
4653
4754
|
access_token: accessToken,
|
|
4654
4755
|
expires: Date.now() + expiresIn * 1e3 - 300 * 1e3,
|
|
4655
|
-
expires_at: Date.now() + expiresIn * 1e3 - 300 * 1e3
|
|
4756
|
+
expires_at: Date.now() + expiresIn * 1e3 - 300 * 1e3,
|
|
4757
|
+
projectId: credentials.projectId
|
|
4656
4758
|
};
|
|
4657
4759
|
}
|
|
4658
4760
|
async function ensureApiKey(store, fetchFn = fetch) {
|
|
@@ -4668,7 +4770,7 @@ async function ensureApiKey(store, fetchFn = fetch) {
|
|
|
4668
4770
|
projectId: credentials.projectId
|
|
4669
4771
|
};
|
|
4670
4772
|
}
|
|
4671
|
-
async function loginAndSave(store, signal, onUrl, fetchFn = fetch) {
|
|
4773
|
+
async function loginAndSave(store, signal, onUrl, fetchFn = fetch, onProgress) {
|
|
4672
4774
|
const { verifier, challenge } = generatePKCE();
|
|
4673
4775
|
const state = base64Url(randomBytes(32));
|
|
4674
4776
|
const { server, waitForCode } = await startCallbackServer(state);
|
|
@@ -4690,7 +4792,7 @@ async function loginAndSave(store, signal, onUrl, fetchFn = fetch) {
|
|
|
4690
4792
|
if (signal?.aborted) throw new Error("OAuth login aborted");
|
|
4691
4793
|
const { code, state: returnedState } = await waitForCode();
|
|
4692
4794
|
if (returnedState !== state) throw new Error("OAuth state mismatch");
|
|
4693
|
-
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn);
|
|
4795
|
+
const credentials = await exchangeOAuthCode(code, verifier, callbackUrl, fetchFn, signal, onProgress);
|
|
4694
4796
|
await store.write(credentials);
|
|
4695
4797
|
return credentials;
|
|
4696
4798
|
} finally {
|
|
@@ -5248,6 +5350,12 @@ function closeStream(state) {
|
|
|
5248
5350
|
}
|
|
5249
5351
|
//#endregion
|
|
5250
5352
|
//#region src/host/antigravity/adapter.ts
|
|
5353
|
+
function resolveDefaultReasoningEffort(efforts, configuredEffort) {
|
|
5354
|
+
if (configuredEffort && efforts.includes(configuredEffort)) return ReasoningEffortId(configuredEffort);
|
|
5355
|
+
if (efforts.includes("medium")) return ReasoningEffortId("medium");
|
|
5356
|
+
if (efforts.includes("low")) return ReasoningEffortId("low");
|
|
5357
|
+
if (efforts.length > 0) return ReasoningEffortId(efforts[0]);
|
|
5358
|
+
}
|
|
5251
5359
|
var AntigravityAdapter = class extends LlmAdapter {
|
|
5252
5360
|
store;
|
|
5253
5361
|
modelSettings;
|
|
@@ -5266,6 +5374,8 @@ var AntigravityAdapter = class extends LlmAdapter {
|
|
|
5266
5374
|
name: PROVIDER_NAME
|
|
5267
5375
|
};
|
|
5268
5376
|
}
|
|
5377
|
+
providerRetryPolicy() {}
|
|
5378
|
+
imageRequestPricing(_provider, _model) {}
|
|
5269
5379
|
async listModels(provider) {
|
|
5270
5380
|
const prov = provider || "antigravity";
|
|
5271
5381
|
const settings = this.preferences ? this.preferences.status() : await this.modelSettings.read();
|
|
@@ -5298,7 +5408,7 @@ var AntigravityAdapter = class extends LlmAdapter {
|
|
|
5298
5408
|
"medium",
|
|
5299
5409
|
"high"
|
|
5300
5410
|
];
|
|
5301
|
-
const
|
|
5411
|
+
const defaultEffortId = resolveDefaultReasoningEffort(efforts, settings.defaultReasoningEffort);
|
|
5302
5412
|
return {
|
|
5303
5413
|
provider,
|
|
5304
5414
|
id: model.id,
|
|
@@ -5311,7 +5421,7 @@ var AntigravityAdapter = class extends LlmAdapter {
|
|
|
5311
5421
|
id: ReasoningEffortId(effort),
|
|
5312
5422
|
name: effort
|
|
5313
5423
|
})),
|
|
5314
|
-
defaultEffort:
|
|
5424
|
+
...defaultEffortId ? { defaultEffort: defaultEffortId } : {}
|
|
5315
5425
|
} } : {}
|
|
5316
5426
|
};
|
|
5317
5427
|
}
|
|
@@ -5473,6 +5583,10 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences, fetch
|
|
|
5473
5583
|
try {
|
|
5474
5584
|
if (path === "status" || path === "") {
|
|
5475
5585
|
if (request.method !== "GET") return sendMethodNotAllowed(response);
|
|
5586
|
+
const credentials = await store.read();
|
|
5587
|
+
const authenticated = !!(credentials?.access || credentials?.access_token);
|
|
5588
|
+
const cached = getCachedQuota();
|
|
5589
|
+
if (authenticated && (!cached || Date.now() - (cached.fetchedAt || 0) > 12e4)) await fetchAccountQuota(store, modelSettings, fetchFn).catch(() => void 0);
|
|
5476
5590
|
return sendJson(response, 200, {
|
|
5477
5591
|
ok: true,
|
|
5478
5592
|
value: await getAntigravityWebStatus(store, modelSettings, preferences)
|
|
@@ -5494,7 +5608,7 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences, fetch
|
|
|
5494
5608
|
}
|
|
5495
5609
|
if (path === "quota") {
|
|
5496
5610
|
if (request.method !== "GET" && request.method !== "POST") return sendMethodNotAllowed(response);
|
|
5497
|
-
const quota = await fetchAccountQuota(store, modelSettings, fetchFn);
|
|
5611
|
+
const quota = await fetchAccountQuota(store, modelSettings, fetchFn, true);
|
|
5498
5612
|
return sendJson(response, 200, {
|
|
5499
5613
|
ok: true,
|
|
5500
5614
|
value: {
|
|
@@ -5532,6 +5646,7 @@ function registerAntigravityRoutes(ctx, store, modelSettings, preferences, fetch
|
|
|
5532
5646
|
if (path === "logout") {
|
|
5533
5647
|
if (request.method !== "POST") return sendMethodNotAllowed(response);
|
|
5534
5648
|
await store.delete();
|
|
5649
|
+
clearCachedQuota();
|
|
5535
5650
|
return sendJson(response, 200, {
|
|
5536
5651
|
ok: true,
|
|
5537
5652
|
value: await getAntigravityWebStatus(store, modelSettings)
|
|
@@ -5619,4 +5734,4 @@ function localWebServerBaseUrl(host, port) {
|
|
|
5619
5734
|
return `http://${host === "0.0.0.0" ? "127.0.0.1" : host}:${port}`;
|
|
5620
5735
|
}
|
|
5621
5736
|
//#endregion
|
|
5622
|
-
export { AntigravityAdapter, CodexChatGptAdapter, FileCredentialStore, FileModelSettingsStore, LinuxFileTokenStore, MacKeychainTokenStore, OAuthService, ProxyManager, ResponsesClient, UsageService, WindowsDpapiTokenStore, apply, beginWebLogin, createCodexFetchProvider, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, credentialPath, detectSystemProxy, fetchAccountQuota, getCachedQuota, inject, loginAndSave, mapCodexUsage, modelSettingsPath, parseCodexUsage, parseResponsesStream, refreshAntigravityToken };
|
|
5737
|
+
export { AntigravityAdapter, CodexChatGptAdapter, FileCredentialStore, FileModelSettingsStore, LinuxFileTokenStore, MacKeychainTokenStore, OAuthService, ProxyManager, ResponsesClient, UsageService, WindowsDpapiTokenStore, apply, beginWebLogin, clearCachedQuota, createCodexFetchProvider, createCodexImageTool, createCodexSearchProvider, createPlatformTokenStore, credentialPath, detectSystemProxy, fetchAccountQuota, getCachedQuota, inject, loginAndSave, mapCodexUsage, modelSettingsPath, parseCodexUsage, parseResponsesStream, refreshAntigravityToken };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AntigravityComposerQuota.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravityComposerQuota.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AAC5F,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAmB7C,KAAK,KAAK,GAAG,YAAY,CAAC,0BAA0B,CAAC,GACnD,WAAW,CAAC,OAAO,cAAc,CAAC,GAAG;IACnC,SAAS,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,IAAI,CAAA;CAC/B,CAAA;AAqCH,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"AntigravityComposerQuota.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravityComposerQuota.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AAC5F,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEjF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAmB7C,KAAK,KAAK,GAAG,YAAY,CAAC,0BAA0B,CAAC,GACnD,WAAW,CAAC,OAAO,cAAc,CAAC,GAAG;IACnC,SAAS,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAC7C,kBAAkB,EAAE,MAAM,IAAI,CAAA;CAC/B,CAAA;AAqCH,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAyF3G"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AntigravitySection.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravitySection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAM/D,UAAU,KAAK;IACb,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;CAChC;AAiBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAuBD,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"AntigravitySection.d.ts","sourceRoot":"","sources":["../../../../src/client/antigravity/AntigravitySection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAM/D,UAAU,KAAK;IACb,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;CAChC;AAiBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIpD;AAuBD,wBAAgB,kBAAkB,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,YAAY,CAmdnG"}
|
|
@@ -264,6 +264,6 @@ export declare const dictionaries: {
|
|
|
264
264
|
readonly retry: "重试";
|
|
265
265
|
readonly unknown: "未知";
|
|
266
266
|
};
|
|
267
|
-
en: Record<"
|
|
267
|
+
en: Record<"quota" | "account" | "storage" | "stale" | "pending" | "tokens" | "title" | "intro" | "signedOut" | "signedIn" | "plan" | "accountId" | "expires" | "storageWindows" | "storageMacKeychain" | "storageLinuxFile" | "storageMemory" | "storageUnavailable" | "securityWindows" | "securityMacKeychain" | "securityLinuxFile" | "securityMemory" | "securityUnavailable" | "signIn" | "signInAgain" | "cancel" | "signOut" | "refreshToken" | "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" | "quotaIntro" | "refreshQuota" | "refreshing" | "noQuota" | "quotaSignedOut" | "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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { LlmAdapter, type GenerateOptions, type LlmModelInfo, type LlmProviderInfo, type LlmResolvedModelInfo, type PreparedAdapterCall, type StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
1
|
+
import { LlmAdapter, ReasoningEffortId, type GenerateOptions, type LlmModelInfo, type LlmProviderInfo, type LlmResolvedModelInfo, type PreparedAdapterCall, type StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
2
2
|
import { FileCredentialStore, FileModelSettingsStore, type AntigravityPreferenceStore } from './token-store.ts';
|
|
3
|
+
export declare function resolveDefaultReasoningEffort(efforts: readonly string[], configuredEffort?: string | null): ReasoningEffortId | undefined;
|
|
3
4
|
export declare class AntigravityAdapter extends LlmAdapter {
|
|
4
5
|
private readonly store;
|
|
5
6
|
private readonly modelSettings;
|
|
@@ -9,6 +10,8 @@ export declare class AntigravityAdapter extends LlmAdapter {
|
|
|
9
10
|
fetchFn?: typeof fetch;
|
|
10
11
|
});
|
|
11
12
|
providerInfo(provider: string): LlmProviderInfo;
|
|
13
|
+
providerRetryPolicy(): undefined;
|
|
14
|
+
imageRequestPricing(_provider?: string, _model?: string): undefined;
|
|
12
15
|
listModels(provider?: string): Promise<readonly LlmModelInfo[]>;
|
|
13
16
|
resolveModel(provider: string, modelId: string, signal?: AbortSignal): Promise<LlmResolvedModelInfo>;
|
|
14
17
|
prepareCall(provider: string, model: string, signal?: AbortSignal): Promise<PreparedAdapterCall>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,iBAAiB,EACjB,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,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAC/B,iBAAiB,GAAG,SAAS,CAc/B;AAED,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;IAI/C,mBAAmB,IAAI,SAAS;IAIhC,mBAAmB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS;IAI7D,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;CAwG7B"}
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import { FileCredentialStore, FileModelSettingsStore, type AntigravityCatalogModel } from './token-store.ts';
|
|
2
2
|
import type { AntigravityAccountQuota, AntigravityQuotaGroup } from '../../shared/antigravity-contracts.ts';
|
|
3
|
+
export declare const ANTIGRAVITY_QUOTA_CACHE_TTL_MS: number;
|
|
3
4
|
export declare function defaultUserAgent(): string;
|
|
4
5
|
export declare function antigravityHeaders(token: string): Record<string, string>;
|
|
5
6
|
export declare function jsonHeaders(token: string): Record<string, string>;
|
|
6
7
|
export declare function endpointCandidates(): string[];
|
|
8
|
+
export interface AntigravityTierInfo {
|
|
9
|
+
id?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AntigravityIneligibleTier {
|
|
14
|
+
tierId?: string;
|
|
15
|
+
reasonMessage?: string;
|
|
16
|
+
validationUrl?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface LoadCodeAssistDetailResult {
|
|
19
|
+
currentTier?: AntigravityTierInfo | null;
|
|
20
|
+
paidTier?: AntigravityTierInfo | null;
|
|
21
|
+
allowedTiers?: AntigravityTierInfo[];
|
|
22
|
+
ineligibleTiers?: AntigravityIneligibleTier[];
|
|
23
|
+
projectId?: string;
|
|
24
|
+
raw?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export declare function loadCodeAssistDetail(token: string, fetchFn?: typeof fetch, signal?: AbortSignal): Promise<LoadCodeAssistDetailResult | undefined>;
|
|
27
|
+
export declare function onboardUser(token: string, fetchFn?: typeof fetch, signal?: AbortSignal): Promise<void>;
|
|
7
28
|
export declare function listCloudAICompanionProjects(token: string, fetchFn?: typeof fetch): Promise<string | undefined>;
|
|
8
29
|
export declare function loadCodeAssist(token: string, fetchFn?: typeof fetch): Promise<string | undefined>;
|
|
9
30
|
export declare function postJson(path: string, token: string, body: Record<string, unknown>, fetchFn?: typeof fetch): Promise<{
|
|
@@ -16,6 +37,7 @@ export declare function parseQuotaSummary(data: unknown): {
|
|
|
16
37
|
description?: string;
|
|
17
38
|
};
|
|
18
39
|
export declare function parseCatalogModels(data: unknown): AntigravityCatalogModel[];
|
|
19
|
-
export declare function fetchAccountQuota(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore, fetchFn?: typeof fetch): Promise<AntigravityAccountQuota>;
|
|
40
|
+
export declare function fetchAccountQuota(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore, fetchFn?: typeof fetch, force?: boolean): Promise<AntigravityAccountQuota>;
|
|
20
41
|
export declare function getCachedQuota(): AntigravityAccountQuota | undefined;
|
|
42
|
+
export declare function clearCachedQuota(): void;
|
|
21
43
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/antigravity/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Server } from 'node:http';
|
|
2
2
|
import { FileCredentialStore, type AntigravityCredentials } from './token-store.ts';
|
|
3
|
+
import { type LoadCodeAssistDetailResult } from './client.ts';
|
|
3
4
|
export interface WebLoginFlowState {
|
|
4
5
|
status: 'idle' | 'pending' | 'complete' | 'error';
|
|
5
6
|
authUrl?: string;
|
|
@@ -7,6 +8,8 @@ export interface WebLoginFlowState {
|
|
|
7
8
|
completedAt?: number;
|
|
8
9
|
email?: string;
|
|
9
10
|
error?: string;
|
|
11
|
+
validationUrl?: string;
|
|
12
|
+
progress?: string;
|
|
10
13
|
}
|
|
11
14
|
export declare function callbackPort(): number;
|
|
12
15
|
export declare function resolveCallbackHost(raw?: string | undefined): string;
|
|
@@ -26,13 +29,16 @@ export declare function startCallbackServer(expectedState: string): Promise<{
|
|
|
26
29
|
state: string;
|
|
27
30
|
}>;
|
|
28
31
|
}>;
|
|
29
|
-
export declare function
|
|
30
|
-
export declare function
|
|
32
|
+
export declare function extractGoogleValidationUrl(text: string): string | undefined;
|
|
33
|
+
export declare function assertFreeTierEligible(payload: LoadCodeAssistDetailResult): void;
|
|
34
|
+
export declare function discoverAntigravityProject(token: string, fetchFn?: typeof fetch, signal?: AbortSignal, onProgress?: (stage: string) => void): Promise<string | undefined>;
|
|
35
|
+
export declare function exchangeOAuthCode(code: string, verifier: string, callbackUrl: string, fetchFn?: typeof fetch, signal?: AbortSignal, onProgress?: (stage: string) => void): Promise<AntigravityCredentials>;
|
|
36
|
+
export declare function beginWebLogin(store: FileCredentialStore, fetchFn?: typeof fetch, signal?: AbortSignal): Promise<WebLoginFlowState>;
|
|
31
37
|
export declare function getWebLoginStatus(): WebLoginFlowState;
|
|
32
38
|
export declare function refreshAntigravityToken(credentials: AntigravityCredentials, fetchFn?: typeof fetch): Promise<AntigravityCredentials>;
|
|
33
39
|
export declare function ensureApiKey(store: FileCredentialStore, fetchFn?: typeof fetch): Promise<{
|
|
34
40
|
token: string;
|
|
35
41
|
projectId?: string;
|
|
36
42
|
}>;
|
|
37
|
-
export declare function loginAndSave(store: FileCredentialStore, signal?: AbortSignal, onUrl?: (url: string) => void, fetchFn?: typeof fetch): Promise<AntigravityCredentials>;
|
|
43
|
+
export declare function loginAndSave(store: FileCredentialStore, signal?: AbortSignal, onUrl?: (url: string) => void, fetchFn?: typeof fetch, onProgress?: (stage: string) => void): Promise<AntigravityCredentials>;
|
|
38
44
|
//# sourceMappingURL=oauth.d.ts.map
|