@slkiser/opencode-quota 3.2.0 → 3.4.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.
Files changed (127) hide show
  1. package/README.md +278 -557
  2. package/dist/bin/opencode-quota.d.ts.map +1 -1
  3. package/dist/bin/opencode-quota.js +6 -0
  4. package/dist/bin/opencode-quota.js.map +1 -1
  5. package/dist/lib/anthropic.js +1 -1
  6. package/dist/lib/anthropic.js.map +1 -1
  7. package/dist/lib/cli-show.d.ts +8 -0
  8. package/dist/lib/cli-show.d.ts.map +1 -0
  9. package/dist/lib/cli-show.js +178 -0
  10. package/dist/lib/cli-show.js.map +1 -0
  11. package/dist/lib/config-file-utils.d.ts +13 -0
  12. package/dist/lib/config-file-utils.d.ts.map +1 -1
  13. package/dist/lib/config-file-utils.js +33 -0
  14. package/dist/lib/config-file-utils.js.map +1 -1
  15. package/dist/lib/config.d.ts +16 -3
  16. package/dist/lib/config.d.ts.map +1 -1
  17. package/dist/lib/config.js +452 -216
  18. package/dist/lib/config.js.map +1 -1
  19. package/dist/lib/copilot.d.ts.map +1 -1
  20. package/dist/lib/copilot.js +3 -2
  21. package/dist/lib/copilot.js.map +1 -1
  22. package/dist/lib/entries.d.ts +3 -2
  23. package/dist/lib/entries.d.ts.map +1 -1
  24. package/dist/lib/format-utils.d.ts.map +1 -1
  25. package/dist/lib/format-utils.js +3 -2
  26. package/dist/lib/format-utils.js.map +1 -1
  27. package/dist/lib/format.d.ts.map +1 -1
  28. package/dist/lib/format.js +4 -2
  29. package/dist/lib/format.js.map +1 -1
  30. package/dist/lib/google-gemini-cli-companion.d.ts +29 -0
  31. package/dist/lib/google-gemini-cli-companion.d.ts.map +1 -0
  32. package/dist/lib/google-gemini-cli-companion.js +166 -0
  33. package/dist/lib/google-gemini-cli-companion.js.map +1 -0
  34. package/dist/lib/google-gemini-cli.d.ts +48 -0
  35. package/dist/lib/google-gemini-cli.d.ts.map +1 -0
  36. package/dist/lib/google-gemini-cli.js +447 -0
  37. package/dist/lib/google-gemini-cli.js.map +1 -0
  38. package/dist/lib/grouped-entry-normalization.js +1 -1
  39. package/dist/lib/grouped-entry-normalization.js.map +1 -1
  40. package/dist/lib/init-installer.js +2 -2
  41. package/dist/lib/opencode-config-providers.d.ts +6 -0
  42. package/dist/lib/opencode-config-providers.d.ts.map +1 -0
  43. package/dist/lib/opencode-config-providers.js +79 -0
  44. package/dist/lib/opencode-config-providers.js.map +1 -0
  45. package/dist/lib/opencode-go.d.ts +5 -4
  46. package/dist/lib/opencode-go.d.ts.map +1 -1
  47. package/dist/lib/opencode-go.js +32 -18
  48. package/dist/lib/opencode-go.js.map +1 -1
  49. package/dist/lib/provider-metadata.d.ts +1 -1
  50. package/dist/lib/provider-metadata.d.ts.map +1 -1
  51. package/dist/lib/provider-metadata.js +19 -0
  52. package/dist/lib/provider-metadata.js.map +1 -1
  53. package/dist/lib/provider-model-matching.d.ts +12 -0
  54. package/dist/lib/provider-model-matching.d.ts.map +1 -0
  55. package/dist/lib/provider-model-matching.js +23 -0
  56. package/dist/lib/provider-model-matching.js.map +1 -0
  57. package/dist/lib/quota-render-data.d.ts +4 -0
  58. package/dist/lib/quota-render-data.d.ts.map +1 -1
  59. package/dist/lib/quota-render-data.js +4 -1
  60. package/dist/lib/quota-render-data.js.map +1 -1
  61. package/dist/lib/quota-runtime-context.d.ts +43 -0
  62. package/dist/lib/quota-runtime-context.d.ts.map +1 -0
  63. package/dist/lib/quota-runtime-context.js +62 -0
  64. package/dist/lib/quota-runtime-context.js.map +1 -0
  65. package/dist/lib/quota-state.d.ts +1 -0
  66. package/dist/lib/quota-state.d.ts.map +1 -1
  67. package/dist/lib/quota-state.js +18 -4
  68. package/dist/lib/quota-state.js.map +1 -1
  69. package/dist/lib/quota-status.d.ts +18 -1
  70. package/dist/lib/quota-status.d.ts.map +1 -1
  71. package/dist/lib/quota-status.js +106 -22
  72. package/dist/lib/quota-status.js.map +1 -1
  73. package/dist/lib/toast-format-grouped.d.ts.map +1 -1
  74. package/dist/lib/toast-format-grouped.js +5 -3
  75. package/dist/lib/toast-format-grouped.js.map +1 -1
  76. package/dist/lib/tui-config-diagnostics.d.ts +7 -2
  77. package/dist/lib/tui-config-diagnostics.d.ts.map +1 -1
  78. package/dist/lib/tui-config-diagnostics.js +27 -8
  79. package/dist/lib/tui-config-diagnostics.js.map +1 -1
  80. package/dist/lib/tui-runtime.d.ts.map +1 -1
  81. package/dist/lib/tui-runtime.js +25 -16
  82. package/dist/lib/tui-runtime.js.map +1 -1
  83. package/dist/lib/types.d.ts +55 -9
  84. package/dist/lib/types.d.ts.map +1 -1
  85. package/dist/lib/types.js +1 -0
  86. package/dist/lib/types.js.map +1 -1
  87. package/dist/plugin.d.ts.map +1 -1
  88. package/dist/plugin.js +423 -159
  89. package/dist/plugin.js.map +1 -1
  90. package/dist/providers/chutes.d.ts.map +1 -1
  91. package/dist/providers/chutes.js +2 -4
  92. package/dist/providers/chutes.js.map +1 -1
  93. package/dist/providers/copilot.d.ts.map +1 -1
  94. package/dist/providers/copilot.js +5 -10
  95. package/dist/providers/copilot.js.map +1 -1
  96. package/dist/providers/cursor.js +2 -2
  97. package/dist/providers/cursor.js.map +1 -1
  98. package/dist/providers/google-account-format.d.ts +6 -0
  99. package/dist/providers/google-account-format.d.ts.map +1 -0
  100. package/dist/providers/google-account-format.js +21 -0
  101. package/dist/providers/google-account-format.js.map +1 -0
  102. package/dist/providers/google-antigravity.d.ts.map +1 -1
  103. package/dist/providers/google-antigravity.js +7 -29
  104. package/dist/providers/google-antigravity.js.map +1 -1
  105. package/dist/providers/google-gemini-cli.d.ts +3 -0
  106. package/dist/providers/google-gemini-cli.d.ts.map +1 -0
  107. package/dist/providers/google-gemini-cli.js +63 -0
  108. package/dist/providers/google-gemini-cli.js.map +1 -0
  109. package/dist/providers/minimax-coding-plan.js +2 -2
  110. package/dist/providers/minimax-coding-plan.js.map +1 -1
  111. package/dist/providers/nanogpt.d.ts.map +1 -1
  112. package/dist/providers/nanogpt.js +2 -2
  113. package/dist/providers/nanogpt.js.map +1 -1
  114. package/dist/providers/openai.d.ts.map +1 -1
  115. package/dist/providers/openai.js +2 -4
  116. package/dist/providers/openai.js.map +1 -1
  117. package/dist/providers/opencode-go.d.ts +2 -2
  118. package/dist/providers/opencode-go.d.ts.map +1 -1
  119. package/dist/providers/opencode-go.js +60 -11
  120. package/dist/providers/opencode-go.js.map +1 -1
  121. package/dist/providers/registry.d.ts.map +1 -1
  122. package/dist/providers/registry.js +2 -0
  123. package/dist/providers/registry.js.map +1 -1
  124. package/dist/providers/synthetic.d.ts.map +1 -1
  125. package/dist/providers/synthetic.js +2 -4
  126. package/dist/providers/synthetic.js.map +1 -1
  127. package/package.json +2 -1
@@ -0,0 +1,48 @@
1
+ import type { AuthData, GeminiCliAuthSourceKey, GeminiCliResult } from "./types.js";
2
+ export declare const DEFAULT_GEMINI_CLI_AUTH_CACHE_MAX_AGE_MS = 5000;
3
+ type RefreshParts = {
4
+ refreshToken: string;
5
+ projectId?: string;
6
+ managedProjectId?: string;
7
+ };
8
+ export type GeminiCliAccount = {
9
+ sourceKey: GeminiCliAuthSourceKey;
10
+ refreshToken: string;
11
+ projectId: string;
12
+ email?: string;
13
+ accessToken?: string;
14
+ expiresAt?: number;
15
+ };
16
+ export type GeminiCliAuthPresence = {
17
+ state: "missing";
18
+ sourceKey?: undefined;
19
+ accountCount: 0;
20
+ validAccountCount: 0;
21
+ } | {
22
+ state: "present";
23
+ sourceKey: GeminiCliAuthSourceKey;
24
+ accountCount: number;
25
+ validAccountCount: number;
26
+ } | {
27
+ state: "invalid";
28
+ sourceKey?: GeminiCliAuthSourceKey;
29
+ accountCount: number;
30
+ validAccountCount: number;
31
+ error: string;
32
+ };
33
+ type ConfigClient = {
34
+ config?: {
35
+ get?: () => Promise<{
36
+ data?: unknown;
37
+ }>;
38
+ };
39
+ };
40
+ export declare function parseGeminiCliRefreshParts(refresh: string | undefined): RefreshParts;
41
+ export declare function resolveGeminiCliAccounts(auth: AuthData | null | undefined, configuredProjectId?: string): GeminiCliAccount[];
42
+ export declare function resolveGeminiCliConfiguredProjectId(client?: ConfigClient): Promise<string | undefined>;
43
+ export declare function inspectGeminiCliAuthPresence(client?: ConfigClient): Promise<GeminiCliAuthPresence>;
44
+ export declare function hasGeminiCliQuotaRuntimeAvailable(client?: ConfigClient): Promise<boolean>;
45
+ export declare function queryGeminiCliQuota(client?: ConfigClient): Promise<GeminiCliResult>;
46
+ export declare function clearGeminiCliRuntimeCacheForTests(): void;
47
+ export {};
48
+ //# sourceMappingURL=google-gemini-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-gemini-cli.d.ts","sourceRoot":"","sources":["../../src/lib/google-gemini-cli.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,QAAQ,EACR,sBAAsB,EAGtB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,wCAAwC,OAAQ,CAAC;AAiB9D,KAAK,YAAY,GAAG;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,sBAAsB,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,EAAE,CAAC,CAAC;IAChB,iBAAiB,EAAE,CAAC,CAAC;CACtB,GACD;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,sBAAsB,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GACD;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAcN,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACzC,CAAC;CACH,CAAC;AAUF,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAOpF;AA8BD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACjC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,gBAAgB,EAAE,CA0CpB;AA0BD,wBAAsB,mCAAmC,CACvD,MAAM,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuB7B;AAED,wBAAsB,4BAA4B,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4BxG;AAED,wBAAsB,iCAAiC,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAW/F;AA8TD,wBAAsB,mBAAmB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CA+CzF;AAED,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD"}
@@ -0,0 +1,447 @@
1
+ import { readAuthFileCached } from "./opencode-auth.js";
2
+ import { fetchWithTimeout } from "./http.js";
3
+ import { getCachedAccessToken, makeAccountCacheKey, setCachedAccessToken, } from "./google-token-cache.js";
4
+ import { clearGeminiCliCompanionCacheForTests as clearGeminiCliCompanionResolutionCacheForTests, inspectGeminiCliCompanionPresence, resolveGeminiCliClientCredentials, } from "./google-gemini-cli-companion.js";
5
+ export const DEFAULT_GEMINI_CLI_AUTH_CACHE_MAX_AGE_MS = 5_000;
6
+ const GEMINI_CLI_AUTH_KEYS = [
7
+ "google-gemini-cli",
8
+ "gemini-cli",
9
+ "opencode-gemini-auth",
10
+ "gemini",
11
+ "google",
12
+ ];
13
+ const GEMINI_TOKEN_REFRESH_URL = "https://oauth2.googleapis.com/token";
14
+ const GEMINI_QUOTA_API_URL = "https://cloudcode-pa.googleapis.com/v1internal:retrieveUserQuota";
15
+ const GEMINI_TOKEN_TIMEOUT_MS = 8_000;
16
+ const GEMINI_QUOTA_TIMEOUT_MS = 6_000;
17
+ const GEMINI_ACCOUNTS_CONCURRENCY = 3;
18
+ const GEMINI_CLI_USER_AGENT = `GeminiCLI/opencode-quota (${process.platform}; ${process.arch})`;
19
+ function normalizeString(value) {
20
+ if (typeof value !== "string") {
21
+ return undefined;
22
+ }
23
+ const trimmed = value.trim();
24
+ return trimmed || undefined;
25
+ }
26
+ export function parseGeminiCliRefreshParts(refresh) {
27
+ const [refreshToken = "", projectId = "", managedProjectId = ""] = (refresh ?? "").split("|");
28
+ return {
29
+ refreshToken: refreshToken.trim(),
30
+ ...(normalizeString(projectId) ? { projectId: projectId.trim() } : {}),
31
+ ...(normalizeString(managedProjectId) ? { managedProjectId: managedProjectId.trim() } : {}),
32
+ };
33
+ }
34
+ function getAuthEntry(auth, sourceKey) {
35
+ return auth[sourceKey];
36
+ }
37
+ function resolveEmail(entry) {
38
+ return (normalizeString(entry.email) ??
39
+ normalizeString(entry.accountEmail) ??
40
+ normalizeString(entry.login));
41
+ }
42
+ function resolveProjectId(entry, parts, configuredProjectId) {
43
+ return (normalizeString(entry.projectId) ??
44
+ normalizeString(entry.projectID) ??
45
+ normalizeString(entry.managedProjectId) ??
46
+ normalizeString(entry.quotaProjectId) ??
47
+ parts.projectId ??
48
+ parts.managedProjectId ??
49
+ normalizeString(configuredProjectId));
50
+ }
51
+ export function resolveGeminiCliAccounts(auth, configuredProjectId) {
52
+ if (!auth) {
53
+ return [];
54
+ }
55
+ const accounts = [];
56
+ const seen = new Set();
57
+ for (const sourceKey of GEMINI_CLI_AUTH_KEYS) {
58
+ const entry = getAuthEntry(auth, sourceKey);
59
+ if (!entry || entry.type !== "oauth") {
60
+ continue;
61
+ }
62
+ const parts = parseGeminiCliRefreshParts(entry.refresh);
63
+ if (!parts.refreshToken) {
64
+ continue;
65
+ }
66
+ const projectId = resolveProjectId(entry, parts, configuredProjectId);
67
+ if (!projectId) {
68
+ continue;
69
+ }
70
+ const email = resolveEmail(entry);
71
+ const key = `${parts.refreshToken}\n${projectId}`;
72
+ if (seen.has(key)) {
73
+ continue;
74
+ }
75
+ seen.add(key);
76
+ accounts.push({
77
+ sourceKey,
78
+ refreshToken: parts.refreshToken,
79
+ projectId,
80
+ ...(email ? { email } : {}),
81
+ ...(normalizeString(entry.access) ? { accessToken: entry.access.trim() } : {}),
82
+ ...(typeof entry.expires === "number" ? { expiresAt: entry.expires } : {}),
83
+ });
84
+ }
85
+ return accounts;
86
+ }
87
+ function countGeminiCliAuthEntries(auth) {
88
+ if (!auth) {
89
+ return 0;
90
+ }
91
+ return GEMINI_CLI_AUTH_KEYS.reduce((count, sourceKey) => {
92
+ const entry = getAuthEntry(auth, sourceKey);
93
+ return entry && entry.type === "oauth" ? count + 1 : count;
94
+ }, 0);
95
+ }
96
+ function firstGeminiCliAuthKey(auth) {
97
+ if (!auth) {
98
+ return undefined;
99
+ }
100
+ return GEMINI_CLI_AUTH_KEYS.find((sourceKey) => getAuthEntry(auth, sourceKey)?.type === "oauth");
101
+ }
102
+ function getCompanionQuotaError(state) {
103
+ return state === "missing"
104
+ ? "Gemini CLI requires the opencode-gemini-auth plugin"
105
+ : "Installed opencode-gemini-auth package is incompatible";
106
+ }
107
+ export async function resolveGeminiCliConfiguredProjectId(client) {
108
+ const explicitEnvProjectId = normalizeString(process.env.OPENCODE_GEMINI_PROJECT_ID);
109
+ if (explicitEnvProjectId) {
110
+ return explicitEnvProjectId;
111
+ }
112
+ if (client?.config?.get) {
113
+ try {
114
+ const result = await client.config.get();
115
+ const data = result?.data;
116
+ const configProjectId = normalizeString(data?.provider?.google?.options?.projectId);
117
+ if (configProjectId) {
118
+ return configProjectId;
119
+ }
120
+ }
121
+ catch {
122
+ // ignore and fall back to generic Google project env vars below
123
+ }
124
+ }
125
+ return (normalizeString(process.env.GOOGLE_CLOUD_PROJECT) ??
126
+ normalizeString(process.env.GOOGLE_CLOUD_PROJECT_ID));
127
+ }
128
+ export async function inspectGeminiCliAuthPresence(client) {
129
+ const [auth, configuredProjectId] = await Promise.all([
130
+ readAuthFileCached({ maxAgeMs: DEFAULT_GEMINI_CLI_AUTH_CACHE_MAX_AGE_MS }),
131
+ resolveGeminiCliConfiguredProjectId(client),
132
+ ]);
133
+ const accountCount = countGeminiCliAuthEntries(auth);
134
+ if (accountCount === 0) {
135
+ return { state: "missing", accountCount: 0, validAccountCount: 0 };
136
+ }
137
+ const accounts = resolveGeminiCliAccounts(auth, configuredProjectId);
138
+ const sourceKey = accounts[0]?.sourceKey ?? firstGeminiCliAuthKey(auth);
139
+ if (accounts.length === 0) {
140
+ return {
141
+ state: "invalid",
142
+ ...(sourceKey ? { sourceKey } : {}),
143
+ accountCount,
144
+ validAccountCount: 0,
145
+ error: "Gemini CLI OAuth auth is missing a refresh token or project id",
146
+ };
147
+ }
148
+ return {
149
+ state: "present",
150
+ sourceKey: accounts[0].sourceKey,
151
+ accountCount,
152
+ validAccountCount: accounts.length,
153
+ };
154
+ }
155
+ export async function hasGeminiCliQuotaRuntimeAvailable(client) {
156
+ const [authPresence, companionPresence] = await Promise.all([
157
+ inspectGeminiCliAuthPresence(client),
158
+ inspectGeminiCliCompanionPresence(),
159
+ ]);
160
+ return (authPresence.state === "present" &&
161
+ authPresence.validAccountCount > 0 &&
162
+ companionPresence.state === "present");
163
+ }
164
+ async function mapWithConcurrency(params) {
165
+ const n = Math.max(1, Math.trunc(params.concurrency));
166
+ const results = new Array(params.items.length);
167
+ let nextIndex = 0;
168
+ const workers = Array.from({ length: Math.min(n, params.items.length) }, async () => {
169
+ while (true) {
170
+ const idx = nextIndex++;
171
+ if (idx >= params.items.length)
172
+ return;
173
+ results[idx] = await params.fn(params.items[idx], idx);
174
+ }
175
+ });
176
+ await Promise.all(workers);
177
+ return results;
178
+ }
179
+ async function refreshAccessToken(params) {
180
+ try {
181
+ const response = await fetchWithTimeout(GEMINI_TOKEN_REFRESH_URL, {
182
+ method: "POST",
183
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
184
+ body: new URLSearchParams({
185
+ client_id: params.clientId,
186
+ client_secret: params.clientSecret,
187
+ refresh_token: params.refreshToken,
188
+ grant_type: "refresh_token",
189
+ }),
190
+ }, params.timeoutMs ?? GEMINI_TOKEN_TIMEOUT_MS);
191
+ if (!response.ok) {
192
+ try {
193
+ const errorData = (await response.json());
194
+ if (errorData.error === "invalid_grant") {
195
+ return { error: "Token revoked" };
196
+ }
197
+ return { error: errorData.error_description || `HTTP ${response.status}` };
198
+ }
199
+ catch {
200
+ return { error: `HTTP ${response.status}` };
201
+ }
202
+ }
203
+ const data = (await response.json());
204
+ return {
205
+ accessToken: data.access_token,
206
+ expiresIn: data.expires_in,
207
+ };
208
+ }
209
+ catch (err) {
210
+ if (err instanceof Error && err.message.includes("timeout")) {
211
+ return { error: "Token refresh timeout" };
212
+ }
213
+ return { error: "Token refresh failed" };
214
+ }
215
+ }
216
+ async function refreshGeminiCliAccessTokenWithCache(params) {
217
+ const skewMs = params.skewMs ?? 2 * 60_000;
218
+ const key = makeAccountCacheKey({
219
+ refreshToken: params.account.refreshToken,
220
+ projectId: params.account.projectId,
221
+ email: params.account.email,
222
+ });
223
+ if (!params.force) {
224
+ const cached = await getCachedAccessToken({ key, skewMs });
225
+ if (cached)
226
+ return { accessToken: cached.accessToken };
227
+ if (params.account.accessToken &&
228
+ typeof params.account.expiresAt === "number" &&
229
+ params.account.expiresAt > Date.now() + skewMs) {
230
+ return { accessToken: params.account.accessToken };
231
+ }
232
+ }
233
+ const refreshed = await refreshAccessToken({
234
+ refreshToken: params.account.refreshToken,
235
+ clientId: params.credentials.clientId,
236
+ clientSecret: params.credentials.clientSecret,
237
+ });
238
+ if ("error" in refreshed)
239
+ return refreshed;
240
+ await setCachedAccessToken({
241
+ key,
242
+ entry: {
243
+ accessToken: refreshed.accessToken,
244
+ expiresAt: Date.now() + Math.max(1, refreshed.expiresIn) * 1000,
245
+ projectId: params.account.projectId,
246
+ email: params.account.email,
247
+ },
248
+ });
249
+ return { accessToken: refreshed.accessToken };
250
+ }
251
+ async function retrieveGeminiCliQuota(accessToken, projectId) {
252
+ const response = await fetchWithTimeout(GEMINI_QUOTA_API_URL, {
253
+ method: "POST",
254
+ headers: {
255
+ "Content-Type": "application/json",
256
+ Authorization: `Bearer ${accessToken}`,
257
+ "User-Agent": GEMINI_CLI_USER_AGENT,
258
+ },
259
+ body: JSON.stringify({ project: projectId }),
260
+ }, GEMINI_QUOTA_TIMEOUT_MS);
261
+ if (!response.ok) {
262
+ if (response.status === 401 || response.status === 403) {
263
+ throw new Error(`Gemini CLI quota auth error: ${response.status}`);
264
+ }
265
+ throw new Error(`Gemini CLI quota API error: ${response.status}`);
266
+ }
267
+ return response.json();
268
+ }
269
+ function formatDisplayName(modelId) {
270
+ const cleaned = modelId.replace(/_/g, "-").trim();
271
+ if (!cleaned) {
272
+ return "Gemini";
273
+ }
274
+ const words = cleaned
275
+ .replace(/^gemini-/i, "")
276
+ .split("-")
277
+ .filter(Boolean)
278
+ .map((part) => {
279
+ if (/^[0-9]+(?:\.[0-9]+)*$/.test(part))
280
+ return part;
281
+ return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
282
+ });
283
+ return words.length > 0 ? `Gemini ${words.join(" ")}` : "Gemini";
284
+ }
285
+ const GEMINI_CLI_QUALITY_TIERS = [
286
+ { key: "pro", displayName: "Gemini Pro", order: 0 },
287
+ { key: "flash", displayName: "Gemini Flash", order: 1 },
288
+ { key: "flashLite", displayName: "Gemini Flash Lite", order: 2 },
289
+ ];
290
+ function getGeminiCliQualityTier(modelId) {
291
+ const normalized = modelId.toLowerCase().replace(/_/g, "-");
292
+ const tokens = normalized.split(/[^a-z0-9]+/).filter(Boolean);
293
+ if (normalized.includes("flash-lite") || (tokens.includes("flash") && tokens.includes("lite"))) {
294
+ return GEMINI_CLI_QUALITY_TIERS[2];
295
+ }
296
+ if (tokens.includes("pro")) {
297
+ return GEMINI_CLI_QUALITY_TIERS[0];
298
+ }
299
+ if (tokens.includes("flash")) {
300
+ return GEMINI_CLI_QUALITY_TIERS[1];
301
+ }
302
+ return undefined;
303
+ }
304
+ function aggregateGeminiCliQualityTiers(buckets) {
305
+ const groupedBuckets = new Map();
306
+ const unknownBuckets = [];
307
+ for (const bucket of buckets) {
308
+ const tier = getGeminiCliQualityTier(bucket.modelId);
309
+ if (!tier) {
310
+ unknownBuckets.push(bucket);
311
+ continue;
312
+ }
313
+ const candidate = { ...bucket, displayName: tier.displayName };
314
+ const existing = groupedBuckets.get(tier.key);
315
+ if (!existing || candidate.percentRemaining < existing.percentRemaining) {
316
+ groupedBuckets.set(tier.key, candidate);
317
+ }
318
+ }
319
+ return [
320
+ ...GEMINI_CLI_QUALITY_TIERS.flatMap((tier) => {
321
+ const bucket = groupedBuckets.get(tier.key);
322
+ return bucket ? [bucket] : [];
323
+ }),
324
+ ...unknownBuckets,
325
+ ];
326
+ }
327
+ function mapQuotaBuckets(buckets, account) {
328
+ if (!buckets) {
329
+ return [];
330
+ }
331
+ const normalizedBuckets = buckets
332
+ .filter((bucket) => normalizeString(bucket.modelId))
333
+ .map((bucket) => {
334
+ const modelId = normalizeString(bucket.modelId);
335
+ const remainingFraction = bucket.remainingFraction;
336
+ const percentRemaining = typeof remainingFraction === "number" && Number.isFinite(remainingFraction)
337
+ ? Math.round(remainingFraction * 100)
338
+ : 0;
339
+ return {
340
+ modelId,
341
+ displayName: formatDisplayName(modelId),
342
+ percentRemaining,
343
+ ...(normalizeString(bucket.resetTime) ? { resetTimeIso: bucket.resetTime.trim() } : {}),
344
+ ...(normalizeString(bucket.remainingAmount)
345
+ ? { remainingAmount: bucket.remainingAmount.trim() }
346
+ : {}),
347
+ ...(normalizeString(bucket.tokenType) ? { tokenType: bucket.tokenType.trim() } : {}),
348
+ ...(account.email ? { accountEmail: account.email } : {}),
349
+ sourceKey: account.sourceKey,
350
+ };
351
+ });
352
+ return aggregateGeminiCliQualityTiers(normalizedBuckets);
353
+ }
354
+ async function fetchAccountQuota(params) {
355
+ const accountEmail = params.account.email || params.account.sourceKey;
356
+ try {
357
+ const tokenResult = await refreshGeminiCliAccessTokenWithCache({
358
+ account: params.account,
359
+ credentials: params.credentials,
360
+ });
361
+ if ("error" in tokenResult) {
362
+ return { success: false, error: tokenResult.error, accountEmail };
363
+ }
364
+ let quota;
365
+ try {
366
+ quota = await retrieveGeminiCliQuota(tokenResult.accessToken, params.account.projectId);
367
+ }
368
+ catch (err) {
369
+ if (err instanceof Error && err.message.includes("auth error")) {
370
+ const retryToken = await refreshGeminiCliAccessTokenWithCache({
371
+ account: params.account,
372
+ credentials: params.credentials,
373
+ force: true,
374
+ });
375
+ if ("error" in retryToken) {
376
+ return { success: false, error: retryToken.error, accountEmail };
377
+ }
378
+ quota = await retrieveGeminiCliQuota(retryToken.accessToken, params.account.projectId);
379
+ }
380
+ else {
381
+ throw err;
382
+ }
383
+ }
384
+ return {
385
+ success: true,
386
+ buckets: mapQuotaBuckets(quota.buckets, params.account),
387
+ accountEmail,
388
+ };
389
+ }
390
+ catch (err) {
391
+ if (err instanceof Error && err.message.includes("timeout")) {
392
+ return { success: false, error: "API timeout", accountEmail };
393
+ }
394
+ return {
395
+ success: false,
396
+ error: err instanceof Error ? err.message : String(err),
397
+ accountEmail,
398
+ };
399
+ }
400
+ }
401
+ export async function queryGeminiCliQuota(client) {
402
+ const [auth, configuredProjectId] = await Promise.all([
403
+ readAuthFileCached({ maxAgeMs: DEFAULT_GEMINI_CLI_AUTH_CACHE_MAX_AGE_MS }),
404
+ resolveGeminiCliConfiguredProjectId(client),
405
+ ]);
406
+ const accounts = resolveGeminiCliAccounts(auth, configuredProjectId);
407
+ if (accounts.length === 0) {
408
+ return null;
409
+ }
410
+ const credentials = await resolveGeminiCliClientCredentials();
411
+ if (credentials.state !== "configured") {
412
+ return {
413
+ success: false,
414
+ error: getCompanionQuotaError(credentials.state),
415
+ };
416
+ }
417
+ const results = await mapWithConcurrency({
418
+ items: accounts,
419
+ concurrency: GEMINI_ACCOUNTS_CONCURRENCY,
420
+ fn: async (account) => fetchAccountQuota({ account, credentials }),
421
+ });
422
+ const allBuckets = [];
423
+ const errors = [];
424
+ for (const result of results) {
425
+ if (result.success && result.buckets && result.buckets.length > 0) {
426
+ allBuckets.push(...result.buckets);
427
+ }
428
+ else if (!result.success && result.error && result.accountEmail) {
429
+ errors.push({ email: result.accountEmail, error: result.error });
430
+ }
431
+ }
432
+ if (allBuckets.length === 0 && errors.length === 0) {
433
+ return {
434
+ success: false,
435
+ error: "No Gemini CLI quota data available",
436
+ };
437
+ }
438
+ return {
439
+ success: true,
440
+ buckets: allBuckets,
441
+ errors: errors.length > 0 ? errors : undefined,
442
+ };
443
+ }
444
+ export function clearGeminiCliRuntimeCacheForTests() {
445
+ clearGeminiCliCompanionResolutionCacheForTests();
446
+ }
447
+ //# sourceMappingURL=google-gemini-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-gemini-cli.js","sourceRoot":"","sources":["../../src/lib/google-gemini-cli.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@ function getDurationRankFromText(value) {
29
29
  return null;
30
30
  if (/\b(?:rpm|per minute|minute|minutes)\b/u.test(text))
31
31
  return 1;
32
- if (/\b(?:5h|5 h|5-hour|5 hour|five-hour|five hour)\b/u.test(text))
32
+ if (/\b(?:rolling|5h|5 h|5-hour|5 hour|five-hour|five hour)\b/u.test(text))
33
33
  return 300;
34
34
  if (/\b(?:hourly|1h|1 h|1-hour|1 hour|hour)\b/u.test(text))
35
35
  return 60;
@@ -1 +1 @@
1
- {"version":3,"file":"grouped-entry-normalization.js","sourceRoot":"","sources":["../../src/lib/grouped-entry-normalization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grouped-entry-normalization.js","sourceRoot":"","sources":["../../src/lib/grouped-entry-normalization.ts"],"names":[],"mappings":"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"}
@@ -398,7 +398,7 @@ async function promptForSelections(prompts) {
398
398
  { label: "Toast", value: "toast" },
399
399
  { label: "Sidebar", value: "sidebar" },
400
400
  { label: "Toast + Sidebar", value: "toast_sidebar" },
401
- { label: "None (manual /quota and /tokens_* only)", value: "none" },
401
+ { label: "None (slash commands and terminal only)", value: "none" },
402
402
  ],
403
403
  });
404
404
  if (prompts.isCancel(quotaUi))
@@ -433,7 +433,7 @@ async function promptForSelections(prompts) {
433
433
  label: "Single window",
434
434
  value: "singleWindow",
435
435
  },
436
- { label: "All windows", value: "allWindows" }
436
+ { label: "All windows", value: "allWindows" },
437
437
  ],
438
438
  });
439
439
  if (prompts.isCancel(formatStyle))
@@ -0,0 +1,6 @@
1
+ export interface LoadConfiguredProviderIdsOptions {
2
+ configRootDir: string;
3
+ }
4
+ export declare function loadConfiguredOpenCodeConfig(options: LoadConfiguredProviderIdsOptions): Promise<Record<string, unknown>>;
5
+ export declare function loadConfiguredProviderIds(options: LoadConfiguredProviderIdsOptions): Promise<string[]>;
6
+ //# sourceMappingURL=opencode-config-providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-config-providers.d.ts","sourceRoot":"","sources":["../../src/lib/opencode-config-providers.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,gCAAgC;IAC/C,aAAa,EAAE,MAAM,CAAC;CACvB;AA4ED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAYlC;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB"}