@slkiser/opencode-quota 2.11.1 → 2.13.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 (43) hide show
  1. package/README.md +45 -16
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/anthropic.d.ts +44 -34
  6. package/dist/lib/anthropic.d.ts.map +1 -1
  7. package/dist/lib/anthropic.js +393 -117
  8. package/dist/lib/anthropic.js.map +1 -1
  9. package/dist/lib/config.d.ts.map +1 -1
  10. package/dist/lib/config.js +9 -0
  11. package/dist/lib/config.js.map +1 -1
  12. package/dist/lib/entries.d.ts +1 -0
  13. package/dist/lib/entries.d.ts.map +1 -1
  14. package/dist/lib/minimax-auth.d.ts +29 -0
  15. package/dist/lib/minimax-auth.d.ts.map +1 -0
  16. package/dist/lib/minimax-auth.js +61 -0
  17. package/dist/lib/minimax-auth.js.map +1 -0
  18. package/dist/lib/provider-metadata.d.ts.map +1 -1
  19. package/dist/lib/provider-metadata.js +2 -0
  20. package/dist/lib/provider-metadata.js.map +1 -1
  21. package/dist/lib/quota-status.d.ts +1 -0
  22. package/dist/lib/quota-status.d.ts.map +1 -1
  23. package/dist/lib/quota-status.js +61 -0
  24. package/dist/lib/quota-status.js.map +1 -1
  25. package/dist/lib/types.d.ts +22 -0
  26. package/dist/lib/types.d.ts.map +1 -1
  27. package/dist/lib/types.js +1 -0
  28. package/dist/lib/types.js.map +1 -1
  29. package/dist/plugin.d.ts.map +1 -1
  30. package/dist/plugin.js +52 -23
  31. package/dist/plugin.js.map +1 -1
  32. package/dist/providers/anthropic.d.ts +2 -4
  33. package/dist/providers/anthropic.d.ts.map +1 -1
  34. package/dist/providers/anthropic.js +10 -6
  35. package/dist/providers/anthropic.js.map +1 -1
  36. package/dist/providers/minimax-coding-plan.d.ts +19 -0
  37. package/dist/providers/minimax-coding-plan.d.ts.map +1 -0
  38. package/dist/providers/minimax-coding-plan.js +219 -0
  39. package/dist/providers/minimax-coding-plan.js.map +1 -0
  40. package/dist/providers/registry.d.ts.map +1 -1
  41. package/dist/providers/registry.js +2 -0
  42. package/dist/providers/registry.js.map +1 -1
  43. package/package.json +1 -1
@@ -1,64 +1,53 @@
1
1
  /**
2
- * Anthropic Claude quota fetcher.
2
+ * Anthropic Claude quota probing.
3
3
  *
4
- * Reads a Claude Code OAuth access token from local Claude credentials and
5
- * queries the Anthropic usage API to surface 5-hour and 7-day rate-limit
6
- * windows.
7
- *
8
- * Supported credential sources:
9
- * 1. ~/.claude/.credentials.json → claudeAiOauth.accessToken
10
- * 2. CLAUDE_CODE_OAUTH_TOKEN environment variable
4
+ * Uses the local Claude CLI/runtime to detect install/auth state and surface
5
+ * quota windows only when the official runtime exposes them locally. This
6
+ * module does not read Claude consumer OAuth tokens or call Anthropic's OAuth
7
+ * usage endpoint directly.
11
8
  */
12
- import { existsSync, readFileSync } from "fs";
13
- import { homedir } from "os";
14
- import { join } from "path";
9
+ import { execFile } from "child_process";
15
10
  import { sanitizeDisplaySnippet, sanitizeDisplayText } from "./display-sanitize.js";
16
- import { fetchWithTimeout } from "./http.js";
17
- const ANTHROPIC_USAGE_URL = "https://api.anthropic.com/api/oauth/usage";
18
- const ANTHROPIC_BETA_HEADER = "oauth-2025-04-20";
19
- const CREDENTIALS_PATH = join(homedir(), ".claude", ".credentials.json");
20
- // =============================================================================
21
- // Credential loading
22
- // =============================================================================
23
- function normalizeOptionalTimestamp(value) {
24
- return typeof value === "number" && Number.isFinite(value) ? value : undefined;
25
- }
26
- function readCredentialsFile() {
27
- if (!existsSync(CREDENTIALS_PATH)) {
28
- return null;
29
- }
30
- try {
31
- const content = readFileSync(CREDENTIALS_PATH, "utf-8");
32
- return JSON.parse(content);
33
- }
34
- catch {
35
- return null;
36
- }
11
+ const DEFAULT_CLAUDE_BINARY = "claude";
12
+ const CLAUDE_COMMAND_TIMEOUT_MS = 3_000;
13
+ const ANTHROPIC_DIAGNOSTICS_TTL_MS = 5_000;
14
+ const diagnosticsCache = new Map();
15
+ export function resolveAnthropicBinaryPath(binaryPath) {
16
+ const trimmed = binaryPath?.trim();
17
+ return trimmed ? trimmed : DEFAULT_CLAUDE_BINARY;
18
+ }
19
+ function formatCommandDisplayArg(value) {
20
+ const sanitized = sanitizeDisplayText(value);
21
+ return /[\s"]/u.test(sanitized) ? JSON.stringify(sanitized) : sanitized;
22
+ }
23
+ function formatCommandDisplay(parts) {
24
+ return parts.map(formatCommandDisplayArg).join(" ");
37
25
  }
38
- export function resolveAnthropicCredentialsFromFile(credentials) {
39
- const fileToken = credentials?.claudeAiOauth?.accessToken?.trim();
40
- if (fileToken) {
26
+ function quoteWindowsCmdArg(value) {
27
+ const escaped = value.replace(/(\\*)"/g, "$1$1\\\"").replace(/(\\+)$/g, "$1$1");
28
+ return `"${escaped}"`;
29
+ }
30
+ export function buildClaudeCommandInvocation(binaryPath, args, runtime = {}) {
31
+ const resolvedBinaryPath = resolveAnthropicBinaryPath(binaryPath);
32
+ const display = formatCommandDisplay([resolvedBinaryPath, ...args]);
33
+ if ((runtime.platform ?? process.platform) === "win32") {
41
34
  return {
42
- accessToken: fileToken,
43
- expiresAt: normalizeOptionalTimestamp(credentials?.claudeAiOauth?.expiresAt),
44
- source: "file",
35
+ file: runtime.comspec?.trim() || process.env["ComSpec"]?.trim() || "cmd.exe",
36
+ args: ["/d", "/s", "/c", [resolvedBinaryPath, ...args].map(quoteWindowsCmdArg).join(" ")],
37
+ display,
45
38
  };
46
39
  }
47
- const envToken = process.env["CLAUDE_CODE_OAUTH_TOKEN"]?.trim();
48
- if (envToken) {
49
- return { accessToken: envToken, source: "env" };
50
- }
51
- return null;
52
- }
53
- export async function resolveAnthropicCredentials() {
54
- return resolveAnthropicCredentialsFromFile(readCredentialsFile());
40
+ return {
41
+ file: resolvedBinaryPath,
42
+ args: [...args],
43
+ display,
44
+ };
55
45
  }
56
- export async function hasAnthropicCredentialsConfigured() {
57
- return (await resolveAnthropicCredentials()) !== null;
46
+ function asRecord(value) {
47
+ return value && typeof value === "object" && !Array.isArray(value)
48
+ ? value
49
+ : null;
58
50
  }
59
- // =============================================================================
60
- // Quota fetch
61
- // =============================================================================
62
51
  function normalizeResetTimeIso(value) {
63
52
  if (typeof value !== "string") {
64
53
  return undefined;
@@ -73,102 +62,389 @@ function normalizeResetTimeIso(value) {
73
62
  }
74
63
  return new Date(parsed).toISOString();
75
64
  }
76
- function parseUsageResponse(data) {
77
- if (!data || typeof data !== "object")
78
- return null;
79
- const obj = data;
80
- const fiveHour = obj["five_hour"];
81
- const sevenDay = obj["seven_day"];
82
- if (!fiveHour || !sevenDay)
65
+ function normalizeUsagePercent(value) {
66
+ if (typeof value === "number" && Number.isFinite(value)) {
67
+ return value;
68
+ }
69
+ if (typeof value === "string") {
70
+ const trimmed = value.trim();
71
+ if (!trimmed) {
72
+ return undefined;
73
+ }
74
+ const parsed = Number(trimmed);
75
+ return Number.isFinite(parsed) ? parsed : undefined;
76
+ }
77
+ return undefined;
78
+ }
79
+ function getWindowUsedPercent(window) {
80
+ const candidates = [
81
+ window["utilization"],
82
+ window["used_percentage"],
83
+ window["usedPercentage"],
84
+ window["used_percent"],
85
+ window["usedPercent"],
86
+ window["percent_used"],
87
+ window["percentUsed"],
88
+ ];
89
+ for (const candidate of candidates) {
90
+ const normalized = normalizeUsagePercent(candidate);
91
+ if (normalized !== undefined) {
92
+ return normalized;
93
+ }
94
+ }
95
+ return undefined;
96
+ }
97
+ function getWindowResetTimeIso(window) {
98
+ return normalizeResetTimeIso(window["resets_at"] ?? window["resetsAt"] ?? window["reset_at"] ?? window["resetAt"]);
99
+ }
100
+ function parseQuotaWindow(window) {
101
+ const record = asRecord(window);
102
+ if (!record) {
83
103
  return null;
84
- const fiveUsed = Number(fiveHour["used_percentage"] ?? fiveHour["usedPercentage"]);
85
- const sevenUsed = Number(sevenDay["used_percentage"] ?? sevenDay["usedPercentage"]);
86
- if (!Number.isFinite(fiveUsed) || !Number.isFinite(sevenUsed))
104
+ }
105
+ const used = getWindowUsedPercent(record);
106
+ if (used === undefined) {
87
107
  return null;
108
+ }
88
109
  return {
89
- success: true,
90
- five_hour: {
91
- percentRemaining: Math.max(0, Math.min(100, Math.round(100 - fiveUsed))),
92
- resetTimeIso: normalizeResetTimeIso(fiveHour["resets_at"] ?? fiveHour["resetsAt"]),
93
- },
94
- seven_day: {
95
- percentRemaining: Math.max(0, Math.min(100, Math.round(100 - sevenUsed))),
96
- resetTimeIso: normalizeResetTimeIso(sevenDay["resets_at"] ?? sevenDay["resetsAt"]),
97
- },
110
+ percentRemaining: Math.max(0, Math.min(100, Math.round(100 - used))),
111
+ resetTimeIso: getWindowResetTimeIso(record),
98
112
  };
99
113
  }
100
- /**
101
- * Query the Anthropic OAuth usage API for Claude rate-limit windows.
102
- *
103
- * Returns null when no credentials are found (provider not configured).
104
- * Returns an error result when credentials exist but the fetch fails.
105
- */
106
- export async function queryAnthropicQuota() {
107
- const resolved = await resolveAnthropicCredentials();
108
- if (!resolved) {
109
- return null;
114
+ function getUsageRoots(data) {
115
+ const root = asRecord(data);
116
+ if (!root) {
117
+ return [];
110
118
  }
111
- if (resolved.expiresAt !== undefined && resolved.expiresAt <= Date.now()) {
119
+ const candidates = [
120
+ root,
121
+ asRecord(root["quota"]),
122
+ asRecord(root["usage"]),
123
+ asRecord(root["rate_limits"]),
124
+ asRecord(root["rateLimits"]),
125
+ asRecord(root["oauth_usage"]),
126
+ asRecord(root["oauthUsage"]),
127
+ ];
128
+ const seen = new Set();
129
+ const roots = [];
130
+ for (const candidate of candidates) {
131
+ if (!candidate || seen.has(candidate)) {
132
+ continue;
133
+ }
134
+ seen.add(candidate);
135
+ roots.push(candidate);
136
+ }
137
+ return roots;
138
+ }
139
+ function parseUsageResponse(data) {
140
+ for (const root of getUsageRoots(data)) {
141
+ const fiveHour = parseQuotaWindow(root["five_hour"] ?? root["fiveHour"]);
142
+ const sevenDay = parseQuotaWindow(root["seven_day"] ?? root["sevenDay"]);
143
+ if (!fiveHour || !sevenDay) {
144
+ continue;
145
+ }
112
146
  return {
113
- success: false,
114
- error: "Anthropic token expired; refresh ~/.claude/.credentials.json or CLAUDE_CODE_OAUTH_TOKEN",
147
+ success: true,
148
+ five_hour: fiveHour,
149
+ seven_day: sevenDay,
115
150
  };
116
151
  }
117
- let response;
118
- try {
119
- response = await fetchWithTimeout(ANTHROPIC_USAGE_URL, {
120
- headers: {
121
- Authorization: `Bearer ${resolved.accessToken}`,
122
- "anthropic-beta": ANTHROPIC_BETA_HEADER,
123
- },
124
- });
152
+ return null;
153
+ }
154
+ function extractAuthBoolean(data) {
155
+ const record = asRecord(data);
156
+ if (!record) {
157
+ return undefined;
125
158
  }
126
- catch (err) {
159
+ for (const candidate of [
160
+ record["authenticated"],
161
+ record["isAuthenticated"],
162
+ record["loggedIn"],
163
+ ]) {
164
+ if (typeof candidate === "boolean") {
165
+ return candidate;
166
+ }
167
+ }
168
+ const authRecord = asRecord(record["auth"]);
169
+ if (authRecord) {
170
+ for (const candidate of [authRecord["authenticated"], authRecord["loggedIn"]]) {
171
+ if (typeof candidate === "boolean") {
172
+ return candidate;
173
+ }
174
+ }
175
+ }
176
+ const status = record["status"];
177
+ if (typeof status === "string") {
178
+ const normalized = status.trim().toLowerCase();
179
+ if (normalized === "authenticated") {
180
+ return true;
181
+ }
182
+ if (normalized === "unauthenticated") {
183
+ return false;
184
+ }
185
+ }
186
+ return undefined;
187
+ }
188
+ function hasUnsupportedCommandText(output) {
189
+ const normalized = output.toLowerCase();
190
+ return (normalized.includes("unknown command") ||
191
+ normalized.includes("unrecognized command") ||
192
+ normalized.includes("unexpected argument"));
193
+ }
194
+ function hasUnauthenticatedText(output) {
195
+ const normalized = output.toLowerCase();
196
+ return (normalized.includes("not logged in") ||
197
+ normalized.includes("login required") ||
198
+ normalized.includes("authentication required") ||
199
+ normalized.includes("run `claude login`") ||
200
+ normalized.includes("run `claude auth login`") ||
201
+ normalized.includes("run claude login") ||
202
+ normalized.includes("run claude auth login"));
203
+ }
204
+ function detailFromCommandResult(result) {
205
+ const detail = `${result.stderr}\n${result.stdout}\n${result.errorMessage ?? ""}`.trim();
206
+ return detail ? sanitizeDisplaySnippet(detail, 160) : undefined;
207
+ }
208
+ function parseVersion(output) {
209
+ const match = output.match(/\b\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?\b/);
210
+ return match ? match[0] : null;
211
+ }
212
+ function isCommandMissing(result) {
213
+ if (result.spawnErrorCode === "ENOENT") {
214
+ return true;
215
+ }
216
+ const output = `${result.stderr}\n${result.stdout}\n${result.errorMessage ?? ""}`.toLowerCase();
217
+ return (output.includes("command not found") ||
218
+ output.includes("not recognized as an internal or external command") ||
219
+ output.includes("no such file or directory"));
220
+ }
221
+ function isTimedOutError(error) {
222
+ return (error.code === "ETIMEDOUT" ||
223
+ error.killed === true ||
224
+ error.message.toLowerCase().includes("timed out"));
225
+ }
226
+ async function runClaudeCommand(invocation) {
227
+ return await new Promise((resolve, reject) => {
228
+ try {
229
+ execFile(invocation.file, invocation.args, {
230
+ encoding: "utf8",
231
+ timeout: CLAUDE_COMMAND_TIMEOUT_MS,
232
+ maxBuffer: 1024 * 1024,
233
+ }, (error, stdout, stderr) => {
234
+ const stdoutText = typeof stdout === "string" ? stdout : stdout.toString("utf8");
235
+ const stderrText = typeof stderr === "string" ? stderr : stderr.toString("utf8");
236
+ if (!error) {
237
+ resolve({
238
+ code: 0,
239
+ stdout: stdoutText,
240
+ stderr: stderrText,
241
+ timedOut: false,
242
+ });
243
+ return;
244
+ }
245
+ const execError = error;
246
+ resolve({
247
+ code: typeof execError.code === "number" ? execError.code : null,
248
+ stdout: stdoutText,
249
+ stderr: stderrText,
250
+ timedOut: isTimedOutError(execError),
251
+ spawnErrorCode: execError.code,
252
+ errorMessage: execError.message,
253
+ });
254
+ });
255
+ }
256
+ catch (error) {
257
+ reject(error);
258
+ }
259
+ });
260
+ }
261
+ function parseClaudeAuthStatusResult(result) {
262
+ const combinedOutput = `${result.stdout}\n${result.stderr}`;
263
+ if (hasUnsupportedCommandText(combinedOutput)) {
127
264
  return {
128
- success: false,
129
- error: `Quota fetch failed: ${sanitizeDisplayText(err instanceof Error ? err.message : String(err))}`,
265
+ authStatus: "unknown",
266
+ unsupportedCommand: true,
267
+ message: "Claude CLI authentication status JSON is unavailable in this version of Claude.",
130
268
  };
131
269
  }
132
- if (response.status === 401 || response.status === 403) {
270
+ if (hasUnauthenticatedText(combinedOutput)) {
133
271
  return {
134
- success: false,
135
- error: "Invalid or expired token; refresh ~/.claude/.credentials.json or CLAUDE_CODE_OAUTH_TOKEN",
272
+ authStatus: "unauthenticated",
273
+ message: "Claude is not authenticated. Run `claude auth login` and try again.",
136
274
  };
137
275
  }
138
- if (!response.ok) {
139
- let text = "";
276
+ const trimmed = result.stdout.trim();
277
+ if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
140
278
  try {
141
- text = await response.text();
279
+ const payload = JSON.parse(trimmed);
280
+ const auth = extractAuthBoolean(payload);
281
+ if (auth === true) {
282
+ return {
283
+ authStatus: "authenticated",
284
+ jsonPayload: payload,
285
+ };
286
+ }
287
+ if (auth === false) {
288
+ return {
289
+ authStatus: "unauthenticated",
290
+ message: "Claude is not authenticated. Run `claude auth login` and try again.",
291
+ jsonPayload: payload,
292
+ };
293
+ }
294
+ return {
295
+ authStatus: "unknown",
296
+ message: "Could not verify Claude authentication status from JSON output.",
297
+ jsonPayload: payload,
298
+ };
142
299
  }
143
300
  catch {
144
- text = "";
301
+ // Fall through to exit-code-based handling.
145
302
  }
146
- const detail = sanitizeDisplaySnippet(text, 120);
303
+ }
304
+ if (result.code === 0) {
305
+ return { authStatus: "authenticated" };
306
+ }
307
+ if (result.timedOut) {
147
308
  return {
148
- success: false,
149
- error: detail
150
- ? `Anthropic API error ${response.status}: ${detail}`
151
- : `Anthropic API returned ${response.status}`,
309
+ authStatus: "unknown",
310
+ message: "Timed out while running Claude CLI auth status.",
152
311
  };
153
312
  }
154
- let data;
155
- try {
156
- data = await response.json();
313
+ const detail = detailFromCommandResult(result);
314
+ return {
315
+ authStatus: "unknown",
316
+ message: detail
317
+ ? `Could not verify Claude authentication status. ${detail}`
318
+ : "Could not verify Claude authentication status.",
319
+ };
320
+ }
321
+ async function probeAnthropicDiagnostics(options = {}) {
322
+ const binaryPath = resolveAnthropicBinaryPath(options.binaryPath);
323
+ const checkedCommands = [];
324
+ const versionCommand = buildClaudeCommandInvocation(binaryPath, ["--version"]);
325
+ checkedCommands.push(versionCommand.display);
326
+ const versionResult = await runClaudeCommand(versionCommand);
327
+ if (isCommandMissing(versionResult)) {
328
+ return {
329
+ installed: false,
330
+ version: null,
331
+ authStatus: "unknown",
332
+ quotaSupported: false,
333
+ quotaSource: "none",
334
+ checkedCommands,
335
+ message: `Claude CLI (\`${sanitizeDisplayText(binaryPath)}\`) is not installed or not on PATH.`,
336
+ };
157
337
  }
158
- catch {
338
+ const version = parseVersion(`${versionResult.stdout}\n${versionResult.stderr}`);
339
+ const authStatusJsonCommand = buildClaudeCommandInvocation(binaryPath, [
340
+ "auth",
341
+ "status",
342
+ "--json",
343
+ ]);
344
+ checkedCommands.push(authStatusJsonCommand.display);
345
+ const authJsonResult = await runClaudeCommand(authStatusJsonCommand);
346
+ let parsedAuth = parseClaudeAuthStatusResult(authJsonResult);
347
+ if (parsedAuth.unsupportedCommand) {
348
+ const authStatusCommand = buildClaudeCommandInvocation(binaryPath, ["auth", "status"]);
349
+ checkedCommands.push(authStatusCommand.display);
350
+ parsedAuth = parseClaudeAuthStatusResult(await runClaudeCommand(authStatusCommand));
351
+ }
352
+ if (parsedAuth.authStatus !== "authenticated") {
159
353
  return {
160
- success: false,
161
- error: "Failed to parse Anthropic quota response",
354
+ installed: true,
355
+ version,
356
+ authStatus: parsedAuth.authStatus,
357
+ quotaSupported: false,
358
+ quotaSource: "none",
359
+ checkedCommands,
360
+ message: parsedAuth.message,
361
+ };
362
+ }
363
+ const quota = parsedAuth.jsonPayload ? parseUsageResponse(parsedAuth.jsonPayload) : null;
364
+ if (quota) {
365
+ return {
366
+ installed: true,
367
+ version,
368
+ authStatus: "authenticated",
369
+ quotaSupported: true,
370
+ quotaSource: "claude-auth-status-json",
371
+ checkedCommands,
372
+ quota,
162
373
  };
163
374
  }
164
- const result = parseUsageResponse(data);
165
- if (!result) {
375
+ return {
376
+ installed: true,
377
+ version,
378
+ authStatus: "authenticated",
379
+ quotaSupported: false,
380
+ quotaSource: "none",
381
+ checkedCommands,
382
+ message: "Claude CLI auth detected, but local quota windows were not exposed.",
383
+ };
384
+ }
385
+ export function clearAnthropicDiagnosticsCacheForTests() {
386
+ diagnosticsCache.clear();
387
+ }
388
+ export async function getAnthropicDiagnostics(options = {}) {
389
+ const binaryPath = resolveAnthropicBinaryPath(options.binaryPath);
390
+ const now = Date.now();
391
+ const cached = diagnosticsCache.get(binaryPath) ?? {
392
+ timestamp: 0,
393
+ value: null,
394
+ };
395
+ if (cached.value &&
396
+ cached.timestamp > 0 &&
397
+ now - cached.timestamp < ANTHROPIC_DIAGNOSTICS_TTL_MS) {
398
+ return cached.value;
399
+ }
400
+ if (cached.inFlight) {
401
+ return cached.inFlight;
402
+ }
403
+ const inFlight = probeAnthropicDiagnostics({ binaryPath }).then((value) => {
404
+ diagnosticsCache.set(binaryPath, {
405
+ timestamp: Date.now(),
406
+ value,
407
+ });
408
+ return value;
409
+ });
410
+ diagnosticsCache.set(binaryPath, {
411
+ timestamp: cached.timestamp,
412
+ value: cached.value,
413
+ inFlight,
414
+ });
415
+ try {
416
+ return await inFlight;
417
+ }
418
+ finally {
419
+ const latest = diagnosticsCache.get(binaryPath);
420
+ if (latest?.inFlight === inFlight) {
421
+ diagnosticsCache.set(binaryPath, {
422
+ timestamp: latest.timestamp,
423
+ value: latest.value,
424
+ });
425
+ }
426
+ }
427
+ }
428
+ export async function hasAnthropicCredentialsConfigured(options = {}) {
429
+ try {
430
+ const diagnostics = await getAnthropicDiagnostics(options);
431
+ return diagnostics.installed && diagnostics.authStatus === "authenticated";
432
+ }
433
+ catch {
434
+ return false;
435
+ }
436
+ }
437
+ export async function queryAnthropicQuota(options = {}) {
438
+ try {
439
+ const diagnostics = await getAnthropicDiagnostics(options);
440
+ return diagnostics.quotaSupported ? diagnostics.quota ?? null : null;
441
+ }
442
+ catch (err) {
166
443
  return {
167
444
  success: false,
168
- error: "Unexpected Anthropic quota response shape",
445
+ error: `Claude CLI probe failed: ${sanitizeDisplayText(err instanceof Error ? err.message : String(err))}`,
169
446
  };
170
447
  }
171
- return result;
172
448
  }
173
- export { CREDENTIALS_PATH, parseUsageResponse, readCredentialsFile };
449
+ export { parseUsageResponse };
174
450
  //# sourceMappingURL=anthropic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/lib/anthropic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/lib/anthropic.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AA6CD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,YAAY,CAAC,EAAE;oBAAE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;KAC9F,CAAC;CACH,EACD,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAwO3B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;IACrC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAsDD;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,YAAY,CAAC,EAAE;oBAAE,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;iBAAE,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;KAC9F,CAAC;CACH,EACD,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,gBAAgB,CAAC,CA2O3B"}
@@ -46,6 +46,13 @@ function isValidPricingSnapshotSource(source) {
46
46
  function isValidPricingSnapshotAutoRefresh(value) {
47
47
  return typeof value === "number" && Number.isInteger(value) && value > 0;
48
48
  }
49
+ function normalizeOptionalString(value) {
50
+ if (typeof value !== "string") {
51
+ return undefined;
52
+ }
53
+ const trimmed = value.trim();
54
+ return trimmed ? trimmed : undefined;
55
+ }
49
56
  /**
50
57
  * Remove duplicates from an array while preserving order
51
58
  */
@@ -84,6 +91,8 @@ export async function loadConfig(client, meta) {
84
91
  .map(normalizeQuotaProviderId)
85
92
  .filter(Boolean))
86
93
  : DEFAULT_CONFIG.enabledProviders,
94
+ anthropicBinaryPath: normalizeOptionalString(quotaToastConfig.anthropicBinaryPath) ??
95
+ DEFAULT_CONFIG.anthropicBinaryPath,
87
96
  googleModels: Array.isArray(quotaToastConfig.googleModels)
88
97
  ? quotaToastConfig.googleModels.filter(isValidGoogleModelId)
89
98
  : DEFAULT_CONFIG.googleModels,