@anthonyhaussman/opencode-agy-auth 1.2.8-beta.0 → 1.2.9-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/README.md +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +938 -168
- 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.9";
|
|
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,
|
|
@@ -16054,17 +16083,15 @@ var models_default = {
|
|
|
16054
16083
|
106121401,
|
|
16055
16084
|
106100625,
|
|
16056
16085
|
106143956,
|
|
16057
|
-
105879567,
|
|
16058
16086
|
105856899,
|
|
16059
16087
|
106064030,
|
|
16060
|
-
|
|
16088
|
+
106711598,
|
|
16061
16089
|
106106760,
|
|
16062
16090
|
106021688,
|
|
16063
16091
|
105887299,
|
|
16064
16092
|
106428370,
|
|
16065
16093
|
106283618,
|
|
16066
16094
|
106640126,
|
|
16067
|
-
106278607,
|
|
16068
16095
|
106380926,
|
|
16069
16096
|
106723203,
|
|
16070
16097
|
106242397,
|
|
@@ -16083,7 +16110,6 @@ var models_default = {
|
|
|
16083
16110
|
106121399,
|
|
16084
16111
|
106100654,
|
|
16085
16112
|
106064028,
|
|
16086
|
-
106567309,
|
|
16087
16113
|
105906495,
|
|
16088
16114
|
106283614,
|
|
16089
16115
|
106640124,
|
|
@@ -16150,7 +16176,7 @@ var models_default = {
|
|
|
16150
16176
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16151
16177
|
quotaInfo: {
|
|
16152
16178
|
remainingFraction: 1,
|
|
16153
|
-
resetTime: "2026-09-
|
|
16179
|
+
resetTime: "2026-09-23T14:29:32Z"
|
|
16154
16180
|
},
|
|
16155
16181
|
recommended: true,
|
|
16156
16182
|
supportedMimeTypes: {
|
|
@@ -16189,7 +16215,7 @@ var models_default = {
|
|
|
16189
16215
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16190
16216
|
quotaInfo: {
|
|
16191
16217
|
remainingFraction: 1,
|
|
16192
|
-
resetTime: "2026-09-
|
|
16218
|
+
resetTime: "2026-09-23T14:29:32Z"
|
|
16193
16219
|
},
|
|
16194
16220
|
recommended: true,
|
|
16195
16221
|
supportedMimeTypes: {
|
|
@@ -16225,8 +16251,8 @@ var models_default = {
|
|
|
16225
16251
|
},
|
|
16226
16252
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16227
16253
|
quotaInfo: {
|
|
16228
|
-
remainingFraction: 0.
|
|
16229
|
-
resetTime: "2026-09-
|
|
16254
|
+
remainingFraction: 0.9531947,
|
|
16255
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16230
16256
|
},
|
|
16231
16257
|
recommended: true,
|
|
16232
16258
|
supportedMimeTypes: {
|
|
@@ -16308,8 +16334,8 @@ var models_default = {
|
|
|
16308
16334
|
},
|
|
16309
16335
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16310
16336
|
quotaInfo: {
|
|
16311
|
-
remainingFraction: 0.
|
|
16312
|
-
resetTime: "2026-09-
|
|
16337
|
+
remainingFraction: 0.9531947,
|
|
16338
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16313
16339
|
},
|
|
16314
16340
|
recommended: true,
|
|
16315
16341
|
supportedMimeTypes: {
|
|
@@ -16391,8 +16417,8 @@ var models_default = {
|
|
|
16391
16417
|
},
|
|
16392
16418
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16393
16419
|
quotaInfo: {
|
|
16394
|
-
remainingFraction: 0.
|
|
16395
|
-
resetTime: "2026-09-
|
|
16420
|
+
remainingFraction: 0.9531947,
|
|
16421
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16396
16422
|
},
|
|
16397
16423
|
recommended: true,
|
|
16398
16424
|
supportedMimeTypes: {
|
|
@@ -16471,8 +16497,8 @@ var models_default = {
|
|
|
16471
16497
|
},
|
|
16472
16498
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16473
16499
|
quotaInfo: {
|
|
16474
|
-
remainingFraction: 0.
|
|
16475
|
-
resetTime: "2026-09-
|
|
16500
|
+
remainingFraction: 0.9531947,
|
|
16501
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16476
16502
|
},
|
|
16477
16503
|
recommended: true,
|
|
16478
16504
|
requiresImageOutputOutsideFunctionResponses: true,
|
|
@@ -16552,8 +16578,8 @@ var models_default = {
|
|
|
16552
16578
|
},
|
|
16553
16579
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16554
16580
|
quotaInfo: {
|
|
16555
|
-
remainingFraction: 0.
|
|
16556
|
-
resetTime: "2026-09-
|
|
16581
|
+
remainingFraction: 0.9531947,
|
|
16582
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16557
16583
|
},
|
|
16558
16584
|
recommended: true,
|
|
16559
16585
|
supportedMimeTypes: {
|
|
@@ -16657,8 +16683,8 @@ var models_default = {
|
|
|
16657
16683
|
},
|
|
16658
16684
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16659
16685
|
quotaInfo: {
|
|
16660
|
-
remainingFraction: 0.
|
|
16661
|
-
resetTime: "2026-09-
|
|
16686
|
+
remainingFraction: 0.9531947,
|
|
16687
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16662
16688
|
},
|
|
16663
16689
|
recommended: true,
|
|
16664
16690
|
supportedMimeTypes: {
|
|
@@ -16727,8 +16753,8 @@ var models_default = {
|
|
|
16727
16753
|
model: "MODEL_PLACEHOLDER_M21",
|
|
16728
16754
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16729
16755
|
quotaInfo: {
|
|
16730
|
-
remainingFraction: 0.
|
|
16731
|
-
resetTime: "2026-09-
|
|
16756
|
+
remainingFraction: 0.9531947,
|
|
16757
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16732
16758
|
}
|
|
16733
16759
|
},
|
|
16734
16760
|
"gemini-3.1-flash-lite": {
|
|
@@ -16746,8 +16772,8 @@ var models_default = {
|
|
|
16746
16772
|
},
|
|
16747
16773
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16748
16774
|
quotaInfo: {
|
|
16749
|
-
remainingFraction: 0.
|
|
16750
|
-
resetTime: "2026-09-
|
|
16775
|
+
remainingFraction: 0.9531947,
|
|
16776
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16751
16777
|
}
|
|
16752
16778
|
},
|
|
16753
16779
|
"gemini-3.1-pro-high": {
|
|
@@ -16778,8 +16804,8 @@ var models_default = {
|
|
|
16778
16804
|
},
|
|
16779
16805
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16780
16806
|
quotaInfo: {
|
|
16781
|
-
remainingFraction: 0.
|
|
16782
|
-
resetTime: "2026-09-
|
|
16807
|
+
remainingFraction: 0.9531947,
|
|
16808
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16783
16809
|
},
|
|
16784
16810
|
recommended: true,
|
|
16785
16811
|
supportedMimeTypes: {
|
|
@@ -16869,8 +16895,8 @@ var models_default = {
|
|
|
16869
16895
|
},
|
|
16870
16896
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16871
16897
|
quotaInfo: {
|
|
16872
|
-
remainingFraction: 0.
|
|
16873
|
-
resetTime: "2026-09-
|
|
16898
|
+
remainingFraction: 0.9531947,
|
|
16899
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16874
16900
|
},
|
|
16875
16901
|
recommended: true,
|
|
16876
16902
|
supportedMimeTypes: {
|
|
@@ -16974,8 +17000,8 @@ var models_default = {
|
|
|
16974
17000
|
},
|
|
16975
17001
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16976
17002
|
quotaInfo: {
|
|
16977
|
-
remainingFraction: 0.
|
|
16978
|
-
resetTime: "2026-09-
|
|
17003
|
+
remainingFraction: 0.9531947,
|
|
17004
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
16979
17005
|
},
|
|
16980
17006
|
recommended: true,
|
|
16981
17007
|
supportedMimeTypes: {
|
|
@@ -17057,8 +17083,8 @@ var models_default = {
|
|
|
17057
17083
|
},
|
|
17058
17084
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17059
17085
|
quotaInfo: {
|
|
17060
|
-
remainingFraction: 0.
|
|
17061
|
-
resetTime: "2026-09-
|
|
17086
|
+
remainingFraction: 0.9531947,
|
|
17087
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17062
17088
|
},
|
|
17063
17089
|
recommended: true,
|
|
17064
17090
|
supportedMimeTypes: {
|
|
@@ -17164,8 +17190,8 @@ var models_default = {
|
|
|
17164
17190
|
},
|
|
17165
17191
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17166
17192
|
quotaInfo: {
|
|
17167
|
-
remainingFraction: 0.
|
|
17168
|
-
resetTime: "2026-09-
|
|
17193
|
+
remainingFraction: 0.9531947,
|
|
17194
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17169
17195
|
},
|
|
17170
17196
|
recommended: true,
|
|
17171
17197
|
supportedMimeTypes: {
|
|
@@ -17283,8 +17309,8 @@ var models_default = {
|
|
|
17283
17309
|
},
|
|
17284
17310
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17285
17311
|
quotaInfo: {
|
|
17286
|
-
remainingFraction: 0.
|
|
17287
|
-
resetTime: "2026-09-
|
|
17312
|
+
remainingFraction: 0.9531947,
|
|
17313
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17288
17314
|
},
|
|
17289
17315
|
recommended: true,
|
|
17290
17316
|
supportedMimeTypes: {
|
|
@@ -17402,8 +17428,8 @@ var models_default = {
|
|
|
17402
17428
|
},
|
|
17403
17429
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17404
17430
|
quotaInfo: {
|
|
17405
|
-
remainingFraction: 0.
|
|
17406
|
-
resetTime: "2026-09-
|
|
17431
|
+
remainingFraction: 0.9531947,
|
|
17432
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17407
17433
|
},
|
|
17408
17434
|
recommended: true,
|
|
17409
17435
|
supportedMimeTypes: {
|
|
@@ -17521,8 +17547,8 @@ var models_default = {
|
|
|
17521
17547
|
},
|
|
17522
17548
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17523
17549
|
quotaInfo: {
|
|
17524
|
-
remainingFraction: 0.
|
|
17525
|
-
resetTime: "2026-09-
|
|
17550
|
+
remainingFraction: 0.9531947,
|
|
17551
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17526
17552
|
},
|
|
17527
17553
|
recommended: true,
|
|
17528
17554
|
supportedMimeTypes: {
|
|
@@ -17639,8 +17665,8 @@ var models_default = {
|
|
|
17639
17665
|
},
|
|
17640
17666
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17641
17667
|
quotaInfo: {
|
|
17642
|
-
remainingFraction: 0.
|
|
17643
|
-
resetTime: "2026-09-
|
|
17668
|
+
remainingFraction: 0.9531947,
|
|
17669
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17644
17670
|
},
|
|
17645
17671
|
recommended: true,
|
|
17646
17672
|
supportedMimeTypes: {
|
|
@@ -17750,8 +17776,8 @@ var models_default = {
|
|
|
17750
17776
|
},
|
|
17751
17777
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17752
17778
|
quotaInfo: {
|
|
17753
|
-
remainingFraction: 0.
|
|
17754
|
-
resetTime: "2026-09-
|
|
17779
|
+
remainingFraction: 0.9531947,
|
|
17780
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17755
17781
|
},
|
|
17756
17782
|
recommended: true,
|
|
17757
17783
|
supportedMimeTypes: {
|
|
@@ -17863,8 +17889,8 @@ var models_default = {
|
|
|
17863
17889
|
},
|
|
17864
17890
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17865
17891
|
quotaInfo: {
|
|
17866
|
-
remainingFraction: 0.
|
|
17867
|
-
resetTime: "2026-09-
|
|
17892
|
+
remainingFraction: 0.9531947,
|
|
17893
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17868
17894
|
},
|
|
17869
17895
|
recommended: true,
|
|
17870
17896
|
supportedMimeTypes: {
|
|
@@ -17976,8 +18002,8 @@ var models_default = {
|
|
|
17976
18002
|
},
|
|
17977
18003
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17978
18004
|
quotaInfo: {
|
|
17979
|
-
remainingFraction: 0.
|
|
17980
|
-
resetTime: "2026-09-
|
|
18005
|
+
remainingFraction: 0.9531947,
|
|
18006
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
17981
18007
|
},
|
|
17982
18008
|
recommended: true,
|
|
17983
18009
|
supportedMimeTypes: {
|
|
@@ -18088,8 +18114,8 @@ var models_default = {
|
|
|
18088
18114
|
},
|
|
18089
18115
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18090
18116
|
quotaInfo: {
|
|
18091
|
-
remainingFraction: 0.
|
|
18092
|
-
resetTime: "2026-09-
|
|
18117
|
+
remainingFraction: 0.9531947,
|
|
18118
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
18093
18119
|
},
|
|
18094
18120
|
recommended: true,
|
|
18095
18121
|
supportedMimeTypes: {
|
|
@@ -18199,8 +18225,8 @@ var models_default = {
|
|
|
18199
18225
|
},
|
|
18200
18226
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18201
18227
|
quotaInfo: {
|
|
18202
|
-
remainingFraction: 0.
|
|
18203
|
-
resetTime: "2026-09-
|
|
18228
|
+
remainingFraction: 0.9531947,
|
|
18229
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
18204
18230
|
},
|
|
18205
18231
|
recommended: true,
|
|
18206
18232
|
supportedMimeTypes: {
|
|
@@ -18312,8 +18338,8 @@ var models_default = {
|
|
|
18312
18338
|
},
|
|
18313
18339
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18314
18340
|
quotaInfo: {
|
|
18315
|
-
remainingFraction: 0.
|
|
18316
|
-
resetTime: "2026-09-
|
|
18341
|
+
remainingFraction: 0.9531947,
|
|
18342
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
18317
18343
|
},
|
|
18318
18344
|
recommended: true,
|
|
18319
18345
|
supportedMimeTypes: {
|
|
@@ -18425,8 +18451,8 @@ var models_default = {
|
|
|
18425
18451
|
},
|
|
18426
18452
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18427
18453
|
quotaInfo: {
|
|
18428
|
-
remainingFraction: 0.
|
|
18429
|
-
resetTime: "2026-09-
|
|
18454
|
+
remainingFraction: 0.9531947,
|
|
18455
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
18430
18456
|
},
|
|
18431
18457
|
recommended: true,
|
|
18432
18458
|
supportedMimeTypes: {
|
|
@@ -18537,8 +18563,8 @@ var models_default = {
|
|
|
18537
18563
|
},
|
|
18538
18564
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18539
18565
|
quotaInfo: {
|
|
18540
|
-
remainingFraction: 0.
|
|
18541
|
-
resetTime: "2026-09-
|
|
18566
|
+
remainingFraction: 0.9531947,
|
|
18567
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
18542
18568
|
},
|
|
18543
18569
|
recommended: true,
|
|
18544
18570
|
supportedMimeTypes: {
|
|
@@ -18627,8 +18653,8 @@ var models_default = {
|
|
|
18627
18653
|
},
|
|
18628
18654
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18629
18655
|
quotaInfo: {
|
|
18630
|
-
remainingFraction: 0.
|
|
18631
|
-
resetTime: "2026-09-
|
|
18656
|
+
remainingFraction: 0.9531947,
|
|
18657
|
+
resetTime: "2026-09-23T14:18:13Z"
|
|
18632
18658
|
},
|
|
18633
18659
|
recommended: true,
|
|
18634
18660
|
supportedMimeTypes: {
|
|
@@ -18705,7 +18731,7 @@ var models_default = {
|
|
|
18705
18731
|
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
18706
18732
|
quotaInfo: {
|
|
18707
18733
|
remainingFraction: 1,
|
|
18708
|
-
resetTime: "2026-09-
|
|
18734
|
+
resetTime: "2026-09-23T14:29:32Z"
|
|
18709
18735
|
},
|
|
18710
18736
|
recommended: true,
|
|
18711
18737
|
supportsThinking: true,
|
|
@@ -20204,22 +20230,81 @@ var ChatLoggerImpl = class {
|
|
|
20204
20230
|
}
|
|
20205
20231
|
};
|
|
20206
20232
|
|
|
20207
|
-
// src/plugin.ts
|
|
20208
|
-
|
|
20209
|
-
|
|
20210
|
-
|
|
20211
|
-
|
|
20212
|
-
|
|
20213
|
-
|
|
20214
|
-
|
|
20215
|
-
|
|
20233
|
+
// src/plugin/headers.ts
|
|
20234
|
+
function getSafeHeader(headers, key) {
|
|
20235
|
+
if (!headers) {
|
|
20236
|
+
return void 0;
|
|
20237
|
+
}
|
|
20238
|
+
const targetKey = key.toLowerCase();
|
|
20239
|
+
if (typeof headers.get === "function") {
|
|
20240
|
+
try {
|
|
20241
|
+
return headers.get(targetKey) || void 0;
|
|
20242
|
+
} catch {
|
|
20243
|
+
}
|
|
20244
|
+
}
|
|
20245
|
+
if (Array.isArray(headers)) {
|
|
20246
|
+
const found = headers.find((item) => {
|
|
20247
|
+
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20248
|
+
return item[0].toLowerCase() === targetKey;
|
|
20249
|
+
}
|
|
20250
|
+
return false;
|
|
20251
|
+
});
|
|
20252
|
+
return found ? String(found[1]) : void 0;
|
|
20253
|
+
}
|
|
20254
|
+
if (typeof headers === "object") {
|
|
20255
|
+
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20256
|
+
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20257
|
+
}
|
|
20258
|
+
return void 0;
|
|
20259
|
+
}
|
|
20260
|
+
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20261
|
+
if (typeof globalThis.Headers !== "undefined") {
|
|
20262
|
+
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20263
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20264
|
+
headers.set(k, v);
|
|
20265
|
+
}
|
|
20266
|
+
return headers;
|
|
20267
|
+
}
|
|
20268
|
+
if (Array.isArray(initHeaders)) {
|
|
20269
|
+
const nextHeaders2 = [...initHeaders];
|
|
20270
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20271
|
+
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20272
|
+
if (idx !== -1) {
|
|
20273
|
+
nextHeaders2[idx] = [k, v];
|
|
20274
|
+
} else {
|
|
20275
|
+
nextHeaders2.push([k, v]);
|
|
20276
|
+
}
|
|
20277
|
+
}
|
|
20278
|
+
return nextHeaders2;
|
|
20279
|
+
}
|
|
20280
|
+
const nextHeaders = {};
|
|
20281
|
+
if (initHeaders && typeof initHeaders === "object") {
|
|
20282
|
+
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20283
|
+
nextHeaders[k] = String(v);
|
|
20284
|
+
}
|
|
20285
|
+
}
|
|
20286
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20287
|
+
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20288
|
+
if (existingKey) {
|
|
20289
|
+
nextHeaders[existingKey] = v;
|
|
20290
|
+
} else {
|
|
20291
|
+
nextHeaders[k] = v;
|
|
20292
|
+
}
|
|
20293
|
+
}
|
|
20294
|
+
return nextHeaders;
|
|
20295
|
+
}
|
|
20296
|
+
function toUrlString(value) {
|
|
20297
|
+
if (typeof value === "string") {
|
|
20298
|
+
return value;
|
|
20299
|
+
}
|
|
20300
|
+
const candidate = value.url;
|
|
20301
|
+
if (candidate) {
|
|
20302
|
+
return candidate;
|
|
20303
|
+
}
|
|
20304
|
+
return value.toString();
|
|
20305
|
+
}
|
|
20216
20306
|
|
|
20217
|
-
|
|
20218
|
-
Do not call other tools.
|
|
20219
|
-
`;
|
|
20220
|
-
var latestAgyAuthResolver;
|
|
20221
|
-
var latestAgyConfiguredProjectId;
|
|
20222
|
-
var latestAgyUserAgentModel;
|
|
20307
|
+
// src/plugin/tier.ts
|
|
20223
20308
|
var STATIC_MODELS_SIMPLE = {
|
|
20224
20309
|
"gemini-3.8-flash": {
|
|
20225
20310
|
name: "Gemini 3.8 Flash",
|
|
@@ -20307,6 +20392,39 @@ var TIER_MAPPING = {
|
|
|
20307
20392
|
high: "gemini-3.1-pro-high"
|
|
20308
20393
|
}
|
|
20309
20394
|
};
|
|
20395
|
+
function resolveModelTier(baseModelId, headersOrInit) {
|
|
20396
|
+
const parts = baseModelId.split("@");
|
|
20397
|
+
const base = parts[0] || "";
|
|
20398
|
+
const suffixTier = parts[1]?.toLowerCase();
|
|
20399
|
+
const mapping = TIER_MAPPING[base];
|
|
20400
|
+
if (!mapping) {
|
|
20401
|
+
return baseModelId;
|
|
20402
|
+
}
|
|
20403
|
+
const rawHeaders = headersOrInit && typeof headersOrInit === "object" && "headers" in headersOrInit ? headersOrInit.headers : headersOrInit;
|
|
20404
|
+
const headerTier = getSafeHeader(rawHeaders, "x-agy-tier")?.toLowerCase() || null;
|
|
20405
|
+
const requestedTier = headerTier || suffixTier;
|
|
20406
|
+
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20407
|
+
return mapping[requestedTier] || baseModelId;
|
|
20408
|
+
}
|
|
20409
|
+
return mapping["medium"] ?? mapping["high"] ?? baseModelId;
|
|
20410
|
+
}
|
|
20411
|
+
|
|
20412
|
+
// src/plugin.ts
|
|
20413
|
+
var AGY_QUOTA_COMMAND = "agyquota";
|
|
20414
|
+
var AGY_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
20415
|
+
|
|
20416
|
+
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20417
|
+
Do not call other tools.
|
|
20418
|
+
`;
|
|
20419
|
+
var AGY_QUOTA_SUMMARY_COMMAND = "agyquotasummary";
|
|
20420
|
+
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.
|
|
20421
|
+
|
|
20422
|
+
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20423
|
+
Do not call other tools.
|
|
20424
|
+
`;
|
|
20425
|
+
var latestAgyAuthResolver;
|
|
20426
|
+
var latestAgyConfiguredProjectId;
|
|
20427
|
+
var latestAgyUserAgentModel;
|
|
20310
20428
|
var buildModelFromSimple = (modelId, simple) => {
|
|
20311
20429
|
const isClaude = modelId.startsWith("claude-");
|
|
20312
20430
|
const isGpt = modelId.startsWith("gpt-");
|
|
@@ -20400,83 +20518,6 @@ var STATIC_MODELS = {};
|
|
|
20400
20518
|
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
20401
20519
|
STATIC_MODELS[modelId] = buildModelFromSimple(modelId, simple);
|
|
20402
20520
|
}
|
|
20403
|
-
function getSafeHeader(headers, key) {
|
|
20404
|
-
if (!headers) {
|
|
20405
|
-
return void 0;
|
|
20406
|
-
}
|
|
20407
|
-
const targetKey = key.toLowerCase();
|
|
20408
|
-
if (typeof headers.get === "function") {
|
|
20409
|
-
try {
|
|
20410
|
-
return headers.get(targetKey) || void 0;
|
|
20411
|
-
} catch {
|
|
20412
|
-
}
|
|
20413
|
-
}
|
|
20414
|
-
if (Array.isArray(headers)) {
|
|
20415
|
-
const found = headers.find((item) => {
|
|
20416
|
-
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20417
|
-
return item[0].toLowerCase() === targetKey;
|
|
20418
|
-
}
|
|
20419
|
-
return false;
|
|
20420
|
-
});
|
|
20421
|
-
return found ? String(found[1]) : void 0;
|
|
20422
|
-
}
|
|
20423
|
-
if (typeof headers === "object") {
|
|
20424
|
-
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20425
|
-
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20426
|
-
}
|
|
20427
|
-
return void 0;
|
|
20428
|
-
}
|
|
20429
|
-
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20430
|
-
if (typeof globalThis.Headers !== "undefined") {
|
|
20431
|
-
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20432
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20433
|
-
headers.set(k, v);
|
|
20434
|
-
}
|
|
20435
|
-
return headers;
|
|
20436
|
-
}
|
|
20437
|
-
if (Array.isArray(initHeaders)) {
|
|
20438
|
-
const nextHeaders2 = [...initHeaders];
|
|
20439
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20440
|
-
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20441
|
-
if (idx !== -1) {
|
|
20442
|
-
nextHeaders2[idx] = [k, v];
|
|
20443
|
-
} else {
|
|
20444
|
-
nextHeaders2.push([k, v]);
|
|
20445
|
-
}
|
|
20446
|
-
}
|
|
20447
|
-
return nextHeaders2;
|
|
20448
|
-
}
|
|
20449
|
-
const nextHeaders = {};
|
|
20450
|
-
if (initHeaders && typeof initHeaders === "object") {
|
|
20451
|
-
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20452
|
-
nextHeaders[k] = String(v);
|
|
20453
|
-
}
|
|
20454
|
-
}
|
|
20455
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20456
|
-
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20457
|
-
if (existingKey) {
|
|
20458
|
-
nextHeaders[existingKey] = v;
|
|
20459
|
-
} else {
|
|
20460
|
-
nextHeaders[k] = v;
|
|
20461
|
-
}
|
|
20462
|
-
}
|
|
20463
|
-
return nextHeaders;
|
|
20464
|
-
}
|
|
20465
|
-
function resolveModelTier(baseModelId, init) {
|
|
20466
|
-
const parts = baseModelId.split("@");
|
|
20467
|
-
const base = parts[0] || "";
|
|
20468
|
-
const suffixTier = parts[1]?.toLowerCase();
|
|
20469
|
-
const mapping = TIER_MAPPING[base];
|
|
20470
|
-
if (!mapping) {
|
|
20471
|
-
return baseModelId;
|
|
20472
|
-
}
|
|
20473
|
-
const headerTier = getSafeHeader(init?.headers, "x-agy-tier")?.toLowerCase() || null;
|
|
20474
|
-
const requestedTier = headerTier || suffixTier;
|
|
20475
|
-
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20476
|
-
return mapping[requestedTier] || baseModelId;
|
|
20477
|
-
}
|
|
20478
|
-
return mapping["medium"] ?? mapping["high"];
|
|
20479
|
-
}
|
|
20480
20521
|
var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
20481
20522
|
let latestConfig;
|
|
20482
20523
|
updateStaticModelsWithPricing(STATIC_MODELS);
|
|
@@ -20804,25 +20845,754 @@ async function ensureProjectContextOrThrow(authRecord, client, configuredProject
|
|
|
20804
20845
|
throw error45;
|
|
20805
20846
|
}
|
|
20806
20847
|
}
|
|
20807
|
-
|
|
20808
|
-
|
|
20809
|
-
|
|
20848
|
+
|
|
20849
|
+
// src/plugin/types.ts
|
|
20850
|
+
function defineOpenCodeV2Plugin(def) {
|
|
20851
|
+
return def;
|
|
20852
|
+
}
|
|
20853
|
+
|
|
20854
|
+
// src/plugin/v2-storage.ts
|
|
20855
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync5 } from "fs";
|
|
20856
|
+
import { homedir as homedir4 } from "os";
|
|
20857
|
+
import { join as join6 } from "path";
|
|
20858
|
+
var storedAuthOverrideForTesting = void 0;
|
|
20859
|
+
function loadStoredAuthFromJson() {
|
|
20860
|
+
if (storedAuthOverrideForTesting !== void 0) {
|
|
20861
|
+
return storedAuthOverrideForTesting;
|
|
20862
|
+
}
|
|
20863
|
+
const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
|
|
20864
|
+
try {
|
|
20865
|
+
if (existsSync6(authPath)) {
|
|
20866
|
+
const content = readFileSync5(authPath, "utf8");
|
|
20867
|
+
const data = JSON.parse(content);
|
|
20868
|
+
return data?.[AGY_PROVIDER_ID];
|
|
20869
|
+
}
|
|
20870
|
+
} catch {
|
|
20810
20871
|
}
|
|
20811
|
-
|
|
20812
|
-
|
|
20813
|
-
|
|
20872
|
+
return void 0;
|
|
20873
|
+
}
|
|
20874
|
+
function saveStoredAuthToJson(authRecord) {
|
|
20875
|
+
if (process.env.NODE_ENV === "test" || process.env.VITEST || storedAuthOverrideForTesting !== void 0) {
|
|
20876
|
+
return;
|
|
20814
20877
|
}
|
|
20815
|
-
|
|
20878
|
+
try {
|
|
20879
|
+
const dirPath = join6(homedir4(), ".local", "share", "opencode");
|
|
20880
|
+
if (!existsSync6(dirPath)) {
|
|
20881
|
+
mkdirSync5(dirPath, { recursive: true });
|
|
20882
|
+
}
|
|
20883
|
+
const authPath = join6(dirPath, "auth.json");
|
|
20884
|
+
let data = {};
|
|
20885
|
+
if (existsSync6(authPath)) {
|
|
20886
|
+
try {
|
|
20887
|
+
data = JSON.parse(readFileSync5(authPath, "utf8")) || {};
|
|
20888
|
+
} catch {
|
|
20889
|
+
data = {};
|
|
20890
|
+
}
|
|
20891
|
+
}
|
|
20892
|
+
data[AGY_PROVIDER_ID] = {
|
|
20893
|
+
type: "oauth",
|
|
20894
|
+
refresh: authRecord.refresh,
|
|
20895
|
+
access: authRecord.access,
|
|
20896
|
+
expires: authRecord.expires
|
|
20897
|
+
};
|
|
20898
|
+
writeFileSync5(authPath, JSON.stringify(data, null, 2), "utf8");
|
|
20899
|
+
} catch {
|
|
20900
|
+
}
|
|
20901
|
+
}
|
|
20902
|
+
|
|
20903
|
+
// src/plugin/v2-fetch.ts
|
|
20904
|
+
function createV2FetchInterceptor(getAuthSnapshot) {
|
|
20905
|
+
return async function agyV2Fetch(input, init) {
|
|
20906
|
+
const isGL = isGenerativeLanguageRequest(input);
|
|
20907
|
+
const isInternal = toUrlString(input).includes("cloudcode-pa.googleapis.com");
|
|
20908
|
+
if (!isGL && !isInternal) {
|
|
20909
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20910
|
+
}
|
|
20911
|
+
let rawAuth = getAuthSnapshot ? await getAuthSnapshot() : void 0;
|
|
20912
|
+
if (!rawAuth) {
|
|
20913
|
+
rawAuth = loadStoredAuthFromJson();
|
|
20914
|
+
}
|
|
20915
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
20916
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20917
|
+
}
|
|
20918
|
+
let authRecord = resolveCachedAuth(rawAuth);
|
|
20919
|
+
if (accessTokenExpired(authRecord)) {
|
|
20920
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
20921
|
+
} } });
|
|
20922
|
+
if (refreshed) {
|
|
20923
|
+
authRecord = refreshed;
|
|
20924
|
+
}
|
|
20925
|
+
}
|
|
20926
|
+
if (!authRecord.access) {
|
|
20927
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20928
|
+
}
|
|
20929
|
+
if (isInternal) {
|
|
20930
|
+
const hasAuth = getSafeHeader(init?.headers, "Authorization") !== void 0;
|
|
20931
|
+
if (hasAuth) {
|
|
20932
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20933
|
+
}
|
|
20934
|
+
const userAgent = buildAgyCliUserAgent();
|
|
20935
|
+
const headers = setSafeHeaders(init?.headers, {
|
|
20936
|
+
Authorization: `Bearer ${authRecord.access}`,
|
|
20937
|
+
"User-Agent": userAgent
|
|
20938
|
+
});
|
|
20939
|
+
return (globalThis.fetch || fetch)(input, {
|
|
20940
|
+
...init,
|
|
20941
|
+
headers
|
|
20942
|
+
});
|
|
20943
|
+
}
|
|
20944
|
+
const requestTarget = parseGenerativeLanguageRequest(input);
|
|
20945
|
+
const requestUserAgentModel = requestTarget?.effectiveModel;
|
|
20946
|
+
let projectContext;
|
|
20947
|
+
try {
|
|
20948
|
+
projectContext = await ensureProjectContext(
|
|
20949
|
+
authRecord,
|
|
20950
|
+
{ auth: { set: async () => {
|
|
20951
|
+
} } },
|
|
20952
|
+
void 0,
|
|
20953
|
+
requestUserAgentModel
|
|
20954
|
+
);
|
|
20955
|
+
} catch {
|
|
20956
|
+
projectContext = {
|
|
20957
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
20958
|
+
auth: authRecord
|
|
20959
|
+
};
|
|
20960
|
+
}
|
|
20961
|
+
const originalRequestedModel = parseGenerativeLanguageRequest(input)?.effectiveModel;
|
|
20962
|
+
let modifiedInput = input;
|
|
20963
|
+
if (isGL && originalRequestedModel) {
|
|
20964
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
20965
|
+
const resolvedBase = resolveModelTier(originalBase, init);
|
|
20966
|
+
if (originalBase !== resolvedBase) {
|
|
20967
|
+
if (typeof modifiedInput === "string") {
|
|
20968
|
+
modifiedInput = modifiedInput.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20969
|
+
} else if (typeof Request !== "undefined" && modifiedInput instanceof Request) {
|
|
20970
|
+
const newUrl = modifiedInput.url.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20971
|
+
modifiedInput = new Request(newUrl, modifiedInput);
|
|
20972
|
+
}
|
|
20973
|
+
}
|
|
20974
|
+
}
|
|
20975
|
+
const transformed = prepareAgyRequest(
|
|
20976
|
+
modifiedInput,
|
|
20977
|
+
init,
|
|
20978
|
+
authRecord.access,
|
|
20979
|
+
projectContext.effectiveProjectId,
|
|
20980
|
+
void 0
|
|
20981
|
+
);
|
|
20982
|
+
const chatLogger = createChatLogger();
|
|
20983
|
+
if (chatLogger) {
|
|
20984
|
+
chatLogger.logRequest(
|
|
20985
|
+
toUrlString(transformed.request),
|
|
20986
|
+
transformed.init.method || "GET",
|
|
20987
|
+
transformed.init.headers,
|
|
20988
|
+
transformed.init.body
|
|
20989
|
+
);
|
|
20990
|
+
}
|
|
20991
|
+
const response = await fetchWithRetry(transformed.request, transformed.init);
|
|
20992
|
+
return transformAgyResponse(
|
|
20993
|
+
response,
|
|
20994
|
+
transformed.streaming,
|
|
20995
|
+
null,
|
|
20996
|
+
transformed.requestedModel,
|
|
20997
|
+
transformed.sessionId,
|
|
20998
|
+
chatLogger
|
|
20999
|
+
);
|
|
21000
|
+
};
|
|
21001
|
+
}
|
|
21002
|
+
|
|
21003
|
+
// src/plugin/v2-session.ts
|
|
21004
|
+
function createV2HttpRequestHook(state = {}) {
|
|
21005
|
+
return async (event) => {
|
|
21006
|
+
if (!event) return;
|
|
21007
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21008
|
+
const isGL = isGenerativeLanguageRequest(rawUrl);
|
|
21009
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21010
|
+
if (!isGL && !isInternal) {
|
|
21011
|
+
return;
|
|
21012
|
+
}
|
|
21013
|
+
event.headers = event.headers || {};
|
|
21014
|
+
let modelName;
|
|
21015
|
+
let rawAuth = event.auth;
|
|
21016
|
+
if (rawAuth && !rawAuth.type) {
|
|
21017
|
+
const tokenVal = rawAuth.access || rawAuth.token;
|
|
21018
|
+
if (tokenVal || rawAuth.refresh) {
|
|
21019
|
+
rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
|
|
21020
|
+
}
|
|
21021
|
+
}
|
|
21022
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21023
|
+
rawAuth = loadStoredAuthFromJson();
|
|
21024
|
+
}
|
|
21025
|
+
let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
|
|
21026
|
+
if (authRecord && accessTokenExpired(authRecord)) {
|
|
21027
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
21028
|
+
} } });
|
|
21029
|
+
if (refreshed) {
|
|
21030
|
+
authRecord = refreshed;
|
|
21031
|
+
saveStoredAuthToJson(refreshed);
|
|
21032
|
+
}
|
|
21033
|
+
}
|
|
21034
|
+
if (isGL) {
|
|
21035
|
+
const parsed = parseGenerativeLanguageRequest(rawUrl);
|
|
21036
|
+
modelName = parsed?.effectiveModel;
|
|
21037
|
+
if (modelName) {
|
|
21038
|
+
state.lastInterceptedModel = modelName;
|
|
21039
|
+
}
|
|
21040
|
+
if (typeof event.headers.delete === "function") {
|
|
21041
|
+
event.headers.delete("x-goog-api-key");
|
|
21042
|
+
event.headers.delete("api-key");
|
|
21043
|
+
} else {
|
|
21044
|
+
for (const key of Object.keys(event.headers)) {
|
|
21045
|
+
const lower = key.toLowerCase();
|
|
21046
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21047
|
+
delete event.headers[key];
|
|
21048
|
+
}
|
|
21049
|
+
}
|
|
21050
|
+
}
|
|
21051
|
+
if (event.request?.headers) {
|
|
21052
|
+
if (typeof event.request.headers.delete === "function") {
|
|
21053
|
+
event.request.headers.delete("x-goog-api-key");
|
|
21054
|
+
event.request.headers.delete("api-key");
|
|
21055
|
+
} else {
|
|
21056
|
+
for (const key of Object.keys(event.request.headers)) {
|
|
21057
|
+
const lower = key.toLowerCase();
|
|
21058
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21059
|
+
delete event.request.headers[key];
|
|
21060
|
+
}
|
|
21061
|
+
}
|
|
21062
|
+
}
|
|
21063
|
+
}
|
|
21064
|
+
let cleanUrl = rawUrl;
|
|
21065
|
+
try {
|
|
21066
|
+
const parsedUrl = new URL(rawUrl);
|
|
21067
|
+
let urlChanged = false;
|
|
21068
|
+
for (const param of ["key", "x-goog-api-key", "api-key"]) {
|
|
21069
|
+
if (parsedUrl.searchParams.has(param)) {
|
|
21070
|
+
parsedUrl.searchParams.delete(param);
|
|
21071
|
+
urlChanged = true;
|
|
21072
|
+
}
|
|
21073
|
+
}
|
|
21074
|
+
if (urlChanged) {
|
|
21075
|
+
cleanUrl = parsedUrl.toString();
|
|
21076
|
+
}
|
|
21077
|
+
} catch {
|
|
21078
|
+
}
|
|
21079
|
+
if (authRecord && authRecord.access) {
|
|
21080
|
+
let projectContext;
|
|
21081
|
+
try {
|
|
21082
|
+
projectContext = await ensureProjectContext(
|
|
21083
|
+
authRecord,
|
|
21084
|
+
{ auth: { set: async () => {
|
|
21085
|
+
} } },
|
|
21086
|
+
void 0,
|
|
21087
|
+
modelName
|
|
21088
|
+
);
|
|
21089
|
+
} catch {
|
|
21090
|
+
projectContext = {
|
|
21091
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
21092
|
+
auth: authRecord
|
|
21093
|
+
};
|
|
21094
|
+
}
|
|
21095
|
+
const originalRequestedModel = modelName;
|
|
21096
|
+
let modifiedUrl = cleanUrl;
|
|
21097
|
+
if (originalRequestedModel) {
|
|
21098
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21099
|
+
const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
|
|
21100
|
+
const resolvedBase = resolveModelTier(originalBase, { headers: initHeaders });
|
|
21101
|
+
if (originalBase !== resolvedBase) {
|
|
21102
|
+
modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
21103
|
+
}
|
|
21104
|
+
}
|
|
21105
|
+
let bodyPayload = event.body;
|
|
21106
|
+
if (bodyPayload === void 0 && event.request) {
|
|
21107
|
+
if (typeof event.request.clone === "function") {
|
|
21108
|
+
try {
|
|
21109
|
+
bodyPayload = await event.request.clone().text();
|
|
21110
|
+
} catch {
|
|
21111
|
+
}
|
|
21112
|
+
} else if (event.request.body !== void 0) {
|
|
21113
|
+
bodyPayload = event.request.body;
|
|
21114
|
+
}
|
|
21115
|
+
}
|
|
21116
|
+
let preExistingUserAgent;
|
|
21117
|
+
if (typeof event.headers?.get === "function") {
|
|
21118
|
+
preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
|
|
21119
|
+
} else if (event.headers && typeof event.headers === "object") {
|
|
21120
|
+
preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
|
|
21121
|
+
}
|
|
21122
|
+
if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
|
|
21123
|
+
preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
|
|
21124
|
+
} else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
|
|
21125
|
+
preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
|
|
21126
|
+
}
|
|
21127
|
+
const method = event.method || event.request?.method || "POST";
|
|
21128
|
+
const requestHeaders = event.headers || event.request?.headers;
|
|
21129
|
+
const transformed = prepareAgyRequest(
|
|
21130
|
+
modifiedUrl,
|
|
21131
|
+
{
|
|
21132
|
+
method,
|
|
21133
|
+
headers: requestHeaders,
|
|
21134
|
+
body: bodyPayload
|
|
21135
|
+
},
|
|
21136
|
+
authRecord.access,
|
|
21137
|
+
projectContext.effectiveProjectId
|
|
21138
|
+
);
|
|
21139
|
+
const targetUrl = toUrlString(transformed.request);
|
|
21140
|
+
if (typeof event.url === "string") {
|
|
21141
|
+
event.url = targetUrl;
|
|
21142
|
+
}
|
|
21143
|
+
if (event.request && typeof event.request === "object") {
|
|
21144
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21145
|
+
event.request = new Request(targetUrl, {
|
|
21146
|
+
method: transformed.init.method,
|
|
21147
|
+
headers: transformed.init.headers,
|
|
21148
|
+
body: transformed.init.body
|
|
21149
|
+
});
|
|
21150
|
+
} else if (typeof event.request.url === "string") {
|
|
21151
|
+
try {
|
|
21152
|
+
event.request.url = targetUrl;
|
|
21153
|
+
} catch {
|
|
21154
|
+
}
|
|
21155
|
+
}
|
|
21156
|
+
}
|
|
21157
|
+
const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
|
|
21158
|
+
for (const [k, v] of headerEntries) {
|
|
21159
|
+
const lowerK = k.toLowerCase();
|
|
21160
|
+
if (lowerK === "user-agent") {
|
|
21161
|
+
if (preExistingUserAgent) {
|
|
21162
|
+
continue;
|
|
21163
|
+
}
|
|
21164
|
+
if (typeof event.headers?.set === "function") {
|
|
21165
|
+
event.headers.set("User-Agent", v);
|
|
21166
|
+
} else if (event.headers) {
|
|
21167
|
+
event.headers["User-Agent"] = v;
|
|
21168
|
+
}
|
|
21169
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21170
|
+
event.request.headers.set("User-Agent", v);
|
|
21171
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21172
|
+
event.request.headers["User-Agent"] = v;
|
|
21173
|
+
}
|
|
21174
|
+
continue;
|
|
21175
|
+
}
|
|
21176
|
+
if (typeof event.headers?.set === "function") {
|
|
21177
|
+
event.headers.set(k, v);
|
|
21178
|
+
} else if (event.headers) {
|
|
21179
|
+
event.headers[k] = v;
|
|
21180
|
+
}
|
|
21181
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21182
|
+
event.request.headers.set(k, v);
|
|
21183
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21184
|
+
event.request.headers[k] = v;
|
|
21185
|
+
}
|
|
21186
|
+
}
|
|
21187
|
+
if (transformed.init.body !== void 0) {
|
|
21188
|
+
event.body = transformed.init.body;
|
|
21189
|
+
if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
|
|
21190
|
+
event.request.body = transformed.init.body;
|
|
21191
|
+
}
|
|
21192
|
+
}
|
|
21193
|
+
} else {
|
|
21194
|
+
if (typeof event.url === "string") {
|
|
21195
|
+
event.url = cleanUrl;
|
|
21196
|
+
}
|
|
21197
|
+
if (event.request && typeof event.request === "object") {
|
|
21198
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21199
|
+
event.request = new Request(cleanUrl, event.request);
|
|
21200
|
+
} else if (typeof event.request.url === "string") {
|
|
21201
|
+
try {
|
|
21202
|
+
event.request.url = cleanUrl;
|
|
21203
|
+
} catch {
|
|
21204
|
+
}
|
|
21205
|
+
}
|
|
21206
|
+
}
|
|
21207
|
+
}
|
|
21208
|
+
}
|
|
21209
|
+
if (authRecord && authRecord.access) {
|
|
21210
|
+
if (typeof event.headers?.set === "function") {
|
|
21211
|
+
event.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21212
|
+
} else if (event.headers) {
|
|
21213
|
+
event.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21214
|
+
}
|
|
21215
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21216
|
+
event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21217
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21218
|
+
event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21219
|
+
}
|
|
21220
|
+
}
|
|
21221
|
+
const userAgent = buildAgyCliUserAgent(modelName);
|
|
21222
|
+
if (typeof event.headers?.set === "function") {
|
|
21223
|
+
if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
|
|
21224
|
+
event.headers.set("User-Agent", userAgent);
|
|
21225
|
+
}
|
|
21226
|
+
} else if (event.headers) {
|
|
21227
|
+
if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
|
|
21228
|
+
event.headers["User-Agent"] = userAgent;
|
|
21229
|
+
}
|
|
21230
|
+
}
|
|
21231
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21232
|
+
if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
|
|
21233
|
+
event.request.headers.set("User-Agent", userAgent);
|
|
21234
|
+
}
|
|
21235
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21236
|
+
if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
|
|
21237
|
+
event.request.headers["User-Agent"] = userAgent;
|
|
21238
|
+
}
|
|
21239
|
+
}
|
|
21240
|
+
};
|
|
21241
|
+
}
|
|
21242
|
+
function createV2HttpResponseHook(state = {}) {
|
|
21243
|
+
return async (event) => {
|
|
21244
|
+
if (!event || !event.response) return;
|
|
21245
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21246
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21247
|
+
if (isInternal && event.response instanceof Response) {
|
|
21248
|
+
const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
|
|
21249
|
+
const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || state.lastInterceptedModel;
|
|
21250
|
+
const transformed = await transformAgyResponse(
|
|
21251
|
+
event.response,
|
|
21252
|
+
!!isStreaming,
|
|
21253
|
+
null,
|
|
21254
|
+
parsedModel,
|
|
21255
|
+
void 0,
|
|
21256
|
+
void 0
|
|
21257
|
+
);
|
|
21258
|
+
event.response = transformed;
|
|
21259
|
+
}
|
|
21260
|
+
};
|
|
21261
|
+
}
|
|
21262
|
+
function createV2RetryHook() {
|
|
21263
|
+
return async (event) => {
|
|
21264
|
+
if (!event) return;
|
|
21265
|
+
const response = event.response;
|
|
21266
|
+
if (response instanceof Response) {
|
|
21267
|
+
if (response.status === 429 || response.status === 503) {
|
|
21268
|
+
const quota = await classifyQuotaResponse(response);
|
|
21269
|
+
if (quota?.retryDelayMs) {
|
|
21270
|
+
event.retryDelayMs = quota.retryDelayMs;
|
|
21271
|
+
} else {
|
|
21272
|
+
event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
|
|
21273
|
+
}
|
|
21274
|
+
}
|
|
21275
|
+
} else if (event.details && Array.isArray(event.details)) {
|
|
21276
|
+
const retryInfo = event.details.find(
|
|
21277
|
+
(d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
|
|
21278
|
+
);
|
|
21279
|
+
if (retryInfo?.retryDelay) {
|
|
21280
|
+
const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
|
|
21281
|
+
if (delayMs !== null) {
|
|
21282
|
+
event.retryDelayMs = delayMs;
|
|
21283
|
+
}
|
|
21284
|
+
}
|
|
21285
|
+
}
|
|
21286
|
+
};
|
|
21287
|
+
}
|
|
21288
|
+
function registerV2SessionHooks(ctx) {
|
|
21289
|
+
const state = {};
|
|
21290
|
+
ctx.session.hook("http.request", createV2HttpRequestHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21291
|
+
ctx.session.hook("http.response", createV2HttpResponseHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21292
|
+
ctx.session.hook("retry", createV2RetryHook(), { providerID: AGY_PROVIDER_ID });
|
|
20816
21293
|
}
|
|
20817
21294
|
|
|
21295
|
+
// src/plugin/v2.ts
|
|
21296
|
+
async function setupOpenCodeV2(ctx) {
|
|
21297
|
+
const resolveVariants = (modelId) => {
|
|
21298
|
+
const mapping = TIER_MAPPING[modelId];
|
|
21299
|
+
if (!mapping) return void 0;
|
|
21300
|
+
const variants = [];
|
|
21301
|
+
if (mapping.minimal !== void 0) variants.push({ id: "minimal" });
|
|
21302
|
+
if (mapping.low !== void 0) variants.push({ id: "low" });
|
|
21303
|
+
if (mapping.medium !== void 0) variants.push({ id: "medium" });
|
|
21304
|
+
if (mapping.high !== void 0) variants.push({ id: "high" });
|
|
21305
|
+
return variants.length > 0 ? variants : void 0;
|
|
21306
|
+
};
|
|
21307
|
+
const updateProviderRecord = (p) => {
|
|
21308
|
+
p.name = "Antigravity CLI";
|
|
21309
|
+
p.activation = "enabled";
|
|
21310
|
+
p.package = "aisdk:@ai-sdk/google";
|
|
21311
|
+
p.description = "Google Gemini Antigravity Code Assist OAuth provider";
|
|
21312
|
+
p.settings = { ...p.settings || {}, apiKey: "dummy" };
|
|
21313
|
+
p.integrationID = AGY_PROVIDER_ID;
|
|
21314
|
+
};
|
|
21315
|
+
const buildModelRecord = (modelId, simple, existingModel) => {
|
|
21316
|
+
const isClaude = modelId.startsWith("claude-");
|
|
21317
|
+
const isGpt = modelId.startsWith("gpt-");
|
|
21318
|
+
const variants = resolveVariants(modelId);
|
|
21319
|
+
return {
|
|
21320
|
+
id: modelId,
|
|
21321
|
+
providerID: AGY_PROVIDER_ID,
|
|
21322
|
+
name: simple.name,
|
|
21323
|
+
description: simple.description,
|
|
21324
|
+
family: modelId.includes("gemini") ? "gemini" : isClaude ? "claude" : isGpt ? "gpt" : "unknown",
|
|
21325
|
+
reasoning: simple.reasoning,
|
|
21326
|
+
attachment: simple.attachment,
|
|
21327
|
+
tool_call: simple.toolCall,
|
|
21328
|
+
limit: {
|
|
21329
|
+
context: simple.maxTokens,
|
|
21330
|
+
output: simple.maxOutputTokens
|
|
21331
|
+
},
|
|
21332
|
+
cost: simple.cost || { input: 0, output: 0 },
|
|
21333
|
+
...variants ? { variants } : {},
|
|
21334
|
+
...existingModel || {}
|
|
21335
|
+
};
|
|
21336
|
+
};
|
|
21337
|
+
const updateModelRecord = (m, modelId, simple) => {
|
|
21338
|
+
m.name = simple.name;
|
|
21339
|
+
m.capabilities = {
|
|
21340
|
+
tools: true,
|
|
21341
|
+
input: ["text", "image"],
|
|
21342
|
+
output: ["text"]
|
|
21343
|
+
};
|
|
21344
|
+
m.limit = {
|
|
21345
|
+
context: simple.maxTokens,
|
|
21346
|
+
output: simple.maxOutputTokens
|
|
21347
|
+
};
|
|
21348
|
+
m.family = "gemini";
|
|
21349
|
+
if (simple.cost) {
|
|
21350
|
+
m.cost = simple.cost;
|
|
21351
|
+
}
|
|
21352
|
+
const variants = resolveVariants(modelId);
|
|
21353
|
+
if (variants) {
|
|
21354
|
+
m.variants = variants;
|
|
21355
|
+
}
|
|
21356
|
+
};
|
|
21357
|
+
if (ctx.provider?.transform) {
|
|
21358
|
+
ctx.provider.transform(async (editor) => {
|
|
21359
|
+
if (!editor) return;
|
|
21360
|
+
if (typeof editor.update === "function") {
|
|
21361
|
+
editor.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21362
|
+
} else if (typeof editor.set === "function") {
|
|
21363
|
+
const p = { id: AGY_PROVIDER_ID };
|
|
21364
|
+
updateProviderRecord(p);
|
|
21365
|
+
editor.set(AGY_PROVIDER_ID, p);
|
|
21366
|
+
} else if (typeof editor === "object") {
|
|
21367
|
+
const p = editor[AGY_PROVIDER_ID] || { id: AGY_PROVIDER_ID };
|
|
21368
|
+
updateProviderRecord(p);
|
|
21369
|
+
editor[AGY_PROVIDER_ID] = p;
|
|
21370
|
+
}
|
|
21371
|
+
});
|
|
21372
|
+
}
|
|
21373
|
+
if (ctx.model?.transform) {
|
|
21374
|
+
ctx.model.transform(async (editor) => {
|
|
21375
|
+
if (!editor) return;
|
|
21376
|
+
if (typeof editor.update === "function") {
|
|
21377
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21378
|
+
editor.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21379
|
+
}
|
|
21380
|
+
} else if (typeof editor.set === "function") {
|
|
21381
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21382
|
+
const m = buildModelRecord(modelId, simple);
|
|
21383
|
+
editor.set(`${AGY_PROVIDER_ID}:${modelId}`, m);
|
|
21384
|
+
}
|
|
21385
|
+
} else if (typeof editor === "object") {
|
|
21386
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21387
|
+
const key = `${AGY_PROVIDER_ID}:${modelId}`;
|
|
21388
|
+
editor[key] = buildModelRecord(modelId, simple, editor[key]);
|
|
21389
|
+
}
|
|
21390
|
+
}
|
|
21391
|
+
});
|
|
21392
|
+
}
|
|
21393
|
+
if (ctx.catalog?.transform) {
|
|
21394
|
+
ctx.catalog.transform(async (editor) => {
|
|
21395
|
+
if (!editor) return;
|
|
21396
|
+
if (typeof editor?.provider?.update === "function") {
|
|
21397
|
+
editor.provider.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21398
|
+
if (typeof editor?.model?.update === "function") {
|
|
21399
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21400
|
+
editor.model.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21401
|
+
}
|
|
21402
|
+
}
|
|
21403
|
+
return;
|
|
21404
|
+
}
|
|
21405
|
+
const catalog = editor;
|
|
21406
|
+
catalog.providers = catalog.providers || {};
|
|
21407
|
+
catalog.providers[AGY_PROVIDER_ID] = {
|
|
21408
|
+
id: AGY_PROVIDER_ID,
|
|
21409
|
+
name: "Antigravity CLI",
|
|
21410
|
+
npm: "aisdk:@ai-sdk/google",
|
|
21411
|
+
settings: { apiKey: "dummy" },
|
|
21412
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21413
|
+
models: { ...catalog.providers[AGY_PROVIDER_ID]?.models || {} },
|
|
21414
|
+
...catalog.providers[AGY_PROVIDER_ID]
|
|
21415
|
+
};
|
|
21416
|
+
if (catalog.providers[AGY_PROVIDER_ID].settings) {
|
|
21417
|
+
catalog.providers[AGY_PROVIDER_ID].settings = {
|
|
21418
|
+
...catalog.providers[AGY_PROVIDER_ID].settings,
|
|
21419
|
+
apiKey: "dummy"
|
|
21420
|
+
};
|
|
21421
|
+
} else {
|
|
21422
|
+
catalog.providers[AGY_PROVIDER_ID].settings = { apiKey: "dummy" };
|
|
21423
|
+
}
|
|
21424
|
+
catalog.providers[AGY_PROVIDER_ID].integrationID = AGY_PROVIDER_ID;
|
|
21425
|
+
const targetModels = catalog.providers[AGY_PROVIDER_ID].models;
|
|
21426
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21427
|
+
targetModels[modelId] = buildModelRecord(modelId, simple, targetModels[modelId]);
|
|
21428
|
+
}
|
|
21429
|
+
});
|
|
21430
|
+
}
|
|
21431
|
+
ctx.tool.transform(async (editor) => {
|
|
21432
|
+
if (!editor) return;
|
|
21433
|
+
const quotaTool = createAgyQuotaTool({
|
|
21434
|
+
client: void 0,
|
|
21435
|
+
getAuthResolver: () => void 0,
|
|
21436
|
+
getConfiguredProjectId: () => void 0,
|
|
21437
|
+
getUserAgentModel: () => void 0
|
|
21438
|
+
});
|
|
21439
|
+
const quotaSummaryTool = createAgyQuotaSummaryTool({
|
|
21440
|
+
client: void 0,
|
|
21441
|
+
getAuthResolver: () => void 0,
|
|
21442
|
+
getConfiguredProjectId: () => void 0,
|
|
21443
|
+
getUserAgentModel: () => void 0
|
|
21444
|
+
});
|
|
21445
|
+
if (typeof editor.add === "function") {
|
|
21446
|
+
editor.add({
|
|
21447
|
+
name: AGY_QUOTA_TOOL_NAME,
|
|
21448
|
+
description: quotaTool.description,
|
|
21449
|
+
input: {},
|
|
21450
|
+
execute: async (args, context) => quotaTool.execute(args, context)
|
|
21451
|
+
});
|
|
21452
|
+
editor.add({
|
|
21453
|
+
name: AGY_QUOTA_SUMMARY_TOOL_NAME,
|
|
21454
|
+
description: quotaSummaryTool.description,
|
|
21455
|
+
input: {},
|
|
21456
|
+
execute: async (args, context) => quotaSummaryTool.execute(args, context)
|
|
21457
|
+
});
|
|
21458
|
+
} else if (typeof editor.set === "function") {
|
|
21459
|
+
editor.set(AGY_QUOTA_TOOL_NAME, quotaTool);
|
|
21460
|
+
editor.set(AGY_QUOTA_SUMMARY_TOOL_NAME, quotaSummaryTool);
|
|
21461
|
+
} else if (editor.tools && typeof editor.tools === "object") {
|
|
21462
|
+
editor.tools[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21463
|
+
editor.tools[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21464
|
+
} else if (typeof editor === "object") {
|
|
21465
|
+
editor[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21466
|
+
editor[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21467
|
+
}
|
|
21468
|
+
});
|
|
21469
|
+
ctx.command.transform(async (editor) => {
|
|
21470
|
+
if (!editor) return;
|
|
21471
|
+
const commands = {
|
|
21472
|
+
[AGY_V2_QUOTA_COMMAND]: {
|
|
21473
|
+
description: "Show Agy Code Assist quota usage",
|
|
21474
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21475
|
+
},
|
|
21476
|
+
[AGY_V2_QUOTA_SUMMARY_COMMAND]: {
|
|
21477
|
+
description: "Show Agy Code Assist quota summary with weekly and 5-hour limits",
|
|
21478
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21479
|
+
}
|
|
21480
|
+
};
|
|
21481
|
+
if (typeof editor.add === "function") {
|
|
21482
|
+
editor.add({
|
|
21483
|
+
name: AGY_V2_QUOTA_COMMAND,
|
|
21484
|
+
description: "Display current Antigravity quota usage",
|
|
21485
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21486
|
+
});
|
|
21487
|
+
editor.add({
|
|
21488
|
+
name: AGY_V2_QUOTA_SUMMARY_COMMAND,
|
|
21489
|
+
description: "Display Antigravity quota summary grouped by model family",
|
|
21490
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21491
|
+
});
|
|
21492
|
+
} else if (typeof editor.set === "function") {
|
|
21493
|
+
editor.set(AGY_V2_QUOTA_COMMAND, commands[AGY_V2_QUOTA_COMMAND]);
|
|
21494
|
+
editor.set(AGY_V2_QUOTA_SUMMARY_COMMAND, commands[AGY_V2_QUOTA_SUMMARY_COMMAND]);
|
|
21495
|
+
} else if (editor.commands && typeof editor.commands === "object") {
|
|
21496
|
+
editor.commands[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21497
|
+
editor.commands[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21498
|
+
} else if (typeof editor === "object") {
|
|
21499
|
+
editor[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21500
|
+
editor[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21501
|
+
}
|
|
21502
|
+
});
|
|
21503
|
+
ctx.integration?.transform?.((editor) => {
|
|
21504
|
+
if (!editor) return;
|
|
21505
|
+
editor.update?.(AGY_PROVIDER_ID, (integration) => {
|
|
21506
|
+
integration.name = "Antigravity CLI (plugin)";
|
|
21507
|
+
});
|
|
21508
|
+
editor.method?.update?.({
|
|
21509
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21510
|
+
method: {
|
|
21511
|
+
id: "oauth",
|
|
21512
|
+
type: "oauth",
|
|
21513
|
+
label: "Antigravity CLI (OAuth)"
|
|
21514
|
+
},
|
|
21515
|
+
authorize: async () => {
|
|
21516
|
+
const authorization = await authorizeAgy();
|
|
21517
|
+
return {
|
|
21518
|
+
mode: "code",
|
|
21519
|
+
url: authorization.url,
|
|
21520
|
+
instructions: "Please complete Google account authorization in your browser. After authorization, copy the full redirect URL or code and paste it below:",
|
|
21521
|
+
callback: async (code) => {
|
|
21522
|
+
const trimmed = code.trim();
|
|
21523
|
+
const parsed = parseOAuthCallbackInput(trimmed);
|
|
21524
|
+
const authCode = parsed.code || trimmed;
|
|
21525
|
+
if (!authCode) {
|
|
21526
|
+
return { type: "failed", error: "Missing authorization code in callback input" };
|
|
21527
|
+
}
|
|
21528
|
+
if (parsed.state && parsed.state !== authorization.state) {
|
|
21529
|
+
return { type: "failed", error: "State mismatch in callback input (possible CSRF attempt)" };
|
|
21530
|
+
}
|
|
21531
|
+
const exchangeResult = await exchangeAgyWithVerifier(authCode, authorization.verifier);
|
|
21532
|
+
if (exchangeResult.type !== "success") {
|
|
21533
|
+
return exchangeResult;
|
|
21534
|
+
}
|
|
21535
|
+
const initialRefresh = formatRefreshParts({
|
|
21536
|
+
refreshToken: exchangeResult.refresh
|
|
21537
|
+
});
|
|
21538
|
+
let authRecord = {
|
|
21539
|
+
type: "oauth",
|
|
21540
|
+
refresh: initialRefresh,
|
|
21541
|
+
access: exchangeResult.access,
|
|
21542
|
+
expires: exchangeResult.expires
|
|
21543
|
+
};
|
|
21544
|
+
try {
|
|
21545
|
+
const projectContext = await ensureProjectContext(
|
|
21546
|
+
authRecord,
|
|
21547
|
+
{ auth: { set: async () => {
|
|
21548
|
+
} } }
|
|
21549
|
+
);
|
|
21550
|
+
authRecord = {
|
|
21551
|
+
...authRecord,
|
|
21552
|
+
refresh: projectContext.auth.refresh
|
|
21553
|
+
};
|
|
21554
|
+
} catch {
|
|
21555
|
+
}
|
|
21556
|
+
saveStoredAuthToJson(authRecord);
|
|
21557
|
+
return {
|
|
21558
|
+
type: "oauth",
|
|
21559
|
+
methodID: "oauth",
|
|
21560
|
+
refresh: authRecord.refresh,
|
|
21561
|
+
access: authRecord.access,
|
|
21562
|
+
expires: authRecord.expires
|
|
21563
|
+
};
|
|
21564
|
+
}
|
|
21565
|
+
};
|
|
21566
|
+
}
|
|
21567
|
+
});
|
|
21568
|
+
});
|
|
21569
|
+
ctx.aisdk?.hook("sdk", async (event) => {
|
|
21570
|
+
if (!event) return;
|
|
21571
|
+
const isMatchingProvider = event.providerID === AGY_PROVIDER_ID || event.model?.providerID === AGY_PROVIDER_ID;
|
|
21572
|
+
if (!isMatchingProvider) return;
|
|
21573
|
+
event.options = event.options || {};
|
|
21574
|
+
event.options.apiKey = "dummy";
|
|
21575
|
+
event.options.fetch = createV2FetchInterceptor();
|
|
21576
|
+
});
|
|
21577
|
+
registerV2SessionHooks(ctx);
|
|
21578
|
+
}
|
|
21579
|
+
var v2PluginDefinition = defineOpenCodeV2Plugin({
|
|
21580
|
+
id: AGY_PROVIDER_ID,
|
|
21581
|
+
setup: setupOpenCodeV2
|
|
21582
|
+
});
|
|
21583
|
+
|
|
20818
21584
|
// index.ts
|
|
20819
|
-
var
|
|
20820
|
-
|
|
21585
|
+
var dualPlugin = {
|
|
21586
|
+
...v2PluginDefinition,
|
|
20821
21587
|
server: AgyCLIOAuthPlugin
|
|
20822
21588
|
};
|
|
21589
|
+
var index_default = dualPlugin;
|
|
20823
21590
|
export {
|
|
20824
21591
|
AgyCLIOAuthPlugin,
|
|
20825
21592
|
GoogleOAuthPlugin,
|
|
20826
|
-
index_default as default
|
|
21593
|
+
index_default as default,
|
|
21594
|
+
defineOpenCodeV2Plugin,
|
|
21595
|
+
setupOpenCodeV2,
|
|
21596
|
+
v2PluginDefinition
|
|
20827
21597
|
};
|
|
20828
21598
|
//# sourceMappingURL=index.js.map
|