opencode-antigravity-autopilot 2.2.2 → 2.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.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/oh-my-opencode.d.ts.map +1 -1
- package/dist/oh-my-opencode.js +3 -2
- package/dist/oh-my-opencode.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +7 -5
- package/dist/plugin.js.map +1 -1
- package/dist/rotation/QuotaTracker.d.ts +1 -0
- package/dist/rotation/QuotaTracker.d.ts.map +1 -1
- package/dist/rotation/QuotaTracker.js +3 -0
- package/dist/rotation/QuotaTracker.js.map +1 -1
- package/dist/scripts/scripts/test-agent-quota.js +154 -0
- package/dist/scripts/src/auth/AccountRotator.js +143 -0
- package/dist/scripts/src/auth/TokenStorageReader.js +88 -0
- package/dist/scripts/src/manager.js +360 -0
- package/dist/scripts/src/oh-my-opencode.js +145 -0
- package/dist/scripts/src/quota/ApiQuotaPoller.js +340 -0
- package/dist/scripts/src/quota/LSPFinder.js +86 -0
- package/dist/scripts/src/quota/QuotaCacheUpdater.js +212 -0
- package/dist/scripts/src/quota/QuotaPoller.js +86 -0
- package/dist/scripts/src/rotation/ModelSelector.js +63 -0
- package/dist/scripts/src/rotation/QuotaTracker.js +105 -0
- package/dist/scripts/src/types.js +2 -0
- package/dist/scripts/src/utils/logger.js +130 -0
- package/dist/utils/model-name-translator.d.ts +5 -0
- package/dist/utils/model-name-translator.d.ts.map +1 -0
- package/dist/utils/model-name-translator.js +119 -0
- package/dist/utils/model-name-translator.js.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ export { QuotaTracker } from './rotation/QuotaTracker';
|
|
|
12
12
|
export { ModelSelector } from './rotation/ModelSelector';
|
|
13
13
|
export { HardLimitDetector } from './rotation/HardLimitDetector';
|
|
14
14
|
export type { HardLimitCheckResult } from './rotation/HardLimitDetector';
|
|
15
|
+
export { translateModelName, getShortModelName, formatModelQuotaForToast, formatModelSwitchMessage, } from './utils/model-name-translator';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC7F,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAC7F,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,4 +10,5 @@ export { QuotaCacheUpdater, startQuotaCacheService } from './quota/QuotaCacheUpd
|
|
|
10
10
|
export { QuotaTracker } from './rotation/QuotaTracker';
|
|
11
11
|
export { ModelSelector } from './rotation/ModelSelector';
|
|
12
12
|
export { HardLimitDetector } from './rotation/HardLimitDetector';
|
|
13
|
+
export { translateModelName, getShortModelName, formatModelQuotaForToast, formatModelSwitchMessage, } from './utils/model-name-translator';
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAU7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAU7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,+BAA+B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-my-opencode.d.ts","sourceRoot":"","sources":["../src/oh-my-opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAgB,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE9D,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3C;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,YAAY,EAC1B,MAAM,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;gCAGE,MAAM,mBAAmB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"oh-my-opencode.d.ts","sourceRoot":"","sources":["../src/oh-my-opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAgB,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAE9D,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3C;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,YAAY,EAC1B,MAAM,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;gCAGE,MAAM,mBAAmB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;sCA4BjE,kBAAkB,yBACX,qBAAqB,GAC3C,kBAAkB;+BAkBY,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;EAS5D;AAED,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,EAAE,GACxB,kBAAkB,CAqBpB"}
|
package/dist/oh-my-opencode.js
CHANGED
|
@@ -76,11 +76,12 @@ export function createOhMyOpenCodeIntegration(quotaManager, config) {
|
|
|
76
76
|
return {
|
|
77
77
|
getModelForAgent: function (agentName, preferredModel) {
|
|
78
78
|
return __awaiter(this, void 0, void 0, function () {
|
|
79
|
-
var targetModel, selected, quotaState, fallback;
|
|
79
|
+
var targetModel, quotaThreshold, selected, quotaState, fallback;
|
|
80
80
|
return __generator(this, function (_a) {
|
|
81
81
|
switch (_a.label) {
|
|
82
82
|
case 0:
|
|
83
83
|
targetModel = preferredModel || (config === null || config === void 0 ? void 0 : config.defaultModel);
|
|
84
|
+
quotaThreshold = quotaManager.getQuotaTracker().getThreshold();
|
|
84
85
|
if (!!targetModel) return [3, 3];
|
|
85
86
|
selected = quotaManager.selectBestModel();
|
|
86
87
|
if (!!selected) return [3, 2];
|
|
@@ -92,7 +93,7 @@ export function createOhMyOpenCodeIntegration(quotaManager, config) {
|
|
|
92
93
|
case 2: return [2, selected || 'google/antigravity-gemini-3-flash'];
|
|
93
94
|
case 3:
|
|
94
95
|
quotaState = quotaManager.getQuotaTracker().getQuotaForModel(targetModel);
|
|
95
|
-
if (!(quotaState && quotaState.quotaFraction <
|
|
96
|
+
if (!(quotaState && quotaState.quotaFraction < quotaThreshold)) return [3, 6];
|
|
96
97
|
fallback = quotaManager.selectBestModel();
|
|
97
98
|
if (!!fallback) return [3, 5];
|
|
98
99
|
return [4, quotaManager.rotateAccount()];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oh-my-opencode.js","sourceRoot":"","sources":["../src/oh-my-opencode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,UAAU,6BAA6B,CAC3C,YAA0B,EAC1B,MAAkC;IAElC,OAAO;QACC,gBAAgB,YAAC,SAAiB,EAAE,cAAuB;;;;;;4BACzD,WAAW,GAAG,cAAc,KAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAA,CAAC;
|
|
1
|
+
{"version":3,"file":"oh-my-opencode.js","sourceRoot":"","sources":["../src/oh-my-opencode.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAkBA,UAAU,WAAW;IACnB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,GAAG,CAAC;CACR;AAED,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAED,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,UAAU,KAAK;IACb,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,KAAK,MAAM,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;AA0BrD,eAAO,MAAM,MAAM,EAAE,MA+HpB,CAAC;AAEF,eAAe,MAAM,CAAC;AAGtB,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAG7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -63,6 +63,7 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
63
63
|
};
|
|
64
64
|
import { QuotaManager } from './manager';
|
|
65
65
|
import { QuotaCacheUpdater } from './quota/QuotaCacheUpdater';
|
|
66
|
+
import { translateModelName, formatModelQuotaForToast } from './utils/model-name-translator';
|
|
66
67
|
import fs from 'fs';
|
|
67
68
|
var LOG_FILE = '/tmp/autopilot.log';
|
|
68
69
|
function logToFile(message) {
|
|
@@ -107,7 +108,7 @@ export var plugin = function (ctx) { return __awaiter(void 0, void 0, void 0, fu
|
|
|
107
108
|
logToFile('Autopilot plugin initialized with config');
|
|
108
109
|
return [2, {
|
|
109
110
|
event: function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
110
|
-
var quota, percentage,
|
|
111
|
+
var quota, percentage, threshold, modelDisplayName, quotaDisplay, message, resetDate, now, diffMs, minutesLeft, hours, mins, err_1;
|
|
111
112
|
var event = _b.event;
|
|
112
113
|
return __generator(this, function (_c) {
|
|
113
114
|
switch (_c.label) {
|
|
@@ -125,9 +126,10 @@ export var plugin = function (ctx) { return __awaiter(void 0, void 0, void 0, fu
|
|
|
125
126
|
quota = _c.sent();
|
|
126
127
|
if (!quota) return [3, 5];
|
|
127
128
|
percentage = Math.round(quota.remainingFraction * 100);
|
|
128
|
-
statusIcon = percentage <= 10 ? '🔴' : percentage <= 25 ? '🟡' : '🟢';
|
|
129
129
|
threshold = (userConfig.quotaThreshold || 0.02) * 100;
|
|
130
|
-
|
|
130
|
+
modelDisplayName = translateModelName(quota.model || 'Unknown');
|
|
131
|
+
quotaDisplay = formatModelQuotaForToast(quota.model || 'Unknown', percentage);
|
|
132
|
+
message = "".concat(quotaDisplay, " (Cutoff: ").concat(threshold, "%)");
|
|
131
133
|
if (quota.resetTime) {
|
|
132
134
|
resetDate = new Date(quota.resetTime);
|
|
133
135
|
now = new Date();
|
|
@@ -141,9 +143,9 @@ export var plugin = function (ctx) { return __awaiter(void 0, void 0, void 0, fu
|
|
|
141
143
|
}
|
|
142
144
|
return [4, ctx.client.tui.showToast({
|
|
143
145
|
body: {
|
|
144
|
-
title:
|
|
146
|
+
title: modelDisplayName,
|
|
145
147
|
message: message,
|
|
146
|
-
variant: percentage <=
|
|
148
|
+
variant: percentage <= threshold ? 'critical' : percentage <= threshold * 2 ? 'warning' : 'info'
|
|
147
149
|
}
|
|
148
150
|
})];
|
|
149
151
|
case 4:
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,IAAM,QAAQ,GAAG,oBAAoB,CAAC;AACtC,SAAS,SAAS,CAAC,OAAe;IAChC,IAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAI,SAAS,wBAAc,OAAO,OAAI,CAAC,CAAC;AACtE,CAAC;AAGD,IAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,IAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,IAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AA+B5C,SAAS,IAAI,CAAC,GAAmB;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,IAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QAChF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,IAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACrD,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,SAAS,CAAC,+BAAwB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAE,CAAC,CAAC;YAC5D,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,uCAAgC,KAAK,CAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,IAAM,MAAM,GAAW,UAAO,GAAG;;;;;gBAChC,UAAU,GAAG,eAAe,EAAE,CAAC;gBAC/B,OAAO,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC7C,WAAM,OAAO,CAAC,UAAU,EAAE,EAAA;;gBAA1B,SAA0B,CAAC;gBAErB,YAAY,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;gBAC3E,YAAY,CAAC,KAAK,EAAE,CAAC;gBAErB,SAAS,CAAC,0CAA0C,CAAC,CAAC;gBAEtD,WAAO;wBAEL,KAAK,EAAE,iEAAO,EAAS;;gCAAP,KAAK,WAAA;;;;6CACf,CAAA,KAAK,CAAC,IAAI,KAAK,cAAc,CAAA,EAA7B,cAA6B;wCAC/B,SAAS,CAAC,0CAA0C,CAAC,CAAC;wCACtD,WAAM,YAAY,CAAC,gBAAgB,EAAE,EAAA;;wCAArC,SAAqC,CAAC;;;;wCAItB,WAAM,OAAO,CAAC,cAAc,EAAE,EAAA;;wCAAtC,KAAK,GAAG,SAA8B;6CACxC,KAAK,EAAL,cAAK;wCACD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC;wCACvD,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export declare class QuotaTracker {
|
|
|
6
6
|
constructor(quotaThreshold?: number);
|
|
7
7
|
updateQuota(model: string, quota: QuotaInfo): void;
|
|
8
8
|
getQuotaForModel(model: string): ModelQuotaState | null;
|
|
9
|
+
getThreshold(): number;
|
|
9
10
|
isModelAvailable(model: string): boolean;
|
|
10
11
|
getBestAvailableModel(candidates: string[]): string | null;
|
|
11
12
|
getAllQuotaStates(): ModelQuotaState[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotaTracker.d.ts","sourceRoot":"","sources":["../../src/rotation/QuotaTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGtD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,MAAM,CAAgC;gBAElC,cAAc,GAAE,MAAa;IAezC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAqBlD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWxC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI;IAuC1D,iBAAiB,IAAI,eAAe,EAAE;IAItC,cAAc,CAAC,QAAQ,GAAE,MAAe,GAAG,IAAI;IAS/C,QAAQ,IAAI,IAAI;CAKjB"}
|
|
1
|
+
{"version":3,"file":"QuotaTracker.d.ts","sourceRoot":"","sources":["../../src/rotation/QuotaTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGtD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,MAAM,CAAgC;gBAElC,cAAc,GAAE,MAAa;IAezC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAqBlD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvD,YAAY,IAAI,MAAM;IAItB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWxC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI;IAuC1D,iBAAiB,IAAI,eAAe,EAAE;IAItC,cAAc,CAAC,QAAQ,GAAE,MAAe,GAAG,IAAI;IAS/C,QAAQ,IAAI,IAAI;CAKjB"}
|
|
@@ -61,6 +61,9 @@ var QuotaTracker = (function () {
|
|
|
61
61
|
QuotaTracker.prototype.getQuotaForModel = function (model) {
|
|
62
62
|
return this.quotaState.get(model) || null;
|
|
63
63
|
};
|
|
64
|
+
QuotaTracker.prototype.getThreshold = function () {
|
|
65
|
+
return this.quotaThreshold;
|
|
66
|
+
};
|
|
64
67
|
QuotaTracker.prototype.isModelAvailable = function (model) {
|
|
65
68
|
var state = this.quotaState.get(model);
|
|
66
69
|
if (!state)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotaTracker.js","sourceRoot":"","sources":["../../src/rotation/QuotaTracker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"QuotaTracker.js","sourceRoot":"","sources":["../../src/rotation/QuotaTracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
28
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
+
function step(op) {
|
|
31
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
+
switch (op[0]) {
|
|
36
|
+
case 0: case 1: t = op; break;
|
|
37
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
+
default:
|
|
41
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
+
if (t[2]) _.ops.pop();
|
|
46
|
+
_.trys.pop(); continue;
|
|
47
|
+
}
|
|
48
|
+
op = body.call(thisArg, _);
|
|
49
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
var manager_1 = require("../src/manager");
|
|
55
|
+
var oh_my_opencode_1 = require("../src/oh-my-opencode");
|
|
56
|
+
var QuotaTracker_1 = require("../src/rotation/QuotaTracker");
|
|
57
|
+
// Mock QuotaManager to simulate quota states
|
|
58
|
+
var MockQuotaManager = /** @class */ (function (_super) {
|
|
59
|
+
__extends(MockQuotaManager, _super);
|
|
60
|
+
function MockQuotaManager(mockQuota, mockModel) {
|
|
61
|
+
var _this = _super.call(this) || this;
|
|
62
|
+
_this.mockQuota = mockQuota;
|
|
63
|
+
_this.mockModel = mockModel;
|
|
64
|
+
// @ts-ignore - Accessing private property for test setup
|
|
65
|
+
_this.quotaTracker = new QuotaTracker_1.QuotaTracker(0.02);
|
|
66
|
+
// @ts-ignore - Accessing private property for test setup
|
|
67
|
+
_this.quotaTracker.updateQuota(mockModel, {
|
|
68
|
+
remainingFraction: mockQuota,
|
|
69
|
+
resetTime: new Date(Date.now() + 3600000).toISOString(),
|
|
70
|
+
quotaFraction: mockQuota
|
|
71
|
+
});
|
|
72
|
+
return _this;
|
|
73
|
+
}
|
|
74
|
+
// @ts-ignore - Accessing private property for test setup
|
|
75
|
+
MockQuotaManager.prototype.getQuotaTracker = function () {
|
|
76
|
+
return this.quotaTracker;
|
|
77
|
+
};
|
|
78
|
+
// @ts-ignore - Mocking method
|
|
79
|
+
MockQuotaManager.prototype.selectBestModel = function () {
|
|
80
|
+
return 'fallback-model';
|
|
81
|
+
};
|
|
82
|
+
MockQuotaManager.prototype.rotateAccount = function () {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
84
|
+
return __generator(this, function (_a) {
|
|
85
|
+
console.log('Rotating account...');
|
|
86
|
+
return [2 /*return*/];
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
return MockQuotaManager;
|
|
91
|
+
}(manager_1.QuotaManager));
|
|
92
|
+
function testAgentQuotaThreshold() {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
94
|
+
var TARGET_MODEL, CURRENT_QUOTA, manager1, integration1, result1, manager2, integration2, result2, manager3, integration3, result3;
|
|
95
|
+
return __generator(this, function (_a) {
|
|
96
|
+
switch (_a.label) {
|
|
97
|
+
case 0:
|
|
98
|
+
console.log('🧪 Testing Agent Quota Threshold Logic (TS version)...\n');
|
|
99
|
+
TARGET_MODEL = 'primary-model';
|
|
100
|
+
CURRENT_QUOTA = 0.05;
|
|
101
|
+
console.log("Context: Model '".concat(TARGET_MODEL, "' has ").concat(CURRENT_QUOTA * 100, "% quota remaining."));
|
|
102
|
+
// Test Case 1: Low Threshold (2%)
|
|
103
|
+
console.log('\n--- Test Case 1: Threshold 2% (Standard) ---');
|
|
104
|
+
manager1 = new MockQuotaManager(CURRENT_QUOTA, TARGET_MODEL);
|
|
105
|
+
integration1 = (0, oh_my_opencode_1.createOhMyOpenCodeIntegration)(manager1, {
|
|
106
|
+
defaultModel: TARGET_MODEL,
|
|
107
|
+
quotaThreshold: 0.02
|
|
108
|
+
});
|
|
109
|
+
return [4 /*yield*/, integration1.getModelForAgent('test-agent', TARGET_MODEL)];
|
|
110
|
+
case 1:
|
|
111
|
+
result1 = _a.sent();
|
|
112
|
+
if (result1 === TARGET_MODEL) {
|
|
113
|
+
console.log('✅ PASS: Kept primary model (5% > 2%)');
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.error("\u274C FAIL: Switched to ".concat(result1, " unexpectedly"));
|
|
117
|
+
}
|
|
118
|
+
// Test Case 2: High Threshold (10%)
|
|
119
|
+
console.log('\n--- Test Case 2: Threshold 10% (Aggressive) ---');
|
|
120
|
+
manager2 = new MockQuotaManager(CURRENT_QUOTA, TARGET_MODEL);
|
|
121
|
+
integration2 = (0, oh_my_opencode_1.createOhMyOpenCodeIntegration)(manager2, {
|
|
122
|
+
defaultModel: TARGET_MODEL,
|
|
123
|
+
quotaThreshold: 0.10
|
|
124
|
+
});
|
|
125
|
+
return [4 /*yield*/, integration2.getModelForAgent('test-agent', TARGET_MODEL)];
|
|
126
|
+
case 2:
|
|
127
|
+
result2 = _a.sent();
|
|
128
|
+
if (result2 === 'fallback-model') {
|
|
129
|
+
console.log('✅ PASS: Switched to fallback model (5% < 10%)');
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.error("\u274C FAIL: Kept ".concat(result2, " despite low quota"));
|
|
133
|
+
}
|
|
134
|
+
// Test Case 3: Default Threshold (Should be 2%)
|
|
135
|
+
console.log('\n--- Test Case 3: Default Threshold (Implied 2%) ---');
|
|
136
|
+
manager3 = new MockQuotaManager(CURRENT_QUOTA, TARGET_MODEL);
|
|
137
|
+
integration3 = (0, oh_my_opencode_1.createOhMyOpenCodeIntegration)(manager3, {
|
|
138
|
+
defaultModel: TARGET_MODEL
|
|
139
|
+
});
|
|
140
|
+
return [4 /*yield*/, integration3.getModelForAgent('test-agent', TARGET_MODEL)];
|
|
141
|
+
case 3:
|
|
142
|
+
result3 = _a.sent();
|
|
143
|
+
if (result3 === TARGET_MODEL) {
|
|
144
|
+
console.log('✅ PASS: Kept primary model with default threshold');
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
console.error("\u274C FAIL: Switched to ".concat(result3, " unexpectedly"));
|
|
148
|
+
}
|
|
149
|
+
return [2 /*return*/];
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
testAgentQuotaThreshold().catch(console.error);
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
36
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
37
|
+
if (ar || !(i in from)) {
|
|
38
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
39
|
+
ar[i] = from[i];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.AccountRotator = void 0;
|
|
46
|
+
var fs = __importStar(require("fs"));
|
|
47
|
+
var path = __importStar(require("path"));
|
|
48
|
+
var os = __importStar(require("os"));
|
|
49
|
+
var AccountRotator = /** @class */ (function () {
|
|
50
|
+
function AccountRotator(accounts, initialIndex) {
|
|
51
|
+
if (!(this instanceof AccountRotator)) {
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
return new AccountRotator(accounts, initialIndex);
|
|
54
|
+
}
|
|
55
|
+
this.accounts = __spreadArray([], accounts, true);
|
|
56
|
+
this.activeIndex = initialIndex;
|
|
57
|
+
}
|
|
58
|
+
AccountRotator.prototype.getCurrentAccount = function () {
|
|
59
|
+
if (this.accounts.length === 0) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
var count = this.accounts.length;
|
|
63
|
+
var now = Date.now();
|
|
64
|
+
for (var i = 0; i < count; i++) {
|
|
65
|
+
var index = (this.activeIndex + i) % count;
|
|
66
|
+
var account = this.accounts[index];
|
|
67
|
+
if (!account.coolingDownUntil || account.coolingDownUntil <= now) {
|
|
68
|
+
this.activeIndex = index;
|
|
69
|
+
return account;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
var minCooldown = Infinity;
|
|
73
|
+
var minIndex = -1;
|
|
74
|
+
for (var i = 0; i < count; i++) {
|
|
75
|
+
var account = this.accounts[i];
|
|
76
|
+
if (account.coolingDownUntil && account.coolingDownUntil < minCooldown) {
|
|
77
|
+
minCooldown = account.coolingDownUntil;
|
|
78
|
+
minIndex = i;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (minIndex !== -1) {
|
|
82
|
+
this.activeIndex = minIndex;
|
|
83
|
+
return this.accounts[minIndex];
|
|
84
|
+
}
|
|
85
|
+
return this.accounts[this.activeIndex];
|
|
86
|
+
};
|
|
87
|
+
AccountRotator.prototype.markCurrentExhausted = function (cooldownMs, resetTimeISO) {
|
|
88
|
+
if (this.accounts.length === 0) {
|
|
89
|
+
return -1;
|
|
90
|
+
}
|
|
91
|
+
var currentAccount = this.accounts[this.activeIndex];
|
|
92
|
+
if (resetTimeISO) {
|
|
93
|
+
var resetTime = new Date(resetTimeISO);
|
|
94
|
+
if (!Number.isNaN(resetTime.getTime())) {
|
|
95
|
+
currentAccount.coolingDownUntil = resetTime.getTime();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
currentAccount.coolingDownUntil = Date.now() + (cooldownMs || 30 * 60 * 1000);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
currentAccount.coolingDownUntil = Date.now() + (cooldownMs || 30 * 60 * 1000);
|
|
103
|
+
}
|
|
104
|
+
this.activeIndex = (this.activeIndex + 1) % this.accounts.length;
|
|
105
|
+
this.saveToDisk();
|
|
106
|
+
return this.activeIndex;
|
|
107
|
+
};
|
|
108
|
+
AccountRotator.prototype.saveToDisk = function () {
|
|
109
|
+
var storagePath = this.getStoragePath();
|
|
110
|
+
// Ensure directory exists
|
|
111
|
+
var dir = path.dirname(storagePath);
|
|
112
|
+
if (!fs.existsSync(dir)) {
|
|
113
|
+
try {
|
|
114
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
console.error('Failed to create config directory:', error);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
var storage = {
|
|
122
|
+
version: 3,
|
|
123
|
+
accounts: this.accounts,
|
|
124
|
+
activeIndex: this.activeIndex
|
|
125
|
+
};
|
|
126
|
+
try {
|
|
127
|
+
fs.writeFileSync(storagePath, JSON.stringify(storage, null, 2), 'utf-8');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
console.error('Failed to save account storage:', error);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
AccountRotator.prototype.getStoragePath = function () {
|
|
134
|
+
var xdgConfigHome = process.env.XDG_CONFIG_HOME;
|
|
135
|
+
if (xdgConfigHome) {
|
|
136
|
+
return path.join(xdgConfigHome, 'opencode', 'antigravity-accounts.json');
|
|
137
|
+
}
|
|
138
|
+
var homeDir = os.homedir();
|
|
139
|
+
return path.join(homeDir, '.config', 'opencode', 'antigravity-accounts.json');
|
|
140
|
+
};
|
|
141
|
+
return AccountRotator;
|
|
142
|
+
}());
|
|
143
|
+
exports.AccountRotator = AccountRotator;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TokenStorageReader = void 0;
|
|
37
|
+
var fs = __importStar(require("fs"));
|
|
38
|
+
var path = __importStar(require("path"));
|
|
39
|
+
var os = __importStar(require("os"));
|
|
40
|
+
var TokenStorageReader = /** @class */ (function () {
|
|
41
|
+
function TokenStorageReader() {
|
|
42
|
+
if (!(this instanceof TokenStorageReader)) {
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
return new TokenStorageReader();
|
|
45
|
+
}
|
|
46
|
+
this.accounts = [];
|
|
47
|
+
this.activeIndex = -1;
|
|
48
|
+
this.load();
|
|
49
|
+
}
|
|
50
|
+
TokenStorageReader.prototype.getAccounts = function () {
|
|
51
|
+
return this.accounts;
|
|
52
|
+
};
|
|
53
|
+
TokenStorageReader.prototype.getActiveIndex = function () {
|
|
54
|
+
return this.activeIndex;
|
|
55
|
+
};
|
|
56
|
+
TokenStorageReader.prototype.load = function () {
|
|
57
|
+
var _a;
|
|
58
|
+
var storagePath = this.getStoragePath();
|
|
59
|
+
if (!fs.existsSync(storagePath)) {
|
|
60
|
+
console.warn("Token storage file not found at ".concat(storagePath));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
var content = fs.readFileSync(storagePath, 'utf-8');
|
|
65
|
+
var data = JSON.parse(content);
|
|
66
|
+
if (data.version !== 3) {
|
|
67
|
+
console.warn("Unsupported storage version: ".concat(data.version, ". Expected version 3."));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
var storage = data;
|
|
71
|
+
this.accounts = storage.accounts || [];
|
|
72
|
+
this.activeIndex = (_a = storage.activeIndex) !== null && _a !== void 0 ? _a : -1;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
console.error('Failed to parse token storage file:', error);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
TokenStorageReader.prototype.getStoragePath = function () {
|
|
79
|
+
var xdgConfigHome = process.env.XDG_CONFIG_HOME;
|
|
80
|
+
if (xdgConfigHome) {
|
|
81
|
+
return path.join(xdgConfigHome, 'opencode', 'antigravity-accounts.json');
|
|
82
|
+
}
|
|
83
|
+
var homeDir = os.homedir();
|
|
84
|
+
return path.join(homeDir, '.config', 'opencode', 'antigravity-accounts.json');
|
|
85
|
+
};
|
|
86
|
+
return TokenStorageReader;
|
|
87
|
+
}());
|
|
88
|
+
exports.TokenStorageReader = TokenStorageReader;
|