@anthonyhaussman/opencode-agy-auth 1.2.7-alpha.2 → 1.2.7-alpha.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/index.js +439 -511
- package/dist/index.js.map +1 -1
- package/dist/src/plugin/headers.d.ts +7 -0
- package/dist/src/plugin/quota-summary.d.ts +2 -0
- package/dist/src/plugin/quota.d.ts +2 -0
- package/dist/src/plugin/tier.d.ts +28 -0
- package/dist/src/plugin/v2-fetch.d.ts +1 -0
- package/dist/src/plugin/v2-session.d.ts +7 -0
- package/dist/src/plugin/v2-storage.d.ts +3 -0
- package/dist/src/plugin/v2.d.ts +7 -15
- package/dist/src/plugin.d.ts +2 -23
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -15337,6 +15337,12 @@ function formatRelativeResetTime(resetTime) {
|
|
|
15337
15337
|
|
|
15338
15338
|
// src/plugin/quota.ts
|
|
15339
15339
|
var AGY_QUOTA_TOOL_NAME = "agy_quota";
|
|
15340
|
+
var AGY_V2_QUOTA_COMMAND = "agy-quota";
|
|
15341
|
+
var AGY_V2_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
15342
|
+
|
|
15343
|
+
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
15344
|
+
Do not call other tools.
|
|
15345
|
+
`;
|
|
15340
15346
|
function createAgyQuotaTool({
|
|
15341
15347
|
client,
|
|
15342
15348
|
getAuthResolver,
|
|
@@ -15576,6 +15582,12 @@ function splitModelVariant(modelId) {
|
|
|
15576
15582
|
|
|
15577
15583
|
// src/plugin/quota-summary.ts
|
|
15578
15584
|
var AGY_QUOTA_SUMMARY_TOOL_NAME = "agy_quota_summary";
|
|
15585
|
+
var AGY_V2_QUOTA_SUMMARY_COMMAND = "agy-quota-summary";
|
|
15586
|
+
var AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota summary (weekly and 5-hour limits by model group) for the current authenticated account.
|
|
15587
|
+
|
|
15588
|
+
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
15589
|
+
Do not call other tools.
|
|
15590
|
+
`;
|
|
15579
15591
|
function createAgyQuotaSummaryTool({
|
|
15580
15592
|
client,
|
|
15581
15593
|
getAuthResolver,
|
|
@@ -20221,22 +20233,81 @@ var ChatLoggerImpl = class {
|
|
|
20221
20233
|
}
|
|
20222
20234
|
};
|
|
20223
20235
|
|
|
20224
|
-
// src/plugin.ts
|
|
20225
|
-
|
|
20226
|
-
|
|
20227
|
-
|
|
20228
|
-
|
|
20229
|
-
|
|
20230
|
-
|
|
20231
|
-
|
|
20232
|
-
|
|
20236
|
+
// src/plugin/headers.ts
|
|
20237
|
+
function getSafeHeader(headers, key) {
|
|
20238
|
+
if (!headers) {
|
|
20239
|
+
return void 0;
|
|
20240
|
+
}
|
|
20241
|
+
const targetKey = key.toLowerCase();
|
|
20242
|
+
if (typeof headers.get === "function") {
|
|
20243
|
+
try {
|
|
20244
|
+
return headers.get(targetKey) || void 0;
|
|
20245
|
+
} catch {
|
|
20246
|
+
}
|
|
20247
|
+
}
|
|
20248
|
+
if (Array.isArray(headers)) {
|
|
20249
|
+
const found = headers.find((item) => {
|
|
20250
|
+
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20251
|
+
return item[0].toLowerCase() === targetKey;
|
|
20252
|
+
}
|
|
20253
|
+
return false;
|
|
20254
|
+
});
|
|
20255
|
+
return found ? String(found[1]) : void 0;
|
|
20256
|
+
}
|
|
20257
|
+
if (typeof headers === "object") {
|
|
20258
|
+
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20259
|
+
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20260
|
+
}
|
|
20261
|
+
return void 0;
|
|
20262
|
+
}
|
|
20263
|
+
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20264
|
+
if (typeof globalThis.Headers !== "undefined") {
|
|
20265
|
+
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20266
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20267
|
+
headers.set(k, v);
|
|
20268
|
+
}
|
|
20269
|
+
return headers;
|
|
20270
|
+
}
|
|
20271
|
+
if (Array.isArray(initHeaders)) {
|
|
20272
|
+
const nextHeaders2 = [...initHeaders];
|
|
20273
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20274
|
+
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20275
|
+
if (idx !== -1) {
|
|
20276
|
+
nextHeaders2[idx] = [k, v];
|
|
20277
|
+
} else {
|
|
20278
|
+
nextHeaders2.push([k, v]);
|
|
20279
|
+
}
|
|
20280
|
+
}
|
|
20281
|
+
return nextHeaders2;
|
|
20282
|
+
}
|
|
20283
|
+
const nextHeaders = {};
|
|
20284
|
+
if (initHeaders && typeof initHeaders === "object") {
|
|
20285
|
+
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20286
|
+
nextHeaders[k] = String(v);
|
|
20287
|
+
}
|
|
20288
|
+
}
|
|
20289
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20290
|
+
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20291
|
+
if (existingKey) {
|
|
20292
|
+
nextHeaders[existingKey] = v;
|
|
20293
|
+
} else {
|
|
20294
|
+
nextHeaders[k] = v;
|
|
20295
|
+
}
|
|
20296
|
+
}
|
|
20297
|
+
return nextHeaders;
|
|
20298
|
+
}
|
|
20299
|
+
function toUrlString(value) {
|
|
20300
|
+
if (typeof value === "string") {
|
|
20301
|
+
return value;
|
|
20302
|
+
}
|
|
20303
|
+
const candidate = value.url;
|
|
20304
|
+
if (candidate) {
|
|
20305
|
+
return candidate;
|
|
20306
|
+
}
|
|
20307
|
+
return value.toString();
|
|
20308
|
+
}
|
|
20233
20309
|
|
|
20234
|
-
|
|
20235
|
-
Do not call other tools.
|
|
20236
|
-
`;
|
|
20237
|
-
var latestAgyAuthResolver;
|
|
20238
|
-
var latestAgyConfiguredProjectId;
|
|
20239
|
-
var latestAgyUserAgentModel;
|
|
20310
|
+
// src/plugin/tier.ts
|
|
20240
20311
|
var STATIC_MODELS_SIMPLE = {
|
|
20241
20312
|
"gemini-3.8-flash": {
|
|
20242
20313
|
name: "Gemini 3.8 Flash",
|
|
@@ -20324,6 +20395,39 @@ var TIER_MAPPING = {
|
|
|
20324
20395
|
high: "gemini-3.1-pro-high"
|
|
20325
20396
|
}
|
|
20326
20397
|
};
|
|
20398
|
+
function resolveModelTier(baseModelId, headersOrInit) {
|
|
20399
|
+
const parts = baseModelId.split("@");
|
|
20400
|
+
const base = parts[0] || "";
|
|
20401
|
+
const suffixTier = parts[1]?.toLowerCase();
|
|
20402
|
+
const mapping = TIER_MAPPING[base];
|
|
20403
|
+
if (!mapping) {
|
|
20404
|
+
return baseModelId;
|
|
20405
|
+
}
|
|
20406
|
+
const rawHeaders = headersOrInit && typeof headersOrInit === "object" && "headers" in headersOrInit ? headersOrInit.headers : headersOrInit;
|
|
20407
|
+
const headerTier = getSafeHeader(rawHeaders, "x-agy-tier")?.toLowerCase() || null;
|
|
20408
|
+
const requestedTier = headerTier || suffixTier;
|
|
20409
|
+
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20410
|
+
return mapping[requestedTier] || baseModelId;
|
|
20411
|
+
}
|
|
20412
|
+
return mapping["medium"] ?? mapping["high"] ?? baseModelId;
|
|
20413
|
+
}
|
|
20414
|
+
|
|
20415
|
+
// src/plugin.ts
|
|
20416
|
+
var AGY_QUOTA_COMMAND = "agyquota";
|
|
20417
|
+
var AGY_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
20418
|
+
|
|
20419
|
+
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20420
|
+
Do not call other tools.
|
|
20421
|
+
`;
|
|
20422
|
+
var AGY_QUOTA_SUMMARY_COMMAND = "agyquotasummary";
|
|
20423
|
+
var AGY_QUOTA_SUMMARY_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota summary (weekly and 5-hour limits by model group) for the current authenticated account.
|
|
20424
|
+
|
|
20425
|
+
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20426
|
+
Do not call other tools.
|
|
20427
|
+
`;
|
|
20428
|
+
var latestAgyAuthResolver;
|
|
20429
|
+
var latestAgyConfiguredProjectId;
|
|
20430
|
+
var latestAgyUserAgentModel;
|
|
20327
20431
|
var buildModelFromSimple = (modelId, simple) => {
|
|
20328
20432
|
const isClaude = modelId.startsWith("claude-");
|
|
20329
20433
|
const isGpt = modelId.startsWith("gpt-");
|
|
@@ -20417,83 +20521,6 @@ var STATIC_MODELS = {};
|
|
|
20417
20521
|
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
20418
20522
|
STATIC_MODELS[modelId] = buildModelFromSimple(modelId, simple);
|
|
20419
20523
|
}
|
|
20420
|
-
function getSafeHeader(headers, key) {
|
|
20421
|
-
if (!headers) {
|
|
20422
|
-
return void 0;
|
|
20423
|
-
}
|
|
20424
|
-
const targetKey = key.toLowerCase();
|
|
20425
|
-
if (typeof headers.get === "function") {
|
|
20426
|
-
try {
|
|
20427
|
-
return headers.get(targetKey) || void 0;
|
|
20428
|
-
} catch {
|
|
20429
|
-
}
|
|
20430
|
-
}
|
|
20431
|
-
if (Array.isArray(headers)) {
|
|
20432
|
-
const found = headers.find((item) => {
|
|
20433
|
-
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20434
|
-
return item[0].toLowerCase() === targetKey;
|
|
20435
|
-
}
|
|
20436
|
-
return false;
|
|
20437
|
-
});
|
|
20438
|
-
return found ? String(found[1]) : void 0;
|
|
20439
|
-
}
|
|
20440
|
-
if (typeof headers === "object") {
|
|
20441
|
-
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20442
|
-
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20443
|
-
}
|
|
20444
|
-
return void 0;
|
|
20445
|
-
}
|
|
20446
|
-
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20447
|
-
if (typeof globalThis.Headers !== "undefined") {
|
|
20448
|
-
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20449
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20450
|
-
headers.set(k, v);
|
|
20451
|
-
}
|
|
20452
|
-
return headers;
|
|
20453
|
-
}
|
|
20454
|
-
if (Array.isArray(initHeaders)) {
|
|
20455
|
-
const nextHeaders2 = [...initHeaders];
|
|
20456
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20457
|
-
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20458
|
-
if (idx !== -1) {
|
|
20459
|
-
nextHeaders2[idx] = [k, v];
|
|
20460
|
-
} else {
|
|
20461
|
-
nextHeaders2.push([k, v]);
|
|
20462
|
-
}
|
|
20463
|
-
}
|
|
20464
|
-
return nextHeaders2;
|
|
20465
|
-
}
|
|
20466
|
-
const nextHeaders = {};
|
|
20467
|
-
if (initHeaders && typeof initHeaders === "object") {
|
|
20468
|
-
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20469
|
-
nextHeaders[k] = String(v);
|
|
20470
|
-
}
|
|
20471
|
-
}
|
|
20472
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20473
|
-
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20474
|
-
if (existingKey) {
|
|
20475
|
-
nextHeaders[existingKey] = v;
|
|
20476
|
-
} else {
|
|
20477
|
-
nextHeaders[k] = v;
|
|
20478
|
-
}
|
|
20479
|
-
}
|
|
20480
|
-
return nextHeaders;
|
|
20481
|
-
}
|
|
20482
|
-
function resolveModelTier(baseModelId, init) {
|
|
20483
|
-
const parts = baseModelId.split("@");
|
|
20484
|
-
const base = parts[0] || "";
|
|
20485
|
-
const suffixTier = parts[1]?.toLowerCase();
|
|
20486
|
-
const mapping = TIER_MAPPING[base];
|
|
20487
|
-
if (!mapping) {
|
|
20488
|
-
return baseModelId;
|
|
20489
|
-
}
|
|
20490
|
-
const headerTier = getSafeHeader(init?.headers, "x-agy-tier")?.toLowerCase() || null;
|
|
20491
|
-
const requestedTier = headerTier || suffixTier;
|
|
20492
|
-
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20493
|
-
return mapping[requestedTier] || baseModelId;
|
|
20494
|
-
}
|
|
20495
|
-
return mapping["medium"] ?? mapping["high"];
|
|
20496
|
-
}
|
|
20497
20524
|
var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
20498
20525
|
let latestConfig;
|
|
20499
20526
|
updateStaticModelsWithPricing(STATIC_MODELS);
|
|
@@ -20821,139 +20848,29 @@ async function ensureProjectContextOrThrow(authRecord, client, configuredProject
|
|
|
20821
20848
|
throw error45;
|
|
20822
20849
|
}
|
|
20823
20850
|
}
|
|
20824
|
-
function toUrlString(value) {
|
|
20825
|
-
if (typeof value === "string") {
|
|
20826
|
-
return value;
|
|
20827
|
-
}
|
|
20828
|
-
const candidate = value.url;
|
|
20829
|
-
if (candidate) {
|
|
20830
|
-
return candidate;
|
|
20831
|
-
}
|
|
20832
|
-
return value.toString();
|
|
20833
|
-
}
|
|
20834
20851
|
|
|
20835
20852
|
// src/plugin/types.ts
|
|
20836
20853
|
function defineOpenCodeV2Plugin(def) {
|
|
20837
20854
|
return def;
|
|
20838
20855
|
}
|
|
20839
20856
|
|
|
20840
|
-
// src/plugin/v2.ts
|
|
20857
|
+
// src/plugin/v2-storage.ts
|
|
20858
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync5 } from "fs";
|
|
20841
20859
|
import { homedir as homedir4 } from "os";
|
|
20842
20860
|
import { join as join6 } from "path";
|
|
20843
|
-
|
|
20844
|
-
|
|
20845
|
-
|
|
20846
|
-
|
|
20847
|
-
var AGY_V2_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
20848
|
-
|
|
20849
|
-
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20850
|
-
Do not call other tools.
|
|
20851
|
-
`;
|
|
20852
|
-
var AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota summary (weekly and 5-hour limits by model group) for the current authenticated account.
|
|
20853
|
-
|
|
20854
|
-
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20855
|
-
Do not call other tools.
|
|
20856
|
-
`;
|
|
20857
|
-
function getSafeHeader2(headers, key) {
|
|
20858
|
-
if (!headers) {
|
|
20859
|
-
return void 0;
|
|
20861
|
+
var storedAuthOverrideForTesting = void 0;
|
|
20862
|
+
function loadStoredAuthFromJson() {
|
|
20863
|
+
if (storedAuthOverrideForTesting !== void 0) {
|
|
20864
|
+
return storedAuthOverrideForTesting;
|
|
20860
20865
|
}
|
|
20861
|
-
const
|
|
20862
|
-
|
|
20863
|
-
|
|
20864
|
-
|
|
20865
|
-
|
|
20866
|
+
const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
|
|
20867
|
+
try {
|
|
20868
|
+
if (existsSync6(authPath)) {
|
|
20869
|
+
const content = readFileSync5(authPath, "utf8");
|
|
20870
|
+
const data = JSON.parse(content);
|
|
20871
|
+
return data?.[AGY_PROVIDER_ID];
|
|
20866
20872
|
}
|
|
20867
|
-
}
|
|
20868
|
-
if (Array.isArray(headers)) {
|
|
20869
|
-
const found = headers.find((item) => {
|
|
20870
|
-
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20871
|
-
return item[0].toLowerCase() === targetKey;
|
|
20872
|
-
}
|
|
20873
|
-
return false;
|
|
20874
|
-
});
|
|
20875
|
-
return found ? String(found[1]) : void 0;
|
|
20876
|
-
}
|
|
20877
|
-
if (typeof headers === "object") {
|
|
20878
|
-
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20879
|
-
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20880
|
-
}
|
|
20881
|
-
return void 0;
|
|
20882
|
-
}
|
|
20883
|
-
function setSafeHeaders2(initHeaders, newHeaders) {
|
|
20884
|
-
if (typeof globalThis.Headers !== "undefined") {
|
|
20885
|
-
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20886
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20887
|
-
headers.set(k, v);
|
|
20888
|
-
}
|
|
20889
|
-
return headers;
|
|
20890
|
-
}
|
|
20891
|
-
if (Array.isArray(initHeaders)) {
|
|
20892
|
-
const nextHeaders2 = [...initHeaders];
|
|
20893
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20894
|
-
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20895
|
-
if (idx !== -1) {
|
|
20896
|
-
nextHeaders2[idx] = [k, v];
|
|
20897
|
-
} else {
|
|
20898
|
-
nextHeaders2.push([k, v]);
|
|
20899
|
-
}
|
|
20900
|
-
}
|
|
20901
|
-
return nextHeaders2;
|
|
20902
|
-
}
|
|
20903
|
-
const nextHeaders = {};
|
|
20904
|
-
if (initHeaders && typeof initHeaders === "object") {
|
|
20905
|
-
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20906
|
-
nextHeaders[k] = String(v);
|
|
20907
|
-
}
|
|
20908
|
-
}
|
|
20909
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20910
|
-
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20911
|
-
if (existingKey) {
|
|
20912
|
-
nextHeaders[existingKey] = v;
|
|
20913
|
-
} else {
|
|
20914
|
-
nextHeaders[k] = v;
|
|
20915
|
-
}
|
|
20916
|
-
}
|
|
20917
|
-
return nextHeaders;
|
|
20918
|
-
}
|
|
20919
|
-
function toUrlString2(value) {
|
|
20920
|
-
if (typeof value === "string") {
|
|
20921
|
-
return value;
|
|
20922
|
-
}
|
|
20923
|
-
const candidate = value.url;
|
|
20924
|
-
if (candidate) {
|
|
20925
|
-
return candidate;
|
|
20926
|
-
}
|
|
20927
|
-
return value.toString();
|
|
20928
|
-
}
|
|
20929
|
-
function resolveModelTier2(baseModelId, init) {
|
|
20930
|
-
const parts = baseModelId.split("@");
|
|
20931
|
-
const base = parts[0] || "";
|
|
20932
|
-
const suffixTier = parts[1]?.toLowerCase();
|
|
20933
|
-
const mapping = TIER_MAPPING[base];
|
|
20934
|
-
if (!mapping) {
|
|
20935
|
-
return baseModelId;
|
|
20936
|
-
}
|
|
20937
|
-
const headerTier = getSafeHeader2(init?.headers, "x-agy-tier")?.toLowerCase() || null;
|
|
20938
|
-
const requestedTier = headerTier || suffixTier;
|
|
20939
|
-
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20940
|
-
return mapping[requestedTier] || baseModelId;
|
|
20941
|
-
}
|
|
20942
|
-
return mapping["medium"] ?? mapping["high"];
|
|
20943
|
-
}
|
|
20944
|
-
var storedAuthOverrideForTesting = void 0;
|
|
20945
|
-
function loadStoredAuthFromJson() {
|
|
20946
|
-
if (storedAuthOverrideForTesting !== void 0) {
|
|
20947
|
-
return storedAuthOverrideForTesting;
|
|
20948
|
-
}
|
|
20949
|
-
const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
|
|
20950
|
-
try {
|
|
20951
|
-
if (existsSync6(authPath)) {
|
|
20952
|
-
const content = readFileSync5(authPath, "utf8");
|
|
20953
|
-
const data = JSON.parse(content);
|
|
20954
|
-
return data?.[AGY_PROVIDER_ID];
|
|
20955
|
-
}
|
|
20956
|
-
} catch {
|
|
20873
|
+
} catch {
|
|
20957
20874
|
}
|
|
20958
20875
|
return void 0;
|
|
20959
20876
|
}
|
|
@@ -20985,19 +20902,21 @@ function saveStoredAuthToJson(authRecord) {
|
|
|
20985
20902
|
} catch {
|
|
20986
20903
|
}
|
|
20987
20904
|
}
|
|
20905
|
+
|
|
20906
|
+
// src/plugin/v2-fetch.ts
|
|
20988
20907
|
function createV2FetchInterceptor(getAuthSnapshot) {
|
|
20989
20908
|
return async function agyV2Fetch(input, init) {
|
|
20990
20909
|
const isGL = isGenerativeLanguageRequest(input);
|
|
20991
|
-
const isInternal =
|
|
20910
|
+
const isInternal = toUrlString(input).includes("cloudcode-pa.googleapis.com");
|
|
20992
20911
|
if (!isGL && !isInternal) {
|
|
20993
|
-
return
|
|
20912
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20994
20913
|
}
|
|
20995
20914
|
let rawAuth = getAuthSnapshot ? await getAuthSnapshot() : void 0;
|
|
20996
20915
|
if (!rawAuth) {
|
|
20997
20916
|
rawAuth = loadStoredAuthFromJson();
|
|
20998
20917
|
}
|
|
20999
20918
|
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21000
|
-
return
|
|
20919
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
21001
20920
|
}
|
|
21002
20921
|
let authRecord = resolveCachedAuth(rawAuth);
|
|
21003
20922
|
if (accessTokenExpired(authRecord)) {
|
|
@@ -21008,19 +20927,19 @@ function createV2FetchInterceptor(getAuthSnapshot) {
|
|
|
21008
20927
|
}
|
|
21009
20928
|
}
|
|
21010
20929
|
if (!authRecord.access) {
|
|
21011
|
-
return
|
|
20930
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
21012
20931
|
}
|
|
21013
20932
|
if (isInternal) {
|
|
21014
|
-
const hasAuth =
|
|
20933
|
+
const hasAuth = getSafeHeader(init?.headers, "Authorization") !== void 0;
|
|
21015
20934
|
if (hasAuth) {
|
|
21016
|
-
return
|
|
20935
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
21017
20936
|
}
|
|
21018
20937
|
const userAgent = buildAgyCliUserAgent();
|
|
21019
|
-
const headers =
|
|
20938
|
+
const headers = setSafeHeaders(init?.headers, {
|
|
21020
20939
|
Authorization: `Bearer ${authRecord.access}`,
|
|
21021
20940
|
"User-Agent": userAgent
|
|
21022
20941
|
});
|
|
21023
|
-
return
|
|
20942
|
+
return (globalThis.fetch || fetch)(input, {
|
|
21024
20943
|
...init,
|
|
21025
20944
|
headers
|
|
21026
20945
|
});
|
|
@@ -21046,7 +20965,7 @@ function createV2FetchInterceptor(getAuthSnapshot) {
|
|
|
21046
20965
|
let modifiedInput = input;
|
|
21047
20966
|
if (isGL && originalRequestedModel) {
|
|
21048
20967
|
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21049
|
-
const resolvedBase =
|
|
20968
|
+
const resolvedBase = resolveModelTier(originalBase, init);
|
|
21050
20969
|
if (originalBase !== resolvedBase) {
|
|
21051
20970
|
if (typeof modifiedInput === "string") {
|
|
21052
20971
|
modifiedInput = modifiedInput.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
@@ -21066,7 +20985,7 @@ function createV2FetchInterceptor(getAuthSnapshot) {
|
|
|
21066
20985
|
const chatLogger = createChatLogger();
|
|
21067
20986
|
if (chatLogger) {
|
|
21068
20987
|
chatLogger.logRequest(
|
|
21069
|
-
|
|
20988
|
+
toUrlString(transformed.request),
|
|
21070
20989
|
transformed.init.method || "GET",
|
|
21071
20990
|
transformed.init.headers,
|
|
21072
20991
|
transformed.init.body
|
|
@@ -21083,6 +21002,300 @@ function createV2FetchInterceptor(getAuthSnapshot) {
|
|
|
21083
21002
|
);
|
|
21084
21003
|
};
|
|
21085
21004
|
}
|
|
21005
|
+
|
|
21006
|
+
// src/plugin/v2-session.ts
|
|
21007
|
+
function createV2HttpRequestHook(state = {}) {
|
|
21008
|
+
return async (event) => {
|
|
21009
|
+
if (!event) return;
|
|
21010
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21011
|
+
const isGL = isGenerativeLanguageRequest(rawUrl);
|
|
21012
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21013
|
+
if (!isGL && !isInternal) {
|
|
21014
|
+
return;
|
|
21015
|
+
}
|
|
21016
|
+
event.headers = event.headers || {};
|
|
21017
|
+
let modelName;
|
|
21018
|
+
let rawAuth = event.auth;
|
|
21019
|
+
if (rawAuth && !rawAuth.type) {
|
|
21020
|
+
const tokenVal = rawAuth.access || rawAuth.token;
|
|
21021
|
+
if (tokenVal || rawAuth.refresh) {
|
|
21022
|
+
rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
|
|
21023
|
+
}
|
|
21024
|
+
}
|
|
21025
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21026
|
+
rawAuth = loadStoredAuthFromJson();
|
|
21027
|
+
}
|
|
21028
|
+
let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
|
|
21029
|
+
if (authRecord && accessTokenExpired(authRecord)) {
|
|
21030
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
21031
|
+
} } });
|
|
21032
|
+
if (refreshed) {
|
|
21033
|
+
authRecord = refreshed;
|
|
21034
|
+
saveStoredAuthToJson(refreshed);
|
|
21035
|
+
}
|
|
21036
|
+
}
|
|
21037
|
+
if (isGL) {
|
|
21038
|
+
const parsed = parseGenerativeLanguageRequest(rawUrl);
|
|
21039
|
+
modelName = parsed?.effectiveModel;
|
|
21040
|
+
if (modelName) {
|
|
21041
|
+
state.lastInterceptedModel = modelName;
|
|
21042
|
+
}
|
|
21043
|
+
if (typeof event.headers.delete === "function") {
|
|
21044
|
+
event.headers.delete("x-goog-api-key");
|
|
21045
|
+
event.headers.delete("api-key");
|
|
21046
|
+
} else {
|
|
21047
|
+
for (const key of Object.keys(event.headers)) {
|
|
21048
|
+
const lower = key.toLowerCase();
|
|
21049
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21050
|
+
delete event.headers[key];
|
|
21051
|
+
}
|
|
21052
|
+
}
|
|
21053
|
+
}
|
|
21054
|
+
if (event.request?.headers) {
|
|
21055
|
+
if (typeof event.request.headers.delete === "function") {
|
|
21056
|
+
event.request.headers.delete("x-goog-api-key");
|
|
21057
|
+
event.request.headers.delete("api-key");
|
|
21058
|
+
} else {
|
|
21059
|
+
for (const key of Object.keys(event.request.headers)) {
|
|
21060
|
+
const lower = key.toLowerCase();
|
|
21061
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21062
|
+
delete event.request.headers[key];
|
|
21063
|
+
}
|
|
21064
|
+
}
|
|
21065
|
+
}
|
|
21066
|
+
}
|
|
21067
|
+
let cleanUrl = rawUrl;
|
|
21068
|
+
try {
|
|
21069
|
+
const parsedUrl = new URL(rawUrl);
|
|
21070
|
+
let urlChanged = false;
|
|
21071
|
+
for (const param of ["key", "x-goog-api-key", "api-key"]) {
|
|
21072
|
+
if (parsedUrl.searchParams.has(param)) {
|
|
21073
|
+
parsedUrl.searchParams.delete(param);
|
|
21074
|
+
urlChanged = true;
|
|
21075
|
+
}
|
|
21076
|
+
}
|
|
21077
|
+
if (urlChanged) {
|
|
21078
|
+
cleanUrl = parsedUrl.toString();
|
|
21079
|
+
}
|
|
21080
|
+
} catch {
|
|
21081
|
+
}
|
|
21082
|
+
if (authRecord && authRecord.access) {
|
|
21083
|
+
let projectContext;
|
|
21084
|
+
try {
|
|
21085
|
+
projectContext = await ensureProjectContext(
|
|
21086
|
+
authRecord,
|
|
21087
|
+
{ auth: { set: async () => {
|
|
21088
|
+
} } },
|
|
21089
|
+
void 0,
|
|
21090
|
+
modelName
|
|
21091
|
+
);
|
|
21092
|
+
} catch {
|
|
21093
|
+
projectContext = {
|
|
21094
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
21095
|
+
auth: authRecord
|
|
21096
|
+
};
|
|
21097
|
+
}
|
|
21098
|
+
const originalRequestedModel = modelName;
|
|
21099
|
+
let modifiedUrl = cleanUrl;
|
|
21100
|
+
if (originalRequestedModel) {
|
|
21101
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21102
|
+
const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
|
|
21103
|
+
const resolvedBase = resolveModelTier(originalBase, { headers: initHeaders });
|
|
21104
|
+
if (originalBase !== resolvedBase) {
|
|
21105
|
+
modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
21106
|
+
}
|
|
21107
|
+
}
|
|
21108
|
+
let bodyPayload = event.body;
|
|
21109
|
+
if (bodyPayload === void 0 && event.request) {
|
|
21110
|
+
if (typeof event.request.clone === "function") {
|
|
21111
|
+
try {
|
|
21112
|
+
bodyPayload = await event.request.clone().text();
|
|
21113
|
+
} catch {
|
|
21114
|
+
}
|
|
21115
|
+
} else if (event.request.body !== void 0) {
|
|
21116
|
+
bodyPayload = event.request.body;
|
|
21117
|
+
}
|
|
21118
|
+
}
|
|
21119
|
+
let preExistingUserAgent;
|
|
21120
|
+
if (typeof event.headers?.get === "function") {
|
|
21121
|
+
preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
|
|
21122
|
+
} else if (event.headers && typeof event.headers === "object") {
|
|
21123
|
+
preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
|
|
21124
|
+
}
|
|
21125
|
+
if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
|
|
21126
|
+
preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
|
|
21127
|
+
} else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
|
|
21128
|
+
preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
|
|
21129
|
+
}
|
|
21130
|
+
const method = event.method || event.request?.method || "POST";
|
|
21131
|
+
const requestHeaders = event.headers || event.request?.headers;
|
|
21132
|
+
const transformed = prepareAgyRequest(
|
|
21133
|
+
modifiedUrl,
|
|
21134
|
+
{
|
|
21135
|
+
method,
|
|
21136
|
+
headers: requestHeaders,
|
|
21137
|
+
body: bodyPayload
|
|
21138
|
+
},
|
|
21139
|
+
authRecord.access,
|
|
21140
|
+
projectContext.effectiveProjectId
|
|
21141
|
+
);
|
|
21142
|
+
const targetUrl = toUrlString(transformed.request);
|
|
21143
|
+
if (typeof event.url === "string") {
|
|
21144
|
+
event.url = targetUrl;
|
|
21145
|
+
}
|
|
21146
|
+
if (event.request && typeof event.request === "object") {
|
|
21147
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21148
|
+
event.request = new Request(targetUrl, {
|
|
21149
|
+
method: transformed.init.method,
|
|
21150
|
+
headers: transformed.init.headers,
|
|
21151
|
+
body: transformed.init.body
|
|
21152
|
+
});
|
|
21153
|
+
} else if (typeof event.request.url === "string") {
|
|
21154
|
+
try {
|
|
21155
|
+
event.request.url = targetUrl;
|
|
21156
|
+
} catch {
|
|
21157
|
+
}
|
|
21158
|
+
}
|
|
21159
|
+
}
|
|
21160
|
+
const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
|
|
21161
|
+
for (const [k, v] of headerEntries) {
|
|
21162
|
+
const lowerK = k.toLowerCase();
|
|
21163
|
+
if (lowerK === "user-agent") {
|
|
21164
|
+
if (preExistingUserAgent) {
|
|
21165
|
+
continue;
|
|
21166
|
+
}
|
|
21167
|
+
if (typeof event.headers?.set === "function") {
|
|
21168
|
+
event.headers.set("User-Agent", v);
|
|
21169
|
+
} else if (event.headers) {
|
|
21170
|
+
event.headers["User-Agent"] = v;
|
|
21171
|
+
}
|
|
21172
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21173
|
+
event.request.headers.set("User-Agent", v);
|
|
21174
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21175
|
+
event.request.headers["User-Agent"] = v;
|
|
21176
|
+
}
|
|
21177
|
+
continue;
|
|
21178
|
+
}
|
|
21179
|
+
if (typeof event.headers?.set === "function") {
|
|
21180
|
+
event.headers.set(k, v);
|
|
21181
|
+
} else if (event.headers) {
|
|
21182
|
+
event.headers[k] = v;
|
|
21183
|
+
}
|
|
21184
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21185
|
+
event.request.headers.set(k, v);
|
|
21186
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21187
|
+
event.request.headers[k] = v;
|
|
21188
|
+
}
|
|
21189
|
+
}
|
|
21190
|
+
if (transformed.init.body !== void 0) {
|
|
21191
|
+
event.body = transformed.init.body;
|
|
21192
|
+
if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
|
|
21193
|
+
event.request.body = transformed.init.body;
|
|
21194
|
+
}
|
|
21195
|
+
}
|
|
21196
|
+
} else {
|
|
21197
|
+
if (typeof event.url === "string") {
|
|
21198
|
+
event.url = cleanUrl;
|
|
21199
|
+
}
|
|
21200
|
+
if (event.request && typeof event.request === "object") {
|
|
21201
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21202
|
+
event.request = new Request(cleanUrl, event.request);
|
|
21203
|
+
} else if (typeof event.request.url === "string") {
|
|
21204
|
+
try {
|
|
21205
|
+
event.request.url = cleanUrl;
|
|
21206
|
+
} catch {
|
|
21207
|
+
}
|
|
21208
|
+
}
|
|
21209
|
+
}
|
|
21210
|
+
}
|
|
21211
|
+
}
|
|
21212
|
+
if (authRecord && authRecord.access) {
|
|
21213
|
+
if (typeof event.headers?.set === "function") {
|
|
21214
|
+
event.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21215
|
+
} else if (event.headers) {
|
|
21216
|
+
event.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21217
|
+
}
|
|
21218
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21219
|
+
event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21220
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21221
|
+
event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21222
|
+
}
|
|
21223
|
+
}
|
|
21224
|
+
const userAgent = buildAgyCliUserAgent(modelName);
|
|
21225
|
+
if (typeof event.headers?.set === "function") {
|
|
21226
|
+
if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
|
|
21227
|
+
event.headers.set("User-Agent", userAgent);
|
|
21228
|
+
}
|
|
21229
|
+
} else if (event.headers) {
|
|
21230
|
+
if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
|
|
21231
|
+
event.headers["User-Agent"] = userAgent;
|
|
21232
|
+
}
|
|
21233
|
+
}
|
|
21234
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21235
|
+
if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
|
|
21236
|
+
event.request.headers.set("User-Agent", userAgent);
|
|
21237
|
+
}
|
|
21238
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21239
|
+
if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
|
|
21240
|
+
event.request.headers["User-Agent"] = userAgent;
|
|
21241
|
+
}
|
|
21242
|
+
}
|
|
21243
|
+
};
|
|
21244
|
+
}
|
|
21245
|
+
function createV2HttpResponseHook(state = {}) {
|
|
21246
|
+
return async (event) => {
|
|
21247
|
+
if (!event || !event.response) return;
|
|
21248
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21249
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21250
|
+
if (isInternal && event.response instanceof Response) {
|
|
21251
|
+
const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
|
|
21252
|
+
const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || state.lastInterceptedModel;
|
|
21253
|
+
const transformed = await transformAgyResponse(
|
|
21254
|
+
event.response,
|
|
21255
|
+
!!isStreaming,
|
|
21256
|
+
null,
|
|
21257
|
+
parsedModel,
|
|
21258
|
+
void 0,
|
|
21259
|
+
void 0
|
|
21260
|
+
);
|
|
21261
|
+
event.response = transformed;
|
|
21262
|
+
}
|
|
21263
|
+
};
|
|
21264
|
+
}
|
|
21265
|
+
function createV2RetryHook() {
|
|
21266
|
+
return async (event) => {
|
|
21267
|
+
if (!event) return;
|
|
21268
|
+
const response = event.response;
|
|
21269
|
+
if (response instanceof Response) {
|
|
21270
|
+
if (response.status === 429 || response.status === 503) {
|
|
21271
|
+
const quota = await classifyQuotaResponse(response);
|
|
21272
|
+
if (quota?.retryDelayMs) {
|
|
21273
|
+
event.retryDelayMs = quota.retryDelayMs;
|
|
21274
|
+
} else {
|
|
21275
|
+
event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
|
|
21276
|
+
}
|
|
21277
|
+
}
|
|
21278
|
+
} else if (event.details && Array.isArray(event.details)) {
|
|
21279
|
+
const retryInfo = event.details.find(
|
|
21280
|
+
(d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
|
|
21281
|
+
);
|
|
21282
|
+
if (retryInfo?.retryDelay) {
|
|
21283
|
+
const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
|
|
21284
|
+
if (delayMs !== null) {
|
|
21285
|
+
event.retryDelayMs = delayMs;
|
|
21286
|
+
}
|
|
21287
|
+
}
|
|
21288
|
+
}
|
|
21289
|
+
};
|
|
21290
|
+
}
|
|
21291
|
+
function registerV2SessionHooks(ctx) {
|
|
21292
|
+
const state = {};
|
|
21293
|
+
ctx.session.hook("http.request", createV2HttpRequestHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21294
|
+
ctx.session.hook("http.response", createV2HttpResponseHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21295
|
+
ctx.session.hook("retry", createV2RetryHook(), { providerID: AGY_PROVIDER_ID });
|
|
21296
|
+
}
|
|
21297
|
+
|
|
21298
|
+
// src/plugin/v2.ts
|
|
21086
21299
|
async function setupOpenCodeV2(ctx) {
|
|
21087
21300
|
const resolveVariants = (modelId) => {
|
|
21088
21301
|
const mapping = TIER_MAPPING[modelId];
|
|
@@ -21364,292 +21577,7 @@ async function setupOpenCodeV2(ctx) {
|
|
|
21364
21577
|
event.options.apiKey = "dummy";
|
|
21365
21578
|
event.options.fetch = createV2FetchInterceptor();
|
|
21366
21579
|
});
|
|
21367
|
-
|
|
21368
|
-
ctx.session.hook(
|
|
21369
|
-
"http.request",
|
|
21370
|
-
async (event) => {
|
|
21371
|
-
if (!event) return;
|
|
21372
|
-
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21373
|
-
const isGL = isGenerativeLanguageRequest(rawUrl);
|
|
21374
|
-
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21375
|
-
if (!isGL && !isInternal) {
|
|
21376
|
-
return;
|
|
21377
|
-
}
|
|
21378
|
-
event.headers = event.headers || {};
|
|
21379
|
-
let modelName;
|
|
21380
|
-
let rawAuth = event.auth;
|
|
21381
|
-
if (rawAuth && !rawAuth.type) {
|
|
21382
|
-
const tokenVal = rawAuth.access || rawAuth.token;
|
|
21383
|
-
if (tokenVal || rawAuth.refresh) {
|
|
21384
|
-
rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
|
|
21385
|
-
}
|
|
21386
|
-
}
|
|
21387
|
-
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21388
|
-
rawAuth = loadStoredAuthFromJson();
|
|
21389
|
-
}
|
|
21390
|
-
let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
|
|
21391
|
-
if (authRecord && accessTokenExpired(authRecord)) {
|
|
21392
|
-
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
21393
|
-
} } });
|
|
21394
|
-
if (refreshed) {
|
|
21395
|
-
authRecord = refreshed;
|
|
21396
|
-
saveStoredAuthToJson(refreshed);
|
|
21397
|
-
}
|
|
21398
|
-
}
|
|
21399
|
-
if (isGL) {
|
|
21400
|
-
const parsed = parseGenerativeLanguageRequest(rawUrl);
|
|
21401
|
-
modelName = parsed?.effectiveModel;
|
|
21402
|
-
if (modelName) {
|
|
21403
|
-
lastInterceptedModel = modelName;
|
|
21404
|
-
}
|
|
21405
|
-
if (typeof event.headers.delete === "function") {
|
|
21406
|
-
event.headers.delete("x-goog-api-key");
|
|
21407
|
-
event.headers.delete("api-key");
|
|
21408
|
-
} else {
|
|
21409
|
-
for (const key of Object.keys(event.headers)) {
|
|
21410
|
-
const lower = key.toLowerCase();
|
|
21411
|
-
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21412
|
-
delete event.headers[key];
|
|
21413
|
-
}
|
|
21414
|
-
}
|
|
21415
|
-
}
|
|
21416
|
-
if (event.request?.headers) {
|
|
21417
|
-
if (typeof event.request.headers.delete === "function") {
|
|
21418
|
-
event.request.headers.delete("x-goog-api-key");
|
|
21419
|
-
event.request.headers.delete("api-key");
|
|
21420
|
-
} else {
|
|
21421
|
-
for (const key of Object.keys(event.request.headers)) {
|
|
21422
|
-
const lower = key.toLowerCase();
|
|
21423
|
-
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21424
|
-
delete event.request.headers[key];
|
|
21425
|
-
}
|
|
21426
|
-
}
|
|
21427
|
-
}
|
|
21428
|
-
}
|
|
21429
|
-
let cleanUrl = rawUrl;
|
|
21430
|
-
try {
|
|
21431
|
-
const parsedUrl = new URL(rawUrl);
|
|
21432
|
-
let urlChanged = false;
|
|
21433
|
-
for (const param of ["key", "x-goog-api-key", "api-key"]) {
|
|
21434
|
-
if (parsedUrl.searchParams.has(param)) {
|
|
21435
|
-
parsedUrl.searchParams.delete(param);
|
|
21436
|
-
urlChanged = true;
|
|
21437
|
-
}
|
|
21438
|
-
}
|
|
21439
|
-
if (urlChanged) {
|
|
21440
|
-
cleanUrl = parsedUrl.toString();
|
|
21441
|
-
}
|
|
21442
|
-
} catch {
|
|
21443
|
-
}
|
|
21444
|
-
if (authRecord && authRecord.access) {
|
|
21445
|
-
let projectContext;
|
|
21446
|
-
try {
|
|
21447
|
-
projectContext = await ensureProjectContext(
|
|
21448
|
-
authRecord,
|
|
21449
|
-
{ auth: { set: async () => {
|
|
21450
|
-
} } },
|
|
21451
|
-
void 0,
|
|
21452
|
-
modelName
|
|
21453
|
-
);
|
|
21454
|
-
} catch {
|
|
21455
|
-
projectContext = {
|
|
21456
|
-
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
21457
|
-
auth: authRecord
|
|
21458
|
-
};
|
|
21459
|
-
}
|
|
21460
|
-
const originalRequestedModel = modelName;
|
|
21461
|
-
let modifiedUrl = cleanUrl;
|
|
21462
|
-
if (originalRequestedModel) {
|
|
21463
|
-
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21464
|
-
const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
|
|
21465
|
-
const resolvedBase = resolveModelTier2(originalBase, { headers: initHeaders });
|
|
21466
|
-
if (originalBase !== resolvedBase) {
|
|
21467
|
-
modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
21468
|
-
}
|
|
21469
|
-
}
|
|
21470
|
-
let bodyPayload = event.body;
|
|
21471
|
-
if (bodyPayload === void 0 && event.request) {
|
|
21472
|
-
if (typeof event.request.clone === "function") {
|
|
21473
|
-
try {
|
|
21474
|
-
bodyPayload = await event.request.clone().text();
|
|
21475
|
-
} catch {
|
|
21476
|
-
}
|
|
21477
|
-
} else if (event.request.body !== void 0) {
|
|
21478
|
-
bodyPayload = event.request.body;
|
|
21479
|
-
}
|
|
21480
|
-
}
|
|
21481
|
-
let preExistingUserAgent;
|
|
21482
|
-
if (typeof event.headers?.get === "function") {
|
|
21483
|
-
preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
|
|
21484
|
-
} else if (event.headers && typeof event.headers === "object") {
|
|
21485
|
-
preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
|
|
21486
|
-
}
|
|
21487
|
-
if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
|
|
21488
|
-
preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
|
|
21489
|
-
} else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
|
|
21490
|
-
preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
|
|
21491
|
-
}
|
|
21492
|
-
const method = event.method || event.request?.method || "POST";
|
|
21493
|
-
const requestHeaders = event.headers || event.request?.headers;
|
|
21494
|
-
const transformed = prepareAgyRequest(
|
|
21495
|
-
modifiedUrl,
|
|
21496
|
-
{
|
|
21497
|
-
method,
|
|
21498
|
-
headers: requestHeaders,
|
|
21499
|
-
body: bodyPayload
|
|
21500
|
-
},
|
|
21501
|
-
authRecord.access,
|
|
21502
|
-
projectContext.effectiveProjectId
|
|
21503
|
-
);
|
|
21504
|
-
const targetUrl = toUrlString2(transformed.request);
|
|
21505
|
-
if (typeof event.url === "string") {
|
|
21506
|
-
event.url = targetUrl;
|
|
21507
|
-
}
|
|
21508
|
-
if (event.request && typeof event.request === "object") {
|
|
21509
|
-
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21510
|
-
event.request = new Request(targetUrl, {
|
|
21511
|
-
method: transformed.init.method,
|
|
21512
|
-
headers: transformed.init.headers,
|
|
21513
|
-
body: transformed.init.body
|
|
21514
|
-
});
|
|
21515
|
-
} else if (typeof event.request.url === "string") {
|
|
21516
|
-
try {
|
|
21517
|
-
event.request.url = targetUrl;
|
|
21518
|
-
} catch {
|
|
21519
|
-
}
|
|
21520
|
-
}
|
|
21521
|
-
}
|
|
21522
|
-
const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
|
|
21523
|
-
for (const [k, v] of headerEntries) {
|
|
21524
|
-
const lowerK = k.toLowerCase();
|
|
21525
|
-
if (lowerK === "user-agent") {
|
|
21526
|
-
if (preExistingUserAgent) {
|
|
21527
|
-
continue;
|
|
21528
|
-
}
|
|
21529
|
-
if (typeof event.headers?.set === "function") {
|
|
21530
|
-
event.headers.set("User-Agent", v);
|
|
21531
|
-
} else if (event.headers) {
|
|
21532
|
-
event.headers["User-Agent"] = v;
|
|
21533
|
-
}
|
|
21534
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21535
|
-
event.request.headers.set("User-Agent", v);
|
|
21536
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21537
|
-
event.request.headers["User-Agent"] = v;
|
|
21538
|
-
}
|
|
21539
|
-
continue;
|
|
21540
|
-
}
|
|
21541
|
-
if (typeof event.headers?.set === "function") {
|
|
21542
|
-
event.headers.set(k, v);
|
|
21543
|
-
} else if (event.headers) {
|
|
21544
|
-
event.headers[k] = v;
|
|
21545
|
-
}
|
|
21546
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21547
|
-
event.request.headers.set(k, v);
|
|
21548
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21549
|
-
event.request.headers[k] = v;
|
|
21550
|
-
}
|
|
21551
|
-
}
|
|
21552
|
-
if (transformed.init.body !== void 0) {
|
|
21553
|
-
event.body = transformed.init.body;
|
|
21554
|
-
if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
|
|
21555
|
-
event.request.body = transformed.init.body;
|
|
21556
|
-
}
|
|
21557
|
-
}
|
|
21558
|
-
} else {
|
|
21559
|
-
if (typeof event.url === "string") {
|
|
21560
|
-
event.url = cleanUrl;
|
|
21561
|
-
}
|
|
21562
|
-
if (event.request && typeof event.request === "object") {
|
|
21563
|
-
if (typeof event.request.url === "string") {
|
|
21564
|
-
event.request.url = cleanUrl;
|
|
21565
|
-
}
|
|
21566
|
-
}
|
|
21567
|
-
}
|
|
21568
|
-
}
|
|
21569
|
-
if (authRecord && authRecord.access) {
|
|
21570
|
-
if (typeof event.headers?.set === "function") {
|
|
21571
|
-
event.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21572
|
-
} else if (event.headers) {
|
|
21573
|
-
event.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21574
|
-
}
|
|
21575
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21576
|
-
event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21577
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21578
|
-
event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21579
|
-
}
|
|
21580
|
-
}
|
|
21581
|
-
const userAgent = buildAgyCliUserAgent(modelName);
|
|
21582
|
-
if (typeof event.headers?.set === "function") {
|
|
21583
|
-
if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
|
|
21584
|
-
event.headers.set("User-Agent", userAgent);
|
|
21585
|
-
}
|
|
21586
|
-
} else if (event.headers) {
|
|
21587
|
-
if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
|
|
21588
|
-
event.headers["User-Agent"] = userAgent;
|
|
21589
|
-
}
|
|
21590
|
-
}
|
|
21591
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21592
|
-
if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
|
|
21593
|
-
event.request.headers.set("User-Agent", userAgent);
|
|
21594
|
-
}
|
|
21595
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21596
|
-
if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
|
|
21597
|
-
event.request.headers["User-Agent"] = userAgent;
|
|
21598
|
-
}
|
|
21599
|
-
}
|
|
21600
|
-
},
|
|
21601
|
-
{ providerID: AGY_PROVIDER_ID }
|
|
21602
|
-
);
|
|
21603
|
-
ctx.session.hook(
|
|
21604
|
-
"http.response",
|
|
21605
|
-
async (event) => {
|
|
21606
|
-
if (!event || !event.response) return;
|
|
21607
|
-
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21608
|
-
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21609
|
-
if (isInternal && event.response instanceof Response) {
|
|
21610
|
-
const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
|
|
21611
|
-
const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || lastInterceptedModel;
|
|
21612
|
-
const transformed = await transformAgyResponse(
|
|
21613
|
-
event.response,
|
|
21614
|
-
!!isStreaming,
|
|
21615
|
-
null,
|
|
21616
|
-
parsedModel,
|
|
21617
|
-
void 0,
|
|
21618
|
-
void 0
|
|
21619
|
-
);
|
|
21620
|
-
event.response = transformed;
|
|
21621
|
-
}
|
|
21622
|
-
},
|
|
21623
|
-
{ providerID: AGY_PROVIDER_ID }
|
|
21624
|
-
);
|
|
21625
|
-
ctx.session.hook(
|
|
21626
|
-
"retry",
|
|
21627
|
-
async (event) => {
|
|
21628
|
-
if (!event) return;
|
|
21629
|
-
const response = event.response;
|
|
21630
|
-
if (response instanceof Response) {
|
|
21631
|
-
if (response.status === 429 || response.status === 503) {
|
|
21632
|
-
const quota = await classifyQuotaResponse(response);
|
|
21633
|
-
if (quota?.retryDelayMs) {
|
|
21634
|
-
event.retryDelayMs = quota.retryDelayMs;
|
|
21635
|
-
} else {
|
|
21636
|
-
event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
|
|
21637
|
-
}
|
|
21638
|
-
}
|
|
21639
|
-
} else if (event.details && Array.isArray(event.details)) {
|
|
21640
|
-
const retryInfo = event.details.find(
|
|
21641
|
-
(d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
|
|
21642
|
-
);
|
|
21643
|
-
if (retryInfo?.retryDelay) {
|
|
21644
|
-
const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
|
|
21645
|
-
if (delayMs !== null) {
|
|
21646
|
-
event.retryDelayMs = delayMs;
|
|
21647
|
-
}
|
|
21648
|
-
}
|
|
21649
|
-
}
|
|
21650
|
-
},
|
|
21651
|
-
{ providerID: AGY_PROVIDER_ID }
|
|
21652
|
-
);
|
|
21580
|
+
registerV2SessionHooks(ctx);
|
|
21653
21581
|
}
|
|
21654
21582
|
var v2PluginDefinition = defineOpenCodeV2Plugin({
|
|
21655
21583
|
id: AGY_PROVIDER_ID,
|