@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
@@ -1,223 +1,241 @@
1
- import { formatYmd, parseQuotaBetweenArgs, startOfLocalDayMs, startOfNextLocalDayMs, } from "./command-parsing.js";
1
+ /**
2
+ * The /quota_status report of the slash command, the `quota_status` tool and
3
+ * `opencode-quota status`, and the quota lines of `opencode-quota show`. Each reads the server
4
+ * settings the host holds now.
5
+ */
6
+ import { loadProviderSource, providerContext, } from "../core/provider-source.js";
7
+ import { matchesQuotaProviderCurrentSelection } from "../core/selection.js";
8
+ import { createQuotaStore } from "../core/store.js";
9
+ import { usageReport } from "../core/usage.js";
10
+ import { getProviders } from "../providers/registry.js";
11
+ import { apiKeyStatusDetails, simpleApiKeyStatusDetails } from "../providers/result-helpers.js";
12
+ import { PROVIDER_IDS } from "../settings/schema.js";
13
+ import { DEFAULT_WORDS } from "../view/format.js";
14
+ import { visibleGroups } from "../view/select.js";
15
+ import { plainLines } from "../view/text.js";
16
+ import { API_KEY_LOGIN_VENDORS, API_KEY_VENDORS, getApiKeyDiagnostics, getApiKeyLoginDiagnostics, } from "./api-key-resolver.js";
17
+ import { inspectCursorAuthPresence } from "./cursor-detection.js";
2
18
  import { isCursorProviderId } from "./cursor-pricing.js";
3
- import { BUNDLED_MAINTAINER_ANNOUNCEMENTS, getMaintainerAnnouncementsSummary, } from "./maintainer-announcements.js";
4
- import { getPricingSnapshotMeta, getPricingSnapshotSource, getRuntimePricingRefreshStatePath, getRuntimePricingSnapshotPath, maybeRefreshPricingSnapshot, setPricingSnapshotAutoRefresh, setPricingSnapshotSelection, } from "./modelsdev-pricing.js";
5
- import { buildQuotaCommandDocument } from "./quota-command-format.js";
6
- import { QUOTA_DIALOG_COMMANDS_BY_ID, TOKEN_REPORT_COMMANDS, } from "./quota-dialog-command-specs.js";
7
- import { ALL_WINDOWS_FORMAT_STYLE } from "./quota-format-style.js";
8
- import { collectConcreteEnabledProviderIds, collectQuotaRenderData, collectQuotaStatusLiveProbes, matchesQuotaProviderCurrentSelection, } from "./quota-render-data.js";
9
- import { createQuotaProviderRuntimeContext, createQuotaRuntimeRequestContext, resolveQuotaRuntimeContext, } from "./quota-runtime-context.js";
10
- import { aggregateUsage, resolveSessionTree, SessionNotFoundError, } from "./quota-stats.js";
11
- import { buildQuotaStatsReportDocument } from "./quota-stats-format.js";
12
- import { buildQuotaStatusReportDocument } from "./quota-status.js";
13
- import { commandHeading, messageDocument, renderMarkdownReport, renderPlainTextReport, } from "./report-document.js";
14
- import { getPackageVersion } from "./version.js";
15
- // Token report model names are capped at the length of this reference model.
16
- const TUI_TOKEN_REPORT_MODEL_NAME_WIDTH_REFERENCE = "gemini-3-pro-preview";
17
- const TUI_TOKEN_REPORT_MODEL_MAX_WIDTH = TUI_TOKEN_REPORT_MODEL_NAME_WIDTH_REFERENCE.length;
18
- const TOKEN_REPORT_COMMANDS_BY_ID = (() => {
19
- const map = new Map();
20
- for (const spec of TOKEN_REPORT_COMMANDS) {
21
- map.set(spec.id, spec);
19
+ import { sanitizeDisplayText } from "./display-sanitize.js";
20
+ import { getMaintainerAnnouncementsSummary } from "./maintainer-announcements.js";
21
+ import { getPricingSnapshotSource, getRuntimePricingRefreshStatePath, getRuntimePricingSnapshotPath, maybeRefreshPricingSnapshot, setPricingSnapshotAutoRefresh, setPricingSnapshotSelection, } from "./modelsdev-pricing.js";
22
+ import { getCredentialSourceDiagnostics } from "./opencode-auth.js";
23
+ import { resolveOpenRouterApiKey } from "./openrouter.js";
24
+ import { getQuotaProviderDisplayLabel, getQuotaProviderRuntimeIds } from "./provider-metadata.js";
25
+ import { buildQuotaStatusReportDocument, knownProviderIds, publicPricingMeta, statusPathText, } from "./quota-status.js";
26
+ import { renderPlainTextReport } from "./report-document.js";
27
+ /** `opencode-quota show` lists every row of every provider. */
28
+ const EVERY_ROW = { enabled: true, hidden: [], providerOrder: [], rowOrder: {} };
29
+ const EVERY_ROW_SETTINGS = {
30
+ labels: {},
31
+ window: {},
32
+ surfaces: { sidebar: EVERY_ROW, collapsed: EVERY_ROW, statusLine: EVERY_ROW, toast: EVERY_ROW },
33
+ };
34
+ /**
35
+ * The quota lines `opencode-quota show` prints, in the snapshot's words: a line per row (with
36
+ * "runs out in …" when the quota runs out before its reset), a line per provider problem, then the session's
37
+ * tokens when the snapshot has them.
38
+ */
39
+ export function quotaReportLines(snapshot, nowMs) {
40
+ const words = snapshot.words ?? DEFAULT_WORDS;
41
+ const groups = visibleGroups(snapshot, EVERY_ROW_SETTINGS, "toast", words);
42
+ const sessionTokens = snapshot.sessionTokens ? { sessionTokens: snapshot.sessionTokens } : {};
43
+ return plainLines({ groups, words, nowMs, runsOut: true, ...sessionTokens }).map(sanitizeDisplayText);
44
+ }
45
+ /**
46
+ * Uses the pricing settings from now on: the price list (`source`) and how many days old it
47
+ * may get before a refresh. Applied before any provider check, as local estimates use prices.
48
+ */
49
+ export function applyPricingSettings(pricing) {
50
+ setPricingSnapshotAutoRefresh(pricing.autoRefreshDays);
51
+ setPricingSnapshotSelection(pricing.source);
52
+ }
53
+ /** Starts a models.dev price refresh when due and waits for it at most 0.75 s. */
54
+ export async function kickPricingRefresh(params) {
55
+ try {
56
+ const refresh = maybeRefreshPricingSnapshot(params).catch(() => undefined);
57
+ await Promise.race([refresh, new Promise((resolve) => setTimeout(resolve, 750))]);
58
+ }
59
+ catch {
60
+ // A refresh that fails to start keeps the current price list.
22
61
  }
23
- return map;
24
- })();
25
- function isTokenReportCommand(cmd) {
26
- return TOKEN_REPORT_COMMANDS_BY_ID.has(cmd);
27
62
  }
28
- function plainTextReport(document) {
29
- return { document, output: renderPlainTextReport(document) };
63
+ /**
64
+ * A fresh check of every enabled and available provider (or only `providerId`), through a
65
+ * store of its own that keeps nothing: the same providers, rows, errors and debug details the
66
+ * plugin's store would hold.
67
+ */
68
+ export async function checkProviders(host, providerId) {
69
+ const store = createQuotaStore({ source: () => loadProviderSource(host), file: null });
70
+ try {
71
+ const providerIds = providerId ? [providerId] : undefined;
72
+ const snapshot = await store.refresh({ reason: "manual", providerIds });
73
+ const providers = snapshot.providers.filter((provider) => !providerId || provider.providerId === providerId);
74
+ return { ...snapshot, providers };
75
+ }
76
+ finally {
77
+ await store.dispose();
78
+ }
30
79
  }
31
- function describeQuotaCommandCurrentSelection(params) {
32
- if (isCursorProviderId(params.currentProviderID)) {
33
- return `current provider: ${params.currentProviderID}`;
80
+ async function isAvailable(provider, ctx) {
81
+ try {
82
+ return await provider.isAvailable(ctx);
34
83
  }
35
- if (params.currentModel) {
36
- return `current model: ${params.currentModel}`;
84
+ catch {
85
+ return false;
37
86
  }
38
- return "current session";
39
87
  }
40
- function buildQuotaCommandUnavailableMessage(result) {
41
- const selection = result.selection;
42
- if (!selection) {
43
- return "Quota unavailable\n\nNo enabled quota providers are configured.\n\nRun /quota_status for diagnostics.";
88
+ /**
89
+ * Where an API-key provider (and Cursor) looked for its key, from local reads only, with the
90
+ * same details its own check writes: whether a key is set, its source, and the files checked.
91
+ * Nothing for a provider without an API key.
92
+ */
93
+ async function apiKeySetupDetails(providerId) {
94
+ if (Object.hasOwn(API_KEY_VENDORS, providerId)) {
95
+ const vendor = API_KEY_VENDORS[providerId];
96
+ return simpleApiKeyStatusDetails(await getApiKeyDiagnostics(vendor));
97
+ }
98
+ if (Object.hasOwn(API_KEY_LOGIN_VENDORS, providerId)) {
99
+ const vendor = API_KEY_LOGIN_VENDORS[providerId];
100
+ return apiKeyStatusDetails(await getApiKeyLoginDiagnostics(vendor));
44
101
  }
45
- if (selection.filteringByCurrentSelection && selection.filtered.length === 0) {
46
- const detail = describeQuotaCommandCurrentSelection({
47
- currentModel: selection.currentModel,
48
- currentProviderID: selection.currentProviderID,
102
+ if (providerId === "openrouter") {
103
+ const resolved = await resolveOpenRouterApiKey();
104
+ return simpleApiKeyStatusDetails({
105
+ configured: Boolean(resolved.key),
106
+ source: resolved.source,
107
+ checkedPaths: resolved.checkedPaths,
108
+ credentialDatabasePaths: resolved.credentialDatabasePaths,
49
109
  });
50
- return `Quota unavailable\n\nNo enabled quota providers matched the ${detail}.\n\nRun /quota_status for diagnostics.`;
51
110
  }
52
- const availableIds = result.availability
53
- .filter((item) => item.ok)
54
- .map((item) => item.provider.id);
55
- if (availableIds.length === 0) {
56
- const scopedDetail = selection.filteringByCurrentSelection
57
- ? ` for the ${describeQuotaCommandCurrentSelection({
58
- currentModel: selection.currentModel,
59
- currentProviderID: selection.currentProviderID,
60
- })}`
61
- : "";
62
- return (`Quota unavailable\n\nNo provider data available${scopedDetail}. ` +
63
- "Make sure you are logged in to a supported provider (Copilot, OpenAI, etc.).\n\n" +
64
- "Run /quota_status for diagnostics.");
111
+ if (providerId === "cursor") {
112
+ const auth = await inspectCursorAuthPresence();
113
+ return [
114
+ { key: "auth_state", value: auth.state },
115
+ { key: "auth_selected_path", value: auth.selectedPath ?? "(none)" },
116
+ { key: "auth_present_paths", value: auth.presentPaths.join(" | ") || "(none)" },
117
+ { key: "auth_candidate_paths", value: auth.candidatePaths.join(" | ") || "(none)" },
118
+ ];
65
119
  }
66
- return (`Quota unavailable\n\nNo provider data available for detected providers (${availableIds.join(", ")}). ` +
67
- "This may be a temporary API error.\n\n" +
68
- "Run /quota_status for diagnostics.");
120
+ return [];
69
121
  }
70
- async function fetchQuotaCommandData(params) {
71
- const { runtime } = params;
72
- const request = createQuotaRuntimeRequestContext(runtime);
73
- const quotaResult = await collectQuotaRenderData({
74
- client: runtime.client,
75
- resolveRuntimeProviderIds: runtime.resolveRuntimeProviderIds,
76
- config: runtime.config,
77
- configMeta: runtime.configMeta,
78
- request,
79
- workspaceRoot: runtime.roots.workspaceRoot,
80
- surfaceExplicitProviderIssues: false,
81
- formatStyle: ALL_WINDOWS_FORMAT_STYLE,
82
- providers: runtime.providers,
83
- });
84
- if (runtime.config.showSessionTokens && request.sessionID) {
85
- params.setLastSessionTokenError?.(quotaResult.sessionTokenError);
122
+ /**
123
+ * What an unavailable provider's setup looks like, from local checks only: whether OpenCode
124
+ * lists the provider and, for an API-key provider, where its key was looked for. No quota
125
+ * request is made.
126
+ */
127
+ async function localSetupDetails(providerId, ctx) {
128
+ const details = [];
129
+ const runtimeIds = getQuotaProviderRuntimeIds(providerId);
130
+ if (runtimeIds.length > 0) {
131
+ let listed;
132
+ try {
133
+ const openCodeIds = await ctx.resolveRuntimeProviderIds();
134
+ const found = runtimeIds.filter((id) => openCodeIds.has(id));
135
+ listed =
136
+ found.length > 0 ? `yes found=${found.join(",")}` : `no looked_for=${runtimeIds.join(",")}`;
137
+ }
138
+ catch {
139
+ listed = "unreadable";
140
+ }
141
+ details.push({ key: "opencode_provider", value: listed });
86
142
  }
87
- return quotaResult;
88
- }
89
- async function kickPricingRefresh(params) {
90
143
  try {
91
- const refreshPromise = maybeRefreshPricingSnapshot({
92
- reason: params.reason,
93
- snapshotSelection: params.snapshotSelection,
94
- });
95
- const guardedRefreshPromise = refreshPromise.catch(() => undefined);
96
- if (!params.maxWaitMs || params.maxWaitMs <= 0) {
97
- void guardedRefreshPromise;
98
- return;
99
- }
100
- await Promise.race([
101
- guardedRefreshPromise,
102
- new Promise((resolve) => {
103
- setTimeout(resolve, params.maxWaitMs);
104
- }),
105
- ]);
144
+ details.push(...(await apiKeySetupDetails(providerId)));
106
145
  }
107
- catch (error) {
108
- await params.log?.("Pricing refresh failed", {
109
- reason: params.reason,
110
- error: error instanceof Error ? error.message : String(error),
111
- });
146
+ catch {
147
+ details.push({ key: "api_key_configured", value: "unreadable" });
112
148
  }
149
+ return details;
113
150
  }
114
- async function buildQuotaReport(params) {
115
- const result = await aggregateUsage({
116
- sinceMs: params.sinceMs,
117
- untilMs: params.untilMs,
118
- sessionID: params.filterSessionID,
119
- sessionIDs: params.filterSessionIDs,
120
- });
121
- const document = buildQuotaStatsReportDocument({
122
- title: params.title,
123
- titleDetail: params.titleDetail,
124
- result,
125
- topModels: params.topModels,
126
- topSessions: params.topSessions,
127
- focusSessionID: params.sessionID,
128
- sessionOnly: params.sessionOnly,
129
- reportKind: params.reportKind,
130
- sessionTree: params.sessionTree,
131
- generatedAtMs: params.generatedAtMs,
132
- tableOptions: {
133
- compactHeaders: true,
134
- modelNameMaxWidth: TUI_TOKEN_REPORT_MODEL_MAX_WIDTH,
135
- },
136
- });
137
- return { document, output: renderMarkdownReport(document) };
138
- }
139
- export function summarizeQuotaStatusLiveProbes(probes) {
140
- return probes.map((probe) => ({
141
- id: probe.providerId,
142
- ok: probe.result.attempted && probe.result.errors.length === 0,
151
+ /**
152
+ * A fresh check of every known provider (or only `providerId`) for /quota_status. The plugin's
153
+ * source decides which providers are enabled and available; those are checked through a store
154
+ * of its own that keeps nothing, as the plugin's store would check them. An unavailable
155
+ * provider shows its local setup details instead, and one turned off in the settings is never
156
+ * fetched.
157
+ */
158
+ async function checkKnownProviders(host, providerId) {
159
+ const source = await loadProviderSource(host);
160
+ const sourceIds = new Set(source.providers.map((provider) => provider.id));
161
+ const ctx = providerContext(host);
162
+ const { enabledProviders } = ctx.config;
163
+ const turnedOn = (id) => enabledProviders === "auto" || enabledProviders.includes(id);
164
+ const known = getProviders().filter((provider) => !providerId || provider.id === providerId);
165
+ const checks = await Promise.all(known.map(async (provider) => {
166
+ if (sourceIds.has(provider.id))
167
+ return { provider, enabled: true, available: true };
168
+ if (turnedOn(provider.id))
169
+ return { provider, enabled: true, available: false };
170
+ return { provider, enabled: false, available: await isAvailable(provider, ctx) };
143
171
  }));
172
+ const setupSnapshots = checks
173
+ .filter((check) => !check.available && turnedOn(check.provider.id))
174
+ .map(async ({ provider }) => ({
175
+ providerId: provider.id,
176
+ label: getQuotaProviderDisplayLabel(provider.id),
177
+ rows: [],
178
+ refreshing: false,
179
+ debug: await localSetupDetails(provider.id, ctx),
180
+ }));
181
+ const store = createQuotaStore({ source: async () => source, file: null });
182
+ try {
183
+ const knownIds = new Set(known.map((provider) => provider.id));
184
+ const snapshot = await store.refresh({ reason: "manual", providerIds: [...knownIds] });
185
+ const checked = snapshot.providers.filter((provider) => knownIds.has(provider.providerId));
186
+ return { checks, snapshots: [...checked, ...(await Promise.all(setupSnapshots))] };
187
+ }
188
+ finally {
189
+ await store.dispose();
190
+ }
144
191
  }
145
- export async function buildStatusReportData(params) {
146
- const runtimeConfig = params.runtime.config;
147
- if (!runtimeConfig.enabled) {
148
- return { document: null, output: null, payload: null, hasComparableProviderData: false };
192
+ /** The last 30 days of usage, for the models without a price; null when it can't be read. */
193
+ async function readRecentUsage(nowMs) {
194
+ try {
195
+ return await usageReport({ range: "30d" }, nowMs);
149
196
  }
197
+ catch {
198
+ return null;
199
+ }
200
+ }
201
+ export async function buildStatusReportData(params) {
202
+ const { host } = params;
203
+ const loaded = host.settings();
204
+ const { settings } = loaded;
150
205
  await kickPricingRefresh({
151
206
  reason: "status",
152
- maxWaitMs: 750,
153
- snapshotSelection: runtimeConfig.pricingSnapshot.source,
154
- log: params.log,
207
+ snapshotSelection: settings.providers.pricing.source,
155
208
  });
156
- const currentSession = params.runtime.session.sessionMeta ?? {};
157
- const currentModel = currentSession.modelID;
158
- const currentProviderID = currentSession.providerID;
209
+ const currentModel = params.sessionModel?.id;
210
+ const currentProviderID = params.sessionModel?.providerID;
159
211
  const sessionModelLookup = !params.sessionID
160
212
  ? "no_session"
161
213
  : currentModel
162
214
  ? "ok"
163
215
  : "not_found";
164
- const isAutoMode = runtimeConfig.enabledProviders === "auto";
165
- const providers = params.providerFilterId
166
- ? params.runtime.providers.filter((provider) => provider.id === params.providerFilterId)
167
- : params.runtime.providers;
168
- const providerContext = createQuotaProviderRuntimeContext({
169
- ...params.runtime,
170
- workspaceRoot: params.runtime.roots.workspaceRoot,
171
- });
172
- const availability = await Promise.all(providers.map(async (p) => {
173
- let ok = false;
174
- try {
175
- ok = await p.isAvailable(providerContext);
176
- }
177
- catch {
178
- ok = false;
179
- }
180
- return {
181
- id: p.id,
182
- enabled: isAutoMode ? ok : runtimeConfig.enabledProviders.includes(p.id),
183
- available: ok,
184
- matchesCurrentModel: currentModel || isCursorProviderId(currentProviderID)
185
- ? matchesQuotaProviderCurrentSelection({
186
- provider: p,
187
- currentModel,
188
- currentProviderID,
189
- enabledProviders: runtimeConfig.enabledProviders,
190
- quotaProviders: runtimeConfig.quotaProviders,
191
- })
192
- : undefined,
193
- };
216
+ const { enabledProviders, automaticDiscovery, quotaProviders } = providerContext(host, loaded).config;
217
+ const [{ checks, snapshots }, usage] = await Promise.all([
218
+ checkKnownProviders(host, params.providerFilterId),
219
+ readRecentUsage(params.generatedAtMs),
220
+ ]);
221
+ const availability = checks.map(({ provider, enabled, available }) => ({
222
+ id: provider.id,
223
+ enabled,
224
+ available,
225
+ matchesCurrentModel: currentModel || isCursorProviderId(currentProviderID)
226
+ ? matchesQuotaProviderCurrentSelection({
227
+ provider,
228
+ currentModel,
229
+ currentProviderID,
230
+ enabledProviders,
231
+ automaticDiscovery,
232
+ quotaProviders,
233
+ })
234
+ : undefined,
194
235
  }));
195
- if (isAutoMode) {
196
- await params.onDetectedProviderIds?.(availability.filter((item) => item.available).map((item) => item.id));
197
- }
198
- // Status diagnostics belong to provider results, including missing or disabled
199
- // providers. Provider fetch implementations must keep unconfigured cases local.
200
- const liveProbeProviders = providers;
201
- let providerLiveProbes = [];
202
- if (liveProbeProviders.length > 0) {
203
- try {
204
- providerLiveProbes = await collectQuotaStatusLiveProbes({
205
- client: params.runtime.client,
206
- resolveRuntimeProviderIds: params.runtime.resolveRuntimeProviderIds,
207
- config: runtimeConfig,
208
- configMeta: params.runtime.configMeta,
209
- request: createQuotaRuntimeRequestContext(params.runtime),
210
- workspaceRoot: params.runtime.roots.workspaceRoot,
211
- providers: liveProbeProviders,
212
- });
213
- }
214
- catch (error) {
215
- await params.log?.("Failed to collect /quota_status live probes", {
216
- providers: liveProbeProviders.map((provider) => provider.id),
217
- error: error instanceof Error ? error.message : String(error),
218
- });
219
- }
220
- }
236
+ await params.onDetectedProviderIds?.(availability.filter((item) => item.enabled && item.available).map((item) => item.id));
237
+ const checkedIds = new Set(availability.filter((item) => item.enabled && item.available).map((item) => item.id));
238
+ const checked = snapshots.filter((provider) => checkedIds.has(provider.providerId));
221
239
  const announcementProviderIds = availability
222
240
  .filter((item) => item.enabled && item.available)
223
241
  .map((item) => item.id);
@@ -225,362 +243,84 @@ export async function buildStatusReportData(params) {
225
243
  enabledProviders: announcementProviderIds,
226
244
  });
227
245
  const document = await buildQuotaStatusReportDocument({
228
- runtimeRoots: params.runtime.roots,
229
- configSource: params.runtime.configMeta.source,
230
- configPaths: params.runtime.configMeta.paths,
231
- globalConfigPaths: params.runtime.configMeta.globalConfigPaths,
232
- workspaceConfigPaths: params.runtime.configMeta.workspaceConfigPaths,
233
- settingSources: params.runtime.configMeta.settingSources,
234
- configIssues: params.runtime.configMeta.configIssues,
235
- enabledProviders: runtimeConfig.enabledProviders,
236
- anthropicBinaryPath: runtimeConfig.anthropicBinaryPath,
237
- cursorPlan: runtimeConfig.cursorPlan,
238
- cursorIncludedApiUsd: runtimeConfig.cursorIncludedApiUsd,
239
- cursorBillingCycleStartDay: runtimeConfig.cursorBillingCycleStartDay,
240
- opencodeGoWindows: runtimeConfig.opencodeGoWindows,
241
- pricingSnapshotSource: runtimeConfig.pricingSnapshot.source,
242
- onlyCurrentModel: runtimeConfig.onlyCurrentModel,
246
+ origin: params.origin,
247
+ opencode: params.opencode,
248
+ settings: loaded,
249
+ conversion: loaded.conversion ?? params.conversion,
250
+ workspaceRoot: host.workspaceRoot,
251
+ enabledProviders: settings.providers.off.length === 0
252
+ ? "auto"
253
+ : PROVIDER_IDS.filter((id) => !settings.providers.off.includes(id)),
254
+ offProviders: settings.providers.off,
255
+ quotaProviders: settings.providers.custom,
256
+ pricingSnapshotSource: settings.providers.pricing.source,
243
257
  currentModel,
258
+ currentProviderID,
244
259
  sessionModelLookup,
245
260
  providerAvailability: availability,
246
- providerLiveProbes,
247
- quotaProviders: runtimeConfig.quotaProviders,
248
- sessionTokenError: params.lastSessionTokenError,
261
+ providers: snapshots,
262
+ credentialSource: getCredentialSourceDiagnostics(),
249
263
  maintainerAnnouncements: {
250
- config: runtimeConfig.maintainerAnnouncements,
251
264
  summary: maintainerAnnouncementsSummary,
252
265
  },
266
+ usage,
253
267
  generatedAtMs: params.generatedAtMs,
254
268
  });
255
- const version = (await getPackageVersion()) ?? "unknown";
256
- const pricingMeta = getPricingSnapshotMeta();
257
- const activePricingSource = getPricingSnapshotSource();
269
+ // The payload follows the report's closed vocabulary: known ids, fixed words, known paths.
270
+ const pricingMeta = publicPricingMeta();
258
271
  const payload = {
259
- version,
272
+ version: "6",
260
273
  generatedAt: new Date(params.generatedAtMs).toISOString(),
261
274
  config: {
262
- configSource: params.runtime.configMeta.source,
263
- configPaths: params.runtime.configMeta.paths,
264
- globalConfigPaths: params.runtime.configMeta.globalConfigPaths,
265
- workspaceConfigPaths: params.runtime.configMeta.workspaceConfigPaths,
266
- enabledProviders: runtimeConfig.enabledProviders,
267
- onlyCurrentModel: runtimeConfig.onlyCurrentModel,
268
- pricingSnapshotSource: runtimeConfig.pricingSnapshot.source,
275
+ settingsPath: statusPathText(loaded.path),
276
+ settingsFileExists: loaded.exists,
277
+ enabledProviders: knownProviderIds(settings.providers.off.length === 0
278
+ ? "auto"
279
+ : PROVIDER_IDS.filter((id) => !settings.providers.off.includes(id))),
280
+ onlyCurrentModel: settings.words.onlyCurrentModel,
281
+ pricingSnapshotSource: settings.providers.pricing.source,
269
282
  },
270
283
  providers: availability,
271
284
  pricing: {
272
- selection: runtimeConfig.pricingSnapshot.source,
273
- activeSource: activePricingSource,
285
+ selection: settings.providers.pricing.source,
286
+ activeSource: getPricingSnapshotSource(),
274
287
  snapshot: {
275
288
  source: pricingMeta.source,
276
- generatedAt: pricingMeta.generatedAt > 0 ? new Date(pricingMeta.generatedAt).toISOString() : null,
289
+ // "(none)" and "(invalid date)" are no time.
290
+ generatedAt: /^\d/u.test(pricingMeta.generatedAt) ? pricingMeta.generatedAt : null,
277
291
  units: pricingMeta.units,
278
292
  },
279
- snapshotPath: getRuntimePricingSnapshotPath(),
280
- refreshStatePath: getRuntimePricingRefreshStatePath(),
293
+ snapshotPath: statusPathText(getRuntimePricingSnapshotPath()),
294
+ refreshStatePath: statusPathText(getRuntimePricingRefreshStatePath()),
281
295
  },
282
- liveProbes: summarizeQuotaStatusLiveProbes(providerLiveProbes),
296
+ liveProbes: checked.map((provider) => ({
297
+ id: provider.providerId,
298
+ ok: provider.error === undefined,
299
+ })),
283
300
  };
284
301
  return {
285
- document,
286
302
  output: renderPlainTextReport(document),
287
303
  payload,
288
- hasComparableProviderData: providerLiveProbes.some((probe) => probe.result.entries.length > 0),
304
+ hasComparableProviderData: checked.some((provider) => provider.rows.length > 0),
289
305
  };
290
306
  }
291
- function formatIsoTimestamp(timestampMs) {
292
- return typeof timestampMs === "number" && Number.isFinite(timestampMs) && timestampMs > 0
293
- ? new Date(timestampMs).toISOString()
294
- : "(none)";
295
- }
296
- function buildPricingRefreshCommandReport(params) {
297
- const meta = getPricingSnapshotMeta();
298
- const activeSource = getPricingSnapshotSource();
299
- const resultLabel = params.result.reason ??
300
- params.result.state.lastResult ??
301
- (params.result.updated ? "success" : "unknown");
302
- const refreshRows = [
303
- { key: "attempted", value: params.result.attempted ? "true" : "false" },
304
- { key: "result", value: resultLabel },
305
- { key: "runtime_snapshot_persisted", value: params.result.updated ? "true" : "false" },
306
- ];
307
- if (params.result.error) {
308
- refreshRows.push({ key: "error", value: params.result.error });
309
- }
310
- const snapshotRows = [
311
- { key: "selection", value: `configured=${params.configuredSelection} active=${activeSource}` },
312
- {
313
- key: "active_snapshot",
314
- value: `source=${meta.source} generated_at=${formatIsoTimestamp(meta.generatedAt)} units=${meta.units}`,
315
- },
316
- {
317
- key: "runtime_paths",
318
- value: `snapshot=${getRuntimePricingSnapshotPath()} refresh_state=${getRuntimePricingRefreshStatePath()}`,
319
- },
320
- ];
321
- if (params.configuredSelection === "bundled" && params.result.updated) {
322
- snapshotRows.push({
323
- key: "selection_note",
324
- value: "runtime snapshot refreshed locally, but active reports remain pinned to bundled pricing",
325
- });
326
- }
327
- return plainTextReport({
328
- heading: commandHeading({
329
- title: "Pricing Refresh (/pricing_refresh)",
330
- generatedAtMs: params.generatedAtMs,
331
- }),
332
- sections: [
333
- { id: "refresh", title: "refresh:", blocks: [{ kind: "kv", rows: refreshRows }] },
334
- {
335
- id: "pricing_snapshot",
336
- title: "pricing_snapshot:",
337
- blocks: [{ kind: "kv", rows: snapshotRows }],
338
- },
339
- ],
340
- });
341
- }
342
- function buildTokenReportUnavailableReport(params) {
343
- return plainTextReport({
344
- heading: commandHeading({
345
- title: `Token report unavailable (${params.command})`,
346
- detail: "Token report unavailable",
347
- generatedAtMs: params.generatedAtMs,
348
- }),
349
- sections: [
350
- {
351
- id: "session_lookup_error",
352
- title: "session_lookup_error:",
353
- blocks: [
354
- {
355
- kind: "kv",
356
- rows: [
357
- { key: "session_id", value: params.error.sessionID },
358
- { key: "error", value: params.error.message },
359
- { key: "checked_path", value: params.error.checkedPath },
360
- ],
361
- },
362
- ],
363
- },
364
- ],
365
- });
366
- }
367
- async function buildQuotaAnnouncementsCommandReport(runtime) {
368
- let activeAnnouncements = [];
369
- if (runtime.config.enabled && runtime.config.maintainerAnnouncements.enabled) {
370
- const providerIds = await collectConcreteEnabledProviderIds({
371
- providers: runtime.providers,
372
- ctx: createQuotaProviderRuntimeContext({
373
- ...runtime,
374
- workspaceRoot: runtime.roots.workspaceRoot,
375
- }),
376
- enabledProviders: runtime.config.enabledProviders,
377
- });
378
- const summary = getMaintainerAnnouncementsSummary({
379
- announcements: BUNDLED_MAINTAINER_ANNOUNCEMENTS,
380
- enabledProviders: providerIds,
381
- });
382
- activeAnnouncements = summary.activeAnnouncements;
383
- }
384
- const lines = [];
385
- if (activeAnnouncements.length === 0) {
386
- lines.push("No current announcements.");
387
- }
388
- for (const evaluation of activeAnnouncements) {
389
- lines.push(`- ${evaluation.announcement.message}`);
390
- if (evaluation.announcement.url) {
391
- lines.push(` ${evaluation.announcement.url}`);
392
- }
393
- }
394
- return plainTextReport({
395
- heading: { line: "Maintainer announcements" },
396
- sections: [{ id: "announcements", blocks: [{ kind: "lines", lines }] }],
397
- });
398
- }
399
- function outputResult(command, report) {
400
- const spec = QUOTA_DIALOG_COMMANDS_BY_ID.get(command);
401
- return {
402
- state: "output",
403
- command,
404
- title: spec.title,
405
- output: report.output,
406
- document: report.document,
407
- dialogSize: spec.dialogSize,
408
- };
409
- }
410
- async function buildTokenReportCommandReport(params) {
411
- const spec = TOKEN_REPORT_COMMANDS_BY_ID.get(params.command);
412
- const sessionID = params.sessionID;
413
- const untilMs = params.generatedAtMs;
414
- await kickPricingRefresh({
415
- reason: "tokens",
416
- maxWaitMs: 750,
417
- snapshotSelection: params.runtime.config.pricingSnapshot.source,
418
- log: params.log,
419
- });
420
- if (!sessionID && (spec.kind === "session" || spec.kind === "session_tree")) {
421
- return buildTokenReportUnavailableReport({
422
- command: spec.template,
423
- generatedAtMs: params.generatedAtMs,
424
- error: new SessionNotFoundError("(none)", "(none)"),
425
- });
426
- }
427
- try {
428
- if (spec.kind === "between") {
429
- const parsed = parseQuotaBetweenArgs(params.arguments);
430
- if (!parsed.ok) {
431
- return plainTextReport(messageDocument(`Invalid arguments for /${spec.id}\n\n${parsed.error}\n\nExpected: /${spec.id} YYYY-MM-DD YYYY-MM-DD\nExample: /${spec.id} 2026-01-01 2026-01-15`));
432
- }
433
- const sinceMs = startOfLocalDayMs(parsed.startYmd);
434
- const rangeUntilMs = startOfNextLocalDayMs(parsed.endYmd);
435
- return await buildQuotaReport({
436
- title: spec.titleForRange(parsed.startYmd, parsed.endYmd),
437
- titleDetail: `${formatYmd(parsed.startYmd)} .. ${formatYmd(parsed.endYmd)}`,
438
- sinceMs,
439
- untilMs: rangeUntilMs,
440
- sessionID: sessionID ?? "",
441
- generatedAtMs: params.generatedAtMs,
442
- });
443
- }
444
- let sinceMs;
445
- let filterSessionID;
446
- let filterSessionIDs;
447
- let sessionOnly;
448
- let topModels;
449
- let topSessions;
450
- let reportKind;
451
- let sessionTree;
452
- switch (spec.kind) {
453
- case "rolling":
454
- sinceMs = untilMs - spec.windowMs;
455
- break;
456
- case "today": {
457
- const now = new Date(untilMs);
458
- const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate());
459
- sinceMs = startOfDay.getTime();
460
- break;
461
- }
462
- case "session":
463
- filterSessionID = sessionID;
464
- sessionOnly = true;
465
- reportKind = "session";
466
- break;
467
- case "session_tree": {
468
- const nodes = await resolveSessionTree(sessionID);
469
- filterSessionIDs = nodes.map((node) => node.sessionID);
470
- reportKind = "session_tree";
471
- sessionTree = { rootSessionID: sessionID, nodes };
472
- break;
473
- }
474
- case "all":
475
- topModels = spec.topModels;
476
- topSessions = spec.topSessions;
477
- break;
478
- }
479
- return await buildQuotaReport({
480
- title: spec.title,
481
- sinceMs,
482
- untilMs: spec.kind === "rolling" || spec.kind === "today" ? untilMs : undefined,
483
- sessionID: sessionID ?? "",
484
- filterSessionID,
485
- filterSessionIDs,
486
- sessionOnly,
487
- reportKind,
488
- sessionTree,
489
- topModels,
490
- topSessions,
491
- generatedAtMs: params.generatedAtMs,
492
- });
493
- }
494
- catch (err) {
495
- if (err instanceof SessionNotFoundError) {
496
- return buildTokenReportUnavailableReport({
497
- command: spec.template,
498
- generatedAtMs: params.generatedAtMs,
499
- error: err,
500
- });
501
- }
502
- throw err;
503
- }
504
- }
307
+ /** The /quota_status report as text. */
505
308
  export async function buildQuotaDialogCommandOutput(params) {
506
309
  const generatedAtMs = params.generatedAtMs ?? Date.now();
507
- const runtime = await resolveQuotaRuntimeContext({
508
- client: params.client,
509
- roots: params.roots,
310
+ applyPricingSettings(params.host.settings().settings.providers.pricing);
311
+ const sessionModel = params.sessionID && params.resolveSessionModel
312
+ ? await params.resolveSessionModel(params.sessionID)
313
+ : undefined;
314
+ const data = await buildStatusReportData({
315
+ host: params.host,
316
+ origin: params.origin,
317
+ opencode: params.opencode,
510
318
  sessionID: params.sessionID,
511
- sessionMeta: params.sessionMeta,
512
- resolveSessionMeta: params.resolveSessionMeta,
513
- includeSessionMeta: (config) => config.onlyCurrentModel || params.command === "quota_status",
319
+ sessionModel,
320
+ conversion: params.conversion,
321
+ generatedAtMs,
322
+ onDetectedProviderIds: params.onDetectedProviderIds,
514
323
  });
515
- setPricingSnapshotAutoRefresh(runtime.config.pricingSnapshot.autoRefresh);
516
- setPricingSnapshotSelection(runtime.config.pricingSnapshot.source);
517
- if (!runtime.config.enabled && params.command !== "quota_announcements") {
518
- return { state: "noop", command: params.command, reason: "disabled" };
519
- }
520
- if (params.command === "quota") {
521
- const reportData = await fetchQuotaCommandData({
522
- runtime,
523
- setLastSessionTokenError: params.setLastSessionTokenError,
524
- });
525
- if (!reportData.data ||
526
- (reportData.selection?.filteringByCurrentSelection &&
527
- reportData.selection.filtered.length === 0)) {
528
- return outputResult(params.command, plainTextReport(messageDocument(buildQuotaCommandUnavailableMessage(reportData))));
529
- }
530
- return outputResult(params.command, plainTextReport(buildQuotaCommandDocument({
531
- ...reportData.data,
532
- generatedAtMs,
533
- percentDisplayMode: runtime.config.percentDisplayMode,
534
- percentLabelStyle: runtime.config.percentLabelStyle,
535
- accountingDetail: runtime.config.accountingDetail,
536
- resetTimeSpaced: runtime.config.resetTimeSpaced,
537
- })));
538
- }
539
- if (params.command === "quota_status") {
540
- const data = await buildStatusReportData({
541
- runtime,
542
- sessionID: params.sessionID,
543
- generatedAtMs,
544
- lastSessionTokenError: params.lastSessionTokenError,
545
- log: params.log,
546
- onDetectedProviderIds: params.onDetectedProviderIds,
547
- });
548
- return data.document && data.output
549
- ? outputResult(params.command, { document: data.document, output: data.output })
550
- : { state: "noop", command: params.command, reason: "disabled" };
551
- }
552
- if (params.command === "quota_announcements") {
553
- if ((params.arguments ?? "").trim()) {
554
- return outputResult(params.command, plainTextReport(messageDocument("Invalid arguments for /quota_announcements\n\nThis command does not accept arguments.\n\nUsage: /quota_announcements")));
555
- }
556
- return outputResult(params.command, await buildQuotaAnnouncementsCommandReport(runtime));
557
- }
558
- if (params.command === "pricing_refresh") {
559
- if ((params.arguments ?? "").trim()) {
560
- return outputResult(params.command, plainTextReport(messageDocument("Invalid arguments for /pricing_refresh\n\nThis command does not accept arguments.\n\nUsage:\n/pricing_refresh")));
561
- }
562
- const result = await maybeRefreshPricingSnapshot({
563
- reason: "manual",
564
- force: true,
565
- snapshotSelection: runtime.config.pricingSnapshot.source,
566
- allowRefreshWhenSelectionBundled: true,
567
- });
568
- return outputResult(params.command, buildPricingRefreshCommandReport({
569
- result,
570
- configuredSelection: runtime.config.pricingSnapshot.source,
571
- generatedAtMs,
572
- }));
573
- }
574
- if (isTokenReportCommand(params.command)) {
575
- return outputResult(params.command, await buildTokenReportCommandReport({
576
- command: params.command,
577
- arguments: params.arguments,
578
- sessionID: params.sessionID,
579
- generatedAtMs,
580
- runtime,
581
- log: params.log,
582
- }));
583
- }
584
- return { state: "noop", command: params.command, reason: "disabled" };
324
+ return { output: data.output };
585
325
  }
586
326
  //# sourceMappingURL=quota-dialog-commands.js.map