@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
@@ -1 +1 @@
1
- {"version":3,"file":"display-sanitize.d.ts","sourceRoot":"","sources":["../../src/lib/display-sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAU9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAuB/E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAM/E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAiC5F;AAED,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,SAAS,CAUjG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAM9E"}
1
+ {"version":3,"file":"display-sanitize.d.ts","sourceRoot":"","sources":["../../src/lib/display-sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAUtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAU9D,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9E;AAqCD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAmB/E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAO/E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB,CAqD5F;AAED,wBAAgB,yBAAyB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,SAAS,CAUjG;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAM9E"}
@@ -5,7 +5,7 @@
5
5
  * remote/provider error text cannot inject terminal control codes into
6
6
  * toasts or transcript output.
7
7
  */
8
- import { isValueEntry } from "./entries.js";
8
+ import { cloneAccountingBasisFact, cloneAccountingQuantity, cloneAccountingSemantic, cloneQuotaToastEntry, isPercentEntry, isQuantityEntry, isValueEntry, } from "./entries.js";
9
9
  // Remove terminal escape sequences (CSI/OSC/DCS/APC/PM/SOS) and other control
10
10
  // characters except newline/tab so provider text cannot inject terminal actions.
11
11
  // eslint-disable-next-line no-control-regex
@@ -27,33 +27,70 @@ export function sanitizeSingleLineDisplaySnippet(text, maxLength) {
27
27
  export function sanitizeOptionalDisplayText(value) {
28
28
  return typeof value === "string" ? sanitizeDisplayText(value) : undefined;
29
29
  }
30
- export function sanitizeQuotaToastEntry(entry) {
31
- if (isValueEntry(entry)) {
32
- return {
33
- ...entry,
34
- accounting: { ...entry.accounting },
35
- name: sanitizeDisplayText(entry.name),
36
- value: sanitizeDisplayText(entry.value),
37
- group: sanitizeOptionalDisplayText(entry.group),
38
- label: sanitizeOptionalDisplayText(entry.label),
39
- right: sanitizeOptionalDisplayText(entry.right),
40
- resetTimeIso: sanitizeOptionalDisplayText(entry.resetTimeIso),
41
- };
42
- }
30
+ function sanitizeAccountingQuantity(quantity) {
31
+ if (quantity.unit.kind !== "custom")
32
+ return cloneAccountingQuantity(quantity);
33
+ return {
34
+ decimal: quantity.decimal,
35
+ unit: {
36
+ kind: "custom",
37
+ symbol: sanitizeSingleLineDisplayText(quantity.unit.symbol),
38
+ },
39
+ };
40
+ }
41
+ function sanitizeAccountingSemantic(semantic) {
42
+ const cloned = cloneAccountingSemantic(semantic);
43
+ if (cloned.metric.kind !== "named")
44
+ return cloned;
43
45
  return {
44
- ...entry,
45
- accounting: { ...entry.accounting },
46
- name: sanitizeDisplayText(entry.name),
47
- group: sanitizeOptionalDisplayText(entry.group),
48
- label: sanitizeOptionalDisplayText(entry.label),
49
- right: sanitizeOptionalDisplayText(entry.right),
50
- resetTimeIso: sanitizeOptionalDisplayText(entry.resetTimeIso),
46
+ ...cloned,
47
+ metric: {
48
+ kind: "named",
49
+ name: sanitizeSingleLineDisplayText(cloned.metric.name),
50
+ },
51
51
  };
52
52
  }
53
+ function sanitizeAccountingBasis(basis) {
54
+ const sanitizeFact = (fact) => ({
55
+ ...cloneAccountingBasisFact(fact),
56
+ quantity: sanitizeAccountingQuantity(fact.quantity),
57
+ });
58
+ return {
59
+ ...(basis.used ? { used: sanitizeFact(basis.used) } : {}),
60
+ ...(basis.limit ? { limit: sanitizeFact(basis.limit) } : {}),
61
+ ...(basis.remaining ? { remaining: sanitizeFact(basis.remaining) } : {}),
62
+ };
63
+ }
64
+ export function sanitizeQuotaToastEntry(entry) {
65
+ const sanitized = cloneQuotaToastEntry(entry);
66
+ sanitized.name = sanitizeDisplayText(entry.name);
67
+ if (entry.group !== undefined)
68
+ sanitized.group = sanitizeDisplayText(entry.group);
69
+ if (entry.label !== undefined)
70
+ sanitized.label = sanitizeDisplayText(entry.label);
71
+ if (entry.metricLabel !== undefined) {
72
+ sanitized.metricLabel = sanitizeDisplayText(entry.metricLabel);
73
+ }
74
+ if (entry.right !== undefined)
75
+ sanitized.right = sanitizeDisplayText(entry.right);
76
+ if (entry.semantic)
77
+ sanitized.semantic = sanitizeAccountingSemantic(entry.semantic);
78
+ if (isValueEntry(sanitized)) {
79
+ sanitized.value = sanitizeDisplayText(sanitized.value);
80
+ }
81
+ else if (isQuantityEntry(sanitized)) {
82
+ sanitized.quantity = sanitizeAccountingQuantity(sanitized.quantity);
83
+ }
84
+ else if (isPercentEntry(sanitized) && sanitized.basis) {
85
+ sanitized.basis = sanitizeAccountingBasis(sanitized.basis);
86
+ }
87
+ return sanitized;
88
+ }
53
89
  export function sanitizeQuotaToastError(error) {
54
90
  return {
55
91
  label: sanitizeDisplayText(error.label),
56
92
  message: sanitizeDisplayText(error.message),
93
+ ...(error.retryable === true ? { retryable: true } : {}),
57
94
  ...(error.kind ? { kind: error.kind } : {}),
58
95
  };
59
96
  }
@@ -88,7 +125,23 @@ export function sanitizeQuotaProviderResult(result) {
88
125
  })),
89
126
  }
90
127
  : {}),
91
- ...(result.presentation ? { presentation: { ...result.presentation } } : {}),
128
+ ...(result.presentation
129
+ ? {
130
+ presentation: {
131
+ ...result.presentation,
132
+ ...(result.presentation.singleWindowDisplayName !== undefined
133
+ ? {
134
+ singleWindowDisplayName: sanitizeDisplayText(result.presentation.singleWindowDisplayName),
135
+ }
136
+ : {}),
137
+ ...(result.presentation.redundantQuotaFamily !== undefined
138
+ ? {
139
+ redundantQuotaFamily: sanitizeDisplayText(result.presentation.redundantQuotaFamily),
140
+ }
141
+ : {}),
142
+ },
143
+ }
144
+ : {}),
92
145
  };
93
146
  }
94
147
  export function sanitizeSessionTokensData(data) {
@@ -1 +1 @@
1
- {"version":3,"file":"display-sanitize.js","sourceRoot":"","sources":["../../src/lib/display-sanitize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"display-sanitize.js","sourceRoot":"","sources":["../../src/lib/display-sanitize.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { QuotaProviderDefinition } from "./quota-providers.js";
2
2
  import type { QuotaTelemetryToken } from "./quota-telemetry.js";
3
+ import type { ResolvedAuthIdentity } from "./resolved-auth-identity.js";
3
4
  import type { RuntimeProviderIdResolver } from "./runtime-provider-ids.js";
4
5
  import type { CursorQuotaPlan, OpenCodeGoWindowKey } from "./types.js";
5
6
  /**
@@ -12,6 +13,50 @@ export type AccountingResultType = "quota" | "rate_limit" | "usage" | "spend" |
12
13
  export type AccountingAcquisitionMethod = "remote_api" | "dashboard_scrape" | "local_cli" | "local_runtime_accounting" | "local_estimation";
13
14
  export type AccountingOwnership = "maintained" | "user_configured";
14
15
  export type AccountingAuthority = "provider_reported" | "locally_derived";
16
+ export type AccountingProminence = "primary" | "supplementary";
17
+ export type AccountingWindow = "rpm" | "hour" | "five_hour" | "day" | "week" | "month" | "year" | "mcp" | "code_review";
18
+ export type AccountingComponent = "current_balance" | "total_balance" | "cash_balance" | "gift_balance" | "granted_balance" | "topped_up_balance" | "remaining_credits" | "auto_reload" | "auto_reload_amount" | "auto_reload_trigger";
19
+ export type AccountingMetric = {
20
+ kind: "aggregate";
21
+ } | {
22
+ kind: "window";
23
+ window: AccountingWindow;
24
+ } | {
25
+ kind: "component";
26
+ component: AccountingComponent;
27
+ } | {
28
+ kind: "named";
29
+ name: string;
30
+ };
31
+ export interface AccountingSemantic {
32
+ metric: AccountingMetric;
33
+ prominence: AccountingProminence;
34
+ }
35
+ export type AccountingCountUnit = "request" | "token" | "credit" | "message" | "interaction" | "unit";
36
+ export type AccountingUnit = {
37
+ kind: "currency";
38
+ code: string;
39
+ } | {
40
+ kind: "count";
41
+ unit: AccountingCountUnit;
42
+ } | {
43
+ kind: "custom";
44
+ symbol: string;
45
+ };
46
+ export interface AccountingQuantity {
47
+ decimal: string;
48
+ unit: AccountingUnit;
49
+ }
50
+ export type AccountingFactAuthority = AccountingAuthority | "user_configured";
51
+ export interface AccountingBasisFact {
52
+ quantity: AccountingQuantity;
53
+ authority: AccountingFactAuthority;
54
+ }
55
+ export interface AccountingPercentageBasis {
56
+ used?: AccountingBasisFact;
57
+ limit?: AccountingBasisFact;
58
+ remaining?: AccountingBasisFact;
59
+ }
15
60
  export interface AccountingMetadata {
16
61
  /** What the row represents, independent of its percent/value render shape. */
17
62
  resultType: AccountingResultType;
@@ -33,45 +78,64 @@ export interface GroupedQuotaEntryMeta {
33
78
  group?: string;
34
79
  /** Optional row label inside the group, e.g. "5h:" or "Usage:". */
35
80
  label?: string;
36
- /** Optional semantic label for verbose command output when it differs from resultType. */
81
+ /** Optional legacy label for verbose command output when it differs from resultType. */
37
82
  metricLabel?: string;
38
- /** Optional compact right-hand summary, e.g. "42/300". */
83
+ /** Complete provider-neutral row semantics. Rich providers require this on every row. */
84
+ semantic?: AccountingSemantic;
85
+ /** Optional compact right-hand summary for legacy and configured providers only. */
39
86
  right?: string;
40
87
  /** Optional stable row priority within a group; lower values render first. */
41
88
  sortPriority?: number;
42
89
  }
43
- export type QuotaToastEntry = (GroupedQuotaEntryMeta & {
44
- /**
45
- * Percent-based entry (default).
46
- * The optional discriminant preserves the existing percent-entry shape.
47
- */
90
+ type SemanticGroupedQuotaEntryMeta = Omit<GroupedQuotaEntryMeta, "semantic"> & {
91
+ semantic: AccountingSemantic;
92
+ };
93
+ export type QuotaPercentEntry = GroupedQuotaEntryMeta & {
94
+ /** The optional discriminant preserves the existing percent-entry shape. */
48
95
  kind?: "percent";
49
- /** Display label (already human-friendly), e.g. "Copilot" or "Claude (abc…)". */
50
96
  name: string;
51
97
  /** Remaining quota as a percentage (may be below 0 when over quota). */
52
98
  percentRemaining: number;
53
- /** Optional source-backed ISO reset timestamp (shown when percentRemaining is < 100). */
99
+ /** Optional typed operands. Renderers never derive a percentage from these facts. */
100
+ basis?: AccountingPercentageBasis;
54
101
  resetTimeIso?: string;
55
- }) | (GroupedQuotaEntryMeta & {
56
- /** Value-based entry (no percent bar). */
102
+ };
103
+ export type QuotaValueEntry = GroupedQuotaEntryMeta & {
104
+ /** Legacy formatted text value. */
57
105
  kind: "value";
58
- /** Display label (already human-friendly), e.g. "OpenCode Go". */
59
106
  name: string;
60
- /** Human-readable value, e.g. "$42.50". */
61
107
  value: string;
62
- /** Optional source-backed ISO reset timestamp (shown when available). */
63
108
  resetTimeIso?: string;
64
- });
65
- export declare function isValueEntry(e: QuotaToastEntry): e is Extract<QuotaToastEntry, {
66
- kind: "value";
67
- }>;
68
- export declare function isPercentEntry(e: QuotaToastEntry): e is Extract<QuotaToastEntry, {
69
- percentRemaining: number;
70
- }>;
109
+ };
110
+ export type QuotaQuantityEntry = SemanticGroupedQuotaEntryMeta & {
111
+ kind: "quantity";
112
+ name: string;
113
+ quantity: AccountingQuantity;
114
+ resetTimeIso?: string;
115
+ };
116
+ export type QuotaBooleanEntry = SemanticGroupedQuotaEntryMeta & {
117
+ kind: "boolean";
118
+ name: string;
119
+ value: boolean;
120
+ resetTimeIso?: string;
121
+ };
122
+ export type QuotaToastEntry = QuotaPercentEntry | QuotaValueEntry | QuotaQuantityEntry | QuotaBooleanEntry;
123
+ export declare function isValueEntry(e: QuotaToastEntry): e is QuotaValueEntry;
124
+ export declare function isQuantityEntry(e: QuotaToastEntry): e is QuotaQuantityEntry;
125
+ export declare function isBooleanEntry(e: QuotaToastEntry): e is QuotaBooleanEntry;
126
+ export declare function isPercentEntry(e: QuotaToastEntry): e is QuotaPercentEntry;
127
+ export declare function cloneAccountingUnit(unit: AccountingUnit): AccountingUnit;
128
+ export declare function cloneAccountingQuantity(quantity: AccountingQuantity): AccountingQuantity;
129
+ export declare function cloneAccountingSemantic(semantic: AccountingSemantic): AccountingSemantic;
130
+ export declare function cloneAccountingBasisFact(fact: AccountingBasisFact): AccountingBasisFact;
131
+ export declare function cloneAccountingPercentageBasis(basis: AccountingPercentageBasis): AccountingPercentageBasis;
132
+ export declare function cloneQuotaToastEntry(entry: QuotaToastEntry): QuotaToastEntry;
71
133
  export interface QuotaToastError {
72
134
  /** Short label that will be rendered as "label: message". */
73
135
  label: string;
74
136
  message: string;
137
+ /** Whether a later refresh may succeed without user action. */
138
+ retryable?: boolean;
75
139
  /** Intentional diagnostics remain verbose but do not count as compact-status issues. */
76
140
  kind?: "intentional-filter";
77
141
  }
@@ -193,14 +257,32 @@ export interface QuotaProviderContext {
193
257
  telemetryToken?: QuotaTelemetryToken;
194
258
  };
195
259
  }
260
+ export interface QuotaProviderCacheContext {
261
+ runtimeEligibleQuotaProviders?: readonly QuotaProviderDefinition[];
262
+ }
263
+ export type QuotaProviderCachePolicy = {
264
+ kind: "account-neutral";
265
+ } | {
266
+ kind: "uncached";
267
+ } | {
268
+ kind: "resolved-auth";
269
+ resolveIdentity: (ctx: QuotaProviderContext, cacheContext: QuotaProviderCacheContext) => Promise<ResolvedAuthIdentity | null>;
270
+ };
196
271
  export interface QuotaProvider {
197
272
  /** Stable id used by config.enabledProviders */
198
273
  id: string;
199
274
  /** Best-effort availability check (no network if possible) */
200
275
  isAvailable: (ctx: QuotaProviderContext) => Promise<boolean>;
201
- /** Fetch and normalize quota for this provider */
202
- fetch: (ctx: QuotaProviderContext) => Promise<QuotaProviderResult>;
276
+ /** Fetch and normalize quota for this provider. */
277
+ fetch: (ctx: QuotaProviderContext, cacheContext?: QuotaProviderCacheContext) => Promise<QuotaProviderResult>;
278
+ /**
279
+ * Shared-cache safety policy. Canonical runtime providers are classified in
280
+ * the registry. Missing policy fails closed as uncached; account-neutral
281
+ * caching must be explicit.
282
+ */
283
+ cachePolicy?: QuotaProviderCachePolicy;
203
284
  /** Optional provider match for onlyCurrentModel filtering */
204
285
  matchesCurrentModel?: (model: string, context?: QuotaProviderMatchContext) => boolean;
205
286
  }
287
+ export {};
206
288
  //# sourceMappingURL=entries.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,43 @@
1
1
  export function isValueEntry(e) {
2
2
  return e.kind === "value";
3
3
  }
4
+ export function isQuantityEntry(e) {
5
+ return e.kind === "quantity";
6
+ }
7
+ export function isBooleanEntry(e) {
8
+ return e.kind === "boolean";
9
+ }
4
10
  export function isPercentEntry(e) {
5
- return !isValueEntry(e);
11
+ return e.kind === undefined || e.kind === "percent";
12
+ }
13
+ export function cloneAccountingUnit(unit) {
14
+ return { ...unit };
15
+ }
16
+ export function cloneAccountingQuantity(quantity) {
17
+ return { decimal: quantity.decimal, unit: cloneAccountingUnit(quantity.unit) };
18
+ }
19
+ export function cloneAccountingSemantic(semantic) {
20
+ return { metric: { ...semantic.metric }, prominence: semantic.prominence };
21
+ }
22
+ export function cloneAccountingBasisFact(fact) {
23
+ return { quantity: cloneAccountingQuantity(fact.quantity), authority: fact.authority };
24
+ }
25
+ export function cloneAccountingPercentageBasis(basis) {
26
+ return {
27
+ ...(basis.used ? { used: cloneAccountingBasisFact(basis.used) } : {}),
28
+ ...(basis.limit ? { limit: cloneAccountingBasisFact(basis.limit) } : {}),
29
+ ...(basis.remaining ? { remaining: cloneAccountingBasisFact(basis.remaining) } : {}),
30
+ };
31
+ }
32
+ export function cloneQuotaToastEntry(entry) {
33
+ return {
34
+ ...entry,
35
+ accounting: { ...entry.accounting },
36
+ ...(entry.semantic ? { semantic: cloneAccountingSemantic(entry.semantic) } : {}),
37
+ ...(isPercentEntry(entry) && entry.basis
38
+ ? { basis: cloneAccountingPercentageBasis(entry.basis) }
39
+ : {}),
40
+ ...(isQuantityEntry(entry) ? { quantity: cloneAccountingQuantity(entry.quantity) } : {}),
41
+ };
6
42
  }
7
43
  //# sourceMappingURL=entries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"AA6FA,MAAM,UAAU,YAAY,CAAC,CAAkB;IAC7C,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,CAAkB;IAElB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/lib/entries.ts"],"names":[],"mappings":"AA+KA,MAAM,UAAU,YAAY,CAAC,CAAkB;IAC7C,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAkB;IAChD,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAkB;IAC/C,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAkB;IAC/C,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAoB;IACtD,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA4B;IAClE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAA4B;IAClE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAyB;IAChE,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,KAAgC;IAEhC,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,wBAAwB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAsB;IACzD,OAAO;QACL,GAAG,KAAK;QACR,UAAU,EAAE,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE;QACnC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK;YACtC,CAAC,CAAC,EAAE,KAAK,EAAE,8BAA8B,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzF,CAAC;AACJ,CAAC"}
@@ -15,6 +15,7 @@ export declare function formatQuotaRows(params: {
15
15
  errors?: QuotaToastError[];
16
16
  style?: QuotaFormatStyle;
17
17
  percentDisplayMode?: QuotaToastConfig["percentDisplayMode"];
18
+ accountingDetail?: QuotaToastConfig["accountingDetail"];
18
19
  resetTimeDecimals?: number;
19
20
  sessionTokens?: SessionTokensData;
20
21
  }): string;
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAaxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkEnD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC,GAAG,MAAM,CA0KT"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAaxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAkEnD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,kBAAkB,CAAC,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IACxD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC,GAAG,MAAM,CAyPT"}
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * Formatting helpers for quota toast output
3
3
  */
4
- import { isValueEntry } from "./entries.js";
4
+ import { interpretAccountingRow } from "./accounting-format.js";
5
+ import { isPercentEntry } from "./entries.js";
5
6
  import { bar, DISPLAYED_PERCENT_LABEL_WIDTH, formatDisplayedPercentLabel, formatResetCountdown, isResetTimeDecimals, padLeft, padRight, resolveDisplayedPercent, } from "./format-utils.js";
6
7
  import { buildSingleWindowPercentEntryDisplayName } from "./quota-entry-display.js";
7
8
  import { getQuotaFormatStyleDefinition } from "./quota-format-style.js";
@@ -50,6 +51,7 @@ export function formatQuotaRows(params) {
50
51
  entries: params.entries,
51
52
  errors: params.errors,
52
53
  percentDisplayMode: params.percentDisplayMode,
54
+ accountingDetail: params.accountingDetail,
53
55
  resetTimeDecimals: params.resetTimeDecimals,
54
56
  sessionTokens: params.sessionTokens,
55
57
  });
@@ -64,18 +66,20 @@ export function formatQuotaRows(params) {
64
66
  const isNarrow = !isTiny && maxWidth <= layout.narrowAt;
65
67
  const separator = " ";
66
68
  const percentCol = Math.max(DISPLAYED_PERCENT_LABEL_WIDTH, ...(params.entries ?? [])
67
- .filter((entry) => !isValueEntry(entry))
69
+ .filter(isPercentEntry)
68
70
  .map((entry) => formatDisplayedPercentLabel(entry.percentRemaining, params.percentDisplayMode).length));
71
+ const percentValueCol = percentCol;
69
72
  const timeCol = isTiny ? 6 : isNarrow ? 7 : 7;
70
- // Bar width: use most of maxWidth, leaving room for separator + percent on line 2.
73
+ // Bar width: use most of maxWidth, leaving room for separator + suffix on line 2.
71
74
  // Line 1 (name + time) can use full maxWidth so labels are not cut before the
72
75
  // sidebar width is exhausted.
73
- // Line 2 (bar + percent) spans barWidth + separator + percentCol.
74
- const barWidth = Math.max(10, maxWidth - separator.length - percentCol);
76
+ // Line 2 (bar + suffix) spans barWidth + separator + percentValueCol.
77
+ const barWidth = Math.max(10, maxWidth - separator.length - percentValueCol);
75
78
  const lines = [];
76
79
  const addPercentEntry = (name, resetIso, remaining, rightSummary) => {
77
80
  const displayedPercent = resolveDisplayedPercent(remaining, params.percentDisplayMode);
78
81
  const percentLabel = formatDisplayedPercentLabel(remaining, params.percentDisplayMode);
82
+ const visibleBarSuffix = percentLabel.slice(0, percentValueCol);
79
83
  const summary = rightSummary?.trim() || "";
80
84
  const leftText = summary ? `${name} ${summary}` : name;
81
85
  // Show reset countdown whenever quota is not fully available.
@@ -92,11 +96,11 @@ export function formatQuotaRows(params) {
92
96
  const timeWidth = isResetTimeDecimals(params.resetTimeDecimals)
93
97
  ? Math.max(timeCol, timeStr.length)
94
98
  : timeCol;
95
- const tinyNameCol = Math.max(1, maxWidth - separator.length - timeWidth - separator.length - percentCol);
99
+ const tinyNameCol = Math.max(1, maxWidth - separator.length - timeWidth - separator.length - percentValueCol);
96
100
  const line = [
97
101
  padRight(leftText, tinyNameCol),
98
102
  padLeft(timeStr, timeWidth),
99
- padLeft(percentLabel, percentCol),
103
+ padLeft(visibleBarSuffix, percentValueCol),
100
104
  ].join(separator);
101
105
  lines.push(line.slice(0, maxWidth));
102
106
  return;
@@ -110,18 +114,40 @@ export function formatQuotaRows(params) {
110
114
  separator,
111
115
  preferredTimeWidth: timeCol,
112
116
  }));
113
- // Line 2: bar + percent (percent extends beyond bar width)
117
+ // Line 2: bar + displayed percentage
114
118
  const barCell = bar(displayedPercent, barWidth);
115
- const percentCell = padLeft(percentLabel, percentCol);
116
- const barLine = [barCell, percentCell].join(separator);
119
+ const suffixCell = padLeft(visibleBarSuffix, percentValueCol);
120
+ const barLine = [barCell, suffixCell].join(separator);
117
121
  lines.push(barLine);
118
122
  };
119
- const addValueEntry = (name, resetIso, value) => {
120
- const timeStr = formatResetCountdown(resetIso, {
121
- missing: "-",
122
- compactRounded: true,
123
- decimals: params.resetTimeDecimals,
124
- });
123
+ const addValueEntry = (name, resetIso, value, atomicValue = false) => {
124
+ const timeStr = atomicValue && !resetIso
125
+ ? ""
126
+ : formatResetCountdown(resetIso, {
127
+ missing: "-",
128
+ compactRounded: true,
129
+ decimals: params.resetTimeDecimals,
130
+ });
131
+ if (atomicValue) {
132
+ const suffix = [value, timeStr].filter(Boolean).join(separator);
133
+ if (suffix.length > maxWidth) {
134
+ const visibleValue = value.length <= maxWidth
135
+ ? padLeft(value, maxWidth)
136
+ : maxWidth <= 1
137
+ ? "…".slice(0, maxWidth)
138
+ : `…${value.slice(-(maxWidth - 1))}`;
139
+ lines.push(visibleValue);
140
+ return;
141
+ }
142
+ const availableNameWidth = maxWidth - (suffix ? separator.length + suffix.length : 0);
143
+ if (availableNameWidth <= 0) {
144
+ lines.push(padLeft(suffix, maxWidth));
145
+ return;
146
+ }
147
+ const visibleName = name.slice(0, availableNameWidth).trimEnd();
148
+ lines.push(`${padRight(visibleName, availableNameWidth)}${suffix ? `${separator}${suffix}` : ""}`);
149
+ return;
150
+ }
125
151
  if (isTiny) {
126
152
  // Tiny: single line without percent; keep time col alignment.
127
153
  const timeWidth = isResetTimeDecimals(params.resetTimeDecimals)
@@ -148,12 +174,51 @@ export function formatQuotaRows(params) {
148
174
  preferredTimeWidth: timeCol,
149
175
  }));
150
176
  };
177
+ const addBasisLine = (basis) => {
178
+ if (!basis)
179
+ return;
180
+ const candidates = basis.kind === "detailed"
181
+ ? basis.facts.map((fact) => fact.text)
182
+ : basis.text
183
+ ? [basis.text]
184
+ : [];
185
+ let line = "";
186
+ for (const candidate of candidates) {
187
+ const next = line ? `${line} | ${candidate}` : candidate;
188
+ if (next.length > maxWidth)
189
+ break;
190
+ line = next;
191
+ }
192
+ if (line)
193
+ lines.push(line);
194
+ };
151
195
  for (const entry of params.entries ?? []) {
152
- if (isValueEntry(entry)) {
153
- addValueEntry(entry.name, entry.resetTimeIso, entry.value);
196
+ const interpretation = interpretAccountingRow(entry, {
197
+ booleanWording: "semantic",
198
+ ...(!isTiny
199
+ ? {
200
+ basis: (params.accountingDetail ?? "summary") === "detailed"
201
+ ? { kind: "detailed" }
202
+ : {
203
+ kind: "summary",
204
+ mode: params.percentDisplayMode ?? "remaining",
205
+ },
206
+ }
207
+ : {}),
208
+ });
209
+ const name = entry.semantic
210
+ ? [entry.name.trim(), interpretation.label]
211
+ .filter((part, index, parts) => Boolean(part) && parts.indexOf(part) === index)
212
+ .join(" ")
213
+ : isPercentEntry(entry)
214
+ ? buildSingleWindowPercentEntryDisplayName(entry)
215
+ : entry.name;
216
+ if (interpretation.display.kind === "value") {
217
+ addValueEntry(name, entry.resetTimeIso, interpretation.display.text, interpretation.display.entryKind !== "value");
154
218
  }
155
219
  else {
156
- addPercentEntry(buildSingleWindowPercentEntryDisplayName(entry), entry.resetTimeIso, entry.percentRemaining, entry.right);
220
+ addPercentEntry(name, entry.resetTimeIso, interpretation.display.percentRemaining, entry.right);
221
+ addBasisLine(interpretation.basis);
157
222
  }
158
223
  }
159
224
  // Add error rows (rendered as "label: message")