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