@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/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.3";
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
- 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
  }
@@ -16164,7 +16147,7 @@ var models_default = {
16164
16147
  modelProvider: "MODEL_PROVIDER_ANTHROPIC",
16165
16148
  quotaInfo: {
16166
16149
  remainingFraction: 1,
16167
- resetTime: "2026-09-15T07:48:02Z"
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-15T07:48:02Z"
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.967206,
16243
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16320
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16397
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16471
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16546
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16645
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16709
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16728
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16760
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16845
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
16944
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17021
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17122
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17235
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17348
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17461
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17573
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17678
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17785
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17892
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
17998
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
18103
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
18210
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
18317
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
18423
- resetTime: "2026-09-15T07:33:42Z"
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.967206,
18507
- resetTime: "2026-09-15T07:33:42Z"
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-15T07:48:02Z"
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 dualPlugin = {
21471
- ...v2PluginDefinition,
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