@anthonyhaussman/opencode-agy-auth 1.2.10 → 1.2.11-alpha.0
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/LICENSE +176 -0
- package/README.md +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +972 -164
- package/dist/index.js.map +1 -1
- package/dist/src/constants.d.ts +2 -0
- package/dist/src/plugin/headers.d.ts +7 -0
- package/dist/src/plugin/oauth-authorize.d.ts +9 -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/types.d.ts +35 -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 +14 -0
- package/dist/src/plugin.d.ts +2 -0
- package/dist/src/sdk/agy-cli-version.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -268,7 +268,7 @@ function createAgyActivityRequestId() {
|
|
|
268
268
|
import os from "os";
|
|
269
269
|
|
|
270
270
|
// src/sdk/agy-cli-version.ts
|
|
271
|
-
var AGY_CLI_VERSION = "1.2.
|
|
271
|
+
var AGY_CLI_VERSION = "1.2.11";
|
|
272
272
|
|
|
273
273
|
// src/sdk/user-agent.ts
|
|
274
274
|
var cachedUserAgent = null;
|
|
@@ -579,6 +579,12 @@ async function resolveQuotaResetDelay(accessToken, projectId, model, userAgentMo
|
|
|
579
579
|
return null;
|
|
580
580
|
}
|
|
581
581
|
}
|
|
582
|
+
var retryInternals = {
|
|
583
|
+
parseRetryDelayValue,
|
|
584
|
+
parseRetryDelayFromMessage,
|
|
585
|
+
findResetTimeForModel,
|
|
586
|
+
resolveQuotaResetDelay
|
|
587
|
+
};
|
|
582
588
|
|
|
583
589
|
// src/sdk/retry/helpers.ts
|
|
584
590
|
var DEFAULT_MAX_ATTEMPTS = 3;
|
|
@@ -1575,7 +1581,11 @@ function createOAuthAuthorizeMethod(options) {
|
|
|
1575
1581
|
const isHeadless = !!(process.env.SSH_CONNECTION || process.env.SSH_CLIENT || process.env.SSH_TTY || process.env.OPENCODE_HEADLESS);
|
|
1576
1582
|
const authorization = await authorizeAgy();
|
|
1577
1583
|
if (!isHeadless) {
|
|
1578
|
-
|
|
1584
|
+
if (options?.openBrowser) {
|
|
1585
|
+
options.openBrowser(authorization.url);
|
|
1586
|
+
} else {
|
|
1587
|
+
openBrowserUrl(authorization.url);
|
|
1588
|
+
}
|
|
1579
1589
|
}
|
|
1580
1590
|
return {
|
|
1581
1591
|
url: authorization.url,
|
|
@@ -1629,16 +1639,23 @@ function parseOAuthCallbackInput(input) {
|
|
|
1629
1639
|
}
|
|
1630
1640
|
return { code: trimmed };
|
|
1631
1641
|
}
|
|
1642
|
+
function defaultOpenBrowserLauncher(command, args) {
|
|
1643
|
+
const child = spawn(command, args, {
|
|
1644
|
+
stdio: "ignore",
|
|
1645
|
+
detached: true
|
|
1646
|
+
});
|
|
1647
|
+
child.unref?.();
|
|
1648
|
+
}
|
|
1649
|
+
var openBrowserLauncher = defaultOpenBrowserLauncher;
|
|
1632
1650
|
function openBrowserUrl(url2) {
|
|
1651
|
+
if ((process.env.NODE_ENV === "test" || process.env.VITEST) && openBrowserLauncher === defaultOpenBrowserLauncher) {
|
|
1652
|
+
return;
|
|
1653
|
+
}
|
|
1633
1654
|
try {
|
|
1634
1655
|
const platform2 = process.platform;
|
|
1635
1656
|
const command = platform2 === "darwin" ? "open" : platform2 === "win32" ? "rundll32" : "xdg-open";
|
|
1636
1657
|
const args = platform2 === "win32" ? ["url.dll,FileProtocolHandler", url2] : [url2];
|
|
1637
|
-
|
|
1638
|
-
stdio: "ignore",
|
|
1639
|
-
detached: true
|
|
1640
|
-
});
|
|
1641
|
-
child.unref?.();
|
|
1658
|
+
openBrowserLauncher(command, args);
|
|
1642
1659
|
} catch {
|
|
1643
1660
|
}
|
|
1644
1661
|
}
|
|
@@ -15320,6 +15337,12 @@ function formatRelativeResetTime(resetTime) {
|
|
|
15320
15337
|
|
|
15321
15338
|
// src/plugin/quota.ts
|
|
15322
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
|
+
`;
|
|
15323
15346
|
function createAgyQuotaTool({
|
|
15324
15347
|
client,
|
|
15325
15348
|
getAuthResolver,
|
|
@@ -15559,6 +15582,12 @@ function splitModelVariant(modelId) {
|
|
|
15559
15582
|
|
|
15560
15583
|
// src/plugin/quota-summary.ts
|
|
15561
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
|
+
`;
|
|
15562
15591
|
function createAgyQuotaSummaryTool({
|
|
15563
15592
|
client,
|
|
15564
15593
|
getAuthResolver,
|
|
@@ -16056,6 +16085,7 @@ var models_default = {
|
|
|
16056
16085
|
106143956,
|
|
16057
16086
|
105856899,
|
|
16058
16087
|
106064030,
|
|
16088
|
+
106264162,
|
|
16059
16089
|
106711598,
|
|
16060
16090
|
106106760,
|
|
16061
16091
|
106021688,
|
|
@@ -16081,6 +16111,7 @@ var models_default = {
|
|
|
16081
16111
|
106121399,
|
|
16082
16112
|
106100654,
|
|
16083
16113
|
106064028,
|
|
16114
|
+
106264150,
|
|
16084
16115
|
105906495,
|
|
16085
16116
|
106283614,
|
|
16086
16117
|
106640124,
|
|
@@ -16147,7 +16178,7 @@ var models_default = {
|
|
|
16147
16178
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16148
16179
|
quotaInfo: {
|
|
16149
16180
|
remainingFraction: 1,
|
|
16150
|
-
resetTime: "2026-09-
|
|
16181
|
+
resetTime: "2026-09-25T11:24:59Z"
|
|
16151
16182
|
},
|
|
16152
16183
|
recommended: true,
|
|
16153
16184
|
supportedMimeTypes: {
|
|
@@ -16186,7 +16217,7 @@ var models_default = {
|
|
|
16186
16217
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16187
16218
|
quotaInfo: {
|
|
16188
16219
|
remainingFraction: 1,
|
|
16189
|
-
resetTime: "2026-09-
|
|
16220
|
+
resetTime: "2026-09-25T11:24:59Z"
|
|
16190
16221
|
},
|
|
16191
16222
|
recommended: true,
|
|
16192
16223
|
supportedMimeTypes: {
|
|
@@ -16222,8 +16253,8 @@ var models_default = {
|
|
|
16222
16253
|
},
|
|
16223
16254
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16224
16255
|
quotaInfo: {
|
|
16225
|
-
remainingFraction: 0.
|
|
16226
|
-
resetTime: "2026-09-
|
|
16256
|
+
remainingFraction: 0.8656157,
|
|
16257
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16227
16258
|
},
|
|
16228
16259
|
recommended: true,
|
|
16229
16260
|
supportedMimeTypes: {
|
|
@@ -16305,8 +16336,8 @@ var models_default = {
|
|
|
16305
16336
|
},
|
|
16306
16337
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16307
16338
|
quotaInfo: {
|
|
16308
|
-
remainingFraction: 0.
|
|
16309
|
-
resetTime: "2026-09-
|
|
16339
|
+
remainingFraction: 0.8656157,
|
|
16340
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16310
16341
|
},
|
|
16311
16342
|
recommended: true,
|
|
16312
16343
|
supportedMimeTypes: {
|
|
@@ -16388,8 +16419,8 @@ var models_default = {
|
|
|
16388
16419
|
},
|
|
16389
16420
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16390
16421
|
quotaInfo: {
|
|
16391
|
-
remainingFraction: 0.
|
|
16392
|
-
resetTime: "2026-09-
|
|
16422
|
+
remainingFraction: 0.8656157,
|
|
16423
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16393
16424
|
},
|
|
16394
16425
|
recommended: true,
|
|
16395
16426
|
supportedMimeTypes: {
|
|
@@ -16468,8 +16499,8 @@ var models_default = {
|
|
|
16468
16499
|
},
|
|
16469
16500
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16470
16501
|
quotaInfo: {
|
|
16471
|
-
remainingFraction: 0.
|
|
16472
|
-
resetTime: "2026-09-
|
|
16502
|
+
remainingFraction: 0.8656157,
|
|
16503
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16473
16504
|
},
|
|
16474
16505
|
recommended: true,
|
|
16475
16506
|
requiresImageOutputOutsideFunctionResponses: true,
|
|
@@ -16549,8 +16580,8 @@ var models_default = {
|
|
|
16549
16580
|
},
|
|
16550
16581
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16551
16582
|
quotaInfo: {
|
|
16552
|
-
remainingFraction: 0.
|
|
16553
|
-
resetTime: "2026-09-
|
|
16583
|
+
remainingFraction: 0.8656157,
|
|
16584
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16554
16585
|
},
|
|
16555
16586
|
recommended: true,
|
|
16556
16587
|
supportedMimeTypes: {
|
|
@@ -16654,8 +16685,8 @@ var models_default = {
|
|
|
16654
16685
|
},
|
|
16655
16686
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16656
16687
|
quotaInfo: {
|
|
16657
|
-
remainingFraction: 0.
|
|
16658
|
-
resetTime: "2026-09-
|
|
16688
|
+
remainingFraction: 0.8656157,
|
|
16689
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16659
16690
|
},
|
|
16660
16691
|
recommended: true,
|
|
16661
16692
|
supportedMimeTypes: {
|
|
@@ -16724,8 +16755,8 @@ var models_default = {
|
|
|
16724
16755
|
model: "MODEL_PLACEHOLDER_M21",
|
|
16725
16756
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16726
16757
|
quotaInfo: {
|
|
16727
|
-
remainingFraction: 0.
|
|
16728
|
-
resetTime: "2026-09-
|
|
16758
|
+
remainingFraction: 0.8656157,
|
|
16759
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16729
16760
|
}
|
|
16730
16761
|
},
|
|
16731
16762
|
"gemini-3.1-flash-lite": {
|
|
@@ -16743,8 +16774,8 @@ var models_default = {
|
|
|
16743
16774
|
},
|
|
16744
16775
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16745
16776
|
quotaInfo: {
|
|
16746
|
-
remainingFraction: 0.
|
|
16747
|
-
resetTime: "2026-09-
|
|
16777
|
+
remainingFraction: 0.8656157,
|
|
16778
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16748
16779
|
}
|
|
16749
16780
|
},
|
|
16750
16781
|
"gemini-3.1-pro-high": {
|
|
@@ -16775,8 +16806,8 @@ var models_default = {
|
|
|
16775
16806
|
},
|
|
16776
16807
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16777
16808
|
quotaInfo: {
|
|
16778
|
-
remainingFraction: 0.
|
|
16779
|
-
resetTime: "2026-09-
|
|
16809
|
+
remainingFraction: 0.8656157,
|
|
16810
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16780
16811
|
},
|
|
16781
16812
|
recommended: true,
|
|
16782
16813
|
supportedMimeTypes: {
|
|
@@ -16866,8 +16897,8 @@ var models_default = {
|
|
|
16866
16897
|
},
|
|
16867
16898
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16868
16899
|
quotaInfo: {
|
|
16869
|
-
remainingFraction: 0.
|
|
16870
|
-
resetTime: "2026-09-
|
|
16900
|
+
remainingFraction: 0.8656157,
|
|
16901
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16871
16902
|
},
|
|
16872
16903
|
recommended: true,
|
|
16873
16904
|
supportedMimeTypes: {
|
|
@@ -16971,8 +17002,8 @@ var models_default = {
|
|
|
16971
17002
|
},
|
|
16972
17003
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16973
17004
|
quotaInfo: {
|
|
16974
|
-
remainingFraction: 0.
|
|
16975
|
-
resetTime: "2026-09-
|
|
17005
|
+
remainingFraction: 0.8656157,
|
|
17006
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
16976
17007
|
},
|
|
16977
17008
|
recommended: true,
|
|
16978
17009
|
supportedMimeTypes: {
|
|
@@ -17054,8 +17085,8 @@ var models_default = {
|
|
|
17054
17085
|
},
|
|
17055
17086
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17056
17087
|
quotaInfo: {
|
|
17057
|
-
remainingFraction: 0.
|
|
17058
|
-
resetTime: "2026-09-
|
|
17088
|
+
remainingFraction: 0.8656157,
|
|
17089
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17059
17090
|
},
|
|
17060
17091
|
recommended: true,
|
|
17061
17092
|
supportedMimeTypes: {
|
|
@@ -17161,8 +17192,8 @@ var models_default = {
|
|
|
17161
17192
|
},
|
|
17162
17193
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17163
17194
|
quotaInfo: {
|
|
17164
|
-
remainingFraction: 0.
|
|
17165
|
-
resetTime: "2026-09-
|
|
17195
|
+
remainingFraction: 0.8656157,
|
|
17196
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17166
17197
|
},
|
|
17167
17198
|
recommended: true,
|
|
17168
17199
|
supportedMimeTypes: {
|
|
@@ -17280,8 +17311,8 @@ var models_default = {
|
|
|
17280
17311
|
},
|
|
17281
17312
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17282
17313
|
quotaInfo: {
|
|
17283
|
-
remainingFraction: 0.
|
|
17284
|
-
resetTime: "2026-09-
|
|
17314
|
+
remainingFraction: 0.8656157,
|
|
17315
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17285
17316
|
},
|
|
17286
17317
|
recommended: true,
|
|
17287
17318
|
supportedMimeTypes: {
|
|
@@ -17399,8 +17430,8 @@ var models_default = {
|
|
|
17399
17430
|
},
|
|
17400
17431
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17401
17432
|
quotaInfo: {
|
|
17402
|
-
remainingFraction: 0.
|
|
17403
|
-
resetTime: "2026-09-
|
|
17433
|
+
remainingFraction: 0.8656157,
|
|
17434
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17404
17435
|
},
|
|
17405
17436
|
recommended: true,
|
|
17406
17437
|
supportedMimeTypes: {
|
|
@@ -17518,8 +17549,8 @@ var models_default = {
|
|
|
17518
17549
|
},
|
|
17519
17550
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17520
17551
|
quotaInfo: {
|
|
17521
|
-
remainingFraction: 0.
|
|
17522
|
-
resetTime: "2026-09-
|
|
17552
|
+
remainingFraction: 0.8656157,
|
|
17553
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17523
17554
|
},
|
|
17524
17555
|
recommended: true,
|
|
17525
17556
|
supportedMimeTypes: {
|
|
@@ -17636,8 +17667,8 @@ var models_default = {
|
|
|
17636
17667
|
},
|
|
17637
17668
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17638
17669
|
quotaInfo: {
|
|
17639
|
-
remainingFraction: 0.
|
|
17640
|
-
resetTime: "2026-09-
|
|
17670
|
+
remainingFraction: 0.8656157,
|
|
17671
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17641
17672
|
},
|
|
17642
17673
|
recommended: true,
|
|
17643
17674
|
supportedMimeTypes: {
|
|
@@ -17747,8 +17778,8 @@ var models_default = {
|
|
|
17747
17778
|
},
|
|
17748
17779
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17749
17780
|
quotaInfo: {
|
|
17750
|
-
remainingFraction: 0.
|
|
17751
|
-
resetTime: "2026-09-
|
|
17781
|
+
remainingFraction: 0.8656157,
|
|
17782
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17752
17783
|
},
|
|
17753
17784
|
recommended: true,
|
|
17754
17785
|
supportedMimeTypes: {
|
|
@@ -17860,8 +17891,8 @@ var models_default = {
|
|
|
17860
17891
|
},
|
|
17861
17892
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17862
17893
|
quotaInfo: {
|
|
17863
|
-
remainingFraction: 0.
|
|
17864
|
-
resetTime: "2026-09-
|
|
17894
|
+
remainingFraction: 0.8656157,
|
|
17895
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17865
17896
|
},
|
|
17866
17897
|
recommended: true,
|
|
17867
17898
|
supportedMimeTypes: {
|
|
@@ -17973,8 +18004,8 @@ var models_default = {
|
|
|
17973
18004
|
},
|
|
17974
18005
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17975
18006
|
quotaInfo: {
|
|
17976
|
-
remainingFraction: 0.
|
|
17977
|
-
resetTime: "2026-09-
|
|
18007
|
+
remainingFraction: 0.8656157,
|
|
18008
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
17978
18009
|
},
|
|
17979
18010
|
recommended: true,
|
|
17980
18011
|
supportedMimeTypes: {
|
|
@@ -18085,8 +18116,8 @@ var models_default = {
|
|
|
18085
18116
|
},
|
|
18086
18117
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18087
18118
|
quotaInfo: {
|
|
18088
|
-
remainingFraction: 0.
|
|
18089
|
-
resetTime: "2026-09-
|
|
18119
|
+
remainingFraction: 0.8656157,
|
|
18120
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
18090
18121
|
},
|
|
18091
18122
|
recommended: true,
|
|
18092
18123
|
supportedMimeTypes: {
|
|
@@ -18196,8 +18227,8 @@ var models_default = {
|
|
|
18196
18227
|
},
|
|
18197
18228
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18198
18229
|
quotaInfo: {
|
|
18199
|
-
remainingFraction: 0.
|
|
18200
|
-
resetTime: "2026-09-
|
|
18230
|
+
remainingFraction: 0.8656157,
|
|
18231
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
18201
18232
|
},
|
|
18202
18233
|
recommended: true,
|
|
18203
18234
|
supportedMimeTypes: {
|
|
@@ -18309,8 +18340,8 @@ var models_default = {
|
|
|
18309
18340
|
},
|
|
18310
18341
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18311
18342
|
quotaInfo: {
|
|
18312
|
-
remainingFraction: 0.
|
|
18313
|
-
resetTime: "2026-09-
|
|
18343
|
+
remainingFraction: 0.8656157,
|
|
18344
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
18314
18345
|
},
|
|
18315
18346
|
recommended: true,
|
|
18316
18347
|
supportedMimeTypes: {
|
|
@@ -18422,8 +18453,8 @@ var models_default = {
|
|
|
18422
18453
|
},
|
|
18423
18454
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18424
18455
|
quotaInfo: {
|
|
18425
|
-
remainingFraction: 0.
|
|
18426
|
-
resetTime: "2026-09-
|
|
18456
|
+
remainingFraction: 0.8656157,
|
|
18457
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
18427
18458
|
},
|
|
18428
18459
|
recommended: true,
|
|
18429
18460
|
supportedMimeTypes: {
|
|
@@ -18534,8 +18565,8 @@ var models_default = {
|
|
|
18534
18565
|
},
|
|
18535
18566
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18536
18567
|
quotaInfo: {
|
|
18537
|
-
remainingFraction: 0.
|
|
18538
|
-
resetTime: "2026-09-
|
|
18568
|
+
remainingFraction: 0.8656157,
|
|
18569
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
18539
18570
|
},
|
|
18540
18571
|
recommended: true,
|
|
18541
18572
|
supportedMimeTypes: {
|
|
@@ -18624,8 +18655,8 @@ var models_default = {
|
|
|
18624
18655
|
},
|
|
18625
18656
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18626
18657
|
quotaInfo: {
|
|
18627
|
-
remainingFraction: 0.
|
|
18628
|
-
resetTime: "2026-09-
|
|
18658
|
+
remainingFraction: 0.8656157,
|
|
18659
|
+
resetTime: "2026-09-25T09:39:31Z"
|
|
18629
18660
|
},
|
|
18630
18661
|
recommended: true,
|
|
18631
18662
|
supportedMimeTypes: {
|
|
@@ -18702,7 +18733,7 @@ var models_default = {
|
|
|
18702
18733
|
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
18703
18734
|
quotaInfo: {
|
|
18704
18735
|
remainingFraction: 1,
|
|
18705
|
-
resetTime: "2026-09-
|
|
18736
|
+
resetTime: "2026-09-25T11:24:59Z"
|
|
18706
18737
|
},
|
|
18707
18738
|
recommended: true,
|
|
18708
18739
|
supportsThinking: true,
|
|
@@ -19774,9 +19805,14 @@ function normalizeToolSchemaTypes(tools, toolMapper) {
|
|
|
19774
19805
|
fn.name = toolMapper ? toolMapper.toGemini(fn.name) : sanitizeToolName(fn.name);
|
|
19775
19806
|
}
|
|
19776
19807
|
if (fn) {
|
|
19808
|
+
if (!fn.parameters) {
|
|
19809
|
+
fn.parameters = fn.parameters_json_schema ?? fn.parametersJsonSchema;
|
|
19810
|
+
}
|
|
19777
19811
|
if (!fn.parameters) {
|
|
19778
19812
|
fn.parameters = { type: "OBJECT", properties: {} };
|
|
19779
19813
|
}
|
|
19814
|
+
delete fn.parameters_json_schema;
|
|
19815
|
+
delete fn.parametersJsonSchema;
|
|
19780
19816
|
sanitizeSchema(fn.parameters);
|
|
19781
19817
|
}
|
|
19782
19818
|
}
|
|
@@ -20201,22 +20237,81 @@ var ChatLoggerImpl = class {
|
|
|
20201
20237
|
}
|
|
20202
20238
|
};
|
|
20203
20239
|
|
|
20204
|
-
// src/plugin.ts
|
|
20205
|
-
|
|
20206
|
-
|
|
20207
|
-
|
|
20208
|
-
|
|
20209
|
-
|
|
20210
|
-
|
|
20211
|
-
|
|
20212
|
-
|
|
20240
|
+
// src/plugin/headers.ts
|
|
20241
|
+
function getSafeHeader(headers, key) {
|
|
20242
|
+
if (!headers) {
|
|
20243
|
+
return void 0;
|
|
20244
|
+
}
|
|
20245
|
+
const targetKey = key.toLowerCase();
|
|
20246
|
+
if (typeof headers.get === "function") {
|
|
20247
|
+
try {
|
|
20248
|
+
return headers.get(targetKey) || void 0;
|
|
20249
|
+
} catch {
|
|
20250
|
+
}
|
|
20251
|
+
}
|
|
20252
|
+
if (Array.isArray(headers)) {
|
|
20253
|
+
const found = headers.find((item) => {
|
|
20254
|
+
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20255
|
+
return item[0].toLowerCase() === targetKey;
|
|
20256
|
+
}
|
|
20257
|
+
return false;
|
|
20258
|
+
});
|
|
20259
|
+
return found ? String(found[1]) : void 0;
|
|
20260
|
+
}
|
|
20261
|
+
if (typeof headers === "object") {
|
|
20262
|
+
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20263
|
+
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20264
|
+
}
|
|
20265
|
+
return void 0;
|
|
20266
|
+
}
|
|
20267
|
+
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20268
|
+
if (typeof globalThis.Headers !== "undefined") {
|
|
20269
|
+
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20270
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20271
|
+
headers.set(k, v);
|
|
20272
|
+
}
|
|
20273
|
+
return headers;
|
|
20274
|
+
}
|
|
20275
|
+
if (Array.isArray(initHeaders)) {
|
|
20276
|
+
const nextHeaders2 = [...initHeaders];
|
|
20277
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20278
|
+
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20279
|
+
if (idx !== -1) {
|
|
20280
|
+
nextHeaders2[idx] = [k, v];
|
|
20281
|
+
} else {
|
|
20282
|
+
nextHeaders2.push([k, v]);
|
|
20283
|
+
}
|
|
20284
|
+
}
|
|
20285
|
+
return nextHeaders2;
|
|
20286
|
+
}
|
|
20287
|
+
const nextHeaders = {};
|
|
20288
|
+
if (initHeaders && typeof initHeaders === "object") {
|
|
20289
|
+
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20290
|
+
nextHeaders[k] = String(v);
|
|
20291
|
+
}
|
|
20292
|
+
}
|
|
20293
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20294
|
+
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20295
|
+
if (existingKey) {
|
|
20296
|
+
nextHeaders[existingKey] = v;
|
|
20297
|
+
} else {
|
|
20298
|
+
nextHeaders[k] = v;
|
|
20299
|
+
}
|
|
20300
|
+
}
|
|
20301
|
+
return nextHeaders;
|
|
20302
|
+
}
|
|
20303
|
+
function toUrlString(value) {
|
|
20304
|
+
if (typeof value === "string") {
|
|
20305
|
+
return value;
|
|
20306
|
+
}
|
|
20307
|
+
const candidate = value.url;
|
|
20308
|
+
if (candidate) {
|
|
20309
|
+
return candidate;
|
|
20310
|
+
}
|
|
20311
|
+
return value.toString();
|
|
20312
|
+
}
|
|
20213
20313
|
|
|
20214
|
-
|
|
20215
|
-
Do not call other tools.
|
|
20216
|
-
`;
|
|
20217
|
-
var latestAgyAuthResolver;
|
|
20218
|
-
var latestAgyConfiguredProjectId;
|
|
20219
|
-
var latestAgyUserAgentModel;
|
|
20314
|
+
// src/plugin/tier.ts
|
|
20220
20315
|
var STATIC_MODELS_SIMPLE = {
|
|
20221
20316
|
"gemini-3.8-flash": {
|
|
20222
20317
|
name: "Gemini 3.8 Flash",
|
|
@@ -20304,6 +20399,39 @@ var TIER_MAPPING = {
|
|
|
20304
20399
|
high: "gemini-3.1-pro-high"
|
|
20305
20400
|
}
|
|
20306
20401
|
};
|
|
20402
|
+
function resolveModelTier(baseModelId, headersOrInit) {
|
|
20403
|
+
const parts = baseModelId.split("@");
|
|
20404
|
+
const base = parts[0] || "";
|
|
20405
|
+
const suffixTier = parts[1]?.toLowerCase();
|
|
20406
|
+
const mapping = TIER_MAPPING[base];
|
|
20407
|
+
if (!mapping) {
|
|
20408
|
+
return baseModelId;
|
|
20409
|
+
}
|
|
20410
|
+
const rawHeaders = headersOrInit && typeof headersOrInit === "object" && "headers" in headersOrInit ? headersOrInit.headers : headersOrInit;
|
|
20411
|
+
const headerTier = getSafeHeader(rawHeaders, "x-agy-tier")?.toLowerCase() || null;
|
|
20412
|
+
const requestedTier = headerTier || suffixTier;
|
|
20413
|
+
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20414
|
+
return mapping[requestedTier] || baseModelId;
|
|
20415
|
+
}
|
|
20416
|
+
return mapping["medium"] ?? mapping["high"] ?? baseModelId;
|
|
20417
|
+
}
|
|
20418
|
+
|
|
20419
|
+
// src/plugin.ts
|
|
20420
|
+
var AGY_QUOTA_COMMAND = "agyquota";
|
|
20421
|
+
var AGY_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
20422
|
+
|
|
20423
|
+
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20424
|
+
Do not call other tools.
|
|
20425
|
+
`;
|
|
20426
|
+
var AGY_QUOTA_SUMMARY_COMMAND = "agyquotasummary";
|
|
20427
|
+
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.
|
|
20428
|
+
|
|
20429
|
+
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20430
|
+
Do not call other tools.
|
|
20431
|
+
`;
|
|
20432
|
+
var latestAgyAuthResolver;
|
|
20433
|
+
var latestAgyConfiguredProjectId;
|
|
20434
|
+
var latestAgyUserAgentModel;
|
|
20307
20435
|
var buildModelFromSimple = (modelId, simple) => {
|
|
20308
20436
|
const isClaude = modelId.startsWith("claude-");
|
|
20309
20437
|
const isGpt = modelId.startsWith("gpt-");
|
|
@@ -20397,83 +20525,6 @@ var STATIC_MODELS = {};
|
|
|
20397
20525
|
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
20398
20526
|
STATIC_MODELS[modelId] = buildModelFromSimple(modelId, simple);
|
|
20399
20527
|
}
|
|
20400
|
-
function getSafeHeader(headers, key) {
|
|
20401
|
-
if (!headers) {
|
|
20402
|
-
return void 0;
|
|
20403
|
-
}
|
|
20404
|
-
const targetKey = key.toLowerCase();
|
|
20405
|
-
if (typeof headers.get === "function") {
|
|
20406
|
-
try {
|
|
20407
|
-
return headers.get(targetKey) || void 0;
|
|
20408
|
-
} catch {
|
|
20409
|
-
}
|
|
20410
|
-
}
|
|
20411
|
-
if (Array.isArray(headers)) {
|
|
20412
|
-
const found = headers.find((item) => {
|
|
20413
|
-
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20414
|
-
return item[0].toLowerCase() === targetKey;
|
|
20415
|
-
}
|
|
20416
|
-
return false;
|
|
20417
|
-
});
|
|
20418
|
-
return found ? String(found[1]) : void 0;
|
|
20419
|
-
}
|
|
20420
|
-
if (typeof headers === "object") {
|
|
20421
|
-
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20422
|
-
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20423
|
-
}
|
|
20424
|
-
return void 0;
|
|
20425
|
-
}
|
|
20426
|
-
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20427
|
-
if (typeof globalThis.Headers !== "undefined") {
|
|
20428
|
-
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20429
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20430
|
-
headers.set(k, v);
|
|
20431
|
-
}
|
|
20432
|
-
return headers;
|
|
20433
|
-
}
|
|
20434
|
-
if (Array.isArray(initHeaders)) {
|
|
20435
|
-
const nextHeaders2 = [...initHeaders];
|
|
20436
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20437
|
-
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20438
|
-
if (idx !== -1) {
|
|
20439
|
-
nextHeaders2[idx] = [k, v];
|
|
20440
|
-
} else {
|
|
20441
|
-
nextHeaders2.push([k, v]);
|
|
20442
|
-
}
|
|
20443
|
-
}
|
|
20444
|
-
return nextHeaders2;
|
|
20445
|
-
}
|
|
20446
|
-
const nextHeaders = {};
|
|
20447
|
-
if (initHeaders && typeof initHeaders === "object") {
|
|
20448
|
-
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20449
|
-
nextHeaders[k] = String(v);
|
|
20450
|
-
}
|
|
20451
|
-
}
|
|
20452
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20453
|
-
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20454
|
-
if (existingKey) {
|
|
20455
|
-
nextHeaders[existingKey] = v;
|
|
20456
|
-
} else {
|
|
20457
|
-
nextHeaders[k] = v;
|
|
20458
|
-
}
|
|
20459
|
-
}
|
|
20460
|
-
return nextHeaders;
|
|
20461
|
-
}
|
|
20462
|
-
function resolveModelTier(baseModelId, init) {
|
|
20463
|
-
const parts = baseModelId.split("@");
|
|
20464
|
-
const base = parts[0] || "";
|
|
20465
|
-
const suffixTier = parts[1]?.toLowerCase();
|
|
20466
|
-
const mapping = TIER_MAPPING[base];
|
|
20467
|
-
if (!mapping) {
|
|
20468
|
-
return baseModelId;
|
|
20469
|
-
}
|
|
20470
|
-
const headerTier = getSafeHeader(init?.headers, "x-agy-tier")?.toLowerCase() || null;
|
|
20471
|
-
const requestedTier = headerTier || suffixTier;
|
|
20472
|
-
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20473
|
-
return mapping[requestedTier] || baseModelId;
|
|
20474
|
-
}
|
|
20475
|
-
return mapping["medium"] ?? mapping["high"];
|
|
20476
|
-
}
|
|
20477
20528
|
var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
20478
20529
|
let latestConfig;
|
|
20479
20530
|
updateStaticModelsWithPricing(STATIC_MODELS);
|
|
@@ -20801,25 +20852,782 @@ async function ensureProjectContextOrThrow(authRecord, client, configuredProject
|
|
|
20801
20852
|
throw error45;
|
|
20802
20853
|
}
|
|
20803
20854
|
}
|
|
20804
|
-
|
|
20805
|
-
|
|
20806
|
-
|
|
20855
|
+
|
|
20856
|
+
// src/plugin/types.ts
|
|
20857
|
+
function defineOpenCodeV2Plugin(def) {
|
|
20858
|
+
return def;
|
|
20859
|
+
}
|
|
20860
|
+
|
|
20861
|
+
// src/plugin/v2-storage.ts
|
|
20862
|
+
import { closeSync, existsSync as existsSync6, mkdirSync as mkdirSync5, openSync, readFileSync as readFileSync5, renameSync as renameSync4, unlinkSync as unlinkSync4, writeFileSync as writeFileSync5 } from "fs";
|
|
20863
|
+
import { randomUUID as randomUUID4 } from "crypto";
|
|
20864
|
+
import { homedir as homedir4 } from "os";
|
|
20865
|
+
import { join as join6 } from "path";
|
|
20866
|
+
var storedAuthOverrideForTesting = void 0;
|
|
20867
|
+
function loadStoredAuthFromJson() {
|
|
20868
|
+
if (storedAuthOverrideForTesting !== void 0) {
|
|
20869
|
+
return storedAuthOverrideForTesting;
|
|
20870
|
+
}
|
|
20871
|
+
const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
|
|
20872
|
+
try {
|
|
20873
|
+
if (existsSync6(authPath)) {
|
|
20874
|
+
const content = readFileSync5(authPath, "utf8");
|
|
20875
|
+
const data = JSON.parse(content);
|
|
20876
|
+
return data?.[AGY_PROVIDER_ID];
|
|
20877
|
+
}
|
|
20878
|
+
} catch {
|
|
20807
20879
|
}
|
|
20808
|
-
|
|
20809
|
-
|
|
20810
|
-
|
|
20880
|
+
return void 0;
|
|
20881
|
+
}
|
|
20882
|
+
function saveStoredAuthToJson(authRecord) {
|
|
20883
|
+
if (process.env.NODE_ENV === "test" || process.env.VITEST || storedAuthOverrideForTesting !== void 0) {
|
|
20884
|
+
return;
|
|
20811
20885
|
}
|
|
20812
|
-
|
|
20886
|
+
const dirPath = join6(homedir4(), ".local", "share", "opencode");
|
|
20887
|
+
if (!existsSync6(dirPath)) {
|
|
20888
|
+
mkdirSync5(dirPath, { recursive: true });
|
|
20889
|
+
}
|
|
20890
|
+
const authPath = join6(dirPath, "auth.json");
|
|
20891
|
+
const data = existsSync6(authPath) ? JSON.parse(readFileSync5(authPath, "utf8")) : {};
|
|
20892
|
+
data[AGY_PROVIDER_ID] = {
|
|
20893
|
+
type: "oauth",
|
|
20894
|
+
refresh: authRecord.refresh,
|
|
20895
|
+
access: authRecord.access,
|
|
20896
|
+
expires: authRecord.expires
|
|
20897
|
+
};
|
|
20898
|
+
const tempPath = `${authPath}.${process.pid}.${randomUUID4()}.tmp`;
|
|
20899
|
+
let tempFileDescriptor;
|
|
20900
|
+
let ownsTempFile = false;
|
|
20901
|
+
try {
|
|
20902
|
+
tempFileDescriptor = openSync(tempPath, "wx", 384);
|
|
20903
|
+
ownsTempFile = true;
|
|
20904
|
+
writeFileSync5(tempFileDescriptor, JSON.stringify(data, null, 2), {
|
|
20905
|
+
encoding: "utf8"
|
|
20906
|
+
});
|
|
20907
|
+
closeSync(tempFileDescriptor);
|
|
20908
|
+
tempFileDescriptor = void 0;
|
|
20909
|
+
renameSync4(tempPath, authPath);
|
|
20910
|
+
} catch (error45) {
|
|
20911
|
+
if (tempFileDescriptor !== void 0) {
|
|
20912
|
+
try {
|
|
20913
|
+
closeSync(tempFileDescriptor);
|
|
20914
|
+
} catch {
|
|
20915
|
+
}
|
|
20916
|
+
}
|
|
20917
|
+
if (ownsTempFile) {
|
|
20918
|
+
try {
|
|
20919
|
+
unlinkSync4(tempPath);
|
|
20920
|
+
} catch {
|
|
20921
|
+
}
|
|
20922
|
+
}
|
|
20923
|
+
throw error45;
|
|
20924
|
+
}
|
|
20925
|
+
}
|
|
20926
|
+
|
|
20927
|
+
// src/plugin/v2-fetch.ts
|
|
20928
|
+
function createV2FetchInterceptor(getAuthSnapshot) {
|
|
20929
|
+
return async function agyV2Fetch(input, init) {
|
|
20930
|
+
const isGL = isGenerativeLanguageRequest(input);
|
|
20931
|
+
const isInternal = toUrlString(input).includes("cloudcode-pa.googleapis.com");
|
|
20932
|
+
if (!isGL && !isInternal) {
|
|
20933
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20934
|
+
}
|
|
20935
|
+
let rawAuth = getAuthSnapshot ? await getAuthSnapshot() : void 0;
|
|
20936
|
+
if (!rawAuth) {
|
|
20937
|
+
rawAuth = loadStoredAuthFromJson();
|
|
20938
|
+
}
|
|
20939
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
20940
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20941
|
+
}
|
|
20942
|
+
let authRecord = resolveCachedAuth(rawAuth);
|
|
20943
|
+
if (accessTokenExpired(authRecord)) {
|
|
20944
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
20945
|
+
} } });
|
|
20946
|
+
if (refreshed) {
|
|
20947
|
+
authRecord = refreshed;
|
|
20948
|
+
}
|
|
20949
|
+
}
|
|
20950
|
+
if (!authRecord.access) {
|
|
20951
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20952
|
+
}
|
|
20953
|
+
if (isInternal) {
|
|
20954
|
+
const hasAuth = getSafeHeader(init?.headers, "Authorization") !== void 0;
|
|
20955
|
+
if (hasAuth) {
|
|
20956
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20957
|
+
}
|
|
20958
|
+
const userAgent = buildAgyCliUserAgent();
|
|
20959
|
+
const headers = setSafeHeaders(init?.headers, {
|
|
20960
|
+
Authorization: `Bearer ${authRecord.access}`,
|
|
20961
|
+
"User-Agent": userAgent
|
|
20962
|
+
});
|
|
20963
|
+
return (globalThis.fetch || fetch)(input, {
|
|
20964
|
+
...init,
|
|
20965
|
+
headers
|
|
20966
|
+
});
|
|
20967
|
+
}
|
|
20968
|
+
const requestTarget = parseGenerativeLanguageRequest(input);
|
|
20969
|
+
const requestUserAgentModel = requestTarget?.effectiveModel;
|
|
20970
|
+
let projectContext;
|
|
20971
|
+
try {
|
|
20972
|
+
projectContext = await ensureProjectContext(
|
|
20973
|
+
authRecord,
|
|
20974
|
+
{ auth: { set: async () => {
|
|
20975
|
+
} } },
|
|
20976
|
+
void 0,
|
|
20977
|
+
requestUserAgentModel
|
|
20978
|
+
);
|
|
20979
|
+
} catch {
|
|
20980
|
+
projectContext = {
|
|
20981
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
20982
|
+
auth: authRecord
|
|
20983
|
+
};
|
|
20984
|
+
}
|
|
20985
|
+
const originalRequestedModel = parseGenerativeLanguageRequest(input)?.effectiveModel;
|
|
20986
|
+
let modifiedInput = input;
|
|
20987
|
+
if (isGL && originalRequestedModel) {
|
|
20988
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
20989
|
+
const resolvedBase = resolveModelTier(originalBase, init);
|
|
20990
|
+
if (originalBase !== resolvedBase) {
|
|
20991
|
+
if (typeof modifiedInput === "string") {
|
|
20992
|
+
modifiedInput = modifiedInput.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20993
|
+
} else if (typeof Request !== "undefined" && modifiedInput instanceof Request) {
|
|
20994
|
+
const newUrl = modifiedInput.url.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20995
|
+
modifiedInput = new Request(newUrl, modifiedInput);
|
|
20996
|
+
}
|
|
20997
|
+
}
|
|
20998
|
+
}
|
|
20999
|
+
const transformed = prepareAgyRequest(
|
|
21000
|
+
modifiedInput,
|
|
21001
|
+
init,
|
|
21002
|
+
authRecord.access,
|
|
21003
|
+
projectContext.effectiveProjectId,
|
|
21004
|
+
void 0
|
|
21005
|
+
);
|
|
21006
|
+
const chatLogger = createChatLogger();
|
|
21007
|
+
if (chatLogger) {
|
|
21008
|
+
chatLogger.logRequest(
|
|
21009
|
+
toUrlString(transformed.request),
|
|
21010
|
+
transformed.init.method || "GET",
|
|
21011
|
+
transformed.init.headers,
|
|
21012
|
+
transformed.init.body
|
|
21013
|
+
);
|
|
21014
|
+
}
|
|
21015
|
+
const response = await fetchWithRetry(transformed.request, transformed.init);
|
|
21016
|
+
return transformAgyResponse(
|
|
21017
|
+
response,
|
|
21018
|
+
transformed.streaming,
|
|
21019
|
+
null,
|
|
21020
|
+
transformed.requestedModel,
|
|
21021
|
+
transformed.sessionId,
|
|
21022
|
+
chatLogger
|
|
21023
|
+
);
|
|
21024
|
+
};
|
|
20813
21025
|
}
|
|
20814
21026
|
|
|
21027
|
+
// src/plugin/v2-session.ts
|
|
21028
|
+
function createV2HttpRequestHook(state = {}) {
|
|
21029
|
+
return async (event) => {
|
|
21030
|
+
if (!event) return;
|
|
21031
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21032
|
+
const isGL = isGenerativeLanguageRequest(rawUrl);
|
|
21033
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21034
|
+
if (!isGL && !isInternal) {
|
|
21035
|
+
return;
|
|
21036
|
+
}
|
|
21037
|
+
event.headers = event.headers || {};
|
|
21038
|
+
let modelName;
|
|
21039
|
+
let rawAuth = event.auth;
|
|
21040
|
+
if (rawAuth && !rawAuth.type) {
|
|
21041
|
+
const tokenVal = rawAuth.access || rawAuth.token;
|
|
21042
|
+
if (tokenVal || rawAuth.refresh) {
|
|
21043
|
+
rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
|
|
21044
|
+
}
|
|
21045
|
+
}
|
|
21046
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21047
|
+
rawAuth = loadStoredAuthFromJson();
|
|
21048
|
+
}
|
|
21049
|
+
let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
|
|
21050
|
+
if (authRecord && accessTokenExpired(authRecord)) {
|
|
21051
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
21052
|
+
} } });
|
|
21053
|
+
if (refreshed) {
|
|
21054
|
+
authRecord = refreshed;
|
|
21055
|
+
try {
|
|
21056
|
+
saveStoredAuthToJson(refreshed);
|
|
21057
|
+
} catch {
|
|
21058
|
+
console.warn("[Agy Auth] Refreshed credentials could not be persisted; the current request will continue.");
|
|
21059
|
+
}
|
|
21060
|
+
}
|
|
21061
|
+
}
|
|
21062
|
+
if (isGL) {
|
|
21063
|
+
const parsed = parseGenerativeLanguageRequest(rawUrl);
|
|
21064
|
+
modelName = parsed?.effectiveModel;
|
|
21065
|
+
if (modelName) {
|
|
21066
|
+
state.lastInterceptedModel = modelName;
|
|
21067
|
+
}
|
|
21068
|
+
if (typeof event.headers.delete === "function") {
|
|
21069
|
+
event.headers.delete("x-goog-api-key");
|
|
21070
|
+
event.headers.delete("api-key");
|
|
21071
|
+
} else {
|
|
21072
|
+
for (const key of Object.keys(event.headers)) {
|
|
21073
|
+
const lower = key.toLowerCase();
|
|
21074
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21075
|
+
delete event.headers[key];
|
|
21076
|
+
}
|
|
21077
|
+
}
|
|
21078
|
+
}
|
|
21079
|
+
if (event.request?.headers) {
|
|
21080
|
+
if (typeof event.request.headers.delete === "function") {
|
|
21081
|
+
event.request.headers.delete("x-goog-api-key");
|
|
21082
|
+
event.request.headers.delete("api-key");
|
|
21083
|
+
} else {
|
|
21084
|
+
for (const key of Object.keys(event.request.headers)) {
|
|
21085
|
+
const lower = key.toLowerCase();
|
|
21086
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21087
|
+
delete event.request.headers[key];
|
|
21088
|
+
}
|
|
21089
|
+
}
|
|
21090
|
+
}
|
|
21091
|
+
}
|
|
21092
|
+
let cleanUrl = rawUrl;
|
|
21093
|
+
try {
|
|
21094
|
+
const parsedUrl = new URL(rawUrl);
|
|
21095
|
+
let urlChanged = false;
|
|
21096
|
+
for (const param of ["key", "x-goog-api-key", "api-key"]) {
|
|
21097
|
+
if (parsedUrl.searchParams.has(param)) {
|
|
21098
|
+
parsedUrl.searchParams.delete(param);
|
|
21099
|
+
urlChanged = true;
|
|
21100
|
+
}
|
|
21101
|
+
}
|
|
21102
|
+
if (urlChanged) {
|
|
21103
|
+
cleanUrl = parsedUrl.toString();
|
|
21104
|
+
}
|
|
21105
|
+
} catch {
|
|
21106
|
+
}
|
|
21107
|
+
if (authRecord && authRecord.access) {
|
|
21108
|
+
let projectContext;
|
|
21109
|
+
try {
|
|
21110
|
+
projectContext = await ensureProjectContext(
|
|
21111
|
+
authRecord,
|
|
21112
|
+
{ auth: { set: async () => {
|
|
21113
|
+
} } },
|
|
21114
|
+
void 0,
|
|
21115
|
+
modelName
|
|
21116
|
+
);
|
|
21117
|
+
} catch {
|
|
21118
|
+
projectContext = {
|
|
21119
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
21120
|
+
auth: authRecord
|
|
21121
|
+
};
|
|
21122
|
+
}
|
|
21123
|
+
const originalRequestedModel = modelName;
|
|
21124
|
+
let modifiedUrl = cleanUrl;
|
|
21125
|
+
if (originalRequestedModel) {
|
|
21126
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21127
|
+
const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
|
|
21128
|
+
const resolvedBase = resolveModelTier(originalBase, { headers: initHeaders });
|
|
21129
|
+
if (originalBase !== resolvedBase) {
|
|
21130
|
+
modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
21131
|
+
}
|
|
21132
|
+
}
|
|
21133
|
+
let bodyPayload = event.body;
|
|
21134
|
+
if (bodyPayload === void 0 && event.request) {
|
|
21135
|
+
if (typeof event.request.clone === "function") {
|
|
21136
|
+
try {
|
|
21137
|
+
bodyPayload = await event.request.clone().text();
|
|
21138
|
+
} catch {
|
|
21139
|
+
}
|
|
21140
|
+
} else if (event.request.body !== void 0) {
|
|
21141
|
+
bodyPayload = event.request.body;
|
|
21142
|
+
}
|
|
21143
|
+
}
|
|
21144
|
+
let preExistingUserAgent;
|
|
21145
|
+
if (typeof event.headers?.get === "function") {
|
|
21146
|
+
preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
|
|
21147
|
+
} else if (event.headers && typeof event.headers === "object") {
|
|
21148
|
+
preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
|
|
21149
|
+
}
|
|
21150
|
+
if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
|
|
21151
|
+
preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
|
|
21152
|
+
} else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
|
|
21153
|
+
preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
|
|
21154
|
+
}
|
|
21155
|
+
const method = event.method || event.request?.method || "POST";
|
|
21156
|
+
const requestHeaders = event.headers || event.request?.headers;
|
|
21157
|
+
const transformed = prepareAgyRequest(
|
|
21158
|
+
modifiedUrl,
|
|
21159
|
+
{
|
|
21160
|
+
method,
|
|
21161
|
+
headers: requestHeaders,
|
|
21162
|
+
body: bodyPayload
|
|
21163
|
+
},
|
|
21164
|
+
authRecord.access,
|
|
21165
|
+
projectContext.effectiveProjectId
|
|
21166
|
+
);
|
|
21167
|
+
const targetUrl = toUrlString(transformed.request);
|
|
21168
|
+
if (typeof event.url === "string") {
|
|
21169
|
+
event.url = targetUrl;
|
|
21170
|
+
}
|
|
21171
|
+
if (event.request && typeof event.request === "object") {
|
|
21172
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21173
|
+
event.request = new Request(targetUrl, {
|
|
21174
|
+
method: transformed.init.method,
|
|
21175
|
+
headers: transformed.init.headers,
|
|
21176
|
+
body: transformed.init.body
|
|
21177
|
+
});
|
|
21178
|
+
} else if (typeof event.request.url === "string") {
|
|
21179
|
+
try {
|
|
21180
|
+
event.request.url = targetUrl;
|
|
21181
|
+
} catch {
|
|
21182
|
+
}
|
|
21183
|
+
}
|
|
21184
|
+
}
|
|
21185
|
+
const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
|
|
21186
|
+
for (const [k, v] of headerEntries) {
|
|
21187
|
+
const lowerK = k.toLowerCase();
|
|
21188
|
+
if (lowerK === "user-agent") {
|
|
21189
|
+
if (preExistingUserAgent) {
|
|
21190
|
+
continue;
|
|
21191
|
+
}
|
|
21192
|
+
if (typeof event.headers?.set === "function") {
|
|
21193
|
+
event.headers.set("User-Agent", v);
|
|
21194
|
+
} else if (event.headers) {
|
|
21195
|
+
event.headers["User-Agent"] = v;
|
|
21196
|
+
}
|
|
21197
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21198
|
+
event.request.headers.set("User-Agent", v);
|
|
21199
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21200
|
+
event.request.headers["User-Agent"] = v;
|
|
21201
|
+
}
|
|
21202
|
+
continue;
|
|
21203
|
+
}
|
|
21204
|
+
if (typeof event.headers?.set === "function") {
|
|
21205
|
+
event.headers.set(k, v);
|
|
21206
|
+
} else if (event.headers) {
|
|
21207
|
+
event.headers[k] = v;
|
|
21208
|
+
}
|
|
21209
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21210
|
+
event.request.headers.set(k, v);
|
|
21211
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21212
|
+
event.request.headers[k] = v;
|
|
21213
|
+
}
|
|
21214
|
+
}
|
|
21215
|
+
if (transformed.init.body !== void 0) {
|
|
21216
|
+
event.body = transformed.init.body;
|
|
21217
|
+
if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
|
|
21218
|
+
event.request.body = transformed.init.body;
|
|
21219
|
+
}
|
|
21220
|
+
}
|
|
21221
|
+
} else {
|
|
21222
|
+
if (typeof event.url === "string") {
|
|
21223
|
+
event.url = cleanUrl;
|
|
21224
|
+
}
|
|
21225
|
+
if (event.request && typeof event.request === "object") {
|
|
21226
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21227
|
+
event.request = new Request(cleanUrl, event.request);
|
|
21228
|
+
} else if (typeof event.request.url === "string") {
|
|
21229
|
+
try {
|
|
21230
|
+
event.request.url = cleanUrl;
|
|
21231
|
+
} catch {
|
|
21232
|
+
}
|
|
21233
|
+
}
|
|
21234
|
+
}
|
|
21235
|
+
}
|
|
21236
|
+
}
|
|
21237
|
+
if (authRecord && authRecord.access) {
|
|
21238
|
+
if (typeof event.headers?.set === "function") {
|
|
21239
|
+
event.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21240
|
+
} else if (event.headers) {
|
|
21241
|
+
event.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21242
|
+
}
|
|
21243
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21244
|
+
event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21245
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21246
|
+
event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21247
|
+
}
|
|
21248
|
+
}
|
|
21249
|
+
const userAgent = buildAgyCliUserAgent(modelName);
|
|
21250
|
+
if (typeof event.headers?.set === "function") {
|
|
21251
|
+
if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
|
|
21252
|
+
event.headers.set("User-Agent", userAgent);
|
|
21253
|
+
}
|
|
21254
|
+
} else if (event.headers) {
|
|
21255
|
+
if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
|
|
21256
|
+
event.headers["User-Agent"] = userAgent;
|
|
21257
|
+
}
|
|
21258
|
+
}
|
|
21259
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21260
|
+
if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
|
|
21261
|
+
event.request.headers.set("User-Agent", userAgent);
|
|
21262
|
+
}
|
|
21263
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21264
|
+
if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
|
|
21265
|
+
event.request.headers["User-Agent"] = userAgent;
|
|
21266
|
+
}
|
|
21267
|
+
}
|
|
21268
|
+
};
|
|
21269
|
+
}
|
|
21270
|
+
function createV2HttpResponseHook(state = {}) {
|
|
21271
|
+
return async (event) => {
|
|
21272
|
+
if (!event || !event.response) return;
|
|
21273
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21274
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21275
|
+
if (isInternal && event.response instanceof Response) {
|
|
21276
|
+
const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
|
|
21277
|
+
const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || state.lastInterceptedModel;
|
|
21278
|
+
const transformed = await transformAgyResponse(
|
|
21279
|
+
event.response,
|
|
21280
|
+
!!isStreaming,
|
|
21281
|
+
null,
|
|
21282
|
+
parsedModel,
|
|
21283
|
+
void 0,
|
|
21284
|
+
void 0
|
|
21285
|
+
);
|
|
21286
|
+
event.response = transformed;
|
|
21287
|
+
}
|
|
21288
|
+
};
|
|
21289
|
+
}
|
|
21290
|
+
function createV2RetryHook() {
|
|
21291
|
+
return async (event) => {
|
|
21292
|
+
if (!event) return;
|
|
21293
|
+
const response = event.response;
|
|
21294
|
+
if (response instanceof Response) {
|
|
21295
|
+
if (response.status === 429 || response.status === 503) {
|
|
21296
|
+
const quota = await classifyQuotaResponse(response);
|
|
21297
|
+
if (quota?.retryDelayMs) {
|
|
21298
|
+
event.retryDelayMs = quota.retryDelayMs;
|
|
21299
|
+
} else {
|
|
21300
|
+
event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
|
|
21301
|
+
}
|
|
21302
|
+
}
|
|
21303
|
+
} else if (event.details && Array.isArray(event.details)) {
|
|
21304
|
+
const retryInfo = event.details.find(
|
|
21305
|
+
(d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
|
|
21306
|
+
);
|
|
21307
|
+
if (retryInfo?.retryDelay) {
|
|
21308
|
+
const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
|
|
21309
|
+
if (delayMs !== null) {
|
|
21310
|
+
event.retryDelayMs = delayMs;
|
|
21311
|
+
}
|
|
21312
|
+
}
|
|
21313
|
+
}
|
|
21314
|
+
};
|
|
21315
|
+
}
|
|
21316
|
+
function registerV2SessionHooks(ctx) {
|
|
21317
|
+
const state = {};
|
|
21318
|
+
ctx.session.hook("http.request", createV2HttpRequestHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21319
|
+
ctx.session.hook("http.response", createV2HttpResponseHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21320
|
+
ctx.session.hook("retry", createV2RetryHook(), { providerID: AGY_PROVIDER_ID });
|
|
21321
|
+
}
|
|
21322
|
+
|
|
21323
|
+
// src/plugin/v2.ts
|
|
21324
|
+
async function setupOpenCodeV2(ctx) {
|
|
21325
|
+
const resolveVariants = (modelId) => {
|
|
21326
|
+
const mapping = TIER_MAPPING[modelId];
|
|
21327
|
+
if (!mapping) return void 0;
|
|
21328
|
+
const variants = [];
|
|
21329
|
+
if (mapping.minimal !== void 0) variants.push({ id: "minimal" });
|
|
21330
|
+
if (mapping.low !== void 0) variants.push({ id: "low" });
|
|
21331
|
+
if (mapping.medium !== void 0) variants.push({ id: "medium" });
|
|
21332
|
+
if (mapping.high !== void 0) variants.push({ id: "high" });
|
|
21333
|
+
return variants.length > 0 ? variants : void 0;
|
|
21334
|
+
};
|
|
21335
|
+
const updateProviderRecord = (p) => {
|
|
21336
|
+
p.name = "Antigravity CLI";
|
|
21337
|
+
p.activation = "enabled";
|
|
21338
|
+
p.package = "aisdk:@ai-sdk/google";
|
|
21339
|
+
p.description = "Google Gemini Antigravity Code Assist OAuth provider";
|
|
21340
|
+
p.settings = { ...p.settings || {}, apiKey: "dummy" };
|
|
21341
|
+
p.integrationID = AGY_PROVIDER_ID;
|
|
21342
|
+
};
|
|
21343
|
+
const buildModelRecord = (modelId, simple, existingModel) => {
|
|
21344
|
+
const isClaude = modelId.startsWith("claude-");
|
|
21345
|
+
const isGpt = modelId.startsWith("gpt-");
|
|
21346
|
+
const variants = resolveVariants(modelId);
|
|
21347
|
+
return {
|
|
21348
|
+
id: modelId,
|
|
21349
|
+
providerID: AGY_PROVIDER_ID,
|
|
21350
|
+
name: simple.name,
|
|
21351
|
+
description: simple.description,
|
|
21352
|
+
family: modelId.includes("gemini") ? "gemini" : isClaude ? "claude" : isGpt ? "gpt" : "unknown",
|
|
21353
|
+
reasoning: simple.reasoning,
|
|
21354
|
+
attachment: simple.attachment,
|
|
21355
|
+
tool_call: simple.toolCall,
|
|
21356
|
+
limit: {
|
|
21357
|
+
context: simple.maxTokens,
|
|
21358
|
+
output: simple.maxOutputTokens
|
|
21359
|
+
},
|
|
21360
|
+
cost: simple.cost || { input: 0, output: 0 },
|
|
21361
|
+
...variants ? { variants } : {},
|
|
21362
|
+
...existingModel || {}
|
|
21363
|
+
};
|
|
21364
|
+
};
|
|
21365
|
+
const updateModelRecord = (m, modelId, simple) => {
|
|
21366
|
+
m.name = simple.name;
|
|
21367
|
+
m.capabilities = {
|
|
21368
|
+
tools: true,
|
|
21369
|
+
input: ["text", "image"],
|
|
21370
|
+
output: ["text"]
|
|
21371
|
+
};
|
|
21372
|
+
m.limit = {
|
|
21373
|
+
context: simple.maxTokens,
|
|
21374
|
+
output: simple.maxOutputTokens
|
|
21375
|
+
};
|
|
21376
|
+
m.family = "gemini";
|
|
21377
|
+
if (simple.cost) {
|
|
21378
|
+
m.cost = simple.cost;
|
|
21379
|
+
}
|
|
21380
|
+
const variants = resolveVariants(modelId);
|
|
21381
|
+
if (variants) {
|
|
21382
|
+
m.variants = variants;
|
|
21383
|
+
}
|
|
21384
|
+
};
|
|
21385
|
+
if (ctx.provider?.transform) {
|
|
21386
|
+
ctx.provider.transform(async (editor) => {
|
|
21387
|
+
if (!editor) return;
|
|
21388
|
+
if (typeof editor.update === "function") {
|
|
21389
|
+
editor.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21390
|
+
} else if (typeof editor.set === "function") {
|
|
21391
|
+
const p = { id: AGY_PROVIDER_ID };
|
|
21392
|
+
updateProviderRecord(p);
|
|
21393
|
+
editor.set(AGY_PROVIDER_ID, p);
|
|
21394
|
+
} else if (typeof editor === "object") {
|
|
21395
|
+
const p = editor[AGY_PROVIDER_ID] || { id: AGY_PROVIDER_ID };
|
|
21396
|
+
updateProviderRecord(p);
|
|
21397
|
+
editor[AGY_PROVIDER_ID] = p;
|
|
21398
|
+
}
|
|
21399
|
+
});
|
|
21400
|
+
}
|
|
21401
|
+
if (ctx.model?.transform) {
|
|
21402
|
+
ctx.model.transform(async (editor) => {
|
|
21403
|
+
if (!editor) return;
|
|
21404
|
+
if (typeof editor.update === "function") {
|
|
21405
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21406
|
+
editor.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21407
|
+
}
|
|
21408
|
+
} else if (typeof editor.set === "function") {
|
|
21409
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21410
|
+
const m = buildModelRecord(modelId, simple);
|
|
21411
|
+
editor.set(`${AGY_PROVIDER_ID}:${modelId}`, m);
|
|
21412
|
+
}
|
|
21413
|
+
} else if (typeof editor === "object") {
|
|
21414
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21415
|
+
const key = `${AGY_PROVIDER_ID}:${modelId}`;
|
|
21416
|
+
editor[key] = buildModelRecord(modelId, simple, editor[key]);
|
|
21417
|
+
}
|
|
21418
|
+
}
|
|
21419
|
+
});
|
|
21420
|
+
}
|
|
21421
|
+
if (ctx.catalog?.transform) {
|
|
21422
|
+
ctx.catalog.transform(async (editor) => {
|
|
21423
|
+
if (!editor) return;
|
|
21424
|
+
if (typeof editor?.provider?.update === "function") {
|
|
21425
|
+
editor.provider.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21426
|
+
if (typeof editor?.model?.update === "function") {
|
|
21427
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21428
|
+
editor.model.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21429
|
+
}
|
|
21430
|
+
}
|
|
21431
|
+
return;
|
|
21432
|
+
}
|
|
21433
|
+
const catalog = editor;
|
|
21434
|
+
catalog.providers = catalog.providers || {};
|
|
21435
|
+
catalog.providers[AGY_PROVIDER_ID] = {
|
|
21436
|
+
id: AGY_PROVIDER_ID,
|
|
21437
|
+
name: "Antigravity CLI",
|
|
21438
|
+
npm: "aisdk:@ai-sdk/google",
|
|
21439
|
+
settings: { apiKey: "dummy" },
|
|
21440
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21441
|
+
models: { ...catalog.providers[AGY_PROVIDER_ID]?.models || {} },
|
|
21442
|
+
...catalog.providers[AGY_PROVIDER_ID]
|
|
21443
|
+
};
|
|
21444
|
+
if (catalog.providers[AGY_PROVIDER_ID].settings) {
|
|
21445
|
+
catalog.providers[AGY_PROVIDER_ID].settings = {
|
|
21446
|
+
...catalog.providers[AGY_PROVIDER_ID].settings,
|
|
21447
|
+
apiKey: "dummy"
|
|
21448
|
+
};
|
|
21449
|
+
} else {
|
|
21450
|
+
catalog.providers[AGY_PROVIDER_ID].settings = { apiKey: "dummy" };
|
|
21451
|
+
}
|
|
21452
|
+
catalog.providers[AGY_PROVIDER_ID].integrationID = AGY_PROVIDER_ID;
|
|
21453
|
+
const targetModels = catalog.providers[AGY_PROVIDER_ID].models;
|
|
21454
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21455
|
+
targetModels[modelId] = buildModelRecord(modelId, simple, targetModels[modelId]);
|
|
21456
|
+
}
|
|
21457
|
+
});
|
|
21458
|
+
}
|
|
21459
|
+
ctx.tool.transform(async (editor) => {
|
|
21460
|
+
if (!editor) return;
|
|
21461
|
+
const quotaTool = createAgyQuotaTool({
|
|
21462
|
+
client: void 0,
|
|
21463
|
+
getAuthResolver: () => void 0,
|
|
21464
|
+
getConfiguredProjectId: () => void 0,
|
|
21465
|
+
getUserAgentModel: () => void 0
|
|
21466
|
+
});
|
|
21467
|
+
const quotaSummaryTool = createAgyQuotaSummaryTool({
|
|
21468
|
+
client: void 0,
|
|
21469
|
+
getAuthResolver: () => void 0,
|
|
21470
|
+
getConfiguredProjectId: () => void 0,
|
|
21471
|
+
getUserAgentModel: () => void 0
|
|
21472
|
+
});
|
|
21473
|
+
if (typeof editor.add === "function") {
|
|
21474
|
+
editor.add({
|
|
21475
|
+
name: AGY_QUOTA_TOOL_NAME,
|
|
21476
|
+
description: quotaTool.description,
|
|
21477
|
+
input: {},
|
|
21478
|
+
execute: async (args, context) => quotaTool.execute(args, context)
|
|
21479
|
+
});
|
|
21480
|
+
editor.add({
|
|
21481
|
+
name: AGY_QUOTA_SUMMARY_TOOL_NAME,
|
|
21482
|
+
description: quotaSummaryTool.description,
|
|
21483
|
+
input: {},
|
|
21484
|
+
execute: async (args, context) => quotaSummaryTool.execute(args, context)
|
|
21485
|
+
});
|
|
21486
|
+
} else if (typeof editor.set === "function") {
|
|
21487
|
+
editor.set(AGY_QUOTA_TOOL_NAME, quotaTool);
|
|
21488
|
+
editor.set(AGY_QUOTA_SUMMARY_TOOL_NAME, quotaSummaryTool);
|
|
21489
|
+
} else if (editor.tools && typeof editor.tools === "object") {
|
|
21490
|
+
editor.tools[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21491
|
+
editor.tools[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21492
|
+
} else if (typeof editor === "object") {
|
|
21493
|
+
editor[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21494
|
+
editor[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21495
|
+
}
|
|
21496
|
+
});
|
|
21497
|
+
ctx.command.transform(async (editor) => {
|
|
21498
|
+
if (!editor) return;
|
|
21499
|
+
const commands = {
|
|
21500
|
+
[AGY_V2_QUOTA_COMMAND]: {
|
|
21501
|
+
description: "Show Agy Code Assist quota usage",
|
|
21502
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21503
|
+
},
|
|
21504
|
+
[AGY_V2_QUOTA_SUMMARY_COMMAND]: {
|
|
21505
|
+
description: "Show Agy Code Assist quota summary with weekly and 5-hour limits",
|
|
21506
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21507
|
+
}
|
|
21508
|
+
};
|
|
21509
|
+
if (typeof editor.add === "function") {
|
|
21510
|
+
editor.add({
|
|
21511
|
+
name: AGY_V2_QUOTA_COMMAND,
|
|
21512
|
+
description: "Display current Antigravity quota usage",
|
|
21513
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21514
|
+
});
|
|
21515
|
+
editor.add({
|
|
21516
|
+
name: AGY_V2_QUOTA_SUMMARY_COMMAND,
|
|
21517
|
+
description: "Display Antigravity quota summary grouped by model family",
|
|
21518
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21519
|
+
});
|
|
21520
|
+
} else if (typeof editor.set === "function") {
|
|
21521
|
+
editor.set(AGY_V2_QUOTA_COMMAND, commands[AGY_V2_QUOTA_COMMAND]);
|
|
21522
|
+
editor.set(AGY_V2_QUOTA_SUMMARY_COMMAND, commands[AGY_V2_QUOTA_SUMMARY_COMMAND]);
|
|
21523
|
+
} else if (editor.commands && typeof editor.commands === "object") {
|
|
21524
|
+
editor.commands[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21525
|
+
editor.commands[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21526
|
+
} else if (typeof editor === "object") {
|
|
21527
|
+
editor[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21528
|
+
editor[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21529
|
+
}
|
|
21530
|
+
});
|
|
21531
|
+
ctx.integration?.transform?.((editor) => {
|
|
21532
|
+
if (!editor) return;
|
|
21533
|
+
editor.update?.(AGY_PROVIDER_ID, (integration) => {
|
|
21534
|
+
integration.name = "Antigravity CLI (plugin)";
|
|
21535
|
+
});
|
|
21536
|
+
editor.method?.update?.({
|
|
21537
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21538
|
+
method: {
|
|
21539
|
+
id: "oauth",
|
|
21540
|
+
type: "oauth",
|
|
21541
|
+
label: "Antigravity CLI (OAuth)"
|
|
21542
|
+
},
|
|
21543
|
+
authorize: async () => {
|
|
21544
|
+
const authorization = await authorizeAgy();
|
|
21545
|
+
return {
|
|
21546
|
+
mode: "code",
|
|
21547
|
+
url: authorization.url,
|
|
21548
|
+
instructions: "Please complete Google account authorization in your browser. After authorization, copy the full redirect URL or code and paste it below:",
|
|
21549
|
+
callback: async (code) => {
|
|
21550
|
+
const trimmed = code.trim();
|
|
21551
|
+
const parsed = parseOAuthCallbackInput(trimmed);
|
|
21552
|
+
const authCode = parsed.code || trimmed;
|
|
21553
|
+
if (!authCode) {
|
|
21554
|
+
return { type: "failed", error: "Missing authorization code in callback input" };
|
|
21555
|
+
}
|
|
21556
|
+
if (parsed.state && parsed.state !== authorization.state) {
|
|
21557
|
+
return { type: "failed", error: "State mismatch in callback input (possible CSRF attempt)" };
|
|
21558
|
+
}
|
|
21559
|
+
const exchangeResult = await exchangeAgyWithVerifier(authCode, authorization.verifier);
|
|
21560
|
+
if (exchangeResult.type !== "success") {
|
|
21561
|
+
return exchangeResult;
|
|
21562
|
+
}
|
|
21563
|
+
const initialRefresh = formatRefreshParts({
|
|
21564
|
+
refreshToken: exchangeResult.refresh
|
|
21565
|
+
});
|
|
21566
|
+
let authRecord = {
|
|
21567
|
+
type: "oauth",
|
|
21568
|
+
refresh: initialRefresh,
|
|
21569
|
+
access: exchangeResult.access,
|
|
21570
|
+
expires: exchangeResult.expires
|
|
21571
|
+
};
|
|
21572
|
+
try {
|
|
21573
|
+
const projectContext = await ensureProjectContext(
|
|
21574
|
+
authRecord,
|
|
21575
|
+
{ auth: { set: async () => {
|
|
21576
|
+
} } }
|
|
21577
|
+
);
|
|
21578
|
+
authRecord = {
|
|
21579
|
+
...authRecord,
|
|
21580
|
+
refresh: projectContext.auth.refresh
|
|
21581
|
+
};
|
|
21582
|
+
} catch {
|
|
21583
|
+
}
|
|
21584
|
+
try {
|
|
21585
|
+
saveStoredAuthToJson(authRecord);
|
|
21586
|
+
} catch {
|
|
21587
|
+
return {
|
|
21588
|
+
type: "failed",
|
|
21589
|
+
error: "Google authentication succeeded but AGY credentials could not be stored. Check filesystem access and retry."
|
|
21590
|
+
};
|
|
21591
|
+
}
|
|
21592
|
+
return {
|
|
21593
|
+
type: "oauth",
|
|
21594
|
+
methodID: "oauth",
|
|
21595
|
+
refresh: authRecord.refresh,
|
|
21596
|
+
access: authRecord.access,
|
|
21597
|
+
expires: authRecord.expires
|
|
21598
|
+
};
|
|
21599
|
+
}
|
|
21600
|
+
};
|
|
21601
|
+
}
|
|
21602
|
+
});
|
|
21603
|
+
});
|
|
21604
|
+
ctx.aisdk?.hook("sdk", async (event) => {
|
|
21605
|
+
if (!event) return;
|
|
21606
|
+
const isMatchingProvider = event.providerID === AGY_PROVIDER_ID || event.model?.providerID === AGY_PROVIDER_ID;
|
|
21607
|
+
if (!isMatchingProvider) return;
|
|
21608
|
+
event.options = event.options || {};
|
|
21609
|
+
event.options.apiKey = "dummy";
|
|
21610
|
+
event.options.fetch = createV2FetchInterceptor();
|
|
21611
|
+
});
|
|
21612
|
+
registerV2SessionHooks(ctx);
|
|
21613
|
+
}
|
|
21614
|
+
var v2PluginDefinition = defineOpenCodeV2Plugin({
|
|
21615
|
+
id: AGY_PROVIDER_ID,
|
|
21616
|
+
setup: setupOpenCodeV2
|
|
21617
|
+
});
|
|
21618
|
+
|
|
20815
21619
|
// index.ts
|
|
20816
|
-
var
|
|
20817
|
-
|
|
21620
|
+
var dualPlugin = {
|
|
21621
|
+
...v2PluginDefinition,
|
|
20818
21622
|
server: AgyCLIOAuthPlugin
|
|
20819
21623
|
};
|
|
21624
|
+
var index_default = dualPlugin;
|
|
20820
21625
|
export {
|
|
20821
21626
|
AgyCLIOAuthPlugin,
|
|
20822
21627
|
GoogleOAuthPlugin,
|
|
20823
|
-
index_default as default
|
|
21628
|
+
index_default as default,
|
|
21629
|
+
defineOpenCodeV2Plugin,
|
|
21630
|
+
setupOpenCodeV2,
|
|
21631
|
+
v2PluginDefinition
|
|
20824
21632
|
};
|
|
20825
21633
|
//# sourceMappingURL=index.js.map
|