@slkiser/opencode-quota 5.0.3 → 6.0.0-beta.1

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 (794) hide show
  1. package/README.md +30 -44
  2. package/dist/agent-tools.d.ts +24 -0
  3. package/dist/agent-tools.d.ts.map +1 -0
  4. package/dist/agent-tools.js +578 -0
  5. package/dist/agent-tools.js.map +1 -0
  6. package/dist/bin/opencode-quota.d.ts.map +1 -1
  7. package/dist/bin/opencode-quota.js +1 -32
  8. package/dist/bin/opencode-quota.js.map +1 -1
  9. package/dist/core/errors.d.ts +12 -0
  10. package/dist/core/errors.d.ts.map +1 -0
  11. package/dist/core/errors.js +141 -0
  12. package/dist/core/errors.js.map +1 -0
  13. package/dist/core/pace.d.ts +13 -0
  14. package/dist/core/pace.d.ts.map +1 -0
  15. package/dist/core/pace.js +52 -0
  16. package/dist/core/pace.js.map +1 -0
  17. package/dist/core/persist.d.ts +44 -0
  18. package/dist/core/persist.d.ts.map +1 -0
  19. package/dist/core/persist.js +210 -0
  20. package/dist/core/persist.js.map +1 -0
  21. package/dist/core/provider-source.d.ts +40 -0
  22. package/dist/core/provider-source.d.ts.map +1 -0
  23. package/dist/core/provider-source.js +210 -0
  24. package/dist/core/provider-source.js.map +1 -0
  25. package/dist/core/redact.d.ts +17 -0
  26. package/dist/core/redact.d.ts.map +1 -0
  27. package/dist/core/redact.js +217 -0
  28. package/dist/core/redact.js.map +1 -0
  29. package/dist/core/rows.d.ts +20 -0
  30. package/dist/core/rows.d.ts.map +1 -0
  31. package/dist/core/rows.js +142 -0
  32. package/dist/core/rows.js.map +1 -0
  33. package/dist/core/selection.d.ts +15 -0
  34. package/dist/core/selection.d.ts.map +1 -0
  35. package/dist/core/selection.js +43 -0
  36. package/dist/core/selection.js.map +1 -0
  37. package/dist/core/snapshot-publisher.d.ts +15 -0
  38. package/dist/core/snapshot-publisher.d.ts.map +1 -0
  39. package/dist/core/snapshot-publisher.js +57 -0
  40. package/dist/core/snapshot-publisher.js.map +1 -0
  41. package/dist/core/store.d.ts +93 -0
  42. package/dist/core/store.d.ts.map +1 -0
  43. package/dist/core/store.js +563 -0
  44. package/dist/core/store.js.map +1 -0
  45. package/dist/core/types.d.ts +186 -0
  46. package/dist/core/types.d.ts.map +1 -0
  47. package/dist/core/types.js +2 -0
  48. package/dist/core/types.js.map +1 -0
  49. package/dist/core/usage-ranges.d.ts +46 -0
  50. package/dist/core/usage-ranges.d.ts.map +1 -0
  51. package/dist/core/usage-ranges.js +72 -0
  52. package/dist/core/usage-ranges.js.map +1 -0
  53. package/dist/core/usage.d.ts +100 -0
  54. package/dist/core/usage.d.ts.map +1 -0
  55. package/dist/core/usage.js +373 -0
  56. package/dist/core/usage.js.map +1 -0
  57. package/dist/core/validate.d.ts +8 -0
  58. package/dist/core/validate.d.ts.map +1 -0
  59. package/dist/core/validate.js +167 -0
  60. package/dist/core/validate.js.map +1 -0
  61. package/dist/core/windows.d.ts +24 -0
  62. package/dist/core/windows.d.ts.map +1 -0
  63. package/dist/core/windows.js +43 -0
  64. package/dist/core/windows.js.map +1 -0
  65. package/dist/index.d.ts +2 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/lib/accounting-format.d.ts +2 -52
  69. package/dist/lib/accounting-format.d.ts.map +1 -1
  70. package/dist/lib/accounting-format.js +6 -255
  71. package/dist/lib/accounting-format.js.map +1 -1
  72. package/dist/lib/alibaba-auth.d.ts +14 -21
  73. package/dist/lib/alibaba-auth.d.ts.map +1 -1
  74. package/dist/lib/alibaba-auth.js +36 -149
  75. package/dist/lib/alibaba-auth.js.map +1 -1
  76. package/dist/lib/alibaba-coding-plan-local-quota.d.ts +1 -6
  77. package/dist/lib/alibaba-coding-plan-local-quota.d.ts.map +1 -1
  78. package/dist/lib/alibaba-coding-plan-local-quota.js +1 -1
  79. package/dist/lib/alibaba-coding-plan-local-quota.js.map +1 -1
  80. package/dist/lib/alibaba-token-plan.d.ts +18 -27
  81. package/dist/lib/alibaba-token-plan.d.ts.map +1 -1
  82. package/dist/lib/alibaba-token-plan.js +121 -285
  83. package/dist/lib/alibaba-token-plan.js.map +1 -1
  84. package/dist/lib/anthropic-auth.d.ts +3 -5
  85. package/dist/lib/anthropic-auth.d.ts.map +1 -1
  86. package/dist/lib/anthropic-auth.js +6 -9
  87. package/dist/lib/anthropic-auth.js.map +1 -1
  88. package/dist/lib/anthropic.d.ts +12 -37
  89. package/dist/lib/anthropic.d.ts.map +1 -1
  90. package/dist/lib/anthropic.js +348 -698
  91. package/dist/lib/anthropic.js.map +1 -1
  92. package/dist/lib/api-key-resolver.d.ts +165 -192
  93. package/dist/lib/api-key-resolver.d.ts.map +1 -1
  94. package/dist/lib/api-key-resolver.js +208 -234
  95. package/dist/lib/api-key-resolver.js.map +1 -1
  96. package/dist/lib/atomic-json.d.ts +4 -1
  97. package/dist/lib/atomic-json.d.ts.map +1 -1
  98. package/dist/lib/atomic-json.js +2 -3
  99. package/dist/lib/atomic-json.js.map +1 -1
  100. package/dist/lib/calendar-date.d.ts +15 -0
  101. package/dist/lib/calendar-date.d.ts.map +1 -0
  102. package/dist/lib/calendar-date.js +21 -0
  103. package/dist/lib/calendar-date.js.map +1 -0
  104. package/dist/lib/chutes.d.ts +0 -1
  105. package/dist/lib/chutes.d.ts.map +1 -1
  106. package/dist/lib/chutes.js +2 -4
  107. package/dist/lib/chutes.js.map +1 -1
  108. package/dist/lib/cli-reports.d.ts +15 -11
  109. package/dist/lib/cli-reports.d.ts.map +1 -1
  110. package/dist/lib/cli-reports.js +34 -107
  111. package/dist/lib/cli-reports.js.map +1 -1
  112. package/dist/lib/cli-show.d.ts +9 -22
  113. package/dist/lib/cli-show.d.ts.map +1 -1
  114. package/dist/lib/cli-show.js +104 -75
  115. package/dist/lib/cli-show.js.map +1 -1
  116. package/dist/lib/config-file-utils.d.ts +3 -15
  117. package/dist/lib/config-file-utils.d.ts.map +1 -1
  118. package/dist/lib/config-file-utils.js +4 -63
  119. package/dist/lib/config-file-utils.js.map +1 -1
  120. package/dist/lib/config-write-target.d.ts +4 -7
  121. package/dist/lib/config-write-target.d.ts.map +1 -1
  122. package/dist/lib/config-write-target.js +4 -18
  123. package/dist/lib/config-write-target.js.map +1 -1
  124. package/dist/lib/copilot.d.ts +29 -20
  125. package/dist/lib/copilot.d.ts.map +1 -1
  126. package/dist/lib/copilot.js +392 -649
  127. package/dist/lib/copilot.js.map +1 -1
  128. package/dist/lib/cursor-detection.d.ts +3 -3
  129. package/dist/lib/cursor-detection.d.ts.map +1 -1
  130. package/dist/lib/cursor-detection.js +44 -88
  131. package/dist/lib/cursor-detection.js.map +1 -1
  132. package/dist/lib/cursor-pricing.d.ts +71 -8
  133. package/dist/lib/cursor-pricing.d.ts.map +1 -1
  134. package/dist/lib/cursor-pricing.js +33 -125
  135. package/dist/lib/cursor-pricing.js.map +1 -1
  136. package/dist/lib/cursor-usage.d.ts +6 -4
  137. package/dist/lib/cursor-usage.d.ts.map +1 -1
  138. package/dist/lib/cursor-usage.js +27 -40
  139. package/dist/lib/cursor-usage.js.map +1 -1
  140. package/dist/lib/deepseek.d.ts +9 -17
  141. package/dist/lib/deepseek.d.ts.map +1 -1
  142. package/dist/lib/deepseek.js +24 -54
  143. package/dist/lib/deepseek.js.map +1 -1
  144. package/dist/lib/display-sanitize.d.ts +0 -8
  145. package/dist/lib/display-sanitize.d.ts.map +1 -1
  146. package/dist/lib/display-sanitize.js +0 -139
  147. package/dist/lib/display-sanitize.js.map +1 -1
  148. package/dist/lib/entries.d.ts +13 -239
  149. package/dist/lib/entries.d.ts.map +1 -1
  150. package/dist/lib/entries.js +1 -46
  151. package/dist/lib/entries.js.map +1 -1
  152. package/dist/lib/file-lock.d.ts +23 -0
  153. package/dist/lib/file-lock.d.ts.map +1 -0
  154. package/dist/lib/file-lock.js +122 -0
  155. package/dist/lib/file-lock.js.map +1 -0
  156. package/dist/lib/format-utils.d.ts +2 -82
  157. package/dist/lib/format-utils.d.ts.map +1 -1
  158. package/dist/lib/format-utils.js +2 -191
  159. package/dist/lib/format-utils.js.map +1 -1
  160. package/dist/lib/glm-coding-plan.d.ts +6 -5
  161. package/dist/lib/glm-coding-plan.d.ts.map +1 -1
  162. package/dist/lib/glm-coding-plan.js +19 -1
  163. package/dist/lib/glm-coding-plan.js.map +1 -1
  164. package/dist/lib/google-agy.d.ts +8 -40
  165. package/dist/lib/google-agy.d.ts.map +1 -1
  166. package/dist/lib/google-agy.js +88 -519
  167. package/dist/lib/google-agy.js.map +1 -1
  168. package/dist/lib/google-companion-credentials.d.ts +9 -40
  169. package/dist/lib/google-companion-credentials.d.ts.map +1 -1
  170. package/dist/lib/google-companion-credentials.js +167 -224
  171. package/dist/lib/google-companion-credentials.js.map +1 -1
  172. package/dist/lib/google-gemini-cli.d.ts +5 -38
  173. package/dist/lib/google-gemini-cli.d.ts.map +1 -1
  174. package/dist/lib/google-gemini-cli.js +71 -442
  175. package/dist/lib/google-gemini-cli.js.map +1 -1
  176. package/dist/lib/google-oauth-quota.d.ts +76 -0
  177. package/dist/lib/google-oauth-quota.d.ts.map +1 -0
  178. package/dist/lib/google-oauth-quota.js +297 -0
  179. package/dist/lib/google-oauth-quota.js.map +1 -0
  180. package/dist/lib/google-token-cache.d.ts +3 -5
  181. package/dist/lib/google-token-cache.d.ts.map +1 -1
  182. package/dist/lib/google-token-cache.js +2 -14
  183. package/dist/lib/google-token-cache.js.map +1 -1
  184. package/dist/lib/home-dir-display.d.ts.map +1 -1
  185. package/dist/lib/home-dir-display.js +21 -39
  186. package/dist/lib/home-dir-display.js.map +1 -1
  187. package/dist/lib/http.d.ts +4 -1
  188. package/dist/lib/http.d.ts.map +1 -1
  189. package/dist/lib/http.js +2 -1
  190. package/dist/lib/http.js.map +1 -1
  191. package/dist/lib/json-guards.d.ts +11 -0
  192. package/dist/lib/json-guards.d.ts.map +1 -0
  193. package/dist/lib/json-guards.js +25 -0
  194. package/dist/lib/json-guards.js.map +1 -0
  195. package/dist/lib/kilo.d.ts +0 -2
  196. package/dist/lib/kilo.d.ts.map +1 -1
  197. package/dist/lib/kilo.js +33 -116
  198. package/dist/lib/kilo.js.map +1 -1
  199. package/dist/lib/kimi-endpoints.d.ts +2 -2
  200. package/dist/lib/kimi-endpoints.d.ts.map +1 -1
  201. package/dist/lib/kimi-endpoints.js +1 -1
  202. package/dist/lib/kimi-endpoints.js.map +1 -1
  203. package/dist/lib/kimi.d.ts.map +1 -1
  204. package/dist/lib/kimi.js +40 -86
  205. package/dist/lib/kimi.js.map +1 -1
  206. package/dist/lib/maintainer-announcements.d.ts +4 -17
  207. package/dist/lib/maintainer-announcements.d.ts.map +1 -1
  208. package/dist/lib/maintainer-announcements.js +7 -44
  209. package/dist/lib/maintainer-announcements.js.map +1 -1
  210. package/dist/lib/maintainer-home-notice.d.ts +19 -0
  211. package/dist/lib/maintainer-home-notice.d.ts.map +1 -0
  212. package/dist/lib/maintainer-home-notice.js +92 -0
  213. package/dist/lib/maintainer-home-notice.js.map +1 -0
  214. package/dist/lib/mimo-config.d.ts +6 -9
  215. package/dist/lib/mimo-config.d.ts.map +1 -1
  216. package/dist/lib/mimo-config.js +43 -74
  217. package/dist/lib/mimo-config.js.map +1 -1
  218. package/dist/lib/mimo.d.ts +2 -5
  219. package/dist/lib/mimo.d.ts.map +1 -1
  220. package/dist/lib/mimo.js +57 -109
  221. package/dist/lib/mimo.js.map +1 -1
  222. package/dist/lib/minimax-endpoints.d.ts +2 -2
  223. package/dist/lib/minimax-endpoints.d.ts.map +1 -1
  224. package/dist/lib/minimax-endpoints.js +1 -1
  225. package/dist/lib/minimax-endpoints.js.map +1 -1
  226. package/dist/lib/modelsdev-pricing.d.ts +22 -16
  227. package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
  228. package/dist/lib/modelsdev-pricing.js +279 -560
  229. package/dist/lib/modelsdev-pricing.js.map +1 -1
  230. package/dist/lib/nanogpt.d.ts +6 -6
  231. package/dist/lib/nanogpt.d.ts.map +1 -1
  232. package/dist/lib/nanogpt.js +19 -72
  233. package/dist/lib/nanogpt.js.map +1 -1
  234. package/dist/lib/ollama-cloud.d.ts +3 -6
  235. package/dist/lib/ollama-cloud.d.ts.map +1 -1
  236. package/dist/lib/ollama-cloud.js +26 -37
  237. package/dist/lib/ollama-cloud.js.map +1 -1
  238. package/dist/lib/openai.d.ts +18 -29
  239. package/dist/lib/openai.d.ts.map +1 -1
  240. package/dist/lib/openai.js +108 -182
  241. package/dist/lib/openai.js.map +1 -1
  242. package/dist/lib/opencode-auth-sqlite.d.ts.map +1 -1
  243. package/dist/lib/opencode-auth-sqlite.js +22 -23
  244. package/dist/lib/opencode-auth-sqlite.js.map +1 -1
  245. package/dist/lib/opencode-auth.d.ts +17 -11
  246. package/dist/lib/opencode-auth.d.ts.map +1 -1
  247. package/dist/lib/opencode-auth.js +39 -46
  248. package/dist/lib/opencode-auth.js.map +1 -1
  249. package/dist/lib/opencode-config-editor.d.ts +3 -34
  250. package/dist/lib/opencode-config-editor.d.ts.map +1 -1
  251. package/dist/lib/opencode-config-editor.js +23 -142
  252. package/dist/lib/opencode-config-editor.js.map +1 -1
  253. package/dist/lib/opencode-config-providers.d.ts +4 -3
  254. package/dist/lib/opencode-config-providers.d.ts.map +1 -1
  255. package/dist/lib/opencode-config-providers.js +7 -11
  256. package/dist/lib/opencode-config-providers.js.map +1 -1
  257. package/dist/lib/opencode-config-read.d.ts +2 -1
  258. package/dist/lib/opencode-config-read.d.ts.map +1 -1
  259. package/dist/lib/opencode-config-read.js +3 -2
  260. package/dist/lib/opencode-config-read.js.map +1 -1
  261. package/dist/lib/opencode-console-auth.d.ts +2 -3
  262. package/dist/lib/opencode-console-auth.d.ts.map +1 -1
  263. package/dist/lib/opencode-console-auth.js +2 -2
  264. package/dist/lib/opencode-console-auth.js.map +1 -1
  265. package/dist/lib/opencode-go.d.ts.map +1 -1
  266. package/dist/lib/opencode-go.js +51 -79
  267. package/dist/lib/opencode-go.js.map +1 -1
  268. package/dist/lib/opencode-storage.d.ts +18 -3
  269. package/dist/lib/opencode-storage.d.ts.map +1 -1
  270. package/dist/lib/opencode-storage.js +134 -2
  271. package/dist/lib/opencode-storage.js.map +1 -1
  272. package/dist/lib/opencode-zen.d.ts +15 -12
  273. package/dist/lib/opencode-zen.d.ts.map +1 -1
  274. package/dist/lib/opencode-zen.js +139 -147
  275. package/dist/lib/opencode-zen.js.map +1 -1
  276. package/dist/lib/openrouter.d.ts.map +1 -1
  277. package/dist/lib/openrouter.js +1 -13
  278. package/dist/lib/openrouter.js.map +1 -1
  279. package/dist/lib/pricing-key.d.ts +48 -0
  280. package/dist/lib/pricing-key.d.ts.map +1 -0
  281. package/dist/lib/pricing-key.js +371 -0
  282. package/dist/lib/pricing-key.js.map +1 -0
  283. package/dist/lib/provider-metadata.d.ts +16 -20
  284. package/dist/lib/provider-metadata.d.ts.map +1 -1
  285. package/dist/lib/provider-metadata.js +69 -69
  286. package/dist/lib/provider-metadata.js.map +1 -1
  287. package/dist/lib/provider-model-matching.d.ts +2 -1
  288. package/dist/lib/provider-model-matching.d.ts.map +1 -1
  289. package/dist/lib/provider-registration.d.ts +1 -177
  290. package/dist/lib/provider-registration.d.ts.map +1 -1
  291. package/dist/lib/provider-registration.js +1 -163
  292. package/dist/lib/provider-registration.js.map +1 -1
  293. package/dist/lib/quota-dialog-commands.d.ts +87 -53
  294. package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
  295. package/dist/lib/quota-dialog-commands.js +259 -519
  296. package/dist/lib/quota-dialog-commands.js.map +1 -1
  297. package/dist/lib/quota-export-types.d.ts +29 -23
  298. package/dist/lib/quota-export-types.d.ts.map +1 -1
  299. package/dist/lib/quota-export.d.ts +16 -26
  300. package/dist/lib/quota-export.d.ts.map +1 -1
  301. package/dist/lib/quota-export.js +105 -147
  302. package/dist/lib/quota-export.js.map +1 -1
  303. package/dist/lib/quota-providers-local.d.ts +12 -8
  304. package/dist/lib/quota-providers-local.d.ts.map +1 -1
  305. package/dist/lib/quota-providers-local.js +150 -223
  306. package/dist/lib/quota-providers-local.js.map +1 -1
  307. package/dist/lib/quota-providers-remote.d.ts +3 -8
  308. package/dist/lib/quota-providers-remote.d.ts.map +1 -1
  309. package/dist/lib/quota-providers-remote.js +309 -449
  310. package/dist/lib/quota-providers-remote.js.map +1 -1
  311. package/dist/lib/quota-providers.d.ts +57 -15
  312. package/dist/lib/quota-providers.d.ts.map +1 -1
  313. package/dist/lib/quota-providers.js +157 -64
  314. package/dist/lib/quota-providers.js.map +1 -1
  315. package/dist/lib/quota-report-message.d.ts +23 -10
  316. package/dist/lib/quota-report-message.d.ts.map +1 -1
  317. package/dist/lib/quota-report-message.js +37 -13
  318. package/dist/lib/quota-report-message.js.map +1 -1
  319. package/dist/lib/quota-retry-wait.d.ts +14 -6
  320. package/dist/lib/quota-retry-wait.d.ts.map +1 -1
  321. package/dist/lib/quota-retry-wait.js +37 -39
  322. package/dist/lib/quota-retry-wait.js.map +1 -1
  323. package/dist/lib/quota-status.d.ts +50 -33
  324. package/dist/lib/quota-status.d.ts.map +1 -1
  325. package/dist/lib/quota-status.js +1113 -773
  326. package/dist/lib/quota-status.js.map +1 -1
  327. package/dist/lib/quota-telemetry.d.ts +7 -14
  328. package/dist/lib/quota-telemetry.d.ts.map +1 -1
  329. package/dist/lib/quota-telemetry.js +46 -97
  330. package/dist/lib/quota-telemetry.js.map +1 -1
  331. package/dist/lib/report-document.d.ts +5 -65
  332. package/dist/lib/report-document.d.ts.map +1 -1
  333. package/dist/lib/report-document.js +14 -167
  334. package/dist/lib/report-document.js.map +1 -1
  335. package/dist/lib/resolved-auth-identity.d.ts +1 -2
  336. package/dist/lib/resolved-auth-identity.d.ts.map +1 -1
  337. package/dist/lib/resolved-auth-identity.js +0 -4
  338. package/dist/lib/resolved-auth-identity.js.map +1 -1
  339. package/dist/lib/session-tokens.d.ts +19 -19
  340. package/dist/lib/session-tokens.d.ts.map +1 -1
  341. package/dist/lib/session-tokens.js +58 -44
  342. package/dist/lib/session-tokens.js.map +1 -1
  343. package/dist/lib/synthetic.d.ts +0 -1
  344. package/dist/lib/synthetic.d.ts.map +1 -1
  345. package/dist/lib/synthetic.js +43 -94
  346. package/dist/lib/synthetic.js.map +1 -1
  347. package/dist/lib/token-buckets.d.ts +0 -1
  348. package/dist/lib/token-buckets.d.ts.map +1 -1
  349. package/dist/lib/token-buckets.js +0 -3
  350. package/dist/lib/token-buckets.js.map +1 -1
  351. package/dist/lib/token-cost.d.ts +2 -1
  352. package/dist/lib/token-cost.d.ts.map +1 -1
  353. package/dist/lib/types.d.ts +25 -333
  354. package/dist/lib/types.d.ts.map +1 -1
  355. package/dist/lib/types.js +2 -70
  356. package/dist/lib/types.js.map +1 -1
  357. package/dist/lib/xai.d.ts +6 -6
  358. package/dist/lib/xai.d.ts.map +1 -1
  359. package/dist/lib/xai.js +51 -90
  360. package/dist/lib/xai.js.map +1 -1
  361. package/dist/plugin.d.ts +6 -3
  362. package/dist/plugin.d.ts.map +1 -1
  363. package/dist/plugin.js +315 -90
  364. package/dist/plugin.js.map +1 -1
  365. package/dist/providers/alibaba-coding-plan.d.ts +4 -0
  366. package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
  367. package/dist/providers/alibaba-coding-plan.js +47 -77
  368. package/dist/providers/alibaba-coding-plan.js.map +1 -1
  369. package/dist/providers/alibaba-token-plan.d.ts.map +1 -1
  370. package/dist/providers/alibaba-token-plan.js +34 -46
  371. package/dist/providers/alibaba-token-plan.js.map +1 -1
  372. package/dist/providers/anthropic.d.ts +2 -4
  373. package/dist/providers/anthropic.d.ts.map +1 -1
  374. package/dist/providers/anthropic.js +80 -162
  375. package/dist/providers/anthropic.js.map +1 -1
  376. package/dist/providers/cache-policies.d.ts +0 -2
  377. package/dist/providers/cache-policies.d.ts.map +1 -1
  378. package/dist/providers/cache-policies.js +38 -88
  379. package/dist/providers/cache-policies.js.map +1 -1
  380. package/dist/providers/chutes.d.ts +0 -3
  381. package/dist/providers/chutes.d.ts.map +1 -1
  382. package/dist/providers/chutes.js +16 -28
  383. package/dist/providers/chutes.js.map +1 -1
  384. package/dist/providers/contract.d.ts +128 -0
  385. package/dist/providers/contract.d.ts.map +1 -0
  386. package/dist/providers/contract.js +101 -0
  387. package/dist/providers/contract.js.map +1 -0
  388. package/dist/providers/copilot.d.ts.map +1 -1
  389. package/dist/providers/copilot.js +171 -175
  390. package/dist/providers/copilot.js.map +1 -1
  391. package/dist/providers/cursor.d.ts.map +1 -1
  392. package/dist/providers/cursor.js +56 -109
  393. package/dist/providers/cursor.js.map +1 -1
  394. package/dist/providers/deepseek.d.ts +1 -6
  395. package/dist/providers/deepseek.d.ts.map +1 -1
  396. package/dist/providers/deepseek.js +46 -81
  397. package/dist/providers/deepseek.js.map +1 -1
  398. package/dist/providers/glm-coding-plan.d.ts +8 -0
  399. package/dist/providers/glm-coding-plan.d.ts.map +1 -0
  400. package/dist/providers/glm-coding-plan.js +106 -0
  401. package/dist/providers/glm-coding-plan.js.map +1 -0
  402. package/dist/providers/google-agy.d.ts +0 -1
  403. package/dist/providers/google-agy.d.ts.map +1 -1
  404. package/dist/providers/google-agy.js +41 -192
  405. package/dist/providers/google-agy.js.map +1 -1
  406. package/dist/providers/google-gemini-cli.d.ts.map +1 -1
  407. package/dist/providers/google-gemini-cli.js +51 -151
  408. package/dist/providers/google-gemini-cli.js.map +1 -1
  409. package/dist/providers/google-oauth-provider.d.ts +39 -0
  410. package/dist/providers/google-oauth-provider.d.ts.map +1 -0
  411. package/dist/providers/google-oauth-provider.js +161 -0
  412. package/dist/providers/google-oauth-provider.js.map +1 -0
  413. package/dist/providers/kilo.d.ts +0 -3
  414. package/dist/providers/kilo.d.ts.map +1 -1
  415. package/dist/providers/kilo.js +69 -123
  416. package/dist/providers/kilo.js.map +1 -1
  417. package/dist/providers/kimi-code.d.ts +5 -0
  418. package/dist/providers/kimi-code.d.ts.map +1 -1
  419. package/dist/providers/kimi-code.js +91 -136
  420. package/dist/providers/kimi-code.js.map +1 -1
  421. package/dist/providers/mimo.d.ts.map +1 -1
  422. package/dist/providers/mimo.js +55 -94
  423. package/dist/providers/mimo.js.map +1 -1
  424. package/dist/providers/minimax-coding-plan.d.ts +2 -23
  425. package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
  426. package/dist/providers/minimax-coding-plan.js +161 -277
  427. package/dist/providers/minimax-coding-plan.js.map +1 -1
  428. package/dist/providers/nanogpt.d.ts +0 -3
  429. package/dist/providers/nanogpt.d.ts.map +1 -1
  430. package/dist/providers/nanogpt.js +61 -95
  431. package/dist/providers/nanogpt.js.map +1 -1
  432. package/dist/providers/ollama-cloud.d.ts +0 -6
  433. package/dist/providers/ollama-cloud.d.ts.map +1 -1
  434. package/dist/providers/ollama-cloud.js +86 -112
  435. package/dist/providers/ollama-cloud.js.map +1 -1
  436. package/dist/providers/openai.d.ts.map +1 -1
  437. package/dist/providers/openai.js +144 -166
  438. package/dist/providers/openai.js.map +1 -1
  439. package/dist/providers/opencode-go.d.ts.map +1 -1
  440. package/dist/providers/opencode-go.js +157 -199
  441. package/dist/providers/opencode-go.js.map +1 -1
  442. package/dist/providers/opencode-zen.d.ts.map +1 -1
  443. package/dist/providers/opencode-zen.js +100 -150
  444. package/dist/providers/opencode-zen.js.map +1 -1
  445. package/dist/providers/openrouter.d.ts +0 -3
  446. package/dist/providers/openrouter.d.ts.map +1 -1
  447. package/dist/providers/openrouter.js +26 -13
  448. package/dist/providers/openrouter.js.map +1 -1
  449. package/dist/providers/quota-providers.d.ts +7 -3
  450. package/dist/providers/quota-providers.d.ts.map +1 -1
  451. package/dist/providers/quota-providers.js +111 -217
  452. package/dist/providers/quota-providers.js.map +1 -1
  453. package/dist/providers/registry.d.ts.map +1 -1
  454. package/dist/providers/registry.js +1 -2
  455. package/dist/providers/registry.js.map +1 -1
  456. package/dist/providers/result-helpers.d.ts +10 -37
  457. package/dist/providers/result-helpers.d.ts.map +1 -1
  458. package/dist/providers/result-helpers.js +23 -56
  459. package/dist/providers/result-helpers.js.map +1 -1
  460. package/dist/providers/synthetic.d.ts +0 -3
  461. package/dist/providers/synthetic.d.ts.map +1 -1
  462. package/dist/providers/synthetic.js +16 -58
  463. package/dist/providers/synthetic.js.map +1 -1
  464. package/dist/providers/xai.d.ts +2 -1
  465. package/dist/providers/xai.d.ts.map +1 -1
  466. package/dist/providers/xai.js +49 -71
  467. package/dist/providers/xai.js.map +1 -1
  468. package/dist/rpc.d.ts +110 -38
  469. package/dist/rpc.d.ts.map +1 -1
  470. package/dist/rpc.js +125 -37
  471. package/dist/rpc.js.map +1 -1
  472. package/dist/settings/convert.d.ts +60 -0
  473. package/dist/settings/convert.d.ts.map +1 -0
  474. package/dist/settings/convert.js +473 -0
  475. package/dist/settings/convert.js.map +1 -0
  476. package/dist/settings/file.d.ts +89 -0
  477. package/dist/settings/file.d.ts.map +1 -0
  478. package/dist/settings/file.js +452 -0
  479. package/dist/settings/file.js.map +1 -0
  480. package/dist/settings/index.d.ts +10 -0
  481. package/dist/settings/index.d.ts.map +1 -0
  482. package/dist/settings/index.js +3 -0
  483. package/dist/settings/index.js.map +1 -0
  484. package/dist/settings/schema.d.ts +607 -0
  485. package/dist/settings/schema.d.ts.map +1 -0
  486. package/dist/settings/schema.js +479 -0
  487. package/dist/settings/schema.js.map +1 -0
  488. package/dist/tui/client.d.ts +86 -0
  489. package/dist/tui/client.d.ts.map +1 -0
  490. package/dist/tui/client.js +229 -0
  491. package/dist/tui/client.js.map +1 -0
  492. package/dist/tui/display.d.ts +127 -0
  493. package/dist/tui/display.d.ts.map +1 -0
  494. package/dist/tui/display.js +474 -0
  495. package/dist/tui/display.js.map +1 -0
  496. package/dist/tui/index.d.ts +21 -0
  497. package/dist/tui/index.d.ts.map +1 -0
  498. package/dist/tui/index.js +305 -0
  499. package/dist/tui/server-settings.d.ts +43 -0
  500. package/dist/tui/server-settings.d.ts.map +1 -0
  501. package/dist/tui/server-settings.js +233 -0
  502. package/dist/tui/server-settings.js.map +1 -0
  503. package/dist/tui/sidebar.d.ts +41 -0
  504. package/dist/tui/sidebar.d.ts.map +1 -0
  505. package/dist/tui/sidebar.js +148 -0
  506. package/dist/tui/status-line.d.ts +14 -0
  507. package/dist/tui/status-line.d.ts.map +1 -0
  508. package/dist/tui/status-line.js +225 -0
  509. package/dist/tui/theme.d.ts +41 -0
  510. package/dist/tui/theme.d.ts.map +1 -0
  511. package/dist/tui/theme.js +52 -0
  512. package/dist/tui/theme.js.map +1 -0
  513. package/dist/tui/toast-colors.d.ts +37 -0
  514. package/dist/tui/toast-colors.d.ts.map +1 -0
  515. package/dist/tui/toast-colors.js +77 -0
  516. package/dist/tui/toasts.d.ts +59 -0
  517. package/dist/tui/toasts.d.ts.map +1 -0
  518. package/dist/tui/toasts.js +148 -0
  519. package/dist/tui/toasts.js.map +1 -0
  520. package/dist/tui/window/drag.d.ts +26 -0
  521. package/dist/tui/window/drag.d.ts.map +1 -0
  522. package/dist/tui/window/drag.js +80 -0
  523. package/dist/tui/window/drag.js.map +1 -0
  524. package/dist/tui/window/limits.d.ts +15 -0
  525. package/dist/tui/window/limits.d.ts.map +1 -0
  526. package/dist/tui/window/limits.js +227 -0
  527. package/dist/tui/window/limits.js.map +1 -0
  528. package/dist/tui/window/rail.d.ts +21 -0
  529. package/dist/tui/window/rail.d.ts.map +1 -0
  530. package/dist/tui/window/rail.js +81 -0
  531. package/dist/tui/window/settings.d.ts +164 -0
  532. package/dist/tui/window/settings.d.ts.map +1 -0
  533. package/dist/tui/window/settings.js +1679 -0
  534. package/dist/tui/window/shell.d.ts +108 -0
  535. package/dist/tui/window/shell.d.ts.map +1 -0
  536. package/dist/tui/window/shell.js +1003 -0
  537. package/dist/tui/window/usage.d.ts +75 -0
  538. package/dist/tui/window/usage.d.ts.map +1 -0
  539. package/dist/tui/window/usage.js +928 -0
  540. package/dist/tui/window/views.d.ts +61 -0
  541. package/dist/tui/window/views.d.ts.map +1 -0
  542. package/dist/tui/window/views.js +242 -0
  543. package/dist/tui.d.ts +1 -5
  544. package/dist/tui.js +1 -894
  545. package/dist/view/columns.d.ts +15 -0
  546. package/dist/view/columns.d.ts.map +1 -0
  547. package/dist/view/columns.js +48 -0
  548. package/dist/view/columns.js.map +1 -0
  549. package/dist/view/format.d.ts +82 -0
  550. package/dist/view/format.d.ts.map +1 -0
  551. package/dist/view/format.js +201 -0
  552. package/dist/view/format.js.map +1 -0
  553. package/dist/view/quick-look.d.ts +28 -0
  554. package/dist/view/quick-look.d.ts.map +1 -0
  555. package/dist/view/quick-look.js +150 -0
  556. package/dist/view/quick-look.js.map +1 -0
  557. package/dist/view/select.d.ts +67 -0
  558. package/dist/view/select.d.ts.map +1 -0
  559. package/dist/view/select.js +87 -0
  560. package/dist/view/select.js.map +1 -0
  561. package/dist/view/text.d.ts +153 -0
  562. package/dist/view/text.d.ts.map +1 -0
  563. package/dist/view/text.js +642 -0
  564. package/dist/view/text.js.map +1 -0
  565. package/dist/view/usage.d.ts +86 -0
  566. package/dist/view/usage.d.ts.map +1 -0
  567. package/dist/view/usage.js +724 -0
  568. package/dist/view/usage.js.map +1 -0
  569. package/package.json +4 -6
  570. package/dist/lib/chutes-config.d.ts +0 -15
  571. package/dist/lib/chutes-config.d.ts.map +0 -1
  572. package/dist/lib/chutes-config.js +0 -28
  573. package/dist/lib/chutes-config.js.map +0 -1
  574. package/dist/lib/cli-status.d.ts +0 -8
  575. package/dist/lib/cli-status.d.ts.map +0 -1
  576. package/dist/lib/cli-status.js +0 -98
  577. package/dist/lib/cli-status.js.map +0 -1
  578. package/dist/lib/command-parsing.d.ts +0 -43
  579. package/dist/lib/command-parsing.d.ts.map +0 -1
  580. package/dist/lib/command-parsing.js +0 -103
  581. package/dist/lib/command-parsing.js.map +0 -1
  582. package/dist/lib/config.d.ts +0 -63
  583. package/dist/lib/config.d.ts.map +0 -1
  584. package/dist/lib/config.js +0 -1092
  585. package/dist/lib/config.js.map +0 -1
  586. package/dist/lib/deepseek-auth.d.ts +0 -15
  587. package/dist/lib/deepseek-auth.d.ts.map +0 -1
  588. package/dist/lib/deepseek-auth.js +0 -28
  589. package/dist/lib/deepseek-auth.js.map +0 -1
  590. package/dist/lib/format.d.ts +0 -25
  591. package/dist/lib/format.d.ts.map +0 -1
  592. package/dist/lib/format.js +0 -300
  593. package/dist/lib/format.js.map +0 -1
  594. package/dist/lib/google-agy-companion.d.ts +0 -8
  595. package/dist/lib/google-agy-companion.d.ts.map +0 -1
  596. package/dist/lib/google-agy-companion.js +0 -64
  597. package/dist/lib/google-agy-companion.js.map +0 -1
  598. package/dist/lib/google-gemini-cli-companion.d.ts +0 -8
  599. package/dist/lib/google-gemini-cli-companion.d.ts.map +0 -1
  600. package/dist/lib/google-gemini-cli-companion.js +0 -64
  601. package/dist/lib/google-gemini-cli-companion.js.map +0 -1
  602. package/dist/lib/grouped-entry-normalization.d.ts +0 -12
  603. package/dist/lib/grouped-entry-normalization.d.ts.map +0 -1
  604. package/dist/lib/grouped-entry-normalization.js +0 -124
  605. package/dist/lib/grouped-entry-normalization.js.map +0 -1
  606. package/dist/lib/grouped-header-format.d.ts +0 -5
  607. package/dist/lib/grouped-header-format.d.ts.map +0 -1
  608. package/dist/lib/grouped-header-format.js +0 -16
  609. package/dist/lib/grouped-header-format.js.map +0 -1
  610. package/dist/lib/init-installer.d.ts +0 -123
  611. package/dist/lib/init-installer.d.ts.map +0 -1
  612. package/dist/lib/init-installer.js +0 -1111
  613. package/dist/lib/init-installer.js.map +0 -1
  614. package/dist/lib/jsonc.d.ts +0 -17
  615. package/dist/lib/jsonc.d.ts.map +0 -1
  616. package/dist/lib/jsonc.js +0 -23
  617. package/dist/lib/jsonc.js.map +0 -1
  618. package/dist/lib/kilo-config.d.ts +0 -15
  619. package/dist/lib/kilo-config.d.ts.map +0 -1
  620. package/dist/lib/kilo-config.js +0 -27
  621. package/dist/lib/kilo-config.js.map +0 -1
  622. package/dist/lib/kimi-auth.d.ts +0 -49
  623. package/dist/lib/kimi-auth.d.ts.map +0 -1
  624. package/dist/lib/kimi-auth.js +0 -82
  625. package/dist/lib/kimi-auth.js.map +0 -1
  626. package/dist/lib/markdown-table.d.ts +0 -51
  627. package/dist/lib/markdown-table.d.ts.map +0 -1
  628. package/dist/lib/markdown-table.js +0 -179
  629. package/dist/lib/markdown-table.js.map +0 -1
  630. package/dist/lib/minimax-auth.d.ts +0 -62
  631. package/dist/lib/minimax-auth.d.ts.map +0 -1
  632. package/dist/lib/minimax-auth.js +0 -206
  633. package/dist/lib/minimax-auth.js.map +0 -1
  634. package/dist/lib/nanogpt-config.d.ts +0 -15
  635. package/dist/lib/nanogpt-config.d.ts.map +0 -1
  636. package/dist/lib/nanogpt-config.js +0 -31
  637. package/dist/lib/nanogpt-config.js.map +0 -1
  638. package/dist/lib/ollama-cloud-config.d.ts +0 -15
  639. package/dist/lib/ollama-cloud-config.d.ts.map +0 -1
  640. package/dist/lib/ollama-cloud-config.js +0 -27
  641. package/dist/lib/ollama-cloud-config.js.map +0 -1
  642. package/dist/lib/opencode-go-auth.d.ts +0 -16
  643. package/dist/lib/opencode-go-auth.d.ts.map +0 -1
  644. package/dist/lib/opencode-go-auth.js +0 -42
  645. package/dist/lib/opencode-go-auth.js.map +0 -1
  646. package/dist/lib/opencode-version.d.ts +0 -6
  647. package/dist/lib/opencode-version.d.ts.map +0 -1
  648. package/dist/lib/opencode-version.js +0 -26
  649. package/dist/lib/opencode-version.js.map +0 -1
  650. package/dist/lib/provider-add-command.d.ts +0 -35
  651. package/dist/lib/provider-add-command.d.ts.map +0 -1
  652. package/dist/lib/provider-add-command.js +0 -204
  653. package/dist/lib/provider-add-command.js.map +0 -1
  654. package/dist/lib/provider-add-json-v1-questionnaire.d.ts +0 -32
  655. package/dist/lib/provider-add-json-v1-questionnaire.d.ts.map +0 -1
  656. package/dist/lib/provider-add-json-v1-questionnaire.js +0 -336
  657. package/dist/lib/provider-add-json-v1-questionnaire.js.map +0 -1
  658. package/dist/lib/provider-add.d.ts +0 -21
  659. package/dist/lib/provider-add.d.ts.map +0 -1
  660. package/dist/lib/provider-add.js +0 -219
  661. package/dist/lib/provider-add.js.map +0 -1
  662. package/dist/lib/quota-accounting-projection.d.ts +0 -9
  663. package/dist/lib/quota-accounting-projection.d.ts.map +0 -1
  664. package/dist/lib/quota-accounting-projection.js +0 -254
  665. package/dist/lib/quota-accounting-projection.js.map +0 -1
  666. package/dist/lib/quota-columns.d.ts +0 -38
  667. package/dist/lib/quota-columns.d.ts.map +0 -1
  668. package/dist/lib/quota-columns.js +0 -129
  669. package/dist/lib/quota-columns.js.map +0 -1
  670. package/dist/lib/quota-command-format.d.ts +0 -34
  671. package/dist/lib/quota-command-format.d.ts.map +0 -1
  672. package/dist/lib/quota-command-format.js +0 -240
  673. package/dist/lib/quota-command-format.js.map +0 -1
  674. package/dist/lib/quota-dialog-command-specs.d.ts +0 -63
  675. package/dist/lib/quota-dialog-command-specs.d.ts.map +0 -1
  676. package/dist/lib/quota-dialog-command-specs.js +0 -145
  677. package/dist/lib/quota-dialog-command-specs.js.map +0 -1
  678. package/dist/lib/quota-entry-display.d.ts +0 -7
  679. package/dist/lib/quota-entry-display.d.ts.map +0 -1
  680. package/dist/lib/quota-entry-display.js +0 -59
  681. package/dist/lib/quota-entry-display.js.map +0 -1
  682. package/dist/lib/quota-exhaustion-projection.d.ts +0 -11
  683. package/dist/lib/quota-exhaustion-projection.d.ts.map +0 -1
  684. package/dist/lib/quota-exhaustion-projection.js +0 -105
  685. package/dist/lib/quota-exhaustion-projection.js.map +0 -1
  686. package/dist/lib/quota-format-style.d.ts +0 -21
  687. package/dist/lib/quota-format-style.d.ts.map +0 -1
  688. package/dist/lib/quota-format-style.js +0 -38
  689. package/dist/lib/quota-format-style.js.map +0 -1
  690. package/dist/lib/quota-render-data.d.ts +0 -102
  691. package/dist/lib/quota-render-data.d.ts.map +0 -1
  692. package/dist/lib/quota-render-data.js +0 -419
  693. package/dist/lib/quota-render-data.js.map +0 -1
  694. package/dist/lib/quota-reset-notifications.d.ts +0 -20
  695. package/dist/lib/quota-reset-notifications.d.ts.map +0 -1
  696. package/dist/lib/quota-reset-notifications.js +0 -331
  697. package/dist/lib/quota-reset-notifications.js.map +0 -1
  698. package/dist/lib/quota-runtime-context.d.ts +0 -54
  699. package/dist/lib/quota-runtime-context.d.ts.map +0 -1
  700. package/dist/lib/quota-runtime-context.js +0 -110
  701. package/dist/lib/quota-runtime-context.js.map +0 -1
  702. package/dist/lib/quota-state-codec.d.ts +0 -16
  703. package/dist/lib/quota-state-codec.d.ts.map +0 -1
  704. package/dist/lib/quota-state-codec.js +0 -412
  705. package/dist/lib/quota-state-codec.js.map +0 -1
  706. package/dist/lib/quota-state.d.ts +0 -28
  707. package/dist/lib/quota-state.d.ts.map +0 -1
  708. package/dist/lib/quota-state.js +0 -473
  709. package/dist/lib/quota-state.js.map +0 -1
  710. package/dist/lib/quota-stats-format.d.ts +0 -29
  711. package/dist/lib/quota-stats-format.d.ts.map +0 -1
  712. package/dist/lib/quota-stats-format.js +0 -459
  713. package/dist/lib/quota-stats-format.js.map +0 -1
  714. package/dist/lib/quota-stats.d.ts +0 -126
  715. package/dist/lib/quota-stats.d.ts.map +0 -1
  716. package/dist/lib/quota-stats.js +0 -695
  717. package/dist/lib/quota-stats.js.map +0 -1
  718. package/dist/lib/quota-surface-data.d.ts +0 -21
  719. package/dist/lib/quota-surface-data.d.ts.map +0 -1
  720. package/dist/lib/quota-surface-data.js +0 -362
  721. package/dist/lib/quota-surface-data.js.map +0 -1
  722. package/dist/lib/scoped-update-migration.d.ts +0 -103
  723. package/dist/lib/scoped-update-migration.d.ts.map +0 -1
  724. package/dist/lib/scoped-update-migration.js +0 -344
  725. package/dist/lib/scoped-update-migration.js.map +0 -1
  726. package/dist/lib/scoped-update.d.ts +0 -77
  727. package/dist/lib/scoped-update.d.ts.map +0 -1
  728. package/dist/lib/scoped-update.js +0 -590
  729. package/dist/lib/scoped-update.js.map +0 -1
  730. package/dist/lib/session-tokens-format.d.ts +0 -36
  731. package/dist/lib/session-tokens-format.d.ts.map +0 -1
  732. package/dist/lib/session-tokens-format.js +0 -111
  733. package/dist/lib/session-tokens-format.js.map +0 -1
  734. package/dist/lib/synthetic-config.d.ts +0 -15
  735. package/dist/lib/synthetic-config.d.ts.map +0 -1
  736. package/dist/lib/synthetic-config.js +0 -28
  737. package/dist/lib/synthetic-config.js.map +0 -1
  738. package/dist/lib/toast-format-grouped.d.ts +0 -25
  739. package/dist/lib/toast-format-grouped.d.ts.map +0 -1
  740. package/dist/lib/toast-format-grouped.js +0 -296
  741. package/dist/lib/toast-format-grouped.js.map +0 -1
  742. package/dist/lib/tui-compact-format.d.ts +0 -10
  743. package/dist/lib/tui-compact-format.d.ts.map +0 -1
  744. package/dist/lib/tui-compact-format.js +0 -460
  745. package/dist/lib/tui-compact-format.js.map +0 -1
  746. package/dist/lib/tui-panel-state.d.ts +0 -15
  747. package/dist/lib/tui-panel-state.d.ts.map +0 -1
  748. package/dist/lib/tui-panel-state.js +0 -2
  749. package/dist/lib/tui-panel-state.js.map +0 -1
  750. package/dist/lib/tui-prompt-bar-format.d.ts +0 -25
  751. package/dist/lib/tui-prompt-bar-format.d.ts.map +0 -1
  752. package/dist/lib/tui-prompt-bar-format.js +0 -206
  753. package/dist/lib/tui-prompt-bar-format.js.map +0 -1
  754. package/dist/lib/tui-sidebar-format.d.ts +0 -13
  755. package/dist/lib/tui-sidebar-format.d.ts.map +0 -1
  756. package/dist/lib/tui-sidebar-format.js +0 -34
  757. package/dist/lib/tui-sidebar-format.js.map +0 -1
  758. package/dist/lib/zai-auth.d.ts +0 -15
  759. package/dist/lib/zai-auth.d.ts.map +0 -1
  760. package/dist/lib/zai-auth.js +0 -37
  761. package/dist/lib/zai-auth.js.map +0 -1
  762. package/dist/lib/zai.d.ts +0 -5
  763. package/dist/lib/zai.d.ts.map +0 -1
  764. package/dist/lib/zai.js +0 -14
  765. package/dist/lib/zai.js.map +0 -1
  766. package/dist/lib/zhipu-auth.d.ts +0 -15
  767. package/dist/lib/zhipu-auth.d.ts.map +0 -1
  768. package/dist/lib/zhipu-auth.js +0 -42
  769. package/dist/lib/zhipu-auth.js.map +0 -1
  770. package/dist/lib/zhipu.d.ts +0 -5
  771. package/dist/lib/zhipu.d.ts.map +0 -1
  772. package/dist/lib/zhipu.js +0 -13
  773. package/dist/lib/zhipu.js.map +0 -1
  774. package/dist/providers/glm-coding-plan-provider.d.ts +0 -56
  775. package/dist/providers/glm-coding-plan-provider.d.ts.map +0 -1
  776. package/dist/providers/glm-coding-plan-provider.js +0 -115
  777. package/dist/providers/glm-coding-plan-provider.js.map +0 -1
  778. package/dist/providers/google-account-format.d.ts +0 -7
  779. package/dist/providers/google-account-format.d.ts.map +0 -1
  780. package/dist/providers/google-account-format.js +0 -52
  781. package/dist/providers/google-account-format.js.map +0 -1
  782. package/dist/providers/zai.d.ts +0 -2
  783. package/dist/providers/zai.d.ts.map +0 -1
  784. package/dist/providers/zai.js +0 -24
  785. package/dist/providers/zai.js.map +0 -1
  786. package/dist/providers/zhipu.d.ts +0 -2
  787. package/dist/providers/zhipu.d.ts.map +0 -1
  788. package/dist/providers/zhipu.js +0 -21
  789. package/dist/providers/zhipu.js.map +0 -1
  790. package/dist/tui-v2.d.ts +0 -5
  791. package/dist/tui-v2.d.ts.map +0 -1
  792. package/dist/tui-v2.jsx +0 -624
  793. package/dist/tui-v2.jsx.map +0 -1
  794. package/dist/tui.d.ts.map +0 -1
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Terminal columns: how wide text shows in a terminal, and cutting or padding text to a width
3
+ * without splitting a character. East Asian wide characters and emoji take two columns;
4
+ * control, format and combining characters on their own take none.
5
+ */
6
+ export declare function columnsOf(text: string): number;
7
+ /** The longest start of `text` that fits in `width` columns. */
8
+ export declare function sliceColumns(text: string, width: number): string;
9
+ /** `text` cut to `width` columns, ending in "…" when cut. */
10
+ export declare function truncateColumns(text: string, width: number): string;
11
+ /** `text` with spaces after it up to `width` columns (never cut). */
12
+ export declare function padEndColumns(text: string, width: number): string;
13
+ /** `text` with spaces before it up to `width` columns (never cut). */
14
+ export declare function padStartColumns(text: string, width: number): string;
15
+ //# sourceMappingURL=columns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns.d.ts","sourceRoot":"","sources":["../../src/view/columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAShE;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Terminal columns: how wide text shows in a terminal, and cutting or padding text to a width
3
+ * without splitting a character. East Asian wide characters and emoji take two columns;
4
+ * control, format and combining characters on their own take none.
5
+ */
6
+ const GRAPHEMES = new Intl.Segmenter("en", { granularity: "grapheme" });
7
+ /** East Asian Wide and Fullwidth blocks: Hangul Jamo, CJK, kana, Hangul, fullwidth forms. */
8
+ const WIDE = /^[\u1100-\u115F\u2E80-\u303E\u3041-\u33FF\u3400-\u4DBF\u4E00-\u9FFF\uA000-\uA4CF\uAC00-\uD7A3\uF900-\uFAFF\uFE30-\uFE4F\uFF00-\uFF60\uFFE0-\uFFE6\u{20000}-\u{3FFFD}]/u;
9
+ const EMOJI = /\p{Emoji_Presentation}|\uFE0F/u;
10
+ const INVISIBLE = /^[\p{Cc}\p{Cf}\p{Mn}\p{Me}]+$/u;
11
+ function graphemeColumns(grapheme) {
12
+ if (INVISIBLE.test(grapheme))
13
+ return 0;
14
+ return WIDE.test(grapheme) || EMOJI.test(grapheme) ? 2 : 1;
15
+ }
16
+ export function columnsOf(text) {
17
+ let columns = 0;
18
+ for (const { segment } of GRAPHEMES.segment(text))
19
+ columns += graphemeColumns(segment);
20
+ return columns;
21
+ }
22
+ /** The longest start of `text` that fits in `width` columns. */
23
+ export function sliceColumns(text, width) {
24
+ let slice = "";
25
+ let columns = 0;
26
+ for (const { segment } of GRAPHEMES.segment(text)) {
27
+ columns += graphemeColumns(segment);
28
+ if (columns > width)
29
+ break;
30
+ slice += segment;
31
+ }
32
+ return slice;
33
+ }
34
+ /** `text` cut to `width` columns, ending in "…" when cut. */
35
+ export function truncateColumns(text, width) {
36
+ if (columnsOf(text) <= width)
37
+ return text;
38
+ return width <= 0 ? "" : `${sliceColumns(text, width - 1)}…`;
39
+ }
40
+ /** `text` with spaces after it up to `width` columns (never cut). */
41
+ export function padEndColumns(text, width) {
42
+ return text + " ".repeat(Math.max(0, width - columnsOf(text)));
43
+ }
44
+ /** `text` with spaces before it up to `width` columns (never cut). */
45
+ export function padStartColumns(text, width) {
46
+ return " ".repeat(Math.max(0, width - columnsOf(text))) + text;
47
+ }
48
+ //# sourceMappingURL=columns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns.js","sourceRoot":"","sources":["../../src/view/columns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;AACxE,6FAA6F;AAC7F,MAAM,IAAI,GACR,wKAAwK,CAAC;AAC3K,MAAM,KAAK,GAAG,gCAAgC,CAAC;AAC/C,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAEnD,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IACvF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAa;IACtD,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK;YAAE,MAAM;QAC3B,KAAK,IAAI,OAAO,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa;IACvD,OAAO,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACjE,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Words and numbers every quota and usage surface shows: percents, reset times, bars, amounts,
3
+ * money, token counts and shares. Pure functions, shared by the TUI, the Web text and the CLI.
4
+ * Money, token counts and shares are written the way T3 Code's usage page writes them, always
5
+ * in US English, so the text is the same on every machine.
6
+ */
7
+ import type { Amount, QuotaRow, ResetStyle, SessionTokens, Words } from "../core/types.js";
8
+ /** "$1,234.56", "$0.00", and "<$0.01" for an amount above 0 that would show as $0.00. */
9
+ export declare function formatUsd(usd: number): string;
10
+ /** Whole below 1,000, then always three significant digits: "950", "12.3K", "8.00M", "13.4B". */
11
+ export declare function formatTokens(count: number): string;
12
+ /** A 0..1 share with one decimal: "92.5%", "5.0%", "100.0%"; "<0.1%" above 0; "0%" for 0. */
13
+ export declare function formatShare(share: number): string;
14
+ /** The words until the server sends its own (docs/v6-build.local.md §5). */
15
+ export declare const DEFAULT_WORDS: Words;
16
+ /** The word after a percent ("left", "used", or "" for the bare style). */
17
+ export declare function percentWord(words: Words): string;
18
+ /** "58% left", "42% used", or "58%" without the word. */
19
+ export declare function percentText(words: Words, percentRemaining: number, withWord: boolean): string;
20
+ /**
21
+ * docs/v6-plan.local.md §4.7. Zero units are dropped in every style; the past is "now".
22
+ * "smart" rounds to the nearest: a day or more in days with one decimal ("4.5d"), from 12 hours
23
+ * in whole hours ("23h"), below that like "exact" ("11h 35m"). A time that rounds to 24 hours
24
+ * is "1.0d".
25
+ */
26
+ export declare function formatDuration(ms: number, style: ResetStyle, decimals: number): string;
27
+ /** The time until a row resets, in the words' style; "" when the row has no reset time. */
28
+ export declare function resetText(row: QuotaRow, nowMs: number, words: Words): string;
29
+ export type BarShape = "blocks" | "shades" | "line" | "squares" | "dots" | "none";
30
+ /** A bar in two parts (left, used), so each can have its own color. */
31
+ export declare function barParts(shape: BarShape, percentRemaining: number, width: number): [string, string];
32
+ /**
33
+ * The cell of a bar `width` cells wide where even use would be (the │ mark): `evenLeft` is the
34
+ * percent even use leaves now (`core/pace.ts`).
35
+ */
36
+ export declare function evenUseCell(evenLeft: number, width: number): number;
37
+ export type Level = "good" | "warning" | "low";
38
+ export type Thresholds = {
39
+ warningBelow: number;
40
+ lowBelow: number;
41
+ };
42
+ /** Plenty left, getting low, or almost out. */
43
+ export declare function levelOf(percentRemaining: number, thresholds: Thresholds): Level;
44
+ /**
45
+ * "$12.40", "12.40 EUR", "1 request", "1,200 requests", "30 nano". A count unit is one word
46
+ * ("request"); it is plural for every number but 1, and the plain "unit" is not shown.
47
+ */
48
+ export declare function amountText(amount: Amount): string;
49
+ /** The value of a row without a percent: its text, amount, used/limit, or yes/no. */
50
+ export declare function rowValueText(row: QuotaRow): string;
51
+ /** "12.3K in · 2.10K out". */
52
+ export declare function sessionTokensText(tokens: SessionTokens): string;
53
+ /** Marks a low cache hit. */
54
+ export declare const LOW_CACHE_MARK = "\u26A0";
55
+ /** A model's input tokens by kind: new input, cache reads and cache writes. */
56
+ export type InputTokens = {
57
+ input: number;
58
+ cacheRead: number;
59
+ cacheWrite: number;
60
+ };
61
+ /** The share of a model's input tokens read from the cache. */
62
+ export type CacheHit = {
63
+ /** Cache reads ÷ all input tokens. */
64
+ share: number;
65
+ /** Whole percents, rounded down so a low cache hit never reads "50%": "35%". */
66
+ text: string;
67
+ /** At least 200K input tokens: enough to tell a good cache hit from a low one. */
68
+ judged: boolean;
69
+ /** Judged, and less than half of the input tokens read from the cache. */
70
+ low: boolean;
71
+ };
72
+ /**
73
+ * The cache hit of `tokens`; undefined without input tokens, or without cache reads and cache
74
+ * writes (the provider reports no cache numbers).
75
+ */
76
+ export declare function cacheHit(tokens: InputTokens): CacheHit | undefined;
77
+ /**
78
+ * `text` cut to `width` terminal columns with "…" ("Copilot…", not "Copilot …"), else padded
79
+ * to it. Wide characters count two columns and are never split.
80
+ */
81
+ export declare function fit(text: string, width: number): string;
82
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/view/format.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAU3F,yFAAyF;AACzF,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,4EAA4E;AAC5E,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AASF,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEhD;AAOD,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAK7F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoBtF;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAI5E;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAUlF,uEAAuE;AACvE,wBAAgB,QAAQ,CACtB,KAAK,EAAE,QAAQ,EACf,gBAAgB,EAAE,MAAM,EACxB,KAAK,EAAE,MAAM,GACZ,CAAC,MAAM,EAAE,MAAM,CAAC,CAKlB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,+CAA+C;AAC/C,wBAAgB,OAAO,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,KAAK,CAI/E;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAejD;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAYlD;AAED,8BAA8B;AAC9B,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAE/D;AAMD,6BAA6B;AAC7B,eAAO,MAAM,cAAc,WAAM,CAAC;AAElC,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnF,+DAA+D;AAC/D,MAAM,MAAM,QAAQ,GAAG;IACrB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,MAAM,EAAE,OAAO,CAAC;IAChB,0EAA0E;IAC1E,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAWlE;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIvD"}
@@ -0,0 +1,201 @@
1
+ import { columnsOf, padEndColumns, sliceColumns } from "./columns.js";
2
+ const USD = new Intl.NumberFormat("en-US", { style: "currency", currency: "USD" });
3
+ const COMPACT = new Intl.NumberFormat("en-US", {
4
+ notation: "compact",
5
+ minimumSignificantDigits: 3,
6
+ maximumSignificantDigits: 3,
7
+ });
8
+ /** "$1,234.56", "$0.00", and "<$0.01" for an amount above 0 that would show as $0.00. */
9
+ export function formatUsd(usd) {
10
+ const text = USD.format(usd);
11
+ return usd > 0 && text === "$0.00" ? "<$0.01" : text;
12
+ }
13
+ /** Whole below 1,000, then always three significant digits: "950", "12.3K", "8.00M", "13.4B". */
14
+ export function formatTokens(count) {
15
+ const whole = Math.round(count);
16
+ return whole < 1000 ? String(whole) : COMPACT.format(whole);
17
+ }
18
+ /** A 0..1 share with one decimal: "92.5%", "5.0%", "100.0%"; "<0.1%" above 0; "0%" for 0. */
19
+ export function formatShare(share) {
20
+ if (share === 0)
21
+ return "0%";
22
+ const text = (share * 100).toFixed(1);
23
+ return share > 0 && text === "0.0" ? "<0.1%" : `${text}%`;
24
+ }
25
+ /** The words until the server sends its own (docs/v6-build.local.md §5). */
26
+ export const DEFAULT_WORDS = {
27
+ percent: "left",
28
+ reset: "smart",
29
+ resetDecimals: 1,
30
+ rowNames: "short",
31
+ detail: "summary",
32
+ onlyCurrentModel: false,
33
+ sessionTokens: "current",
34
+ };
35
+ const PERCENT_WORDS = {
36
+ left: "left",
37
+ remaining: "remaining",
38
+ bare: "",
39
+ used: "used",
40
+ };
41
+ /** The word after a percent ("left", "used", or "" for the bare style). */
42
+ export function percentWord(words) {
43
+ return PERCENT_WORDS[words.percent];
44
+ }
45
+ /** A raw percent left as a whole number from 0 to 100. */
46
+ function clampPercent(percent) {
47
+ return Math.max(0, Math.min(100, Math.round(percent)));
48
+ }
49
+ /** "58% left", "42% used", or "58%" without the word. */
50
+ export function percentText(words, percentRemaining, withWord) {
51
+ const left = clampPercent(percentRemaining);
52
+ const value = words.percent === "used" ? 100 - left : left;
53
+ const word = withWord ? percentWord(words) : "";
54
+ return word ? `${value}% ${word}` : `${value}%`;
55
+ }
56
+ /**
57
+ * docs/v6-plan.local.md §4.7. Zero units are dropped in every style; the past is "now".
58
+ * "smart" rounds to the nearest: a day or more in days with one decimal ("4.5d"), from 12 hours
59
+ * in whole hours ("23h"), below that like "exact" ("11h 35m"). A time that rounds to 24 hours
60
+ * is "1.0d".
61
+ */
62
+ export function formatDuration(ms, style, decimals) {
63
+ if (!(ms > 0))
64
+ return "now";
65
+ const minutes = Math.ceil(ms / 60_000);
66
+ if (style === "smart" && minutes >= 720) {
67
+ const hours = Math.round(minutes / 60);
68
+ return hours < 24 ? `${hours}h` : `${(Math.round(minutes / 144) / 10).toFixed(1)}d`;
69
+ }
70
+ if (style === "decimal") {
71
+ return minutes >= 1440
72
+ ? `${(minutes / 1440).toFixed(decimals)}d`
73
+ : `${(minutes / 60).toFixed(decimals)}h`;
74
+ }
75
+ const days = Math.floor(minutes / 1440);
76
+ const hours = Math.floor((minutes % 1440) / 60);
77
+ const rest = minutes % 60;
78
+ let parts = [days && `${days}d`, hours && `${hours}h`, rest && `${rest}m`].filter((part) => Boolean(part));
79
+ if (style === "short")
80
+ parts = parts.slice(0, days ? 2 : 1);
81
+ return parts.join(style === "compact" ? "" : " ");
82
+ }
83
+ /** The time until a row resets, in the words' style; "" when the row has no reset time. */
84
+ export function resetText(row, nowMs, words) {
85
+ const resetMs = Date.parse(row.resetsAt ?? "");
86
+ if (!Number.isFinite(resetMs))
87
+ return "";
88
+ return formatDuration(resetMs - nowMs, words.reset, words.resetDecimals);
89
+ }
90
+ const BAR_CHARACTERS = {
91
+ blocks: ["█", "░"],
92
+ shades: ["▓", "░"],
93
+ line: ["━", "─"],
94
+ squares: ["■", "□"],
95
+ dots: ["●", "○"],
96
+ };
97
+ /** A bar in two parts (left, used), so each can have its own color. */
98
+ export function barParts(shape, percentRemaining, width) {
99
+ if (shape === "none" || width <= 0)
100
+ return ["", ""];
101
+ const [full, empty] = BAR_CHARACTERS[shape];
102
+ const filled = Math.round((clampPercent(percentRemaining) / 100) * width);
103
+ return [full.repeat(filled), empty.repeat(width - filled)];
104
+ }
105
+ /**
106
+ * The cell of a bar `width` cells wide where even use would be (the │ mark): `evenLeft` is the
107
+ * percent even use leaves now (`core/pace.ts`).
108
+ */
109
+ export function evenUseCell(evenLeft, width) {
110
+ return Math.max(0, Math.min(width - 1, Math.round((evenLeft / 100) * width)));
111
+ }
112
+ /** Plenty left, getting low, or almost out. */
113
+ export function levelOf(percentRemaining, thresholds) {
114
+ const left = clampPercent(percentRemaining);
115
+ if (left < thresholds.lowBelow)
116
+ return "low";
117
+ return left < thresholds.warningBelow ? "warning" : "good";
118
+ }
119
+ function groupDigits(integer) {
120
+ return integer.replace(/\B(?=(\d{3})+(?!\d))/gu, ",");
121
+ }
122
+ /**
123
+ * "$12.40", "12.40 EUR", "1 request", "1,200 requests", "30 nano". A count unit is one word
124
+ * ("request"); it is plural for every number but 1, and the plain "unit" is not shown.
125
+ */
126
+ export function amountText(amount) {
127
+ const { unit } = amount;
128
+ if (unit.kind === "currency") {
129
+ const value = Number(amount.decimal);
130
+ const sign = value < 0 ? "-" : "";
131
+ const [integer = "0", cents = "00"] = Math.abs(value).toFixed(2).split(".");
132
+ const money = `${groupDigits(integer)}.${cents}`;
133
+ return unit.code === "USD" ? `${sign}$${money}` : `${sign}${money} ${unit.code}`;
134
+ }
135
+ const [integer = "0", fraction] = amount.decimal.replace(/^-/u, "").split(".");
136
+ const sign = amount.decimal.startsWith("-") ? "-" : "";
137
+ const number = `${sign}${groupDigits(integer)}${fraction ? `.${fraction}` : ""}`;
138
+ if (unit.kind === "custom")
139
+ return `${number} ${unit.symbol}`;
140
+ if (unit.unit === "unit")
141
+ return number;
142
+ return `${number} ${integer === "1" && !fraction ? unit.unit : `${unit.unit}s`}`;
143
+ }
144
+ /** The value of a row without a percent: its text, amount, used/limit, or yes/no. */
145
+ export function rowValueText(row) {
146
+ if (row.text !== undefined)
147
+ return row.text;
148
+ if (row.amount) {
149
+ const amount = amountText(row.amount);
150
+ if (row.type === "balance")
151
+ return `${amount} left`;
152
+ return row.type === "usage" ? `${amount} used` : amount;
153
+ }
154
+ if (row.remaining)
155
+ return `${amountText(row.remaining)} left`;
156
+ if (row.used && row.limit)
157
+ return `${amountText(row.used)}/${amountText(row.limit)}`;
158
+ if (row.used)
159
+ return `${amountText(row.used)} used`;
160
+ if (row.flag !== undefined)
161
+ return row.flag ? "Enabled" : "Disabled";
162
+ return "";
163
+ }
164
+ /** "12.3K in · 2.10K out". */
165
+ export function sessionTokensText(tokens) {
166
+ return `${formatTokens(tokens.input)} in · ${formatTokens(tokens.output)} out`;
167
+ }
168
+ /** A model's cache hit can be low once it read this many input tokens. */
169
+ const LOW_CACHE_MIN_INPUT_TOKENS = 200_000;
170
+ /** A cache hit below this share is low. */
171
+ const LOW_CACHE_HIT_BELOW = 0.5;
172
+ /** Marks a low cache hit. */
173
+ export const LOW_CACHE_MARK = "⚠";
174
+ /**
175
+ * The cache hit of `tokens`; undefined without input tokens, or without cache reads and cache
176
+ * writes (the provider reports no cache numbers).
177
+ */
178
+ export function cacheHit(tokens) {
179
+ const allInput = tokens.input + tokens.cacheRead + tokens.cacheWrite;
180
+ if (allInput <= 0 || tokens.cacheRead + tokens.cacheWrite <= 0)
181
+ return undefined;
182
+ const share = tokens.cacheRead / allInput;
183
+ const judged = allInput >= LOW_CACHE_MIN_INPUT_TOKENS;
184
+ return {
185
+ share,
186
+ text: `${Math.floor((tokens.cacheRead * 100) / allInput)}%`,
187
+ judged,
188
+ low: judged && share < LOW_CACHE_HIT_BELOW,
189
+ };
190
+ }
191
+ /**
192
+ * `text` cut to `width` terminal columns with "…" ("Copilot…", not "Copilot …"), else padded
193
+ * to it. Wide characters count two columns and are never split.
194
+ */
195
+ export function fit(text, width) {
196
+ if (width <= 0)
197
+ return "";
198
+ const cut = columnsOf(text) > width ? `${sliceColumns(text, width - 1).trimEnd()}…` : text;
199
+ return padEndColumns(cut, width);
200
+ }
201
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/view/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { QuotaSnapshot } from "../core/types.js";
2
+ import type { UsageReport } from "../core/usage.js";
3
+ import { type UsageRange } from "../core/usage-ranges.js";
4
+ import { type RowSettings } from "./select.js";
5
+ /** The range of the usage `/quota` shows. */
6
+ export declare const DEFAULT_QUICK_LOOK_RANGE: Exclude<UsageRange, "between">;
7
+ type QuickLookTextInput = {
8
+ snapshot: QuotaSnapshot | undefined;
9
+ usage: UsageReport | undefined;
10
+ settings: RowSettings;
11
+ nowMs: number;
12
+ /** The columns a line may take; without it lines are as long as they get. */
13
+ width?: number;
14
+ };
15
+ /**
16
+ * The matching table: the quota providers an OpenCode provider id (a model's `providerID`,
17
+ * like "github-copilot" or "zai-coding-plan") stands for. The id itself (a custom provider
18
+ * named after it), then every quota provider that lists it among its OpenCode ids.
19
+ */
20
+ export declare function quotaProviderIdsOfUsage(usageProviderID: string): string[];
21
+ /**
22
+ * The short text: the range and totals, then one line per provider with its limits and its
23
+ * cost. Pace words show when the quota runs out before its reset. With `width`, a line that
24
+ * would be wider goes on under itself, never inside an amount or a limit.
25
+ */
26
+ export declare function quickLookText(input: QuickLookTextInput): string;
27
+ export {};
28
+ //# sourceMappingURL=quick-look.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-look.d.ts","sourceRoot":"","sources":["../../src/view/quick-look.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAS,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,yBAAyB,CAAC;AAe3E,OAAO,EAAc,KAAK,WAAW,EAAiB,MAAM,aAAa,CAAC;AAG1E,6CAA6C;AAC7C,eAAO,MAAM,wBAAwB,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,CAAQ,CAAC;AAE7E,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,aAAa,GAAG,SAAS,CAAC;IACpC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAWF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzE;AA2GD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAuC/D"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * The `/quota` text of Web and Desktop: the quotas next to what OpenCode's own history used.
3
+ * Pure. One block per provider: a provider OpenCode used gets its cost and, when quota checks it
4
+ * too, its limits; a quota provider OpenCode did not use gets only its limits.
5
+ * `quotaProviderIdsOfUsage` matches the two.
6
+ */
7
+ import { describeError } from "../core/errors.js";
8
+ import { paceOf, paceText } from "../core/pace.js";
9
+ import { usageRangeLabel } from "../core/usage-ranges.js";
10
+ import { WINDOWS } from "../core/windows.js";
11
+ import { getQuotaProviderDisplayLabel, getQuotaProviderIdsForRuntimeId, } from "../lib/provider-metadata.js";
12
+ import { columnsOf } from "./columns.js";
13
+ import { DEFAULT_WORDS, fit, formatTokens, formatUsd, percentText, rowValueText, } from "./format.js";
14
+ import { visibleGroups } from "./select.js";
15
+ import { costText } from "./usage.js";
16
+ /** The range of the usage `/quota` shows. */
17
+ export const DEFAULT_QUICK_LOOK_RANGE = "7d";
18
+ /** A limit label is cut to this many columns. */
19
+ const LABEL_MAX_WIDTH = 16;
20
+ const TEXT_NAME_MAX = 20;
21
+ /** A short-text line that goes on under the one before starts this far in. */
22
+ const TEXT_CONTINUE = " ";
23
+ /**
24
+ * The matching table: the quota providers an OpenCode provider id (a model's `providerID`,
25
+ * like "github-copilot" or "zai-coding-plan") stands for. The id itself (a custom provider
26
+ * named after it), then every quota provider that lists it among its OpenCode ids.
27
+ */
28
+ export function quotaProviderIdsOfUsage(usageProviderID) {
29
+ return [usageProviderID, ...getQuotaProviderIdsForRuntimeId(usageProviderID)];
30
+ }
31
+ /**
32
+ * The quota group serves what OpenCode used under `usageProviderID`: its quota provider is one
33
+ * that id stands for, or it shows a custom definition serving that id (`customRowProviders`).
34
+ */
35
+ function groupServesUsage(group, usageProviderID, customRowProviders) {
36
+ if (quotaProviderIdsOfUsage(usageProviderID).includes(group.providerId))
37
+ return true;
38
+ const prefixes = Object.keys(customRowProviders).filter((prefix) => customRowProviders[prefix] === usageProviderID);
39
+ return group.rows.some(({ row }) => prefixes.some((prefix) => row.id.startsWith(prefix)));
40
+ }
41
+ /** There are providers, but `onlyCurrentModel` hides them all: none serves the session's model. */
42
+ function servesNoCurrentModel(snapshot) {
43
+ return snapshot.providers.length > 0 && (snapshot.words ?? DEFAULT_WORDS).onlyCurrentModel;
44
+ }
45
+ /**
46
+ * The providers and rows `/quota` shows: the sidebar's, and with `onlyCurrentModel` only
47
+ * those serving the session's current model.
48
+ */
49
+ function quotaGroups(snapshot, settings) {
50
+ if (!snapshot)
51
+ return [];
52
+ return visibleGroups(snapshot, settings, "sidebar", snapshot.words ?? DEFAULT_WORDS);
53
+ }
54
+ /**
55
+ * One block per provider OpenCode used (most cost, or most tokens, first) with the quota groups
56
+ * it matches, then one per quota group no used provider matched, in the sidebar's order.
57
+ */
58
+ function blocksOf(groups, snapshot, report, mode) {
59
+ const customRowProviders = snapshot?.customRowProviders ?? {};
60
+ const used = (report?.providers ?? []).filter((row) => row.tokens > 0);
61
+ const ordered = mode === "cost" ? used : [...used].sort((a, b) => b.tokens - a.tokens);
62
+ const claimed = new Set();
63
+ const usedBlocks = ordered.map((row) => {
64
+ const own = groups.filter((group) => !claimed.has(group) && groupServesUsage(group, row.providerID, customRowProviders));
65
+ for (const group of own)
66
+ claimed.add(group);
67
+ const index = report?.providers.indexOf(row) ?? 0;
68
+ // One group: its title names the account ("Custom providers (Team)").
69
+ const name = own.length === 1 ? own[0].title : own[0]?.name;
70
+ return {
71
+ name: name ?? getQuotaProviderDisplayLabel(row.providerID),
72
+ dot: `provider:${index}`,
73
+ usage: row,
74
+ groups: own,
75
+ };
76
+ });
77
+ const unused = groups.filter((group) => !claimed.has(group));
78
+ const quotaBlocks = unused.map((group, index) => ({
79
+ name: group.title,
80
+ dot: `provider:${(report?.providers.length ?? 0) + index}`,
81
+ groups: [group],
82
+ }));
83
+ return [...usedBlocks, ...quotaBlocks];
84
+ }
85
+ /** A group's error and its limits in a few words: "5h 41% left · 7d 68% left". */
86
+ function shortLimits(group, words, nowMs) {
87
+ const error = group.error ? [describeError(group.error, group.name, nowMs)] : [];
88
+ const limits = group.rows.map(({ row, label }) => {
89
+ const name = row.window ? WINDOWS[row.window].short : fit(label, LABEL_MAX_WIDTH).trimEnd();
90
+ if (row.percentRemaining === undefined)
91
+ return `${name} ${rowValueText(row)}`;
92
+ const percent = `${name} ${percentText(words, row.percentRemaining, true)}`;
93
+ const pace = paceOf(row, nowMs);
94
+ return pace?.kind === "fast" ? `${percent} ${paceText(pace, words)}` : percent;
95
+ });
96
+ return [...error, ...limits];
97
+ }
98
+ /**
99
+ * The pieces on lines of at most `width` columns: a piece never splits (a wider one gets a line
100
+ * of its own), and a line that goes on starts with `TEXT_CONTINUE`. No width: one line.
101
+ */
102
+ function flowPieces(pieces, width) {
103
+ const lines = [];
104
+ let line = "";
105
+ for (const piece of pieces) {
106
+ const joined = line ? `${line}${piece.before}${piece.text}` : piece.text;
107
+ if (!line || width === undefined || columnsOf(joined) <= width) {
108
+ line = joined;
109
+ continue;
110
+ }
111
+ lines.push(line.trimEnd());
112
+ line = `${TEXT_CONTINUE}${piece.text}`;
113
+ }
114
+ return line ? [...lines, line.trimEnd()] : lines;
115
+ }
116
+ /**
117
+ * The short text: the range and totals, then one line per provider with its limits and its
118
+ * cost. Pace words show when the quota runs out before its reset. With `width`, a line that
119
+ * would be wider goes on under itself, never inside an amount or a limit.
120
+ */
121
+ export function quickLookText(input) {
122
+ const { usage, nowMs, width } = input;
123
+ const words = input.snapshot?.words ?? DEFAULT_WORDS;
124
+ const blocks = blocksOf(quotaGroups(input.snapshot, input.settings), input.snapshot, usage, "cost");
125
+ const header = [{ text: "Quota", before: "" }];
126
+ if (usage) {
127
+ const totals = usage.totals.tokens.processed > 0
128
+ ? [formatUsd(usage.totals.costUsd), `${formatTokens(usage.totals.tokens.processed)} tokens`]
129
+ : ["no usage"];
130
+ for (const text of [usageRangeLabel(usage.range), ...totals])
131
+ header.push({ text, before: " · " });
132
+ }
133
+ const nameWidth = Math.min(TEXT_NAME_MAX, Math.max(0, ...blocks.map((block) => columnsOf(block.name))));
134
+ const lines = blocks.flatMap((block) => {
135
+ const limits = block.groups.flatMap((group) => shortLimits(group, words, nowMs));
136
+ const pieces = [
137
+ { text: `● ${fit(block.name, nameWidth)}`, before: "" },
138
+ ...limits.map((text, index) => ({ text, before: index === 0 ? " " : " · " })),
139
+ ...(block.usage ? [{ text: costText(block.usage), before: " " }] : []),
140
+ ];
141
+ return flowPieces(pieces, width);
142
+ });
143
+ if (lines.length === 0 && input.snapshot) {
144
+ lines.push(servesNoCurrentModel(input.snapshot)
145
+ ? "No quota provider serves the session's current model. Run /quota_status to see why."
146
+ : "No quota providers found. Run /quota_status to see why.");
147
+ }
148
+ return [...flowPieces(header, width), ...lines].join("\n");
149
+ }
150
+ //# sourceMappingURL=quick-look.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-look.js","sourceRoot":"","sources":["../../src/view/quick-look.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Which providers and rows a surface shows, in which order and under which names. Pure:
3
+ * every surface (TUI, Web text, CLI) picks its rows here from the snapshot and the display
4
+ * settings.
5
+ */
6
+ import type { QuotaError, QuotaRow, QuotaSnapshot, QuotaWindow, Words } from "../core/types.js";
7
+ export type Surface = "sidebar" | "collapsed" | "statusLine" | "toast";
8
+ /** What one surface shows. Ids not named in an order follow in the snapshot's order. */
9
+ export type SurfaceRows = {
10
+ enabled: boolean;
11
+ /** Names selected from this surface's tab. */
12
+ names?: Record<string, string>;
13
+ /** Provider ids and row ids this surface leaves out. */
14
+ hidden: string[];
15
+ providerOrder: string[];
16
+ /** Row ids per provider id. */
17
+ rowOrder: Record<string, string[]>;
18
+ };
19
+ /** The window a provider shows in the collapsed sidebar and the status line. */
20
+ export type WindowChoice = "lowest" | QuotaWindow;
21
+ /** The part of the display settings that picks rows. */
22
+ export type RowSettings = {
23
+ /** Your names for rows, by row id. */
24
+ labels: Record<string, string>;
25
+ surfaces: Record<Surface, SurfaceRows>;
26
+ /**
27
+ * Preferred window by provider id, and by `ALL_PROVIDERS` for every other provider; "lowest"
28
+ * (the default) shows the row with the least left.
29
+ */
30
+ window: Record<string, WindowChoice>;
31
+ };
32
+ /** A row as a place shows it: `label` is your name for it, or its own; `named` says you named it. */
33
+ export type VisibleRow = {
34
+ row: QuotaRow;
35
+ label: string;
36
+ named: boolean;
37
+ };
38
+ /** One provider account on a surface: its title, its rows, and its last error. */
39
+ export type Group = {
40
+ /** Provider id, or `${providerId} (account)` when it has several accounts. */
41
+ id: string;
42
+ providerId: string;
43
+ /** "Claude" or "Claude (work)". */
44
+ title: string;
45
+ name: string;
46
+ account?: string;
47
+ rows: VisibleRow[];
48
+ error?: QuotaError;
49
+ /** True before the provider was ever checked. */
50
+ unchecked: boolean;
51
+ };
52
+ /** `ids` first in the given order, then the rest in their own order. */
53
+ export declare function ordered<T>(items: readonly T[], idOf: (item: T) => string, order: readonly string[]): T[];
54
+ /** The providers and rows `surface` shows, in order, with your row names. */
55
+ export declare function visibleGroups(snapshot: QuotaSnapshot, settings: RowSettings, surface: Surface, words: Words): Group[];
56
+ /**
57
+ * The window a provider shows in the collapsed sidebar or the status line: its own pick, else the
58
+ * pick for all providers, else "lowest".
59
+ */
60
+ export declare function windowFor(windows: Readonly<Record<string, WindowChoice>>, providerId: string): WindowChoice;
61
+ /**
62
+ * The one row a group shows in the collapsed sidebar and the status line: the preferred
63
+ * window's row; with "lowest", or when the group has no row of that window, the row with the
64
+ * least left; else the first row.
65
+ */
66
+ export declare function pickRow(group: Pick<Group, "rows">, choice?: WindowChoice): VisibleRow | undefined;
67
+ //# sourceMappingURL=select.d.ts.map