@slkiser/opencode-quota 4.1.0 → 4.2.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 (178) hide show
  1. package/README.md +84 -28
  2. package/dist/lib/api-key-resolver.d.ts +73 -22
  3. package/dist/lib/api-key-resolver.d.ts.map +1 -1
  4. package/dist/lib/api-key-resolver.js +102 -15
  5. package/dist/lib/api-key-resolver.js.map +1 -1
  6. package/dist/lib/chutes-config.d.ts.map +1 -1
  7. package/dist/lib/chutes-config.js +2 -4
  8. package/dist/lib/chutes-config.js.map +1 -1
  9. package/dist/lib/copilot.d.ts.map +1 -1
  10. package/dist/lib/copilot.js +82 -31
  11. package/dist/lib/copilot.js.map +1 -1
  12. package/dist/lib/deepseek-auth.d.ts.map +1 -1
  13. package/dist/lib/deepseek-auth.js +3 -7
  14. package/dist/lib/deepseek-auth.js.map +1 -1
  15. package/dist/lib/entries.d.ts +7 -4
  16. package/dist/lib/entries.d.ts.map +1 -1
  17. package/dist/lib/glm-coding-plan.d.ts +18 -0
  18. package/dist/lib/glm-coding-plan.d.ts.map +1 -0
  19. package/dist/lib/glm-coding-plan.js +68 -0
  20. package/dist/lib/glm-coding-plan.js.map +1 -0
  21. package/dist/lib/google-agy-companion.d.ts +4 -25
  22. package/dist/lib/google-agy-companion.d.ts.map +1 -1
  23. package/dist/lib/google-agy-companion.js +47 -272
  24. package/dist/lib/google-agy-companion.js.map +1 -1
  25. package/dist/lib/google-agy.d.ts.map +1 -1
  26. package/dist/lib/google-agy.js +7 -25
  27. package/dist/lib/google-agy.js.map +1 -1
  28. package/dist/lib/google-antigravity-companion.d.ts +4 -25
  29. package/dist/lib/google-antigravity-companion.d.ts.map +1 -1
  30. package/dist/lib/google-antigravity-companion.js +44 -283
  31. package/dist/lib/google-antigravity-companion.js.map +1 -1
  32. package/dist/lib/google-companion-credentials.d.ts +70 -0
  33. package/dist/lib/google-companion-credentials.d.ts.map +1 -0
  34. package/dist/lib/google-companion-credentials.js +265 -0
  35. package/dist/lib/google-companion-credentials.js.map +1 -0
  36. package/dist/lib/google-gemini-cli-companion.d.ts +4 -25
  37. package/dist/lib/google-gemini-cli-companion.d.ts.map +1 -1
  38. package/dist/lib/google-gemini-cli-companion.js +47 -258
  39. package/dist/lib/google-gemini-cli-companion.js.map +1 -1
  40. package/dist/lib/google-gemini-cli.d.ts.map +1 -1
  41. package/dist/lib/google-gemini-cli.js +2 -20
  42. package/dist/lib/google-gemini-cli.js.map +1 -1
  43. package/dist/lib/google.d.ts.map +1 -1
  44. package/dist/lib/google.js +23 -45
  45. package/dist/lib/google.js.map +1 -1
  46. package/dist/lib/kimi-auth.d.ts +3 -26
  47. package/dist/lib/kimi-auth.d.ts.map +1 -1
  48. package/dist/lib/kimi-auth.js +24 -91
  49. package/dist/lib/kimi-auth.js.map +1 -1
  50. package/dist/lib/map-with-concurrency.d.ts +2 -0
  51. package/dist/lib/map-with-concurrency.d.ts.map +1 -0
  52. package/dist/lib/map-with-concurrency.js +17 -0
  53. package/dist/lib/map-with-concurrency.js.map +1 -0
  54. package/dist/lib/nanogpt-config.d.ts.map +1 -1
  55. package/dist/lib/nanogpt-config.js +2 -4
  56. package/dist/lib/nanogpt-config.js.map +1 -1
  57. package/dist/lib/openrouter.d.ts +13 -0
  58. package/dist/lib/openrouter.d.ts.map +1 -0
  59. package/dist/lib/openrouter.js +41 -0
  60. package/dist/lib/openrouter.js.map +1 -0
  61. package/dist/lib/provider-metadata.d.ts +11 -0
  62. package/dist/lib/provider-metadata.d.ts.map +1 -1
  63. package/dist/lib/provider-metadata.js +11 -0
  64. package/dist/lib/provider-metadata.js.map +1 -1
  65. package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
  66. package/dist/lib/quota-dialog-commands.js +3 -10
  67. package/dist/lib/quota-dialog-commands.js.map +1 -1
  68. package/dist/lib/quota-providers-remote.d.ts +0 -1
  69. package/dist/lib/quota-providers-remote.d.ts.map +1 -1
  70. package/dist/lib/quota-providers-remote.js +3 -16
  71. package/dist/lib/quota-providers-remote.js.map +1 -1
  72. package/dist/lib/quota-render-data.d.ts.map +1 -1
  73. package/dist/lib/quota-render-data.js +17 -6
  74. package/dist/lib/quota-render-data.js.map +1 -1
  75. package/dist/lib/quota-status.d.ts +7 -17
  76. package/dist/lib/quota-status.d.ts.map +1 -1
  77. package/dist/lib/quota-status.js +116 -1036
  78. package/dist/lib/quota-status.js.map +1 -1
  79. package/dist/lib/synthetic-config.d.ts.map +1 -1
  80. package/dist/lib/synthetic-config.js +2 -4
  81. package/dist/lib/synthetic-config.js.map +1 -1
  82. package/dist/lib/types.d.ts +11 -1
  83. package/dist/lib/types.d.ts.map +1 -1
  84. package/dist/lib/types.js.map +1 -1
  85. package/dist/lib/zai-auth.d.ts +3 -26
  86. package/dist/lib/zai-auth.d.ts.map +1 -1
  87. package/dist/lib/zai-auth.js +24 -94
  88. package/dist/lib/zai-auth.js.map +1 -1
  89. package/dist/lib/zai.d.ts +1 -8
  90. package/dist/lib/zai.d.ts.map +1 -1
  91. package/dist/lib/zai.js +11 -97
  92. package/dist/lib/zai.js.map +1 -1
  93. package/dist/lib/zhipu-auth.d.ts +3 -26
  94. package/dist/lib/zhipu-auth.d.ts.map +1 -1
  95. package/dist/lib/zhipu-auth.js +24 -94
  96. package/dist/lib/zhipu-auth.js.map +1 -1
  97. package/dist/lib/zhipu.d.ts +1 -8
  98. package/dist/lib/zhipu.d.ts.map +1 -1
  99. package/dist/lib/zhipu.js +10 -89
  100. package/dist/lib/zhipu.js.map +1 -1
  101. package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
  102. package/dist/providers/alibaba-coding-plan.js +33 -6
  103. package/dist/providers/alibaba-coding-plan.js.map +1 -1
  104. package/dist/providers/anthropic.d.ts.map +1 -1
  105. package/dist/providers/anthropic.js +35 -7
  106. package/dist/providers/anthropic.js.map +1 -1
  107. package/dist/providers/chutes.d.ts.map +1 -1
  108. package/dist/providers/chutes.js +10 -3
  109. package/dist/providers/chutes.js.map +1 -1
  110. package/dist/providers/copilot.d.ts.map +1 -1
  111. package/dist/providers/copilot.js +79 -29
  112. package/dist/providers/copilot.js.map +1 -1
  113. package/dist/providers/cursor.d.ts.map +1 -1
  114. package/dist/providers/cursor.js +34 -6
  115. package/dist/providers/cursor.js.map +1 -1
  116. package/dist/providers/deepseek.d.ts.map +1 -1
  117. package/dist/providers/deepseek.js +10 -3
  118. package/dist/providers/deepseek.js.map +1 -1
  119. package/dist/providers/glm-coding-plan-provider.d.ts +9 -0
  120. package/dist/providers/glm-coding-plan-provider.d.ts.map +1 -1
  121. package/dist/providers/glm-coding-plan-provider.js +24 -2
  122. package/dist/providers/glm-coding-plan-provider.js.map +1 -1
  123. package/dist/providers/google-agy.d.ts.map +1 -1
  124. package/dist/providers/google-agy.js +23 -6
  125. package/dist/providers/google-agy.js.map +1 -1
  126. package/dist/providers/google-antigravity.d.ts.map +1 -1
  127. package/dist/providers/google-antigravity.js +31 -6
  128. package/dist/providers/google-antigravity.js.map +1 -1
  129. package/dist/providers/google-gemini-cli.d.ts.map +1 -1
  130. package/dist/providers/google-gemini-cli.js +24 -6
  131. package/dist/providers/google-gemini-cli.js.map +1 -1
  132. package/dist/providers/kimi-code.d.ts.map +1 -1
  133. package/dist/providers/kimi-code.js +27 -8
  134. package/dist/providers/kimi-code.js.map +1 -1
  135. package/dist/providers/mimo.d.ts.map +1 -1
  136. package/dist/providers/mimo.js +12 -5
  137. package/dist/providers/mimo.js.map +1 -1
  138. package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
  139. package/dist/providers/minimax-coding-plan.js +37 -6
  140. package/dist/providers/minimax-coding-plan.js.map +1 -1
  141. package/dist/providers/nanogpt.d.ts.map +1 -1
  142. package/dist/providers/nanogpt.js +41 -4
  143. package/dist/providers/nanogpt.js.map +1 -1
  144. package/dist/providers/openai.d.ts.map +1 -1
  145. package/dist/providers/openai.js +20 -3
  146. package/dist/providers/openai.js.map +1 -1
  147. package/dist/providers/opencode-go.d.ts.map +1 -1
  148. package/dist/providers/opencode-go.js +33 -15
  149. package/dist/providers/opencode-go.js.map +1 -1
  150. package/dist/providers/opencode-zen.d.ts.map +1 -1
  151. package/dist/providers/opencode-zen.js +27 -22
  152. package/dist/providers/opencode-zen.js.map +1 -1
  153. package/dist/providers/openrouter.d.ts +6 -0
  154. package/dist/providers/openrouter.d.ts.map +1 -0
  155. package/dist/providers/openrouter.js +25 -0
  156. package/dist/providers/openrouter.js.map +1 -0
  157. package/dist/providers/quota-providers.js +2 -1
  158. package/dist/providers/quota-providers.js.map +1 -1
  159. package/dist/providers/qwen-code.d.ts.map +1 -1
  160. package/dist/providers/qwen-code.js +19 -5
  161. package/dist/providers/qwen-code.js.map +1 -1
  162. package/dist/providers/registry.d.ts.map +1 -1
  163. package/dist/providers/registry.js +2 -0
  164. package/dist/providers/registry.js.map +1 -1
  165. package/dist/providers/result-helpers.d.ts +29 -1
  166. package/dist/providers/result-helpers.d.ts.map +1 -1
  167. package/dist/providers/result-helpers.js +69 -0
  168. package/dist/providers/result-helpers.js.map +1 -1
  169. package/dist/providers/synthetic.d.ts.map +1 -1
  170. package/dist/providers/synthetic.js +10 -3
  171. package/dist/providers/synthetic.js.map +1 -1
  172. package/dist/providers/zai.d.ts.map +1 -1
  173. package/dist/providers/zai.js +2 -1
  174. package/dist/providers/zai.js.map +1 -1
  175. package/dist/providers/zhipu.d.ts.map +1 -1
  176. package/dist/providers/zhipu.js +2 -1
  177. package/dist/providers/zhipu.js.map +1 -1
  178. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"zai.d.ts","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,YAAY,CAAC;AAgB3D,wBAAsB,aAAa,CACjC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,SAAS,CAAC,CA8FpB"}
1
+ {"version":3,"file":"zai.d.ts","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"AAYA,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,2CAExE"}
package/dist/lib/zai.js CHANGED
@@ -1,100 +1,14 @@
1
- /**
2
- * Z.ai quota fetcher
3
- *
4
- * Uses OpenCode's auth.json (zai-coding-plan) and queries:
5
- * https://api.z.ai/api/monitor/usage/quota/limit
6
- */
7
- import { clampPercent } from "./format-utils.js";
8
- import { sanitizeDisplaySnippet, sanitizeDisplayText } from "./display-sanitize.js";
9
- import { fetchWithTimeout } from "./http.js";
1
+ import { queryGlmCodingPlanQuota } from "./glm-coding-plan.js";
10
2
  import { resolveZaiAuthCached } from "./zai-auth.js";
11
- const ZAI_QUOTA_URL = "https://api.z.ai/api/monitor/usage/quota/limit";
12
- export async function queryZaiQuota(options = {}) {
13
- const auth = await resolveZaiAuthCached();
14
- if (auth.state === "none")
15
- return null;
16
- if (auth.state === "invalid") {
17
- return { success: false, error: auth.error };
18
- }
19
- try {
20
- const headers = {
21
- Authorization: auth.apiKey,
22
- "User-Agent": "OpenCode-Quota-Toast/1.0",
23
- "Content-Type": "application/json",
24
- };
25
- return await fetchWithTimeout(ZAI_QUOTA_URL, {
26
- request: { headers },
27
- timeoutMs: options.requestTimeoutMs,
28
- consume: async (resp) => {
29
- if (!resp.ok) {
30
- const text = await resp.text();
31
- return {
32
- success: false,
33
- error: `Z.ai API error ${resp.status}: ${sanitizeDisplaySnippet(text, 120)}`,
34
- };
35
- }
36
- const data = (await resp.json());
37
- if (data.success === false || (typeof data.code === "number" && data.code >= 400)) {
38
- const msg = typeof data.msg === "string" ? sanitizeDisplayText(data.msg) : "";
39
- return {
40
- success: false,
41
- error: msg ||
42
- (typeof data.code === "number" ? `Z.ai API error ${data.code}` : "Z.ai API error"),
43
- };
44
- }
45
- const limits = data.data?.limits ?? data.limits;
46
- if (!limits || !Array.isArray(limits)) {
47
- return { success: false, error: "Invalid quota data" };
48
- }
49
- let fiveHourWindow;
50
- let weeklyWindow;
51
- let mcpWindow;
52
- for (const limit of limits) {
53
- const percentRemaining = clampPercent(100 - limit.percentage);
54
- let resetTimeIso;
55
- if (limit.nextResetTime) {
56
- const ms = Math.round(limit.nextResetTime);
57
- if (Number.isFinite(ms) && ms > 0) {
58
- resetTimeIso = new Date(ms).toISOString();
59
- }
60
- }
61
- const window = { percentRemaining, resetTimeIso };
62
- if (limit.type === "TOKENS_LIMIT") {
63
- if (limit.unit === 3) {
64
- // unit 3 is the 5-hour token window (Standard Lite/Pro/Max).
65
- fiveHourWindow = window;
66
- }
67
- else if (limit.unit === 6) {
68
- // unit 6 is the weekly token window.
69
- weeklyWindow = window;
70
- }
71
- else if (limit.unit === 4) {
72
- // unit 4 is daily. Do not surface it as weekly in the current UI/report shape.
73
- continue;
74
- }
75
- }
76
- else if (limit.type === "TIME_LIMIT") {
77
- // TIME_LIMIT (unit 5) is typically the Monthly MCP limit
78
- mcpWindow = window;
79
- }
80
- }
81
- return {
82
- success: true,
83
- label: "Z.ai",
84
- windows: {
85
- fiveHour: fiveHourWindow,
86
- weekly: weeklyWindow,
87
- mcp: mcpWindow,
88
- },
89
- };
90
- },
91
- });
92
- }
93
- catch (err) {
94
- return {
95
- success: false,
96
- error: sanitizeDisplayText(err instanceof Error ? err.message : String(err)),
97
- };
98
- }
3
+ const ZAI_QUOTA = {
4
+ label: "Z.ai",
5
+ endpoint: "https://api.z.ai/api/monitor/usage/quota/limit",
6
+ httpErrorPrefix: "Z.ai API error",
7
+ apiErrorPrefix: "Z.ai API error",
8
+ envelope: "zai",
9
+ resolveAuth: resolveZaiAuthCached,
10
+ };
11
+ export function queryZaiQuota(options = {}) {
12
+ return queryGlmCodingPlanQuota(ZAI_QUOTA, options);
99
13
  }
100
14
  //# sourceMappingURL=zai.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zai.js","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zai.js","sourceRoot":"","sources":["../../src/lib/zai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,gDAAgD;IAC1D,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,gBAAgB;IAChC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,oBAAoB;CACzB,CAAC;AAEX,MAAM,UAAU,aAAa,CAAC,UAAyC,EAAE;IACvE,OAAO,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC"}
@@ -1,32 +1,9 @@
1
+ import type { InvalidAwareAuthDiagnostics, InvalidAwareAuthResult } from "./api-key-resolver.js";
1
2
  import type { AuthData } from "./types.js";
2
3
  export declare const DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS = 5000;
3
4
  export type ZhipuKeySource = "env:ZHIPU_API_KEY" | "env:ZHIPU_CODING_PLAN_API_KEY" | "opencode.json" | "opencode.jsonc" | "auth.json";
4
- export type ResolvedZhipuAuth = {
5
- state: "none";
6
- } | {
7
- state: "configured";
8
- apiKey: string;
9
- } | {
10
- state: "invalid";
11
- error: string;
12
- };
13
- export type ZhipuAuthDiagnostics = {
14
- state: "none";
15
- source: null;
16
- checkedPaths: string[];
17
- authPaths: string[];
18
- } | {
19
- state: "configured";
20
- source: ZhipuKeySource;
21
- checkedPaths: string[];
22
- authPaths: string[];
23
- } | {
24
- state: "invalid";
25
- source: "auth.json";
26
- checkedPaths: string[];
27
- authPaths: string[];
28
- error: string;
29
- };
5
+ export type ResolvedZhipuAuth = InvalidAwareAuthResult;
6
+ export type ZhipuAuthDiagnostics = InvalidAwareAuthDiagnostics<ZhipuKeySource, "auth.json">;
30
7
  export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
31
8
  export declare function resolveZhipuAuth(auth: AuthData | null | undefined): ResolvedZhipuAuth;
32
9
  export declare function resolveZhipuAuthCached(params?: {
@@ -1 +1 @@
1
- {"version":3,"file":"zhipu-auth.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,YAAY,CAAC;AAExD,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAUzD,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,+BAA+B,GAC/B,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,MAAM,iBAAiB,GACzB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,oBAAoB,GAC5B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD;IACE,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAejH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CA2BrF;AAwCD,wBAAsB,sBAAsB,CAAC,MAAM,CAAC,EAAE;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAE7B;AAED,wBAAsB,uBAAuB,CAAC,MAAM,CAAC,EAAE;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAiChC"}
1
+ {"version":3,"file":"zhipu-auth.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAUzD,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,+BAA+B,GAC/B,eAAe,GACf,gBAAgB,GAChB,WAAW,CAAC;AAEhB,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AAE5F,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAuBjH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,CAErF;AAED,wBAAsB,sBAAsB,CAAC,MAAM,CAAC,EAAE;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAE7B;AAED,wBAAsB,uBAAuB,CAAC,MAAM,CAAC,EAAE;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAEhC"}
@@ -1,5 +1,4 @@
1
- import { extractProviderOptionsApiKey, getApiKeyCheckedPaths, getFirstAuthEntryValue, getGlobalOpencodeConfigCandidatePaths, resolveApiKeyFromEnvAndConfig, } from "./api-key-resolver.js";
2
- import { sanitizeDisplayText } from "./display-sanitize.js";
1
+ import { createProviderApiKeyResolver, getGlobalOpencodeConfigCandidatePaths, } from "./api-key-resolver.js";
3
2
  import { getAuthPaths, readAuthFileCached } from "./opencode-auth.js";
4
3
  export const DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS = 5_000;
5
4
  const ZHIPU_AUTH_KEYS = ["zhipu-coding-plan", "zhipuai-coding-plan"];
@@ -11,102 +10,33 @@ const ZHIPU_PROVIDER_KEYS = [
11
10
  ];
12
11
  const ALLOWED_ZHIPU_ENV_VARS = ["ZHIPU_API_KEY", "ZHIPU_CODING_PLAN_API_KEY"];
13
12
  export { getGlobalOpencodeConfigCandidatePaths as getOpencodeConfigCandidatePaths } from "./api-key-resolver.js";
14
- function getZhipuAuthEntry(auth) {
15
- return getFirstAuthEntryValue(auth, ZHIPU_AUTH_KEYS);
16
- }
17
- function isZhipuAuthData(value) {
18
- return value !== null && typeof value === "object";
19
- }
20
- function sanitizeZhipuAuthValue(value) {
21
- const sanitized = sanitizeDisplayText(value).replace(/\s+/g, " ").trim();
22
- return (sanitized || "unknown").slice(0, 120);
23
- }
13
+ const zhipuAuthResolver = createProviderApiKeyResolver({
14
+ envVars: [
15
+ { name: "ZHIPU_API_KEY", source: "env:ZHIPU_API_KEY" },
16
+ { name: "ZHIPU_CODING_PLAN_API_KEY", source: "env:ZHIPU_CODING_PLAN_API_KEY" },
17
+ ],
18
+ providerKeys: ZHIPU_PROVIDER_KEYS,
19
+ allowedEnvVars: ALLOWED_ZHIPU_ENV_VARS,
20
+ configJsonSource: "opencode.json",
21
+ configJsoncSource: "opencode.jsonc",
22
+ getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
23
+ auth: {
24
+ policy: "invalid-aware-api-key",
25
+ authKeys: ZHIPU_AUTH_KEYS,
26
+ authSource: "auth.json",
27
+ displayName: "Zhipu",
28
+ defaultMaxAgeMs: DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS,
29
+ readAuth: (maxAgeMs) => readAuthFileCached({ maxAgeMs }),
30
+ getAuthPaths,
31
+ },
32
+ });
24
33
  export function resolveZhipuAuth(auth) {
25
- const zhipu = getZhipuAuthEntry(auth);
26
- if (zhipu === null || zhipu === undefined) {
27
- return { state: "none" };
28
- }
29
- if (!isZhipuAuthData(zhipu)) {
30
- return { state: "invalid", error: "Zhipu auth entry has invalid shape" };
31
- }
32
- if (typeof zhipu.type !== "string") {
33
- return { state: "invalid", error: "Zhipu auth entry present but type is missing or invalid" };
34
- }
35
- if (zhipu.type !== "api") {
36
- return {
37
- state: "invalid",
38
- error: `Unsupported Zhipu auth type: "${sanitizeZhipuAuthValue(zhipu.type)}"`,
39
- };
40
- }
41
- const key = typeof zhipu.key === "string" ? zhipu.key.trim() : "";
42
- if (!key) {
43
- return { state: "invalid", error: "Zhipu auth entry present but key is empty" };
44
- }
45
- return { state: "configured", apiKey: key };
46
- }
47
- async function resolveZhipuAuthWithSource(params) {
48
- const resolvedFromEnvOrConfig = await resolveApiKeyFromEnvAndConfig({
49
- envVars: [
50
- { name: "ZHIPU_API_KEY", source: "env:ZHIPU_API_KEY" },
51
- {
52
- name: "ZHIPU_CODING_PLAN_API_KEY",
53
- source: "env:ZHIPU_CODING_PLAN_API_KEY",
54
- },
55
- ],
56
- extractFromConfig: (config) => extractProviderOptionsApiKey(config, {
57
- providerKeys: ZHIPU_PROVIDER_KEYS,
58
- allowedEnvVars: ALLOWED_ZHIPU_ENV_VARS,
59
- }),
60
- configJsonSource: "opencode.json",
61
- configJsoncSource: "opencode.jsonc",
62
- getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
63
- });
64
- if (resolvedFromEnvOrConfig) {
65
- return {
66
- auth: { state: "configured", apiKey: resolvedFromEnvOrConfig.key },
67
- source: resolvedFromEnvOrConfig.source,
68
- };
69
- }
70
- const maxAgeMs = Math.max(0, params?.maxAgeMs ?? DEFAULT_ZHIPU_AUTH_CACHE_MAX_AGE_MS);
71
- const authData = await readAuthFileCached({ maxAgeMs });
72
- const auth = resolveZhipuAuth(authData);
73
- return {
74
- auth,
75
- source: auth.state === "none" ? null : "auth.json",
76
- };
34
+ return zhipuAuthResolver.parseAuth(auth);
77
35
  }
78
36
  export async function resolveZhipuAuthCached(params) {
79
- return (await resolveZhipuAuthWithSource(params)).auth;
37
+ return zhipuAuthResolver.resolve(params);
80
38
  }
81
39
  export async function getZhipuAuthDiagnostics(params) {
82
- const { auth, source } = await resolveZhipuAuthWithSource(params);
83
- const checkedPaths = getApiKeyCheckedPaths({
84
- envVarNames: [...ALLOWED_ZHIPU_ENV_VARS],
85
- getConfigCandidates: getGlobalOpencodeConfigCandidatePaths,
86
- });
87
- const authPaths = getAuthPaths();
88
- if (auth.state === "none") {
89
- return {
90
- state: "none",
91
- source: null,
92
- checkedPaths,
93
- authPaths,
94
- };
95
- }
96
- if (auth.state === "invalid") {
97
- return {
98
- state: "invalid",
99
- source: "auth.json",
100
- checkedPaths,
101
- authPaths,
102
- error: auth.error,
103
- };
104
- }
105
- return {
106
- state: "configured",
107
- source: source ?? "auth.json",
108
- checkedPaths,
109
- authPaths,
110
- };
40
+ return zhipuAuthResolver.diagnostics(params);
111
41
  }
112
42
  //# sourceMappingURL=zhipu-auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zhipu-auth.js","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zhipu-auth.js","sourceRoot":"","sources":["../../src/lib/zhipu-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKtE,MAAM,CAAC,MAAM,mCAAmC,GAAG,KAAK,CAAC;AACzD,MAAM,eAAe,GAAG,CAAC,mBAAmB,EAAE,qBAAqB,CAAU,CAAC;AAC9E,MAAM,mBAAmB,GAAG;IAC1B,OAAO;IACP,mBAAmB;IACnB,qBAAqB;IACrB,iBAAiB;CACT,CAAC;AACX,MAAM,sBAAsB,GAAG,CAAC,eAAe,EAAE,2BAA2B,CAAU,CAAC;AAYvF,OAAO,EAAE,qCAAqC,IAAI,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAEjH,MAAM,iBAAiB,GAAG,4BAA4B,CAA8B;IAClF,OAAO,EAAE;QACP,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE;QACtD,EAAE,IAAI,EAAE,2BAA2B,EAAE,MAAM,EAAE,+BAA+B,EAAE;KAC/E;IACD,YAAY,EAAE,mBAAmB;IACjC,cAAc,EAAE,sBAAsB;IACtC,gBAAgB,EAAE,eAAe;IACjC,iBAAiB,EAAE,gBAAgB;IACnC,mBAAmB,EAAE,qCAAqC;IAC1D,IAAI,EAAE;QACJ,MAAM,EAAE,uBAAuB;QAC/B,QAAQ,EAAE,eAAe;QACzB,UAAU,EAAE,WAAW;QACvB,WAAW,EAAE,OAAO;QACpB,eAAe,EAAE,mCAAmC;QACpD,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC;QACxD,YAAY;KACb;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,IAAiC;IAChE,OAAO,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAE5C;IACC,OAAO,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAE7C;IACC,OAAO,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC"}
@@ -1,11 +1,4 @@
1
- /**
2
- * Zhipu quota fetcher
3
- *
4
- * Uses OpenCode's auth.json (zhipu-coding-plan) and queries:
5
- * https://bigmodel.cn/api/monitor/usage/quota/limit
6
- */
7
- import type { ZaiResult } from "./types.js";
8
1
  export declare function queryZhipuQuota(options?: {
9
2
  requestTimeoutMs?: number;
10
- }): Promise<ZaiResult>;
3
+ }): Promise<import("./types.js").ZaiResult>;
11
4
  //# sourceMappingURL=zhipu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"zhipu.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,YAAY,CAAC;AAK9D,wBAAsB,eAAe,CACnC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC1C,OAAO,CAAC,SAAS,CAAC,CAoFpB"}
1
+ {"version":3,"file":"zhipu.d.ts","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"AAWA,wBAAgB,eAAe,CAAC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,2CAE1E"}
package/dist/lib/zhipu.js CHANGED
@@ -1,92 +1,13 @@
1
- /**
2
- * Zhipu quota fetcher
3
- *
4
- * Uses OpenCode's auth.json (zhipu-coding-plan) and queries:
5
- * https://bigmodel.cn/api/monitor/usage/quota/limit
6
- */
7
- import { clampPercent } from "./format-utils.js";
8
- import { sanitizeDisplaySnippet, sanitizeDisplayText } from "./display-sanitize.js";
9
- import { fetchWithTimeout } from "./http.js";
1
+ import { queryGlmCodingPlanQuota } from "./glm-coding-plan.js";
10
2
  import { resolveZhipuAuthCached } from "./zhipu-auth.js";
11
- const ZHIPU_QUOTA_URL = "https://bigmodel.cn/api/monitor/usage/quota/limit";
12
- export async function queryZhipuQuota(options = {}) {
13
- const auth = await resolveZhipuAuthCached();
14
- if (auth.state === "none")
15
- return null;
16
- if (auth.state === "invalid") {
17
- return { success: false, error: auth.error };
18
- }
19
- try {
20
- const headers = {
21
- Authorization: auth.apiKey,
22
- "User-Agent": "OpenCode-Quota-Toast/1.0",
23
- "Content-Type": "application/json",
24
- };
25
- return await fetchWithTimeout(ZHIPU_QUOTA_URL, {
26
- request: { headers },
27
- timeoutMs: options.requestTimeoutMs,
28
- consume: async (resp) => {
29
- if (!resp.ok) {
30
- const text = await resp.text();
31
- return {
32
- success: false,
33
- error: `Zhipu API error ${resp.status}: ${sanitizeDisplaySnippet(text, 120)}`,
34
- };
35
- }
36
- const data = (await resp.json());
37
- const limits = data.data.limits;
38
- if (!limits || !Array.isArray(limits)) {
39
- return { success: false, error: "Invalid quota data" };
40
- }
41
- let fiveHourWindow;
42
- let weeklyWindow;
43
- let mcpWindow;
44
- for (const limit of limits) {
45
- const percentRemaining = clampPercent(100 - limit.percentage);
46
- let resetTimeIso;
47
- if (limit.nextResetTime) {
48
- const ms = Math.round(limit.nextResetTime);
49
- if (Number.isFinite(ms) && ms > 0) {
50
- resetTimeIso = new Date(ms).toISOString();
51
- }
52
- }
53
- const window = { percentRemaining, resetTimeIso };
54
- if (limit.type === "TOKENS_LIMIT") {
55
- if (limit.unit === 3) {
56
- // unit 3 is the 5-hour token window (Standard Lite/Pro/Max).
57
- fiveHourWindow = window;
58
- }
59
- else if (limit.unit === 6) {
60
- // unit 6 is the weekly token window.
61
- weeklyWindow = window;
62
- }
63
- else if (limit.unit === 4) {
64
- // unit 4 is daily. Do not surface it as weekly in the current UI/report shape.
65
- continue;
66
- }
67
- }
68
- else if (limit.type === "TIME_LIMIT") {
69
- // TIME_LIMIT (unit 5) is typically the Monthly MCP limit
70
- mcpWindow = window;
71
- }
72
- }
73
- return {
74
- success: true,
75
- label: "Zhipu",
76
- windows: {
77
- fiveHour: fiveHourWindow,
78
- weekly: weeklyWindow,
79
- mcp: mcpWindow,
80
- },
81
- };
82
- },
83
- });
84
- }
85
- catch (err) {
86
- return {
87
- success: false,
88
- error: sanitizeDisplayText(err instanceof Error ? err.message : String(err)),
89
- };
90
- }
3
+ const ZHIPU_QUOTA = {
4
+ label: "Zhipu",
5
+ endpoint: "https://bigmodel.cn/api/monitor/usage/quota/limit",
6
+ httpErrorPrefix: "Zhipu API error",
7
+ envelope: "zhipu",
8
+ resolveAuth: resolveZhipuAuthCached,
9
+ };
10
+ export function queryZhipuQuota(options = {}) {
11
+ return queryGlmCodingPlanQuota(ZHIPU_QUOTA, options);
91
12
  }
92
13
  //# sourceMappingURL=zhipu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zhipu.js","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zhipu.js","sourceRoot":"","sources":["../../src/lib/zhipu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,mDAAmD;IAC7D,eAAe,EAAE,iBAAiB;IAClC,QAAQ,EAAE,OAAO;IACjB,WAAW,EAAE,sBAAsB;CAC3B,CAAC;AAEX,MAAM,UAAU,eAAe,CAAC,UAAyC,EAAE;IACzE,OAAO,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"alibaba-coding-plan.d.ts","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AAiB3B,eAAO,MAAM,yBAAyB,EAAE,aAiGvC,CAAC"}
1
+ {"version":3,"file":"alibaba-coding-plan.d.ts","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AA2B3B,eAAO,MAAM,yBAAyB,EAAE,aAiIvC,CAAC"}
@@ -1,6 +1,6 @@
1
- import { computeAlibabaCodingPlanQuota, readAlibabaCodingPlanQuotaState, } from "../lib/qwen-local-quota.js";
2
- import { DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS, isAlibabaModelId, resolveAlibabaCodingPlanAuthCached, } from "../lib/alibaba-auth.js";
3
- import { attemptedErrorResult, attemptedResult, notAttemptedResult } from "./result-helpers.js";
1
+ import { ALIBABA_CODING_PLAN_STATE_VERSION, computeAlibabaCodingPlanQuota, getAlibabaCodingPlanQuotaPath, readAlibabaCodingPlanQuotaState, } from "../lib/qwen-local-quota.js";
2
+ import { DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS, getAlibabaCodingPlanAuthDiagnostics, isAlibabaModelId, resolveAlibabaCodingPlanAuthCached, } from "../lib/alibaba-auth.js";
3
+ import { attemptedErrorResult, attemptedResult, inspectGeneratedCounterFile, notAttemptedResult, statusDetailsFromRecord, withStatusDetails, } from "./result-helpers.js";
4
4
  import { findQuotaProviderDefinition } from "../lib/quota-providers.js";
5
5
  function tierLabel(tier) {
6
6
  return tier === "pro" ? "Pro" : "Lite";
@@ -21,15 +21,42 @@ export const alibabaCodingPlanProvider = {
21
21
  : isAlibabaModelId(model);
22
22
  },
23
23
  async fetch(ctx) {
24
+ const diagnostics = await getAlibabaCodingPlanAuthDiagnostics({
25
+ maxAgeMs: DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS,
26
+ fallbackTier: "lite",
27
+ });
24
28
  const plan = await resolveAlibabaCodingPlanAuthCached({
25
29
  maxAgeMs: DEFAULT_ALIBABA_AUTH_CACHE_MAX_AGE_MS,
26
30
  fallbackTier: "lite",
27
31
  });
32
+ const statePath = getAlibabaCodingPlanQuotaPath();
33
+ const state = await inspectGeneratedCounterFile(statePath, ALIBABA_CODING_PLAN_STATE_VERSION);
34
+ const lastUpdate = state.lastUpdatedAt === null ? "(none)" : new Date(state.lastUpdatedAt).toISOString();
35
+ const authError = diagnostics.state === "invalid" ? diagnostics.error : undefined;
36
+ const statusDetails = statusDetailsFromRecord({
37
+ "alibaba auth configured": diagnostics.state === "none" ? "false" : "true",
38
+ alibaba_api_key_source: diagnostics.source ?? "(none)",
39
+ alibaba_api_key_checked_paths: diagnostics.checkedPaths.join(" | ") || "(none)",
40
+ alibaba_api_key_auth_paths: diagnostics.authPaths.join(" | ") || "(none)",
41
+ alibaba_coding_plan: diagnostics.state === "configured"
42
+ ? diagnostics.tier
43
+ : diagnostics.state === "invalid"
44
+ ? "invalid"
45
+ : "(none)",
46
+ alibaba_auth_error: authError,
47
+ "alibaba coding plan error": authError,
48
+ "alibaba coding plan local quota": `path=${statePath} exists=${state.exists ? "true" : "false"} health=${state.health} version=${state.version ?? "(none)"} last_update=${lastUpdate}`,
49
+ local_state_path: statePath,
50
+ local_state_exists: state.exists ? "true" : "false",
51
+ local_state_health: state.health,
52
+ local_state_version: String(state.version ?? "(none)"),
53
+ local_state_last_update: lastUpdate,
54
+ });
28
55
  if (plan.state === "none") {
29
- return notAttemptedResult();
56
+ return withStatusDetails(notAttemptedResult(), statusDetails);
30
57
  }
31
58
  if (plan.state === "invalid") {
32
- return attemptedErrorResult("Alibaba Coding Plan", plan.error);
59
+ return withStatusDetails(attemptedErrorResult("Alibaba Coding Plan", plan.error), statusDetails);
33
60
  }
34
61
  const tuning = findQuotaProviderDefinition(ctx.config.quotaProviders ?? [], "alibaba-coding-plan");
35
62
  const limits = tuning?.mode === "local-estimate"
@@ -89,7 +116,7 @@ export const alibabaCodingPlanProvider = {
89
116
  resetTimeIso: quota.monthly.resetTimeIso,
90
117
  },
91
118
  ];
92
- return attemptedResult(entries);
119
+ return withStatusDetails(attemptedResult(entries), statusDetails);
93
120
  },
94
121
  };
95
122
  //# sourceMappingURL=alibaba-coding-plan.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alibaba-coding-plan.js","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alibaba-coding-plan.js","sourceRoot":"","sources":["../../src/providers/alibaba-coding-plan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AAK3B,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,eAAO,MAAM,iBAAiB,EAAE,aAmE/B,CAAC"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mBAAmB,CAAC;AAgB3B,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,eAAO,MAAM,iBAAiB,EAAE,aA6F/B,CAAC"}
@@ -3,9 +3,10 @@
3
3
  *
4
4
  * Normalizes Claude CLI-exposed quota windows into generic toast entries.
5
5
  */
6
- import { hasAnthropicCredentialsConfigured, queryAnthropicQuota } from "../lib/anthropic.js";
6
+ import { getAnthropicDiagnostics, hasAnthropicCredentialsConfigured, queryAnthropicQuota, } from "../lib/anthropic.js";
7
+ import { sanitizeDisplayText } from "../lib/display-sanitize.js";
7
8
  import { isCanonicalProviderAvailable } from "../lib/provider-availability.js";
8
- import { attemptedErrorResult, attemptedResult, notAttemptedResult } from "./result-helpers.js";
9
+ import { attemptedErrorResult, attemptedResult, notAttemptedResult, statusDetailsFromRecord, withStatusDetails, } from "./result-helpers.js";
9
10
  export function getAnthropicNoDataMessage() {
10
11
  return "Quota unavailable via local Claude CLI or Claude OAuth fallback";
11
12
  }
@@ -28,15 +29,42 @@ export const anthropicProvider = {
28
29
  return model.toLowerCase().startsWith("anthropic/");
29
30
  },
30
31
  async fetch(ctx) {
31
- const result = await queryAnthropicQuota({
32
+ const options = {
32
33
  binaryPath: ctx.config?.anthropicBinaryPath,
33
34
  requestTimeoutMs: ctx.config?.requestTimeoutMs,
34
- });
35
+ };
36
+ let statusDetails;
37
+ try {
38
+ const diagnostics = await getAnthropicDiagnostics(options);
39
+ const quota = diagnostics.quotaSupported ? diagnostics.quota : undefined;
40
+ statusDetails = statusDetailsFromRecord({
41
+ cli_installed: diagnostics.installed ? "true" : "false",
42
+ cli_version: diagnostics.version ?? "(none)",
43
+ auth_status: diagnostics.authStatus,
44
+ quota_supported: diagnostics.quotaSupported ? "true" : "false",
45
+ quota_source: diagnostics.quotaSource === "none" ? "(none)" : diagnostics.quotaSource,
46
+ checked_commands: diagnostics.checkedCommands.join(" | ") || "(none)",
47
+ message: diagnostics.message,
48
+ five_hour_remaining: quota
49
+ ? `${quota.five_hour.percentRemaining}% reset_at=${quota.five_hour.resetTimeIso ?? "(none)"}`
50
+ : undefined,
51
+ seven_day_remaining: quota
52
+ ? `${quota.seven_day.percentRemaining}% reset_at=${quota.seven_day.resetTimeIso ?? "(none)"}`
53
+ : undefined,
54
+ });
55
+ }
56
+ catch (error) {
57
+ statusDetails = statusDetailsFromRecord({
58
+ cli_installed: "false",
59
+ message: `failed to probe Claude CLI: ${sanitizeDisplayText(error instanceof Error ? error.message : String(error))}`,
60
+ });
61
+ }
62
+ const result = await queryAnthropicQuota(options);
35
63
  if (!result) {
36
- return notAttemptedResult();
64
+ return withStatusDetails(notAttemptedResult(), statusDetails);
37
65
  }
38
66
  if (!result.success) {
39
- return attemptedErrorResult("Claude", result.error);
67
+ return withStatusDetails(attemptedErrorResult("Claude", result.error), statusDetails);
40
68
  }
41
69
  const entries = [
42
70
  {
@@ -66,7 +94,7 @@ export const anthropicProvider = {
66
94
  resetTimeIso: result.seven_day.resetTimeIso,
67
95
  },
68
96
  ];
69
- return attemptedResult(entries);
97
+ return withStatusDetails(attemptedResult(entries), statusDetails);
70
98
  },
71
99
  };
72
100
  //# sourceMappingURL=anthropic.js.map