@anthonyhaussman/opencode-agy-auth 1.2.3-alpha.9 → 1.2.3
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 +0 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.js +66 -869
- package/dist/index.js.map +1 -1
- package/dist/src/constants.d.ts +0 -2
- package/dist/src/plugin/oauth-authorize.d.ts +0 -9
- package/dist/src/plugin/types.d.ts +0 -33
- package/dist/src/plugin.d.ts +0 -23
- package/dist/src/sdk/agy-cli-version.d.ts +1 -1
- package/package.json +1 -1
- package/dist/src/plugin/v2.d.ts +0 -22
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.3";
|
|
272
272
|
|
|
273
273
|
// src/sdk/user-agent.ts
|
|
274
274
|
var cachedUserAgent = null;
|
|
@@ -579,12 +579,6 @@ 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
|
-
};
|
|
588
582
|
|
|
589
583
|
// src/sdk/retry/helpers.ts
|
|
590
584
|
var DEFAULT_MAX_ATTEMPTS = 3;
|
|
@@ -1581,11 +1575,7 @@ function createOAuthAuthorizeMethod(options) {
|
|
|
1581
1575
|
const isHeadless = !!(process.env.SSH_CONNECTION || process.env.SSH_CLIENT || process.env.SSH_TTY || process.env.OPENCODE_HEADLESS);
|
|
1582
1576
|
const authorization = await authorizeAgy();
|
|
1583
1577
|
if (!isHeadless) {
|
|
1584
|
-
|
|
1585
|
-
options.openBrowser(authorization.url);
|
|
1586
|
-
} else {
|
|
1587
|
-
openBrowserUrl(authorization.url);
|
|
1588
|
-
}
|
|
1578
|
+
openBrowserUrl(authorization.url);
|
|
1589
1579
|
}
|
|
1590
1580
|
return {
|
|
1591
1581
|
url: authorization.url,
|
|
@@ -1639,23 +1629,16 @@ function parseOAuthCallbackInput(input) {
|
|
|
1639
1629
|
}
|
|
1640
1630
|
return { code: trimmed };
|
|
1641
1631
|
}
|
|
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;
|
|
1650
1632
|
function openBrowserUrl(url2) {
|
|
1651
|
-
if ((process.env.NODE_ENV === "test" || process.env.VITEST) && openBrowserLauncher === defaultOpenBrowserLauncher) {
|
|
1652
|
-
return;
|
|
1653
|
-
}
|
|
1654
1633
|
try {
|
|
1655
1634
|
const platform2 = process.platform;
|
|
1656
1635
|
const command = platform2 === "darwin" ? "open" : platform2 === "win32" ? "rundll32" : "xdg-open";
|
|
1657
1636
|
const args = platform2 === "win32" ? ["url.dll,FileProtocolHandler", url2] : [url2];
|
|
1658
|
-
|
|
1637
|
+
const child = spawn(command, args, {
|
|
1638
|
+
stdio: "ignore",
|
|
1639
|
+
detached: true
|
|
1640
|
+
});
|
|
1641
|
+
child.unref?.();
|
|
1659
1642
|
} catch {
|
|
1660
1643
|
}
|
|
1661
1644
|
}
|
|
@@ -16066,7 +16049,6 @@ var models_default = {
|
|
|
16066
16049
|
106015333,
|
|
16067
16050
|
106568772,
|
|
16068
16051
|
105867471,
|
|
16069
|
-
106548982,
|
|
16070
16052
|
106123599,
|
|
16071
16053
|
106121401,
|
|
16072
16054
|
106100625,
|
|
@@ -16165,7 +16147,7 @@ var models_default = {
|
|
|
16165
16147
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16166
16148
|
quotaInfo: {
|
|
16167
16149
|
remainingFraction: 1,
|
|
16168
|
-
resetTime: "2026-09-
|
|
16150
|
+
resetTime: "2026-09-15T07:48:02Z"
|
|
16169
16151
|
},
|
|
16170
16152
|
recommended: true,
|
|
16171
16153
|
supportedMimeTypes: {
|
|
@@ -16204,7 +16186,7 @@ var models_default = {
|
|
|
16204
16186
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16205
16187
|
quotaInfo: {
|
|
16206
16188
|
remainingFraction: 1,
|
|
16207
|
-
resetTime: "2026-09-
|
|
16189
|
+
resetTime: "2026-09-15T07:48:02Z"
|
|
16208
16190
|
},
|
|
16209
16191
|
recommended: true,
|
|
16210
16192
|
supportedMimeTypes: {
|
|
@@ -16240,8 +16222,8 @@ var models_default = {
|
|
|
16240
16222
|
},
|
|
16241
16223
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16242
16224
|
quotaInfo: {
|
|
16243
|
-
remainingFraction: 0.
|
|
16244
|
-
resetTime: "2026-09-
|
|
16225
|
+
remainingFraction: 0.967206,
|
|
16226
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16245
16227
|
},
|
|
16246
16228
|
recommended: true,
|
|
16247
16229
|
supportedMimeTypes: {
|
|
@@ -16317,8 +16299,8 @@ var models_default = {
|
|
|
16317
16299
|
},
|
|
16318
16300
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16319
16301
|
quotaInfo: {
|
|
16320
|
-
remainingFraction: 0.
|
|
16321
|
-
resetTime: "2026-09-
|
|
16302
|
+
remainingFraction: 0.967206,
|
|
16303
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16322
16304
|
},
|
|
16323
16305
|
recommended: true,
|
|
16324
16306
|
supportedMimeTypes: {
|
|
@@ -16394,8 +16376,8 @@ var models_default = {
|
|
|
16394
16376
|
},
|
|
16395
16377
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16396
16378
|
quotaInfo: {
|
|
16397
|
-
remainingFraction: 0.
|
|
16398
|
-
resetTime: "2026-09-
|
|
16379
|
+
remainingFraction: 0.967206,
|
|
16380
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16399
16381
|
},
|
|
16400
16382
|
recommended: true,
|
|
16401
16383
|
supportedMimeTypes: {
|
|
@@ -16468,8 +16450,8 @@ var models_default = {
|
|
|
16468
16450
|
},
|
|
16469
16451
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16470
16452
|
quotaInfo: {
|
|
16471
|
-
remainingFraction: 0.
|
|
16472
|
-
resetTime: "2026-09-
|
|
16453
|
+
remainingFraction: 0.967206,
|
|
16454
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16473
16455
|
},
|
|
16474
16456
|
recommended: true,
|
|
16475
16457
|
requiresImageOutputOutsideFunctionResponses: true,
|
|
@@ -16543,8 +16525,8 @@ var models_default = {
|
|
|
16543
16525
|
},
|
|
16544
16526
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16545
16527
|
quotaInfo: {
|
|
16546
|
-
remainingFraction: 0.
|
|
16547
|
-
resetTime: "2026-09-
|
|
16528
|
+
remainingFraction: 0.967206,
|
|
16529
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16548
16530
|
},
|
|
16549
16531
|
recommended: true,
|
|
16550
16532
|
supportedMimeTypes: {
|
|
@@ -16642,8 +16624,8 @@ var models_default = {
|
|
|
16642
16624
|
},
|
|
16643
16625
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16644
16626
|
quotaInfo: {
|
|
16645
|
-
remainingFraction: 0.
|
|
16646
|
-
resetTime: "2026-09-
|
|
16627
|
+
remainingFraction: 0.967206,
|
|
16628
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16647
16629
|
},
|
|
16648
16630
|
recommended: true,
|
|
16649
16631
|
supportedMimeTypes: {
|
|
@@ -16706,8 +16688,8 @@ var models_default = {
|
|
|
16706
16688
|
model: "MODEL_PLACEHOLDER_M21",
|
|
16707
16689
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16708
16690
|
quotaInfo: {
|
|
16709
|
-
remainingFraction: 0.
|
|
16710
|
-
resetTime: "2026-09-
|
|
16691
|
+
remainingFraction: 0.967206,
|
|
16692
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16711
16693
|
}
|
|
16712
16694
|
},
|
|
16713
16695
|
"gemini-3.1-flash-lite": {
|
|
@@ -16725,8 +16707,8 @@ var models_default = {
|
|
|
16725
16707
|
},
|
|
16726
16708
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16727
16709
|
quotaInfo: {
|
|
16728
|
-
remainingFraction: 0.
|
|
16729
|
-
resetTime: "2026-09-
|
|
16710
|
+
remainingFraction: 0.967206,
|
|
16711
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16730
16712
|
}
|
|
16731
16713
|
},
|
|
16732
16714
|
"gemini-3.1-pro-high": {
|
|
@@ -16757,8 +16739,8 @@ var models_default = {
|
|
|
16757
16739
|
},
|
|
16758
16740
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16759
16741
|
quotaInfo: {
|
|
16760
|
-
remainingFraction: 0.
|
|
16761
|
-
resetTime: "2026-09-
|
|
16742
|
+
remainingFraction: 0.967206,
|
|
16743
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16762
16744
|
},
|
|
16763
16745
|
recommended: true,
|
|
16764
16746
|
supportedMimeTypes: {
|
|
@@ -16842,8 +16824,8 @@ var models_default = {
|
|
|
16842
16824
|
},
|
|
16843
16825
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16844
16826
|
quotaInfo: {
|
|
16845
|
-
remainingFraction: 0.
|
|
16846
|
-
resetTime: "2026-09-
|
|
16827
|
+
remainingFraction: 0.967206,
|
|
16828
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16847
16829
|
},
|
|
16848
16830
|
recommended: true,
|
|
16849
16831
|
supportedMimeTypes: {
|
|
@@ -16941,8 +16923,8 @@ var models_default = {
|
|
|
16941
16923
|
},
|
|
16942
16924
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16943
16925
|
quotaInfo: {
|
|
16944
|
-
remainingFraction: 0.
|
|
16945
|
-
resetTime: "2026-09-
|
|
16926
|
+
remainingFraction: 0.967206,
|
|
16927
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
16946
16928
|
},
|
|
16947
16929
|
recommended: true,
|
|
16948
16930
|
supportedMimeTypes: {
|
|
@@ -17018,8 +17000,8 @@ var models_default = {
|
|
|
17018
17000
|
},
|
|
17019
17001
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17020
17002
|
quotaInfo: {
|
|
17021
|
-
remainingFraction: 0.
|
|
17022
|
-
resetTime: "2026-09-
|
|
17003
|
+
remainingFraction: 0.967206,
|
|
17004
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17023
17005
|
},
|
|
17024
17006
|
recommended: true,
|
|
17025
17007
|
supportedMimeTypes: {
|
|
@@ -17119,8 +17101,8 @@ var models_default = {
|
|
|
17119
17101
|
},
|
|
17120
17102
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17121
17103
|
quotaInfo: {
|
|
17122
|
-
remainingFraction: 0.
|
|
17123
|
-
resetTime: "2026-09-
|
|
17104
|
+
remainingFraction: 0.967206,
|
|
17105
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17124
17106
|
},
|
|
17125
17107
|
recommended: true,
|
|
17126
17108
|
supportedMimeTypes: {
|
|
@@ -17232,8 +17214,8 @@ var models_default = {
|
|
|
17232
17214
|
},
|
|
17233
17215
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17234
17216
|
quotaInfo: {
|
|
17235
|
-
remainingFraction: 0.
|
|
17236
|
-
resetTime: "2026-09-
|
|
17217
|
+
remainingFraction: 0.967206,
|
|
17218
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17237
17219
|
},
|
|
17238
17220
|
recommended: true,
|
|
17239
17221
|
supportedMimeTypes: {
|
|
@@ -17345,8 +17327,8 @@ var models_default = {
|
|
|
17345
17327
|
},
|
|
17346
17328
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17347
17329
|
quotaInfo: {
|
|
17348
|
-
remainingFraction: 0.
|
|
17349
|
-
resetTime: "2026-09-
|
|
17330
|
+
remainingFraction: 0.967206,
|
|
17331
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17350
17332
|
},
|
|
17351
17333
|
recommended: true,
|
|
17352
17334
|
supportedMimeTypes: {
|
|
@@ -17458,8 +17440,8 @@ var models_default = {
|
|
|
17458
17440
|
},
|
|
17459
17441
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17460
17442
|
quotaInfo: {
|
|
17461
|
-
remainingFraction: 0.
|
|
17462
|
-
resetTime: "2026-09-
|
|
17443
|
+
remainingFraction: 0.967206,
|
|
17444
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17463
17445
|
},
|
|
17464
17446
|
recommended: true,
|
|
17465
17447
|
supportedMimeTypes: {
|
|
@@ -17570,8 +17552,8 @@ var models_default = {
|
|
|
17570
17552
|
},
|
|
17571
17553
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17572
17554
|
quotaInfo: {
|
|
17573
|
-
remainingFraction: 0.
|
|
17574
|
-
resetTime: "2026-09-
|
|
17555
|
+
remainingFraction: 0.967206,
|
|
17556
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17575
17557
|
},
|
|
17576
17558
|
recommended: true,
|
|
17577
17559
|
supportedMimeTypes: {
|
|
@@ -17675,8 +17657,8 @@ var models_default = {
|
|
|
17675
17657
|
},
|
|
17676
17658
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17677
17659
|
quotaInfo: {
|
|
17678
|
-
remainingFraction: 0.
|
|
17679
|
-
resetTime: "2026-09-
|
|
17660
|
+
remainingFraction: 0.967206,
|
|
17661
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17680
17662
|
},
|
|
17681
17663
|
recommended: true,
|
|
17682
17664
|
supportedMimeTypes: {
|
|
@@ -17782,8 +17764,8 @@ var models_default = {
|
|
|
17782
17764
|
},
|
|
17783
17765
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17784
17766
|
quotaInfo: {
|
|
17785
|
-
remainingFraction: 0.
|
|
17786
|
-
resetTime: "2026-09-
|
|
17767
|
+
remainingFraction: 0.967206,
|
|
17768
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17787
17769
|
},
|
|
17788
17770
|
recommended: true,
|
|
17789
17771
|
supportedMimeTypes: {
|
|
@@ -17889,8 +17871,8 @@ var models_default = {
|
|
|
17889
17871
|
},
|
|
17890
17872
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17891
17873
|
quotaInfo: {
|
|
17892
|
-
remainingFraction: 0.
|
|
17893
|
-
resetTime: "2026-09-
|
|
17874
|
+
remainingFraction: 0.967206,
|
|
17875
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
17894
17876
|
},
|
|
17895
17877
|
recommended: true,
|
|
17896
17878
|
supportedMimeTypes: {
|
|
@@ -17995,8 +17977,8 @@ var models_default = {
|
|
|
17995
17977
|
},
|
|
17996
17978
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17997
17979
|
quotaInfo: {
|
|
17998
|
-
remainingFraction: 0.
|
|
17999
|
-
resetTime: "2026-09-
|
|
17980
|
+
remainingFraction: 0.967206,
|
|
17981
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
18000
17982
|
},
|
|
18001
17983
|
recommended: true,
|
|
18002
17984
|
supportedMimeTypes: {
|
|
@@ -18100,8 +18082,8 @@ var models_default = {
|
|
|
18100
18082
|
},
|
|
18101
18083
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18102
18084
|
quotaInfo: {
|
|
18103
|
-
remainingFraction: 0.
|
|
18104
|
-
resetTime: "2026-09-
|
|
18085
|
+
remainingFraction: 0.967206,
|
|
18086
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
18105
18087
|
},
|
|
18106
18088
|
recommended: true,
|
|
18107
18089
|
supportedMimeTypes: {
|
|
@@ -18207,8 +18189,8 @@ var models_default = {
|
|
|
18207
18189
|
},
|
|
18208
18190
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18209
18191
|
quotaInfo: {
|
|
18210
|
-
remainingFraction: 0.
|
|
18211
|
-
resetTime: "2026-09-
|
|
18192
|
+
remainingFraction: 0.967206,
|
|
18193
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
18212
18194
|
},
|
|
18213
18195
|
recommended: true,
|
|
18214
18196
|
supportedMimeTypes: {
|
|
@@ -18314,8 +18296,8 @@ var models_default = {
|
|
|
18314
18296
|
},
|
|
18315
18297
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18316
18298
|
quotaInfo: {
|
|
18317
|
-
remainingFraction: 0.
|
|
18318
|
-
resetTime: "2026-09-
|
|
18299
|
+
remainingFraction: 0.967206,
|
|
18300
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
18319
18301
|
},
|
|
18320
18302
|
recommended: true,
|
|
18321
18303
|
supportedMimeTypes: {
|
|
@@ -18420,8 +18402,8 @@ var models_default = {
|
|
|
18420
18402
|
},
|
|
18421
18403
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18422
18404
|
quotaInfo: {
|
|
18423
|
-
remainingFraction: 0.
|
|
18424
|
-
resetTime: "2026-09-
|
|
18405
|
+
remainingFraction: 0.967206,
|
|
18406
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
18425
18407
|
},
|
|
18426
18408
|
recommended: true,
|
|
18427
18409
|
supportedMimeTypes: {
|
|
@@ -18504,8 +18486,8 @@ var models_default = {
|
|
|
18504
18486
|
},
|
|
18505
18487
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18506
18488
|
quotaInfo: {
|
|
18507
|
-
remainingFraction: 0.
|
|
18508
|
-
resetTime: "2026-09-
|
|
18489
|
+
remainingFraction: 0.967206,
|
|
18490
|
+
resetTime: "2026-09-15T07:33:42Z"
|
|
18509
18491
|
},
|
|
18510
18492
|
recommended: true,
|
|
18511
18493
|
supportedMimeTypes: {
|
|
@@ -18576,7 +18558,7 @@ var models_default = {
|
|
|
18576
18558
|
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
18577
18559
|
quotaInfo: {
|
|
18578
18560
|
remainingFraction: 1,
|
|
18579
|
-
resetTime: "2026-09-
|
|
18561
|
+
resetTime: "2026-09-15T07:48:02Z"
|
|
18580
18562
|
},
|
|
18581
18563
|
recommended: true,
|
|
18582
18564
|
supportsThinking: true,
|
|
@@ -18634,7 +18616,7 @@ var models_default = {
|
|
|
18634
18616
|
]
|
|
18635
18617
|
},
|
|
18636
18618
|
webSearchModelIds: [
|
|
18637
|
-
"gemini-3.
|
|
18619
|
+
"gemini-3.1-flash-lite"
|
|
18638
18620
|
]
|
|
18639
18621
|
};
|
|
18640
18622
|
|
|
@@ -20686,799 +20668,14 @@ function toUrlString(value) {
|
|
|
20686
20668
|
return value.toString();
|
|
20687
20669
|
}
|
|
20688
20670
|
|
|
20689
|
-
// src/plugin/types.ts
|
|
20690
|
-
function defineOpenCodeV2Plugin(def) {
|
|
20691
|
-
return def;
|
|
20692
|
-
}
|
|
20693
|
-
|
|
20694
|
-
// src/plugin/v2.ts
|
|
20695
|
-
import { homedir as homedir4 } from "os";
|
|
20696
|
-
import { join as join6 } from "path";
|
|
20697
|
-
import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync5 } from "fs";
|
|
20698
|
-
import "http";
|
|
20699
|
-
var AGY_V2_QUOTA_COMMAND = "agy-quota";
|
|
20700
|
-
var AGY_V2_QUOTA_SUMMARY_COMMAND = "agy-quota-summary";
|
|
20701
|
-
var AGY_V2_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
20702
|
-
|
|
20703
|
-
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20704
|
-
Do not call other tools.
|
|
20705
|
-
`;
|
|
20706
|
-
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.
|
|
20707
|
-
|
|
20708
|
-
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20709
|
-
Do not call other tools.
|
|
20710
|
-
`;
|
|
20711
|
-
function getSafeHeader2(headers, key) {
|
|
20712
|
-
if (!headers) {
|
|
20713
|
-
return void 0;
|
|
20714
|
-
}
|
|
20715
|
-
const targetKey = key.toLowerCase();
|
|
20716
|
-
if (typeof headers.get === "function") {
|
|
20717
|
-
try {
|
|
20718
|
-
return headers.get(targetKey) || void 0;
|
|
20719
|
-
} catch {
|
|
20720
|
-
}
|
|
20721
|
-
}
|
|
20722
|
-
if (Array.isArray(headers)) {
|
|
20723
|
-
const found = headers.find((item) => {
|
|
20724
|
-
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20725
|
-
return item[0].toLowerCase() === targetKey;
|
|
20726
|
-
}
|
|
20727
|
-
return false;
|
|
20728
|
-
});
|
|
20729
|
-
return found ? String(found[1]) : void 0;
|
|
20730
|
-
}
|
|
20731
|
-
if (typeof headers === "object") {
|
|
20732
|
-
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20733
|
-
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20734
|
-
}
|
|
20735
|
-
return void 0;
|
|
20736
|
-
}
|
|
20737
|
-
function setSafeHeaders2(initHeaders, newHeaders) {
|
|
20738
|
-
if (typeof globalThis.Headers !== "undefined") {
|
|
20739
|
-
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20740
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20741
|
-
headers.set(k, v);
|
|
20742
|
-
}
|
|
20743
|
-
return headers;
|
|
20744
|
-
}
|
|
20745
|
-
if (Array.isArray(initHeaders)) {
|
|
20746
|
-
const nextHeaders2 = [...initHeaders];
|
|
20747
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20748
|
-
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20749
|
-
if (idx !== -1) {
|
|
20750
|
-
nextHeaders2[idx] = [k, v];
|
|
20751
|
-
} else {
|
|
20752
|
-
nextHeaders2.push([k, v]);
|
|
20753
|
-
}
|
|
20754
|
-
}
|
|
20755
|
-
return nextHeaders2;
|
|
20756
|
-
}
|
|
20757
|
-
const nextHeaders = {};
|
|
20758
|
-
if (initHeaders && typeof initHeaders === "object") {
|
|
20759
|
-
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20760
|
-
nextHeaders[k] = String(v);
|
|
20761
|
-
}
|
|
20762
|
-
}
|
|
20763
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20764
|
-
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20765
|
-
if (existingKey) {
|
|
20766
|
-
nextHeaders[existingKey] = v;
|
|
20767
|
-
} else {
|
|
20768
|
-
nextHeaders[k] = v;
|
|
20769
|
-
}
|
|
20770
|
-
}
|
|
20771
|
-
return nextHeaders;
|
|
20772
|
-
}
|
|
20773
|
-
function toUrlString2(value) {
|
|
20774
|
-
if (typeof value === "string") {
|
|
20775
|
-
return value;
|
|
20776
|
-
}
|
|
20777
|
-
const candidate = value.url;
|
|
20778
|
-
if (candidate) {
|
|
20779
|
-
return candidate;
|
|
20780
|
-
}
|
|
20781
|
-
return value.toString();
|
|
20782
|
-
}
|
|
20783
|
-
function resolveModelTier2(baseModelId, init) {
|
|
20784
|
-
const parts = baseModelId.split("@");
|
|
20785
|
-
const base = parts[0] || "";
|
|
20786
|
-
const suffixTier = parts[1]?.toLowerCase();
|
|
20787
|
-
const mapping = TIER_MAPPING[base];
|
|
20788
|
-
if (!mapping) {
|
|
20789
|
-
return baseModelId;
|
|
20790
|
-
}
|
|
20791
|
-
const headerTier = getSafeHeader2(init?.headers, "x-agy-tier")?.toLowerCase() || null;
|
|
20792
|
-
const requestedTier = headerTier || suffixTier;
|
|
20793
|
-
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20794
|
-
return mapping[requestedTier] || baseModelId;
|
|
20795
|
-
}
|
|
20796
|
-
return mapping["medium"] ?? mapping["high"];
|
|
20797
|
-
}
|
|
20798
|
-
var storedAuthOverrideForTesting = void 0;
|
|
20799
|
-
function loadStoredAuthFromJson() {
|
|
20800
|
-
if (storedAuthOverrideForTesting !== void 0) {
|
|
20801
|
-
return storedAuthOverrideForTesting;
|
|
20802
|
-
}
|
|
20803
|
-
const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
|
|
20804
|
-
try {
|
|
20805
|
-
if (existsSync6(authPath)) {
|
|
20806
|
-
const content = readFileSync5(authPath, "utf8");
|
|
20807
|
-
const data = JSON.parse(content);
|
|
20808
|
-
return data?.[AGY_PROVIDER_ID];
|
|
20809
|
-
}
|
|
20810
|
-
} catch {
|
|
20811
|
-
}
|
|
20812
|
-
return void 0;
|
|
20813
|
-
}
|
|
20814
|
-
function saveStoredAuthToJson(authRecord) {
|
|
20815
|
-
if (process.env.NODE_ENV === "test" || process.env.VITEST || storedAuthOverrideForTesting !== void 0) {
|
|
20816
|
-
return;
|
|
20817
|
-
}
|
|
20818
|
-
try {
|
|
20819
|
-
const dirPath = join6(homedir4(), ".local", "share", "opencode");
|
|
20820
|
-
if (!existsSync6(dirPath)) {
|
|
20821
|
-
mkdirSync5(dirPath, { recursive: true });
|
|
20822
|
-
}
|
|
20823
|
-
const authPath = join6(dirPath, "auth.json");
|
|
20824
|
-
let data = {};
|
|
20825
|
-
if (existsSync6(authPath)) {
|
|
20826
|
-
try {
|
|
20827
|
-
data = JSON.parse(readFileSync5(authPath, "utf8")) || {};
|
|
20828
|
-
} catch {
|
|
20829
|
-
data = {};
|
|
20830
|
-
}
|
|
20831
|
-
}
|
|
20832
|
-
data[AGY_PROVIDER_ID] = {
|
|
20833
|
-
type: "oauth",
|
|
20834
|
-
refresh: authRecord.refresh,
|
|
20835
|
-
access: authRecord.access,
|
|
20836
|
-
expires: authRecord.expires
|
|
20837
|
-
};
|
|
20838
|
-
writeFileSync5(authPath, JSON.stringify(data, null, 2), "utf8");
|
|
20839
|
-
} catch {
|
|
20840
|
-
}
|
|
20841
|
-
}
|
|
20842
|
-
function createV2FetchInterceptor(getAuthSnapshot) {
|
|
20843
|
-
return async function agyV2Fetch(input, init) {
|
|
20844
|
-
const isGL = isGenerativeLanguageRequest(input);
|
|
20845
|
-
const isInternal = toUrlString2(input).includes("cloudcode-pa.googleapis.com");
|
|
20846
|
-
if (!isGL && !isInternal) {
|
|
20847
|
-
return agyFetch(input, init);
|
|
20848
|
-
}
|
|
20849
|
-
let rawAuth = getAuthSnapshot ? await getAuthSnapshot() : void 0;
|
|
20850
|
-
if (!rawAuth) {
|
|
20851
|
-
rawAuth = loadStoredAuthFromJson();
|
|
20852
|
-
}
|
|
20853
|
-
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
20854
|
-
return agyFetch(input, init);
|
|
20855
|
-
}
|
|
20856
|
-
let authRecord = resolveCachedAuth(rawAuth);
|
|
20857
|
-
if (accessTokenExpired(authRecord)) {
|
|
20858
|
-
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
20859
|
-
} } });
|
|
20860
|
-
if (refreshed) {
|
|
20861
|
-
authRecord = refreshed;
|
|
20862
|
-
}
|
|
20863
|
-
}
|
|
20864
|
-
if (!authRecord.access) {
|
|
20865
|
-
return agyFetch(input, init);
|
|
20866
|
-
}
|
|
20867
|
-
if (isInternal) {
|
|
20868
|
-
const hasAuth = getSafeHeader2(init?.headers, "Authorization") !== void 0;
|
|
20869
|
-
if (hasAuth) {
|
|
20870
|
-
return agyFetch(input, init);
|
|
20871
|
-
}
|
|
20872
|
-
const userAgent = buildAgyCliUserAgent();
|
|
20873
|
-
const headers = setSafeHeaders2(init?.headers, {
|
|
20874
|
-
Authorization: `Bearer ${authRecord.access}`,
|
|
20875
|
-
"User-Agent": userAgent
|
|
20876
|
-
});
|
|
20877
|
-
return agyFetch(input, {
|
|
20878
|
-
...init,
|
|
20879
|
-
headers
|
|
20880
|
-
});
|
|
20881
|
-
}
|
|
20882
|
-
const requestTarget = parseGenerativeLanguageRequest(input);
|
|
20883
|
-
const requestUserAgentModel = requestTarget?.effectiveModel;
|
|
20884
|
-
let projectContext;
|
|
20885
|
-
try {
|
|
20886
|
-
projectContext = await ensureProjectContext(
|
|
20887
|
-
authRecord,
|
|
20888
|
-
{ auth: { set: async () => {
|
|
20889
|
-
} } },
|
|
20890
|
-
void 0,
|
|
20891
|
-
requestUserAgentModel
|
|
20892
|
-
);
|
|
20893
|
-
} catch {
|
|
20894
|
-
projectContext = {
|
|
20895
|
-
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
20896
|
-
auth: authRecord
|
|
20897
|
-
};
|
|
20898
|
-
}
|
|
20899
|
-
const originalRequestedModel = parseGenerativeLanguageRequest(input)?.effectiveModel;
|
|
20900
|
-
let modifiedInput = input;
|
|
20901
|
-
if (isGL && originalRequestedModel) {
|
|
20902
|
-
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
20903
|
-
const resolvedBase = resolveModelTier2(originalBase, init);
|
|
20904
|
-
if (originalBase !== resolvedBase) {
|
|
20905
|
-
if (typeof modifiedInput === "string") {
|
|
20906
|
-
modifiedInput = modifiedInput.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20907
|
-
} else if (typeof Request !== "undefined" && modifiedInput instanceof Request) {
|
|
20908
|
-
const newUrl = modifiedInput.url.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20909
|
-
modifiedInput = new Request(newUrl, modifiedInput);
|
|
20910
|
-
}
|
|
20911
|
-
}
|
|
20912
|
-
}
|
|
20913
|
-
const transformed = prepareAgyRequest(
|
|
20914
|
-
modifiedInput,
|
|
20915
|
-
init,
|
|
20916
|
-
authRecord.access,
|
|
20917
|
-
projectContext.effectiveProjectId,
|
|
20918
|
-
void 0
|
|
20919
|
-
);
|
|
20920
|
-
const chatLogger = createChatLogger();
|
|
20921
|
-
if (chatLogger) {
|
|
20922
|
-
chatLogger.logRequest(
|
|
20923
|
-
toUrlString2(transformed.request),
|
|
20924
|
-
transformed.init.method || "GET",
|
|
20925
|
-
transformed.init.headers,
|
|
20926
|
-
transformed.init.body
|
|
20927
|
-
);
|
|
20928
|
-
}
|
|
20929
|
-
const response = await fetchWithRetry(transformed.request, transformed.init);
|
|
20930
|
-
return transformAgyResponse(
|
|
20931
|
-
response,
|
|
20932
|
-
transformed.streaming,
|
|
20933
|
-
null,
|
|
20934
|
-
transformed.requestedModel,
|
|
20935
|
-
transformed.sessionId,
|
|
20936
|
-
chatLogger
|
|
20937
|
-
);
|
|
20938
|
-
};
|
|
20939
|
-
}
|
|
20940
|
-
async function setupOpenCodeV2(ctx) {
|
|
20941
|
-
ctx.catalog.transform(async (editor) => {
|
|
20942
|
-
if (!editor) return;
|
|
20943
|
-
const resolveVariants = (modelId) => {
|
|
20944
|
-
const mapping = TIER_MAPPING[modelId];
|
|
20945
|
-
if (!mapping) return void 0;
|
|
20946
|
-
const variants = [];
|
|
20947
|
-
if (mapping.minimal !== void 0) variants.push({ id: "minimal" });
|
|
20948
|
-
if (mapping.low !== void 0) variants.push({ id: "low" });
|
|
20949
|
-
if (mapping.medium !== void 0) variants.push({ id: "medium" });
|
|
20950
|
-
if (mapping.high !== void 0) variants.push({ id: "high" });
|
|
20951
|
-
return variants.length > 0 ? variants : void 0;
|
|
20952
|
-
};
|
|
20953
|
-
if (typeof editor?.provider?.update === "function") {
|
|
20954
|
-
editor.provider.update(AGY_PROVIDER_ID, (p) => {
|
|
20955
|
-
p.name = "Antigravity CLI";
|
|
20956
|
-
p.activation = "enabled";
|
|
20957
|
-
p.package = "aisdk:@ai-sdk/google";
|
|
20958
|
-
p.description = "Google Gemini Antigravity Code Assist OAuth provider";
|
|
20959
|
-
p.settings = { ...p.settings || {}, apiKey: "dummy" };
|
|
20960
|
-
p.integrationID = AGY_PROVIDER_ID;
|
|
20961
|
-
});
|
|
20962
|
-
if (typeof editor?.model?.update === "function") {
|
|
20963
|
-
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
20964
|
-
editor.model.update(AGY_PROVIDER_ID, modelId, (m) => {
|
|
20965
|
-
m.name = simple.name;
|
|
20966
|
-
m.capabilities = {
|
|
20967
|
-
tools: true,
|
|
20968
|
-
input: ["text", "image"],
|
|
20969
|
-
output: ["text"]
|
|
20970
|
-
};
|
|
20971
|
-
m.limit = {
|
|
20972
|
-
context: simple.maxTokens,
|
|
20973
|
-
output: simple.maxOutputTokens
|
|
20974
|
-
};
|
|
20975
|
-
m.family = "gemini";
|
|
20976
|
-
if (simple.cost) {
|
|
20977
|
-
m.cost = simple.cost;
|
|
20978
|
-
}
|
|
20979
|
-
const variants = resolveVariants(modelId);
|
|
20980
|
-
if (variants) {
|
|
20981
|
-
m.variants = variants;
|
|
20982
|
-
}
|
|
20983
|
-
});
|
|
20984
|
-
}
|
|
20985
|
-
}
|
|
20986
|
-
return;
|
|
20987
|
-
}
|
|
20988
|
-
const catalog = editor;
|
|
20989
|
-
catalog.providers = catalog.providers || {};
|
|
20990
|
-
catalog.providers[AGY_PROVIDER_ID] = {
|
|
20991
|
-
id: AGY_PROVIDER_ID,
|
|
20992
|
-
name: "Antigravity CLI",
|
|
20993
|
-
npm: "aisdk:@ai-sdk/google",
|
|
20994
|
-
settings: { apiKey: "dummy" },
|
|
20995
|
-
integrationID: AGY_PROVIDER_ID,
|
|
20996
|
-
models: { ...catalog.providers[AGY_PROVIDER_ID]?.models || {} },
|
|
20997
|
-
...catalog.providers[AGY_PROVIDER_ID]
|
|
20998
|
-
};
|
|
20999
|
-
if (catalog.providers[AGY_PROVIDER_ID].settings) {
|
|
21000
|
-
catalog.providers[AGY_PROVIDER_ID].settings = {
|
|
21001
|
-
...catalog.providers[AGY_PROVIDER_ID].settings,
|
|
21002
|
-
apiKey: "dummy"
|
|
21003
|
-
};
|
|
21004
|
-
} else {
|
|
21005
|
-
catalog.providers[AGY_PROVIDER_ID].settings = { apiKey: "dummy" };
|
|
21006
|
-
}
|
|
21007
|
-
catalog.providers[AGY_PROVIDER_ID].integrationID = AGY_PROVIDER_ID;
|
|
21008
|
-
const targetModels = catalog.providers[AGY_PROVIDER_ID].models;
|
|
21009
|
-
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21010
|
-
const isClaude = modelId.startsWith("claude-");
|
|
21011
|
-
const isGpt = modelId.startsWith("gpt-");
|
|
21012
|
-
const variants = resolveVariants(modelId);
|
|
21013
|
-
targetModels[modelId] = {
|
|
21014
|
-
id: modelId,
|
|
21015
|
-
providerID: AGY_PROVIDER_ID,
|
|
21016
|
-
name: simple.name,
|
|
21017
|
-
description: simple.description,
|
|
21018
|
-
family: modelId.includes("gemini") ? "gemini" : isClaude ? "claude" : isGpt ? "gpt" : "unknown",
|
|
21019
|
-
reasoning: simple.reasoning,
|
|
21020
|
-
attachment: simple.attachment,
|
|
21021
|
-
tool_call: simple.toolCall,
|
|
21022
|
-
limit: {
|
|
21023
|
-
context: simple.maxTokens,
|
|
21024
|
-
output: simple.maxOutputTokens
|
|
21025
|
-
},
|
|
21026
|
-
cost: simple.cost || { input: 0, output: 0 },
|
|
21027
|
-
...variants ? { variants } : {},
|
|
21028
|
-
...targetModels[modelId] || {}
|
|
21029
|
-
};
|
|
21030
|
-
}
|
|
21031
|
-
});
|
|
21032
|
-
ctx.tool.transform(async (editor) => {
|
|
21033
|
-
if (!editor) return;
|
|
21034
|
-
const quotaTool = createAgyQuotaTool({
|
|
21035
|
-
client: void 0,
|
|
21036
|
-
getAuthResolver: () => void 0,
|
|
21037
|
-
getConfiguredProjectId: () => void 0,
|
|
21038
|
-
getUserAgentModel: () => void 0
|
|
21039
|
-
});
|
|
21040
|
-
const quotaSummaryTool = createAgyQuotaSummaryTool({
|
|
21041
|
-
client: void 0,
|
|
21042
|
-
getAuthResolver: () => void 0,
|
|
21043
|
-
getConfiguredProjectId: () => void 0,
|
|
21044
|
-
getUserAgentModel: () => void 0
|
|
21045
|
-
});
|
|
21046
|
-
if (typeof editor.add === "function") {
|
|
21047
|
-
editor.add({
|
|
21048
|
-
name: AGY_QUOTA_TOOL_NAME,
|
|
21049
|
-
description: quotaTool.description,
|
|
21050
|
-
input: {},
|
|
21051
|
-
execute: async (args, context) => quotaTool.execute(args, context)
|
|
21052
|
-
});
|
|
21053
|
-
editor.add({
|
|
21054
|
-
name: AGY_QUOTA_SUMMARY_TOOL_NAME,
|
|
21055
|
-
description: quotaSummaryTool.description,
|
|
21056
|
-
input: {},
|
|
21057
|
-
execute: async (args, context) => quotaSummaryTool.execute(args, context)
|
|
21058
|
-
});
|
|
21059
|
-
} else if (typeof editor.set === "function") {
|
|
21060
|
-
editor.set(AGY_QUOTA_TOOL_NAME, quotaTool);
|
|
21061
|
-
editor.set(AGY_QUOTA_SUMMARY_TOOL_NAME, quotaSummaryTool);
|
|
21062
|
-
} else if (editor.tools && typeof editor.tools === "object") {
|
|
21063
|
-
editor.tools[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21064
|
-
editor.tools[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21065
|
-
} else if (typeof editor === "object") {
|
|
21066
|
-
editor[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21067
|
-
editor[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21068
|
-
}
|
|
21069
|
-
});
|
|
21070
|
-
ctx.command.transform(async (editor) => {
|
|
21071
|
-
if (!editor) return;
|
|
21072
|
-
const commands = {
|
|
21073
|
-
[AGY_V2_QUOTA_COMMAND]: {
|
|
21074
|
-
description: "Show Agy Code Assist quota usage",
|
|
21075
|
-
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21076
|
-
},
|
|
21077
|
-
[AGY_V2_QUOTA_SUMMARY_COMMAND]: {
|
|
21078
|
-
description: "Show Agy Code Assist quota summary with weekly and 5-hour limits",
|
|
21079
|
-
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21080
|
-
}
|
|
21081
|
-
};
|
|
21082
|
-
if (typeof editor.add === "function") {
|
|
21083
|
-
editor.add({
|
|
21084
|
-
name: AGY_V2_QUOTA_COMMAND,
|
|
21085
|
-
description: "Display current Antigravity quota usage",
|
|
21086
|
-
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21087
|
-
});
|
|
21088
|
-
editor.add({
|
|
21089
|
-
name: AGY_V2_QUOTA_SUMMARY_COMMAND,
|
|
21090
|
-
description: "Display Antigravity quota summary grouped by model family",
|
|
21091
|
-
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21092
|
-
});
|
|
21093
|
-
} else if (typeof editor.set === "function") {
|
|
21094
|
-
editor.set(AGY_V2_QUOTA_COMMAND, commands[AGY_V2_QUOTA_COMMAND]);
|
|
21095
|
-
editor.set(AGY_V2_QUOTA_SUMMARY_COMMAND, commands[AGY_V2_QUOTA_SUMMARY_COMMAND]);
|
|
21096
|
-
} else if (editor.commands && typeof editor.commands === "object") {
|
|
21097
|
-
editor.commands[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21098
|
-
editor.commands[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21099
|
-
} else if (typeof editor === "object") {
|
|
21100
|
-
editor[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21101
|
-
editor[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21102
|
-
}
|
|
21103
|
-
});
|
|
21104
|
-
ctx.integration?.transform?.((editor) => {
|
|
21105
|
-
if (!editor) return;
|
|
21106
|
-
editor.update?.(AGY_PROVIDER_ID, (integration) => {
|
|
21107
|
-
integration.name = "Antigravity CLI (plugin)";
|
|
21108
|
-
});
|
|
21109
|
-
editor.method?.update?.({
|
|
21110
|
-
integrationID: AGY_PROVIDER_ID,
|
|
21111
|
-
method: {
|
|
21112
|
-
id: "oauth",
|
|
21113
|
-
type: "oauth",
|
|
21114
|
-
label: "Antigravity CLI (OAuth)"
|
|
21115
|
-
},
|
|
21116
|
-
authorize: async () => {
|
|
21117
|
-
const authorization = await authorizeAgy();
|
|
21118
|
-
return {
|
|
21119
|
-
mode: "code",
|
|
21120
|
-
url: authorization.url,
|
|
21121
|
-
instructions: "Please complete Google account authorization in your browser. After authorization, copy the full redirect URL or code and paste it below:",
|
|
21122
|
-
callback: async (code) => {
|
|
21123
|
-
const trimmed = code.trim();
|
|
21124
|
-
const parsed = parseOAuthCallbackInput(trimmed);
|
|
21125
|
-
const authCode = parsed.code || trimmed;
|
|
21126
|
-
if (!authCode) {
|
|
21127
|
-
return { type: "failed", error: "Missing authorization code in callback input" };
|
|
21128
|
-
}
|
|
21129
|
-
if (parsed.state && parsed.state !== authorization.state) {
|
|
21130
|
-
return { type: "failed", error: "State mismatch in callback input (possible CSRF attempt)" };
|
|
21131
|
-
}
|
|
21132
|
-
const exchangeResult = await exchangeAgyWithVerifier(authCode, authorization.verifier);
|
|
21133
|
-
if (exchangeResult.type !== "success") {
|
|
21134
|
-
return exchangeResult;
|
|
21135
|
-
}
|
|
21136
|
-
const initialRefresh = formatRefreshParts({
|
|
21137
|
-
refreshToken: exchangeResult.refresh
|
|
21138
|
-
});
|
|
21139
|
-
let authRecord = {
|
|
21140
|
-
type: "oauth",
|
|
21141
|
-
refresh: initialRefresh,
|
|
21142
|
-
access: exchangeResult.access,
|
|
21143
|
-
expires: exchangeResult.expires
|
|
21144
|
-
};
|
|
21145
|
-
try {
|
|
21146
|
-
const projectContext = await ensureProjectContext(
|
|
21147
|
-
authRecord,
|
|
21148
|
-
{ auth: { set: async () => {
|
|
21149
|
-
} } }
|
|
21150
|
-
);
|
|
21151
|
-
authRecord = {
|
|
21152
|
-
...authRecord,
|
|
21153
|
-
refresh: projectContext.auth.refresh
|
|
21154
|
-
};
|
|
21155
|
-
} catch {
|
|
21156
|
-
}
|
|
21157
|
-
saveStoredAuthToJson(authRecord);
|
|
21158
|
-
return {
|
|
21159
|
-
type: "oauth",
|
|
21160
|
-
methodID: "oauth",
|
|
21161
|
-
refresh: authRecord.refresh,
|
|
21162
|
-
access: authRecord.access,
|
|
21163
|
-
expires: authRecord.expires
|
|
21164
|
-
};
|
|
21165
|
-
}
|
|
21166
|
-
};
|
|
21167
|
-
}
|
|
21168
|
-
});
|
|
21169
|
-
});
|
|
21170
|
-
ctx.aisdk?.hook("sdk", async (event) => {
|
|
21171
|
-
if (!event) return;
|
|
21172
|
-
const isMatchingProvider = event.providerID === AGY_PROVIDER_ID || event.model?.providerID === AGY_PROVIDER_ID;
|
|
21173
|
-
if (!isMatchingProvider) return;
|
|
21174
|
-
event.options = event.options || {};
|
|
21175
|
-
event.options.apiKey = "dummy";
|
|
21176
|
-
event.options.fetch = createV2FetchInterceptor();
|
|
21177
|
-
});
|
|
21178
|
-
let lastInterceptedModel;
|
|
21179
|
-
ctx.session.hook(
|
|
21180
|
-
"http.request",
|
|
21181
|
-
async (event) => {
|
|
21182
|
-
if (!event) return;
|
|
21183
|
-
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21184
|
-
const isGL = isGenerativeLanguageRequest(rawUrl);
|
|
21185
|
-
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21186
|
-
if (!isGL && !isInternal) {
|
|
21187
|
-
return;
|
|
21188
|
-
}
|
|
21189
|
-
event.headers = event.headers || {};
|
|
21190
|
-
let modelName;
|
|
21191
|
-
let rawAuth = event.auth;
|
|
21192
|
-
if (rawAuth && !rawAuth.type) {
|
|
21193
|
-
const tokenVal = rawAuth.access || rawAuth.token;
|
|
21194
|
-
if (tokenVal || rawAuth.refresh) {
|
|
21195
|
-
rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
|
|
21196
|
-
}
|
|
21197
|
-
}
|
|
21198
|
-
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21199
|
-
rawAuth = loadStoredAuthFromJson();
|
|
21200
|
-
}
|
|
21201
|
-
let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
|
|
21202
|
-
if (authRecord && accessTokenExpired(authRecord)) {
|
|
21203
|
-
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
21204
|
-
} } });
|
|
21205
|
-
if (refreshed) {
|
|
21206
|
-
authRecord = refreshed;
|
|
21207
|
-
saveStoredAuthToJson(refreshed);
|
|
21208
|
-
}
|
|
21209
|
-
}
|
|
21210
|
-
if (isGL) {
|
|
21211
|
-
const parsed = parseGenerativeLanguageRequest(rawUrl);
|
|
21212
|
-
modelName = parsed?.effectiveModel;
|
|
21213
|
-
if (modelName) {
|
|
21214
|
-
lastInterceptedModel = modelName;
|
|
21215
|
-
}
|
|
21216
|
-
if (typeof event.headers.delete === "function") {
|
|
21217
|
-
event.headers.delete("x-goog-api-key");
|
|
21218
|
-
event.headers.delete("api-key");
|
|
21219
|
-
} else {
|
|
21220
|
-
for (const key of Object.keys(event.headers)) {
|
|
21221
|
-
const lower = key.toLowerCase();
|
|
21222
|
-
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21223
|
-
delete event.headers[key];
|
|
21224
|
-
}
|
|
21225
|
-
}
|
|
21226
|
-
}
|
|
21227
|
-
if (event.request?.headers) {
|
|
21228
|
-
if (typeof event.request.headers.delete === "function") {
|
|
21229
|
-
event.request.headers.delete("x-goog-api-key");
|
|
21230
|
-
event.request.headers.delete("api-key");
|
|
21231
|
-
} else {
|
|
21232
|
-
for (const key of Object.keys(event.request.headers)) {
|
|
21233
|
-
const lower = key.toLowerCase();
|
|
21234
|
-
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21235
|
-
delete event.request.headers[key];
|
|
21236
|
-
}
|
|
21237
|
-
}
|
|
21238
|
-
}
|
|
21239
|
-
}
|
|
21240
|
-
let cleanUrl = rawUrl;
|
|
21241
|
-
try {
|
|
21242
|
-
const parsedUrl = new URL(rawUrl);
|
|
21243
|
-
let urlChanged = false;
|
|
21244
|
-
for (const param of ["key", "x-goog-api-key", "api-key"]) {
|
|
21245
|
-
if (parsedUrl.searchParams.has(param)) {
|
|
21246
|
-
parsedUrl.searchParams.delete(param);
|
|
21247
|
-
urlChanged = true;
|
|
21248
|
-
}
|
|
21249
|
-
}
|
|
21250
|
-
if (urlChanged) {
|
|
21251
|
-
cleanUrl = parsedUrl.toString();
|
|
21252
|
-
}
|
|
21253
|
-
} catch {
|
|
21254
|
-
}
|
|
21255
|
-
if (authRecord && authRecord.access) {
|
|
21256
|
-
let projectContext;
|
|
21257
|
-
try {
|
|
21258
|
-
projectContext = await ensureProjectContext(
|
|
21259
|
-
authRecord,
|
|
21260
|
-
{ auth: { set: async () => {
|
|
21261
|
-
} } },
|
|
21262
|
-
void 0,
|
|
21263
|
-
modelName
|
|
21264
|
-
);
|
|
21265
|
-
} catch {
|
|
21266
|
-
projectContext = {
|
|
21267
|
-
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
21268
|
-
auth: authRecord
|
|
21269
|
-
};
|
|
21270
|
-
}
|
|
21271
|
-
const originalRequestedModel = modelName;
|
|
21272
|
-
let modifiedUrl = cleanUrl;
|
|
21273
|
-
if (originalRequestedModel) {
|
|
21274
|
-
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21275
|
-
const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
|
|
21276
|
-
const resolvedBase = resolveModelTier2(originalBase, { headers: initHeaders });
|
|
21277
|
-
if (originalBase !== resolvedBase) {
|
|
21278
|
-
modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
21279
|
-
}
|
|
21280
|
-
}
|
|
21281
|
-
let bodyPayload = event.body;
|
|
21282
|
-
if (bodyPayload === void 0 && event.request) {
|
|
21283
|
-
if (typeof event.request.clone === "function") {
|
|
21284
|
-
try {
|
|
21285
|
-
bodyPayload = await event.request.clone().text();
|
|
21286
|
-
} catch {
|
|
21287
|
-
}
|
|
21288
|
-
} else if (event.request.body !== void 0) {
|
|
21289
|
-
bodyPayload = event.request.body;
|
|
21290
|
-
}
|
|
21291
|
-
}
|
|
21292
|
-
let preExistingUserAgent;
|
|
21293
|
-
if (typeof event.headers?.get === "function") {
|
|
21294
|
-
preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
|
|
21295
|
-
} else if (event.headers && typeof event.headers === "object") {
|
|
21296
|
-
preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
|
|
21297
|
-
}
|
|
21298
|
-
if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
|
|
21299
|
-
preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
|
|
21300
|
-
} else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
|
|
21301
|
-
preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
|
|
21302
|
-
}
|
|
21303
|
-
const method = event.method || event.request?.method || "POST";
|
|
21304
|
-
const requestHeaders = event.headers || event.request?.headers;
|
|
21305
|
-
const transformed = prepareAgyRequest(
|
|
21306
|
-
modifiedUrl,
|
|
21307
|
-
{
|
|
21308
|
-
method,
|
|
21309
|
-
headers: requestHeaders,
|
|
21310
|
-
body: bodyPayload
|
|
21311
|
-
},
|
|
21312
|
-
authRecord.access,
|
|
21313
|
-
projectContext.effectiveProjectId
|
|
21314
|
-
);
|
|
21315
|
-
const targetUrl = toUrlString2(transformed.request);
|
|
21316
|
-
if (typeof event.url === "string") {
|
|
21317
|
-
event.url = targetUrl;
|
|
21318
|
-
}
|
|
21319
|
-
if (event.request && typeof event.request === "object") {
|
|
21320
|
-
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21321
|
-
event.request = new Request(targetUrl, {
|
|
21322
|
-
method: transformed.init.method,
|
|
21323
|
-
headers: transformed.init.headers,
|
|
21324
|
-
body: transformed.init.body
|
|
21325
|
-
});
|
|
21326
|
-
} else if (typeof event.request.url === "string") {
|
|
21327
|
-
try {
|
|
21328
|
-
event.request.url = targetUrl;
|
|
21329
|
-
} catch {
|
|
21330
|
-
}
|
|
21331
|
-
}
|
|
21332
|
-
}
|
|
21333
|
-
const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
|
|
21334
|
-
for (const [k, v] of headerEntries) {
|
|
21335
|
-
const lowerK = k.toLowerCase();
|
|
21336
|
-
if (lowerK === "user-agent") {
|
|
21337
|
-
if (preExistingUserAgent) {
|
|
21338
|
-
continue;
|
|
21339
|
-
}
|
|
21340
|
-
if (typeof event.headers?.set === "function") {
|
|
21341
|
-
event.headers.set("User-Agent", v);
|
|
21342
|
-
} else if (event.headers) {
|
|
21343
|
-
event.headers["User-Agent"] = v;
|
|
21344
|
-
}
|
|
21345
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21346
|
-
event.request.headers.set("User-Agent", v);
|
|
21347
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21348
|
-
event.request.headers["User-Agent"] = v;
|
|
21349
|
-
}
|
|
21350
|
-
continue;
|
|
21351
|
-
}
|
|
21352
|
-
if (typeof event.headers?.set === "function") {
|
|
21353
|
-
event.headers.set(k, v);
|
|
21354
|
-
} else if (event.headers) {
|
|
21355
|
-
event.headers[k] = v;
|
|
21356
|
-
}
|
|
21357
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21358
|
-
event.request.headers.set(k, v);
|
|
21359
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21360
|
-
event.request.headers[k] = v;
|
|
21361
|
-
}
|
|
21362
|
-
}
|
|
21363
|
-
if (transformed.init.body !== void 0) {
|
|
21364
|
-
event.body = transformed.init.body;
|
|
21365
|
-
if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
|
|
21366
|
-
event.request.body = transformed.init.body;
|
|
21367
|
-
}
|
|
21368
|
-
}
|
|
21369
|
-
} else {
|
|
21370
|
-
if (typeof event.url === "string") {
|
|
21371
|
-
event.url = cleanUrl;
|
|
21372
|
-
}
|
|
21373
|
-
if (event.request && typeof event.request === "object") {
|
|
21374
|
-
if (typeof event.request.url === "string") {
|
|
21375
|
-
event.request.url = cleanUrl;
|
|
21376
|
-
}
|
|
21377
|
-
}
|
|
21378
|
-
}
|
|
21379
|
-
}
|
|
21380
|
-
if (authRecord && authRecord.access) {
|
|
21381
|
-
if (typeof event.headers?.set === "function") {
|
|
21382
|
-
event.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21383
|
-
} else if (event.headers) {
|
|
21384
|
-
event.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21385
|
-
}
|
|
21386
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21387
|
-
event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21388
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21389
|
-
event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21390
|
-
}
|
|
21391
|
-
}
|
|
21392
|
-
const userAgent = buildAgyCliUserAgent(modelName);
|
|
21393
|
-
if (typeof event.headers?.set === "function") {
|
|
21394
|
-
if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
|
|
21395
|
-
event.headers.set("User-Agent", userAgent);
|
|
21396
|
-
}
|
|
21397
|
-
} else if (event.headers) {
|
|
21398
|
-
if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
|
|
21399
|
-
event.headers["User-Agent"] = userAgent;
|
|
21400
|
-
}
|
|
21401
|
-
}
|
|
21402
|
-
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21403
|
-
if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
|
|
21404
|
-
event.request.headers.set("User-Agent", userAgent);
|
|
21405
|
-
}
|
|
21406
|
-
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21407
|
-
if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
|
|
21408
|
-
event.request.headers["User-Agent"] = userAgent;
|
|
21409
|
-
}
|
|
21410
|
-
}
|
|
21411
|
-
},
|
|
21412
|
-
{ providerID: AGY_PROVIDER_ID }
|
|
21413
|
-
);
|
|
21414
|
-
ctx.session.hook(
|
|
21415
|
-
"http.response",
|
|
21416
|
-
async (event) => {
|
|
21417
|
-
if (!event || !event.response) return;
|
|
21418
|
-
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21419
|
-
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21420
|
-
if (isInternal && event.response instanceof Response) {
|
|
21421
|
-
const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
|
|
21422
|
-
const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || lastInterceptedModel;
|
|
21423
|
-
const transformed = await transformAgyResponse(
|
|
21424
|
-
event.response,
|
|
21425
|
-
!!isStreaming,
|
|
21426
|
-
null,
|
|
21427
|
-
parsedModel,
|
|
21428
|
-
void 0,
|
|
21429
|
-
void 0
|
|
21430
|
-
);
|
|
21431
|
-
event.response = transformed;
|
|
21432
|
-
}
|
|
21433
|
-
},
|
|
21434
|
-
{ providerID: AGY_PROVIDER_ID }
|
|
21435
|
-
);
|
|
21436
|
-
ctx.session.hook(
|
|
21437
|
-
"retry",
|
|
21438
|
-
async (event) => {
|
|
21439
|
-
if (!event) return;
|
|
21440
|
-
const response = event.response;
|
|
21441
|
-
if (response instanceof Response) {
|
|
21442
|
-
if (response.status === 429 || response.status === 503) {
|
|
21443
|
-
const quota = await classifyQuotaResponse(response);
|
|
21444
|
-
if (quota?.retryDelayMs) {
|
|
21445
|
-
event.retryDelayMs = quota.retryDelayMs;
|
|
21446
|
-
} else {
|
|
21447
|
-
event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
|
|
21448
|
-
}
|
|
21449
|
-
}
|
|
21450
|
-
} else if (event.details && Array.isArray(event.details)) {
|
|
21451
|
-
const retryInfo = event.details.find(
|
|
21452
|
-
(d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
|
|
21453
|
-
);
|
|
21454
|
-
if (retryInfo?.retryDelay) {
|
|
21455
|
-
const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
|
|
21456
|
-
if (delayMs !== null) {
|
|
21457
|
-
event.retryDelayMs = delayMs;
|
|
21458
|
-
}
|
|
21459
|
-
}
|
|
21460
|
-
}
|
|
21461
|
-
},
|
|
21462
|
-
{ providerID: AGY_PROVIDER_ID }
|
|
21463
|
-
);
|
|
21464
|
-
}
|
|
21465
|
-
var v2PluginDefinition = defineOpenCodeV2Plugin({
|
|
21466
|
-
id: AGY_PROVIDER_ID,
|
|
21467
|
-
setup: setupOpenCodeV2
|
|
21468
|
-
});
|
|
21469
|
-
|
|
21470
20671
|
// index.ts
|
|
21471
|
-
var
|
|
21472
|
-
|
|
20672
|
+
var index_default = {
|
|
20673
|
+
id: "@anthonyhaussman/opencode-agy-auth",
|
|
21473
20674
|
server: AgyCLIOAuthPlugin
|
|
21474
20675
|
};
|
|
21475
|
-
var index_default = dualPlugin;
|
|
21476
20676
|
export {
|
|
21477
20677
|
AgyCLIOAuthPlugin,
|
|
21478
20678
|
GoogleOAuthPlugin,
|
|
21479
|
-
index_default as default
|
|
21480
|
-
defineOpenCodeV2Plugin,
|
|
21481
|
-
setupOpenCodeV2,
|
|
21482
|
-
v2PluginDefinition
|
|
20679
|
+
index_default as default
|
|
21483
20680
|
};
|
|
21484
20681
|
//# sourceMappingURL=index.js.map
|