@slkiser/opencode-quota 4.8.2 → 4.9.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 (227) hide show
  1. package/README.md +17 -18
  2. package/dist/bin/opencode-quota.d.ts.map +1 -1
  3. package/dist/bin/opencode-quota.js +5 -3
  4. package/dist/bin/opencode-quota.js.map +1 -1
  5. package/dist/lib/accounting-format.d.ts +54 -0
  6. package/dist/lib/accounting-format.d.ts.map +1 -0
  7. package/dist/lib/accounting-format.js +271 -0
  8. package/dist/lib/accounting-format.js.map +1 -0
  9. package/dist/lib/anthropic.d.ts +2 -0
  10. package/dist/lib/anthropic.d.ts.map +1 -1
  11. package/dist/lib/anthropic.js +79 -19
  12. package/dist/lib/anthropic.js.map +1 -1
  13. package/dist/lib/cli-show.d.ts.map +1 -1
  14. package/dist/lib/cli-show.js +1 -0
  15. package/dist/lib/cli-show.js.map +1 -1
  16. package/dist/lib/config.d.ts +10 -1
  17. package/dist/lib/config.d.ts.map +1 -1
  18. package/dist/lib/config.js +35 -3
  19. package/dist/lib/config.js.map +1 -1
  20. package/dist/lib/copilot.d.ts +2 -0
  21. package/dist/lib/copilot.d.ts.map +1 -1
  22. package/dist/lib/copilot.js +38 -0
  23. package/dist/lib/copilot.js.map +1 -1
  24. package/dist/lib/deepseek.d.ts +12 -12
  25. package/dist/lib/deepseek.d.ts.map +1 -1
  26. package/dist/lib/deepseek.js +33 -29
  27. package/dist/lib/deepseek.js.map +1 -1
  28. package/dist/lib/display-sanitize.d.ts.map +1 -1
  29. package/dist/lib/display-sanitize.js +75 -22
  30. package/dist/lib/display-sanitize.js.map +1 -1
  31. package/dist/lib/entries.d.ts +105 -23
  32. package/dist/lib/entries.d.ts.map +1 -1
  33. package/dist/lib/entries.js +37 -1
  34. package/dist/lib/entries.js.map +1 -1
  35. package/dist/lib/format.d.ts +1 -0
  36. package/dist/lib/format.d.ts.map +1 -1
  37. package/dist/lib/format.js +84 -19
  38. package/dist/lib/format.js.map +1 -1
  39. package/dist/lib/google-agy.d.ts +2 -0
  40. package/dist/lib/google-agy.d.ts.map +1 -1
  41. package/dist/lib/google-agy.js +29 -14
  42. package/dist/lib/google-agy.js.map +1 -1
  43. package/dist/lib/google-gemini-cli.d.ts +2 -0
  44. package/dist/lib/google-gemini-cli.d.ts.map +1 -1
  45. package/dist/lib/google-gemini-cli.js +29 -3
  46. package/dist/lib/google-gemini-cli.js.map +1 -1
  47. package/dist/lib/google-token-cache.d.ts +5 -8
  48. package/dist/lib/google-token-cache.d.ts.map +1 -1
  49. package/dist/lib/google-token-cache.js +30 -118
  50. package/dist/lib/google-token-cache.js.map +1 -1
  51. package/dist/lib/google.d.ts +2 -0
  52. package/dist/lib/google.d.ts.map +1 -1
  53. package/dist/lib/google.js +31 -6
  54. package/dist/lib/google.js.map +1 -1
  55. package/dist/lib/grouped-entry-normalization.d.ts.map +1 -1
  56. package/dist/lib/grouped-entry-normalization.js +53 -20
  57. package/dist/lib/grouped-entry-normalization.js.map +1 -1
  58. package/dist/lib/minimax-auth.d.ts +1 -1
  59. package/dist/lib/minimax-auth.js +1 -1
  60. package/dist/lib/nanogpt.d.ts +5 -5
  61. package/dist/lib/nanogpt.d.ts.map +1 -1
  62. package/dist/lib/nanogpt.js +59 -23
  63. package/dist/lib/nanogpt.js.map +1 -1
  64. package/dist/lib/openai.d.ts +4 -0
  65. package/dist/lib/openai.d.ts.map +1 -1
  66. package/dist/lib/openai.js +22 -3
  67. package/dist/lib/openai.js.map +1 -1
  68. package/dist/lib/opencode-go-auth.js +1 -1
  69. package/dist/lib/opencode-go-auth.js.map +1 -1
  70. package/dist/lib/opencode-go.d.ts.map +1 -1
  71. package/dist/lib/opencode-go.js +6 -1
  72. package/dist/lib/opencode-go.js.map +1 -1
  73. package/dist/lib/opencode-zen-config.d.ts +0 -1
  74. package/dist/lib/opencode-zen-config.d.ts.map +1 -1
  75. package/dist/lib/opencode-zen-config.js +0 -22
  76. package/dist/lib/opencode-zen-config.js.map +1 -1
  77. package/dist/lib/opencode-zen.d.ts +3 -0
  78. package/dist/lib/opencode-zen.d.ts.map +1 -1
  79. package/dist/lib/opencode-zen.js +18 -1
  80. package/dist/lib/opencode-zen.js.map +1 -1
  81. package/dist/lib/openrouter.d.ts +2 -0
  82. package/dist/lib/openrouter.d.ts.map +1 -1
  83. package/dist/lib/openrouter.js +10 -0
  84. package/dist/lib/openrouter.js.map +1 -1
  85. package/dist/lib/provider-metadata.d.ts +2 -307
  86. package/dist/lib/provider-metadata.d.ts.map +1 -1
  87. package/dist/lib/provider-metadata.js +14 -316
  88. package/dist/lib/provider-metadata.js.map +1 -1
  89. package/dist/lib/provider-registration.d.ts +325 -0
  90. package/dist/lib/provider-registration.d.ts.map +1 -0
  91. package/dist/lib/provider-registration.js +338 -0
  92. package/dist/lib/provider-registration.js.map +1 -0
  93. package/dist/lib/quota-accounting-projection.d.ts +7 -0
  94. package/dist/lib/quota-accounting-projection.d.ts.map +1 -0
  95. package/dist/lib/quota-accounting-projection.js +239 -0
  96. package/dist/lib/quota-accounting-projection.js.map +1 -0
  97. package/dist/lib/quota-command-format.d.ts +3 -2
  98. package/dist/lib/quota-command-format.d.ts.map +1 -1
  99. package/dist/lib/quota-command-format.js +35 -9
  100. package/dist/lib/quota-command-format.js.map +1 -1
  101. package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
  102. package/dist/lib/quota-dialog-commands.js +1 -0
  103. package/dist/lib/quota-dialog-commands.js.map +1 -1
  104. package/dist/lib/quota-export.d.ts +2 -1
  105. package/dist/lib/quota-export.d.ts.map +1 -1
  106. package/dist/lib/quota-export.js +36 -10
  107. package/dist/lib/quota-export.js.map +1 -1
  108. package/dist/lib/quota-render-data.d.ts +0 -1
  109. package/dist/lib/quota-render-data.d.ts.map +1 -1
  110. package/dist/lib/quota-render-data.js +9 -138
  111. package/dist/lib/quota-render-data.js.map +1 -1
  112. package/dist/lib/quota-reset-notifications.d.ts.map +1 -1
  113. package/dist/lib/quota-reset-notifications.js +3 -0
  114. package/dist/lib/quota-reset-notifications.js.map +1 -1
  115. package/dist/lib/quota-state-codec.d.ts +16 -0
  116. package/dist/lib/quota-state-codec.d.ts.map +1 -0
  117. package/dist/lib/quota-state-codec.js +409 -0
  118. package/dist/lib/quota-state-codec.js.map +1 -0
  119. package/dist/lib/quota-state.d.ts +2 -11
  120. package/dist/lib/quota-state.d.ts.map +1 -1
  121. package/dist/lib/quota-state.js +165 -305
  122. package/dist/lib/quota-state.js.map +1 -1
  123. package/dist/lib/quota-status.d.ts.map +1 -1
  124. package/dist/lib/quota-status.js +14 -7
  125. package/dist/lib/quota-status.js.map +1 -1
  126. package/dist/lib/quota-telemetry.d.ts.map +1 -1
  127. package/dist/lib/quota-telemetry.js +7 -3
  128. package/dist/lib/quota-telemetry.js.map +1 -1
  129. package/dist/lib/quota-toast-runtime.d.ts +60 -0
  130. package/dist/lib/quota-toast-runtime.d.ts.map +1 -0
  131. package/dist/lib/quota-toast-runtime.js +765 -0
  132. package/dist/lib/quota-toast-runtime.js.map +1 -0
  133. package/dist/lib/resolved-auth-identity.d.ts +36 -0
  134. package/dist/lib/resolved-auth-identity.d.ts.map +1 -0
  135. package/dist/lib/resolved-auth-identity.js +193 -0
  136. package/dist/lib/resolved-auth-identity.js.map +1 -0
  137. package/dist/lib/scoped-update-migration.d.ts +101 -0
  138. package/dist/lib/scoped-update-migration.d.ts.map +1 -0
  139. package/dist/lib/scoped-update-migration.js +348 -0
  140. package/dist/lib/scoped-update-migration.js.map +1 -0
  141. package/dist/lib/scoped-update.d.ts +8 -0
  142. package/dist/lib/scoped-update.d.ts.map +1 -1
  143. package/dist/lib/scoped-update.js +263 -50
  144. package/dist/lib/scoped-update.js.map +1 -1
  145. package/dist/lib/toast-format-grouped.d.ts +1 -0
  146. package/dist/lib/toast-format-grouped.d.ts.map +1 -1
  147. package/dist/lib/toast-format-grouped.js +111 -24
  148. package/dist/lib/toast-format-grouped.js.map +1 -1
  149. package/dist/lib/tui-compact-format.d.ts +1 -0
  150. package/dist/lib/tui-compact-format.d.ts.map +1 -1
  151. package/dist/lib/tui-compact-format.js +133 -22
  152. package/dist/lib/tui-compact-format.js.map +1 -1
  153. package/dist/lib/tui-panel-state.d.ts +2 -0
  154. package/dist/lib/tui-panel-state.d.ts.map +1 -1
  155. package/dist/lib/tui-panel-state.js.map +1 -1
  156. package/dist/lib/tui-runtime.d.ts.map +1 -1
  157. package/dist/lib/tui-runtime.js +84 -10
  158. package/dist/lib/tui-runtime.js.map +1 -1
  159. package/dist/lib/tui-sidebar-format.d.ts +1 -1
  160. package/dist/lib/tui-sidebar-format.d.ts.map +1 -1
  161. package/dist/lib/tui-sidebar-format.js +1 -0
  162. package/dist/lib/tui-sidebar-format.js.map +1 -1
  163. package/dist/lib/types.d.ts +7 -1
  164. package/dist/lib/types.d.ts.map +1 -1
  165. package/dist/lib/types.js +1 -0
  166. package/dist/lib/types.js.map +1 -1
  167. package/dist/lib/xai.d.ts +2 -0
  168. package/dist/lib/xai.d.ts.map +1 -1
  169. package/dist/lib/xai.js +10 -0
  170. package/dist/lib/xai.js.map +1 -1
  171. package/dist/plugin.d.ts.map +1 -1
  172. package/dist/plugin.js +27 -720
  173. package/dist/plugin.js.map +1 -1
  174. package/dist/providers/accounting-decimal.d.ts +2 -0
  175. package/dist/providers/accounting-decimal.d.ts.map +1 -0
  176. package/dist/providers/accounting-decimal.js +23 -0
  177. package/dist/providers/accounting-decimal.js.map +1 -0
  178. package/dist/providers/cache-policies.d.ts +64 -0
  179. package/dist/providers/cache-policies.d.ts.map +1 -0
  180. package/dist/providers/cache-policies.js +197 -0
  181. package/dist/providers/cache-policies.js.map +1 -0
  182. package/dist/providers/cursor.d.ts.map +1 -1
  183. package/dist/providers/cursor.js +73 -58
  184. package/dist/providers/cursor.js.map +1 -1
  185. package/dist/providers/deepseek.d.ts +2 -2
  186. package/dist/providers/deepseek.d.ts.map +1 -1
  187. package/dist/providers/deepseek.js +64 -33
  188. package/dist/providers/deepseek.js.map +1 -1
  189. package/dist/providers/google-agy.js +2 -2
  190. package/dist/providers/google-agy.js.map +1 -1
  191. package/dist/providers/kilo.d.ts.map +1 -1
  192. package/dist/providers/kilo.js +56 -29
  193. package/dist/providers/kilo.js.map +1 -1
  194. package/dist/providers/mimo.d.ts.map +1 -1
  195. package/dist/providers/mimo.js +37 -15
  196. package/dist/providers/mimo.js.map +1 -1
  197. package/dist/providers/minimax-coding-plan.d.ts +8 -7
  198. package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
  199. package/dist/providers/minimax-coding-plan.js +97 -83
  200. package/dist/providers/minimax-coding-plan.js.map +1 -1
  201. package/dist/providers/nanogpt.d.ts.map +1 -1
  202. package/dist/providers/nanogpt.js +72 -51
  203. package/dist/providers/nanogpt.js.map +1 -1
  204. package/dist/providers/openai.d.ts.map +1 -1
  205. package/dist/providers/openai.js +0 -3
  206. package/dist/providers/openai.js.map +1 -1
  207. package/dist/providers/opencode-go.d.ts.map +1 -1
  208. package/dist/providers/opencode-go.js +3 -4
  209. package/dist/providers/opencode-go.js.map +1 -1
  210. package/dist/providers/opencode-zen.d.ts.map +1 -1
  211. package/dist/providers/opencode-zen.js +78 -17
  212. package/dist/providers/opencode-zen.js.map +1 -1
  213. package/dist/providers/quota-providers.d.ts.map +1 -1
  214. package/dist/providers/quota-providers.js +31 -23
  215. package/dist/providers/quota-providers.js.map +1 -1
  216. package/dist/providers/registry.d.ts +3 -2
  217. package/dist/providers/registry.d.ts.map +1 -1
  218. package/dist/providers/registry.js +41 -31
  219. package/dist/providers/registry.js.map +1 -1
  220. package/dist/providers/result-helpers.d.ts +10 -5
  221. package/dist/providers/result-helpers.d.ts.map +1 -1
  222. package/dist/providers/result-helpers.js +3 -3
  223. package/dist/providers/result-helpers.js.map +1 -1
  224. package/dist/tui.d.ts.map +1 -1
  225. package/dist/tui.js +11 -3
  226. package/dist/tui.tsx +16 -7
  227. package/package.json +1 -1
package/README.md CHANGED
@@ -40,16 +40,21 @@ After installation:
40
40
  ## Updating
41
41
 
42
42
  1. Close OpenCode.
43
- 2. Run:
43
+ 2. Preview the update:
44
+
45
+ ```bash
46
+ npx @slkiser/opencode-quota@latest update --dry-run
47
+ ```
48
+
49
+ 3. Inspect the safe setting/cache changes and manual credential findings, then apply:
44
50
 
45
51
  ```bash
46
52
  npx @slkiser/opencode-quota@latest update
47
53
  ```
48
54
 
49
- 3. Review the exact config edits and cache directories, then confirm.
50
55
  4. Restart OpenCode.
51
56
 
52
- Use `--dry-run` to preview without changing anything. Otherwise, `update` shows the OpenCode Quota config and cache changes and asks before applying them. It leaves your other plugins and settings alone. Use `--yes` only when you intentionally need a noninteractive run.
57
+ The updater prints the complete preview before its own config or cache changes. `--yes` authorizes only the previewed safe config edits and manifest-verified cache cleanup; it never moves or deletes secrets. See [Updating safely](docs/readme/updating.md) for detailed behavior and manual credential steps.
53
58
 
54
59
  ## Choose your setup
55
60
 
@@ -82,15 +87,11 @@ Use `--dry-run` to preview without changing anything. Otherwise, `update` shows
82
87
 
83
88
  More ways to use it:
84
89
 
85
- - Check quota from a terminal with `opencode-quota show`
86
- - Use JSON output in scripts, status bars, CI checks, and other tools
87
- - Send quota data to monitoring tools with optional OpenTelemetry metrics
88
- - Run the same slash commands in the TUI, Web, and Desktop
89
- - Tune reset countdown precision without changing the default compact display
90
- - Get a popup when quota becomes available again for the windows you choose via [`resetNotifications`](docs/readme/configuration.md#notify-when-quota-becomes-available-again)
91
- - Add a quota bar below the TUI prompt via [`tuiPromptBar.enabled`](docs/readme/configuration.md#tui-settings)
92
- - Choose current-session or descendant-tree token totals across `/quota`, toasts, the sidebar, and the compact input line
93
- - Diagnose authentication, quota sources, pricing, and maintainer notices
90
+ - Check quota anywhere: use `opencode-quota show` in a terminal or the same slash commands in the TUI, Web, and Desktop.
91
+ - Automate quota checks with JSON output for scripts, status bars, and CI. Optional OpenTelemetry metrics support monitoring tools.
92
+ - Customize the display with [`tuiPromptBar.enabled`](docs/readme/configuration.md#tui-settings), OpenCode Go's preferred collapsed-sidebar window, reset precision, and [`accountingDetail`](docs/readme/configuration.md#show-accounting-detail).
93
+ - Choose current-session or descendant-tree token totals. Get reset popups for selected windows with [`resetNotifications`](docs/readme/configuration.md#notify-when-quota-becomes-available-again).
94
+ - Troubleshoot authentication, quota sources, pricing, and maintainer notices.
94
95
 
95
96
  See [Configuration](docs/readme/configuration.md) for UI options and [Manual install](docs/readme/manual-install.md) for setup details.
96
97
 
@@ -187,8 +188,8 @@ Gemini CLI quota support is deprecated for new installs. Existing v4 configurati
187
188
  | Alibaba Coding Plan | Automatic | Local estimate | Quota |
188
189
  | DeepSeek | Automatic | Remote API | Balance and status |
189
190
  | Kimi Code | Automatic | Remote API | Quota |
190
- | MiniMax Coding Plan | Automatic | Remote API | Quota |
191
- | MiniMax Coding Plan (CN) | Automatic | Remote API | Quota |
191
+ | MiniMax Token Plan | Automatic | Remote API | Quota |
192
+ | MiniMax Token Plan (CN) | Automatic | Remote API | Quota |
192
193
  | Qwen Code | [Needs setup](docs/readme/providers.md#qwen-code) | Local estimate | Quota |
193
194
  | Xiaomi MiMo | [Needs setup](docs/readme/providers.md#xiaomi-mimo) | Dashboard API | Quota and balance |
194
195
  | Z.ai Coding Plan | Automatic | Remote API | Quota |
@@ -202,16 +203,14 @@ Gemini CLI quota support is deprecated for new installs. Existing v4 configurati
202
203
  | Provider | Auth/setup | Data from | Reports |
203
204
  | ------------------------ | ---------- | ---------- | ------- |
204
205
  | Kimi Code | Automatic | Remote API | Quota |
205
- | MiniMax Coding Plan | Automatic | Remote API | Quota |
206
- | MiniMax Coding Plan (CN) | Automatic | Remote API | Quota |
206
+ | MiniMax Token Plan | Automatic | Remote API | Quota |
207
+ | MiniMax Token Plan (CN) | Automatic | Remote API | Quota |
207
208
  | Zhipu Coding Plan | Automatic | Remote API | Quota |
208
209
 
209
210
  These vendors offer team or business plans, but the current integrations report only the configured member API key rather than organization-wide usage.
210
211
 
211
212
  </details>
212
213
 
213
- The quota view uses short labels such as `Day quota`, `5h quota`, `Day budget`, and `Balance`. Bar width varies by surface. JSON keeps the precise accounting type for scripts.
214
-
215
214
  ### Custom providers
216
215
 
217
216
  Add a provider that uses a remote quota API or tracks a local usage estimate:
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-quota.d.ts","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":";AA+CA,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,MAAM,GAAG,SAA2B,EAC3C,UAAU,GAAE,MAAuC,EACnD,WAAW,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAuB,GACzD,OAAO,CAMT;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CxE"}
1
+ {"version":3,"file":"opencode-quota.d.ts","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":";AAiDA,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,MAAM,GAAG,SAA2B,EAC3C,UAAU,GAAE,MAAuC,EACnD,WAAW,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAuB,GACzD,OAAO,CAMT;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CxE"}
@@ -23,9 +23,11 @@ const USAGE = [
23
23
  " status Print Quota Status diagnostics (same data as /quota_status)",
24
24
  " --json Machine-readable JSON output",
25
25
  " --provider <id> Filter to one provider",
26
- " update Safely refresh only OpenCode Quota config and verified cache entries",
27
- " --dry-run Preview without changing config or cache",
28
- " --yes Apply noninteractively after printing the preview",
26
+ " update Preview safe setting/package-cache changes and report legacy credential findings",
27
+ " Credential-specific audit sources and values are not read",
28
+ " Values encountered in normal config parsing are never printed, copied, or modified",
29
+ " --dry-run Print the full responsible preview without changing anything",
30
+ " --yes Apply only safe setting/cache work after printing the preview",
29
31
  " provider add Add or update one global quotaProviders definition",
30
32
  " --dry-run Preview the exact global OpenCode config without writing",
31
33
  ].join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-quota.js","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opencode-quota.js","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { AccountingComponent, AccountingPercentageBasis, AccountingQuantity, AccountingResultType, AccountingSemantic, AccountingUnit, AccountingWindow, QuotaToastEntry } from "./entries.js";
2
+ export declare function isCanonicalAccountingDecimal(value: string): boolean;
3
+ export declare function accountingUnitsEqual(left: AccountingUnit, right: AccountingUnit): boolean;
4
+ export declare function formatAccountingQuantity(quantity: AccountingQuantity): string;
5
+ export declare function formatAccountingBoolean(value: boolean, semantic?: AccountingSemantic): string;
6
+ export type AccountingBasisDisplayMode = "remaining" | "used";
7
+ export declare function formatAccountingBasisSummary(basis: AccountingPercentageBasis, mode: AccountingBasisDisplayMode): string | null;
8
+ export type AccountingBasisFact = {
9
+ role: "used" | "limit" | "remaining";
10
+ text: string;
11
+ };
12
+ export declare function formatAccountingBasisDetails(basis: AccountingPercentageBasis): string[];
13
+ export declare function formatAccountingResultTypeLabel(resultType: AccountingResultType): string;
14
+ export declare function formatAccountingWindowLabel(window: AccountingWindow): string;
15
+ export declare function formatAccountingComponentLabel(component: AccountingComponent): string;
16
+ export declare function formatAccountingSemanticLabel(resultType: AccountingResultType, semantic: AccountingSemantic, entryKind: QuotaToastEntry["kind"]): string;
17
+ export type AccountingSemanticSortKey = readonly [
18
+ resultType: number,
19
+ metricKind: number,
20
+ metric: number
21
+ ];
22
+ export declare function getAccountingSemanticSortKey(entry: QuotaToastEntry): AccountingSemanticSortKey;
23
+ export declare function compareAccountingSemanticEntries(left: QuotaToastEntry, right: QuotaToastEntry): number;
24
+ export declare function getAccountingEntryLabel(entry: QuotaToastEntry): string;
25
+ export type AccountingBooleanWording = "semantic" | "generic";
26
+ export type AccountingBasisRequest = {
27
+ kind: "summary";
28
+ mode: AccountingBasisDisplayMode;
29
+ } | {
30
+ kind: "detailed";
31
+ };
32
+ export type AccountingRowInterpretation = {
33
+ label: string;
34
+ display: {
35
+ kind: "percent";
36
+ percentRemaining: number;
37
+ } | {
38
+ kind: "value";
39
+ entryKind: "value" | "quantity" | "boolean";
40
+ text: string;
41
+ };
42
+ basis?: {
43
+ kind: "summary";
44
+ text: string | null;
45
+ } | {
46
+ kind: "detailed";
47
+ facts: readonly AccountingBasisFact[];
48
+ };
49
+ };
50
+ export declare function interpretAccountingRow(entry: QuotaToastEntry, options: {
51
+ booleanWording: AccountingBooleanWording;
52
+ basis?: AccountingBasisRequest;
53
+ }): AccountingRowInterpretation;
54
+ //# sourceMappingURL=accounting-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting-format.d.ts","sourceRoot":"","sources":["../../src/lib/accounting-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,271 @@
1
+ import { isBooleanEntry, isPercentEntry, isQuantityEntry, isValueEntry } from "./entries.js";
2
+ const CANONICAL_DECIMAL_RE = /^-?(?:0|[1-9]\d*)(?:\.\d+)?$/u;
3
+ const RESULT_TYPE_LABELS = {
4
+ quota: "Quota",
5
+ rate_limit: "Rate limit",
6
+ usage: "Usage",
7
+ spend: "Spend",
8
+ budget: "Budget",
9
+ balance: "Balance",
10
+ status: "Status",
11
+ };
12
+ const RESULT_TYPE_ORDER = {
13
+ quota: 0,
14
+ rate_limit: 1,
15
+ budget: 2,
16
+ usage: 3,
17
+ spend: 4,
18
+ balance: 5,
19
+ status: 6,
20
+ };
21
+ const WINDOW_LABELS = {
22
+ rpm: "RPM",
23
+ hour: "Hourly",
24
+ five_hour: "Five-hour",
25
+ day: "Daily",
26
+ week: "Weekly",
27
+ month: "Monthly",
28
+ year: "Yearly",
29
+ mcp: "MCP",
30
+ code_review: "Code Review",
31
+ };
32
+ const WINDOW_ORDER = {
33
+ rpm: 0,
34
+ hour: 1,
35
+ five_hour: 2,
36
+ day: 3,
37
+ week: 4,
38
+ month: 5,
39
+ year: 6,
40
+ mcp: 7,
41
+ code_review: 8,
42
+ };
43
+ const COMPONENT_LABELS = {
44
+ current_balance: "Current balance",
45
+ total_balance: "Total balance",
46
+ cash_balance: "Cash balance",
47
+ gift_balance: "Gift balance",
48
+ granted_balance: "Granted balance",
49
+ topped_up_balance: "Topped-up balance",
50
+ remaining_credits: "Remaining credits",
51
+ auto_reload: "Auto-reload",
52
+ auto_reload_amount: "Auto-reload amount",
53
+ auto_reload_trigger: "Auto-reload trigger",
54
+ };
55
+ const COMPONENT_ORDER = {
56
+ current_balance: 0,
57
+ remaining_credits: 0,
58
+ total_balance: 1,
59
+ cash_balance: 2,
60
+ gift_balance: 3,
61
+ granted_balance: 4,
62
+ topped_up_balance: 5,
63
+ auto_reload: 6,
64
+ auto_reload_amount: 7,
65
+ auto_reload_trigger: 8,
66
+ };
67
+ const COUNT_LABELS = {
68
+ request: ["request", "requests"],
69
+ token: ["token", "tokens"],
70
+ credit: ["credit", "credits"],
71
+ message: ["message", "messages"],
72
+ interaction: ["interaction", "interactions"],
73
+ unit: ["unit", "units"],
74
+ };
75
+ export function isCanonicalAccountingDecimal(value) {
76
+ if (!CANONICAL_DECIMAL_RE.test(value))
77
+ return false;
78
+ if (!value.startsWith("-"))
79
+ return true;
80
+ return !/^0(?:\.0+)?$/u.test(value.slice(1));
81
+ }
82
+ function splitDecimal(decimal) {
83
+ const negative = decimal.startsWith("-");
84
+ const unsigned = negative ? decimal.slice(1) : decimal;
85
+ const [integer = "0", fraction = ""] = unsigned.split(".", 2);
86
+ return { negative, integer, fraction };
87
+ }
88
+ function groupInteger(integer) {
89
+ return integer.replace(/\B(?=(\d{3})+(?!\d))/gu, ",");
90
+ }
91
+ function isBelowOneCent(integer, fraction) {
92
+ return (integer === "0" &&
93
+ fraction.length > 0 &&
94
+ !/^0+$/u.test(fraction) &&
95
+ fraction.padEnd(2, "0").slice(0, 2) === "00");
96
+ }
97
+ function incrementIntegerString(integer) {
98
+ return (BigInt(integer) + 1n).toString();
99
+ }
100
+ function formatCurrencyAmount(decimal) {
101
+ const { negative, integer, fraction } = splitDecimal(decimal);
102
+ if (isBelowOneCent(integer, fraction)) {
103
+ if (!negative)
104
+ return "<0.01";
105
+ return `-${integer}.${fraction}`;
106
+ }
107
+ const padded = `${fraction}000`;
108
+ let cents = Number(padded.slice(0, 2));
109
+ let roundedInteger = integer;
110
+ if (Number(padded[2]) >= 5)
111
+ cents += 1;
112
+ if (cents === 100) {
113
+ roundedInteger = incrementIntegerString(integer);
114
+ cents = 0;
115
+ }
116
+ return `${negative ? "-" : ""}${groupInteger(roundedInteger)}.${String(cents).padStart(2, "0")}`;
117
+ }
118
+ function formatExactAmount(decimal) {
119
+ const { negative, integer, fraction } = splitDecimal(decimal);
120
+ return `${negative ? "-" : ""}${groupInteger(integer)}${fraction ? `.${fraction}` : ""}`;
121
+ }
122
+ export function accountingUnitsEqual(left, right) {
123
+ if (left.kind !== right.kind)
124
+ return false;
125
+ if (left.kind === "currency" && right.kind === "currency")
126
+ return left.code === right.code;
127
+ if (left.kind === "count" && right.kind === "count")
128
+ return left.unit === right.unit;
129
+ if (left.kind === "custom" && right.kind === "custom")
130
+ return left.symbol === right.symbol;
131
+ return false;
132
+ }
133
+ export function formatAccountingQuantity(quantity) {
134
+ if (!isCanonicalAccountingDecimal(quantity.decimal)) {
135
+ throw new TypeError("Accounting quantity decimal must be canonical");
136
+ }
137
+ if (quantity.unit.kind === "currency") {
138
+ return `${quantity.unit.code} ${formatCurrencyAmount(quantity.decimal)}`;
139
+ }
140
+ const amount = formatExactAmount(quantity.decimal);
141
+ if (quantity.unit.kind === "custom")
142
+ return `${amount} ${quantity.unit.symbol}`;
143
+ const labels = COUNT_LABELS[quantity.unit.unit];
144
+ const singular = /^1(?:\.0+)?$/u.test(quantity.decimal);
145
+ return `${amount} ${singular ? labels[0] : labels[1]}`;
146
+ }
147
+ export function formatAccountingBoolean(value, semantic) {
148
+ if (semantic?.metric.kind === "named" && semantic.metric.name === "Availability") {
149
+ return value ? "Available" : "Low balance";
150
+ }
151
+ return value ? "Enabled" : "Disabled";
152
+ }
153
+ export function formatAccountingBasisSummary(basis, mode) {
154
+ if (mode === "remaining" && basis.remaining) {
155
+ return `Remaining: ${formatAccountingQuantity(basis.remaining.quantity)}`;
156
+ }
157
+ if (mode === "used" && basis.used) {
158
+ return `Used: ${formatAccountingQuantity(basis.used.quantity)}`;
159
+ }
160
+ if (basis.used && basis.limit) {
161
+ return `Used: ${formatAccountingQuantity(basis.used.quantity)} / Limit: ${formatAccountingQuantity(basis.limit.quantity)}`;
162
+ }
163
+ return null;
164
+ }
165
+ function buildAccountingBasisFacts(basis) {
166
+ const facts = [];
167
+ if (basis.used) {
168
+ facts.push({ role: "used", text: `Used: ${formatAccountingQuantity(basis.used.quantity)}` });
169
+ }
170
+ if (basis.limit) {
171
+ facts.push({ role: "limit", text: `Limit: ${formatAccountingQuantity(basis.limit.quantity)}` });
172
+ }
173
+ if (basis.remaining) {
174
+ facts.push({
175
+ role: "remaining",
176
+ text: `Remaining: ${formatAccountingQuantity(basis.remaining.quantity)}`,
177
+ });
178
+ }
179
+ return facts;
180
+ }
181
+ export function formatAccountingBasisDetails(basis) {
182
+ return buildAccountingBasisFacts(basis).map((fact) => fact.text);
183
+ }
184
+ export function formatAccountingResultTypeLabel(resultType) {
185
+ return RESULT_TYPE_LABELS[resultType];
186
+ }
187
+ export function formatAccountingWindowLabel(window) {
188
+ return WINDOW_LABELS[window];
189
+ }
190
+ export function formatAccountingComponentLabel(component) {
191
+ return COMPONENT_LABELS[component];
192
+ }
193
+ export function formatAccountingSemanticLabel(resultType, semantic, entryKind) {
194
+ const resultLabel = RESULT_TYPE_LABELS[resultType];
195
+ const metric = semantic.metric;
196
+ if (metric.kind === "aggregate")
197
+ return resultLabel;
198
+ if (metric.kind === "window") {
199
+ return `${WINDOW_LABELS[metric.window]} ${resultLabel.toLowerCase()}`;
200
+ }
201
+ if (metric.kind === "component") {
202
+ if (metric.component === "remaining_credits" && entryKind === "percent")
203
+ return "Credits";
204
+ return COMPONENT_LABELS[metric.component];
205
+ }
206
+ if (resultType === "status")
207
+ return metric.name;
208
+ return `${metric.name} ${resultLabel.toLowerCase()}`;
209
+ }
210
+ export function getAccountingSemanticSortKey(entry) {
211
+ const semantic = entry.semantic;
212
+ if (!semantic)
213
+ return [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0];
214
+ const resultRank = RESULT_TYPE_ORDER[entry.accounting.resultType];
215
+ const metric = semantic.metric;
216
+ if (metric.kind === "aggregate")
217
+ return [resultRank, 0, 0];
218
+ if (metric.kind === "window")
219
+ return [resultRank, 1, WINDOW_ORDER[metric.window]];
220
+ if (metric.kind === "component")
221
+ return [resultRank, 2, COMPONENT_ORDER[metric.component]];
222
+ return [resultRank, 3, 0];
223
+ }
224
+ export function compareAccountingSemanticEntries(left, right) {
225
+ const leftKey = getAccountingSemanticSortKey(left);
226
+ const rightKey = getAccountingSemanticSortKey(right);
227
+ return leftKey[0] - rightKey[0] || leftKey[1] - rightKey[1] || leftKey[2] - rightKey[2];
228
+ }
229
+ export function getAccountingEntryLabel(entry) {
230
+ if (!entry.semantic)
231
+ return entry.metricLabel?.trim() || entry.label?.trim() || entry.name;
232
+ return formatAccountingSemanticLabel(entry.accounting.resultType, entry.semantic, isPercentEntry(entry) ? "percent" : entry.kind);
233
+ }
234
+ export function interpretAccountingRow(entry, options) {
235
+ const label = getAccountingEntryLabel(entry);
236
+ let display;
237
+ if (isPercentEntry(entry)) {
238
+ display = { kind: "percent", percentRemaining: entry.percentRemaining };
239
+ }
240
+ else if (isValueEntry(entry)) {
241
+ display = { kind: "value", entryKind: "value", text: entry.value };
242
+ }
243
+ else if (isQuantityEntry(entry)) {
244
+ display = {
245
+ kind: "value",
246
+ entryKind: "quantity",
247
+ text: formatAccountingQuantity(entry.quantity),
248
+ };
249
+ }
250
+ else if (isBooleanEntry(entry)) {
251
+ display = {
252
+ kind: "value",
253
+ entryKind: "boolean",
254
+ text: formatAccountingBoolean(entry.value, options.booleanWording === "semantic" ? entry.semantic : undefined),
255
+ };
256
+ }
257
+ else {
258
+ return entry;
259
+ }
260
+ if (!isPercentEntry(entry) || !entry.basis || !options.basis) {
261
+ return { label, display };
262
+ }
263
+ const basis = options.basis.kind === "summary"
264
+ ? {
265
+ kind: "summary",
266
+ text: formatAccountingBasisSummary(entry.basis, options.basis.mode),
267
+ }
268
+ : { kind: "detailed", facts: buildAccountingBasisFacts(entry.basis) };
269
+ return { label, display, basis };
270
+ }
271
+ //# sourceMappingURL=accounting-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting-format.js","sourceRoot":"","sources":["../../src/lib/accounting-format.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  * token: OpenCode's own auth.json, then Claude OAuth credentials (macOS
8
8
  * Keychain first, then the local credentials file).
9
9
  */
10
+ import { type ResolvedAuthIdentity } from "./resolved-auth-identity.js";
10
11
  export interface AnthropicQuotaWindow {
11
12
  utilization?: number;
12
13
  used_percentage?: number;
@@ -74,6 +75,7 @@ declare function parseUsageResponse(data: unknown): AnthropicQuotaResult | null;
74
75
  export declare function clearAnthropicDiagnosticsCacheForTests(): void;
75
76
  export declare function getAnthropicDiagnostics(options?: AnthropicProbeOptions): Promise<AnthropicDiagnostics>;
76
77
  export declare function hasAnthropicCredentialsConfigured(options?: AnthropicProbeOptions): Promise<boolean>;
78
+ export declare function resolveAnthropicAuthIdentity(options?: AnthropicProbeOptions): Promise<ResolvedAuthIdentity | null>;
77
79
  export declare function queryAnthropicQuota(options?: AnthropicProbeOptions): Promise<AnthropicResult>;
78
80
  export { parseUsageResponse };
79
81
  //# sourceMappingURL=anthropic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/lib/anthropic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/lib/anthropic.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC;AAgBrC,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,IAAI,CAAC;IACd,SAAS,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,SAAS,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,IAAI,CAAC;AAChF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAClF,MAAM,MAAM,oBAAoB,GAC5B,yBAAyB,GACzB,8BAA8B,GAC9B,yBAAyB,GACzB,MAAM,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAWD,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA4BF,uFAAuF;AACvF,MAAM,MAAM,yBAAyB,GAAG,eAAe,GAAG,oBAAoB,CAAC;AAkD/E,wBAAgB,0BAA0B,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAGtE;AAyBD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D,uBAAuB,CAoBzB;AAwHD,iBAAS,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAiBtE;AAuvBD,wBAAgB,sCAAsC,IAAI,IAAI,CAK7D;AAmDD,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAsH/B;AAED,wBAAsB,iCAAiC,CACrD,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAED,wBAAsB,4BAA4B,CAChD,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA0CtC;AAED,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}