@anthonyhaussman/opencode-agy-auth 1.2.11 → 1.2.12-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 +973 -167
- 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 +5 -5
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.12";
|
|
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,
|
|
@@ -16044,12 +16073,15 @@ var models_default = {
|
|
|
16044
16073
|
},
|
|
16045
16074
|
experimentIds: [
|
|
16046
16075
|
106140402,
|
|
16076
|
+
106760947,
|
|
16047
16077
|
106519115,
|
|
16048
16078
|
105979552,
|
|
16049
16079
|
105979574,
|
|
16050
16080
|
106015333,
|
|
16081
|
+
106705494,
|
|
16051
16082
|
106568772,
|
|
16052
16083
|
105867471,
|
|
16084
|
+
106749606,
|
|
16053
16085
|
106123599,
|
|
16054
16086
|
106121401,
|
|
16055
16087
|
106100625,
|
|
@@ -16065,8 +16097,6 @@ var models_default = {
|
|
|
16065
16097
|
106283618,
|
|
16066
16098
|
106640126,
|
|
16067
16099
|
106380926,
|
|
16068
|
-
106723203,
|
|
16069
|
-
106242397,
|
|
16070
16100
|
106281951,
|
|
16071
16101
|
106264532,
|
|
16072
16102
|
106044947,
|
|
@@ -16086,7 +16116,6 @@ var models_default = {
|
|
|
16086
16116
|
105906495,
|
|
16087
16117
|
106283614,
|
|
16088
16118
|
106640124,
|
|
16089
|
-
106242393,
|
|
16090
16119
|
106038164,
|
|
16091
16120
|
106032301,
|
|
16092
16121
|
106121604
|
|
@@ -16149,7 +16178,7 @@ var models_default = {
|
|
|
16149
16178
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16150
16179
|
quotaInfo: {
|
|
16151
16180
|
remainingFraction: 1,
|
|
16152
|
-
resetTime: "2026-09-
|
|
16181
|
+
resetTime: "2026-09-27T22:46:11Z"
|
|
16153
16182
|
},
|
|
16154
16183
|
recommended: true,
|
|
16155
16184
|
supportedMimeTypes: {
|
|
@@ -16188,7 +16217,7 @@ var models_default = {
|
|
|
16188
16217
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16189
16218
|
quotaInfo: {
|
|
16190
16219
|
remainingFraction: 1,
|
|
16191
|
-
resetTime: "2026-09-
|
|
16220
|
+
resetTime: "2026-09-27T22:46:11Z"
|
|
16192
16221
|
},
|
|
16193
16222
|
recommended: true,
|
|
16194
16223
|
supportedMimeTypes: {
|
|
@@ -16224,8 +16253,8 @@ var models_default = {
|
|
|
16224
16253
|
},
|
|
16225
16254
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16226
16255
|
quotaInfo: {
|
|
16227
|
-
remainingFraction: 0.
|
|
16228
|
-
resetTime: "2026-09-
|
|
16256
|
+
remainingFraction: 0.9403093,
|
|
16257
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16229
16258
|
},
|
|
16230
16259
|
recommended: true,
|
|
16231
16260
|
supportedMimeTypes: {
|
|
@@ -16307,8 +16336,8 @@ var models_default = {
|
|
|
16307
16336
|
},
|
|
16308
16337
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16309
16338
|
quotaInfo: {
|
|
16310
|
-
remainingFraction: 0.
|
|
16311
|
-
resetTime: "2026-09-
|
|
16339
|
+
remainingFraction: 0.9403093,
|
|
16340
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16312
16341
|
},
|
|
16313
16342
|
recommended: true,
|
|
16314
16343
|
supportedMimeTypes: {
|
|
@@ -16390,8 +16419,8 @@ var models_default = {
|
|
|
16390
16419
|
},
|
|
16391
16420
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16392
16421
|
quotaInfo: {
|
|
16393
|
-
remainingFraction: 0.
|
|
16394
|
-
resetTime: "2026-09-
|
|
16422
|
+
remainingFraction: 0.9403093,
|
|
16423
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16395
16424
|
},
|
|
16396
16425
|
recommended: true,
|
|
16397
16426
|
supportedMimeTypes: {
|
|
@@ -16470,8 +16499,8 @@ var models_default = {
|
|
|
16470
16499
|
},
|
|
16471
16500
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16472
16501
|
quotaInfo: {
|
|
16473
|
-
remainingFraction: 0.
|
|
16474
|
-
resetTime: "2026-09-
|
|
16502
|
+
remainingFraction: 0.9403093,
|
|
16503
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16475
16504
|
},
|
|
16476
16505
|
recommended: true,
|
|
16477
16506
|
requiresImageOutputOutsideFunctionResponses: true,
|
|
@@ -16551,8 +16580,8 @@ var models_default = {
|
|
|
16551
16580
|
},
|
|
16552
16581
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16553
16582
|
quotaInfo: {
|
|
16554
|
-
remainingFraction: 0.
|
|
16555
|
-
resetTime: "2026-09-
|
|
16583
|
+
remainingFraction: 0.9403093,
|
|
16584
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16556
16585
|
},
|
|
16557
16586
|
recommended: true,
|
|
16558
16587
|
supportedMimeTypes: {
|
|
@@ -16656,8 +16685,8 @@ var models_default = {
|
|
|
16656
16685
|
},
|
|
16657
16686
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16658
16687
|
quotaInfo: {
|
|
16659
|
-
remainingFraction: 0.
|
|
16660
|
-
resetTime: "2026-09-
|
|
16688
|
+
remainingFraction: 0.9403093,
|
|
16689
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16661
16690
|
},
|
|
16662
16691
|
recommended: true,
|
|
16663
16692
|
supportedMimeTypes: {
|
|
@@ -16726,8 +16755,8 @@ var models_default = {
|
|
|
16726
16755
|
model: "MODEL_PLACEHOLDER_M21",
|
|
16727
16756
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16728
16757
|
quotaInfo: {
|
|
16729
|
-
remainingFraction: 0.
|
|
16730
|
-
resetTime: "2026-09-
|
|
16758
|
+
remainingFraction: 0.9403093,
|
|
16759
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16731
16760
|
}
|
|
16732
16761
|
},
|
|
16733
16762
|
"gemini-3.1-flash-lite": {
|
|
@@ -16745,8 +16774,8 @@ var models_default = {
|
|
|
16745
16774
|
},
|
|
16746
16775
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16747
16776
|
quotaInfo: {
|
|
16748
|
-
remainingFraction: 0.
|
|
16749
|
-
resetTime: "2026-09-
|
|
16777
|
+
remainingFraction: 0.9403093,
|
|
16778
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16750
16779
|
}
|
|
16751
16780
|
},
|
|
16752
16781
|
"gemini-3.1-pro-high": {
|
|
@@ -16777,8 +16806,8 @@ var models_default = {
|
|
|
16777
16806
|
},
|
|
16778
16807
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16779
16808
|
quotaInfo: {
|
|
16780
|
-
remainingFraction: 0.
|
|
16781
|
-
resetTime: "2026-09-
|
|
16809
|
+
remainingFraction: 0.9403093,
|
|
16810
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16782
16811
|
},
|
|
16783
16812
|
recommended: true,
|
|
16784
16813
|
supportedMimeTypes: {
|
|
@@ -16868,8 +16897,8 @@ var models_default = {
|
|
|
16868
16897
|
},
|
|
16869
16898
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16870
16899
|
quotaInfo: {
|
|
16871
|
-
remainingFraction: 0.
|
|
16872
|
-
resetTime: "2026-09-
|
|
16900
|
+
remainingFraction: 0.9403093,
|
|
16901
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16873
16902
|
},
|
|
16874
16903
|
recommended: true,
|
|
16875
16904
|
supportedMimeTypes: {
|
|
@@ -16973,8 +17002,8 @@ var models_default = {
|
|
|
16973
17002
|
},
|
|
16974
17003
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16975
17004
|
quotaInfo: {
|
|
16976
|
-
remainingFraction: 0.
|
|
16977
|
-
resetTime: "2026-09-
|
|
17005
|
+
remainingFraction: 0.9403093,
|
|
17006
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
16978
17007
|
},
|
|
16979
17008
|
recommended: true,
|
|
16980
17009
|
supportedMimeTypes: {
|
|
@@ -17056,8 +17085,8 @@ var models_default = {
|
|
|
17056
17085
|
},
|
|
17057
17086
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17058
17087
|
quotaInfo: {
|
|
17059
|
-
remainingFraction: 0.
|
|
17060
|
-
resetTime: "2026-09-
|
|
17088
|
+
remainingFraction: 0.9403093,
|
|
17089
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17061
17090
|
},
|
|
17062
17091
|
recommended: true,
|
|
17063
17092
|
supportedMimeTypes: {
|
|
@@ -17163,8 +17192,8 @@ var models_default = {
|
|
|
17163
17192
|
},
|
|
17164
17193
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17165
17194
|
quotaInfo: {
|
|
17166
|
-
remainingFraction: 0.
|
|
17167
|
-
resetTime: "2026-09-
|
|
17195
|
+
remainingFraction: 0.9403093,
|
|
17196
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17168
17197
|
},
|
|
17169
17198
|
recommended: true,
|
|
17170
17199
|
supportedMimeTypes: {
|
|
@@ -17282,8 +17311,8 @@ var models_default = {
|
|
|
17282
17311
|
},
|
|
17283
17312
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17284
17313
|
quotaInfo: {
|
|
17285
|
-
remainingFraction: 0.
|
|
17286
|
-
resetTime: "2026-09-
|
|
17314
|
+
remainingFraction: 0.9403093,
|
|
17315
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17287
17316
|
},
|
|
17288
17317
|
recommended: true,
|
|
17289
17318
|
supportedMimeTypes: {
|
|
@@ -17401,8 +17430,8 @@ var models_default = {
|
|
|
17401
17430
|
},
|
|
17402
17431
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17403
17432
|
quotaInfo: {
|
|
17404
|
-
remainingFraction: 0.
|
|
17405
|
-
resetTime: "2026-09-
|
|
17433
|
+
remainingFraction: 0.9403093,
|
|
17434
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17406
17435
|
},
|
|
17407
17436
|
recommended: true,
|
|
17408
17437
|
supportedMimeTypes: {
|
|
@@ -17520,8 +17549,8 @@ var models_default = {
|
|
|
17520
17549
|
},
|
|
17521
17550
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17522
17551
|
quotaInfo: {
|
|
17523
|
-
remainingFraction: 0.
|
|
17524
|
-
resetTime: "2026-09-
|
|
17552
|
+
remainingFraction: 0.9403093,
|
|
17553
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17525
17554
|
},
|
|
17526
17555
|
recommended: true,
|
|
17527
17556
|
supportedMimeTypes: {
|
|
@@ -17638,8 +17667,8 @@ var models_default = {
|
|
|
17638
17667
|
},
|
|
17639
17668
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17640
17669
|
quotaInfo: {
|
|
17641
|
-
remainingFraction: 0.
|
|
17642
|
-
resetTime: "2026-09-
|
|
17670
|
+
remainingFraction: 0.9403093,
|
|
17671
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17643
17672
|
},
|
|
17644
17673
|
recommended: true,
|
|
17645
17674
|
supportedMimeTypes: {
|
|
@@ -17749,8 +17778,8 @@ var models_default = {
|
|
|
17749
17778
|
},
|
|
17750
17779
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17751
17780
|
quotaInfo: {
|
|
17752
|
-
remainingFraction: 0.
|
|
17753
|
-
resetTime: "2026-09-
|
|
17781
|
+
remainingFraction: 0.9403093,
|
|
17782
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17754
17783
|
},
|
|
17755
17784
|
recommended: true,
|
|
17756
17785
|
supportedMimeTypes: {
|
|
@@ -17862,8 +17891,8 @@ var models_default = {
|
|
|
17862
17891
|
},
|
|
17863
17892
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17864
17893
|
quotaInfo: {
|
|
17865
|
-
remainingFraction: 0.
|
|
17866
|
-
resetTime: "2026-09-
|
|
17894
|
+
remainingFraction: 0.9403093,
|
|
17895
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17867
17896
|
},
|
|
17868
17897
|
recommended: true,
|
|
17869
17898
|
supportedMimeTypes: {
|
|
@@ -17975,8 +18004,8 @@ var models_default = {
|
|
|
17975
18004
|
},
|
|
17976
18005
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17977
18006
|
quotaInfo: {
|
|
17978
|
-
remainingFraction: 0.
|
|
17979
|
-
resetTime: "2026-09-
|
|
18007
|
+
remainingFraction: 0.9403093,
|
|
18008
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
17980
18009
|
},
|
|
17981
18010
|
recommended: true,
|
|
17982
18011
|
supportedMimeTypes: {
|
|
@@ -18087,8 +18116,8 @@ var models_default = {
|
|
|
18087
18116
|
},
|
|
18088
18117
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18089
18118
|
quotaInfo: {
|
|
18090
|
-
remainingFraction: 0.
|
|
18091
|
-
resetTime: "2026-09-
|
|
18119
|
+
remainingFraction: 0.9403093,
|
|
18120
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
18092
18121
|
},
|
|
18093
18122
|
recommended: true,
|
|
18094
18123
|
supportedMimeTypes: {
|
|
@@ -18198,8 +18227,8 @@ var models_default = {
|
|
|
18198
18227
|
},
|
|
18199
18228
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18200
18229
|
quotaInfo: {
|
|
18201
|
-
remainingFraction: 0.
|
|
18202
|
-
resetTime: "2026-09-
|
|
18230
|
+
remainingFraction: 0.9403093,
|
|
18231
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
18203
18232
|
},
|
|
18204
18233
|
recommended: true,
|
|
18205
18234
|
supportedMimeTypes: {
|
|
@@ -18311,8 +18340,8 @@ var models_default = {
|
|
|
18311
18340
|
},
|
|
18312
18341
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18313
18342
|
quotaInfo: {
|
|
18314
|
-
remainingFraction: 0.
|
|
18315
|
-
resetTime: "2026-09-
|
|
18343
|
+
remainingFraction: 0.9403093,
|
|
18344
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
18316
18345
|
},
|
|
18317
18346
|
recommended: true,
|
|
18318
18347
|
supportedMimeTypes: {
|
|
@@ -18424,8 +18453,8 @@ var models_default = {
|
|
|
18424
18453
|
},
|
|
18425
18454
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18426
18455
|
quotaInfo: {
|
|
18427
|
-
remainingFraction: 0.
|
|
18428
|
-
resetTime: "2026-09-
|
|
18456
|
+
remainingFraction: 0.9403093,
|
|
18457
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
18429
18458
|
},
|
|
18430
18459
|
recommended: true,
|
|
18431
18460
|
supportedMimeTypes: {
|
|
@@ -18536,8 +18565,8 @@ var models_default = {
|
|
|
18536
18565
|
},
|
|
18537
18566
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18538
18567
|
quotaInfo: {
|
|
18539
|
-
remainingFraction: 0.
|
|
18540
|
-
resetTime: "2026-09-
|
|
18568
|
+
remainingFraction: 0.9403093,
|
|
18569
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
18541
18570
|
},
|
|
18542
18571
|
recommended: true,
|
|
18543
18572
|
supportedMimeTypes: {
|
|
@@ -18626,8 +18655,8 @@ var models_default = {
|
|
|
18626
18655
|
},
|
|
18627
18656
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18628
18657
|
quotaInfo: {
|
|
18629
|
-
remainingFraction: 0.
|
|
18630
|
-
resetTime: "2026-09-
|
|
18658
|
+
remainingFraction: 0.9403093,
|
|
18659
|
+
resetTime: "2026-09-27T21:20:29Z"
|
|
18631
18660
|
},
|
|
18632
18661
|
recommended: true,
|
|
18633
18662
|
supportedMimeTypes: {
|
|
@@ -18704,7 +18733,7 @@ var models_default = {
|
|
|
18704
18733
|
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
18705
18734
|
quotaInfo: {
|
|
18706
18735
|
remainingFraction: 1,
|
|
18707
|
-
resetTime: "2026-09-
|
|
18736
|
+
resetTime: "2026-09-27T22:46:11Z"
|
|
18708
18737
|
},
|
|
18709
18738
|
recommended: true,
|
|
18710
18739
|
supportsThinking: true,
|
|
@@ -19776,9 +19805,14 @@ function normalizeToolSchemaTypes(tools, toolMapper) {
|
|
|
19776
19805
|
fn.name = toolMapper ? toolMapper.toGemini(fn.name) : sanitizeToolName(fn.name);
|
|
19777
19806
|
}
|
|
19778
19807
|
if (fn) {
|
|
19808
|
+
if (!fn.parameters) {
|
|
19809
|
+
fn.parameters = fn.parameters_json_schema ?? fn.parametersJsonSchema;
|
|
19810
|
+
}
|
|
19779
19811
|
if (!fn.parameters) {
|
|
19780
19812
|
fn.parameters = { type: "OBJECT", properties: {} };
|
|
19781
19813
|
}
|
|
19814
|
+
delete fn.parameters_json_schema;
|
|
19815
|
+
delete fn.parametersJsonSchema;
|
|
19782
19816
|
sanitizeSchema(fn.parameters);
|
|
19783
19817
|
}
|
|
19784
19818
|
}
|
|
@@ -20203,22 +20237,81 @@ var ChatLoggerImpl = class {
|
|
|
20203
20237
|
}
|
|
20204
20238
|
};
|
|
20205
20239
|
|
|
20206
|
-
// src/plugin.ts
|
|
20207
|
-
|
|
20208
|
-
|
|
20209
|
-
|
|
20210
|
-
|
|
20211
|
-
|
|
20212
|
-
|
|
20213
|
-
|
|
20214
|
-
|
|
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
|
+
}
|
|
20215
20313
|
|
|
20216
|
-
|
|
20217
|
-
Do not call other tools.
|
|
20218
|
-
`;
|
|
20219
|
-
var latestAgyAuthResolver;
|
|
20220
|
-
var latestAgyConfiguredProjectId;
|
|
20221
|
-
var latestAgyUserAgentModel;
|
|
20314
|
+
// src/plugin/tier.ts
|
|
20222
20315
|
var STATIC_MODELS_SIMPLE = {
|
|
20223
20316
|
"gemini-3.8-flash": {
|
|
20224
20317
|
name: "Gemini 3.8 Flash",
|
|
@@ -20306,6 +20399,39 @@ var TIER_MAPPING = {
|
|
|
20306
20399
|
high: "gemini-3.1-pro-high"
|
|
20307
20400
|
}
|
|
20308
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;
|
|
20309
20435
|
var buildModelFromSimple = (modelId, simple) => {
|
|
20310
20436
|
const isClaude = modelId.startsWith("claude-");
|
|
20311
20437
|
const isGpt = modelId.startsWith("gpt-");
|
|
@@ -20399,83 +20525,6 @@ var STATIC_MODELS = {};
|
|
|
20399
20525
|
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
20400
20526
|
STATIC_MODELS[modelId] = buildModelFromSimple(modelId, simple);
|
|
20401
20527
|
}
|
|
20402
|
-
function getSafeHeader(headers, key) {
|
|
20403
|
-
if (!headers) {
|
|
20404
|
-
return void 0;
|
|
20405
|
-
}
|
|
20406
|
-
const targetKey = key.toLowerCase();
|
|
20407
|
-
if (typeof headers.get === "function") {
|
|
20408
|
-
try {
|
|
20409
|
-
return headers.get(targetKey) || void 0;
|
|
20410
|
-
} catch {
|
|
20411
|
-
}
|
|
20412
|
-
}
|
|
20413
|
-
if (Array.isArray(headers)) {
|
|
20414
|
-
const found = headers.find((item) => {
|
|
20415
|
-
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20416
|
-
return item[0].toLowerCase() === targetKey;
|
|
20417
|
-
}
|
|
20418
|
-
return false;
|
|
20419
|
-
});
|
|
20420
|
-
return found ? String(found[1]) : void 0;
|
|
20421
|
-
}
|
|
20422
|
-
if (typeof headers === "object") {
|
|
20423
|
-
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20424
|
-
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20425
|
-
}
|
|
20426
|
-
return void 0;
|
|
20427
|
-
}
|
|
20428
|
-
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20429
|
-
if (typeof globalThis.Headers !== "undefined") {
|
|
20430
|
-
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20431
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20432
|
-
headers.set(k, v);
|
|
20433
|
-
}
|
|
20434
|
-
return headers;
|
|
20435
|
-
}
|
|
20436
|
-
if (Array.isArray(initHeaders)) {
|
|
20437
|
-
const nextHeaders2 = [...initHeaders];
|
|
20438
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20439
|
-
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20440
|
-
if (idx !== -1) {
|
|
20441
|
-
nextHeaders2[idx] = [k, v];
|
|
20442
|
-
} else {
|
|
20443
|
-
nextHeaders2.push([k, v]);
|
|
20444
|
-
}
|
|
20445
|
-
}
|
|
20446
|
-
return nextHeaders2;
|
|
20447
|
-
}
|
|
20448
|
-
const nextHeaders = {};
|
|
20449
|
-
if (initHeaders && typeof initHeaders === "object") {
|
|
20450
|
-
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20451
|
-
nextHeaders[k] = String(v);
|
|
20452
|
-
}
|
|
20453
|
-
}
|
|
20454
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20455
|
-
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20456
|
-
if (existingKey) {
|
|
20457
|
-
nextHeaders[existingKey] = v;
|
|
20458
|
-
} else {
|
|
20459
|
-
nextHeaders[k] = v;
|
|
20460
|
-
}
|
|
20461
|
-
}
|
|
20462
|
-
return nextHeaders;
|
|
20463
|
-
}
|
|
20464
|
-
function resolveModelTier(baseModelId, init) {
|
|
20465
|
-
const parts = baseModelId.split("@");
|
|
20466
|
-
const base = parts[0] || "";
|
|
20467
|
-
const suffixTier = parts[1]?.toLowerCase();
|
|
20468
|
-
const mapping = TIER_MAPPING[base];
|
|
20469
|
-
if (!mapping) {
|
|
20470
|
-
return baseModelId;
|
|
20471
|
-
}
|
|
20472
|
-
const headerTier = getSafeHeader(init?.headers, "x-agy-tier")?.toLowerCase() || null;
|
|
20473
|
-
const requestedTier = headerTier || suffixTier;
|
|
20474
|
-
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20475
|
-
return mapping[requestedTier] || baseModelId;
|
|
20476
|
-
}
|
|
20477
|
-
return mapping["medium"] ?? mapping["high"];
|
|
20478
|
-
}
|
|
20479
20528
|
var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
20480
20529
|
let latestConfig;
|
|
20481
20530
|
updateStaticModelsWithPricing(STATIC_MODELS);
|
|
@@ -20803,25 +20852,782 @@ async function ensureProjectContextOrThrow(authRecord, client, configuredProject
|
|
|
20803
20852
|
throw error45;
|
|
20804
20853
|
}
|
|
20805
20854
|
}
|
|
20806
|
-
|
|
20807
|
-
|
|
20808
|
-
|
|
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 {
|
|
20809
20879
|
}
|
|
20810
|
-
|
|
20811
|
-
|
|
20812
|
-
|
|
20880
|
+
return void 0;
|
|
20881
|
+
}
|
|
20882
|
+
function saveStoredAuthToJson(authRecord) {
|
|
20883
|
+
if (process.env.NODE_ENV === "test" || process.env.VITEST || storedAuthOverrideForTesting !== void 0) {
|
|
20884
|
+
return;
|
|
20813
20885
|
}
|
|
20814
|
-
|
|
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
|
+
};
|
|
20815
21025
|
}
|
|
20816
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
|
+
|
|
20817
21619
|
// index.ts
|
|
20818
|
-
var
|
|
20819
|
-
|
|
21620
|
+
var dualPlugin = {
|
|
21621
|
+
...v2PluginDefinition,
|
|
20820
21622
|
server: AgyCLIOAuthPlugin
|
|
20821
21623
|
};
|
|
21624
|
+
var index_default = dualPlugin;
|
|
20822
21625
|
export {
|
|
20823
21626
|
AgyCLIOAuthPlugin,
|
|
20824
21627
|
GoogleOAuthPlugin,
|
|
20825
|
-
index_default as default
|
|
21628
|
+
index_default as default,
|
|
21629
|
+
defineOpenCodeV2Plugin,
|
|
21630
|
+
setupOpenCodeV2,
|
|
21631
|
+
v2PluginDefinition
|
|
20826
21632
|
};
|
|
20827
21633
|
//# sourceMappingURL=index.js.map
|