@anthonyhaussman/opencode-agy-auth 1.2.9 → 1.2.10-alpha.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/README.md +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +952 -179
- package/dist/index.js.map +1 -1
- package/dist/src/constants.d.ts +2 -0
- package/dist/src/plugin/headers.d.ts +7 -0
- package/dist/src/plugin/oauth-authorize.d.ts +9 -0
- package/dist/src/plugin/quota-summary.d.ts +2 -0
- package/dist/src/plugin/quota.d.ts +2 -0
- package/dist/src/plugin/tier.d.ts +28 -0
- package/dist/src/plugin/types.d.ts +35 -0
- package/dist/src/plugin/v2-fetch.d.ts +1 -0
- package/dist/src/plugin/v2-session.d.ts +7 -0
- package/dist/src/plugin/v2-storage.d.ts +3 -0
- package/dist/src/plugin/v2.d.ts +14 -0
- package/dist/src/plugin.d.ts +2 -0
- package/dist/src/sdk/agy-cli-version.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -268,7 +268,7 @@ function createAgyActivityRequestId() {
|
|
|
268
268
|
import os from "os";
|
|
269
269
|
|
|
270
270
|
// src/sdk/agy-cli-version.ts
|
|
271
|
-
var AGY_CLI_VERSION = "1.2.
|
|
271
|
+
var AGY_CLI_VERSION = "1.2.10";
|
|
272
272
|
|
|
273
273
|
// src/sdk/user-agent.ts
|
|
274
274
|
var cachedUserAgent = null;
|
|
@@ -579,6 +579,12 @@ 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
|
+
};
|
|
582
588
|
|
|
583
589
|
// src/sdk/retry/helpers.ts
|
|
584
590
|
var DEFAULT_MAX_ATTEMPTS = 3;
|
|
@@ -1575,7 +1581,11 @@ function createOAuthAuthorizeMethod(options) {
|
|
|
1575
1581
|
const isHeadless = !!(process.env.SSH_CONNECTION || process.env.SSH_CLIENT || process.env.SSH_TTY || process.env.OPENCODE_HEADLESS);
|
|
1576
1582
|
const authorization = await authorizeAgy();
|
|
1577
1583
|
if (!isHeadless) {
|
|
1578
|
-
|
|
1584
|
+
if (options?.openBrowser) {
|
|
1585
|
+
options.openBrowser(authorization.url);
|
|
1586
|
+
} else {
|
|
1587
|
+
openBrowserUrl(authorization.url);
|
|
1588
|
+
}
|
|
1579
1589
|
}
|
|
1580
1590
|
return {
|
|
1581
1591
|
url: authorization.url,
|
|
@@ -1629,16 +1639,23 @@ function parseOAuthCallbackInput(input) {
|
|
|
1629
1639
|
}
|
|
1630
1640
|
return { code: trimmed };
|
|
1631
1641
|
}
|
|
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;
|
|
1632
1650
|
function openBrowserUrl(url2) {
|
|
1651
|
+
if ((process.env.NODE_ENV === "test" || process.env.VITEST) && openBrowserLauncher === defaultOpenBrowserLauncher) {
|
|
1652
|
+
return;
|
|
1653
|
+
}
|
|
1633
1654
|
try {
|
|
1634
1655
|
const platform2 = process.platform;
|
|
1635
1656
|
const command = platform2 === "darwin" ? "open" : platform2 === "win32" ? "rundll32" : "xdg-open";
|
|
1636
1657
|
const args = platform2 === "win32" ? ["url.dll,FileProtocolHandler", url2] : [url2];
|
|
1637
|
-
|
|
1638
|
-
stdio: "ignore",
|
|
1639
|
-
detached: true
|
|
1640
|
-
});
|
|
1641
|
-
child.unref?.();
|
|
1658
|
+
openBrowserLauncher(command, args);
|
|
1642
1659
|
} catch {
|
|
1643
1660
|
}
|
|
1644
1661
|
}
|
|
@@ -15320,6 +15337,12 @@ function formatRelativeResetTime(resetTime) {
|
|
|
15320
15337
|
|
|
15321
15338
|
// src/plugin/quota.ts
|
|
15322
15339
|
var AGY_QUOTA_TOOL_NAME = "agy_quota";
|
|
15340
|
+
var AGY_V2_QUOTA_COMMAND = "agy-quota";
|
|
15341
|
+
var AGY_V2_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
15342
|
+
|
|
15343
|
+
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
15344
|
+
Do not call other tools.
|
|
15345
|
+
`;
|
|
15323
15346
|
function createAgyQuotaTool({
|
|
15324
15347
|
client,
|
|
15325
15348
|
getAuthResolver,
|
|
@@ -15559,6 +15582,12 @@ function splitModelVariant(modelId) {
|
|
|
15559
15582
|
|
|
15560
15583
|
// src/plugin/quota-summary.ts
|
|
15561
15584
|
var AGY_QUOTA_SUMMARY_TOOL_NAME = "agy_quota_summary";
|
|
15585
|
+
var AGY_V2_QUOTA_SUMMARY_COMMAND = "agy-quota-summary";
|
|
15586
|
+
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.
|
|
15587
|
+
|
|
15588
|
+
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
15589
|
+
Do not call other tools.
|
|
15590
|
+
`;
|
|
15562
15591
|
function createAgyQuotaSummaryTool({
|
|
15563
15592
|
client,
|
|
15564
15593
|
getAuthResolver,
|
|
@@ -16147,7 +16176,7 @@ var models_default = {
|
|
|
16147
16176
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16148
16177
|
quotaInfo: {
|
|
16149
16178
|
remainingFraction: 1,
|
|
16150
|
-
resetTime: "2026-09-
|
|
16179
|
+
resetTime: "2026-09-24T13:14:02Z"
|
|
16151
16180
|
},
|
|
16152
16181
|
recommended: true,
|
|
16153
16182
|
supportedMimeTypes: {
|
|
@@ -16186,7 +16215,7 @@ var models_default = {
|
|
|
16186
16215
|
modelProvider: "MODEL_PROVIDER_ANTHROPIC",
|
|
16187
16216
|
quotaInfo: {
|
|
16188
16217
|
remainingFraction: 1,
|
|
16189
|
-
resetTime: "2026-09-
|
|
16218
|
+
resetTime: "2026-09-24T13:14:02Z"
|
|
16190
16219
|
},
|
|
16191
16220
|
recommended: true,
|
|
16192
16221
|
supportedMimeTypes: {
|
|
@@ -16222,8 +16251,8 @@ var models_default = {
|
|
|
16222
16251
|
},
|
|
16223
16252
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16224
16253
|
quotaInfo: {
|
|
16225
|
-
remainingFraction: 0.
|
|
16226
|
-
resetTime: "2026-09-
|
|
16254
|
+
remainingFraction: 0.9556033,
|
|
16255
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16227
16256
|
},
|
|
16228
16257
|
recommended: true,
|
|
16229
16258
|
supportedMimeTypes: {
|
|
@@ -16305,8 +16334,8 @@ var models_default = {
|
|
|
16305
16334
|
},
|
|
16306
16335
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16307
16336
|
quotaInfo: {
|
|
16308
|
-
remainingFraction: 0.
|
|
16309
|
-
resetTime: "2026-09-
|
|
16337
|
+
remainingFraction: 0.9556033,
|
|
16338
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16310
16339
|
},
|
|
16311
16340
|
recommended: true,
|
|
16312
16341
|
supportedMimeTypes: {
|
|
@@ -16388,8 +16417,8 @@ var models_default = {
|
|
|
16388
16417
|
},
|
|
16389
16418
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16390
16419
|
quotaInfo: {
|
|
16391
|
-
remainingFraction: 0.
|
|
16392
|
-
resetTime: "2026-09-
|
|
16420
|
+
remainingFraction: 0.9556033,
|
|
16421
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16393
16422
|
},
|
|
16394
16423
|
recommended: true,
|
|
16395
16424
|
supportedMimeTypes: {
|
|
@@ -16468,8 +16497,8 @@ var models_default = {
|
|
|
16468
16497
|
},
|
|
16469
16498
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16470
16499
|
quotaInfo: {
|
|
16471
|
-
remainingFraction: 0.
|
|
16472
|
-
resetTime: "2026-09-
|
|
16500
|
+
remainingFraction: 0.9556033,
|
|
16501
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16473
16502
|
},
|
|
16474
16503
|
recommended: true,
|
|
16475
16504
|
requiresImageOutputOutsideFunctionResponses: true,
|
|
@@ -16549,8 +16578,8 @@ var models_default = {
|
|
|
16549
16578
|
},
|
|
16550
16579
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16551
16580
|
quotaInfo: {
|
|
16552
|
-
remainingFraction: 0.
|
|
16553
|
-
resetTime: "2026-09-
|
|
16581
|
+
remainingFraction: 0.9556033,
|
|
16582
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16554
16583
|
},
|
|
16555
16584
|
recommended: true,
|
|
16556
16585
|
supportedMimeTypes: {
|
|
@@ -16639,7 +16668,7 @@ var models_default = {
|
|
|
16639
16668
|
"include_subagent_snapshots": true,
|
|
16640
16669
|
"include_artifact_snapshots": true,
|
|
16641
16670
|
"retry_config": {
|
|
16642
|
-
"max_retries":
|
|
16671
|
+
"max_retries": 4,
|
|
16643
16672
|
"initial_sleep_duration_ms": 1000,
|
|
16644
16673
|
"exponential_multiplier": 2,
|
|
16645
16674
|
"include_error_feedback": false
|
|
@@ -16654,8 +16683,8 @@ var models_default = {
|
|
|
16654
16683
|
},
|
|
16655
16684
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16656
16685
|
quotaInfo: {
|
|
16657
|
-
remainingFraction: 0.
|
|
16658
|
-
resetTime: "2026-09-
|
|
16686
|
+
remainingFraction: 0.9556033,
|
|
16687
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16659
16688
|
},
|
|
16660
16689
|
recommended: true,
|
|
16661
16690
|
supportedMimeTypes: {
|
|
@@ -16724,8 +16753,8 @@ var models_default = {
|
|
|
16724
16753
|
model: "MODEL_PLACEHOLDER_M21",
|
|
16725
16754
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16726
16755
|
quotaInfo: {
|
|
16727
|
-
remainingFraction: 0.
|
|
16728
|
-
resetTime: "2026-09-
|
|
16756
|
+
remainingFraction: 0.9556033,
|
|
16757
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16729
16758
|
}
|
|
16730
16759
|
},
|
|
16731
16760
|
"gemini-3.1-flash-lite": {
|
|
@@ -16743,8 +16772,8 @@ var models_default = {
|
|
|
16743
16772
|
},
|
|
16744
16773
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16745
16774
|
quotaInfo: {
|
|
16746
|
-
remainingFraction: 0.
|
|
16747
|
-
resetTime: "2026-09-
|
|
16775
|
+
remainingFraction: 0.9556033,
|
|
16776
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16748
16777
|
}
|
|
16749
16778
|
},
|
|
16750
16779
|
"gemini-3.1-pro-high": {
|
|
@@ -16775,8 +16804,8 @@ var models_default = {
|
|
|
16775
16804
|
},
|
|
16776
16805
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16777
16806
|
quotaInfo: {
|
|
16778
|
-
remainingFraction: 0.
|
|
16779
|
-
resetTime: "2026-09-
|
|
16807
|
+
remainingFraction: 0.9556033,
|
|
16808
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16780
16809
|
},
|
|
16781
16810
|
recommended: true,
|
|
16782
16811
|
supportedMimeTypes: {
|
|
@@ -16866,8 +16895,8 @@ var models_default = {
|
|
|
16866
16895
|
},
|
|
16867
16896
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16868
16897
|
quotaInfo: {
|
|
16869
|
-
remainingFraction: 0.
|
|
16870
|
-
resetTime: "2026-09-
|
|
16898
|
+
remainingFraction: 0.9556033,
|
|
16899
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16871
16900
|
},
|
|
16872
16901
|
recommended: true,
|
|
16873
16902
|
supportedMimeTypes: {
|
|
@@ -16956,7 +16985,7 @@ var models_default = {
|
|
|
16956
16985
|
"include_subagent_snapshots": true,
|
|
16957
16986
|
"include_artifact_snapshots": true,
|
|
16958
16987
|
"retry_config": {
|
|
16959
|
-
"max_retries":
|
|
16988
|
+
"max_retries": 4,
|
|
16960
16989
|
"initial_sleep_duration_ms": 1000,
|
|
16961
16990
|
"exponential_multiplier": 2,
|
|
16962
16991
|
"include_error_feedback": false
|
|
@@ -16971,8 +17000,8 @@ var models_default = {
|
|
|
16971
17000
|
},
|
|
16972
17001
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
16973
17002
|
quotaInfo: {
|
|
16974
|
-
remainingFraction: 0.
|
|
16975
|
-
resetTime: "2026-09-
|
|
17003
|
+
remainingFraction: 0.9556033,
|
|
17004
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
16976
17005
|
},
|
|
16977
17006
|
recommended: true,
|
|
16978
17007
|
supportedMimeTypes: {
|
|
@@ -17054,8 +17083,8 @@ var models_default = {
|
|
|
17054
17083
|
},
|
|
17055
17084
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17056
17085
|
quotaInfo: {
|
|
17057
|
-
remainingFraction: 0.
|
|
17058
|
-
resetTime: "2026-09-
|
|
17086
|
+
remainingFraction: 0.9556033,
|
|
17087
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17059
17088
|
},
|
|
17060
17089
|
recommended: true,
|
|
17061
17090
|
supportedMimeTypes: {
|
|
@@ -17146,7 +17175,7 @@ var models_default = {
|
|
|
17146
17175
|
"include_subagent_snapshots": true,
|
|
17147
17176
|
"include_artifact_snapshots": true,
|
|
17148
17177
|
"retry_config": {
|
|
17149
|
-
"max_retries":
|
|
17178
|
+
"max_retries": 4,
|
|
17150
17179
|
"initial_sleep_duration_ms": 1000,
|
|
17151
17180
|
"exponential_multiplier": 2,
|
|
17152
17181
|
"include_error_feedback": false
|
|
@@ -17161,8 +17190,8 @@ var models_default = {
|
|
|
17161
17190
|
},
|
|
17162
17191
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17163
17192
|
quotaInfo: {
|
|
17164
|
-
remainingFraction: 0.
|
|
17165
|
-
resetTime: "2026-09-
|
|
17193
|
+
remainingFraction: 0.9556033,
|
|
17194
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17166
17195
|
},
|
|
17167
17196
|
recommended: true,
|
|
17168
17197
|
supportedMimeTypes: {
|
|
@@ -17253,7 +17282,7 @@ var models_default = {
|
|
|
17253
17282
|
"include_subagent_snapshots": true,
|
|
17254
17283
|
"include_artifact_snapshots": true,
|
|
17255
17284
|
"retry_config": {
|
|
17256
|
-
"max_retries":
|
|
17285
|
+
"max_retries": 4,
|
|
17257
17286
|
"initial_sleep_duration_ms": 1000,
|
|
17258
17287
|
"exponential_multiplier": 2,
|
|
17259
17288
|
"include_error_feedback": false
|
|
@@ -17280,8 +17309,8 @@ var models_default = {
|
|
|
17280
17309
|
},
|
|
17281
17310
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17282
17311
|
quotaInfo: {
|
|
17283
|
-
remainingFraction: 0.
|
|
17284
|
-
resetTime: "2026-09-
|
|
17312
|
+
remainingFraction: 0.9556033,
|
|
17313
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17285
17314
|
},
|
|
17286
17315
|
recommended: true,
|
|
17287
17316
|
supportedMimeTypes: {
|
|
@@ -17372,7 +17401,7 @@ var models_default = {
|
|
|
17372
17401
|
"include_subagent_snapshots": true,
|
|
17373
17402
|
"include_artifact_snapshots": true,
|
|
17374
17403
|
"retry_config": {
|
|
17375
|
-
"max_retries":
|
|
17404
|
+
"max_retries": 4,
|
|
17376
17405
|
"initial_sleep_duration_ms": 1000,
|
|
17377
17406
|
"exponential_multiplier": 2,
|
|
17378
17407
|
"include_error_feedback": false
|
|
@@ -17399,8 +17428,8 @@ var models_default = {
|
|
|
17399
17428
|
},
|
|
17400
17429
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17401
17430
|
quotaInfo: {
|
|
17402
|
-
remainingFraction: 0.
|
|
17403
|
-
resetTime: "2026-09-
|
|
17431
|
+
remainingFraction: 0.9556033,
|
|
17432
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17404
17433
|
},
|
|
17405
17434
|
recommended: true,
|
|
17406
17435
|
supportedMimeTypes: {
|
|
@@ -17491,7 +17520,7 @@ var models_default = {
|
|
|
17491
17520
|
"include_subagent_snapshots": true,
|
|
17492
17521
|
"include_artifact_snapshots": true,
|
|
17493
17522
|
"retry_config": {
|
|
17494
|
-
"max_retries":
|
|
17523
|
+
"max_retries": 4,
|
|
17495
17524
|
"initial_sleep_duration_ms": 1000,
|
|
17496
17525
|
"exponential_multiplier": 2,
|
|
17497
17526
|
"include_error_feedback": false
|
|
@@ -17518,8 +17547,8 @@ var models_default = {
|
|
|
17518
17547
|
},
|
|
17519
17548
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17520
17549
|
quotaInfo: {
|
|
17521
|
-
remainingFraction: 0.
|
|
17522
|
-
resetTime: "2026-09-
|
|
17550
|
+
remainingFraction: 0.9556033,
|
|
17551
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17523
17552
|
},
|
|
17524
17553
|
recommended: true,
|
|
17525
17554
|
supportedMimeTypes: {
|
|
@@ -17609,7 +17638,7 @@ var models_default = {
|
|
|
17609
17638
|
"include_subagent_snapshots": true,
|
|
17610
17639
|
"include_artifact_snapshots": true,
|
|
17611
17640
|
"retry_config": {
|
|
17612
|
-
"max_retries":
|
|
17641
|
+
"max_retries": 4,
|
|
17613
17642
|
"initial_sleep_duration_ms": 1000,
|
|
17614
17643
|
"exponential_multiplier": 2,
|
|
17615
17644
|
"include_error_feedback": false
|
|
@@ -17636,8 +17665,8 @@ var models_default = {
|
|
|
17636
17665
|
},
|
|
17637
17666
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17638
17667
|
quotaInfo: {
|
|
17639
|
-
remainingFraction: 0.
|
|
17640
|
-
resetTime: "2026-09-
|
|
17668
|
+
remainingFraction: 0.9556033,
|
|
17669
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17641
17670
|
},
|
|
17642
17671
|
recommended: true,
|
|
17643
17672
|
supportedMimeTypes: {
|
|
@@ -17726,7 +17755,7 @@ var models_default = {
|
|
|
17726
17755
|
"include_subagent_snapshots": true,
|
|
17727
17756
|
"include_artifact_snapshots": true,
|
|
17728
17757
|
"retry_config": {
|
|
17729
|
-
"max_retries":
|
|
17758
|
+
"max_retries": 4,
|
|
17730
17759
|
"initial_sleep_duration_ms": 1000,
|
|
17731
17760
|
"exponential_multiplier": 2,
|
|
17732
17761
|
"include_error_feedback": false
|
|
@@ -17747,8 +17776,8 @@ var models_default = {
|
|
|
17747
17776
|
},
|
|
17748
17777
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17749
17778
|
quotaInfo: {
|
|
17750
|
-
remainingFraction: 0.
|
|
17751
|
-
resetTime: "2026-09-
|
|
17779
|
+
remainingFraction: 0.9556033,
|
|
17780
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17752
17781
|
},
|
|
17753
17782
|
recommended: true,
|
|
17754
17783
|
supportedMimeTypes: {
|
|
@@ -17839,7 +17868,7 @@ var models_default = {
|
|
|
17839
17868
|
"include_subagent_snapshots": true,
|
|
17840
17869
|
"include_artifact_snapshots": true,
|
|
17841
17870
|
"retry_config": {
|
|
17842
|
-
"max_retries":
|
|
17871
|
+
"max_retries": 4,
|
|
17843
17872
|
"initial_sleep_duration_ms": 1000,
|
|
17844
17873
|
"exponential_multiplier": 2,
|
|
17845
17874
|
"include_error_feedback": false
|
|
@@ -17860,8 +17889,8 @@ var models_default = {
|
|
|
17860
17889
|
},
|
|
17861
17890
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17862
17891
|
quotaInfo: {
|
|
17863
|
-
remainingFraction: 0.
|
|
17864
|
-
resetTime: "2026-09-
|
|
17892
|
+
remainingFraction: 0.9556033,
|
|
17893
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17865
17894
|
},
|
|
17866
17895
|
recommended: true,
|
|
17867
17896
|
supportedMimeTypes: {
|
|
@@ -17952,7 +17981,7 @@ var models_default = {
|
|
|
17952
17981
|
"include_subagent_snapshots": true,
|
|
17953
17982
|
"include_artifact_snapshots": true,
|
|
17954
17983
|
"retry_config": {
|
|
17955
|
-
"max_retries":
|
|
17984
|
+
"max_retries": 4,
|
|
17956
17985
|
"initial_sleep_duration_ms": 1000,
|
|
17957
17986
|
"exponential_multiplier": 2,
|
|
17958
17987
|
"include_error_feedback": false
|
|
@@ -17973,8 +18002,8 @@ var models_default = {
|
|
|
17973
18002
|
},
|
|
17974
18003
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
17975
18004
|
quotaInfo: {
|
|
17976
|
-
remainingFraction: 0.
|
|
17977
|
-
resetTime: "2026-09-
|
|
18005
|
+
remainingFraction: 0.9556033,
|
|
18006
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
17978
18007
|
},
|
|
17979
18008
|
recommended: true,
|
|
17980
18009
|
supportedMimeTypes: {
|
|
@@ -18064,7 +18093,7 @@ var models_default = {
|
|
|
18064
18093
|
"include_subagent_snapshots": true,
|
|
18065
18094
|
"include_artifact_snapshots": true,
|
|
18066
18095
|
"retry_config": {
|
|
18067
|
-
"max_retries":
|
|
18096
|
+
"max_retries": 4,
|
|
18068
18097
|
"initial_sleep_duration_ms": 1000,
|
|
18069
18098
|
"exponential_multiplier": 2,
|
|
18070
18099
|
"include_error_feedback": false
|
|
@@ -18085,8 +18114,8 @@ var models_default = {
|
|
|
18085
18114
|
},
|
|
18086
18115
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18087
18116
|
quotaInfo: {
|
|
18088
|
-
remainingFraction: 0.
|
|
18089
|
-
resetTime: "2026-09-
|
|
18117
|
+
remainingFraction: 0.9556033,
|
|
18118
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
18090
18119
|
},
|
|
18091
18120
|
recommended: true,
|
|
18092
18121
|
supportedMimeTypes: {
|
|
@@ -18175,7 +18204,7 @@ var models_default = {
|
|
|
18175
18204
|
"include_subagent_snapshots": true,
|
|
18176
18205
|
"include_artifact_snapshots": true,
|
|
18177
18206
|
"retry_config": {
|
|
18178
|
-
"max_retries":
|
|
18207
|
+
"max_retries": 4,
|
|
18179
18208
|
"initial_sleep_duration_ms": 1000,
|
|
18180
18209
|
"exponential_multiplier": 2,
|
|
18181
18210
|
"include_error_feedback": false
|
|
@@ -18196,8 +18225,8 @@ var models_default = {
|
|
|
18196
18225
|
},
|
|
18197
18226
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18198
18227
|
quotaInfo: {
|
|
18199
|
-
remainingFraction: 0.
|
|
18200
|
-
resetTime: "2026-09-
|
|
18228
|
+
remainingFraction: 0.9556033,
|
|
18229
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
18201
18230
|
},
|
|
18202
18231
|
recommended: true,
|
|
18203
18232
|
supportedMimeTypes: {
|
|
@@ -18288,7 +18317,7 @@ var models_default = {
|
|
|
18288
18317
|
"include_subagent_snapshots": true,
|
|
18289
18318
|
"include_artifact_snapshots": true,
|
|
18290
18319
|
"retry_config": {
|
|
18291
|
-
"max_retries":
|
|
18320
|
+
"max_retries": 4,
|
|
18292
18321
|
"initial_sleep_duration_ms": 1000,
|
|
18293
18322
|
"exponential_multiplier": 2,
|
|
18294
18323
|
"include_error_feedback": false
|
|
@@ -18309,8 +18338,8 @@ var models_default = {
|
|
|
18309
18338
|
},
|
|
18310
18339
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18311
18340
|
quotaInfo: {
|
|
18312
|
-
remainingFraction: 0.
|
|
18313
|
-
resetTime: "2026-09-
|
|
18341
|
+
remainingFraction: 0.9556033,
|
|
18342
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
18314
18343
|
},
|
|
18315
18344
|
recommended: true,
|
|
18316
18345
|
supportedMimeTypes: {
|
|
@@ -18401,7 +18430,7 @@ var models_default = {
|
|
|
18401
18430
|
"include_subagent_snapshots": true,
|
|
18402
18431
|
"include_artifact_snapshots": true,
|
|
18403
18432
|
"retry_config": {
|
|
18404
|
-
"max_retries":
|
|
18433
|
+
"max_retries": 4,
|
|
18405
18434
|
"initial_sleep_duration_ms": 1000,
|
|
18406
18435
|
"exponential_multiplier": 2,
|
|
18407
18436
|
"include_error_feedback": false
|
|
@@ -18422,8 +18451,8 @@ var models_default = {
|
|
|
18422
18451
|
},
|
|
18423
18452
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18424
18453
|
quotaInfo: {
|
|
18425
|
-
remainingFraction: 0.
|
|
18426
|
-
resetTime: "2026-09-
|
|
18454
|
+
remainingFraction: 0.9556033,
|
|
18455
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
18427
18456
|
},
|
|
18428
18457
|
recommended: true,
|
|
18429
18458
|
supportedMimeTypes: {
|
|
@@ -18513,7 +18542,7 @@ var models_default = {
|
|
|
18513
18542
|
"include_subagent_snapshots": true,
|
|
18514
18543
|
"include_artifact_snapshots": true,
|
|
18515
18544
|
"retry_config": {
|
|
18516
|
-
"max_retries":
|
|
18545
|
+
"max_retries": 4,
|
|
18517
18546
|
"initial_sleep_duration_ms": 1000,
|
|
18518
18547
|
"exponential_multiplier": 2,
|
|
18519
18548
|
"include_error_feedback": false
|
|
@@ -18534,8 +18563,8 @@ var models_default = {
|
|
|
18534
18563
|
},
|
|
18535
18564
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18536
18565
|
quotaInfo: {
|
|
18537
|
-
remainingFraction: 0.
|
|
18538
|
-
resetTime: "2026-09-
|
|
18566
|
+
remainingFraction: 0.9556033,
|
|
18567
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
18539
18568
|
},
|
|
18540
18569
|
recommended: true,
|
|
18541
18570
|
supportedMimeTypes: {
|
|
@@ -18624,8 +18653,8 @@ var models_default = {
|
|
|
18624
18653
|
},
|
|
18625
18654
|
modelProvider: "MODEL_PROVIDER_GOOGLE",
|
|
18626
18655
|
quotaInfo: {
|
|
18627
|
-
remainingFraction: 0.
|
|
18628
|
-
resetTime: "2026-09-
|
|
18656
|
+
remainingFraction: 0.9556033,
|
|
18657
|
+
resetTime: "2026-09-24T13:08:46Z"
|
|
18629
18658
|
},
|
|
18630
18659
|
recommended: true,
|
|
18631
18660
|
supportedMimeTypes: {
|
|
@@ -18702,7 +18731,7 @@ var models_default = {
|
|
|
18702
18731
|
modelProvider: "MODEL_PROVIDER_OPENAI",
|
|
18703
18732
|
quotaInfo: {
|
|
18704
18733
|
remainingFraction: 1,
|
|
18705
|
-
resetTime: "2026-09-
|
|
18734
|
+
resetTime: "2026-09-24T13:14:02Z"
|
|
18706
18735
|
},
|
|
18707
18736
|
recommended: true,
|
|
18708
18737
|
supportsThinking: true,
|
|
@@ -20201,22 +20230,81 @@ var ChatLoggerImpl = class {
|
|
|
20201
20230
|
}
|
|
20202
20231
|
};
|
|
20203
20232
|
|
|
20204
|
-
// src/plugin.ts
|
|
20205
|
-
|
|
20206
|
-
|
|
20207
|
-
|
|
20208
|
-
|
|
20209
|
-
|
|
20210
|
-
|
|
20211
|
-
|
|
20212
|
-
|
|
20233
|
+
// src/plugin/headers.ts
|
|
20234
|
+
function getSafeHeader(headers, key) {
|
|
20235
|
+
if (!headers) {
|
|
20236
|
+
return void 0;
|
|
20237
|
+
}
|
|
20238
|
+
const targetKey = key.toLowerCase();
|
|
20239
|
+
if (typeof headers.get === "function") {
|
|
20240
|
+
try {
|
|
20241
|
+
return headers.get(targetKey) || void 0;
|
|
20242
|
+
} catch {
|
|
20243
|
+
}
|
|
20244
|
+
}
|
|
20245
|
+
if (Array.isArray(headers)) {
|
|
20246
|
+
const found = headers.find((item) => {
|
|
20247
|
+
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20248
|
+
return item[0].toLowerCase() === targetKey;
|
|
20249
|
+
}
|
|
20250
|
+
return false;
|
|
20251
|
+
});
|
|
20252
|
+
return found ? String(found[1]) : void 0;
|
|
20253
|
+
}
|
|
20254
|
+
if (typeof headers === "object") {
|
|
20255
|
+
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20256
|
+
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20257
|
+
}
|
|
20258
|
+
return void 0;
|
|
20259
|
+
}
|
|
20260
|
+
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20261
|
+
if (typeof globalThis.Headers !== "undefined") {
|
|
20262
|
+
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20263
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20264
|
+
headers.set(k, v);
|
|
20265
|
+
}
|
|
20266
|
+
return headers;
|
|
20267
|
+
}
|
|
20268
|
+
if (Array.isArray(initHeaders)) {
|
|
20269
|
+
const nextHeaders2 = [...initHeaders];
|
|
20270
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20271
|
+
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20272
|
+
if (idx !== -1) {
|
|
20273
|
+
nextHeaders2[idx] = [k, v];
|
|
20274
|
+
} else {
|
|
20275
|
+
nextHeaders2.push([k, v]);
|
|
20276
|
+
}
|
|
20277
|
+
}
|
|
20278
|
+
return nextHeaders2;
|
|
20279
|
+
}
|
|
20280
|
+
const nextHeaders = {};
|
|
20281
|
+
if (initHeaders && typeof initHeaders === "object") {
|
|
20282
|
+
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20283
|
+
nextHeaders[k] = String(v);
|
|
20284
|
+
}
|
|
20285
|
+
}
|
|
20286
|
+
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20287
|
+
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20288
|
+
if (existingKey) {
|
|
20289
|
+
nextHeaders[existingKey] = v;
|
|
20290
|
+
} else {
|
|
20291
|
+
nextHeaders[k] = v;
|
|
20292
|
+
}
|
|
20293
|
+
}
|
|
20294
|
+
return nextHeaders;
|
|
20295
|
+
}
|
|
20296
|
+
function toUrlString(value) {
|
|
20297
|
+
if (typeof value === "string") {
|
|
20298
|
+
return value;
|
|
20299
|
+
}
|
|
20300
|
+
const candidate = value.url;
|
|
20301
|
+
if (candidate) {
|
|
20302
|
+
return candidate;
|
|
20303
|
+
}
|
|
20304
|
+
return value.toString();
|
|
20305
|
+
}
|
|
20213
20306
|
|
|
20214
|
-
|
|
20215
|
-
Do not call other tools.
|
|
20216
|
-
`;
|
|
20217
|
-
var latestAgyAuthResolver;
|
|
20218
|
-
var latestAgyConfiguredProjectId;
|
|
20219
|
-
var latestAgyUserAgentModel;
|
|
20307
|
+
// src/plugin/tier.ts
|
|
20220
20308
|
var STATIC_MODELS_SIMPLE = {
|
|
20221
20309
|
"gemini-3.8-flash": {
|
|
20222
20310
|
name: "Gemini 3.8 Flash",
|
|
@@ -20304,6 +20392,39 @@ var TIER_MAPPING = {
|
|
|
20304
20392
|
high: "gemini-3.1-pro-high"
|
|
20305
20393
|
}
|
|
20306
20394
|
};
|
|
20395
|
+
function resolveModelTier(baseModelId, headersOrInit) {
|
|
20396
|
+
const parts = baseModelId.split("@");
|
|
20397
|
+
const base = parts[0] || "";
|
|
20398
|
+
const suffixTier = parts[1]?.toLowerCase();
|
|
20399
|
+
const mapping = TIER_MAPPING[base];
|
|
20400
|
+
if (!mapping) {
|
|
20401
|
+
return baseModelId;
|
|
20402
|
+
}
|
|
20403
|
+
const rawHeaders = headersOrInit && typeof headersOrInit === "object" && "headers" in headersOrInit ? headersOrInit.headers : headersOrInit;
|
|
20404
|
+
const headerTier = getSafeHeader(rawHeaders, "x-agy-tier")?.toLowerCase() || null;
|
|
20405
|
+
const requestedTier = headerTier || suffixTier;
|
|
20406
|
+
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20407
|
+
return mapping[requestedTier] || baseModelId;
|
|
20408
|
+
}
|
|
20409
|
+
return mapping["medium"] ?? mapping["high"] ?? baseModelId;
|
|
20410
|
+
}
|
|
20411
|
+
|
|
20412
|
+
// src/plugin.ts
|
|
20413
|
+
var AGY_QUOTA_COMMAND = "agyquota";
|
|
20414
|
+
var AGY_QUOTA_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota usage for the current authenticated account.
|
|
20415
|
+
|
|
20416
|
+
Immediately call \`${AGY_QUOTA_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20417
|
+
Do not call other tools.
|
|
20418
|
+
`;
|
|
20419
|
+
var AGY_QUOTA_SUMMARY_COMMAND = "agyquotasummary";
|
|
20420
|
+
var AGY_QUOTA_SUMMARY_COMMAND_TEMPLATE = `Retrieve Agy Code Assist quota summary (weekly and 5-hour limits by model group) for the current authenticated account.
|
|
20421
|
+
|
|
20422
|
+
Immediately call \`${AGY_QUOTA_SUMMARY_TOOL_NAME}\` with no arguments and return its output verbatim.
|
|
20423
|
+
Do not call other tools.
|
|
20424
|
+
`;
|
|
20425
|
+
var latestAgyAuthResolver;
|
|
20426
|
+
var latestAgyConfiguredProjectId;
|
|
20427
|
+
var latestAgyUserAgentModel;
|
|
20307
20428
|
var buildModelFromSimple = (modelId, simple) => {
|
|
20308
20429
|
const isClaude = modelId.startsWith("claude-");
|
|
20309
20430
|
const isGpt = modelId.startsWith("gpt-");
|
|
@@ -20397,83 +20518,6 @@ var STATIC_MODELS = {};
|
|
|
20397
20518
|
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
20398
20519
|
STATIC_MODELS[modelId] = buildModelFromSimple(modelId, simple);
|
|
20399
20520
|
}
|
|
20400
|
-
function getSafeHeader(headers, key) {
|
|
20401
|
-
if (!headers) {
|
|
20402
|
-
return void 0;
|
|
20403
|
-
}
|
|
20404
|
-
const targetKey = key.toLowerCase();
|
|
20405
|
-
if (typeof headers.get === "function") {
|
|
20406
|
-
try {
|
|
20407
|
-
return headers.get(targetKey) || void 0;
|
|
20408
|
-
} catch {
|
|
20409
|
-
}
|
|
20410
|
-
}
|
|
20411
|
-
if (Array.isArray(headers)) {
|
|
20412
|
-
const found = headers.find((item) => {
|
|
20413
|
-
if (Array.isArray(item) && typeof item[0] === "string") {
|
|
20414
|
-
return item[0].toLowerCase() === targetKey;
|
|
20415
|
-
}
|
|
20416
|
-
return false;
|
|
20417
|
-
});
|
|
20418
|
-
return found ? String(found[1]) : void 0;
|
|
20419
|
-
}
|
|
20420
|
-
if (typeof headers === "object") {
|
|
20421
|
-
const foundKey = Object.keys(headers).find((k) => k.toLowerCase() === targetKey);
|
|
20422
|
-
return foundKey ? headers[foundKey] !== void 0 ? String(headers[foundKey]) : void 0 : void 0;
|
|
20423
|
-
}
|
|
20424
|
-
return void 0;
|
|
20425
|
-
}
|
|
20426
|
-
function setSafeHeaders(initHeaders, newHeaders) {
|
|
20427
|
-
if (typeof globalThis.Headers !== "undefined") {
|
|
20428
|
-
const headers = new globalThis.Headers(initHeaders ?? {});
|
|
20429
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20430
|
-
headers.set(k, v);
|
|
20431
|
-
}
|
|
20432
|
-
return headers;
|
|
20433
|
-
}
|
|
20434
|
-
if (Array.isArray(initHeaders)) {
|
|
20435
|
-
const nextHeaders2 = [...initHeaders];
|
|
20436
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20437
|
-
const idx = nextHeaders2.findIndex((item) => Array.isArray(item) && typeof item[0] === "string" && item[0].toLowerCase() === k.toLowerCase());
|
|
20438
|
-
if (idx !== -1) {
|
|
20439
|
-
nextHeaders2[idx] = [k, v];
|
|
20440
|
-
} else {
|
|
20441
|
-
nextHeaders2.push([k, v]);
|
|
20442
|
-
}
|
|
20443
|
-
}
|
|
20444
|
-
return nextHeaders2;
|
|
20445
|
-
}
|
|
20446
|
-
const nextHeaders = {};
|
|
20447
|
-
if (initHeaders && typeof initHeaders === "object") {
|
|
20448
|
-
for (const [k, v] of Object.entries(initHeaders)) {
|
|
20449
|
-
nextHeaders[k] = String(v);
|
|
20450
|
-
}
|
|
20451
|
-
}
|
|
20452
|
-
for (const [k, v] of Object.entries(newHeaders)) {
|
|
20453
|
-
const existingKey = Object.keys(nextHeaders).find((key) => key.toLowerCase() === k.toLowerCase());
|
|
20454
|
-
if (existingKey) {
|
|
20455
|
-
nextHeaders[existingKey] = v;
|
|
20456
|
-
} else {
|
|
20457
|
-
nextHeaders[k] = v;
|
|
20458
|
-
}
|
|
20459
|
-
}
|
|
20460
|
-
return nextHeaders;
|
|
20461
|
-
}
|
|
20462
|
-
function resolveModelTier(baseModelId, init) {
|
|
20463
|
-
const parts = baseModelId.split("@");
|
|
20464
|
-
const base = parts[0] || "";
|
|
20465
|
-
const suffixTier = parts[1]?.toLowerCase();
|
|
20466
|
-
const mapping = TIER_MAPPING[base];
|
|
20467
|
-
if (!mapping) {
|
|
20468
|
-
return baseModelId;
|
|
20469
|
-
}
|
|
20470
|
-
const headerTier = getSafeHeader(init?.headers, "x-agy-tier")?.toLowerCase() || null;
|
|
20471
|
-
const requestedTier = headerTier || suffixTier;
|
|
20472
|
-
if (requestedTier && Object.prototype.hasOwnProperty.call(mapping, requestedTier)) {
|
|
20473
|
-
return mapping[requestedTier] || baseModelId;
|
|
20474
|
-
}
|
|
20475
|
-
return mapping["medium"] ?? mapping["high"];
|
|
20476
|
-
}
|
|
20477
20521
|
var AgyCLIOAuthPlugin = async ({ client }) => {
|
|
20478
20522
|
let latestConfig;
|
|
20479
20523
|
updateStaticModelsWithPricing(STATIC_MODELS);
|
|
@@ -20801,25 +20845,754 @@ async function ensureProjectContextOrThrow(authRecord, client, configuredProject
|
|
|
20801
20845
|
throw error45;
|
|
20802
20846
|
}
|
|
20803
20847
|
}
|
|
20804
|
-
|
|
20805
|
-
|
|
20806
|
-
|
|
20848
|
+
|
|
20849
|
+
// src/plugin/types.ts
|
|
20850
|
+
function defineOpenCodeV2Plugin(def) {
|
|
20851
|
+
return def;
|
|
20852
|
+
}
|
|
20853
|
+
|
|
20854
|
+
// src/plugin/v2-storage.ts
|
|
20855
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync5 } from "fs";
|
|
20856
|
+
import { homedir as homedir4 } from "os";
|
|
20857
|
+
import { join as join6 } from "path";
|
|
20858
|
+
var storedAuthOverrideForTesting = void 0;
|
|
20859
|
+
function loadStoredAuthFromJson() {
|
|
20860
|
+
if (storedAuthOverrideForTesting !== void 0) {
|
|
20861
|
+
return storedAuthOverrideForTesting;
|
|
20862
|
+
}
|
|
20863
|
+
const authPath = join6(homedir4(), ".local", "share", "opencode", "auth.json");
|
|
20864
|
+
try {
|
|
20865
|
+
if (existsSync6(authPath)) {
|
|
20866
|
+
const content = readFileSync5(authPath, "utf8");
|
|
20867
|
+
const data = JSON.parse(content);
|
|
20868
|
+
return data?.[AGY_PROVIDER_ID];
|
|
20869
|
+
}
|
|
20870
|
+
} catch {
|
|
20807
20871
|
}
|
|
20808
|
-
|
|
20809
|
-
|
|
20810
|
-
|
|
20872
|
+
return void 0;
|
|
20873
|
+
}
|
|
20874
|
+
function saveStoredAuthToJson(authRecord) {
|
|
20875
|
+
if (process.env.NODE_ENV === "test" || process.env.VITEST || storedAuthOverrideForTesting !== void 0) {
|
|
20876
|
+
return;
|
|
20811
20877
|
}
|
|
20812
|
-
|
|
20878
|
+
try {
|
|
20879
|
+
const dirPath = join6(homedir4(), ".local", "share", "opencode");
|
|
20880
|
+
if (!existsSync6(dirPath)) {
|
|
20881
|
+
mkdirSync5(dirPath, { recursive: true });
|
|
20882
|
+
}
|
|
20883
|
+
const authPath = join6(dirPath, "auth.json");
|
|
20884
|
+
let data = {};
|
|
20885
|
+
if (existsSync6(authPath)) {
|
|
20886
|
+
try {
|
|
20887
|
+
data = JSON.parse(readFileSync5(authPath, "utf8")) || {};
|
|
20888
|
+
} catch {
|
|
20889
|
+
data = {};
|
|
20890
|
+
}
|
|
20891
|
+
}
|
|
20892
|
+
data[AGY_PROVIDER_ID] = {
|
|
20893
|
+
type: "oauth",
|
|
20894
|
+
refresh: authRecord.refresh,
|
|
20895
|
+
access: authRecord.access,
|
|
20896
|
+
expires: authRecord.expires
|
|
20897
|
+
};
|
|
20898
|
+
writeFileSync5(authPath, JSON.stringify(data, null, 2), "utf8");
|
|
20899
|
+
} catch {
|
|
20900
|
+
}
|
|
20901
|
+
}
|
|
20902
|
+
|
|
20903
|
+
// src/plugin/v2-fetch.ts
|
|
20904
|
+
function createV2FetchInterceptor(getAuthSnapshot) {
|
|
20905
|
+
return async function agyV2Fetch(input, init) {
|
|
20906
|
+
const isGL = isGenerativeLanguageRequest(input);
|
|
20907
|
+
const isInternal = toUrlString(input).includes("cloudcode-pa.googleapis.com");
|
|
20908
|
+
if (!isGL && !isInternal) {
|
|
20909
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20910
|
+
}
|
|
20911
|
+
let rawAuth = getAuthSnapshot ? await getAuthSnapshot() : void 0;
|
|
20912
|
+
if (!rawAuth) {
|
|
20913
|
+
rawAuth = loadStoredAuthFromJson();
|
|
20914
|
+
}
|
|
20915
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
20916
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20917
|
+
}
|
|
20918
|
+
let authRecord = resolveCachedAuth(rawAuth);
|
|
20919
|
+
if (accessTokenExpired(authRecord)) {
|
|
20920
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
20921
|
+
} } });
|
|
20922
|
+
if (refreshed) {
|
|
20923
|
+
authRecord = refreshed;
|
|
20924
|
+
}
|
|
20925
|
+
}
|
|
20926
|
+
if (!authRecord.access) {
|
|
20927
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20928
|
+
}
|
|
20929
|
+
if (isInternal) {
|
|
20930
|
+
const hasAuth = getSafeHeader(init?.headers, "Authorization") !== void 0;
|
|
20931
|
+
if (hasAuth) {
|
|
20932
|
+
return (globalThis.fetch || fetch)(input, init);
|
|
20933
|
+
}
|
|
20934
|
+
const userAgent = buildAgyCliUserAgent();
|
|
20935
|
+
const headers = setSafeHeaders(init?.headers, {
|
|
20936
|
+
Authorization: `Bearer ${authRecord.access}`,
|
|
20937
|
+
"User-Agent": userAgent
|
|
20938
|
+
});
|
|
20939
|
+
return (globalThis.fetch || fetch)(input, {
|
|
20940
|
+
...init,
|
|
20941
|
+
headers
|
|
20942
|
+
});
|
|
20943
|
+
}
|
|
20944
|
+
const requestTarget = parseGenerativeLanguageRequest(input);
|
|
20945
|
+
const requestUserAgentModel = requestTarget?.effectiveModel;
|
|
20946
|
+
let projectContext;
|
|
20947
|
+
try {
|
|
20948
|
+
projectContext = await ensureProjectContext(
|
|
20949
|
+
authRecord,
|
|
20950
|
+
{ auth: { set: async () => {
|
|
20951
|
+
} } },
|
|
20952
|
+
void 0,
|
|
20953
|
+
requestUserAgentModel
|
|
20954
|
+
);
|
|
20955
|
+
} catch {
|
|
20956
|
+
projectContext = {
|
|
20957
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
20958
|
+
auth: authRecord
|
|
20959
|
+
};
|
|
20960
|
+
}
|
|
20961
|
+
const originalRequestedModel = parseGenerativeLanguageRequest(input)?.effectiveModel;
|
|
20962
|
+
let modifiedInput = input;
|
|
20963
|
+
if (isGL && originalRequestedModel) {
|
|
20964
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
20965
|
+
const resolvedBase = resolveModelTier(originalBase, init);
|
|
20966
|
+
if (originalBase !== resolvedBase) {
|
|
20967
|
+
if (typeof modifiedInput === "string") {
|
|
20968
|
+
modifiedInput = modifiedInput.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20969
|
+
} else if (typeof Request !== "undefined" && modifiedInput instanceof Request) {
|
|
20970
|
+
const newUrl = modifiedInput.url.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
20971
|
+
modifiedInput = new Request(newUrl, modifiedInput);
|
|
20972
|
+
}
|
|
20973
|
+
}
|
|
20974
|
+
}
|
|
20975
|
+
const transformed = prepareAgyRequest(
|
|
20976
|
+
modifiedInput,
|
|
20977
|
+
init,
|
|
20978
|
+
authRecord.access,
|
|
20979
|
+
projectContext.effectiveProjectId,
|
|
20980
|
+
void 0
|
|
20981
|
+
);
|
|
20982
|
+
const chatLogger = createChatLogger();
|
|
20983
|
+
if (chatLogger) {
|
|
20984
|
+
chatLogger.logRequest(
|
|
20985
|
+
toUrlString(transformed.request),
|
|
20986
|
+
transformed.init.method || "GET",
|
|
20987
|
+
transformed.init.headers,
|
|
20988
|
+
transformed.init.body
|
|
20989
|
+
);
|
|
20990
|
+
}
|
|
20991
|
+
const response = await fetchWithRetry(transformed.request, transformed.init);
|
|
20992
|
+
return transformAgyResponse(
|
|
20993
|
+
response,
|
|
20994
|
+
transformed.streaming,
|
|
20995
|
+
null,
|
|
20996
|
+
transformed.requestedModel,
|
|
20997
|
+
transformed.sessionId,
|
|
20998
|
+
chatLogger
|
|
20999
|
+
);
|
|
21000
|
+
};
|
|
21001
|
+
}
|
|
21002
|
+
|
|
21003
|
+
// src/plugin/v2-session.ts
|
|
21004
|
+
function createV2HttpRequestHook(state = {}) {
|
|
21005
|
+
return async (event) => {
|
|
21006
|
+
if (!event) return;
|
|
21007
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21008
|
+
const isGL = isGenerativeLanguageRequest(rawUrl);
|
|
21009
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21010
|
+
if (!isGL && !isInternal) {
|
|
21011
|
+
return;
|
|
21012
|
+
}
|
|
21013
|
+
event.headers = event.headers || {};
|
|
21014
|
+
let modelName;
|
|
21015
|
+
let rawAuth = event.auth;
|
|
21016
|
+
if (rawAuth && !rawAuth.type) {
|
|
21017
|
+
const tokenVal = rawAuth.access || rawAuth.token;
|
|
21018
|
+
if (tokenVal || rawAuth.refresh) {
|
|
21019
|
+
rawAuth = { type: "oauth", access: tokenVal, ...rawAuth };
|
|
21020
|
+
}
|
|
21021
|
+
}
|
|
21022
|
+
if (!rawAuth || !isOAuthAuth(rawAuth)) {
|
|
21023
|
+
rawAuth = loadStoredAuthFromJson();
|
|
21024
|
+
}
|
|
21025
|
+
let authRecord = rawAuth && isOAuthAuth(rawAuth) ? resolveCachedAuth(rawAuth) : void 0;
|
|
21026
|
+
if (authRecord && accessTokenExpired(authRecord)) {
|
|
21027
|
+
const refreshed = await refreshAccessToken(authRecord, { auth: { set: async () => {
|
|
21028
|
+
} } });
|
|
21029
|
+
if (refreshed) {
|
|
21030
|
+
authRecord = refreshed;
|
|
21031
|
+
saveStoredAuthToJson(refreshed);
|
|
21032
|
+
}
|
|
21033
|
+
}
|
|
21034
|
+
if (isGL) {
|
|
21035
|
+
const parsed = parseGenerativeLanguageRequest(rawUrl);
|
|
21036
|
+
modelName = parsed?.effectiveModel;
|
|
21037
|
+
if (modelName) {
|
|
21038
|
+
state.lastInterceptedModel = modelName;
|
|
21039
|
+
}
|
|
21040
|
+
if (typeof event.headers.delete === "function") {
|
|
21041
|
+
event.headers.delete("x-goog-api-key");
|
|
21042
|
+
event.headers.delete("api-key");
|
|
21043
|
+
} else {
|
|
21044
|
+
for (const key of Object.keys(event.headers)) {
|
|
21045
|
+
const lower = key.toLowerCase();
|
|
21046
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21047
|
+
delete event.headers[key];
|
|
21048
|
+
}
|
|
21049
|
+
}
|
|
21050
|
+
}
|
|
21051
|
+
if (event.request?.headers) {
|
|
21052
|
+
if (typeof event.request.headers.delete === "function") {
|
|
21053
|
+
event.request.headers.delete("x-goog-api-key");
|
|
21054
|
+
event.request.headers.delete("api-key");
|
|
21055
|
+
} else {
|
|
21056
|
+
for (const key of Object.keys(event.request.headers)) {
|
|
21057
|
+
const lower = key.toLowerCase();
|
|
21058
|
+
if (lower === "x-goog-api-key" || lower === "api-key") {
|
|
21059
|
+
delete event.request.headers[key];
|
|
21060
|
+
}
|
|
21061
|
+
}
|
|
21062
|
+
}
|
|
21063
|
+
}
|
|
21064
|
+
let cleanUrl = rawUrl;
|
|
21065
|
+
try {
|
|
21066
|
+
const parsedUrl = new URL(rawUrl);
|
|
21067
|
+
let urlChanged = false;
|
|
21068
|
+
for (const param of ["key", "x-goog-api-key", "api-key"]) {
|
|
21069
|
+
if (parsedUrl.searchParams.has(param)) {
|
|
21070
|
+
parsedUrl.searchParams.delete(param);
|
|
21071
|
+
urlChanged = true;
|
|
21072
|
+
}
|
|
21073
|
+
}
|
|
21074
|
+
if (urlChanged) {
|
|
21075
|
+
cleanUrl = parsedUrl.toString();
|
|
21076
|
+
}
|
|
21077
|
+
} catch {
|
|
21078
|
+
}
|
|
21079
|
+
if (authRecord && authRecord.access) {
|
|
21080
|
+
let projectContext;
|
|
21081
|
+
try {
|
|
21082
|
+
projectContext = await ensureProjectContext(
|
|
21083
|
+
authRecord,
|
|
21084
|
+
{ auth: { set: async () => {
|
|
21085
|
+
} } },
|
|
21086
|
+
void 0,
|
|
21087
|
+
modelName
|
|
21088
|
+
);
|
|
21089
|
+
} catch {
|
|
21090
|
+
projectContext = {
|
|
21091
|
+
effectiveProjectId: parseRefreshParts(authRecord.refresh).projectId || "antigravity",
|
|
21092
|
+
auth: authRecord
|
|
21093
|
+
};
|
|
21094
|
+
}
|
|
21095
|
+
const originalRequestedModel = modelName;
|
|
21096
|
+
let modifiedUrl = cleanUrl;
|
|
21097
|
+
if (originalRequestedModel) {
|
|
21098
|
+
const originalBase = originalRequestedModel.replace("google-agy/", "");
|
|
21099
|
+
const initHeaders = event.headers instanceof Headers ? event.headers : event.request?.headers;
|
|
21100
|
+
const resolvedBase = resolveModelTier(originalBase, { headers: initHeaders });
|
|
21101
|
+
if (originalBase !== resolvedBase) {
|
|
21102
|
+
modifiedUrl = modifiedUrl.replace(`models/${originalBase}`, `models/${resolvedBase}`);
|
|
21103
|
+
}
|
|
21104
|
+
}
|
|
21105
|
+
let bodyPayload = event.body;
|
|
21106
|
+
if (bodyPayload === void 0 && event.request) {
|
|
21107
|
+
if (typeof event.request.clone === "function") {
|
|
21108
|
+
try {
|
|
21109
|
+
bodyPayload = await event.request.clone().text();
|
|
21110
|
+
} catch {
|
|
21111
|
+
}
|
|
21112
|
+
} else if (event.request.body !== void 0) {
|
|
21113
|
+
bodyPayload = event.request.body;
|
|
21114
|
+
}
|
|
21115
|
+
}
|
|
21116
|
+
let preExistingUserAgent;
|
|
21117
|
+
if (typeof event.headers?.get === "function") {
|
|
21118
|
+
preExistingUserAgent = event.headers.get("user-agent") || event.headers.get("User-Agent") || void 0;
|
|
21119
|
+
} else if (event.headers && typeof event.headers === "object") {
|
|
21120
|
+
preExistingUserAgent = event.headers["user-agent"] || event.headers["User-Agent"] || void 0;
|
|
21121
|
+
}
|
|
21122
|
+
if (!preExistingUserAgent && typeof event.request?.headers?.get === "function") {
|
|
21123
|
+
preExistingUserAgent = event.request.headers.get("user-agent") || event.request.headers.get("User-Agent") || void 0;
|
|
21124
|
+
} else if (!preExistingUserAgent && event.request?.headers && typeof event.request.headers === "object") {
|
|
21125
|
+
preExistingUserAgent = event.request.headers["user-agent"] || event.request.headers["User-Agent"] || void 0;
|
|
21126
|
+
}
|
|
21127
|
+
const method = event.method || event.request?.method || "POST";
|
|
21128
|
+
const requestHeaders = event.headers || event.request?.headers;
|
|
21129
|
+
const transformed = prepareAgyRequest(
|
|
21130
|
+
modifiedUrl,
|
|
21131
|
+
{
|
|
21132
|
+
method,
|
|
21133
|
+
headers: requestHeaders,
|
|
21134
|
+
body: bodyPayload
|
|
21135
|
+
},
|
|
21136
|
+
authRecord.access,
|
|
21137
|
+
projectContext.effectiveProjectId
|
|
21138
|
+
);
|
|
21139
|
+
const targetUrl = toUrlString(transformed.request);
|
|
21140
|
+
if (typeof event.url === "string") {
|
|
21141
|
+
event.url = targetUrl;
|
|
21142
|
+
}
|
|
21143
|
+
if (event.request && typeof event.request === "object") {
|
|
21144
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21145
|
+
event.request = new Request(targetUrl, {
|
|
21146
|
+
method: transformed.init.method,
|
|
21147
|
+
headers: transformed.init.headers,
|
|
21148
|
+
body: transformed.init.body
|
|
21149
|
+
});
|
|
21150
|
+
} else if (typeof event.request.url === "string") {
|
|
21151
|
+
try {
|
|
21152
|
+
event.request.url = targetUrl;
|
|
21153
|
+
} catch {
|
|
21154
|
+
}
|
|
21155
|
+
}
|
|
21156
|
+
}
|
|
21157
|
+
const headerEntries = transformed.init.headers instanceof Headers ? Array.from(transformed.init.headers.entries()) : Object.entries(transformed.init.headers || {});
|
|
21158
|
+
for (const [k, v] of headerEntries) {
|
|
21159
|
+
const lowerK = k.toLowerCase();
|
|
21160
|
+
if (lowerK === "user-agent") {
|
|
21161
|
+
if (preExistingUserAgent) {
|
|
21162
|
+
continue;
|
|
21163
|
+
}
|
|
21164
|
+
if (typeof event.headers?.set === "function") {
|
|
21165
|
+
event.headers.set("User-Agent", v);
|
|
21166
|
+
} else if (event.headers) {
|
|
21167
|
+
event.headers["User-Agent"] = v;
|
|
21168
|
+
}
|
|
21169
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21170
|
+
event.request.headers.set("User-Agent", v);
|
|
21171
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21172
|
+
event.request.headers["User-Agent"] = v;
|
|
21173
|
+
}
|
|
21174
|
+
continue;
|
|
21175
|
+
}
|
|
21176
|
+
if (typeof event.headers?.set === "function") {
|
|
21177
|
+
event.headers.set(k, v);
|
|
21178
|
+
} else if (event.headers) {
|
|
21179
|
+
event.headers[k] = v;
|
|
21180
|
+
}
|
|
21181
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21182
|
+
event.request.headers.set(k, v);
|
|
21183
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21184
|
+
event.request.headers[k] = v;
|
|
21185
|
+
}
|
|
21186
|
+
}
|
|
21187
|
+
if (transformed.init.body !== void 0) {
|
|
21188
|
+
event.body = transformed.init.body;
|
|
21189
|
+
if (event.request && typeof event.request === "object" && !(event.request instanceof Request)) {
|
|
21190
|
+
event.request.body = transformed.init.body;
|
|
21191
|
+
}
|
|
21192
|
+
}
|
|
21193
|
+
} else {
|
|
21194
|
+
if (typeof event.url === "string") {
|
|
21195
|
+
event.url = cleanUrl;
|
|
21196
|
+
}
|
|
21197
|
+
if (event.request && typeof event.request === "object") {
|
|
21198
|
+
if (typeof Request !== "undefined" && event.request instanceof Request) {
|
|
21199
|
+
event.request = new Request(cleanUrl, event.request);
|
|
21200
|
+
} else if (typeof event.request.url === "string") {
|
|
21201
|
+
try {
|
|
21202
|
+
event.request.url = cleanUrl;
|
|
21203
|
+
} catch {
|
|
21204
|
+
}
|
|
21205
|
+
}
|
|
21206
|
+
}
|
|
21207
|
+
}
|
|
21208
|
+
}
|
|
21209
|
+
if (authRecord && authRecord.access) {
|
|
21210
|
+
if (typeof event.headers?.set === "function") {
|
|
21211
|
+
event.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21212
|
+
} else if (event.headers) {
|
|
21213
|
+
event.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21214
|
+
}
|
|
21215
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21216
|
+
event.request.headers.set("Authorization", `Bearer ${authRecord.access}`);
|
|
21217
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21218
|
+
event.request.headers["Authorization"] = `Bearer ${authRecord.access}`;
|
|
21219
|
+
}
|
|
21220
|
+
}
|
|
21221
|
+
const userAgent = buildAgyCliUserAgent(modelName);
|
|
21222
|
+
if (typeof event.headers?.set === "function") {
|
|
21223
|
+
if (!event.headers.get("User-Agent") && !event.headers.get("user-agent")) {
|
|
21224
|
+
event.headers.set("User-Agent", userAgent);
|
|
21225
|
+
}
|
|
21226
|
+
} else if (event.headers) {
|
|
21227
|
+
if (!event.headers["User-Agent"] && !event.headers["user-agent"]) {
|
|
21228
|
+
event.headers["User-Agent"] = userAgent;
|
|
21229
|
+
}
|
|
21230
|
+
}
|
|
21231
|
+
if (event.request?.headers && typeof event.request.headers.set === "function") {
|
|
21232
|
+
if (!event.request.headers.get("User-Agent") && !event.request.headers.get("user-agent")) {
|
|
21233
|
+
event.request.headers.set("User-Agent", userAgent);
|
|
21234
|
+
}
|
|
21235
|
+
} else if (event.request?.headers && typeof event.request.headers === "object") {
|
|
21236
|
+
if (!event.request.headers["User-Agent"] && !event.request.headers["user-agent"]) {
|
|
21237
|
+
event.request.headers["User-Agent"] = userAgent;
|
|
21238
|
+
}
|
|
21239
|
+
}
|
|
21240
|
+
};
|
|
21241
|
+
}
|
|
21242
|
+
function createV2HttpResponseHook(state = {}) {
|
|
21243
|
+
return async (event) => {
|
|
21244
|
+
if (!event || !event.response) return;
|
|
21245
|
+
const rawUrl = typeof event.url === "string" ? event.url : event.request?.url || "";
|
|
21246
|
+
const isInternal = rawUrl.includes("cloudcode-pa.googleapis.com");
|
|
21247
|
+
if (isInternal && event.response instanceof Response) {
|
|
21248
|
+
const isStreaming = rawUrl.includes(":streamGenerateCode") || event.response.headers.get("content-type")?.includes("text/event-stream");
|
|
21249
|
+
const parsedModel = parseGenerativeLanguageRequest(rawUrl)?.effectiveModel || state.lastInterceptedModel;
|
|
21250
|
+
const transformed = await transformAgyResponse(
|
|
21251
|
+
event.response,
|
|
21252
|
+
!!isStreaming,
|
|
21253
|
+
null,
|
|
21254
|
+
parsedModel,
|
|
21255
|
+
void 0,
|
|
21256
|
+
void 0
|
|
21257
|
+
);
|
|
21258
|
+
event.response = transformed;
|
|
21259
|
+
}
|
|
21260
|
+
};
|
|
21261
|
+
}
|
|
21262
|
+
function createV2RetryHook() {
|
|
21263
|
+
return async (event) => {
|
|
21264
|
+
if (!event) return;
|
|
21265
|
+
const response = event.response;
|
|
21266
|
+
if (response instanceof Response) {
|
|
21267
|
+
if (response.status === 429 || response.status === 503) {
|
|
21268
|
+
const quota = await classifyQuotaResponse(response);
|
|
21269
|
+
if (quota?.retryDelayMs) {
|
|
21270
|
+
event.retryDelayMs = quota.retryDelayMs;
|
|
21271
|
+
} else {
|
|
21272
|
+
event.retryDelayMs = await resolveRetryDelayMs(response, event.attempt || 1);
|
|
21273
|
+
}
|
|
21274
|
+
}
|
|
21275
|
+
} else if (event.details && Array.isArray(event.details)) {
|
|
21276
|
+
const retryInfo = event.details.find(
|
|
21277
|
+
(d) => d && d["@type"] === "type.googleapis.com/google.rpc.RetryInfo"
|
|
21278
|
+
);
|
|
21279
|
+
if (retryInfo?.retryDelay) {
|
|
21280
|
+
const delayMs = retryInternals.parseRetryDelayValue(retryInfo.retryDelay);
|
|
21281
|
+
if (delayMs !== null) {
|
|
21282
|
+
event.retryDelayMs = delayMs;
|
|
21283
|
+
}
|
|
21284
|
+
}
|
|
21285
|
+
}
|
|
21286
|
+
};
|
|
21287
|
+
}
|
|
21288
|
+
function registerV2SessionHooks(ctx) {
|
|
21289
|
+
const state = {};
|
|
21290
|
+
ctx.session.hook("http.request", createV2HttpRequestHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21291
|
+
ctx.session.hook("http.response", createV2HttpResponseHook(state), { providerID: AGY_PROVIDER_ID });
|
|
21292
|
+
ctx.session.hook("retry", createV2RetryHook(), { providerID: AGY_PROVIDER_ID });
|
|
20813
21293
|
}
|
|
20814
21294
|
|
|
21295
|
+
// src/plugin/v2.ts
|
|
21296
|
+
async function setupOpenCodeV2(ctx) {
|
|
21297
|
+
const resolveVariants = (modelId) => {
|
|
21298
|
+
const mapping = TIER_MAPPING[modelId];
|
|
21299
|
+
if (!mapping) return void 0;
|
|
21300
|
+
const variants = [];
|
|
21301
|
+
if (mapping.minimal !== void 0) variants.push({ id: "minimal" });
|
|
21302
|
+
if (mapping.low !== void 0) variants.push({ id: "low" });
|
|
21303
|
+
if (mapping.medium !== void 0) variants.push({ id: "medium" });
|
|
21304
|
+
if (mapping.high !== void 0) variants.push({ id: "high" });
|
|
21305
|
+
return variants.length > 0 ? variants : void 0;
|
|
21306
|
+
};
|
|
21307
|
+
const updateProviderRecord = (p) => {
|
|
21308
|
+
p.name = "Antigravity CLI";
|
|
21309
|
+
p.activation = "enabled";
|
|
21310
|
+
p.package = "aisdk:@ai-sdk/google";
|
|
21311
|
+
p.description = "Google Gemini Antigravity Code Assist OAuth provider";
|
|
21312
|
+
p.settings = { ...p.settings || {}, apiKey: "dummy" };
|
|
21313
|
+
p.integrationID = AGY_PROVIDER_ID;
|
|
21314
|
+
};
|
|
21315
|
+
const buildModelRecord = (modelId, simple, existingModel) => {
|
|
21316
|
+
const isClaude = modelId.startsWith("claude-");
|
|
21317
|
+
const isGpt = modelId.startsWith("gpt-");
|
|
21318
|
+
const variants = resolveVariants(modelId);
|
|
21319
|
+
return {
|
|
21320
|
+
id: modelId,
|
|
21321
|
+
providerID: AGY_PROVIDER_ID,
|
|
21322
|
+
name: simple.name,
|
|
21323
|
+
description: simple.description,
|
|
21324
|
+
family: modelId.includes("gemini") ? "gemini" : isClaude ? "claude" : isGpt ? "gpt" : "unknown",
|
|
21325
|
+
reasoning: simple.reasoning,
|
|
21326
|
+
attachment: simple.attachment,
|
|
21327
|
+
tool_call: simple.toolCall,
|
|
21328
|
+
limit: {
|
|
21329
|
+
context: simple.maxTokens,
|
|
21330
|
+
output: simple.maxOutputTokens
|
|
21331
|
+
},
|
|
21332
|
+
cost: simple.cost || { input: 0, output: 0 },
|
|
21333
|
+
...variants ? { variants } : {},
|
|
21334
|
+
...existingModel || {}
|
|
21335
|
+
};
|
|
21336
|
+
};
|
|
21337
|
+
const updateModelRecord = (m, modelId, simple) => {
|
|
21338
|
+
m.name = simple.name;
|
|
21339
|
+
m.capabilities = {
|
|
21340
|
+
tools: true,
|
|
21341
|
+
input: ["text", "image"],
|
|
21342
|
+
output: ["text"]
|
|
21343
|
+
};
|
|
21344
|
+
m.limit = {
|
|
21345
|
+
context: simple.maxTokens,
|
|
21346
|
+
output: simple.maxOutputTokens
|
|
21347
|
+
};
|
|
21348
|
+
m.family = "gemini";
|
|
21349
|
+
if (simple.cost) {
|
|
21350
|
+
m.cost = simple.cost;
|
|
21351
|
+
}
|
|
21352
|
+
const variants = resolveVariants(modelId);
|
|
21353
|
+
if (variants) {
|
|
21354
|
+
m.variants = variants;
|
|
21355
|
+
}
|
|
21356
|
+
};
|
|
21357
|
+
if (ctx.provider?.transform) {
|
|
21358
|
+
ctx.provider.transform(async (editor) => {
|
|
21359
|
+
if (!editor) return;
|
|
21360
|
+
if (typeof editor.update === "function") {
|
|
21361
|
+
editor.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21362
|
+
} else if (typeof editor.set === "function") {
|
|
21363
|
+
const p = { id: AGY_PROVIDER_ID };
|
|
21364
|
+
updateProviderRecord(p);
|
|
21365
|
+
editor.set(AGY_PROVIDER_ID, p);
|
|
21366
|
+
} else if (typeof editor === "object") {
|
|
21367
|
+
const p = editor[AGY_PROVIDER_ID] || { id: AGY_PROVIDER_ID };
|
|
21368
|
+
updateProviderRecord(p);
|
|
21369
|
+
editor[AGY_PROVIDER_ID] = p;
|
|
21370
|
+
}
|
|
21371
|
+
});
|
|
21372
|
+
}
|
|
21373
|
+
if (ctx.model?.transform) {
|
|
21374
|
+
ctx.model.transform(async (editor) => {
|
|
21375
|
+
if (!editor) return;
|
|
21376
|
+
if (typeof editor.update === "function") {
|
|
21377
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21378
|
+
editor.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21379
|
+
}
|
|
21380
|
+
} else if (typeof editor.set === "function") {
|
|
21381
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21382
|
+
const m = buildModelRecord(modelId, simple);
|
|
21383
|
+
editor.set(`${AGY_PROVIDER_ID}:${modelId}`, m);
|
|
21384
|
+
}
|
|
21385
|
+
} else if (typeof editor === "object") {
|
|
21386
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21387
|
+
const key = `${AGY_PROVIDER_ID}:${modelId}`;
|
|
21388
|
+
editor[key] = buildModelRecord(modelId, simple, editor[key]);
|
|
21389
|
+
}
|
|
21390
|
+
}
|
|
21391
|
+
});
|
|
21392
|
+
}
|
|
21393
|
+
if (ctx.catalog?.transform) {
|
|
21394
|
+
ctx.catalog.transform(async (editor) => {
|
|
21395
|
+
if (!editor) return;
|
|
21396
|
+
if (typeof editor?.provider?.update === "function") {
|
|
21397
|
+
editor.provider.update(AGY_PROVIDER_ID, updateProviderRecord);
|
|
21398
|
+
if (typeof editor?.model?.update === "function") {
|
|
21399
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21400
|
+
editor.model.update(AGY_PROVIDER_ID, modelId, (m) => updateModelRecord(m, modelId, simple));
|
|
21401
|
+
}
|
|
21402
|
+
}
|
|
21403
|
+
return;
|
|
21404
|
+
}
|
|
21405
|
+
const catalog = editor;
|
|
21406
|
+
catalog.providers = catalog.providers || {};
|
|
21407
|
+
catalog.providers[AGY_PROVIDER_ID] = {
|
|
21408
|
+
id: AGY_PROVIDER_ID,
|
|
21409
|
+
name: "Antigravity CLI",
|
|
21410
|
+
npm: "aisdk:@ai-sdk/google",
|
|
21411
|
+
settings: { apiKey: "dummy" },
|
|
21412
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21413
|
+
models: { ...catalog.providers[AGY_PROVIDER_ID]?.models || {} },
|
|
21414
|
+
...catalog.providers[AGY_PROVIDER_ID]
|
|
21415
|
+
};
|
|
21416
|
+
if (catalog.providers[AGY_PROVIDER_ID].settings) {
|
|
21417
|
+
catalog.providers[AGY_PROVIDER_ID].settings = {
|
|
21418
|
+
...catalog.providers[AGY_PROVIDER_ID].settings,
|
|
21419
|
+
apiKey: "dummy"
|
|
21420
|
+
};
|
|
21421
|
+
} else {
|
|
21422
|
+
catalog.providers[AGY_PROVIDER_ID].settings = { apiKey: "dummy" };
|
|
21423
|
+
}
|
|
21424
|
+
catalog.providers[AGY_PROVIDER_ID].integrationID = AGY_PROVIDER_ID;
|
|
21425
|
+
const targetModels = catalog.providers[AGY_PROVIDER_ID].models;
|
|
21426
|
+
for (const [modelId, simple] of Object.entries(STATIC_MODELS_SIMPLE)) {
|
|
21427
|
+
targetModels[modelId] = buildModelRecord(modelId, simple, targetModels[modelId]);
|
|
21428
|
+
}
|
|
21429
|
+
});
|
|
21430
|
+
}
|
|
21431
|
+
ctx.tool.transform(async (editor) => {
|
|
21432
|
+
if (!editor) return;
|
|
21433
|
+
const quotaTool = createAgyQuotaTool({
|
|
21434
|
+
client: void 0,
|
|
21435
|
+
getAuthResolver: () => void 0,
|
|
21436
|
+
getConfiguredProjectId: () => void 0,
|
|
21437
|
+
getUserAgentModel: () => void 0
|
|
21438
|
+
});
|
|
21439
|
+
const quotaSummaryTool = createAgyQuotaSummaryTool({
|
|
21440
|
+
client: void 0,
|
|
21441
|
+
getAuthResolver: () => void 0,
|
|
21442
|
+
getConfiguredProjectId: () => void 0,
|
|
21443
|
+
getUserAgentModel: () => void 0
|
|
21444
|
+
});
|
|
21445
|
+
if (typeof editor.add === "function") {
|
|
21446
|
+
editor.add({
|
|
21447
|
+
name: AGY_QUOTA_TOOL_NAME,
|
|
21448
|
+
description: quotaTool.description,
|
|
21449
|
+
input: {},
|
|
21450
|
+
execute: async (args, context) => quotaTool.execute(args, context)
|
|
21451
|
+
});
|
|
21452
|
+
editor.add({
|
|
21453
|
+
name: AGY_QUOTA_SUMMARY_TOOL_NAME,
|
|
21454
|
+
description: quotaSummaryTool.description,
|
|
21455
|
+
input: {},
|
|
21456
|
+
execute: async (args, context) => quotaSummaryTool.execute(args, context)
|
|
21457
|
+
});
|
|
21458
|
+
} else if (typeof editor.set === "function") {
|
|
21459
|
+
editor.set(AGY_QUOTA_TOOL_NAME, quotaTool);
|
|
21460
|
+
editor.set(AGY_QUOTA_SUMMARY_TOOL_NAME, quotaSummaryTool);
|
|
21461
|
+
} else if (editor.tools && typeof editor.tools === "object") {
|
|
21462
|
+
editor.tools[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21463
|
+
editor.tools[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21464
|
+
} else if (typeof editor === "object") {
|
|
21465
|
+
editor[AGY_QUOTA_TOOL_NAME] = quotaTool;
|
|
21466
|
+
editor[AGY_QUOTA_SUMMARY_TOOL_NAME] = quotaSummaryTool;
|
|
21467
|
+
}
|
|
21468
|
+
});
|
|
21469
|
+
ctx.command.transform(async (editor) => {
|
|
21470
|
+
if (!editor) return;
|
|
21471
|
+
const commands = {
|
|
21472
|
+
[AGY_V2_QUOTA_COMMAND]: {
|
|
21473
|
+
description: "Show Agy Code Assist quota usage",
|
|
21474
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21475
|
+
},
|
|
21476
|
+
[AGY_V2_QUOTA_SUMMARY_COMMAND]: {
|
|
21477
|
+
description: "Show Agy Code Assist quota summary with weekly and 5-hour limits",
|
|
21478
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21479
|
+
}
|
|
21480
|
+
};
|
|
21481
|
+
if (typeof editor.add === "function") {
|
|
21482
|
+
editor.add({
|
|
21483
|
+
name: AGY_V2_QUOTA_COMMAND,
|
|
21484
|
+
description: "Display current Antigravity quota usage",
|
|
21485
|
+
template: AGY_V2_QUOTA_COMMAND_TEMPLATE
|
|
21486
|
+
});
|
|
21487
|
+
editor.add({
|
|
21488
|
+
name: AGY_V2_QUOTA_SUMMARY_COMMAND,
|
|
21489
|
+
description: "Display Antigravity quota summary grouped by model family",
|
|
21490
|
+
template: AGY_V2_QUOTA_SUMMARY_COMMAND_TEMPLATE
|
|
21491
|
+
});
|
|
21492
|
+
} else if (typeof editor.set === "function") {
|
|
21493
|
+
editor.set(AGY_V2_QUOTA_COMMAND, commands[AGY_V2_QUOTA_COMMAND]);
|
|
21494
|
+
editor.set(AGY_V2_QUOTA_SUMMARY_COMMAND, commands[AGY_V2_QUOTA_SUMMARY_COMMAND]);
|
|
21495
|
+
} else if (editor.commands && typeof editor.commands === "object") {
|
|
21496
|
+
editor.commands[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21497
|
+
editor.commands[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21498
|
+
} else if (typeof editor === "object") {
|
|
21499
|
+
editor[AGY_V2_QUOTA_COMMAND] = commands[AGY_V2_QUOTA_COMMAND];
|
|
21500
|
+
editor[AGY_V2_QUOTA_SUMMARY_COMMAND] = commands[AGY_V2_QUOTA_SUMMARY_COMMAND];
|
|
21501
|
+
}
|
|
21502
|
+
});
|
|
21503
|
+
ctx.integration?.transform?.((editor) => {
|
|
21504
|
+
if (!editor) return;
|
|
21505
|
+
editor.update?.(AGY_PROVIDER_ID, (integration) => {
|
|
21506
|
+
integration.name = "Antigravity CLI (plugin)";
|
|
21507
|
+
});
|
|
21508
|
+
editor.method?.update?.({
|
|
21509
|
+
integrationID: AGY_PROVIDER_ID,
|
|
21510
|
+
method: {
|
|
21511
|
+
id: "oauth",
|
|
21512
|
+
type: "oauth",
|
|
21513
|
+
label: "Antigravity CLI (OAuth)"
|
|
21514
|
+
},
|
|
21515
|
+
authorize: async () => {
|
|
21516
|
+
const authorization = await authorizeAgy();
|
|
21517
|
+
return {
|
|
21518
|
+
mode: "code",
|
|
21519
|
+
url: authorization.url,
|
|
21520
|
+
instructions: "Please complete Google account authorization in your browser. After authorization, copy the full redirect URL or code and paste it below:",
|
|
21521
|
+
callback: async (code) => {
|
|
21522
|
+
const trimmed = code.trim();
|
|
21523
|
+
const parsed = parseOAuthCallbackInput(trimmed);
|
|
21524
|
+
const authCode = parsed.code || trimmed;
|
|
21525
|
+
if (!authCode) {
|
|
21526
|
+
return { type: "failed", error: "Missing authorization code in callback input" };
|
|
21527
|
+
}
|
|
21528
|
+
if (parsed.state && parsed.state !== authorization.state) {
|
|
21529
|
+
return { type: "failed", error: "State mismatch in callback input (possible CSRF attempt)" };
|
|
21530
|
+
}
|
|
21531
|
+
const exchangeResult = await exchangeAgyWithVerifier(authCode, authorization.verifier);
|
|
21532
|
+
if (exchangeResult.type !== "success") {
|
|
21533
|
+
return exchangeResult;
|
|
21534
|
+
}
|
|
21535
|
+
const initialRefresh = formatRefreshParts({
|
|
21536
|
+
refreshToken: exchangeResult.refresh
|
|
21537
|
+
});
|
|
21538
|
+
let authRecord = {
|
|
21539
|
+
type: "oauth",
|
|
21540
|
+
refresh: initialRefresh,
|
|
21541
|
+
access: exchangeResult.access,
|
|
21542
|
+
expires: exchangeResult.expires
|
|
21543
|
+
};
|
|
21544
|
+
try {
|
|
21545
|
+
const projectContext = await ensureProjectContext(
|
|
21546
|
+
authRecord,
|
|
21547
|
+
{ auth: { set: async () => {
|
|
21548
|
+
} } }
|
|
21549
|
+
);
|
|
21550
|
+
authRecord = {
|
|
21551
|
+
...authRecord,
|
|
21552
|
+
refresh: projectContext.auth.refresh
|
|
21553
|
+
};
|
|
21554
|
+
} catch {
|
|
21555
|
+
}
|
|
21556
|
+
saveStoredAuthToJson(authRecord);
|
|
21557
|
+
return {
|
|
21558
|
+
type: "oauth",
|
|
21559
|
+
methodID: "oauth",
|
|
21560
|
+
refresh: authRecord.refresh,
|
|
21561
|
+
access: authRecord.access,
|
|
21562
|
+
expires: authRecord.expires
|
|
21563
|
+
};
|
|
21564
|
+
}
|
|
21565
|
+
};
|
|
21566
|
+
}
|
|
21567
|
+
});
|
|
21568
|
+
});
|
|
21569
|
+
ctx.aisdk?.hook("sdk", async (event) => {
|
|
21570
|
+
if (!event) return;
|
|
21571
|
+
const isMatchingProvider = event.providerID === AGY_PROVIDER_ID || event.model?.providerID === AGY_PROVIDER_ID;
|
|
21572
|
+
if (!isMatchingProvider) return;
|
|
21573
|
+
event.options = event.options || {};
|
|
21574
|
+
event.options.apiKey = "dummy";
|
|
21575
|
+
event.options.fetch = createV2FetchInterceptor();
|
|
21576
|
+
});
|
|
21577
|
+
registerV2SessionHooks(ctx);
|
|
21578
|
+
}
|
|
21579
|
+
var v2PluginDefinition = defineOpenCodeV2Plugin({
|
|
21580
|
+
id: AGY_PROVIDER_ID,
|
|
21581
|
+
setup: setupOpenCodeV2
|
|
21582
|
+
});
|
|
21583
|
+
|
|
20815
21584
|
// index.ts
|
|
20816
|
-
var
|
|
20817
|
-
|
|
21585
|
+
var dualPlugin = {
|
|
21586
|
+
...v2PluginDefinition,
|
|
20818
21587
|
server: AgyCLIOAuthPlugin
|
|
20819
21588
|
};
|
|
21589
|
+
var index_default = dualPlugin;
|
|
20820
21590
|
export {
|
|
20821
21591
|
AgyCLIOAuthPlugin,
|
|
20822
21592
|
GoogleOAuthPlugin,
|
|
20823
|
-
index_default as default
|
|
21593
|
+
index_default as default,
|
|
21594
|
+
defineOpenCodeV2Plugin,
|
|
21595
|
+
setupOpenCodeV2,
|
|
21596
|
+
v2PluginDefinition
|
|
20824
21597
|
};
|
|
20825
21598
|
//# sourceMappingURL=index.js.map
|