@anthonyhaussman/opencode-agy-auth 1.2.7 → 1.2.8-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 +940 -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 +7 -7
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.8";
|
|
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,
|
|
@@ -16043,8 +16072,7 @@ var models_default = {
|
|
|
16043
16072
|
}
|
|
16044
16073
|
},
|
|
16045
16074
|
experimentIds: [
|
|
16046
|
-
|
|
16047
|
-
106329234,
|
|
16075
|
+
106140402,
|
|
16048
16076
|
106519115,
|
|
16049
16077
|
105979552,
|
|
16050
16078
|
105979574,
|
|
@@ -16066,7 +16094,6 @@ var models_default = {
|
|
|
16066
16094
|
106283618,
|
|
16067
16095
|
106640126,
|
|
16068
16096
|
106278607,
|
|
16069
|
-
106512082,
|
|
16070
16097
|
106380926,
|
|
16071
16098
|
106723203,
|
|
16072
16099
|
106242397,
|
|
@@ -16152,7 +16179,7 @@ var models_default = {
|
|
|
16152
16179
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16153
16180
|
quotaInfo: {
|
|
16154
16181
|
remainingFraction: 1,
|
|
16155
|
-
resetTime: "2026-09-
|
|
16182
|
+
resetTime: "2026-09-22T12:32:50Z"
|
|
16156
16183
|
},
|
|
16157
16184
|
recommended: true,
|
|
16158
16185
|
supportedMimeTypes: {
|
|
@@ -16191,7 +16218,7 @@ var models_default = {
|
|
|
16191
16218
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16192
16219
|
quotaInfo: {
|
|
16193
16220
|
remainingFraction: 1,
|
|
16194
|
-
resetTime: "2026-09-
|
|
16221
|
+
resetTime: "2026-09-22T12:32:50Z"
|
|
16195
16222
|
},
|
|
16196
16223
|
recommended: true,
|
|
16197
16224
|
supportedMimeTypes: {
|
|
@@ -16227,8 +16254,8 @@ var models_default = {
|
|
|
16227
16254
|
},
|
|
16228
16255
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16229
16256
|
quotaInfo: {
|
|
16230
|
-
remainingFraction: 0.
|
|
16231
|
-
resetTime: "2026-09-
|
|
16257
|
+
remainingFraction: 0.9721721,
|
|
16258
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16232
16259
|
},
|
|
16233
16260
|
recommended: true,
|
|
16234
16261
|
supportedMimeTypes: {
|
|
@@ -16310,8 +16337,8 @@ var models_default = {
|
|
|
16310
16337
|
},
|
|
16311
16338
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16312
16339
|
quotaInfo: {
|
|
16313
|
-
remainingFraction: 0.
|
|
16314
|
-
resetTime: "2026-09-
|
|
16340
|
+
remainingFraction: 0.9721721,
|
|
16341
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16315
16342
|
},
|
|
16316
16343
|
recommended: true,
|
|
16317
16344
|
supportedMimeTypes: {
|
|
@@ -16393,8 +16420,8 @@ var models_default = {
|
|
|
16393
16420
|
},
|
|
16394
16421
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16395
16422
|
quotaInfo: {
|
|
16396
|
-
remainingFraction: 0.
|
|
16397
|
-
resetTime: "2026-09-
|
|
16423
|
+
remainingFraction: 0.9721721,
|
|
16424
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16398
16425
|
},
|
|
16399
16426
|
recommended: true,
|
|
16400
16427
|
supportedMimeTypes: {
|
|
@@ -16473,8 +16500,8 @@ var models_default = {
|
|
|
16473
16500
|
},
|
|
16474
16501
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16475
16502
|
quotaInfo: {
|
|
16476
|
-
remainingFraction: 0.
|
|
16477
|
-
resetTime: "2026-09-
|
|
16503
|
+
remainingFraction: 0.9721721,
|
|
16504
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16478
16505
|
},
|
|
16479
16506
|
recommended: true,
|
|
16480
16507
|
requiresImageOutputOutsideFunctionResponses: true,
|
|
@@ -16554,8 +16581,8 @@ var models_default = {
|
|
|
16554
16581
|
},
|
|
16555
16582
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16556
16583
|
quotaInfo: {
|
|
16557
|
-
remainingFraction: 0.
|
|
16558
|
-
resetTime: "2026-09-
|
|
16584
|
+
remainingFraction: 0.9721721,
|
|
16585
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16559
16586
|
},
|
|
16560
16587
|
recommended: true,
|
|
16561
16588
|
supportedMimeTypes: {
|
|
@@ -16659,8 +16686,8 @@ var models_default = {
|
|
|
16659
16686
|
},
|
|
16660
16687
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16661
16688
|
quotaInfo: {
|
|
16662
|
-
remainingFraction: 0.
|
|
16663
|
-
resetTime: "2026-09-
|
|
16689
|
+
remainingFraction: 0.9721721,
|
|
16690
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16664
16691
|
},
|
|
16665
16692
|
recommended: true,
|
|
16666
16693
|
supportedMimeTypes: {
|
|
@@ -16729,8 +16756,8 @@ var models_default = {
|
|
|
16729
16756
|
model: "MODEL_PLACEHOLDER_M21",
|
|
16730
16757
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16731
16758
|
quotaInfo: {
|
|
16732
|
-
remainingFraction: 0.
|
|
16733
|
-
resetTime: "2026-09-
|
|
16759
|
+
remainingFraction: 0.9721721,
|
|
16760
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16734
16761
|
}
|
|
16735
16762
|
},
|
|
16736
16763
|
"gemini-3.1-flash-lite": {
|
|
@@ -16748,8 +16775,8 @@ var models_default = {
|
|
|
16748
16775
|
},
|
|
16749
16776
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16750
16777
|
quotaInfo: {
|
|
16751
|
-
remainingFraction: 0.
|
|
16752
|
-
resetTime: "2026-09-
|
|
16778
|
+
remainingFraction: 0.9721721,
|
|
16779
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16753
16780
|
}
|
|
16754
16781
|
},
|
|
16755
16782
|
"gemini-3.1-pro-high": {
|
|
@@ -16780,8 +16807,8 @@ var models_default = {
|
|
|
16780
16807
|
},
|
|
16781
16808
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16782
16809
|
quotaInfo: {
|
|
16783
|
-
remainingFraction: 0.
|
|
16784
|
-
resetTime: "2026-09-
|
|
16810
|
+
remainingFraction: 0.9721721,
|
|
16811
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16785
16812
|
},
|
|
16786
16813
|
recommended: true,
|
|
16787
16814
|
supportedMimeTypes: {
|
|
@@ -16871,8 +16898,8 @@ var models_default = {
|
|
|
16871
16898
|
},
|
|
16872
16899
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16873
16900
|
quotaInfo: {
|
|
16874
|
-
remainingFraction: 0.
|
|
16875
|
-
resetTime: "2026-09-
|
|
16901
|
+
remainingFraction: 0.9721721,
|
|
16902
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16876
16903
|
},
|
|
16877
16904
|
recommended: true,
|
|
16878
16905
|
supportedMimeTypes: {
|
|
@@ -16976,8 +17003,8 @@ var models_default = {
|
|
|
16976
17003
|
},
|
|
16977
17004
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16978
17005
|
quotaInfo: {
|
|
16979
|
-
remainingFraction: 0.
|
|
16980
|
-
resetTime: "2026-09-
|
|
17006
|
+
remainingFraction: 0.9721721,
|
|
17007
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
16981
17008
|
},
|
|
16982
17009
|
recommended: true,
|
|
16983
17010
|
supportedMimeTypes: {
|
|
@@ -17059,8 +17086,8 @@ var models_default = {
|
|
|
17059
17086
|
},
|
|
17060
17087
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17061
17088
|
quotaInfo: {
|
|
17062
|
-
remainingFraction: 0.
|
|
17063
|
-
resetTime: "2026-09-
|
|
17089
|
+
remainingFraction: 0.9721721,
|
|
17090
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17064
17091
|
},
|
|
17065
17092
|
recommended: true,
|
|
17066
17093
|
supportedMimeTypes: {
|
|
@@ -17166,8 +17193,8 @@ var models_default = {
|
|
|
17166
17193
|
},
|
|
17167
17194
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17168
17195
|
quotaInfo: {
|
|
17169
|
-
remainingFraction: 0.
|
|
17170
|
-
resetTime: "2026-09-
|
|
17196
|
+
remainingFraction: 0.9721721,
|
|
17197
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17171
17198
|
},
|
|
17172
17199
|
recommended: true,
|
|
17173
17200
|
supportedMimeTypes: {
|
|
@@ -17285,8 +17312,8 @@ var models_default = {
|
|
|
17285
17312
|
},
|
|
17286
17313
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17287
17314
|
quotaInfo: {
|
|
17288
|
-
remainingFraction: 0.
|
|
17289
|
-
resetTime: "2026-09-
|
|
17315
|
+
remainingFraction: 0.9721721,
|
|
17316
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17290
17317
|
},
|
|
17291
17318
|
recommended: true,
|
|
17292
17319
|
supportedMimeTypes: {
|
|
@@ -17404,8 +17431,8 @@ var models_default = {
|
|
|
17404
17431
|
},
|
|
17405
17432
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17406
17433
|
quotaInfo: {
|
|
17407
|
-
remainingFraction: 0.
|
|
17408
|
-
resetTime: "2026-09-
|
|
17434
|
+
remainingFraction: 0.9721721,
|
|
17435
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17409
17436
|
},
|
|
17410
17437
|
recommended: true,
|
|
17411
17438
|
supportedMimeTypes: {
|
|
@@ -17523,8 +17550,8 @@ var models_default = {
|
|
|
17523
17550
|
},
|
|
17524
17551
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17525
17552
|
quotaInfo: {
|
|
17526
|
-
remainingFraction: 0.
|
|
17527
|
-
resetTime: "2026-09-
|
|
17553
|
+
remainingFraction: 0.9721721,
|
|
17554
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17528
17555
|
},
|
|
17529
17556
|
recommended: true,
|
|
17530
17557
|
supportedMimeTypes: {
|
|
@@ -17641,8 +17668,8 @@ var models_default = {
|
|
|
17641
17668
|
},
|
|
17642
17669
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17643
17670
|
quotaInfo: {
|
|
17644
|
-
remainingFraction: 0.
|
|
17645
|
-
resetTime: "2026-09-
|
|
17671
|
+
remainingFraction: 0.9721721,
|
|
17672
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17646
17673
|
},
|
|
17647
17674
|
recommended: true,
|
|
17648
17675
|
supportedMimeTypes: {
|
|
@@ -17752,8 +17779,8 @@ var models_default = {
|
|
|
17752
17779
|
},
|
|
17753
17780
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17754
17781
|
quotaInfo: {
|
|
17755
|
-
remainingFraction: 0.
|
|
17756
|
-
resetTime: "2026-09-
|
|
17782
|
+
remainingFraction: 0.9721721,
|
|
17783
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17757
17784
|
},
|
|
17758
17785
|
recommended: true,
|
|
17759
17786
|
supportedMimeTypes: {
|
|
@@ -17865,8 +17892,8 @@ var models_default = {
|
|
|
17865
17892
|
},
|
|
17866
17893
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17867
17894
|
quotaInfo: {
|
|
17868
|
-
remainingFraction: 0.
|
|
17869
|
-
resetTime: "2026-09-
|
|
17895
|
+
remainingFraction: 0.9721721,
|
|
17896
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17870
17897
|
},
|
|
17871
17898
|
recommended: true,
|
|
17872
17899
|
supportedMimeTypes: {
|
|
@@ -17978,8 +18005,8 @@ var models_default = {
|
|
|
17978
18005
|
},
|
|
17979
18006
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17980
18007
|
quotaInfo: {
|
|
17981
|
-
remainingFraction: 0.
|
|
17982
|
-
resetTime: "2026-09-
|
|
18008
|
+
remainingFraction: 0.9721721,
|
|
18009
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
17983
18010
|
},
|
|
17984
18011
|
recommended: true,
|
|
17985
18012
|
supportedMimeTypes: {
|
|
@@ -18090,8 +18117,8 @@ var models_default = {
|
|
|
18090
18117
|
},
|
|
18091
18118
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18092
18119
|
quotaInfo: {
|
|
18093
|
-
remainingFraction: 0.
|
|
18094
|
-
resetTime: "2026-09-
|
|
18120
|
+
remainingFraction: 0.9721721,
|
|
18121
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
18095
18122
|
},
|
|
18096
18123
|
recommended: true,
|
|
18097
18124
|
supportedMimeTypes: {
|
|
@@ -18201,8 +18228,8 @@ var models_default = {
|
|
|
18201
18228
|
},
|
|
18202
18229
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18203
18230
|
quotaInfo: {
|
|
18204
|
-
remainingFraction: 0.
|
|
18205
|
-
resetTime: "2026-09-
|
|
18231
|
+
remainingFraction: 0.9721721,
|
|
18232
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
18206
18233
|
},
|
|
18207
18234
|
recommended: true,
|
|
18208
18235
|
supportedMimeTypes: {
|
|
@@ -18261,6 +18288,8 @@ var models_default = {
|
|
|
18261
18288
|
supportsImages: true,
|
|
18262
18289
|
supportsThinking: true,
|
|
18263
18290
|
supportsVideo: true,
|
|
18291
|
+
tagDescription: "Limited time",
|
|
18292
|
+
tagTitle: "Fast",
|
|
18264
18293
|
thinkingBudget: -1
|
|
18265
18294
|
},
|
|
18266
18295
|
"gemini-3.8-flash-low": {
|
|
@@ -18312,8 +18341,8 @@ var models_default = {
|
|
|
18312
18341
|
},
|
|
18313
18342
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18314
18343
|
quotaInfo: {
|
|
18315
|
-
remainingFraction: 0.
|
|
18316
|
-
resetTime: "2026-09-
|
|
18344
|
+
remainingFraction: 0.9721721,
|
|
18345
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
18317
18346
|
},
|
|
18318
18347
|
recommended: true,
|
|
18319
18348
|
supportedMimeTypes: {
|
|
@@ -18425,8 +18454,8 @@ var models_default = {
|
|
|
18425
18454
|
},
|
|
18426
18455
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18427
18456
|
quotaInfo: {
|
|
18428
|
-
remainingFraction: 0.
|
|
18429
|
-
resetTime: "2026-09-
|
|
18457
|
+
remainingFraction: 0.9721721,
|
|
18458
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
18430
18459
|
},
|
|
18431
18460
|
recommended: true,
|
|
18432
18461
|
supportedMimeTypes: {
|
|
@@ -18537,8 +18566,8 @@ var models_default = {
|
|
|
18537
18566
|
},
|
|
18538
18567
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18539
18568
|
quotaInfo: {
|
|
18540
|
-
remainingFraction: 0.
|
|
18541
|
-
resetTime: "2026-09-
|
|
18569
|
+
remainingFraction: 0.9721721,
|
|
18570
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
18542
18571
|
},
|
|
18543
18572
|
recommended: true,
|
|
18544
18573
|
supportedMimeTypes: {
|
|
@@ -18627,8 +18656,8 @@ var models_default = {
|
|
|
18627
18656
|
},
|
|
18628
18657
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18629
18658
|
quotaInfo: {
|
|
18630
|
-
remainingFraction: 0.
|
|
18631
|
-
resetTime: "2026-09-
|
|
18659
|
+
remainingFraction: 0.9721721,
|
|
18660
|
+
resetTime: "2026-09-22T12:27:35Z"
|
|
18632
18661
|
},
|
|
18633
18662
|
recommended: true,
|
|
18634
18663
|
supportedMimeTypes: {
|
|
@@ -18705,7 +18734,7 @@ var models_default = {
|
|
|
18705
18734
|
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
18706
18735
|
quotaInfo: {
|
|
18707
18736
|
remainingFraction: 1,
|
|
18708
|
-
resetTime: "2026-09-
|
|
18737
|
+
resetTime: "2026-09-22T12:32:50Z"
|
|
18709
18738
|
},
|
|
18710
18739
|
recommended: true,
|
|
18711
18740
|
supportsThinking: true,
|
|
@@ -20204,22 +20233,81 @@ var ChatLoggerImpl = class {
|
|
|
20204
20233
|
}
|
|
20205
20234
|
};
|
|
20206
20235
|
|
|
20207
|
-
// src/plugin.ts
|
|
20208
|
-
|
|
20209
|
-
|
|
20210
|
-
|
|
20211
|
-
|
|
20212
|
-
|
|
20213
|
-
|
|
20214
|
-
|
|
20215
|
-
|
|
20236
|
+
// src/plugin/headers.ts
|
|
20237
|
+
function getSafeHeader(headers, key) {
|
|
20238
|
+
if (!headers) {
|
|
20239
|
+
return void 0;
|
|
20240
|
+
}
|
|
20241
|
+
const targetKey = key.toLowerCase();
|
|
20242
|
+
if (typeof headers.get === "function") {
|
|
20243
|
+
try {
|
|
20244
|
+
return headers.get(targetKey) || void 0;
|
|
20245
|
+
} catch {
|
|
20246
|
+
}
|
|
20247
|
+
}
|
|
20248
|
+
if (Array.isArray(headers)) {
|
|
20249
|
+
const found = headers.find((item) => {
|
|
20250
|
+
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20251
|
+
return item[0].toLowerCase() === targetKey;
|
|
20252
|
+
}
|
|
20253
|
+
return false;
|
|
20254
|
+
});
|
|
20255
|
+
return found ? String(found[1]) : void 0;
|
|
20256
|
+
}
|
|
20257
|
+
if (typeof headers === "object") {
|
|
20258
|
+
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20259
|
+
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20260
|
+
}
|
|
20261
|
+
return void 0;
|
|
20262
|
+
}
|
|
20263
|
+
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20264
|
+
if (typeof globalThis.Headers !== "undefined") {
|
|
20265
|
+
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20266
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20267
|
+
headers.set(k, v);
|
|
20268
|
+
}
|
|
20269
|
+
return headers;
|
|
20270
|
+
}
|
|
20271
|
+
if (Array.isArray(initHeaders)) {
|
|
20272
|
+
const nextHeaders2 = [...initHeaders];
|
|
20273
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20274
|
+
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20275
|
+
if (idx !== -1) {
|
|
20276
|
+
nextHeaders2[idx] = [k, v];
|
|
20277
|
+
} else {
|
|
20278
|
+
nextHeaders2.push([k, v]);
|
|
20279
|
+
}
|
|
20280
|
+
}
|
|
20281
|
+
return nextHeaders2;
|
|
20282
|
+
}
|
|
20283
|
+
const nextHeaders = {};
|
|
20284
|
+
if (initHeaders && typeof initHeaders === "object") {
|
|
20285
|
+
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20286
|
+
nextHeaders[k] = String(v);
|
|
20287
|
+
}
|
|
20288
|
+
}
|
|
20289
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20290
|
+
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20291
|
+
if (existingKey) {
|
|
20292
|
+
nextHeaders[existingKey] = v;
|
|
20293
|
+
} else {
|
|
20294
|
+
nextHeaders[k] = v;
|
|
20295
|
+
}
|
|
20296
|
+
}
|
|
20297
|
+
return nextHeaders;
|
|
20298
|
+
}
|
|
20299
|
+
function toUrlString(value) {
|
|
20300
|
+
if (typeof value === "string") {
|
|
20301
|
+
return value;
|
|
20302
|
+
}
|
|
20303
|
+
const candidate = value.url;
|
|
20304
|
+
if (candidate) {
|
|
20305
|
+
return candidate;
|
|
20306
|
+
}
|
|
20307
|
+
return value.toString();
|
|
20308
|
+
}
|
|
20216
20309
|
|
|
20217
|
-
|
|
20218
|
-
Do not call other tools.
|
|
20219
|
-
`;
|
|
20220
|
-
var latestAgyAuthResolver;
|
|
20221
|
-
var latestAgyConfiguredProjectId;
|
|
20222
|
-
var latestAgyUserAgentModel;
|
|
20310
|
+
// src/plugin/tier.ts
|
|
20223
20311
|
var STATIC_MODELS_SIMPLE = {
|
|
20224
20312
|
"gemini-3.8-flash": {
|
|
20225
20313
|
name: "Gemini 3.8 Flash",
|
|
@@ -20307,6 +20395,39 @@ var TIER_MAPPING = {
|
|
|
20307
20395
|
high: "gemini-3.1-pro-high"
|
|
20308
20396
|
}
|
|
20309
20397
|
};
|
|
20398
|
+
function resolveModelTier(baseModelId, headersOrInit) {
|
|
20399
|
+
const parts = baseModelId.split("@");
|
|
20400
|
+
const base = parts[0] || "";
|
|
20401
|
+
const suffixTier = parts[1]?.toLowerCase();
|
|
20402
|
+
const mapping = TIER_MAPPING[base];
|
|
20403
|
+
if (!mapping) {
|
|
20404
|
+
return baseModelId;
|
|
20405
|
+
}
|
|
20406
|
+
const rawHeaders = headersOrInit && typeof headersOrInit === "object" && "headers" in headersOrInit ? headersOrInit.headers : headersOrInit;
|
|
20407
|
+
const headerTier = getSafeHeader(rawHeaders, "x-agy-tier")?.toLowerCase() || null;
|
|
20408
|
+
const requestedTier = headerTier || suffixTier;
|
|
20409
|
+
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20410
|
+
return mapping[requestedTier] || baseModelId;
|
|
20411
|
+
}
|
|
20412
|
+
return mapping["medium"] ?? mapping["high"] ?? baseModelId;
|
|
20413
|
+
}
|
|
20414
|
+
|
|
20415
|
+
// src/plugin.ts
|
|
20416
|
+
var AGY_QUOTA_COMMAND = "agyquota";
|
|
20417
|
+
var AGY_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
20418
|
+
|
|
20419
|
+
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20420
|
+
Do not call other tools.
|
|
20421
|
+
`;
|
|
20422
|
+
var AGY_QUOTA_SUMMARY_COMMAND = "agyquotasummary";
|
|
20423
|
+
var AGY_QUOTA_SUMMARY_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota summary (weekly and 5-hour limits by model group) for the current authenticated account.
|
|
20424
|
+
|
|
20425
|
+
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20426
|
+
Do not call other tools.
|
|
20427
|
+
`;
|
|
20428
|
+
var latestAgyAuthResolver;
|
|
20429
|
+
var latestAgyConfiguredProjectId;
|
|
20430
|
+
var latestAgyUserAgentModel;
|
|
20310
20431
|
var buildModelFromSimple = (modelId, simple) => {
|
|
20311
20432
|
const isClaude = modelId.startsWith("claude-");
|
|
20312
20433
|
const isGpt = modelId.startsWith("gpt-");
|
|
@@ -20400,83 +20521,6 @@ var STATIC_MODELS = {};
|
|
|
20400
20521
|
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
20401
20522
|
STATIC_MODELS[modelId] = buildModelFromSimple(modelId, simple);
|
|
20402
20523
|
}
|
|
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
20524
|
var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
20481
20525
|
let latestConfig;
|
|
20482
20526
|
updateStaticModelsWithPricing(STATIC_MODELS);
|
|
@@ -20804,25 +20848,754 @@ async function ensureProjectContextOrThrow(authRecord, client, configuredProject
|
|
|
20804
20848
|
throw error45;
|
|
20805
20849
|
}
|
|
20806
20850
|
}
|
|
20807
|
-
|
|
20808
|
-
|
|
20809
|
-
|
|
20851
|
+
|
|
20852
|
+
// src/plugin/types.ts
|
|
20853
|
+
function defineOpenCodeV2Plugin(def) {
|
|
20854
|
+
return def;
|
|
20855
|
+
}
|
|
20856
|
+
|
|
20857
|
+
// src/plugin/v2-storage.ts
|
|
20858
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync5 } from "fs";
|
|
20859
|
+
import { homedir as homedir4 } from "os";
|
|
20860
|
+
import { join as join6 } from "path";
|
|
20861
|
+
var storedAuthOverrideForTesting = void 0;
|
|
20862
|
+
function loadStoredAuthFromJson() {
|
|
20863
|
+
if (storedAuthOverrideForTesting !== void 0) {
|
|
20864
|
+
return storedAuthOverrideForTesting;
|
|
20865
|
+
}
|
|
20866
|
+
const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
|
|
20867
|
+
try {
|
|
20868
|
+
if (existsSync6(authPath)) {
|
|
20869
|
+
const content = readFileSync5(authPath, "utf8");
|
|
20870
|
+
const data = JSON.parse(content);
|
|
20871
|
+
return data?.[AGY_PROVIDER_ID];
|
|
20872
|
+
}
|
|
20873
|
+
} catch {
|
|
20810
20874
|
}
|
|
20811
|
-
|
|
20812
|
-
|
|
20813
|
-
|
|
20875
|
+
return void 0;
|
|
20876
|
+
}
|
|
20877
|
+
function saveStoredAuthToJson(authRecord) {
|
|
20878
|
+
if (process.env.NODE_ENV === "test" || process.env.VITEST || storedAuthOverrideForTesting !== void 0) {
|
|
20879
|
+
return;
|
|
20880
|
+
}
|
|
20881
|
+
try {
|
|
20882
|
+
const dirPath = join6(homedir4(), ".local", "share", "opencode");
|
|
20883
|
+
if (!existsSync6(dirPath)) {
|
|
20884
|
+
mkdirSync5(dirPath, { recursive: true });
|
|
20885
|
+
}
|
|
20886
|
+
const authPath = join6(dirPath, "auth.json");
|
|
20887
|
+
let data = {};
|
|
20888
|
+
if (existsSync6(authPath)) {
|
|
20889
|
+
try {
|
|
20890
|
+
data = JSON.parse(readFileSync5(authPath, "utf8")) || {};
|
|
20891
|
+
} catch {
|
|
20892
|
+
data = {};
|
|
20893
|
+
}
|
|
20894
|
+
}
|
|
20895
|
+
data[AGY_PROVIDER_ID] = {
|
|
20896
|
+
type: "oauth",
|
|
20897
|
+
refresh: authRecord.refresh,
|
|
20898
|
+
access: authRecord.access,
|
|
20899
|
+
expires: authRecord.expires
|
|
20900
|
+
};
|
|
20901
|
+
writeFileSync5(authPath, JSON.stringify(data, null, 2), "utf8");
|
|
20902
|
+
} catch {
|
|
20814
20903
|
}
|
|
20815
|
-
return value.toString();
|
|
20816
20904
|
}
|
|
20817
20905
|
|
|
20906
|
+
// src/plugin/v2-fetch.ts
|
|
20907
|
+
function createV2FetchInterceptor(getAuthSnapshot) {
|
|
20908
|
+
return async function agyV2Fetch(input, init) {
|
|
20909
|
+
const isGL = isGenerativeLanguageRequest(input);
|
|
20910
|
+
const isInternal = toUrlString(input).includes("cloudcode-pa.googleapis.com");
|
|
20911
|
+
if (!isGL && !isInternal) {
|
|
20912
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20913
|
+
}
|
|
20914
|
+
let rawAuth = getAuthSnapshot ? await getAuthSnapshot() : void 0;
|
|
20915
|
+
if (!rawAuth) {
|
|
20916
|
+
rawAuth = loadStoredAuthFromJson();
|
|
20917
|
+
}
|
|
20918
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
20919
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20920
|
+
}
|
|
20921
|
+
let authRecord = resolveCachedAuth(rawAuth);
|
|
20922
|
+
if (accessTokenExpired(authRecord)) {
|
|
20923
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
20924
|
+
} } });
|
|
20925
|
+
if (refreshed) {
|
|
20926
|
+
authRecord = refreshed;
|
|
20927
|
+
}
|
|
20928
|
+
}
|
|
20929
|
+
if (!authRecord.access) {
|
|
20930
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20931
|
+
}
|
|
20932
|
+
if (isInternal) {
|
|
20933
|
+
const hasAuth = getSafeHeader(init?.headers, "Authorization") !== void 0;
|
|
20934
|
+
if (hasAuth) {
|
|
20935
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20936
|
+
}
|
|
20937
|
+
const userAgent = buildAgyCliUserAgent();
|
|
20938
|
+
const headers = setSafeHeaders(init?.headers, {
|
|
20939
|
+
Authorization: `Bearer ${authRecord.access}`,
|
|
20940
|
+
"User-Agent": userAgent
|
|
20941
|
+
});
|
|
20942
|
+
return (globalThis.fetch || fetch)(input, {
|
|
20943
|
+
...init,
|
|
20944
|
+
headers
|
|
20945
|
+
});
|
|
20946
|
+
}
|
|
20947
|
+
const requestTarget = parseGenerativeLanguageRequest(input);
|
|
20948
|
+
const requestUserAgentModel = requestTarget?.effectiveModel;
|
|
20949
|
+
let projectContext;
|
|
20950
|
+
try {
|
|
20951
|
+
projectContext = await ensureProjectContext(
|
|
20952
|
+
authRecord,
|
|
20953
|
+
{ auth: { set: async () => {
|
|
20954
|
+
} } },
|
|
20955
|
+
void 0,
|
|
20956
|
+
requestUserAgentModel
|
|
20957
|
+
);
|
|
20958
|
+
} catch {
|
|
20959
|
+
projectContext = {
|
|
20960
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
20961
|
+
auth: authRecord
|
|
20962
|
+
};
|
|
20963
|
+
}
|
|
20964
|
+
const originalRequestedModel = parseGenerativeLanguageRequest(input)?.effectiveModel;
|
|
20965
|
+
let modifiedInput = input;
|
|
20966
|
+
if (isGL && originalRequestedModel) {
|
|
20967
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
20968
|
+
const resolvedBase = resolveModelTier(originalBase, init);
|
|
20969
|
+
if (originalBase !== resolvedBase) {
|
|
20970
|
+
if (typeof modifiedInput === "string") {
|
|
20971
|
+
modifiedInput = modifiedInput.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20972
|
+
} else if (typeof Request !== "undefined" && modifiedInput instanceof Request) {
|
|
20973
|
+
const newUrl = modifiedInput.url.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20974
|
+
modifiedInput = new Request(newUrl, modifiedInput);
|
|
20975
|
+
}
|
|
20976
|
+
}
|
|
20977
|
+
}
|
|
20978
|
+
const transformed = prepareAgyRequest(
|
|
20979
|
+
modifiedInput,
|
|
20980
|
+
init,
|
|
20981
|
+
authRecord.access,
|
|
20982
|
+
projectContext.effectiveProjectId,
|
|
20983
|
+
void 0
|
|
20984
|
+
);
|
|
20985
|
+
const chatLogger = createChatLogger();
|
|
20986
|
+
if (chatLogger) {
|
|
20987
|
+
chatLogger.logRequest(
|
|
20988
|
+
toUrlString(transformed.request),
|
|
20989
|
+
transformed.init.method || "GET",
|
|
20990
|
+
transformed.init.headers,
|
|
20991
|
+
transformed.init.body
|
|
20992
|
+
);
|
|
20993
|
+
}
|
|
20994
|
+
const response = await fetchWithRetry(transformed.request, transformed.init);
|
|
20995
|
+
return transformAgyResponse(
|
|
20996
|
+
response,
|
|
20997
|
+
transformed.streaming,
|
|
20998
|
+
null,
|
|
20999
|
+
transformed.requestedModel,
|
|
21000
|
+
transformed.sessionId,
|
|
21001
|
+
chatLogger
|
|
21002
|
+
);
|
|
21003
|
+
};
|
|
21004
|
+
}
|
|
21005
|
+
|
|
21006
|
+
// src/plugin/v2-session.ts
|
|
21007
|
+
function createV2HttpRequestHook(state = {}) {
|
|
21008
|
+
return async (event) => {
|
|
21009
|
+
if (!event) return;
|
|
21010
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21011
|
+
const isGL = isGenerativeLanguageRequest(rawUrl);
|
|
21012
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21013
|
+
if (!isGL && !isInternal) {
|
|
21014
|
+
return;
|
|
21015
|
+
}
|
|
21016
|
+
event.headers = event.headers || {};
|
|
21017
|
+
let modelName;
|
|
21018
|
+
let rawAuth = event.auth;
|
|
21019
|
+
if (rawAuth && !rawAuth.type) {
|
|
21020
|
+
const tokenVal = rawAuth.access || rawAuth.token;
|
|
21021
|
+
if (tokenVal || rawAuth.refresh) {
|
|
21022
|
+
rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
|
|
21023
|
+
}
|
|
21024
|
+
}
|
|
21025
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21026
|
+
rawAuth = loadStoredAuthFromJson();
|
|
21027
|
+
}
|
|
21028
|
+
let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
|
|
21029
|
+
if (authRecord && accessTokenExpired(authRecord)) {
|
|
21030
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
21031
|
+
} } });
|
|
21032
|
+
if (refreshed) {
|
|
21033
|
+
authRecord = refreshed;
|
|
21034
|
+
saveStoredAuthToJson(refreshed);
|
|
21035
|
+
}
|
|
21036
|
+
}
|
|
21037
|
+
if (isGL) {
|
|
21038
|
+
const parsed = parseGenerativeLanguageRequest(rawUrl);
|
|
21039
|
+
modelName = parsed?.effectiveModel;
|
|
21040
|
+
if (modelName) {
|
|
21041
|
+
state.lastInterceptedModel = modelName;
|
|
21042
|
+
}
|
|
21043
|
+
if (typeof event.headers.delete === "function") {
|
|
21044
|
+
event.headers.delete("x-goog-api-key");
|
|
21045
|
+
event.headers.delete("api-key");
|
|
21046
|
+
} else {
|
|
21047
|
+
for (const key of Object.keys(event.headers)) {
|
|
21048
|
+
const lower = key.toLowerCase();
|
|
21049
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21050
|
+
delete event.headers[key];
|
|
21051
|
+
}
|
|
21052
|
+
}
|
|
21053
|
+
}
|
|
21054
|
+
if (event.request?.headers) {
|
|
21055
|
+
if (typeof event.request.headers.delete === "function") {
|
|
21056
|
+
event.request.headers.delete("x-goog-api-key");
|
|
21057
|
+
event.request.headers.delete("api-key");
|
|
21058
|
+
} else {
|
|
21059
|
+
for (const key of Object.keys(event.request.headers)) {
|
|
21060
|
+
const lower = key.toLowerCase();
|
|
21061
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21062
|
+
delete event.request.headers[key];
|
|
21063
|
+
}
|
|
21064
|
+
}
|
|
21065
|
+
}
|
|
21066
|
+
}
|
|
21067
|
+
let cleanUrl = rawUrl;
|
|
21068
|
+
try {
|
|
21069
|
+
const parsedUrl = new URL(rawUrl);
|
|
21070
|
+
let urlChanged = false;
|
|
21071
|
+
for (const param of ["key", "x-goog-api-key", "api-key"]) {
|
|
21072
|
+
if (parsedUrl.searchParams.has(param)) {
|
|
21073
|
+
parsedUrl.searchParams.delete(param);
|
|
21074
|
+
urlChanged = true;
|
|
21075
|
+
}
|
|
21076
|
+
}
|
|
21077
|
+
if (urlChanged) {
|
|
21078
|
+
cleanUrl = parsedUrl.toString();
|
|
21079
|
+
}
|
|
21080
|
+
} catch {
|
|
21081
|
+
}
|
|
21082
|
+
if (authRecord && authRecord.access) {
|
|
21083
|
+
let projectContext;
|
|
21084
|
+
try {
|
|
21085
|
+
projectContext = await ensureProjectContext(
|
|
21086
|
+
authRecord,
|
|
21087
|
+
{ auth: { set: async () => {
|
|
21088
|
+
} } },
|
|
21089
|
+
void 0,
|
|
21090
|
+
modelName
|
|
21091
|
+
);
|
|
21092
|
+
} catch {
|
|
21093
|
+
projectContext = {
|
|
21094
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
21095
|
+
auth: authRecord
|
|
21096
|
+
};
|
|
21097
|
+
}
|
|
21098
|
+
const originalRequestedModel = modelName;
|
|
21099
|
+
let modifiedUrl = cleanUrl;
|
|
21100
|
+
if (originalRequestedModel) {
|
|
21101
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21102
|
+
const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
|
|
21103
|
+
const resolvedBase = resolveModelTier(originalBase, { headers: initHeaders });
|
|
21104
|
+
if (originalBase !== resolvedBase) {
|
|
21105
|
+
modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
21106
|
+
}
|
|
21107
|
+
}
|
|
21108
|
+
let bodyPayload = event.body;
|
|
21109
|
+
if (bodyPayload === void 0 && event.request) {
|
|
21110
|
+
if (typeof event.request.clone === "function") {
|
|
21111
|
+
try {
|
|
21112
|
+
bodyPayload = await event.request.clone().text();
|
|
21113
|
+
} catch {
|
|
21114
|
+
}
|
|
21115
|
+
} else if (event.request.body !== void 0) {
|
|
21116
|
+
bodyPayload = event.request.body;
|
|
21117
|
+
}
|
|
21118
|
+
}
|
|
21119
|
+
let preExistingUserAgent;
|
|
21120
|
+
if (typeof event.headers?.get === "function") {
|
|
21121
|
+
preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
|
|
21122
|
+
} else if (event.headers && typeof event.headers === "object") {
|
|
21123
|
+
preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
|
|
21124
|
+
}
|
|
21125
|
+
if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
|
|
21126
|
+
preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
|
|
21127
|
+
} else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
|
|
21128
|
+
preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
|
|
21129
|
+
}
|
|
21130
|
+
const method = event.method || event.request?.method || "POST";
|
|
21131
|
+
const requestHeaders = event.headers || event.request?.headers;
|
|
21132
|
+
const transformed = prepareAgyRequest(
|
|
21133
|
+
modifiedUrl,
|
|
21134
|
+
{
|
|
21135
|
+
method,
|
|
21136
|
+
headers: requestHeaders,
|
|
21137
|
+
body: bodyPayload
|
|
21138
|
+
},
|
|
21139
|
+
authRecord.access,
|
|
21140
|
+
projectContext.effectiveProjectId
|
|
21141
|
+
);
|
|
21142
|
+
const targetUrl = toUrlString(transformed.request);
|
|
21143
|
+
if (typeof event.url === "string") {
|
|
21144
|
+
event.url = targetUrl;
|
|
21145
|
+
}
|
|
21146
|
+
if (event.request && typeof event.request === "object") {
|
|
21147
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21148
|
+
event.request = new Request(targetUrl, {
|
|
21149
|
+
method: transformed.init.method,
|
|
21150
|
+
headers: transformed.init.headers,
|
|
21151
|
+
body: transformed.init.body
|
|
21152
|
+
});
|
|
21153
|
+
} else if (typeof event.request.url === "string") {
|
|
21154
|
+
try {
|
|
21155
|
+
event.request.url = targetUrl;
|
|
21156
|
+
} catch {
|
|
21157
|
+
}
|
|
21158
|
+
}
|
|
21159
|
+
}
|
|
21160
|
+
const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
|
|
21161
|
+
for (const [k, v] of headerEntries) {
|
|
21162
|
+
const lowerK = k.toLowerCase();
|
|
21163
|
+
if (lowerK === "user-agent") {
|
|
21164
|
+
if (preExistingUserAgent) {
|
|
21165
|
+
continue;
|
|
21166
|
+
}
|
|
21167
|
+
if (typeof event.headers?.set === "function") {
|
|
21168
|
+
event.headers.set("User-Agent", v);
|
|
21169
|
+
} else if (event.headers) {
|
|
21170
|
+
event.headers["User-Agent"] = v;
|
|
21171
|
+
}
|
|
21172
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21173
|
+
event.request.headers.set("User-Agent", v);
|
|
21174
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21175
|
+
event.request.headers["User-Agent"] = v;
|
|
21176
|
+
}
|
|
21177
|
+
continue;
|
|
21178
|
+
}
|
|
21179
|
+
if (typeof event.headers?.set === "function") {
|
|
21180
|
+
event.headers.set(k, v);
|
|
21181
|
+
} else if (event.headers) {
|
|
21182
|
+
event.headers[k] = v;
|
|
21183
|
+
}
|
|
21184
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21185
|
+
event.request.headers.set(k, v);
|
|
21186
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21187
|
+
event.request.headers[k] = v;
|
|
21188
|
+
}
|
|
21189
|
+
}
|
|
21190
|
+
if (transformed.init.body !== void 0) {
|
|
21191
|
+
event.body = transformed.init.body;
|
|
21192
|
+
if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
|
|
21193
|
+
event.request.body = transformed.init.body;
|
|
21194
|
+
}
|
|
21195
|
+
}
|
|
21196
|
+
} else {
|
|
21197
|
+
if (typeof event.url === "string") {
|
|
21198
|
+
event.url = cleanUrl;
|
|
21199
|
+
}
|
|
21200
|
+
if (event.request && typeof event.request === "object") {
|
|
21201
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21202
|
+
event.request = new Request(cleanUrl, event.request);
|
|
21203
|
+
} else if (typeof event.request.url === "string") {
|
|
21204
|
+
try {
|
|
21205
|
+
event.request.url = cleanUrl;
|
|
21206
|
+
} catch {
|
|
21207
|
+
}
|
|
21208
|
+
}
|
|
21209
|
+
}
|
|
21210
|
+
}
|
|
21211
|
+
}
|
|
21212
|
+
if (authRecord && authRecord.access) {
|
|
21213
|
+
if (typeof event.headers?.set === "function") {
|
|
21214
|
+
event.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21215
|
+
} else if (event.headers) {
|
|
21216
|
+
event.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21217
|
+
}
|
|
21218
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21219
|
+
event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21220
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21221
|
+
event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21222
|
+
}
|
|
21223
|
+
}
|
|
21224
|
+
const userAgent = buildAgyCliUserAgent(modelName);
|
|
21225
|
+
if (typeof event.headers?.set === "function") {
|
|
21226
|
+
if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
|
|
21227
|
+
event.headers.set("User-Agent", userAgent);
|
|
21228
|
+
}
|
|
21229
|
+
} else if (event.headers) {
|
|
21230
|
+
if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
|
|
21231
|
+
event.headers["User-Agent"] = userAgent;
|
|
21232
|
+
}
|
|
21233
|
+
}
|
|
21234
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21235
|
+
if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
|
|
21236
|
+
event.request.headers.set("User-Agent", userAgent);
|
|
21237
|
+
}
|
|
21238
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21239
|
+
if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
|
|
21240
|
+
event.request.headers["User-Agent"] = userAgent;
|
|
21241
|
+
}
|
|
21242
|
+
}
|
|
21243
|
+
};
|
|
21244
|
+
}
|
|
21245
|
+
function createV2HttpResponseHook(state = {}) {
|
|
21246
|
+
return async (event) => {
|
|
21247
|
+
if (!event || !event.response) return;
|
|
21248
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21249
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21250
|
+
if (isInternal && event.response instanceof Response) {
|
|
21251
|
+
const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
|
|
21252
|
+
const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || state.lastInterceptedModel;
|
|
21253
|
+
const transformed = await transformAgyResponse(
|
|
21254
|
+
event.response,
|
|
21255
|
+
!!isStreaming,
|
|
21256
|
+
null,
|
|
21257
|
+
parsedModel,
|
|
21258
|
+
void 0,
|
|
21259
|
+
void 0
|
|
21260
|
+
);
|
|
21261
|
+
event.response = transformed;
|
|
21262
|
+
}
|
|
21263
|
+
};
|
|
21264
|
+
}
|
|
21265
|
+
function createV2RetryHook() {
|
|
21266
|
+
return async (event) => {
|
|
21267
|
+
if (!event) return;
|
|
21268
|
+
const response = event.response;
|
|
21269
|
+
if (response instanceof Response) {
|
|
21270
|
+
if (response.status === 429 || response.status === 503) {
|
|
21271
|
+
const quota = await classifyQuotaResponse(response);
|
|
21272
|
+
if (quota?.retryDelayMs) {
|
|
21273
|
+
event.retryDelayMs = quota.retryDelayMs;
|
|
21274
|
+
} else {
|
|
21275
|
+
event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
|
|
21276
|
+
}
|
|
21277
|
+
}
|
|
21278
|
+
} else if (event.details && Array.isArray(event.details)) {
|
|
21279
|
+
const retryInfo = event.details.find(
|
|
21280
|
+
(d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
|
|
21281
|
+
);
|
|
21282
|
+
if (retryInfo?.retryDelay) {
|
|
21283
|
+
const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
|
|
21284
|
+
if (delayMs !== null) {
|
|
21285
|
+
event.retryDelayMs = delayMs;
|
|
21286
|
+
}
|
|
21287
|
+
}
|
|
21288
|
+
}
|
|
21289
|
+
};
|
|
21290
|
+
}
|
|
21291
|
+
function registerV2SessionHooks(ctx) {
|
|
21292
|
+
const state = {};
|
|
21293
|
+
ctx.session.hook("http.request", createV2HttpRequestHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21294
|
+
ctx.session.hook("http.response", createV2HttpResponseHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21295
|
+
ctx.session.hook("retry", createV2RetryHook(), { providerID: AGY_PROVIDER_ID });
|
|
21296
|
+
}
|
|
21297
|
+
|
|
21298
|
+
// src/plugin/v2.ts
|
|
21299
|
+
async function setupOpenCodeV2(ctx) {
|
|
21300
|
+
const resolveVariants = (modelId) => {
|
|
21301
|
+
const mapping = TIER_MAPPING[modelId];
|
|
21302
|
+
if (!mapping) return void 0;
|
|
21303
|
+
const variants = [];
|
|
21304
|
+
if (mapping.minimal !== void 0) variants.push({ id: "minimal" });
|
|
21305
|
+
if (mapping.low !== void 0) variants.push({ id: "low" });
|
|
21306
|
+
if (mapping.medium !== void 0) variants.push({ id: "medium" });
|
|
21307
|
+
if (mapping.high !== void 0) variants.push({ id: "high" });
|
|
21308
|
+
return variants.length > 0 ? variants : void 0;
|
|
21309
|
+
};
|
|
21310
|
+
const updateProviderRecord = (p) => {
|
|
21311
|
+
p.name = "Antigravity CLI";
|
|
21312
|
+
p.activation = "enabled";
|
|
21313
|
+
p.package = "aisdk:@ai-sdk/google";
|
|
21314
|
+
p.description = "Google Gemini Antigravity Code Assist OAuth provider";
|
|
21315
|
+
p.settings = { ...p.settings || {}, apiKey: "dummy" };
|
|
21316
|
+
p.integrationID = AGY_PROVIDER_ID;
|
|
21317
|
+
};
|
|
21318
|
+
const buildModelRecord = (modelId, simple, existingModel) => {
|
|
21319
|
+
const isClaude = modelId.startsWith("claude-");
|
|
21320
|
+
const isGpt = modelId.startsWith("gpt-");
|
|
21321
|
+
const variants = resolveVariants(modelId);
|
|
21322
|
+
return {
|
|
21323
|
+
id: modelId,
|
|
21324
|
+
providerID: AGY_PROVIDER_ID,
|
|
21325
|
+
name: simple.name,
|
|
21326
|
+
description: simple.description,
|
|
21327
|
+
family: modelId.includes("gemini") ? "gemini" : isClaude ? "claude" : isGpt ? "gpt" : "unknown",
|
|
21328
|
+
reasoning: simple.reasoning,
|
|
21329
|
+
attachment: simple.attachment,
|
|
21330
|
+
tool_call: simple.toolCall,
|
|
21331
|
+
limit: {
|
|
21332
|
+
context: simple.maxTokens,
|
|
21333
|
+
output: simple.maxOutputTokens
|
|
21334
|
+
},
|
|
21335
|
+
cost: simple.cost || { input: 0, output: 0 },
|
|
21336
|
+
...variants ? { variants } : {},
|
|
21337
|
+
...existingModel || {}
|
|
21338
|
+
};
|
|
21339
|
+
};
|
|
21340
|
+
const updateModelRecord = (m, modelId, simple) => {
|
|
21341
|
+
m.name = simple.name;
|
|
21342
|
+
m.capabilities = {
|
|
21343
|
+
tools: true,
|
|
21344
|
+
input: ["text", "image"],
|
|
21345
|
+
output: ["text"]
|
|
21346
|
+
};
|
|
21347
|
+
m.limit = {
|
|
21348
|
+
context: simple.maxTokens,
|
|
21349
|
+
output: simple.maxOutputTokens
|
|
21350
|
+
};
|
|
21351
|
+
m.family = "gemini";
|
|
21352
|
+
if (simple.cost) {
|
|
21353
|
+
m.cost = simple.cost;
|
|
21354
|
+
}
|
|
21355
|
+
const variants = resolveVariants(modelId);
|
|
21356
|
+
if (variants) {
|
|
21357
|
+
m.variants = variants;
|
|
21358
|
+
}
|
|
21359
|
+
};
|
|
21360
|
+
if (ctx.provider?.transform) {
|
|
21361
|
+
ctx.provider.transform(async (editor) => {
|
|
21362
|
+
if (!editor) return;
|
|
21363
|
+
if (typeof editor.update === "function") {
|
|
21364
|
+
editor.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21365
|
+
} else if (typeof editor.set === "function") {
|
|
21366
|
+
const p = { id: AGY_PROVIDER_ID };
|
|
21367
|
+
updateProviderRecord(p);
|
|
21368
|
+
editor.set(AGY_PROVIDER_ID, p);
|
|
21369
|
+
} else if (typeof editor === "object") {
|
|
21370
|
+
const p = editor[AGY_PROVIDER_ID] || { id: AGY_PROVIDER_ID };
|
|
21371
|
+
updateProviderRecord(p);
|
|
21372
|
+
editor[AGY_PROVIDER_ID] = p;
|
|
21373
|
+
}
|
|
21374
|
+
});
|
|
21375
|
+
}
|
|
21376
|
+
if (ctx.model?.transform) {
|
|
21377
|
+
ctx.model.transform(async (editor) => {
|
|
21378
|
+
if (!editor) return;
|
|
21379
|
+
if (typeof editor.update === "function") {
|
|
21380
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21381
|
+
editor.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21382
|
+
}
|
|
21383
|
+
} else if (typeof editor.set === "function") {
|
|
21384
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21385
|
+
const m = buildModelRecord(modelId, simple);
|
|
21386
|
+
editor.set(`${AGY_PROVIDER_ID}:${modelId}`, m);
|
|
21387
|
+
}
|
|
21388
|
+
} else if (typeof editor === "object") {
|
|
21389
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21390
|
+
const key = `${AGY_PROVIDER_ID}:${modelId}`;
|
|
21391
|
+
editor[key] = buildModelRecord(modelId, simple, editor[key]);
|
|
21392
|
+
}
|
|
21393
|
+
}
|
|
21394
|
+
});
|
|
21395
|
+
}
|
|
21396
|
+
if (ctx.catalog?.transform) {
|
|
21397
|
+
ctx.catalog.transform(async (editor) => {
|
|
21398
|
+
if (!editor) return;
|
|
21399
|
+
if (typeof editor?.provider?.update === "function") {
|
|
21400
|
+
editor.provider.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21401
|
+
if (typeof editor?.model?.update === "function") {
|
|
21402
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21403
|
+
editor.model.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21404
|
+
}
|
|
21405
|
+
}
|
|
21406
|
+
return;
|
|
21407
|
+
}
|
|
21408
|
+
const catalog = editor;
|
|
21409
|
+
catalog.providers = catalog.providers || {};
|
|
21410
|
+
catalog.providers[AGY_PROVIDER_ID] = {
|
|
21411
|
+
id: AGY_PROVIDER_ID,
|
|
21412
|
+
name: "Antigravity CLI",
|
|
21413
|
+
npm: "aisdk:@ai-sdk/google",
|
|
21414
|
+
settings: { apiKey: "dummy" },
|
|
21415
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21416
|
+
models: { ...catalog.providers[AGY_PROVIDER_ID]?.models || {} },
|
|
21417
|
+
...catalog.providers[AGY_PROVIDER_ID]
|
|
21418
|
+
};
|
|
21419
|
+
if (catalog.providers[AGY_PROVIDER_ID].settings) {
|
|
21420
|
+
catalog.providers[AGY_PROVIDER_ID].settings = {
|
|
21421
|
+
...catalog.providers[AGY_PROVIDER_ID].settings,
|
|
21422
|
+
apiKey: "dummy"
|
|
21423
|
+
};
|
|
21424
|
+
} else {
|
|
21425
|
+
catalog.providers[AGY_PROVIDER_ID].settings = { apiKey: "dummy" };
|
|
21426
|
+
}
|
|
21427
|
+
catalog.providers[AGY_PROVIDER_ID].integrationID = AGY_PROVIDER_ID;
|
|
21428
|
+
const targetModels = catalog.providers[AGY_PROVIDER_ID].models;
|
|
21429
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21430
|
+
targetModels[modelId] = buildModelRecord(modelId, simple, targetModels[modelId]);
|
|
21431
|
+
}
|
|
21432
|
+
});
|
|
21433
|
+
}
|
|
21434
|
+
ctx.tool.transform(async (editor) => {
|
|
21435
|
+
if (!editor) return;
|
|
21436
|
+
const quotaTool = createAgyQuotaTool({
|
|
21437
|
+
client: void 0,
|
|
21438
|
+
getAuthResolver: () => void 0,
|
|
21439
|
+
getConfiguredProjectId: () => void 0,
|
|
21440
|
+
getUserAgentModel: () => void 0
|
|
21441
|
+
});
|
|
21442
|
+
const quotaSummaryTool = createAgyQuotaSummaryTool({
|
|
21443
|
+
client: void 0,
|
|
21444
|
+
getAuthResolver: () => void 0,
|
|
21445
|
+
getConfiguredProjectId: () => void 0,
|
|
21446
|
+
getUserAgentModel: () => void 0
|
|
21447
|
+
});
|
|
21448
|
+
if (typeof editor.add === "function") {
|
|
21449
|
+
editor.add({
|
|
21450
|
+
name: AGY_QUOTA_TOOL_NAME,
|
|
21451
|
+
description: quotaTool.description,
|
|
21452
|
+
input: {},
|
|
21453
|
+
execute: async (args, context) => quotaTool.execute(args, context)
|
|
21454
|
+
});
|
|
21455
|
+
editor.add({
|
|
21456
|
+
name: AGY_QUOTA_SUMMARY_TOOL_NAME,
|
|
21457
|
+
description: quotaSummaryTool.description,
|
|
21458
|
+
input: {},
|
|
21459
|
+
execute: async (args, context) => quotaSummaryTool.execute(args, context)
|
|
21460
|
+
});
|
|
21461
|
+
} else if (typeof editor.set === "function") {
|
|
21462
|
+
editor.set(AGY_QUOTA_TOOL_NAME, quotaTool);
|
|
21463
|
+
editor.set(AGY_QUOTA_SUMMARY_TOOL_NAME, quotaSummaryTool);
|
|
21464
|
+
} else if (editor.tools && typeof editor.tools === "object") {
|
|
21465
|
+
editor.tools[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21466
|
+
editor.tools[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21467
|
+
} else if (typeof editor === "object") {
|
|
21468
|
+
editor[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21469
|
+
editor[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21470
|
+
}
|
|
21471
|
+
});
|
|
21472
|
+
ctx.command.transform(async (editor) => {
|
|
21473
|
+
if (!editor) return;
|
|
21474
|
+
const commands = {
|
|
21475
|
+
[AGY_V2_QUOTA_COMMAND]: {
|
|
21476
|
+
description: "Show Agy Code Assist quota usage",
|
|
21477
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21478
|
+
},
|
|
21479
|
+
[AGY_V2_QUOTA_SUMMARY_COMMAND]: {
|
|
21480
|
+
description: "Show Agy Code Assist quota summary with weekly and 5-hour limits",
|
|
21481
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21482
|
+
}
|
|
21483
|
+
};
|
|
21484
|
+
if (typeof editor.add === "function") {
|
|
21485
|
+
editor.add({
|
|
21486
|
+
name: AGY_V2_QUOTA_COMMAND,
|
|
21487
|
+
description: "Display current Antigravity quota usage",
|
|
21488
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21489
|
+
});
|
|
21490
|
+
editor.add({
|
|
21491
|
+
name: AGY_V2_QUOTA_SUMMARY_COMMAND,
|
|
21492
|
+
description: "Display Antigravity quota summary grouped by model family",
|
|
21493
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21494
|
+
});
|
|
21495
|
+
} else if (typeof editor.set === "function") {
|
|
21496
|
+
editor.set(AGY_V2_QUOTA_COMMAND, commands[AGY_V2_QUOTA_COMMAND]);
|
|
21497
|
+
editor.set(AGY_V2_QUOTA_SUMMARY_COMMAND, commands[AGY_V2_QUOTA_SUMMARY_COMMAND]);
|
|
21498
|
+
} else if (editor.commands && typeof editor.commands === "object") {
|
|
21499
|
+
editor.commands[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21500
|
+
editor.commands[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21501
|
+
} else if (typeof editor === "object") {
|
|
21502
|
+
editor[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21503
|
+
editor[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21504
|
+
}
|
|
21505
|
+
});
|
|
21506
|
+
ctx.integration?.transform?.((editor) => {
|
|
21507
|
+
if (!editor) return;
|
|
21508
|
+
editor.update?.(AGY_PROVIDER_ID, (integration) => {
|
|
21509
|
+
integration.name = "Antigravity CLI (plugin)";
|
|
21510
|
+
});
|
|
21511
|
+
editor.method?.update?.({
|
|
21512
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21513
|
+
method: {
|
|
21514
|
+
id: "oauth",
|
|
21515
|
+
type: "oauth",
|
|
21516
|
+
label: "Antigravity CLI (OAuth)"
|
|
21517
|
+
},
|
|
21518
|
+
authorize: async () => {
|
|
21519
|
+
const authorization = await authorizeAgy();
|
|
21520
|
+
return {
|
|
21521
|
+
mode: "code",
|
|
21522
|
+
url: authorization.url,
|
|
21523
|
+
instructions: "Please complete Google account authorization in your browser. After authorization, copy the full redirect URL or code and paste it below:",
|
|
21524
|
+
callback: async (code) => {
|
|
21525
|
+
const trimmed = code.trim();
|
|
21526
|
+
const parsed = parseOAuthCallbackInput(trimmed);
|
|
21527
|
+
const authCode = parsed.code || trimmed;
|
|
21528
|
+
if (!authCode) {
|
|
21529
|
+
return { type: "failed", error: "Missing authorization code in callback input" };
|
|
21530
|
+
}
|
|
21531
|
+
if (parsed.state && parsed.state !== authorization.state) {
|
|
21532
|
+
return { type: "failed", error: "State mismatch in callback input (possible CSRF attempt)" };
|
|
21533
|
+
}
|
|
21534
|
+
const exchangeResult = await exchangeAgyWithVerifier(authCode, authorization.verifier);
|
|
21535
|
+
if (exchangeResult.type !== "success") {
|
|
21536
|
+
return exchangeResult;
|
|
21537
|
+
}
|
|
21538
|
+
const initialRefresh = formatRefreshParts({
|
|
21539
|
+
refreshToken: exchangeResult.refresh
|
|
21540
|
+
});
|
|
21541
|
+
let authRecord = {
|
|
21542
|
+
type: "oauth",
|
|
21543
|
+
refresh: initialRefresh,
|
|
21544
|
+
access: exchangeResult.access,
|
|
21545
|
+
expires: exchangeResult.expires
|
|
21546
|
+
};
|
|
21547
|
+
try {
|
|
21548
|
+
const projectContext = await ensureProjectContext(
|
|
21549
|
+
authRecord,
|
|
21550
|
+
{ auth: { set: async () => {
|
|
21551
|
+
} } }
|
|
21552
|
+
);
|
|
21553
|
+
authRecord = {
|
|
21554
|
+
...authRecord,
|
|
21555
|
+
refresh: projectContext.auth.refresh
|
|
21556
|
+
};
|
|
21557
|
+
} catch {
|
|
21558
|
+
}
|
|
21559
|
+
saveStoredAuthToJson(authRecord);
|
|
21560
|
+
return {
|
|
21561
|
+
type: "oauth",
|
|
21562
|
+
methodID: "oauth",
|
|
21563
|
+
refresh: authRecord.refresh,
|
|
21564
|
+
access: authRecord.access,
|
|
21565
|
+
expires: authRecord.expires
|
|
21566
|
+
};
|
|
21567
|
+
}
|
|
21568
|
+
};
|
|
21569
|
+
}
|
|
21570
|
+
});
|
|
21571
|
+
});
|
|
21572
|
+
ctx.aisdk?.hook("sdk", async (event) => {
|
|
21573
|
+
if (!event) return;
|
|
21574
|
+
const isMatchingProvider = event.providerID === AGY_PROVIDER_ID || event.model?.providerID === AGY_PROVIDER_ID;
|
|
21575
|
+
if (!isMatchingProvider) return;
|
|
21576
|
+
event.options = event.options || {};
|
|
21577
|
+
event.options.apiKey = "dummy";
|
|
21578
|
+
event.options.fetch = createV2FetchInterceptor();
|
|
21579
|
+
});
|
|
21580
|
+
registerV2SessionHooks(ctx);
|
|
21581
|
+
}
|
|
21582
|
+
var v2PluginDefinition = defineOpenCodeV2Plugin({
|
|
21583
|
+
id: AGY_PROVIDER_ID,
|
|
21584
|
+
setup: setupOpenCodeV2
|
|
21585
|
+
});
|
|
21586
|
+
|
|
20818
21587
|
// index.ts
|
|
20819
|
-
var
|
|
20820
|
-
|
|
21588
|
+
var dualPlugin = {
|
|
21589
|
+
...v2PluginDefinition,
|
|
20821
21590
|
server: AgyCLIOAuthPlugin
|
|
20822
21591
|
};
|
|
21592
|
+
var index_default = dualPlugin;
|
|
20823
21593
|
export {
|
|
20824
21594
|
AgyCLIOAuthPlugin,
|
|
20825
21595
|
GoogleOAuthPlugin,
|
|
20826
|
-
index_default as default
|
|
21596
|
+
index_default as default,
|
|
21597
|
+
defineOpenCodeV2Plugin,
|
|
21598
|
+
setupOpenCodeV2,
|
|
21599
|
+
v2PluginDefinition
|
|
20827
21600
|
};
|
|
20828
21601
|
//# sourceMappingURL=index.js.map
|