@slkiser/opencode-quota 5.0.2 → 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 +32 -46
  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/data/modelsdev-pricing.min.json +248 -22
  66. package/dist/index.d.ts +2 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/lib/accounting-format.d.ts +2 -52
  70. package/dist/lib/accounting-format.d.ts.map +1 -1
  71. package/dist/lib/accounting-format.js +6 -255
  72. package/dist/lib/accounting-format.js.map +1 -1
  73. package/dist/lib/alibaba-auth.d.ts +14 -21
  74. package/dist/lib/alibaba-auth.d.ts.map +1 -1
  75. package/dist/lib/alibaba-auth.js +36 -149
  76. package/dist/lib/alibaba-auth.js.map +1 -1
  77. package/dist/lib/alibaba-coding-plan-local-quota.d.ts +1 -6
  78. package/dist/lib/alibaba-coding-plan-local-quota.d.ts.map +1 -1
  79. package/dist/lib/alibaba-coding-plan-local-quota.js +1 -1
  80. package/dist/lib/alibaba-coding-plan-local-quota.js.map +1 -1
  81. package/dist/lib/alibaba-token-plan.d.ts +18 -27
  82. package/dist/lib/alibaba-token-plan.d.ts.map +1 -1
  83. package/dist/lib/alibaba-token-plan.js +121 -285
  84. package/dist/lib/alibaba-token-plan.js.map +1 -1
  85. package/dist/lib/anthropic-auth.d.ts +3 -5
  86. package/dist/lib/anthropic-auth.d.ts.map +1 -1
  87. package/dist/lib/anthropic-auth.js +6 -9
  88. package/dist/lib/anthropic-auth.js.map +1 -1
  89. package/dist/lib/anthropic.d.ts +12 -37
  90. package/dist/lib/anthropic.d.ts.map +1 -1
  91. package/dist/lib/anthropic.js +348 -698
  92. package/dist/lib/anthropic.js.map +1 -1
  93. package/dist/lib/api-key-resolver.d.ts +165 -192
  94. package/dist/lib/api-key-resolver.d.ts.map +1 -1
  95. package/dist/lib/api-key-resolver.js +208 -234
  96. package/dist/lib/api-key-resolver.js.map +1 -1
  97. package/dist/lib/atomic-json.d.ts +4 -1
  98. package/dist/lib/atomic-json.d.ts.map +1 -1
  99. package/dist/lib/atomic-json.js +2 -3
  100. package/dist/lib/atomic-json.js.map +1 -1
  101. package/dist/lib/calendar-date.d.ts +15 -0
  102. package/dist/lib/calendar-date.d.ts.map +1 -0
  103. package/dist/lib/calendar-date.js +21 -0
  104. package/dist/lib/calendar-date.js.map +1 -0
  105. package/dist/lib/chutes.d.ts +0 -1
  106. package/dist/lib/chutes.d.ts.map +1 -1
  107. package/dist/lib/chutes.js +2 -4
  108. package/dist/lib/chutes.js.map +1 -1
  109. package/dist/lib/cli-reports.d.ts +15 -11
  110. package/dist/lib/cli-reports.d.ts.map +1 -1
  111. package/dist/lib/cli-reports.js +34 -107
  112. package/dist/lib/cli-reports.js.map +1 -1
  113. package/dist/lib/cli-show.d.ts +9 -22
  114. package/dist/lib/cli-show.d.ts.map +1 -1
  115. package/dist/lib/cli-show.js +104 -75
  116. package/dist/lib/cli-show.js.map +1 -1
  117. package/dist/lib/config-file-utils.d.ts +3 -15
  118. package/dist/lib/config-file-utils.d.ts.map +1 -1
  119. package/dist/lib/config-file-utils.js +4 -63
  120. package/dist/lib/config-file-utils.js.map +1 -1
  121. package/dist/lib/config-write-target.d.ts +4 -7
  122. package/dist/lib/config-write-target.d.ts.map +1 -1
  123. package/dist/lib/config-write-target.js +4 -18
  124. package/dist/lib/config-write-target.js.map +1 -1
  125. package/dist/lib/copilot.d.ts +29 -20
  126. package/dist/lib/copilot.d.ts.map +1 -1
  127. package/dist/lib/copilot.js +392 -649
  128. package/dist/lib/copilot.js.map +1 -1
  129. package/dist/lib/cursor-detection.d.ts +3 -3
  130. package/dist/lib/cursor-detection.d.ts.map +1 -1
  131. package/dist/lib/cursor-detection.js +44 -88
  132. package/dist/lib/cursor-detection.js.map +1 -1
  133. package/dist/lib/cursor-pricing.d.ts +71 -8
  134. package/dist/lib/cursor-pricing.d.ts.map +1 -1
  135. package/dist/lib/cursor-pricing.js +34 -125
  136. package/dist/lib/cursor-pricing.js.map +1 -1
  137. package/dist/lib/cursor-usage.d.ts +6 -4
  138. package/dist/lib/cursor-usage.d.ts.map +1 -1
  139. package/dist/lib/cursor-usage.js +27 -40
  140. package/dist/lib/cursor-usage.js.map +1 -1
  141. package/dist/lib/deepseek.d.ts +9 -17
  142. package/dist/lib/deepseek.d.ts.map +1 -1
  143. package/dist/lib/deepseek.js +24 -54
  144. package/dist/lib/deepseek.js.map +1 -1
  145. package/dist/lib/display-sanitize.d.ts +0 -8
  146. package/dist/lib/display-sanitize.d.ts.map +1 -1
  147. package/dist/lib/display-sanitize.js +0 -139
  148. package/dist/lib/display-sanitize.js.map +1 -1
  149. package/dist/lib/entries.d.ts +13 -239
  150. package/dist/lib/entries.d.ts.map +1 -1
  151. package/dist/lib/entries.js +1 -46
  152. package/dist/lib/entries.js.map +1 -1
  153. package/dist/lib/file-lock.d.ts +23 -0
  154. package/dist/lib/file-lock.d.ts.map +1 -0
  155. package/dist/lib/file-lock.js +122 -0
  156. package/dist/lib/file-lock.js.map +1 -0
  157. package/dist/lib/format-utils.d.ts +2 -82
  158. package/dist/lib/format-utils.d.ts.map +1 -1
  159. package/dist/lib/format-utils.js +2 -191
  160. package/dist/lib/format-utils.js.map +1 -1
  161. package/dist/lib/glm-coding-plan.d.ts +6 -5
  162. package/dist/lib/glm-coding-plan.d.ts.map +1 -1
  163. package/dist/lib/glm-coding-plan.js +19 -1
  164. package/dist/lib/glm-coding-plan.js.map +1 -1
  165. package/dist/lib/google-agy.d.ts +8 -40
  166. package/dist/lib/google-agy.d.ts.map +1 -1
  167. package/dist/lib/google-agy.js +88 -519
  168. package/dist/lib/google-agy.js.map +1 -1
  169. package/dist/lib/google-companion-credentials.d.ts +9 -40
  170. package/dist/lib/google-companion-credentials.d.ts.map +1 -1
  171. package/dist/lib/google-companion-credentials.js +167 -224
  172. package/dist/lib/google-companion-credentials.js.map +1 -1
  173. package/dist/lib/google-gemini-cli.d.ts +5 -38
  174. package/dist/lib/google-gemini-cli.d.ts.map +1 -1
  175. package/dist/lib/google-gemini-cli.js +71 -442
  176. package/dist/lib/google-gemini-cli.js.map +1 -1
  177. package/dist/lib/google-oauth-quota.d.ts +76 -0
  178. package/dist/lib/google-oauth-quota.d.ts.map +1 -0
  179. package/dist/lib/google-oauth-quota.js +297 -0
  180. package/dist/lib/google-oauth-quota.js.map +1 -0
  181. package/dist/lib/google-token-cache.d.ts +3 -5
  182. package/dist/lib/google-token-cache.d.ts.map +1 -1
  183. package/dist/lib/google-token-cache.js +2 -14
  184. package/dist/lib/google-token-cache.js.map +1 -1
  185. package/dist/lib/home-dir-display.d.ts.map +1 -1
  186. package/dist/lib/home-dir-display.js +21 -39
  187. package/dist/lib/home-dir-display.js.map +1 -1
  188. package/dist/lib/http.d.ts +4 -1
  189. package/dist/lib/http.d.ts.map +1 -1
  190. package/dist/lib/http.js +2 -1
  191. package/dist/lib/http.js.map +1 -1
  192. package/dist/lib/json-guards.d.ts +11 -0
  193. package/dist/lib/json-guards.d.ts.map +1 -0
  194. package/dist/lib/json-guards.js +25 -0
  195. package/dist/lib/json-guards.js.map +1 -0
  196. package/dist/lib/kilo.d.ts +0 -2
  197. package/dist/lib/kilo.d.ts.map +1 -1
  198. package/dist/lib/kilo.js +33 -116
  199. package/dist/lib/kilo.js.map +1 -1
  200. package/dist/lib/kimi-endpoints.d.ts +2 -2
  201. package/dist/lib/kimi-endpoints.d.ts.map +1 -1
  202. package/dist/lib/kimi-endpoints.js +1 -1
  203. package/dist/lib/kimi-endpoints.js.map +1 -1
  204. package/dist/lib/kimi.d.ts.map +1 -1
  205. package/dist/lib/kimi.js +40 -86
  206. package/dist/lib/kimi.js.map +1 -1
  207. package/dist/lib/maintainer-announcements.d.ts +4 -17
  208. package/dist/lib/maintainer-announcements.d.ts.map +1 -1
  209. package/dist/lib/maintainer-announcements.js +7 -44
  210. package/dist/lib/maintainer-announcements.js.map +1 -1
  211. package/dist/lib/maintainer-home-notice.d.ts +19 -0
  212. package/dist/lib/maintainer-home-notice.d.ts.map +1 -0
  213. package/dist/lib/maintainer-home-notice.js +92 -0
  214. package/dist/lib/maintainer-home-notice.js.map +1 -0
  215. package/dist/lib/mimo-config.d.ts +6 -9
  216. package/dist/lib/mimo-config.d.ts.map +1 -1
  217. package/dist/lib/mimo-config.js +43 -74
  218. package/dist/lib/mimo-config.js.map +1 -1
  219. package/dist/lib/mimo.d.ts +2 -5
  220. package/dist/lib/mimo.d.ts.map +1 -1
  221. package/dist/lib/mimo.js +57 -109
  222. package/dist/lib/mimo.js.map +1 -1
  223. package/dist/lib/minimax-endpoints.d.ts +2 -2
  224. package/dist/lib/minimax-endpoints.d.ts.map +1 -1
  225. package/dist/lib/minimax-endpoints.js +1 -1
  226. package/dist/lib/minimax-endpoints.js.map +1 -1
  227. package/dist/lib/modelsdev-pricing.d.ts +22 -16
  228. package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
  229. package/dist/lib/modelsdev-pricing.js +279 -510
  230. package/dist/lib/modelsdev-pricing.js.map +1 -1
  231. package/dist/lib/nanogpt.d.ts +6 -6
  232. package/dist/lib/nanogpt.d.ts.map +1 -1
  233. package/dist/lib/nanogpt.js +19 -72
  234. package/dist/lib/nanogpt.js.map +1 -1
  235. package/dist/lib/ollama-cloud.d.ts +3 -5
  236. package/dist/lib/ollama-cloud.d.ts.map +1 -1
  237. package/dist/lib/ollama-cloud.js +77 -46
  238. package/dist/lib/ollama-cloud.js.map +1 -1
  239. package/dist/lib/openai.d.ts +19 -29
  240. package/dist/lib/openai.d.ts.map +1 -1
  241. package/dist/lib/openai.js +134 -182
  242. package/dist/lib/openai.js.map +1 -1
  243. package/dist/lib/opencode-auth-sqlite.d.ts.map +1 -1
  244. package/dist/lib/opencode-auth-sqlite.js +22 -23
  245. package/dist/lib/opencode-auth-sqlite.js.map +1 -1
  246. package/dist/lib/opencode-auth.d.ts +17 -11
  247. package/dist/lib/opencode-auth.d.ts.map +1 -1
  248. package/dist/lib/opencode-auth.js +39 -46
  249. package/dist/lib/opencode-auth.js.map +1 -1
  250. package/dist/lib/opencode-config-editor.d.ts +3 -34
  251. package/dist/lib/opencode-config-editor.d.ts.map +1 -1
  252. package/dist/lib/opencode-config-editor.js +23 -142
  253. package/dist/lib/opencode-config-editor.js.map +1 -1
  254. package/dist/lib/opencode-config-providers.d.ts +4 -3
  255. package/dist/lib/opencode-config-providers.d.ts.map +1 -1
  256. package/dist/lib/opencode-config-providers.js +7 -11
  257. package/dist/lib/opencode-config-providers.js.map +1 -1
  258. package/dist/lib/opencode-config-read.d.ts +2 -1
  259. package/dist/lib/opencode-config-read.d.ts.map +1 -1
  260. package/dist/lib/opencode-config-read.js +3 -2
  261. package/dist/lib/opencode-config-read.js.map +1 -1
  262. package/dist/lib/opencode-console-auth.d.ts +2 -3
  263. package/dist/lib/opencode-console-auth.d.ts.map +1 -1
  264. package/dist/lib/opencode-console-auth.js +2 -2
  265. package/dist/lib/opencode-console-auth.js.map +1 -1
  266. package/dist/lib/opencode-go.d.ts.map +1 -1
  267. package/dist/lib/opencode-go.js +51 -79
  268. package/dist/lib/opencode-go.js.map +1 -1
  269. package/dist/lib/opencode-storage.d.ts +18 -3
  270. package/dist/lib/opencode-storage.d.ts.map +1 -1
  271. package/dist/lib/opencode-storage.js +134 -2
  272. package/dist/lib/opencode-storage.js.map +1 -1
  273. package/dist/lib/opencode-zen.d.ts +23 -7
  274. package/dist/lib/opencode-zen.d.ts.map +1 -1
  275. package/dist/lib/opencode-zen.js +175 -62
  276. package/dist/lib/opencode-zen.js.map +1 -1
  277. package/dist/lib/openrouter.d.ts.map +1 -1
  278. package/dist/lib/openrouter.js +1 -13
  279. package/dist/lib/openrouter.js.map +1 -1
  280. package/dist/lib/pricing-key.d.ts +48 -0
  281. package/dist/lib/pricing-key.d.ts.map +1 -0
  282. package/dist/lib/pricing-key.js +371 -0
  283. package/dist/lib/pricing-key.js.map +1 -0
  284. package/dist/lib/provider-metadata.d.ts +16 -20
  285. package/dist/lib/provider-metadata.d.ts.map +1 -1
  286. package/dist/lib/provider-metadata.js +69 -69
  287. package/dist/lib/provider-metadata.js.map +1 -1
  288. package/dist/lib/provider-model-matching.d.ts +2 -1
  289. package/dist/lib/provider-model-matching.d.ts.map +1 -1
  290. package/dist/lib/provider-registration.d.ts +1 -177
  291. package/dist/lib/provider-registration.d.ts.map +1 -1
  292. package/dist/lib/provider-registration.js +1 -163
  293. package/dist/lib/provider-registration.js.map +1 -1
  294. package/dist/lib/quota-dialog-commands.d.ts +87 -53
  295. package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
  296. package/dist/lib/quota-dialog-commands.js +259 -519
  297. package/dist/lib/quota-dialog-commands.js.map +1 -1
  298. package/dist/lib/quota-export-types.d.ts +29 -23
  299. package/dist/lib/quota-export-types.d.ts.map +1 -1
  300. package/dist/lib/quota-export.d.ts +16 -26
  301. package/dist/lib/quota-export.d.ts.map +1 -1
  302. package/dist/lib/quota-export.js +105 -147
  303. package/dist/lib/quota-export.js.map +1 -1
  304. package/dist/lib/quota-providers-local.d.ts +12 -8
  305. package/dist/lib/quota-providers-local.d.ts.map +1 -1
  306. package/dist/lib/quota-providers-local.js +150 -223
  307. package/dist/lib/quota-providers-local.js.map +1 -1
  308. package/dist/lib/quota-providers-remote.d.ts +3 -8
  309. package/dist/lib/quota-providers-remote.d.ts.map +1 -1
  310. package/dist/lib/quota-providers-remote.js +309 -449
  311. package/dist/lib/quota-providers-remote.js.map +1 -1
  312. package/dist/lib/quota-providers.d.ts +57 -15
  313. package/dist/lib/quota-providers.d.ts.map +1 -1
  314. package/dist/lib/quota-providers.js +157 -64
  315. package/dist/lib/quota-providers.js.map +1 -1
  316. package/dist/lib/quota-report-message.d.ts +23 -10
  317. package/dist/lib/quota-report-message.d.ts.map +1 -1
  318. package/dist/lib/quota-report-message.js +37 -13
  319. package/dist/lib/quota-report-message.js.map +1 -1
  320. package/dist/lib/quota-retry-wait.d.ts +14 -6
  321. package/dist/lib/quota-retry-wait.d.ts.map +1 -1
  322. package/dist/lib/quota-retry-wait.js +37 -39
  323. package/dist/lib/quota-retry-wait.js.map +1 -1
  324. package/dist/lib/quota-status.d.ts +50 -33
  325. package/dist/lib/quota-status.d.ts.map +1 -1
  326. package/dist/lib/quota-status.js +1113 -772
  327. package/dist/lib/quota-status.js.map +1 -1
  328. package/dist/lib/quota-telemetry.d.ts +7 -14
  329. package/dist/lib/quota-telemetry.d.ts.map +1 -1
  330. package/dist/lib/quota-telemetry.js +46 -97
  331. package/dist/lib/quota-telemetry.js.map +1 -1
  332. package/dist/lib/report-document.d.ts +5 -65
  333. package/dist/lib/report-document.d.ts.map +1 -1
  334. package/dist/lib/report-document.js +14 -167
  335. package/dist/lib/report-document.js.map +1 -1
  336. package/dist/lib/resolved-auth-identity.d.ts +1 -2
  337. package/dist/lib/resolved-auth-identity.d.ts.map +1 -1
  338. package/dist/lib/resolved-auth-identity.js +0 -4
  339. package/dist/lib/resolved-auth-identity.js.map +1 -1
  340. package/dist/lib/session-tokens.d.ts +19 -19
  341. package/dist/lib/session-tokens.d.ts.map +1 -1
  342. package/dist/lib/session-tokens.js +58 -44
  343. package/dist/lib/session-tokens.js.map +1 -1
  344. package/dist/lib/synthetic.d.ts +0 -1
  345. package/dist/lib/synthetic.d.ts.map +1 -1
  346. package/dist/lib/synthetic.js +43 -94
  347. package/dist/lib/synthetic.js.map +1 -1
  348. package/dist/lib/token-buckets.d.ts +0 -1
  349. package/dist/lib/token-buckets.d.ts.map +1 -1
  350. package/dist/lib/token-buckets.js +0 -3
  351. package/dist/lib/token-buckets.js.map +1 -1
  352. package/dist/lib/token-cost.d.ts +2 -1
  353. package/dist/lib/token-cost.d.ts.map +1 -1
  354. package/dist/lib/types.d.ts +46 -340
  355. package/dist/lib/types.d.ts.map +1 -1
  356. package/dist/lib/types.js +2 -69
  357. package/dist/lib/types.js.map +1 -1
  358. package/dist/lib/xai.d.ts +6 -6
  359. package/dist/lib/xai.d.ts.map +1 -1
  360. package/dist/lib/xai.js +51 -90
  361. package/dist/lib/xai.js.map +1 -1
  362. package/dist/plugin.d.ts +6 -3
  363. package/dist/plugin.d.ts.map +1 -1
  364. package/dist/plugin.js +315 -90
  365. package/dist/plugin.js.map +1 -1
  366. package/dist/providers/alibaba-coding-plan.d.ts +4 -0
  367. package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
  368. package/dist/providers/alibaba-coding-plan.js +47 -77
  369. package/dist/providers/alibaba-coding-plan.js.map +1 -1
  370. package/dist/providers/alibaba-token-plan.d.ts.map +1 -1
  371. package/dist/providers/alibaba-token-plan.js +34 -46
  372. package/dist/providers/alibaba-token-plan.js.map +1 -1
  373. package/dist/providers/anthropic.d.ts +2 -4
  374. package/dist/providers/anthropic.d.ts.map +1 -1
  375. package/dist/providers/anthropic.js +80 -162
  376. package/dist/providers/anthropic.js.map +1 -1
  377. package/dist/providers/cache-policies.d.ts +0 -2
  378. package/dist/providers/cache-policies.d.ts.map +1 -1
  379. package/dist/providers/cache-policies.js +45 -91
  380. package/dist/providers/cache-policies.js.map +1 -1
  381. package/dist/providers/chutes.d.ts +0 -3
  382. package/dist/providers/chutes.d.ts.map +1 -1
  383. package/dist/providers/chutes.js +16 -28
  384. package/dist/providers/chutes.js.map +1 -1
  385. package/dist/providers/contract.d.ts +128 -0
  386. package/dist/providers/contract.d.ts.map +1 -0
  387. package/dist/providers/contract.js +101 -0
  388. package/dist/providers/contract.js.map +1 -0
  389. package/dist/providers/copilot.d.ts.map +1 -1
  390. package/dist/providers/copilot.js +171 -175
  391. package/dist/providers/copilot.js.map +1 -1
  392. package/dist/providers/cursor.d.ts.map +1 -1
  393. package/dist/providers/cursor.js +56 -109
  394. package/dist/providers/cursor.js.map +1 -1
  395. package/dist/providers/deepseek.d.ts +1 -6
  396. package/dist/providers/deepseek.d.ts.map +1 -1
  397. package/dist/providers/deepseek.js +46 -81
  398. package/dist/providers/deepseek.js.map +1 -1
  399. package/dist/providers/glm-coding-plan.d.ts +8 -0
  400. package/dist/providers/glm-coding-plan.d.ts.map +1 -0
  401. package/dist/providers/glm-coding-plan.js +106 -0
  402. package/dist/providers/glm-coding-plan.js.map +1 -0
  403. package/dist/providers/google-agy.d.ts.map +1 -1
  404. package/dist/providers/google-agy.js +41 -179
  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 -5
  433. package/dist/providers/ollama-cloud.d.ts.map +1 -1
  434. package/dist/providers/ollama-cloud.js +86 -87
  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 +157 -150
  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 +104 -141
  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 -1083
  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 -26
  719. package/dist/lib/quota-surface-data.d.ts.map +0 -1
  720. package/dist/lib/quota-surface-data.js +0 -299
  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
@@ -2,20 +2,13 @@
2
2
  import { realpathSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
- import { runInitInstaller } from "../lib/init-installer.js";
6
5
  const USAGE = [
7
6
  "Usage:",
8
- " npx @slkiser/opencode-quota init [--dry-run] [--sync-legacy-config]",
9
7
  " npx @slkiser/opencode-quota show [--provider <provider-id>] [--json] [--threshold <pct>]",
10
8
  " npx @slkiser/opencode-quota status [--provider <provider-id>] [--json]",
11
- " npx @slkiser/opencode-quota update [--dry-run] [--yes]",
12
- " npx @slkiser/opencode-quota provider add [--dry-run]",
13
9
  " npx @slkiser/opencode-quota --help",
14
10
  "",
15
11
  "Commands:",
16
- " init Run the interactive quota installer",
17
- " --dry-run Preview validated changes without writing files",
18
- " --sync-legacy-config also writes experimental.quotaToast",
19
12
  " show Print a quick quota glance",
20
13
  " --json Machine-readable JSON output (reads from cache)",
21
14
  " --threshold <pct> With --json, exit 1 if below <pct>%, 2 if incomplete/not comparable",
@@ -23,13 +16,6 @@ const USAGE = [
23
16
  " status Print Quota Status diagnostics (same data as /quota_status)",
24
17
  " --json Machine-readable JSON output",
25
18
  " --provider <id> Filter to one provider",
26
- " update Preview safe setting/package-cache changes and report legacy credential findings",
27
- " Credential-specific audit sources and values are not read",
28
- " Values encountered in normal config parsing are never printed, copied, or modified",
29
- " --dry-run Print the full responsible preview without changing anything",
30
- " --yes Apply only safe setting/cache work after printing the preview",
31
- " provider add Add or update one global quotaProviders definition",
32
- " --dry-run Preview the exact global OpenCode config without writing",
33
19
  ].join("\n");
34
20
  function printUsage() {
35
21
  console.log(USAGE);
@@ -74,31 +60,14 @@ export async function main(argv = process.argv.slice(2)) {
74
60
  printUsage();
75
61
  return 0;
76
62
  }
77
- if (command === "init") {
78
- const allowed = new Set(["--dry-run", "--sync-legacy-config"]);
79
- if (rest.every((arg) => allowed.has(arg)) && new Set(rest).size === rest.length) {
80
- return await runInitInstaller({
81
- ...(rest.includes("--dry-run") ? { dryRun: true } : {}),
82
- ...(rest.includes("--sync-legacy-config") ? { syncLegacyConfig: true } : {}),
83
- });
84
- }
85
- }
86
63
  if (command === "show") {
87
64
  const { runCliShowCommand } = await import("../lib/cli-show.js");
88
65
  return await runCliShowCommand({ argv: rest });
89
66
  }
90
67
  if (command === "status") {
91
- const { runCliStatusCommand } = await import("../lib/cli-status.js");
68
+ const { runCliStatusCommand } = await import("../lib/cli-show.js");
92
69
  return await runCliStatusCommand({ argv: rest });
93
70
  }
94
- if (command === "update") {
95
- const { runScopedUpdateCommand } = await import("../lib/scoped-update.js");
96
- return await runScopedUpdateCommand({ argv: rest });
97
- }
98
- if (command === "provider" && rest[0] === "add") {
99
- const { runProviderAddCommand } = await import("../lib/provider-add-command.js");
100
- return await runProviderAddCommand({ argv: rest.slice(1) });
101
- }
102
71
  printUsage();
103
72
  return 1;
104
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-quota.js","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,KAAK,GAAG;IACZ,QAAQ;IACR,uEAAuE;IACvE,4FAA4F;IAC5F,0EAA0E;IAC1E,0DAA0D;IAC1D,wDAAwD;IACxD,sCAAsC;IACtC,EAAE;IACF,WAAW;IACX,+CAA+C;IAC/C,gFAAgF;IAChF,oEAAoE;IACpE,sCAAsC;IACtC,gFAAgF;IAChF,oGAAoG;IACpG,uDAAuD;IACvD,uEAAuE;IACvE,6DAA6D;IAC7D,uDAAuD;IACvD,4FAA4F;IAC5F,qEAAqE;IACrE,8FAA8F;IAC9F,6FAA6F;IAC7F,8FAA8F;IAC9F,oEAAoE;IACpE,yFAAyF;CAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAK,GAAuB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAC3C,UAAU,GAAW,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EACnD,WAAW,GAAiC,cAAc;IAE1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,OAAuB,EAAE,GAAG,IAAe,EAAE,EAAE;QACrE,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,IAAI,CAAC,CAAC,CAAC,KAAK,qBAAqB;YACjC,OAAO,CAAC,UAAU,CAAC,mCAAmC,CAAC,EACvD,CAAC;YACD,OAAO;QACT,CAAC;QACD,OAAQ,WAA4C,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvF,CAAC,CAA+B,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACnE,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAChF,OAAO,MAAM,gBAAgB,CAAC;gBAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACjE,OAAO,MAAM,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACrE,OAAO,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC3E,OAAO,MAAM,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QAChD,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACjF,OAAO,MAAM,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,gBAAgB,EAAE,EAAE,CAAC;IACvB,6BAA6B,EAAE,CAAC;IAChC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"opencode-quota.js","sourceRoot":"","sources":["../../src/bin/opencode-quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { QuotaError, QuotaErrorCode } from "./types.js";
2
+ export declare function isQuotaErrorCode(code: unknown): code is QuotaErrorCode;
3
+ /** An HTTP status as shown: a whole number from 100 to 599. */
4
+ export declare function httpStatus(status: unknown): number | undefined;
5
+ /** An error's code and HTTP status, "provider_error, http 503": never its message's words. */
6
+ export declare function errorKind(error: QuotaError): string;
7
+ /** Local programs named in provider messages, longest names first. */
8
+ export declare const LOCAL_TOOLS: readonly string[];
9
+ export declare function classifyError(message: string, nowMs?: number): QuotaError;
10
+ /** The short words every surface shows for an error, for example "Sign in again". */
11
+ export declare function describeError(error: QuotaError, providerLabel: string, nowMs: number): string;
12
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAmB7D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAEtE;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI9D;AAED,8FAA8F;AAC9F,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAInD;AAED,sEAAsE;AACtE,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAAwC,CAAC;AAiDlF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,GAAG,UAAU,CAmBrF;AAOD,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA2B7F"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * One error vocabulary for every surface: `classifyError` turns a provider's free-text failure
3
+ * into a `QuotaError`, and `describeError` gives the short words users see. The raw text is
4
+ * kept in `detail`, scrubbed by `publicDetail`; /quota_status shows the code, status and words.
5
+ */
6
+ import { publicDetail } from "./redact.js";
7
+ const DETAIL_MAX_LENGTH = 300;
8
+ /** Every error code, to check a code read from a file or a provider answer. */
9
+ const ERROR_CODES = {
10
+ not_configured: true,
11
+ login_expired: true,
12
+ no_plan: true,
13
+ rate_limited: true,
14
+ timeout: true,
15
+ network: true,
16
+ provider_error: true,
17
+ bad_response: true,
18
+ no_data: true,
19
+ local_tool: true,
20
+ internal: true,
21
+ };
22
+ export function isQuotaErrorCode(code) {
23
+ return typeof code === "string" && Object.hasOwn(ERROR_CODES, code);
24
+ }
25
+ /** An HTTP status as shown: a whole number from 100 to 599. */
26
+ export function httpStatus(status) {
27
+ return typeof status === "number" && Number.isInteger(status) && status >= 100 && status < 600
28
+ ? status
29
+ : undefined;
30
+ }
31
+ /** An error's code and HTTP status, "provider_error, http 503": never its message's words. */
32
+ export function errorKind(error) {
33
+ if (!isQuotaErrorCode(error.code))
34
+ return "(unknown error code)";
35
+ const status = httpStatus(error.status);
36
+ return status === undefined ? error.code : `${error.code}, http ${status}`;
37
+ }
38
+ /** Local programs named in provider messages, longest names first. */
39
+ export const LOCAL_TOOLS = ["Alibaba Cloud CLI", "Claude CLI"];
40
+ /** Checked in order; the first match wins. Patterns run on the raw message, case-insensitive. */
41
+ const RULES = [
42
+ ["internal", /invalid normalized provider result|failed to read quota data/i],
43
+ ["rate_limited", /\b429\b|rate.?limit|too many requests/i],
44
+ ["timeout", /timed? ?out\b|timeout/i],
45
+ [
46
+ "local_tool",
47
+ /not found on the trusted path|could not start|cli probe failed|not supported on this platform/i,
48
+ ],
49
+ [
50
+ "no_plan",
51
+ /not subscribed|subscription (?:not found|is not active)|no active .*subscription|not an active subscription/i,
52
+ ],
53
+ [
54
+ "login_expired",
55
+ /token (?:expired|revoked)|token refresh failed|sign-in could not be|sign-in expired|session (?:is missing or )?expired|requires login|could not read this login|invalid api key|login fail|\b401\b|unauthorized/i,
56
+ ],
57
+ [
58
+ "not_configured",
59
+ /not configured|auth entry|missing a refresh token|has no access token|unsupported .*(?:auth type|tier)|invalid config|config must be|config file|invalid cookie header/i,
60
+ ],
61
+ [
62
+ "network",
63
+ /fetch failed|\beconn(?:refused|reset|aborted)\b|\benotfound\b|\beai_again\b|socket hang up|request failed:/i,
64
+ ],
65
+ ["provider_error", /\b(?:http|api error|error|status)\s*\(?\d{3}\b|\(http \d{3}\)/i],
66
+ [
67
+ "bad_response",
68
+ /invalid|parse|valid json|unexpected response|response missing|exceeded \d+ bytes|redirect rejected|expected a json|did not match/i,
69
+ ],
70
+ [
71
+ "no_data",
72
+ /\bno\b.*\bdata\b|no usable|returned no|unavailable|no local usage|nothing to report/i,
73
+ ],
74
+ ];
75
+ function findStatus(message) {
76
+ const match = /\b([1-5]\d{2})\b/u.exec(message);
77
+ return match ? Number(match[1]) : undefined;
78
+ }
79
+ /** Anthropic's cooldown text says "retry in 42s". */
80
+ function findRetryAtMs(message, nowMs) {
81
+ const match = /retry in (\d+)\s*s\b/iu.exec(message);
82
+ return match ? nowMs + Number(match[1]) * 1000 : undefined;
83
+ }
84
+ export function classifyError(message, nowMs = Date.now()) {
85
+ const code = RULES.find(([, pattern]) => pattern.test(message))?.[0] ?? "internal";
86
+ // Hidden before it is cut, so a cut never leaves part of an email address or home dir.
87
+ const detail = publicDetail(message, DETAIL_MAX_LENGTH);
88
+ const error = { code, ...(detail ? { detail } : {}) };
89
+ if (code === "provider_error" || code === "rate_limited") {
90
+ const status = findStatus(message);
91
+ if (status !== undefined)
92
+ error.status = status;
93
+ }
94
+ if (code === "rate_limited") {
95
+ const retryAtMs = findRetryAtMs(message, nowMs);
96
+ if (retryAtMs !== undefined)
97
+ error.retryAtMs = retryAtMs;
98
+ }
99
+ if (code === "local_tool") {
100
+ const tool = LOCAL_TOOLS.find((name) => message.includes(name));
101
+ if (tool)
102
+ error.tool = tool;
103
+ if (/not found|not supported/i.test(message))
104
+ error.missing = true;
105
+ }
106
+ return error;
107
+ }
108
+ function formatWait(ms) {
109
+ const minutes = Math.max(1, Math.ceil(ms / 60_000));
110
+ return minutes < 60 ? `${minutes}m` : `${Math.ceil(minutes / 60)}h`;
111
+ }
112
+ /** The short words every surface shows for an error, for example "Sign in again". */
113
+ export function describeError(error, providerLabel, nowMs) {
114
+ switch (error.code) {
115
+ case "not_configured":
116
+ return "Not set up";
117
+ case "login_expired":
118
+ return "Sign in again";
119
+ case "no_plan":
120
+ return "No active plan";
121
+ case "rate_limited":
122
+ return error.retryAtMs !== undefined && error.retryAtMs > nowMs
123
+ ? `Rate limited, retry in ${formatWait(error.retryAtMs - nowMs)}`
124
+ : "Rate limited";
125
+ case "timeout":
126
+ return "Timed out";
127
+ case "network":
128
+ return `Can't reach ${providerLabel}`;
129
+ case "provider_error":
130
+ return error.status === undefined ? "Provider error" : `Provider error ${error.status}`;
131
+ case "bad_response":
132
+ return "Unexpected reply";
133
+ case "no_data":
134
+ return "Nothing reported";
135
+ case "local_tool":
136
+ return `${error.tool ?? "Local tool"} ${error.missing ? "not found" : "failed"}`;
137
+ case "internal":
138
+ return "Couldn't read";
139
+ }
140
+ }
141
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { QuotaRow, Words } from "./types.js";
2
+ export type Pace = {
3
+ /** The percent that would be left now with even use: the share of the window still to come. */
4
+ evenLeft: number;
5
+ kind: "spare" | "on_track" | "fast";
6
+ /** Only for "fast": when it runs out at the pace so far (always before the reset). */
7
+ runsOutInMs?: number;
8
+ };
9
+ /** The pace of a row with a percent and a known window; undefined for every other row. */
10
+ export declare function paceOf(row: QuotaRow, nowMs: number): Pace | undefined;
11
+ /** "plenty to spare", "on track", "faster than it refills", or "runs out in 2h 10m". */
12
+ export declare function paceText(pace: Pace, words: Words): string;
13
+ //# sourceMappingURL=pace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pace.d.ts","sourceRoot":"","sources":["../../src/core/pace.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAQlD,MAAM,MAAM,IAAI,GAAG;IACjB,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;IACpC,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAYF,0FAA0F;AAC1F,wBAAgB,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAcrE;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAKzD"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * The pace of a quota window: how much would be left now if the limit were used evenly until
3
+ * it resets (the Limits tab's │ marker), and what that means in words. Pure.
4
+ */
5
+ import { formatDuration } from "../view/format.js";
6
+ import { WINDOWS } from "./windows.js";
7
+ /** Within this many percentage points of even use counts as on track. */
8
+ const ON_TRACK_POINTS = 5;
9
+ /** Before this share of the window has passed, the pace so far says too little for a run-out time. */
10
+ const MIN_ELAPSED_SHARE = 0.1;
11
+ /** When the row's window started and ends: its own start, else the reset minus the window's length. */
12
+ function windowSpan(row) {
13
+ const endMs = Date.parse(row.resetsAt ?? "");
14
+ if (!Number.isFinite(endMs))
15
+ return undefined;
16
+ const ownStartMs = Date.parse(row.windowStartedAt ?? "");
17
+ const lengthMs = row.window ? WINDOWS[row.window].lengthMs : undefined;
18
+ const startMs = Number.isFinite(ownStartMs) ? ownStartMs : endMs - (lengthMs ?? Number.NaN);
19
+ return startMs < endMs ? { startMs, endMs } : undefined;
20
+ }
21
+ /** The pace of a row with a percent and a known window; undefined for every other row. */
22
+ export function paceOf(row, nowMs) {
23
+ const span = windowSpan(row);
24
+ if (row.percentRemaining === undefined || !span)
25
+ return undefined;
26
+ if (nowMs < span.startMs || nowMs >= span.endMs)
27
+ return undefined;
28
+ const lengthMs = span.endMs - span.startMs;
29
+ const elapsedMs = nowMs - span.startMs;
30
+ const evenLeft = ((span.endMs - nowMs) / lengthMs) * 100;
31
+ const left = Math.max(0, Math.min(100, row.percentRemaining));
32
+ if (left > evenLeft + ON_TRACK_POINTS)
33
+ return { evenLeft, kind: "spare" };
34
+ if (left >= evenLeft - ON_TRACK_POINTS)
35
+ return { evenLeft, kind: "on_track" };
36
+ // Used faster than it refills: at the same rate, what is left runs out before the reset.
37
+ if (left === 0 || elapsedMs < lengthMs * MIN_ELAPSED_SHARE)
38
+ return { evenLeft, kind: "fast" };
39
+ const runsOutInMs = (left / (100 - left)) * elapsedMs;
40
+ return { evenLeft, kind: "fast", runsOutInMs };
41
+ }
42
+ /** "plenty to spare", "on track", "faster than it refills", or "runs out in 2h 10m". */
43
+ export function paceText(pace, words) {
44
+ if (pace.kind === "spare")
45
+ return "plenty to spare";
46
+ if (pace.kind === "on_track")
47
+ return "on track";
48
+ if (pace.runsOutInMs === undefined)
49
+ return "faster than it refills";
50
+ return `runs out in ${formatDuration(pace.runsOutInMs, words.reset, words.resetDecimals)}`;
51
+ }
52
+ //# sourceMappingURL=pace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pace.js","sourceRoot":"","sources":["../../src/core/pace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { DebugDetail, QuotaError, QuotaRow, ResetNotice } from "./types.js";
2
+ /** The snapshot file the server and the terminal command share. */
3
+ export declare function snapshotFilePath(): string;
4
+ /**
5
+ * A row and the login it came from: a hash of the provider's source id, "" when the provider
6
+ * has one login. The row's account is the login's own name, before the store numbers logins.
7
+ */
8
+ export type LoginRow = {
9
+ login: string;
10
+ row: QuotaRow;
11
+ };
12
+ /** What the file keeps per provider and account, keyed `${providerId}|${identity hash}`. */
13
+ export type SavedEntry = {
14
+ providerId: string;
15
+ rows: LoginRow[];
16
+ okAtMs?: number;
17
+ checkedAtMs?: number;
18
+ error?: QuotaError;
19
+ /** Failed attempts in a row; drives the error backoff. */
20
+ failures: number;
21
+ debug: DebugDetail[];
22
+ /** Windows of this account that reset recently; they belong to it like its rows. */
23
+ notices: ResetNotice[];
24
+ /** Per row (see `rowSlot`): when its current reset time was first seen. */
25
+ resetSeenAtMs: Record<string, number>;
26
+ };
27
+ export type SavedState = {
28
+ entries: Map<string, SavedEntry>;
29
+ };
30
+ /** One row's slot: rows of two checks match by id, account and login. */
31
+ export declare function rowSlot({ login, row }: LoginRow): string;
32
+ /** What the file holds now; empty when it is missing or does not parse. */
33
+ export declare function readSavedState(file: string): Promise<SavedState>;
34
+ export declare function joinNotices(first: readonly ResetNotice[], second: readonly ResetNotice[]): ResetNotice[];
35
+ /**
36
+ * Merges `state` into the file (per entry the newer check wins; notices are joined by id),
37
+ * drops entries not checked for a week and notices older than `noticeMaxAgeMs`, writes it
38
+ * atomically (owner-only), and returns the merged state.
39
+ */
40
+ export declare function writeSavedState(file: string, state: SavedState, options: {
41
+ nowMs: number;
42
+ noticeMaxAgeMs: number;
43
+ }): Promise<SavedState>;
44
+ //# sourceMappingURL=persist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist.d.ts","sourceRoot":"","sources":["../../src/core/persist.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMjF,mEAAmE;AACnE,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAKD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAA;CAAE,CAAC;AAExD,4FAA4F;AAC5F,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,oFAAoF;IACpF,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,2EAA2E;IAC3E,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CAAE,CAAC;AAE9D,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM,CAExD;AAiHD,2EAA2E;AAC3E,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBtE;AAKD,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,MAAM,EAAE,SAAS,WAAW,EAAE,GAC7B,WAAW,EAAE,CAIf;AAmCD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,UAAU,CAAC,CAarB"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * The store's snapshot file: one JSON file with the last known rows, recent reset notices and
3
+ * reset observation times of every provider and account. Several OpenCode processes share it
4
+ * without a lock: every write re-reads the file right before it and merges what the others
5
+ * saved (the newer check wins), and writes in this process run one at a time. Entries older
6
+ * than a week are dropped. A file that does not parse is ignored; a bad entry or row is
7
+ * skipped on its own. Provider text is scrubbed and credentials redacted again on read.
8
+ * Each row is saved with its login (a hash), as the store numbers logins that share a name.
9
+ */
10
+ import { readFile } from "node:fs/promises";
11
+ import { join } from "node:path";
12
+ import { writeJsonAtomic } from "../lib/atomic-json.js";
13
+ import { isRecord } from "../lib/json-guards.js";
14
+ import { getOpencodeRuntimeDirs } from "../lib/opencode-runtime-paths.js";
15
+ import { isQuotaErrorCode } from "./errors.js";
16
+ import { safeDebugValue, safeDetail } from "./redact.js";
17
+ import { validateRows } from "./validate.js";
18
+ import { isQuotaWindow } from "./windows.js";
19
+ const FILE_VERSION = 2;
20
+ /** The snapshot file the server and the terminal command share. */
21
+ export function snapshotFilePath() {
22
+ return join(getOpencodeRuntimeDirs().stateDir, "opencode-quota", "snapshot-v6.json");
23
+ }
24
+ const LOGIN_RE = /^[0-9a-f]{0,64}$/u;
25
+ const ENTRY_MAX_AGE_MS = 7 * 24 * 60 * 60_000;
26
+ const DETAIL_MAX_LENGTH = 300;
27
+ /** One row's slot: rows of two checks match by id, account and login. */
28
+ export function rowSlot({ login, row }) {
29
+ return `${row.id}\u001f${row.account ?? ""}\u001f${login}`;
30
+ }
31
+ function optionalTime(value) {
32
+ if (value === undefined)
33
+ return undefined;
34
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
35
+ }
36
+ function parseError(value) {
37
+ if (value === undefined)
38
+ return undefined;
39
+ if (!isRecord(value))
40
+ return null;
41
+ const { code, status, retryAtMs, tool, missing, detail } = value;
42
+ if (!isQuotaErrorCode(code))
43
+ return null;
44
+ const error = { code };
45
+ if (Number.isInteger(status))
46
+ error.status = status;
47
+ if (typeof retryAtMs === "number" && Number.isFinite(retryAtMs))
48
+ error.retryAtMs = retryAtMs;
49
+ if (typeof tool === "string")
50
+ error.tool = safeDetail(tool, 40);
51
+ if (missing === true)
52
+ error.missing = true;
53
+ if (typeof detail === "string")
54
+ error.detail = safeDetail(detail, DETAIL_MAX_LENGTH);
55
+ return error;
56
+ }
57
+ function parseDebug(value) {
58
+ if (!Array.isArray(value))
59
+ return [];
60
+ return value.flatMap((item) => isRecord(item) && typeof item.key === "string" && typeof item.value === "string"
61
+ ? [
62
+ {
63
+ key: safeDetail(item.key, 64),
64
+ value: safeDebugValue(item.key, item.value, DETAIL_MAX_LENGTH),
65
+ },
66
+ ]
67
+ : []);
68
+ }
69
+ function parseRows(providerId, value) {
70
+ return value.flatMap((item) => {
71
+ if (!isRecord(item) || typeof item.login !== "string" || !LOGIN_RE.test(item.login))
72
+ return [];
73
+ const login = item.login;
74
+ return validateRows(providerId, [item.row]).rows.map((row) => ({ login, row }));
75
+ });
76
+ }
77
+ function parseSeenTimes(value) {
78
+ if (!isRecord(value))
79
+ return {};
80
+ return Object.fromEntries(Object.entries(value).filter((pair) => typeof pair[1] === "number" && Number.isFinite(pair[1])));
81
+ }
82
+ function parseEntry(key, value) {
83
+ if (!isRecord(value) || typeof value.providerId !== "string")
84
+ return undefined;
85
+ const { providerId } = value;
86
+ if (!key.startsWith(`${providerId}|`) || !Array.isArray(value.rows))
87
+ return undefined;
88
+ const okAtMs = optionalTime(value.okAtMs);
89
+ const checkedAtMs = optionalTime(value.checkedAtMs);
90
+ const error = parseError(value.error);
91
+ if (okAtMs === null || checkedAtMs === null || error === null)
92
+ return undefined;
93
+ const failures = Number.isInteger(value.failures) && value.failures >= 0
94
+ ? value.failures
95
+ : 0;
96
+ const notices = Array.isArray(value.notices)
97
+ ? value.notices.flatMap((notice) => parseNotice(providerId, notice) ?? [])
98
+ : [];
99
+ return {
100
+ providerId,
101
+ rows: parseRows(providerId, value.rows),
102
+ ...(okAtMs === undefined ? {} : { okAtMs }),
103
+ ...(checkedAtMs === undefined ? {} : { checkedAtMs }),
104
+ ...(error === undefined ? {} : { error }),
105
+ failures,
106
+ debug: parseDebug(value.debug),
107
+ notices,
108
+ resetSeenAtMs: parseSeenTimes(value.resetSeenAtMs),
109
+ };
110
+ }
111
+ function parseNotice(entryProviderId, value) {
112
+ if (!isRecord(value))
113
+ return undefined;
114
+ const { id, rowId, providerId, account, label, window, percentRemaining, atMs } = value;
115
+ if (typeof id !== "string" ||
116
+ typeof rowId !== "string" ||
117
+ providerId !== entryProviderId ||
118
+ (account !== undefined && typeof account !== "string") ||
119
+ typeof label !== "string" ||
120
+ !isQuotaWindow(window) ||
121
+ typeof percentRemaining !== "number" ||
122
+ !Number.isFinite(percentRemaining) ||
123
+ typeof atMs !== "number" ||
124
+ !Number.isFinite(atMs)) {
125
+ return undefined;
126
+ }
127
+ return {
128
+ id,
129
+ rowId,
130
+ providerId: entryProviderId,
131
+ ...(account === undefined ? {} : { account: safeDetail(account, 64) }),
132
+ label: safeDetail(label, 64),
133
+ window,
134
+ percentRemaining,
135
+ atMs,
136
+ };
137
+ }
138
+ function emptyState() {
139
+ return { entries: new Map() };
140
+ }
141
+ /** What the file holds now; empty when it is missing or does not parse. */
142
+ export async function readSavedState(file) {
143
+ let data;
144
+ try {
145
+ data = JSON.parse(await readFile(file, "utf8"));
146
+ }
147
+ catch {
148
+ return emptyState();
149
+ }
150
+ if (!isRecord(data) || data.version !== FILE_VERSION || !isRecord(data.entries)) {
151
+ return emptyState();
152
+ }
153
+ const entries = new Map();
154
+ for (const [key, value] of Object.entries(data.entries)) {
155
+ const entry = parseEntry(key, value);
156
+ if (entry)
157
+ entries.set(key, entry);
158
+ }
159
+ return { entries };
160
+ }
161
+ /** Each file's last write in this process (never rejects); the next write waits for it. */
162
+ const writeQueues = new Map();
163
+ export function joinNotices(first, second) {
164
+ const byId = new Map(first.map((notice) => [notice.id, notice]));
165
+ for (const notice of second)
166
+ byId.set(notice.id, notice);
167
+ return [...byId.values()];
168
+ }
169
+ async function mergeAndWrite(file, state, options) {
170
+ const merged = await readSavedState(file);
171
+ for (const [key, entry] of state.entries) {
172
+ const other = merged.entries.get(key);
173
+ if (!other) {
174
+ merged.entries.set(key, entry);
175
+ }
176
+ else if ((other.checkedAtMs ?? 0) <= (entry.checkedAtMs ?? 0)) {
177
+ merged.entries.set(key, { ...entry, notices: joinNotices(other.notices, entry.notices) });
178
+ }
179
+ else {
180
+ merged.entries.set(key, { ...other, notices: joinNotices(entry.notices, other.notices) });
181
+ }
182
+ }
183
+ for (const [key, entry] of merged.entries) {
184
+ if (options.nowMs - (entry.checkedAtMs ?? 0) > ENTRY_MAX_AGE_MS) {
185
+ merged.entries.delete(key);
186
+ continue;
187
+ }
188
+ entry.notices = entry.notices.filter((notice) => options.nowMs - notice.atMs <= options.noticeMaxAgeMs);
189
+ }
190
+ await writeJsonAtomic(file, { version: FILE_VERSION, entries: Object.fromEntries(merged.entries) }, { trailingNewline: true, directoryMode: 0o700, fileMode: 0o600 });
191
+ return merged;
192
+ }
193
+ /**
194
+ * Merges `state` into the file (per entry the newer check wins; notices are joined by id),
195
+ * drops entries not checked for a week and notices older than `noticeMaxAgeMs`, writes it
196
+ * atomically (owner-only), and returns the merged state.
197
+ */
198
+ export function writeSavedState(file, state, options) {
199
+ // Writes of one process run one at a time, so each re-reads what the previous one wrote.
200
+ const previous = writeQueues.get(file) ?? Promise.resolve();
201
+ const write = previous.then(() => mergeAndWrite(file, state, options));
202
+ const settled = write.then(() => { }, () => { });
203
+ writeQueues.set(file, settled);
204
+ void settled.then(() => {
205
+ if (writeQueues.get(file) === settled)
206
+ writeQueues.delete(file);
207
+ });
208
+ return write;
209
+ }
210
+ //# sourceMappingURL=persist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist.js","sourceRoot":"","sources":["../../src/core/persist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { QuotaProviderContext } from "../lib/entries.js";
2
+ import type { LoadedSettings } from "../settings/index.js";
3
+ import type { StoreSource } from "./store.js";
4
+ import type { SessionModel } from "./types.js";
5
+ export type ProviderSourceHost = {
6
+ /** OpenCode's provider list, for availability and model checks. */
7
+ client: QuotaProviderContext["client"];
8
+ /** The project folder quota is computed for. */
9
+ workspaceRoot: string;
10
+ /** The server settings now. */
11
+ settings: () => LoadedSettings;
12
+ };
13
+ /** The settings the server reads besides the providers themselves. */
14
+ export type ServerSettings = {
15
+ waitForQuotaReset: boolean;
16
+ /** The enabled providers that serve `model`. */
17
+ providerIdsForModel: (model: SessionModel) => string[];
18
+ /** The custom definitions (rows `quota-providers.custom.<id>.*`) that serve `model`. */
19
+ customDefinitionIdsForModel: (model: SessionModel) => string[];
20
+ /** The export file, written after each snapshot change when on. */
21
+ export: {
22
+ enabled: boolean;
23
+ path: string;
24
+ };
25
+ /** Quota gauges through the host's OpenTelemetry MeterProvider. */
26
+ telemetry: boolean;
27
+ };
28
+ /** What every provider reads from the settings when it checks its quota. */
29
+ export declare function providerContext(host: ProviderSourceHost, loaded?: LoadedSettings): QuotaProviderContext;
30
+ /**
31
+ * Each login (a source id: an account number, a credential id, often an email) as an opaque id
32
+ * keyed with the install's protected key, so the snapshot file and notice ids can't be matched
33
+ * against guessed emails. Without that key no account identity exists either, so the store
34
+ * keeps such rows in memory only, and a key of this process is enough.
35
+ */
36
+ export declare function keyedLogins(providerId: string, logins: readonly string[]): Promise<string[]>;
37
+ /** The store's source: the enabled and available providers, with the settings now. */
38
+ export declare function loadProviderSource(host: ProviderSourceHost): Promise<StoreSource>;
39
+ export declare function loadServerSettings(host: ProviderSourceHost): Promise<ServerSettings>;
40
+ //# sourceMappingURL=provider-source.d.ts.map