@anthonyhaussman/opencode-agy-auth 1.2.3-alpha.9 → 1.2.3

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