@anthonyhaussman/opencode-agy-auth 1.2.6-alpha.0 → 1.2.6-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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.5";
271
+ var AGY_CLI_VERSION = "1.2.6";
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
- if (options?.openBrowser) {
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
- openBrowserLauncher(command, args);
1637
+ const child = spawn(command, args, {
1638
+ stdio: "ignore",
1639
+ detached: true
1640
+ });
1641
+ child.unref?.();
1659
1642
  } catch {
1660
1643
  }
1661
1644
  }
@@ -16060,7 +16043,7 @@ var models_default = {
16060
16043
  }
16061
16044
  },
16062
16045
  experimentIds: [
16063
- 106140402,
16046
+ 106329234,
16064
16047
  106519115,
16065
16048
  105979552,
16066
16049
  105979574,
@@ -16084,6 +16067,8 @@ var models_default = {
16084
16067
  106278607,
16085
16068
  106512082,
16086
16069
  106380926,
16070
+ 106723203,
16071
+ 106242397,
16087
16072
  106281951,
16088
16073
  106264532,
16089
16074
  106044947,
@@ -16103,6 +16088,7 @@ var models_default = {
16103
16088
  105906495,
16104
16089
  106283614,
16105
16090
  106640124,
16091
+ 106242393,
16106
16092
  106038164,
16107
16093
  106032301,
16108
16094
  106121604
@@ -16165,7 +16151,7 @@ var models_default = {
16165
16151
  modelProvider: "MODEL_PROVIDER_ANTHROPIC",
16166
16152
  quotaInfo: {
16167
16153
  remainingFraction: 1,
16168
- resetTime: "2026-09-17T11:40:46Z"
16154
+ resetTime: "2026-09-18T16:07:34Z"
16169
16155
  },
16170
16156
  recommended: true,
16171
16157
  supportedMimeTypes: {
@@ -16204,7 +16190,7 @@ var models_default = {
16204
16190
  modelProvider: "MODEL_PROVIDER_ANTHROPIC",
16205
16191
  quotaInfo: {
16206
16192
  remainingFraction: 1,
16207
- resetTime: "2026-09-17T11:40:46Z"
16193
+ resetTime: "2026-09-18T16:07:34Z"
16208
16194
  },
16209
16195
  recommended: true,
16210
16196
  supportedMimeTypes: {
@@ -16240,8 +16226,8 @@ var models_default = {
16240
16226
  },
16241
16227
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16242
16228
  quotaInfo: {
16243
- remainingFraction: 0.9790073,
16244
- resetTime: "2026-09-17T09:29:22Z"
16229
+ remainingFraction: 0.7753168,
16230
+ resetTime: "2026-09-18T11:38:10Z"
16245
16231
  },
16246
16232
  recommended: true,
16247
16233
  supportedMimeTypes: {
@@ -16323,8 +16309,8 @@ var models_default = {
16323
16309
  },
16324
16310
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16325
16311
  quotaInfo: {
16326
- remainingFraction: 0.9790073,
16327
- resetTime: "2026-09-17T09:29:22Z"
16312
+ remainingFraction: 0.7753168,
16313
+ resetTime: "2026-09-18T11:38:10Z"
16328
16314
  },
16329
16315
  recommended: true,
16330
16316
  supportedMimeTypes: {
@@ -16406,8 +16392,8 @@ var models_default = {
16406
16392
  },
16407
16393
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16408
16394
  quotaInfo: {
16409
- remainingFraction: 0.9790073,
16410
- resetTime: "2026-09-17T09:29:22Z"
16395
+ remainingFraction: 0.7753168,
16396
+ resetTime: "2026-09-18T11:38:10Z"
16411
16397
  },
16412
16398
  recommended: true,
16413
16399
  supportedMimeTypes: {
@@ -16486,8 +16472,8 @@ var models_default = {
16486
16472
  },
16487
16473
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16488
16474
  quotaInfo: {
16489
- remainingFraction: 0.9790073,
16490
- resetTime: "2026-09-17T09:29:22Z"
16475
+ remainingFraction: 0.7753168,
16476
+ resetTime: "2026-09-18T11:38:10Z"
16491
16477
  },
16492
16478
  recommended: true,
16493
16479
  requiresImageOutputOutsideFunctionResponses: true,
@@ -16567,8 +16553,8 @@ var models_default = {
16567
16553
  },
16568
16554
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16569
16555
  quotaInfo: {
16570
- remainingFraction: 0.9790073,
16571
- resetTime: "2026-09-17T09:29:22Z"
16556
+ remainingFraction: 0.7753168,
16557
+ resetTime: "2026-09-18T11:38:10Z"
16572
16558
  },
16573
16559
  recommended: true,
16574
16560
  supportedMimeTypes: {
@@ -16642,7 +16628,7 @@ var models_default = {
16642
16628
  stringValue: `{
16643
16629
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
16644
16630
  "max_token_limit": "256000",
16645
- "token_threshold": "140000",
16631
+ "token_threshold": "50000",
16646
16632
  "max_overhead_ratio": "0.15",
16647
16633
  "moving_window_size": "1",
16648
16634
  "enabled": true,
@@ -16672,8 +16658,8 @@ var models_default = {
16672
16658
  },
16673
16659
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16674
16660
  quotaInfo: {
16675
- remainingFraction: 0.9790073,
16676
- resetTime: "2026-09-17T09:29:22Z"
16661
+ remainingFraction: 0.7753168,
16662
+ resetTime: "2026-09-18T11:38:10Z"
16677
16663
  },
16678
16664
  recommended: true,
16679
16665
  supportedMimeTypes: {
@@ -16742,8 +16728,8 @@ var models_default = {
16742
16728
  model: "MODEL_PLACEHOLDER_M21",
16743
16729
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16744
16730
  quotaInfo: {
16745
- remainingFraction: 0.9790073,
16746
- resetTime: "2026-09-17T09:29:22Z"
16731
+ remainingFraction: 0.7753168,
16732
+ resetTime: "2026-09-18T11:38:10Z"
16747
16733
  }
16748
16734
  },
16749
16735
  "gemini-3.1-flash-lite": {
@@ -16761,8 +16747,8 @@ var models_default = {
16761
16747
  },
16762
16748
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16763
16749
  quotaInfo: {
16764
- remainingFraction: 0.9790073,
16765
- resetTime: "2026-09-17T09:29:22Z"
16750
+ remainingFraction: 0.7753168,
16751
+ resetTime: "2026-09-18T11:38:10Z"
16766
16752
  }
16767
16753
  },
16768
16754
  "gemini-3.1-pro-high": {
@@ -16793,8 +16779,8 @@ var models_default = {
16793
16779
  },
16794
16780
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16795
16781
  quotaInfo: {
16796
- remainingFraction: 0.9790073,
16797
- resetTime: "2026-09-17T09:29:22Z"
16782
+ remainingFraction: 0.7753168,
16783
+ resetTime: "2026-09-18T11:38:10Z"
16798
16784
  },
16799
16785
  recommended: true,
16800
16786
  supportedMimeTypes: {
@@ -16884,8 +16870,8 @@ var models_default = {
16884
16870
  },
16885
16871
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16886
16872
  quotaInfo: {
16887
- remainingFraction: 0.9790073,
16888
- resetTime: "2026-09-17T09:29:22Z"
16873
+ remainingFraction: 0.7753168,
16874
+ resetTime: "2026-09-18T11:38:10Z"
16889
16875
  },
16890
16876
  recommended: true,
16891
16877
  supportedMimeTypes: {
@@ -16959,7 +16945,7 @@ var models_default = {
16959
16945
  stringValue: `{
16960
16946
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
16961
16947
  "max_token_limit": "256000",
16962
- "token_threshold": "140000",
16948
+ "token_threshold": "50000",
16963
16949
  "max_overhead_ratio": "0.15",
16964
16950
  "moving_window_size": "1",
16965
16951
  "enabled": true,
@@ -16989,8 +16975,8 @@ var models_default = {
16989
16975
  },
16990
16976
  modelProvider: "MODEL_PROVIDER_GOOGLE",
16991
16977
  quotaInfo: {
16992
- remainingFraction: 0.9790073,
16993
- resetTime: "2026-09-17T09:29:22Z"
16978
+ remainingFraction: 0.7753168,
16979
+ resetTime: "2026-09-18T11:38:10Z"
16994
16980
  },
16995
16981
  recommended: true,
16996
16982
  supportedMimeTypes: {
@@ -17072,8 +17058,8 @@ var models_default = {
17072
17058
  },
17073
17059
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17074
17060
  quotaInfo: {
17075
- remainingFraction: 0.9790073,
17076
- resetTime: "2026-09-17T09:29:22Z"
17061
+ remainingFraction: 0.7753168,
17062
+ resetTime: "2026-09-18T11:38:10Z"
17077
17063
  },
17078
17064
  recommended: true,
17079
17065
  supportedMimeTypes: {
@@ -17149,7 +17135,7 @@ var models_default = {
17149
17135
  stringValue: `{
17150
17136
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17151
17137
  "max_token_limit": "256000",
17152
- "token_threshold": "140000",
17138
+ "token_threshold": "50000",
17153
17139
  "max_overhead_ratio": "0.15",
17154
17140
  "moving_window_size": "1",
17155
17141
  "enabled": true,
@@ -17179,8 +17165,8 @@ var models_default = {
17179
17165
  },
17180
17166
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17181
17167
  quotaInfo: {
17182
- remainingFraction: 0.9790073,
17183
- resetTime: "2026-09-17T09:29:22Z"
17168
+ remainingFraction: 0.7753168,
17169
+ resetTime: "2026-09-18T11:38:10Z"
17184
17170
  },
17185
17171
  recommended: true,
17186
17172
  supportedMimeTypes: {
@@ -17256,7 +17242,7 @@ var models_default = {
17256
17242
  stringValue: `{
17257
17243
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17258
17244
  "max_token_limit": "256000",
17259
- "token_threshold": "140000",
17245
+ "token_threshold": "50000",
17260
17246
  "max_overhead_ratio": "0.15",
17261
17247
  "moving_window_size": "1",
17262
17248
  "enabled": true,
@@ -17298,8 +17284,8 @@ var models_default = {
17298
17284
  },
17299
17285
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17300
17286
  quotaInfo: {
17301
- remainingFraction: 0.9790073,
17302
- resetTime: "2026-09-17T09:29:22Z"
17287
+ remainingFraction: 0.7753168,
17288
+ resetTime: "2026-09-18T11:38:10Z"
17303
17289
  },
17304
17290
  recommended: true,
17305
17291
  supportedMimeTypes: {
@@ -17375,7 +17361,7 @@ var models_default = {
17375
17361
  stringValue: `{
17376
17362
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17377
17363
  "max_token_limit": "256000",
17378
- "token_threshold": "140000",
17364
+ "token_threshold": "50000",
17379
17365
  "max_overhead_ratio": "0.15",
17380
17366
  "moving_window_size": "1",
17381
17367
  "enabled": true,
@@ -17417,8 +17403,8 @@ var models_default = {
17417
17403
  },
17418
17404
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17419
17405
  quotaInfo: {
17420
- remainingFraction: 0.9790073,
17421
- resetTime: "2026-09-17T09:29:22Z"
17406
+ remainingFraction: 0.7753168,
17407
+ resetTime: "2026-09-18T11:38:10Z"
17422
17408
  },
17423
17409
  recommended: true,
17424
17410
  supportedMimeTypes: {
@@ -17494,7 +17480,7 @@ var models_default = {
17494
17480
  stringValue: `{
17495
17481
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17496
17482
  "max_token_limit": "256000",
17497
- "token_threshold": "140000",
17483
+ "token_threshold": "50000",
17498
17484
  "max_overhead_ratio": "0.15",
17499
17485
  "moving_window_size": "1",
17500
17486
  "enabled": true,
@@ -17536,8 +17522,8 @@ var models_default = {
17536
17522
  },
17537
17523
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17538
17524
  quotaInfo: {
17539
- remainingFraction: 0.9790073,
17540
- resetTime: "2026-09-17T09:29:22Z"
17525
+ remainingFraction: 0.7753168,
17526
+ resetTime: "2026-09-18T11:38:10Z"
17541
17527
  },
17542
17528
  recommended: true,
17543
17529
  supportedMimeTypes: {
@@ -17612,7 +17598,7 @@ var models_default = {
17612
17598
  stringValue: `{
17613
17599
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17614
17600
  "max_token_limit": "256000",
17615
- "token_threshold": "140000",
17601
+ "token_threshold": "50000",
17616
17602
  "max_overhead_ratio": "0.15",
17617
17603
  "moving_window_size": "1",
17618
17604
  "enabled": true,
@@ -17654,8 +17640,8 @@ var models_default = {
17654
17640
  },
17655
17641
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17656
17642
  quotaInfo: {
17657
- remainingFraction: 0.9790073,
17658
- resetTime: "2026-09-17T09:29:22Z"
17643
+ remainingFraction: 0.7753168,
17644
+ resetTime: "2026-09-18T11:38:10Z"
17659
17645
  },
17660
17646
  recommended: true,
17661
17647
  supportedMimeTypes: {
@@ -17729,7 +17715,7 @@ var models_default = {
17729
17715
  stringValue: `{
17730
17716
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17731
17717
  "max_token_limit": "256000",
17732
- "token_threshold": "140000",
17718
+ "token_threshold": "50000",
17733
17719
  "max_overhead_ratio": "0.15",
17734
17720
  "moving_window_size": "1",
17735
17721
  "enabled": true,
@@ -17765,8 +17751,8 @@ var models_default = {
17765
17751
  },
17766
17752
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17767
17753
  quotaInfo: {
17768
- remainingFraction: 0.9790073,
17769
- resetTime: "2026-09-17T09:29:22Z"
17754
+ remainingFraction: 0.7753168,
17755
+ resetTime: "2026-09-18T11:38:10Z"
17770
17756
  },
17771
17757
  recommended: true,
17772
17758
  supportedMimeTypes: {
@@ -17842,7 +17828,7 @@ var models_default = {
17842
17828
  stringValue: `{
17843
17829
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17844
17830
  "max_token_limit": "256000",
17845
- "token_threshold": "140000",
17831
+ "token_threshold": "50000",
17846
17832
  "max_overhead_ratio": "0.15",
17847
17833
  "moving_window_size": "1",
17848
17834
  "enabled": true,
@@ -17878,8 +17864,8 @@ var models_default = {
17878
17864
  },
17879
17865
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17880
17866
  quotaInfo: {
17881
- remainingFraction: 0.9790073,
17882
- resetTime: "2026-09-17T09:29:22Z"
17867
+ remainingFraction: 0.7753168,
17868
+ resetTime: "2026-09-18T11:38:10Z"
17883
17869
  },
17884
17870
  recommended: true,
17885
17871
  supportedMimeTypes: {
@@ -17955,7 +17941,7 @@ var models_default = {
17955
17941
  stringValue: `{
17956
17942
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
17957
17943
  "max_token_limit": "256000",
17958
- "token_threshold": "140000",
17944
+ "token_threshold": "50000",
17959
17945
  "max_overhead_ratio": "0.15",
17960
17946
  "moving_window_size": "1",
17961
17947
  "enabled": true,
@@ -17991,8 +17977,8 @@ var models_default = {
17991
17977
  },
17992
17978
  modelProvider: "MODEL_PROVIDER_GOOGLE",
17993
17979
  quotaInfo: {
17994
- remainingFraction: 0.9790073,
17995
- resetTime: "2026-09-17T09:29:22Z"
17980
+ remainingFraction: 0.7753168,
17981
+ resetTime: "2026-09-18T11:38:10Z"
17996
17982
  },
17997
17983
  recommended: true,
17998
17984
  supportedMimeTypes: {
@@ -18067,7 +18053,7 @@ var models_default = {
18067
18053
  stringValue: `{
18068
18054
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
18069
18055
  "max_token_limit": "256000",
18070
- "token_threshold": "140000",
18056
+ "token_threshold": "50000",
18071
18057
  "max_overhead_ratio": "0.15",
18072
18058
  "moving_window_size": "1",
18073
18059
  "enabled": true,
@@ -18103,8 +18089,8 @@ var models_default = {
18103
18089
  },
18104
18090
  modelProvider: "MODEL_PROVIDER_GOOGLE",
18105
18091
  quotaInfo: {
18106
- remainingFraction: 0.9790073,
18107
- resetTime: "2026-09-17T09:29:22Z"
18092
+ remainingFraction: 0.7753168,
18093
+ resetTime: "2026-09-18T11:38:10Z"
18108
18094
  },
18109
18095
  recommended: true,
18110
18096
  supportedMimeTypes: {
@@ -18178,7 +18164,7 @@ var models_default = {
18178
18164
  stringValue: `{
18179
18165
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
18180
18166
  "max_token_limit": "256000",
18181
- "token_threshold": "140000",
18167
+ "token_threshold": "50000",
18182
18168
  "max_overhead_ratio": "0.15",
18183
18169
  "moving_window_size": "1",
18184
18170
  "enabled": true,
@@ -18214,8 +18200,8 @@ var models_default = {
18214
18200
  },
18215
18201
  modelProvider: "MODEL_PROVIDER_GOOGLE",
18216
18202
  quotaInfo: {
18217
- remainingFraction: 0.9790073,
18218
- resetTime: "2026-09-17T09:29:22Z"
18203
+ remainingFraction: 0.7753168,
18204
+ resetTime: "2026-09-18T11:38:10Z"
18219
18205
  },
18220
18206
  recommended: true,
18221
18207
  supportedMimeTypes: {
@@ -18291,7 +18277,7 @@ var models_default = {
18291
18277
  stringValue: `{
18292
18278
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
18293
18279
  "max_token_limit": "256000",
18294
- "token_threshold": "140000",
18280
+ "token_threshold": "50000",
18295
18281
  "max_overhead_ratio": "0.15",
18296
18282
  "moving_window_size": "1",
18297
18283
  "enabled": true,
@@ -18327,8 +18313,8 @@ var models_default = {
18327
18313
  },
18328
18314
  modelProvider: "MODEL_PROVIDER_GOOGLE",
18329
18315
  quotaInfo: {
18330
- remainingFraction: 0.9790073,
18331
- resetTime: "2026-09-17T09:29:22Z"
18316
+ remainingFraction: 0.7753168,
18317
+ resetTime: "2026-09-18T11:38:10Z"
18332
18318
  },
18333
18319
  recommended: true,
18334
18320
  supportedMimeTypes: {
@@ -18404,7 +18390,7 @@ var models_default = {
18404
18390
  stringValue: `{
18405
18391
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
18406
18392
  "max_token_limit": "256000",
18407
- "token_threshold": "140000",
18393
+ "token_threshold": "50000",
18408
18394
  "max_overhead_ratio": "0.15",
18409
18395
  "moving_window_size": "1",
18410
18396
  "enabled": true,
@@ -18440,8 +18426,8 @@ var models_default = {
18440
18426
  },
18441
18427
  modelProvider: "MODEL_PROVIDER_GOOGLE",
18442
18428
  quotaInfo: {
18443
- remainingFraction: 0.9790073,
18444
- resetTime: "2026-09-17T09:29:22Z"
18429
+ remainingFraction: 0.7753168,
18430
+ resetTime: "2026-09-18T11:38:10Z"
18445
18431
  },
18446
18432
  recommended: true,
18447
18433
  supportedMimeTypes: {
@@ -18516,7 +18502,7 @@ var models_default = {
18516
18502
  stringValue: `{
18517
18503
  "strategy": "CHECKPOINT_STRATEGY_SAME_MODEL",
18518
18504
  "max_token_limit": "256000",
18519
- "token_threshold": "140000",
18505
+ "token_threshold": "50000",
18520
18506
  "max_overhead_ratio": "0.15",
18521
18507
  "moving_window_size": "1",
18522
18508
  "enabled": true,
@@ -18552,8 +18538,8 @@ var models_default = {
18552
18538
  },
18553
18539
  modelProvider: "MODEL_PROVIDER_GOOGLE",
18554
18540
  quotaInfo: {
18555
- remainingFraction: 0.9790073,
18556
- resetTime: "2026-09-17T09:29:22Z"
18541
+ remainingFraction: 0.7753168,
18542
+ resetTime: "2026-09-18T11:38:10Z"
18557
18543
  },
18558
18544
  recommended: true,
18559
18545
  supportedMimeTypes: {
@@ -18642,8 +18628,8 @@ var models_default = {
18642
18628
  },
18643
18629
  modelProvider: "MODEL_PROVIDER_GOOGLE",
18644
18630
  quotaInfo: {
18645
- remainingFraction: 0.9790073,
18646
- resetTime: "2026-09-17T09:29:22Z"
18631
+ remainingFraction: 0.7753168,
18632
+ resetTime: "2026-09-18T11:38:10Z"
18647
18633
  },
18648
18634
  recommended: true,
18649
18635
  supportedMimeTypes: {
@@ -18720,7 +18706,7 @@ var models_default = {
18720
18706
  modelProvider: "MODEL_PROVIDER_OPENAI",
18721
18707
  quotaInfo: {
18722
18708
  remainingFraction: 1,
18723
- resetTime: "2026-09-17T11:40:46Z"
18709
+ resetTime: "2026-09-18T16:07:34Z"
18724
18710
  },
18725
18711
  recommended: true,
18726
18712
  supportsThinking: true,
@@ -20830,799 +20816,14 @@ function toUrlString(value) {
20830
20816
  return value.toString();
20831
20817
  }
20832
20818
 
20833
- // src/plugin/types.ts
20834
- function defineOpenCodeV2Plugin(def) {
20835
- return def;
20836
- }
20837
-
20838
- // src/plugin/v2.ts
20839
- import { homedir as homedir4 } from "os";
20840
- import { join as join6 } from "path";
20841
- import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync5 } from "fs";
20842
- import "http";
20843
- var AGY_V2_QUOTA_COMMAND = "agy-quota";
20844
- var AGY_V2_QUOTA_SUMMARY_COMMAND = "agy-quota-summary";
20845
- var AGY_V2_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
20846
-
20847
- Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
20848
- Do not call other tools.
20849
- `;
20850
- 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.
20851
-
20852
- Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
20853
- Do not call other tools.
20854
- `;
20855
- function getSafeHeader2(headers, key) {
20856
- if (!headers) {
20857
- return void 0;
20858
- }
20859
- const targetKey = key.toLowerCase();
20860
- if (typeof headers.get === "function") {
20861
- try {
20862
- return headers.get(targetKey) || void 0;
20863
- } catch {
20864
- }
20865
- }
20866
- if (Array.isArray(headers)) {
20867
- const found = headers.find((item) => {
20868
- if (Array.isArray(item) && typeof item[0] === "string") {
20869
- return item[0].toLowerCase() === targetKey;
20870
- }
20871
- return false;
20872
- });
20873
- return found ? String(found[1]) : void 0;
20874
- }
20875
- if (typeof headers === "object") {
20876
- const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
20877
- return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
20878
- }
20879
- return void 0;
20880
- }
20881
- function setSafeHeaders2(initHeaders, newHeaders) {
20882
- if (typeof globalThis.Headers !== "undefined") {
20883
- const headers = new globalThis.Headers(initHeaders ?? {});
20884
- for (const [k, v] of Object.entries(newHeaders)) {
20885
- headers.set(k, v);
20886
- }
20887
- return headers;
20888
- }
20889
- if (Array.isArray(initHeaders)) {
20890
- const nextHeaders2 = [...initHeaders];
20891
- for (const [k, v] of Object.entries(newHeaders)) {
20892
- const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
20893
- if (idx !== -1) {
20894
- nextHeaders2[idx] = [k, v];
20895
- } else {
20896
- nextHeaders2.push([k, v]);
20897
- }
20898
- }
20899
- return nextHeaders2;
20900
- }
20901
- const nextHeaders = {};
20902
- if (initHeaders && typeof initHeaders === "object") {
20903
- for (const [k, v] of Object.entries(initHeaders)) {
20904
- nextHeaders[k] = String(v);
20905
- }
20906
- }
20907
- for (const [k, v] of Object.entries(newHeaders)) {
20908
- const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
20909
- if (existingKey) {
20910
- nextHeaders[existingKey] = v;
20911
- } else {
20912
- nextHeaders[k] = v;
20913
- }
20914
- }
20915
- return nextHeaders;
20916
- }
20917
- function toUrlString2(value) {
20918
- if (typeof value === "string") {
20919
- return value;
20920
- }
20921
- const candidate = value.url;
20922
- if (candidate) {
20923
- return candidate;
20924
- }
20925
- return value.toString();
20926
- }
20927
- function resolveModelTier2(baseModelId, init) {
20928
- const parts = baseModelId.split("@");
20929
- const base = parts[0] || "";
20930
- const suffixTier = parts[1]?.toLowerCase();
20931
- const mapping = TIER_MAPPING[base];
20932
- if (!mapping) {
20933
- return baseModelId;
20934
- }
20935
- const headerTier = getSafeHeader2(init?.headers, "x-agy-tier")?.toLowerCase() || null;
20936
- const requestedTier = headerTier || suffixTier;
20937
- if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
20938
- return mapping[requestedTier] || baseModelId;
20939
- }
20940
- return mapping["medium"] ?? mapping["high"];
20941
- }
20942
- var storedAuthOverrideForTesting = void 0;
20943
- function loadStoredAuthFromJson() {
20944
- if (storedAuthOverrideForTesting !== void 0) {
20945
- return storedAuthOverrideForTesting;
20946
- }
20947
- const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
20948
- try {
20949
- if (existsSync6(authPath)) {
20950
- const content = readFileSync5(authPath, "utf8");
20951
- const data = JSON.parse(content);
20952
- return data?.[AGY_PROVIDER_ID];
20953
- }
20954
- } catch {
20955
- }
20956
- return void 0;
20957
- }
20958
- function saveStoredAuthToJson(authRecord) {
20959
- if (process.env.NODE_ENV === "test" || process.env.VITEST || storedAuthOverrideForTesting !== void 0) {
20960
- return;
20961
- }
20962
- try {
20963
- const dirPath = join6(homedir4(), ".local", "share", "opencode");
20964
- if (!existsSync6(dirPath)) {
20965
- mkdirSync5(dirPath, { recursive: true });
20966
- }
20967
- const authPath = join6(dirPath, "auth.json");
20968
- let data = {};
20969
- if (existsSync6(authPath)) {
20970
- try {
20971
- data = JSON.parse(readFileSync5(authPath, "utf8")) || {};
20972
- } catch {
20973
- data = {};
20974
- }
20975
- }
20976
- data[AGY_PROVIDER_ID] = {
20977
- type: "oauth",
20978
- refresh: authRecord.refresh,
20979
- access: authRecord.access,
20980
- expires: authRecord.expires
20981
- };
20982
- writeFileSync5(authPath, JSON.stringify(data, null, 2), "utf8");
20983
- } catch {
20984
- }
20985
- }
20986
- function createV2FetchInterceptor(getAuthSnapshot) {
20987
- return async function agyV2Fetch(input, init) {
20988
- const isGL = isGenerativeLanguageRequest(input);
20989
- const isInternal = toUrlString2(input).includes("cloudcode-pa.googleapis.com");
20990
- if (!isGL && !isInternal) {
20991
- return agyFetch(input, init);
20992
- }
20993
- let rawAuth = getAuthSnapshot ? await getAuthSnapshot() : void 0;
20994
- if (!rawAuth) {
20995
- rawAuth = loadStoredAuthFromJson();
20996
- }
20997
- if (!rawAuth || !isOAuthAuth(rawAuth)) {
20998
- return agyFetch(input, init);
20999
- }
21000
- let authRecord = resolveCachedAuth(rawAuth);
21001
- if (accessTokenExpired(authRecord)) {
21002
- const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
21003
- } } });
21004
- if (refreshed) {
21005
- authRecord = refreshed;
21006
- }
21007
- }
21008
- if (!authRecord.access) {
21009
- return agyFetch(input, init);
21010
- }
21011
- if (isInternal) {
21012
- const hasAuth = getSafeHeader2(init?.headers, "Authorization") !== void 0;
21013
- if (hasAuth) {
21014
- return agyFetch(input, init);
21015
- }
21016
- const userAgent = buildAgyCliUserAgent();
21017
- const headers = setSafeHeaders2(init?.headers, {
21018
- Authorization: `Bearer ${authRecord.access}`,
21019
- "User-Agent": userAgent
21020
- });
21021
- return agyFetch(input, {
21022
- ...init,
21023
- headers
21024
- });
21025
- }
21026
- const requestTarget = parseGenerativeLanguageRequest(input);
21027
- const requestUserAgentModel = requestTarget?.effectiveModel;
21028
- let projectContext;
21029
- try {
21030
- projectContext = await ensureProjectContext(
21031
- authRecord,
21032
- { auth: { set: async () => {
21033
- } } },
21034
- void 0,
21035
- requestUserAgentModel
21036
- );
21037
- } catch {
21038
- projectContext = {
21039
- effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
21040
- auth: authRecord
21041
- };
21042
- }
21043
- const originalRequestedModel = parseGenerativeLanguageRequest(input)?.effectiveModel;
21044
- let modifiedInput = input;
21045
- if (isGL && originalRequestedModel) {
21046
- const originalBase = originalRequestedModel.replace("google-agy/", "");
21047
- const resolvedBase = resolveModelTier2(originalBase, init);
21048
- if (originalBase !== resolvedBase) {
21049
- if (typeof modifiedInput === "string") {
21050
- modifiedInput = modifiedInput.replace(`models/${originalBase}`, `models/${resolvedBase}`);
21051
- } else if (typeof Request !== "undefined" && modifiedInput instanceof Request) {
21052
- const newUrl = modifiedInput.url.replace(`models/${originalBase}`, `models/${resolvedBase}`);
21053
- modifiedInput = new Request(newUrl, modifiedInput);
21054
- }
21055
- }
21056
- }
21057
- const transformed = prepareAgyRequest(
21058
- modifiedInput,
21059
- init,
21060
- authRecord.access,
21061
- projectContext.effectiveProjectId,
21062
- void 0
21063
- );
21064
- const chatLogger = createChatLogger();
21065
- if (chatLogger) {
21066
- chatLogger.logRequest(
21067
- toUrlString2(transformed.request),
21068
- transformed.init.method || "GET",
21069
- transformed.init.headers,
21070
- transformed.init.body
21071
- );
21072
- }
21073
- const response = await fetchWithRetry(transformed.request, transformed.init);
21074
- return transformAgyResponse(
21075
- response,
21076
- transformed.streaming,
21077
- null,
21078
- transformed.requestedModel,
21079
- transformed.sessionId,
21080
- chatLogger
21081
- );
21082
- };
21083
- }
21084
- async function setupOpenCodeV2(ctx) {
21085
- ctx.catalog.transform(async (editor) => {
21086
- if (!editor) return;
21087
- const resolveVariants = (modelId) => {
21088
- const mapping = TIER_MAPPING[modelId];
21089
- if (!mapping) return void 0;
21090
- const variants = [];
21091
- if (mapping.minimal !== void 0) variants.push({ id: "minimal" });
21092
- if (mapping.low !== void 0) variants.push({ id: "low" });
21093
- if (mapping.medium !== void 0) variants.push({ id: "medium" });
21094
- if (mapping.high !== void 0) variants.push({ id: "high" });
21095
- return variants.length > 0 ? variants : void 0;
21096
- };
21097
- if (typeof editor?.provider?.update === "function") {
21098
- editor.provider.update(AGY_PROVIDER_ID, (p) => {
21099
- p.name = "Antigravity CLI";
21100
- p.activation = "enabled";
21101
- p.package = "aisdk:@ai-sdk/google";
21102
- p.description = "Google Gemini Antigravity Code Assist OAuth provider";
21103
- p.settings = { ...p.settings || {}, apiKey: "dummy" };
21104
- p.integrationID = AGY_PROVIDER_ID;
21105
- });
21106
- if (typeof editor?.model?.update === "function") {
21107
- for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
21108
- editor.model.update(AGY_PROVIDER_ID, modelId, (m) => {
21109
- m.name = simple.name;
21110
- m.capabilities = {
21111
- tools: true,
21112
- input: ["text", "image"],
21113
- output: ["text"]
21114
- };
21115
- m.limit = {
21116
- context: simple.maxTokens,
21117
- output: simple.maxOutputTokens
21118
- };
21119
- m.family = "gemini";
21120
- if (simple.cost) {
21121
- m.cost = simple.cost;
21122
- }
21123
- const variants = resolveVariants(modelId);
21124
- if (variants) {
21125
- m.variants = variants;
21126
- }
21127
- });
21128
- }
21129
- }
21130
- return;
21131
- }
21132
- const catalog = editor;
21133
- catalog.providers = catalog.providers || {};
21134
- catalog.providers[AGY_PROVIDER_ID] = {
21135
- id: AGY_PROVIDER_ID,
21136
- name: "Antigravity CLI",
21137
- npm: "aisdk:@ai-sdk/google",
21138
- settings: { apiKey: "dummy" },
21139
- integrationID: AGY_PROVIDER_ID,
21140
- models: { ...catalog.providers[AGY_PROVIDER_ID]?.models || {} },
21141
- ...catalog.providers[AGY_PROVIDER_ID]
21142
- };
21143
- if (catalog.providers[AGY_PROVIDER_ID].settings) {
21144
- catalog.providers[AGY_PROVIDER_ID].settings = {
21145
- ...catalog.providers[AGY_PROVIDER_ID].settings,
21146
- apiKey: "dummy"
21147
- };
21148
- } else {
21149
- catalog.providers[AGY_PROVIDER_ID].settings = { apiKey: "dummy" };
21150
- }
21151
- catalog.providers[AGY_PROVIDER_ID].integrationID = AGY_PROVIDER_ID;
21152
- const targetModels = catalog.providers[AGY_PROVIDER_ID].models;
21153
- for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
21154
- const isClaude = modelId.startsWith("claude-");
21155
- const isGpt = modelId.startsWith("gpt-");
21156
- const variants = resolveVariants(modelId);
21157
- targetModels[modelId] = {
21158
- id: modelId,
21159
- providerID: AGY_PROVIDER_ID,
21160
- name: simple.name,
21161
- description: simple.description,
21162
- family: modelId.includes("gemini") ? "gemini" : isClaude ? "claude" : isGpt ? "gpt" : "unknown",
21163
- reasoning: simple.reasoning,
21164
- attachment: simple.attachment,
21165
- tool_call: simple.toolCall,
21166
- limit: {
21167
- context: simple.maxTokens,
21168
- output: simple.maxOutputTokens
21169
- },
21170
- cost: simple.cost || { input: 0, output: 0 },
21171
- ...variants ? { variants } : {},
21172
- ...targetModels[modelId] || {}
21173
- };
21174
- }
21175
- });
21176
- ctx.tool.transform(async (editor) => {
21177
- if (!editor) return;
21178
- const quotaTool = createAgyQuotaTool({
21179
- client: void 0,
21180
- getAuthResolver: () => void 0,
21181
- getConfiguredProjectId: () => void 0,
21182
- getUserAgentModel: () => void 0
21183
- });
21184
- const quotaSummaryTool = createAgyQuotaSummaryTool({
21185
- client: void 0,
21186
- getAuthResolver: () => void 0,
21187
- getConfiguredProjectId: () => void 0,
21188
- getUserAgentModel: () => void 0
21189
- });
21190
- if (typeof editor.add === "function") {
21191
- editor.add({
21192
- name: AGY_QUOTA_TOOL_NAME,
21193
- description: quotaTool.description,
21194
- input: {},
21195
- execute: async (args, context) => quotaTool.execute(args, context)
21196
- });
21197
- editor.add({
21198
- name: AGY_QUOTA_SUMMARY_TOOL_NAME,
21199
- description: quotaSummaryTool.description,
21200
- input: {},
21201
- execute: async (args, context) => quotaSummaryTool.execute(args, context)
21202
- });
21203
- } else if (typeof editor.set === "function") {
21204
- editor.set(AGY_QUOTA_TOOL_NAME, quotaTool);
21205
- editor.set(AGY_QUOTA_SUMMARY_TOOL_NAME, quotaSummaryTool);
21206
- } else if (editor.tools && typeof editor.tools === "object") {
21207
- editor.tools[AGY_QUOTA_TOOL_NAME] = quotaTool;
21208
- editor.tools[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
21209
- } else if (typeof editor === "object") {
21210
- editor[AGY_QUOTA_TOOL_NAME] = quotaTool;
21211
- editor[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
21212
- }
21213
- });
21214
- ctx.command.transform(async (editor) => {
21215
- if (!editor) return;
21216
- const commands = {
21217
- [AGY_V2_QUOTA_COMMAND]: {
21218
- description: "Show Agy Code Assist quota usage",
21219
- template: AGY_V2_QUOTA_COMMAND_TEMPLATE
21220
- },
21221
- [AGY_V2_QUOTA_SUMMARY_COMMAND]: {
21222
- description: "Show Agy Code Assist quota summary with weekly and 5-hour limits",
21223
- template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
21224
- }
21225
- };
21226
- if (typeof editor.add === "function") {
21227
- editor.add({
21228
- name: AGY_V2_QUOTA_COMMAND,
21229
- description: "Display current Antigravity quota usage",
21230
- template: AGY_V2_QUOTA_COMMAND_TEMPLATE
21231
- });
21232
- editor.add({
21233
- name: AGY_V2_QUOTA_SUMMARY_COMMAND,
21234
- description: "Display Antigravity quota summary grouped by model family",
21235
- template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
21236
- });
21237
- } else if (typeof editor.set === "function") {
21238
- editor.set(AGY_V2_QUOTA_COMMAND, commands[AGY_V2_QUOTA_COMMAND]);
21239
- editor.set(AGY_V2_QUOTA_SUMMARY_COMMAND, commands[AGY_V2_QUOTA_SUMMARY_COMMAND]);
21240
- } else if (editor.commands && typeof editor.commands === "object") {
21241
- editor.commands[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
21242
- editor.commands[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
21243
- } else if (typeof editor === "object") {
21244
- editor[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
21245
- editor[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
21246
- }
21247
- });
21248
- ctx.integration?.transform?.((editor) => {
21249
- if (!editor) return;
21250
- editor.update?.(AGY_PROVIDER_ID, (integration) => {
21251
- integration.name = "Antigravity CLI (plugin)";
21252
- });
21253
- editor.method?.update?.({
21254
- integrationID: AGY_PROVIDER_ID,
21255
- method: {
21256
- id: "oauth",
21257
- type: "oauth",
21258
- label: "Antigravity CLI (OAuth)"
21259
- },
21260
- authorize: async () => {
21261
- const authorization = await authorizeAgy();
21262
- return {
21263
- mode: "code",
21264
- url: authorization.url,
21265
- instructions: "Please complete Google account authorization in your browser. After authorization, copy the full redirect URL or code and paste it below:",
21266
- callback: async (code) => {
21267
- const trimmed = code.trim();
21268
- const parsed = parseOAuthCallbackInput(trimmed);
21269
- const authCode = parsed.code || trimmed;
21270
- if (!authCode) {
21271
- return { type: "failed", error: "Missing authorization code in callback input" };
21272
- }
21273
- if (parsed.state && parsed.state !== authorization.state) {
21274
- return { type: "failed", error: "State mismatch in callback input (possible CSRF attempt)" };
21275
- }
21276
- const exchangeResult = await exchangeAgyWithVerifier(authCode, authorization.verifier);
21277
- if (exchangeResult.type !== "success") {
21278
- return exchangeResult;
21279
- }
21280
- const initialRefresh = formatRefreshParts({
21281
- refreshToken: exchangeResult.refresh
21282
- });
21283
- let authRecord = {
21284
- type: "oauth",
21285
- refresh: initialRefresh,
21286
- access: exchangeResult.access,
21287
- expires: exchangeResult.expires
21288
- };
21289
- try {
21290
- const projectContext = await ensureProjectContext(
21291
- authRecord,
21292
- { auth: { set: async () => {
21293
- } } }
21294
- );
21295
- authRecord = {
21296
- ...authRecord,
21297
- refresh: projectContext.auth.refresh
21298
- };
21299
- } catch {
21300
- }
21301
- saveStoredAuthToJson(authRecord);
21302
- return {
21303
- type: "oauth",
21304
- methodID: "oauth",
21305
- refresh: authRecord.refresh,
21306
- access: authRecord.access,
21307
- expires: authRecord.expires
21308
- };
21309
- }
21310
- };
21311
- }
21312
- });
21313
- });
21314
- ctx.aisdk?.hook("sdk", async (event) => {
21315
- if (!event) return;
21316
- const isMatchingProvider = event.providerID === AGY_PROVIDER_ID || event.model?.providerID === AGY_PROVIDER_ID;
21317
- if (!isMatchingProvider) return;
21318
- event.options = event.options || {};
21319
- event.options.apiKey = "dummy";
21320
- event.options.fetch = createV2FetchInterceptor();
21321
- });
21322
- let lastInterceptedModel;
21323
- ctx.session.hook(
21324
- "http.request",
21325
- async (event) => {
21326
- if (!event) return;
21327
- const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
21328
- const isGL = isGenerativeLanguageRequest(rawUrl);
21329
- const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
21330
- if (!isGL && !isInternal) {
21331
- return;
21332
- }
21333
- event.headers = event.headers || {};
21334
- let modelName;
21335
- let rawAuth = event.auth;
21336
- if (rawAuth && !rawAuth.type) {
21337
- const tokenVal = rawAuth.access || rawAuth.token;
21338
- if (tokenVal || rawAuth.refresh) {
21339
- rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
21340
- }
21341
- }
21342
- if (!rawAuth || !isOAuthAuth(rawAuth)) {
21343
- rawAuth = loadStoredAuthFromJson();
21344
- }
21345
- let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
21346
- if (authRecord && accessTokenExpired(authRecord)) {
21347
- const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
21348
- } } });
21349
- if (refreshed) {
21350
- authRecord = refreshed;
21351
- saveStoredAuthToJson(refreshed);
21352
- }
21353
- }
21354
- if (isGL) {
21355
- const parsed = parseGenerativeLanguageRequest(rawUrl);
21356
- modelName = parsed?.effectiveModel;
21357
- if (modelName) {
21358
- lastInterceptedModel = modelName;
21359
- }
21360
- if (typeof event.headers.delete === "function") {
21361
- event.headers.delete("x-goog-api-key");
21362
- event.headers.delete("api-key");
21363
- } else {
21364
- for (const key of Object.keys(event.headers)) {
21365
- const lower = key.toLowerCase();
21366
- if (lower === "x-goog-api-key" || lower === "api-key") {
21367
- delete event.headers[key];
21368
- }
21369
- }
21370
- }
21371
- if (event.request?.headers) {
21372
- if (typeof event.request.headers.delete === "function") {
21373
- event.request.headers.delete("x-goog-api-key");
21374
- event.request.headers.delete("api-key");
21375
- } else {
21376
- for (const key of Object.keys(event.request.headers)) {
21377
- const lower = key.toLowerCase();
21378
- if (lower === "x-goog-api-key" || lower === "api-key") {
21379
- delete event.request.headers[key];
21380
- }
21381
- }
21382
- }
21383
- }
21384
- let cleanUrl = rawUrl;
21385
- try {
21386
- const parsedUrl = new URL(rawUrl);
21387
- let urlChanged = false;
21388
- for (const param of ["key", "x-goog-api-key", "api-key"]) {
21389
- if (parsedUrl.searchParams.has(param)) {
21390
- parsedUrl.searchParams.delete(param);
21391
- urlChanged = true;
21392
- }
21393
- }
21394
- if (urlChanged) {
21395
- cleanUrl = parsedUrl.toString();
21396
- }
21397
- } catch {
21398
- }
21399
- if (authRecord && authRecord.access) {
21400
- let projectContext;
21401
- try {
21402
- projectContext = await ensureProjectContext(
21403
- authRecord,
21404
- { auth: { set: async () => {
21405
- } } },
21406
- void 0,
21407
- modelName
21408
- );
21409
- } catch {
21410
- projectContext = {
21411
- effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
21412
- auth: authRecord
21413
- };
21414
- }
21415
- const originalRequestedModel = modelName;
21416
- let modifiedUrl = cleanUrl;
21417
- if (originalRequestedModel) {
21418
- const originalBase = originalRequestedModel.replace("google-agy/", "");
21419
- const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
21420
- const resolvedBase = resolveModelTier2(originalBase, { headers: initHeaders });
21421
- if (originalBase !== resolvedBase) {
21422
- modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
21423
- }
21424
- }
21425
- let bodyPayload = event.body;
21426
- if (bodyPayload === void 0 && event.request) {
21427
- if (typeof event.request.clone === "function") {
21428
- try {
21429
- bodyPayload = await event.request.clone().text();
21430
- } catch {
21431
- }
21432
- } else if (event.request.body !== void 0) {
21433
- bodyPayload = event.request.body;
21434
- }
21435
- }
21436
- let preExistingUserAgent;
21437
- if (typeof event.headers?.get === "function") {
21438
- preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
21439
- } else if (event.headers && typeof event.headers === "object") {
21440
- preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
21441
- }
21442
- if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
21443
- preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
21444
- } else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
21445
- preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
21446
- }
21447
- const method = event.method || event.request?.method || "POST";
21448
- const requestHeaders = event.headers || event.request?.headers;
21449
- const transformed = prepareAgyRequest(
21450
- modifiedUrl,
21451
- {
21452
- method,
21453
- headers: requestHeaders,
21454
- body: bodyPayload
21455
- },
21456
- authRecord.access,
21457
- projectContext.effectiveProjectId
21458
- );
21459
- const targetUrl = toUrlString2(transformed.request);
21460
- if (typeof event.url === "string") {
21461
- event.url = targetUrl;
21462
- }
21463
- if (event.request && typeof event.request === "object") {
21464
- if (typeof Request !== "undefined" && event.request instanceof Request) {
21465
- event.request = new Request(targetUrl, {
21466
- method: transformed.init.method,
21467
- headers: transformed.init.headers,
21468
- body: transformed.init.body
21469
- });
21470
- } else if (typeof event.request.url === "string") {
21471
- try {
21472
- event.request.url = targetUrl;
21473
- } catch {
21474
- }
21475
- }
21476
- }
21477
- const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
21478
- for (const [k, v] of headerEntries) {
21479
- const lowerK = k.toLowerCase();
21480
- if (lowerK === "user-agent") {
21481
- if (preExistingUserAgent) {
21482
- continue;
21483
- }
21484
- if (typeof event.headers?.set === "function") {
21485
- event.headers.set("User-Agent", v);
21486
- } else if (event.headers) {
21487
- event.headers["User-Agent"] = v;
21488
- }
21489
- if (event.request?.headers && typeof event.request.headers.set === "function") {
21490
- event.request.headers.set("User-Agent", v);
21491
- } else if (event.request?.headers && typeof event.request.headers === "object") {
21492
- event.request.headers["User-Agent"] = v;
21493
- }
21494
- continue;
21495
- }
21496
- if (typeof event.headers?.set === "function") {
21497
- event.headers.set(k, v);
21498
- } else if (event.headers) {
21499
- event.headers[k] = v;
21500
- }
21501
- if (event.request?.headers && typeof event.request.headers.set === "function") {
21502
- event.request.headers.set(k, v);
21503
- } else if (event.request?.headers && typeof event.request.headers === "object") {
21504
- event.request.headers[k] = v;
21505
- }
21506
- }
21507
- if (transformed.init.body !== void 0) {
21508
- event.body = transformed.init.body;
21509
- if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
21510
- event.request.body = transformed.init.body;
21511
- }
21512
- }
21513
- } else {
21514
- if (typeof event.url === "string") {
21515
- event.url = cleanUrl;
21516
- }
21517
- if (event.request && typeof event.request === "object") {
21518
- if (typeof event.request.url === "string") {
21519
- event.request.url = cleanUrl;
21520
- }
21521
- }
21522
- }
21523
- }
21524
- if (authRecord && authRecord.access) {
21525
- if (typeof event.headers?.set === "function") {
21526
- event.headers.set("Authorization", `Bearer ${authRecord.access}`);
21527
- } else if (event.headers) {
21528
- event.headers["Authorization"] = `Bearer ${authRecord.access}`;
21529
- }
21530
- if (event.request?.headers && typeof event.request.headers.set === "function") {
21531
- event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
21532
- } else if (event.request?.headers && typeof event.request.headers === "object") {
21533
- event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
21534
- }
21535
- }
21536
- const userAgent = buildAgyCliUserAgent(modelName);
21537
- if (typeof event.headers?.set === "function") {
21538
- if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
21539
- event.headers.set("User-Agent", userAgent);
21540
- }
21541
- } else if (event.headers) {
21542
- if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
21543
- event.headers["User-Agent"] = userAgent;
21544
- }
21545
- }
21546
- if (event.request?.headers && typeof event.request.headers.set === "function") {
21547
- if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
21548
- event.request.headers.set("User-Agent", userAgent);
21549
- }
21550
- } else if (event.request?.headers && typeof event.request.headers === "object") {
21551
- if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
21552
- event.request.headers["User-Agent"] = userAgent;
21553
- }
21554
- }
21555
- },
21556
- { providerID: AGY_PROVIDER_ID }
21557
- );
21558
- ctx.session.hook(
21559
- "http.response",
21560
- async (event) => {
21561
- if (!event || !event.response) return;
21562
- const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
21563
- const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
21564
- if (isInternal && event.response instanceof Response) {
21565
- const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
21566
- const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || lastInterceptedModel;
21567
- const transformed = await transformAgyResponse(
21568
- event.response,
21569
- !!isStreaming,
21570
- null,
21571
- parsedModel,
21572
- void 0,
21573
- void 0
21574
- );
21575
- event.response = transformed;
21576
- }
21577
- },
21578
- { providerID: AGY_PROVIDER_ID }
21579
- );
21580
- ctx.session.hook(
21581
- "retry",
21582
- async (event) => {
21583
- if (!event) return;
21584
- const response = event.response;
21585
- if (response instanceof Response) {
21586
- if (response.status === 429 || response.status === 503) {
21587
- const quota = await classifyQuotaResponse(response);
21588
- if (quota?.retryDelayMs) {
21589
- event.retryDelayMs = quota.retryDelayMs;
21590
- } else {
21591
- event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
21592
- }
21593
- }
21594
- } else if (event.details && Array.isArray(event.details)) {
21595
- const retryInfo = event.details.find(
21596
- (d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
21597
- );
21598
- if (retryInfo?.retryDelay) {
21599
- const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
21600
- if (delayMs !== null) {
21601
- event.retryDelayMs = delayMs;
21602
- }
21603
- }
21604
- }
21605
- },
21606
- { providerID: AGY_PROVIDER_ID }
21607
- );
21608
- }
21609
- var v2PluginDefinition = defineOpenCodeV2Plugin({
21610
- id: AGY_PROVIDER_ID,
21611
- setup: setupOpenCodeV2
21612
- });
21613
-
21614
20819
  // index.ts
21615
- var dualPlugin = {
21616
- ...v2PluginDefinition,
20820
+ var index_default = {
20821
+ id: "@anthonyhaussman/opencode-agy-auth",
21617
20822
  server: AgyCLIOAuthPlugin
21618
20823
  };
21619
- var index_default = dualPlugin;
21620
20824
  export {
21621
20825
  AgyCLIOAuthPlugin,
21622
20826
  GoogleOAuthPlugin,
21623
- index_default as default,
21624
- defineOpenCodeV2Plugin,
21625
- setupOpenCodeV2,
21626
- v2PluginDefinition
20827
+ index_default as default
21627
20828
  };
21628
20829
  //# sourceMappingURL=index.js.map