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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (794) hide show
  1. package/README.md +30 -44
  2. package/dist/agent-tools.d.ts +24 -0
  3. package/dist/agent-tools.d.ts.map +1 -0
  4. package/dist/agent-tools.js +578 -0
  5. package/dist/agent-tools.js.map +1 -0
  6. package/dist/bin/opencode-quota.d.ts.map +1 -1
  7. package/dist/bin/opencode-quota.js +1 -32
  8. package/dist/bin/opencode-quota.js.map +1 -1
  9. package/dist/core/errors.d.ts +12 -0
  10. package/dist/core/errors.d.ts.map +1 -0
  11. package/dist/core/errors.js +141 -0
  12. package/dist/core/errors.js.map +1 -0
  13. package/dist/core/pace.d.ts +13 -0
  14. package/dist/core/pace.d.ts.map +1 -0
  15. package/dist/core/pace.js +52 -0
  16. package/dist/core/pace.js.map +1 -0
  17. package/dist/core/persist.d.ts +44 -0
  18. package/dist/core/persist.d.ts.map +1 -0
  19. package/dist/core/persist.js +210 -0
  20. package/dist/core/persist.js.map +1 -0
  21. package/dist/core/provider-source.d.ts +40 -0
  22. package/dist/core/provider-source.d.ts.map +1 -0
  23. package/dist/core/provider-source.js +210 -0
  24. package/dist/core/provider-source.js.map +1 -0
  25. package/dist/core/redact.d.ts +17 -0
  26. package/dist/core/redact.d.ts.map +1 -0
  27. package/dist/core/redact.js +217 -0
  28. package/dist/core/redact.js.map +1 -0
  29. package/dist/core/rows.d.ts +20 -0
  30. package/dist/core/rows.d.ts.map +1 -0
  31. package/dist/core/rows.js +142 -0
  32. package/dist/core/rows.js.map +1 -0
  33. package/dist/core/selection.d.ts +15 -0
  34. package/dist/core/selection.d.ts.map +1 -0
  35. package/dist/core/selection.js +43 -0
  36. package/dist/core/selection.js.map +1 -0
  37. package/dist/core/snapshot-publisher.d.ts +15 -0
  38. package/dist/core/snapshot-publisher.d.ts.map +1 -0
  39. package/dist/core/snapshot-publisher.js +57 -0
  40. package/dist/core/snapshot-publisher.js.map +1 -0
  41. package/dist/core/store.d.ts +93 -0
  42. package/dist/core/store.d.ts.map +1 -0
  43. package/dist/core/store.js +563 -0
  44. package/dist/core/store.js.map +1 -0
  45. package/dist/core/types.d.ts +186 -0
  46. package/dist/core/types.d.ts.map +1 -0
  47. package/dist/core/types.js +2 -0
  48. package/dist/core/types.js.map +1 -0
  49. package/dist/core/usage-ranges.d.ts +46 -0
  50. package/dist/core/usage-ranges.d.ts.map +1 -0
  51. package/dist/core/usage-ranges.js +72 -0
  52. package/dist/core/usage-ranges.js.map +1 -0
  53. package/dist/core/usage.d.ts +100 -0
  54. package/dist/core/usage.d.ts.map +1 -0
  55. package/dist/core/usage.js +373 -0
  56. package/dist/core/usage.js.map +1 -0
  57. package/dist/core/validate.d.ts +8 -0
  58. package/dist/core/validate.d.ts.map +1 -0
  59. package/dist/core/validate.js +167 -0
  60. package/dist/core/validate.js.map +1 -0
  61. package/dist/core/windows.d.ts +24 -0
  62. package/dist/core/windows.d.ts.map +1 -0
  63. package/dist/core/windows.js +43 -0
  64. package/dist/core/windows.js.map +1 -0
  65. package/dist/index.d.ts +2 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/lib/accounting-format.d.ts +2 -52
  69. package/dist/lib/accounting-format.d.ts.map +1 -1
  70. package/dist/lib/accounting-format.js +6 -255
  71. package/dist/lib/accounting-format.js.map +1 -1
  72. package/dist/lib/alibaba-auth.d.ts +14 -21
  73. package/dist/lib/alibaba-auth.d.ts.map +1 -1
  74. package/dist/lib/alibaba-auth.js +36 -149
  75. package/dist/lib/alibaba-auth.js.map +1 -1
  76. package/dist/lib/alibaba-coding-plan-local-quota.d.ts +1 -6
  77. package/dist/lib/alibaba-coding-plan-local-quota.d.ts.map +1 -1
  78. package/dist/lib/alibaba-coding-plan-local-quota.js +1 -1
  79. package/dist/lib/alibaba-coding-plan-local-quota.js.map +1 -1
  80. package/dist/lib/alibaba-token-plan.d.ts +18 -27
  81. package/dist/lib/alibaba-token-plan.d.ts.map +1 -1
  82. package/dist/lib/alibaba-token-plan.js +121 -285
  83. package/dist/lib/alibaba-token-plan.js.map +1 -1
  84. package/dist/lib/anthropic-auth.d.ts +3 -5
  85. package/dist/lib/anthropic-auth.d.ts.map +1 -1
  86. package/dist/lib/anthropic-auth.js +6 -9
  87. package/dist/lib/anthropic-auth.js.map +1 -1
  88. package/dist/lib/anthropic.d.ts +12 -37
  89. package/dist/lib/anthropic.d.ts.map +1 -1
  90. package/dist/lib/anthropic.js +348 -698
  91. package/dist/lib/anthropic.js.map +1 -1
  92. package/dist/lib/api-key-resolver.d.ts +165 -192
  93. package/dist/lib/api-key-resolver.d.ts.map +1 -1
  94. package/dist/lib/api-key-resolver.js +208 -234
  95. package/dist/lib/api-key-resolver.js.map +1 -1
  96. package/dist/lib/atomic-json.d.ts +4 -1
  97. package/dist/lib/atomic-json.d.ts.map +1 -1
  98. package/dist/lib/atomic-json.js +2 -3
  99. package/dist/lib/atomic-json.js.map +1 -1
  100. package/dist/lib/calendar-date.d.ts +15 -0
  101. package/dist/lib/calendar-date.d.ts.map +1 -0
  102. package/dist/lib/calendar-date.js +21 -0
  103. package/dist/lib/calendar-date.js.map +1 -0
  104. package/dist/lib/chutes.d.ts +0 -1
  105. package/dist/lib/chutes.d.ts.map +1 -1
  106. package/dist/lib/chutes.js +2 -4
  107. package/dist/lib/chutes.js.map +1 -1
  108. package/dist/lib/cli-reports.d.ts +15 -11
  109. package/dist/lib/cli-reports.d.ts.map +1 -1
  110. package/dist/lib/cli-reports.js +34 -107
  111. package/dist/lib/cli-reports.js.map +1 -1
  112. package/dist/lib/cli-show.d.ts +9 -22
  113. package/dist/lib/cli-show.d.ts.map +1 -1
  114. package/dist/lib/cli-show.js +104 -75
  115. package/dist/lib/cli-show.js.map +1 -1
  116. package/dist/lib/config-file-utils.d.ts +3 -15
  117. package/dist/lib/config-file-utils.d.ts.map +1 -1
  118. package/dist/lib/config-file-utils.js +4 -63
  119. package/dist/lib/config-file-utils.js.map +1 -1
  120. package/dist/lib/config-write-target.d.ts +4 -7
  121. package/dist/lib/config-write-target.d.ts.map +1 -1
  122. package/dist/lib/config-write-target.js +4 -18
  123. package/dist/lib/config-write-target.js.map +1 -1
  124. package/dist/lib/copilot.d.ts +29 -20
  125. package/dist/lib/copilot.d.ts.map +1 -1
  126. package/dist/lib/copilot.js +392 -649
  127. package/dist/lib/copilot.js.map +1 -1
  128. package/dist/lib/cursor-detection.d.ts +3 -3
  129. package/dist/lib/cursor-detection.d.ts.map +1 -1
  130. package/dist/lib/cursor-detection.js +44 -88
  131. package/dist/lib/cursor-detection.js.map +1 -1
  132. package/dist/lib/cursor-pricing.d.ts +71 -8
  133. package/dist/lib/cursor-pricing.d.ts.map +1 -1
  134. package/dist/lib/cursor-pricing.js +33 -125
  135. package/dist/lib/cursor-pricing.js.map +1 -1
  136. package/dist/lib/cursor-usage.d.ts +6 -4
  137. package/dist/lib/cursor-usage.d.ts.map +1 -1
  138. package/dist/lib/cursor-usage.js +27 -40
  139. package/dist/lib/cursor-usage.js.map +1 -1
  140. package/dist/lib/deepseek.d.ts +9 -17
  141. package/dist/lib/deepseek.d.ts.map +1 -1
  142. package/dist/lib/deepseek.js +24 -54
  143. package/dist/lib/deepseek.js.map +1 -1
  144. package/dist/lib/display-sanitize.d.ts +0 -8
  145. package/dist/lib/display-sanitize.d.ts.map +1 -1
  146. package/dist/lib/display-sanitize.js +0 -139
  147. package/dist/lib/display-sanitize.js.map +1 -1
  148. package/dist/lib/entries.d.ts +13 -239
  149. package/dist/lib/entries.d.ts.map +1 -1
  150. package/dist/lib/entries.js +1 -46
  151. package/dist/lib/entries.js.map +1 -1
  152. package/dist/lib/file-lock.d.ts +23 -0
  153. package/dist/lib/file-lock.d.ts.map +1 -0
  154. package/dist/lib/file-lock.js +122 -0
  155. package/dist/lib/file-lock.js.map +1 -0
  156. package/dist/lib/format-utils.d.ts +2 -82
  157. package/dist/lib/format-utils.d.ts.map +1 -1
  158. package/dist/lib/format-utils.js +2 -191
  159. package/dist/lib/format-utils.js.map +1 -1
  160. package/dist/lib/glm-coding-plan.d.ts +6 -5
  161. package/dist/lib/glm-coding-plan.d.ts.map +1 -1
  162. package/dist/lib/glm-coding-plan.js +19 -1
  163. package/dist/lib/glm-coding-plan.js.map +1 -1
  164. package/dist/lib/google-agy.d.ts +8 -40
  165. package/dist/lib/google-agy.d.ts.map +1 -1
  166. package/dist/lib/google-agy.js +88 -519
  167. package/dist/lib/google-agy.js.map +1 -1
  168. package/dist/lib/google-companion-credentials.d.ts +9 -40
  169. package/dist/lib/google-companion-credentials.d.ts.map +1 -1
  170. package/dist/lib/google-companion-credentials.js +167 -224
  171. package/dist/lib/google-companion-credentials.js.map +1 -1
  172. package/dist/lib/google-gemini-cli.d.ts +5 -38
  173. package/dist/lib/google-gemini-cli.d.ts.map +1 -1
  174. package/dist/lib/google-gemini-cli.js +71 -442
  175. package/dist/lib/google-gemini-cli.js.map +1 -1
  176. package/dist/lib/google-oauth-quota.d.ts +76 -0
  177. package/dist/lib/google-oauth-quota.d.ts.map +1 -0
  178. package/dist/lib/google-oauth-quota.js +297 -0
  179. package/dist/lib/google-oauth-quota.js.map +1 -0
  180. package/dist/lib/google-token-cache.d.ts +3 -5
  181. package/dist/lib/google-token-cache.d.ts.map +1 -1
  182. package/dist/lib/google-token-cache.js +2 -14
  183. package/dist/lib/google-token-cache.js.map +1 -1
  184. package/dist/lib/home-dir-display.d.ts.map +1 -1
  185. package/dist/lib/home-dir-display.js +21 -39
  186. package/dist/lib/home-dir-display.js.map +1 -1
  187. package/dist/lib/http.d.ts +4 -1
  188. package/dist/lib/http.d.ts.map +1 -1
  189. package/dist/lib/http.js +2 -1
  190. package/dist/lib/http.js.map +1 -1
  191. package/dist/lib/json-guards.d.ts +11 -0
  192. package/dist/lib/json-guards.d.ts.map +1 -0
  193. package/dist/lib/json-guards.js +25 -0
  194. package/dist/lib/json-guards.js.map +1 -0
  195. package/dist/lib/kilo.d.ts +0 -2
  196. package/dist/lib/kilo.d.ts.map +1 -1
  197. package/dist/lib/kilo.js +33 -116
  198. package/dist/lib/kilo.js.map +1 -1
  199. package/dist/lib/kimi-endpoints.d.ts +2 -2
  200. package/dist/lib/kimi-endpoints.d.ts.map +1 -1
  201. package/dist/lib/kimi-endpoints.js +1 -1
  202. package/dist/lib/kimi-endpoints.js.map +1 -1
  203. package/dist/lib/kimi.d.ts.map +1 -1
  204. package/dist/lib/kimi.js +40 -86
  205. package/dist/lib/kimi.js.map +1 -1
  206. package/dist/lib/maintainer-announcements.d.ts +4 -17
  207. package/dist/lib/maintainer-announcements.d.ts.map +1 -1
  208. package/dist/lib/maintainer-announcements.js +7 -44
  209. package/dist/lib/maintainer-announcements.js.map +1 -1
  210. package/dist/lib/maintainer-home-notice.d.ts +19 -0
  211. package/dist/lib/maintainer-home-notice.d.ts.map +1 -0
  212. package/dist/lib/maintainer-home-notice.js +92 -0
  213. package/dist/lib/maintainer-home-notice.js.map +1 -0
  214. package/dist/lib/mimo-config.d.ts +6 -9
  215. package/dist/lib/mimo-config.d.ts.map +1 -1
  216. package/dist/lib/mimo-config.js +43 -74
  217. package/dist/lib/mimo-config.js.map +1 -1
  218. package/dist/lib/mimo.d.ts +2 -5
  219. package/dist/lib/mimo.d.ts.map +1 -1
  220. package/dist/lib/mimo.js +57 -109
  221. package/dist/lib/mimo.js.map +1 -1
  222. package/dist/lib/minimax-endpoints.d.ts +2 -2
  223. package/dist/lib/minimax-endpoints.d.ts.map +1 -1
  224. package/dist/lib/minimax-endpoints.js +1 -1
  225. package/dist/lib/minimax-endpoints.js.map +1 -1
  226. package/dist/lib/modelsdev-pricing.d.ts +22 -16
  227. package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
  228. package/dist/lib/modelsdev-pricing.js +279 -560
  229. package/dist/lib/modelsdev-pricing.js.map +1 -1
  230. package/dist/lib/nanogpt.d.ts +6 -6
  231. package/dist/lib/nanogpt.d.ts.map +1 -1
  232. package/dist/lib/nanogpt.js +19 -72
  233. package/dist/lib/nanogpt.js.map +1 -1
  234. package/dist/lib/ollama-cloud.d.ts +3 -6
  235. package/dist/lib/ollama-cloud.d.ts.map +1 -1
  236. package/dist/lib/ollama-cloud.js +26 -37
  237. package/dist/lib/ollama-cloud.js.map +1 -1
  238. package/dist/lib/openai.d.ts +18 -29
  239. package/dist/lib/openai.d.ts.map +1 -1
  240. package/dist/lib/openai.js +108 -182
  241. package/dist/lib/openai.js.map +1 -1
  242. package/dist/lib/opencode-auth-sqlite.d.ts.map +1 -1
  243. package/dist/lib/opencode-auth-sqlite.js +22 -23
  244. package/dist/lib/opencode-auth-sqlite.js.map +1 -1
  245. package/dist/lib/opencode-auth.d.ts +17 -11
  246. package/dist/lib/opencode-auth.d.ts.map +1 -1
  247. package/dist/lib/opencode-auth.js +39 -46
  248. package/dist/lib/opencode-auth.js.map +1 -1
  249. package/dist/lib/opencode-config-editor.d.ts +3 -34
  250. package/dist/lib/opencode-config-editor.d.ts.map +1 -1
  251. package/dist/lib/opencode-config-editor.js +23 -142
  252. package/dist/lib/opencode-config-editor.js.map +1 -1
  253. package/dist/lib/opencode-config-providers.d.ts +4 -3
  254. package/dist/lib/opencode-config-providers.d.ts.map +1 -1
  255. package/dist/lib/opencode-config-providers.js +7 -11
  256. package/dist/lib/opencode-config-providers.js.map +1 -1
  257. package/dist/lib/opencode-config-read.d.ts +2 -1
  258. package/dist/lib/opencode-config-read.d.ts.map +1 -1
  259. package/dist/lib/opencode-config-read.js +3 -2
  260. package/dist/lib/opencode-config-read.js.map +1 -1
  261. package/dist/lib/opencode-console-auth.d.ts +2 -3
  262. package/dist/lib/opencode-console-auth.d.ts.map +1 -1
  263. package/dist/lib/opencode-console-auth.js +2 -2
  264. package/dist/lib/opencode-console-auth.js.map +1 -1
  265. package/dist/lib/opencode-go.d.ts.map +1 -1
  266. package/dist/lib/opencode-go.js +51 -79
  267. package/dist/lib/opencode-go.js.map +1 -1
  268. package/dist/lib/opencode-storage.d.ts +18 -3
  269. package/dist/lib/opencode-storage.d.ts.map +1 -1
  270. package/dist/lib/opencode-storage.js +134 -2
  271. package/dist/lib/opencode-storage.js.map +1 -1
  272. package/dist/lib/opencode-zen.d.ts +15 -12
  273. package/dist/lib/opencode-zen.d.ts.map +1 -1
  274. package/dist/lib/opencode-zen.js +139 -147
  275. package/dist/lib/opencode-zen.js.map +1 -1
  276. package/dist/lib/openrouter.d.ts.map +1 -1
  277. package/dist/lib/openrouter.js +1 -13
  278. package/dist/lib/openrouter.js.map +1 -1
  279. package/dist/lib/pricing-key.d.ts +48 -0
  280. package/dist/lib/pricing-key.d.ts.map +1 -0
  281. package/dist/lib/pricing-key.js +371 -0
  282. package/dist/lib/pricing-key.js.map +1 -0
  283. package/dist/lib/provider-metadata.d.ts +16 -20
  284. package/dist/lib/provider-metadata.d.ts.map +1 -1
  285. package/dist/lib/provider-metadata.js +69 -69
  286. package/dist/lib/provider-metadata.js.map +1 -1
  287. package/dist/lib/provider-model-matching.d.ts +2 -1
  288. package/dist/lib/provider-model-matching.d.ts.map +1 -1
  289. package/dist/lib/provider-registration.d.ts +1 -177
  290. package/dist/lib/provider-registration.d.ts.map +1 -1
  291. package/dist/lib/provider-registration.js +1 -163
  292. package/dist/lib/provider-registration.js.map +1 -1
  293. package/dist/lib/quota-dialog-commands.d.ts +87 -53
  294. package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
  295. package/dist/lib/quota-dialog-commands.js +259 -519
  296. package/dist/lib/quota-dialog-commands.js.map +1 -1
  297. package/dist/lib/quota-export-types.d.ts +29 -23
  298. package/dist/lib/quota-export-types.d.ts.map +1 -1
  299. package/dist/lib/quota-export.d.ts +16 -26
  300. package/dist/lib/quota-export.d.ts.map +1 -1
  301. package/dist/lib/quota-export.js +105 -147
  302. package/dist/lib/quota-export.js.map +1 -1
  303. package/dist/lib/quota-providers-local.d.ts +12 -8
  304. package/dist/lib/quota-providers-local.d.ts.map +1 -1
  305. package/dist/lib/quota-providers-local.js +150 -223
  306. package/dist/lib/quota-providers-local.js.map +1 -1
  307. package/dist/lib/quota-providers-remote.d.ts +3 -8
  308. package/dist/lib/quota-providers-remote.d.ts.map +1 -1
  309. package/dist/lib/quota-providers-remote.js +309 -449
  310. package/dist/lib/quota-providers-remote.js.map +1 -1
  311. package/dist/lib/quota-providers.d.ts +57 -15
  312. package/dist/lib/quota-providers.d.ts.map +1 -1
  313. package/dist/lib/quota-providers.js +157 -64
  314. package/dist/lib/quota-providers.js.map +1 -1
  315. package/dist/lib/quota-report-message.d.ts +23 -10
  316. package/dist/lib/quota-report-message.d.ts.map +1 -1
  317. package/dist/lib/quota-report-message.js +37 -13
  318. package/dist/lib/quota-report-message.js.map +1 -1
  319. package/dist/lib/quota-retry-wait.d.ts +14 -6
  320. package/dist/lib/quota-retry-wait.d.ts.map +1 -1
  321. package/dist/lib/quota-retry-wait.js +37 -39
  322. package/dist/lib/quota-retry-wait.js.map +1 -1
  323. package/dist/lib/quota-status.d.ts +50 -33
  324. package/dist/lib/quota-status.d.ts.map +1 -1
  325. package/dist/lib/quota-status.js +1113 -773
  326. package/dist/lib/quota-status.js.map +1 -1
  327. package/dist/lib/quota-telemetry.d.ts +7 -14
  328. package/dist/lib/quota-telemetry.d.ts.map +1 -1
  329. package/dist/lib/quota-telemetry.js +46 -97
  330. package/dist/lib/quota-telemetry.js.map +1 -1
  331. package/dist/lib/report-document.d.ts +5 -65
  332. package/dist/lib/report-document.d.ts.map +1 -1
  333. package/dist/lib/report-document.js +14 -167
  334. package/dist/lib/report-document.js.map +1 -1
  335. package/dist/lib/resolved-auth-identity.d.ts +1 -2
  336. package/dist/lib/resolved-auth-identity.d.ts.map +1 -1
  337. package/dist/lib/resolved-auth-identity.js +0 -4
  338. package/dist/lib/resolved-auth-identity.js.map +1 -1
  339. package/dist/lib/session-tokens.d.ts +19 -19
  340. package/dist/lib/session-tokens.d.ts.map +1 -1
  341. package/dist/lib/session-tokens.js +58 -44
  342. package/dist/lib/session-tokens.js.map +1 -1
  343. package/dist/lib/synthetic.d.ts +0 -1
  344. package/dist/lib/synthetic.d.ts.map +1 -1
  345. package/dist/lib/synthetic.js +43 -94
  346. package/dist/lib/synthetic.js.map +1 -1
  347. package/dist/lib/token-buckets.d.ts +0 -1
  348. package/dist/lib/token-buckets.d.ts.map +1 -1
  349. package/dist/lib/token-buckets.js +0 -3
  350. package/dist/lib/token-buckets.js.map +1 -1
  351. package/dist/lib/token-cost.d.ts +2 -1
  352. package/dist/lib/token-cost.d.ts.map +1 -1
  353. package/dist/lib/types.d.ts +25 -333
  354. package/dist/lib/types.d.ts.map +1 -1
  355. package/dist/lib/types.js +2 -70
  356. package/dist/lib/types.js.map +1 -1
  357. package/dist/lib/xai.d.ts +6 -6
  358. package/dist/lib/xai.d.ts.map +1 -1
  359. package/dist/lib/xai.js +51 -90
  360. package/dist/lib/xai.js.map +1 -1
  361. package/dist/plugin.d.ts +6 -3
  362. package/dist/plugin.d.ts.map +1 -1
  363. package/dist/plugin.js +315 -90
  364. package/dist/plugin.js.map +1 -1
  365. package/dist/providers/alibaba-coding-plan.d.ts +4 -0
  366. package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
  367. package/dist/providers/alibaba-coding-plan.js +47 -77
  368. package/dist/providers/alibaba-coding-plan.js.map +1 -1
  369. package/dist/providers/alibaba-token-plan.d.ts.map +1 -1
  370. package/dist/providers/alibaba-token-plan.js +34 -46
  371. package/dist/providers/alibaba-token-plan.js.map +1 -1
  372. package/dist/providers/anthropic.d.ts +2 -4
  373. package/dist/providers/anthropic.d.ts.map +1 -1
  374. package/dist/providers/anthropic.js +80 -162
  375. package/dist/providers/anthropic.js.map +1 -1
  376. package/dist/providers/cache-policies.d.ts +0 -2
  377. package/dist/providers/cache-policies.d.ts.map +1 -1
  378. package/dist/providers/cache-policies.js +38 -88
  379. package/dist/providers/cache-policies.js.map +1 -1
  380. package/dist/providers/chutes.d.ts +0 -3
  381. package/dist/providers/chutes.d.ts.map +1 -1
  382. package/dist/providers/chutes.js +16 -28
  383. package/dist/providers/chutes.js.map +1 -1
  384. package/dist/providers/contract.d.ts +128 -0
  385. package/dist/providers/contract.d.ts.map +1 -0
  386. package/dist/providers/contract.js +101 -0
  387. package/dist/providers/contract.js.map +1 -0
  388. package/dist/providers/copilot.d.ts.map +1 -1
  389. package/dist/providers/copilot.js +171 -175
  390. package/dist/providers/copilot.js.map +1 -1
  391. package/dist/providers/cursor.d.ts.map +1 -1
  392. package/dist/providers/cursor.js +56 -109
  393. package/dist/providers/cursor.js.map +1 -1
  394. package/dist/providers/deepseek.d.ts +1 -6
  395. package/dist/providers/deepseek.d.ts.map +1 -1
  396. package/dist/providers/deepseek.js +46 -81
  397. package/dist/providers/deepseek.js.map +1 -1
  398. package/dist/providers/glm-coding-plan.d.ts +8 -0
  399. package/dist/providers/glm-coding-plan.d.ts.map +1 -0
  400. package/dist/providers/glm-coding-plan.js +106 -0
  401. package/dist/providers/glm-coding-plan.js.map +1 -0
  402. package/dist/providers/google-agy.d.ts +0 -1
  403. package/dist/providers/google-agy.d.ts.map +1 -1
  404. package/dist/providers/google-agy.js +41 -192
  405. package/dist/providers/google-agy.js.map +1 -1
  406. package/dist/providers/google-gemini-cli.d.ts.map +1 -1
  407. package/dist/providers/google-gemini-cli.js +51 -151
  408. package/dist/providers/google-gemini-cli.js.map +1 -1
  409. package/dist/providers/google-oauth-provider.d.ts +39 -0
  410. package/dist/providers/google-oauth-provider.d.ts.map +1 -0
  411. package/dist/providers/google-oauth-provider.js +161 -0
  412. package/dist/providers/google-oauth-provider.js.map +1 -0
  413. package/dist/providers/kilo.d.ts +0 -3
  414. package/dist/providers/kilo.d.ts.map +1 -1
  415. package/dist/providers/kilo.js +69 -123
  416. package/dist/providers/kilo.js.map +1 -1
  417. package/dist/providers/kimi-code.d.ts +5 -0
  418. package/dist/providers/kimi-code.d.ts.map +1 -1
  419. package/dist/providers/kimi-code.js +91 -136
  420. package/dist/providers/kimi-code.js.map +1 -1
  421. package/dist/providers/mimo.d.ts.map +1 -1
  422. package/dist/providers/mimo.js +55 -94
  423. package/dist/providers/mimo.js.map +1 -1
  424. package/dist/providers/minimax-coding-plan.d.ts +2 -23
  425. package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
  426. package/dist/providers/minimax-coding-plan.js +161 -277
  427. package/dist/providers/minimax-coding-plan.js.map +1 -1
  428. package/dist/providers/nanogpt.d.ts +0 -3
  429. package/dist/providers/nanogpt.d.ts.map +1 -1
  430. package/dist/providers/nanogpt.js +61 -95
  431. package/dist/providers/nanogpt.js.map +1 -1
  432. package/dist/providers/ollama-cloud.d.ts +0 -6
  433. package/dist/providers/ollama-cloud.d.ts.map +1 -1
  434. package/dist/providers/ollama-cloud.js +86 -112
  435. package/dist/providers/ollama-cloud.js.map +1 -1
  436. package/dist/providers/openai.d.ts.map +1 -1
  437. package/dist/providers/openai.js +144 -166
  438. package/dist/providers/openai.js.map +1 -1
  439. package/dist/providers/opencode-go.d.ts.map +1 -1
  440. package/dist/providers/opencode-go.js +157 -199
  441. package/dist/providers/opencode-go.js.map +1 -1
  442. package/dist/providers/opencode-zen.d.ts.map +1 -1
  443. package/dist/providers/opencode-zen.js +100 -150
  444. package/dist/providers/opencode-zen.js.map +1 -1
  445. package/dist/providers/openrouter.d.ts +0 -3
  446. package/dist/providers/openrouter.d.ts.map +1 -1
  447. package/dist/providers/openrouter.js +26 -13
  448. package/dist/providers/openrouter.js.map +1 -1
  449. package/dist/providers/quota-providers.d.ts +7 -3
  450. package/dist/providers/quota-providers.d.ts.map +1 -1
  451. package/dist/providers/quota-providers.js +111 -217
  452. package/dist/providers/quota-providers.js.map +1 -1
  453. package/dist/providers/registry.d.ts.map +1 -1
  454. package/dist/providers/registry.js +1 -2
  455. package/dist/providers/registry.js.map +1 -1
  456. package/dist/providers/result-helpers.d.ts +10 -37
  457. package/dist/providers/result-helpers.d.ts.map +1 -1
  458. package/dist/providers/result-helpers.js +23 -56
  459. package/dist/providers/result-helpers.js.map +1 -1
  460. package/dist/providers/synthetic.d.ts +0 -3
  461. package/dist/providers/synthetic.d.ts.map +1 -1
  462. package/dist/providers/synthetic.js +16 -58
  463. package/dist/providers/synthetic.js.map +1 -1
  464. package/dist/providers/xai.d.ts +2 -1
  465. package/dist/providers/xai.d.ts.map +1 -1
  466. package/dist/providers/xai.js +49 -71
  467. package/dist/providers/xai.js.map +1 -1
  468. package/dist/rpc.d.ts +110 -38
  469. package/dist/rpc.d.ts.map +1 -1
  470. package/dist/rpc.js +125 -37
  471. package/dist/rpc.js.map +1 -1
  472. package/dist/settings/convert.d.ts +60 -0
  473. package/dist/settings/convert.d.ts.map +1 -0
  474. package/dist/settings/convert.js +473 -0
  475. package/dist/settings/convert.js.map +1 -0
  476. package/dist/settings/file.d.ts +89 -0
  477. package/dist/settings/file.d.ts.map +1 -0
  478. package/dist/settings/file.js +452 -0
  479. package/dist/settings/file.js.map +1 -0
  480. package/dist/settings/index.d.ts +10 -0
  481. package/dist/settings/index.d.ts.map +1 -0
  482. package/dist/settings/index.js +3 -0
  483. package/dist/settings/index.js.map +1 -0
  484. package/dist/settings/schema.d.ts +607 -0
  485. package/dist/settings/schema.d.ts.map +1 -0
  486. package/dist/settings/schema.js +479 -0
  487. package/dist/settings/schema.js.map +1 -0
  488. package/dist/tui/client.d.ts +86 -0
  489. package/dist/tui/client.d.ts.map +1 -0
  490. package/dist/tui/client.js +229 -0
  491. package/dist/tui/client.js.map +1 -0
  492. package/dist/tui/display.d.ts +127 -0
  493. package/dist/tui/display.d.ts.map +1 -0
  494. package/dist/tui/display.js +474 -0
  495. package/dist/tui/display.js.map +1 -0
  496. package/dist/tui/index.d.ts +21 -0
  497. package/dist/tui/index.d.ts.map +1 -0
  498. package/dist/tui/index.js +305 -0
  499. package/dist/tui/server-settings.d.ts +43 -0
  500. package/dist/tui/server-settings.d.ts.map +1 -0
  501. package/dist/tui/server-settings.js +233 -0
  502. package/dist/tui/server-settings.js.map +1 -0
  503. package/dist/tui/sidebar.d.ts +41 -0
  504. package/dist/tui/sidebar.d.ts.map +1 -0
  505. package/dist/tui/sidebar.js +148 -0
  506. package/dist/tui/status-line.d.ts +14 -0
  507. package/dist/tui/status-line.d.ts.map +1 -0
  508. package/dist/tui/status-line.js +225 -0
  509. package/dist/tui/theme.d.ts +41 -0
  510. package/dist/tui/theme.d.ts.map +1 -0
  511. package/dist/tui/theme.js +52 -0
  512. package/dist/tui/theme.js.map +1 -0
  513. package/dist/tui/toast-colors.d.ts +37 -0
  514. package/dist/tui/toast-colors.d.ts.map +1 -0
  515. package/dist/tui/toast-colors.js +77 -0
  516. package/dist/tui/toasts.d.ts +59 -0
  517. package/dist/tui/toasts.d.ts.map +1 -0
  518. package/dist/tui/toasts.js +148 -0
  519. package/dist/tui/toasts.js.map +1 -0
  520. package/dist/tui/window/drag.d.ts +26 -0
  521. package/dist/tui/window/drag.d.ts.map +1 -0
  522. package/dist/tui/window/drag.js +80 -0
  523. package/dist/tui/window/drag.js.map +1 -0
  524. package/dist/tui/window/limits.d.ts +15 -0
  525. package/dist/tui/window/limits.d.ts.map +1 -0
  526. package/dist/tui/window/limits.js +227 -0
  527. package/dist/tui/window/limits.js.map +1 -0
  528. package/dist/tui/window/rail.d.ts +21 -0
  529. package/dist/tui/window/rail.d.ts.map +1 -0
  530. package/dist/tui/window/rail.js +81 -0
  531. package/dist/tui/window/settings.d.ts +164 -0
  532. package/dist/tui/window/settings.d.ts.map +1 -0
  533. package/dist/tui/window/settings.js +1679 -0
  534. package/dist/tui/window/shell.d.ts +108 -0
  535. package/dist/tui/window/shell.d.ts.map +1 -0
  536. package/dist/tui/window/shell.js +1003 -0
  537. package/dist/tui/window/usage.d.ts +75 -0
  538. package/dist/tui/window/usage.d.ts.map +1 -0
  539. package/dist/tui/window/usage.js +928 -0
  540. package/dist/tui/window/views.d.ts +61 -0
  541. package/dist/tui/window/views.d.ts.map +1 -0
  542. package/dist/tui/window/views.js +242 -0
  543. package/dist/tui.d.ts +1 -5
  544. package/dist/tui.js +1 -894
  545. package/dist/view/columns.d.ts +15 -0
  546. package/dist/view/columns.d.ts.map +1 -0
  547. package/dist/view/columns.js +48 -0
  548. package/dist/view/columns.js.map +1 -0
  549. package/dist/view/format.d.ts +82 -0
  550. package/dist/view/format.d.ts.map +1 -0
  551. package/dist/view/format.js +201 -0
  552. package/dist/view/format.js.map +1 -0
  553. package/dist/view/quick-look.d.ts +28 -0
  554. package/dist/view/quick-look.d.ts.map +1 -0
  555. package/dist/view/quick-look.js +150 -0
  556. package/dist/view/quick-look.js.map +1 -0
  557. package/dist/view/select.d.ts +67 -0
  558. package/dist/view/select.d.ts.map +1 -0
  559. package/dist/view/select.js +87 -0
  560. package/dist/view/select.js.map +1 -0
  561. package/dist/view/text.d.ts +153 -0
  562. package/dist/view/text.d.ts.map +1 -0
  563. package/dist/view/text.js +642 -0
  564. package/dist/view/text.js.map +1 -0
  565. package/dist/view/usage.d.ts +86 -0
  566. package/dist/view/usage.d.ts.map +1 -0
  567. package/dist/view/usage.js +724 -0
  568. package/dist/view/usage.js.map +1 -0
  569. package/package.json +4 -6
  570. package/dist/lib/chutes-config.d.ts +0 -15
  571. package/dist/lib/chutes-config.d.ts.map +0 -1
  572. package/dist/lib/chutes-config.js +0 -28
  573. package/dist/lib/chutes-config.js.map +0 -1
  574. package/dist/lib/cli-status.d.ts +0 -8
  575. package/dist/lib/cli-status.d.ts.map +0 -1
  576. package/dist/lib/cli-status.js +0 -98
  577. package/dist/lib/cli-status.js.map +0 -1
  578. package/dist/lib/command-parsing.d.ts +0 -43
  579. package/dist/lib/command-parsing.d.ts.map +0 -1
  580. package/dist/lib/command-parsing.js +0 -103
  581. package/dist/lib/command-parsing.js.map +0 -1
  582. package/dist/lib/config.d.ts +0 -63
  583. package/dist/lib/config.d.ts.map +0 -1
  584. package/dist/lib/config.js +0 -1092
  585. package/dist/lib/config.js.map +0 -1
  586. package/dist/lib/deepseek-auth.d.ts +0 -15
  587. package/dist/lib/deepseek-auth.d.ts.map +0 -1
  588. package/dist/lib/deepseek-auth.js +0 -28
  589. package/dist/lib/deepseek-auth.js.map +0 -1
  590. package/dist/lib/format.d.ts +0 -25
  591. package/dist/lib/format.d.ts.map +0 -1
  592. package/dist/lib/format.js +0 -300
  593. package/dist/lib/format.js.map +0 -1
  594. package/dist/lib/google-agy-companion.d.ts +0 -8
  595. package/dist/lib/google-agy-companion.d.ts.map +0 -1
  596. package/dist/lib/google-agy-companion.js +0 -64
  597. package/dist/lib/google-agy-companion.js.map +0 -1
  598. package/dist/lib/google-gemini-cli-companion.d.ts +0 -8
  599. package/dist/lib/google-gemini-cli-companion.d.ts.map +0 -1
  600. package/dist/lib/google-gemini-cli-companion.js +0 -64
  601. package/dist/lib/google-gemini-cli-companion.js.map +0 -1
  602. package/dist/lib/grouped-entry-normalization.d.ts +0 -12
  603. package/dist/lib/grouped-entry-normalization.d.ts.map +0 -1
  604. package/dist/lib/grouped-entry-normalization.js +0 -124
  605. package/dist/lib/grouped-entry-normalization.js.map +0 -1
  606. package/dist/lib/grouped-header-format.d.ts +0 -5
  607. package/dist/lib/grouped-header-format.d.ts.map +0 -1
  608. package/dist/lib/grouped-header-format.js +0 -16
  609. package/dist/lib/grouped-header-format.js.map +0 -1
  610. package/dist/lib/init-installer.d.ts +0 -123
  611. package/dist/lib/init-installer.d.ts.map +0 -1
  612. package/dist/lib/init-installer.js +0 -1111
  613. package/dist/lib/init-installer.js.map +0 -1
  614. package/dist/lib/jsonc.d.ts +0 -17
  615. package/dist/lib/jsonc.d.ts.map +0 -1
  616. package/dist/lib/jsonc.js +0 -23
  617. package/dist/lib/jsonc.js.map +0 -1
  618. package/dist/lib/kilo-config.d.ts +0 -15
  619. package/dist/lib/kilo-config.d.ts.map +0 -1
  620. package/dist/lib/kilo-config.js +0 -27
  621. package/dist/lib/kilo-config.js.map +0 -1
  622. package/dist/lib/kimi-auth.d.ts +0 -49
  623. package/dist/lib/kimi-auth.d.ts.map +0 -1
  624. package/dist/lib/kimi-auth.js +0 -82
  625. package/dist/lib/kimi-auth.js.map +0 -1
  626. package/dist/lib/markdown-table.d.ts +0 -51
  627. package/dist/lib/markdown-table.d.ts.map +0 -1
  628. package/dist/lib/markdown-table.js +0 -179
  629. package/dist/lib/markdown-table.js.map +0 -1
  630. package/dist/lib/minimax-auth.d.ts +0 -62
  631. package/dist/lib/minimax-auth.d.ts.map +0 -1
  632. package/dist/lib/minimax-auth.js +0 -206
  633. package/dist/lib/minimax-auth.js.map +0 -1
  634. package/dist/lib/nanogpt-config.d.ts +0 -15
  635. package/dist/lib/nanogpt-config.d.ts.map +0 -1
  636. package/dist/lib/nanogpt-config.js +0 -31
  637. package/dist/lib/nanogpt-config.js.map +0 -1
  638. package/dist/lib/ollama-cloud-config.d.ts +0 -15
  639. package/dist/lib/ollama-cloud-config.d.ts.map +0 -1
  640. package/dist/lib/ollama-cloud-config.js +0 -27
  641. package/dist/lib/ollama-cloud-config.js.map +0 -1
  642. package/dist/lib/opencode-go-auth.d.ts +0 -16
  643. package/dist/lib/opencode-go-auth.d.ts.map +0 -1
  644. package/dist/lib/opencode-go-auth.js +0 -42
  645. package/dist/lib/opencode-go-auth.js.map +0 -1
  646. package/dist/lib/opencode-version.d.ts +0 -6
  647. package/dist/lib/opencode-version.d.ts.map +0 -1
  648. package/dist/lib/opencode-version.js +0 -26
  649. package/dist/lib/opencode-version.js.map +0 -1
  650. package/dist/lib/provider-add-command.d.ts +0 -35
  651. package/dist/lib/provider-add-command.d.ts.map +0 -1
  652. package/dist/lib/provider-add-command.js +0 -204
  653. package/dist/lib/provider-add-command.js.map +0 -1
  654. package/dist/lib/provider-add-json-v1-questionnaire.d.ts +0 -32
  655. package/dist/lib/provider-add-json-v1-questionnaire.d.ts.map +0 -1
  656. package/dist/lib/provider-add-json-v1-questionnaire.js +0 -336
  657. package/dist/lib/provider-add-json-v1-questionnaire.js.map +0 -1
  658. package/dist/lib/provider-add.d.ts +0 -21
  659. package/dist/lib/provider-add.d.ts.map +0 -1
  660. package/dist/lib/provider-add.js +0 -219
  661. package/dist/lib/provider-add.js.map +0 -1
  662. package/dist/lib/quota-accounting-projection.d.ts +0 -9
  663. package/dist/lib/quota-accounting-projection.d.ts.map +0 -1
  664. package/dist/lib/quota-accounting-projection.js +0 -254
  665. package/dist/lib/quota-accounting-projection.js.map +0 -1
  666. package/dist/lib/quota-columns.d.ts +0 -38
  667. package/dist/lib/quota-columns.d.ts.map +0 -1
  668. package/dist/lib/quota-columns.js +0 -129
  669. package/dist/lib/quota-columns.js.map +0 -1
  670. package/dist/lib/quota-command-format.d.ts +0 -34
  671. package/dist/lib/quota-command-format.d.ts.map +0 -1
  672. package/dist/lib/quota-command-format.js +0 -240
  673. package/dist/lib/quota-command-format.js.map +0 -1
  674. package/dist/lib/quota-dialog-command-specs.d.ts +0 -63
  675. package/dist/lib/quota-dialog-command-specs.d.ts.map +0 -1
  676. package/dist/lib/quota-dialog-command-specs.js +0 -145
  677. package/dist/lib/quota-dialog-command-specs.js.map +0 -1
  678. package/dist/lib/quota-entry-display.d.ts +0 -7
  679. package/dist/lib/quota-entry-display.d.ts.map +0 -1
  680. package/dist/lib/quota-entry-display.js +0 -59
  681. package/dist/lib/quota-entry-display.js.map +0 -1
  682. package/dist/lib/quota-exhaustion-projection.d.ts +0 -11
  683. package/dist/lib/quota-exhaustion-projection.d.ts.map +0 -1
  684. package/dist/lib/quota-exhaustion-projection.js +0 -105
  685. package/dist/lib/quota-exhaustion-projection.js.map +0 -1
  686. package/dist/lib/quota-format-style.d.ts +0 -21
  687. package/dist/lib/quota-format-style.d.ts.map +0 -1
  688. package/dist/lib/quota-format-style.js +0 -38
  689. package/dist/lib/quota-format-style.js.map +0 -1
  690. package/dist/lib/quota-render-data.d.ts +0 -102
  691. package/dist/lib/quota-render-data.d.ts.map +0 -1
  692. package/dist/lib/quota-render-data.js +0 -419
  693. package/dist/lib/quota-render-data.js.map +0 -1
  694. package/dist/lib/quota-reset-notifications.d.ts +0 -20
  695. package/dist/lib/quota-reset-notifications.d.ts.map +0 -1
  696. package/dist/lib/quota-reset-notifications.js +0 -331
  697. package/dist/lib/quota-reset-notifications.js.map +0 -1
  698. package/dist/lib/quota-runtime-context.d.ts +0 -54
  699. package/dist/lib/quota-runtime-context.d.ts.map +0 -1
  700. package/dist/lib/quota-runtime-context.js +0 -110
  701. package/dist/lib/quota-runtime-context.js.map +0 -1
  702. package/dist/lib/quota-state-codec.d.ts +0 -16
  703. package/dist/lib/quota-state-codec.d.ts.map +0 -1
  704. package/dist/lib/quota-state-codec.js +0 -412
  705. package/dist/lib/quota-state-codec.js.map +0 -1
  706. package/dist/lib/quota-state.d.ts +0 -28
  707. package/dist/lib/quota-state.d.ts.map +0 -1
  708. package/dist/lib/quota-state.js +0 -473
  709. package/dist/lib/quota-state.js.map +0 -1
  710. package/dist/lib/quota-stats-format.d.ts +0 -29
  711. package/dist/lib/quota-stats-format.d.ts.map +0 -1
  712. package/dist/lib/quota-stats-format.js +0 -459
  713. package/dist/lib/quota-stats-format.js.map +0 -1
  714. package/dist/lib/quota-stats.d.ts +0 -126
  715. package/dist/lib/quota-stats.d.ts.map +0 -1
  716. package/dist/lib/quota-stats.js +0 -695
  717. package/dist/lib/quota-stats.js.map +0 -1
  718. package/dist/lib/quota-surface-data.d.ts +0 -21
  719. package/dist/lib/quota-surface-data.d.ts.map +0 -1
  720. package/dist/lib/quota-surface-data.js +0 -362
  721. package/dist/lib/quota-surface-data.js.map +0 -1
  722. package/dist/lib/scoped-update-migration.d.ts +0 -103
  723. package/dist/lib/scoped-update-migration.d.ts.map +0 -1
  724. package/dist/lib/scoped-update-migration.js +0 -344
  725. package/dist/lib/scoped-update-migration.js.map +0 -1
  726. package/dist/lib/scoped-update.d.ts +0 -77
  727. package/dist/lib/scoped-update.d.ts.map +0 -1
  728. package/dist/lib/scoped-update.js +0 -590
  729. package/dist/lib/scoped-update.js.map +0 -1
  730. package/dist/lib/session-tokens-format.d.ts +0 -36
  731. package/dist/lib/session-tokens-format.d.ts.map +0 -1
  732. package/dist/lib/session-tokens-format.js +0 -111
  733. package/dist/lib/session-tokens-format.js.map +0 -1
  734. package/dist/lib/synthetic-config.d.ts +0 -15
  735. package/dist/lib/synthetic-config.d.ts.map +0 -1
  736. package/dist/lib/synthetic-config.js +0 -28
  737. package/dist/lib/synthetic-config.js.map +0 -1
  738. package/dist/lib/toast-format-grouped.d.ts +0 -25
  739. package/dist/lib/toast-format-grouped.d.ts.map +0 -1
  740. package/dist/lib/toast-format-grouped.js +0 -296
  741. package/dist/lib/toast-format-grouped.js.map +0 -1
  742. package/dist/lib/tui-compact-format.d.ts +0 -10
  743. package/dist/lib/tui-compact-format.d.ts.map +0 -1
  744. package/dist/lib/tui-compact-format.js +0 -460
  745. package/dist/lib/tui-compact-format.js.map +0 -1
  746. package/dist/lib/tui-panel-state.d.ts +0 -15
  747. package/dist/lib/tui-panel-state.d.ts.map +0 -1
  748. package/dist/lib/tui-panel-state.js +0 -2
  749. package/dist/lib/tui-panel-state.js.map +0 -1
  750. package/dist/lib/tui-prompt-bar-format.d.ts +0 -25
  751. package/dist/lib/tui-prompt-bar-format.d.ts.map +0 -1
  752. package/dist/lib/tui-prompt-bar-format.js +0 -206
  753. package/dist/lib/tui-prompt-bar-format.js.map +0 -1
  754. package/dist/lib/tui-sidebar-format.d.ts +0 -13
  755. package/dist/lib/tui-sidebar-format.d.ts.map +0 -1
  756. package/dist/lib/tui-sidebar-format.js +0 -34
  757. package/dist/lib/tui-sidebar-format.js.map +0 -1
  758. package/dist/lib/zai-auth.d.ts +0 -15
  759. package/dist/lib/zai-auth.d.ts.map +0 -1
  760. package/dist/lib/zai-auth.js +0 -37
  761. package/dist/lib/zai-auth.js.map +0 -1
  762. package/dist/lib/zai.d.ts +0 -5
  763. package/dist/lib/zai.d.ts.map +0 -1
  764. package/dist/lib/zai.js +0 -14
  765. package/dist/lib/zai.js.map +0 -1
  766. package/dist/lib/zhipu-auth.d.ts +0 -15
  767. package/dist/lib/zhipu-auth.d.ts.map +0 -1
  768. package/dist/lib/zhipu-auth.js +0 -42
  769. package/dist/lib/zhipu-auth.js.map +0 -1
  770. package/dist/lib/zhipu.d.ts +0 -5
  771. package/dist/lib/zhipu.d.ts.map +0 -1
  772. package/dist/lib/zhipu.js +0 -13
  773. package/dist/lib/zhipu.js.map +0 -1
  774. package/dist/providers/glm-coding-plan-provider.d.ts +0 -56
  775. package/dist/providers/glm-coding-plan-provider.d.ts.map +0 -1
  776. package/dist/providers/glm-coding-plan-provider.js +0 -115
  777. package/dist/providers/glm-coding-plan-provider.js.map +0 -1
  778. package/dist/providers/google-account-format.d.ts +0 -7
  779. package/dist/providers/google-account-format.d.ts.map +0 -1
  780. package/dist/providers/google-account-format.js +0 -52
  781. package/dist/providers/google-account-format.js.map +0 -1
  782. package/dist/providers/zai.d.ts +0 -2
  783. package/dist/providers/zai.d.ts.map +0 -1
  784. package/dist/providers/zai.js +0 -24
  785. package/dist/providers/zai.js.map +0 -1
  786. package/dist/providers/zhipu.d.ts +0 -2
  787. package/dist/providers/zhipu.d.ts.map +0 -1
  788. package/dist/providers/zhipu.js +0 -21
  789. package/dist/providers/zhipu.js.map +0 -1
  790. package/dist/tui-v2.d.ts +0 -5
  791. package/dist/tui-v2.d.ts.map +0 -1
  792. package/dist/tui-v2.jsx +0 -624
  793. package/dist/tui-v2.jsx.map +0 -1
  794. package/dist/tui.d.ts.map +0 -1
@@ -0,0 +1,563 @@
1
+ /**
2
+ * The server's quota store. It keeps the last known rows of every provider (in memory and in
3
+ * one snapshot file), refreshes them in the background, and tells subscribers when they change.
4
+ *
5
+ * - `snapshot()` answers at once from what is known; when a provider is due it starts a
6
+ * background refresh.
7
+ * - Refreshes are single-flight per provider and keep a minimum interval (30 s after a turn,
8
+ * none for a manual or retry refresh); failures back off from 1 to 15 minutes, or until the
9
+ * provider's own retry time.
10
+ * - Every snapshot, refresh, login-change and settings-change pass is one operation: it reads
11
+ * the providers and who each one is signed in as once, and keeps both to its end. A login or
12
+ * settings change starts a new generation: an operation of an older one stores nothing and
13
+ * tells subscribers nothing, and a snapshot or refresh it was answering answers with the
14
+ * providers and rows of the new one.
15
+ * - Rows and reset notices belong to an identity (account plus provider settings). Those of
16
+ * another identity are never shown; those whose identity can't be saved stay in memory and
17
+ * go on a login change.
18
+ * - Rows also carry their login. A failed refresh keeps the last good rows and records the
19
+ * error; when one of several logins fails, that login keeps its last rows. Logins that share
20
+ * an account name are numbered here ("Pro", "Pro 2"), by login, so the numbers stay put;
21
+ * numbers skip names other rows already have.
22
+ * - When a quota window resets between two checks, a reset notice is recorded once.
23
+ * - A fetch may bring how to write its provider's part of the export file. The store writes it
24
+ * from the check's rows as shown (numbered like the snapshot) and the error it records, and
25
+ * keeps the last check's part in memory only, never in the file.
26
+ * - Subscribers hear of every change: a fetch, the rows read from the file at the start, and a
27
+ * change in which providers are on.
28
+ * - Reads from OpenCode and provider fetches have time limits, so `dispose` always ends.
29
+ */
30
+ import { createHash, randomUUID } from "node:crypto";
31
+ import { classifyError } from "./errors.js";
32
+ import { joinNotices, readSavedState, rowSlot, writeSavedState, } from "./persist.js";
33
+ import { WINDOWS } from "./windows.js";
34
+ const TURN_MIN_INTERVAL_MS = 30_000;
35
+ const BACKOFF_FIRST_MS = 60_000;
36
+ const BACKOFF_MAX_MS = 15 * 60_000;
37
+ /** A reset notice stays in snapshots this long; each TUI shows it once. */
38
+ const RESET_NOTICE_KEEP_MS = 60 * 60_000;
39
+ /** A window that reset longer ago than this when we noticed gets no notice. */
40
+ const RESET_NOTICE_MAX_LATENESS_MS = 24 * 60 * 60_000;
41
+ /** Reading the providers or a login from OpenCode. */
42
+ const READ_TIMEOUT_MS = 15_000;
43
+ /** One provider fetch; the TUI waits up to 60 s for an RPC answer. */
44
+ const FETCH_TIMEOUT_MS = 60_000;
45
+ function hashText(text, length) {
46
+ return createHash("sha256").update(text).digest("hex").slice(0, length);
47
+ }
48
+ function resolvedKey(providerId, identity) {
49
+ const hash = hashText(identity.key, 32);
50
+ return {
51
+ key: `${providerId}|${identity.persist ? hash : `memory-${hash}`}`,
52
+ persist: identity.persist,
53
+ };
54
+ }
55
+ /** `promise`, or a rejection with `message` once `ms` have passed. */
56
+ function withTimeout(promise, ms, message) {
57
+ let timer;
58
+ const timeout = new Promise((_, reject) => {
59
+ timer = setTimeout(() => reject(new Error(message)), ms);
60
+ });
61
+ return Promise.race([promise, timeout]).finally(() => clearTimeout(timer));
62
+ }
63
+ function backoffMs(failures) {
64
+ return Math.min(BACKOFF_MAX_MS, BACKOFF_FIRST_MS * 2 ** (failures - 1));
65
+ }
66
+ function isDue(entry, reason, minIntervalMs, nowMs) {
67
+ if (reason === "manual" || reason === "retry")
68
+ return true;
69
+ if (entry?.checkedAtMs === undefined || entry.checkedAtMs > nowMs)
70
+ return true;
71
+ // The one exception to the configured minimum: a model turn just used quota, so it may
72
+ // refresh 30 s after the last check even when `minIntervalMs` is longer.
73
+ let waitMs = reason === "turn" ? Math.min(minIntervalMs, TURN_MIN_INTERVAL_MS) : minIntervalMs;
74
+ if (entry.failures > 0)
75
+ waitMs = Math.max(waitMs, backoffMs(entry.failures));
76
+ if (nowMs - entry.checkedAtMs < waitMs)
77
+ return false;
78
+ return entry.error?.retryAtMs === undefined || nowMs >= entry.error.retryAtMs;
79
+ }
80
+ /** Each fetched row with its login, shortened to a hash of the keyed id it arrives as. */
81
+ function loginRows(result) {
82
+ return result.rows.map((row, index) => {
83
+ const login = result.rowLogins?.[index] ?? "";
84
+ return { login: login ? hashText(login, 16) : "", row };
85
+ });
86
+ }
87
+ /**
88
+ * The rows as shown. Logins that share an account name (or have none) are told apart: each
89
+ * login after the first (by login key) gets " 2", " 3"... on all its rows ("Account 2" without
90
+ * a name), skipping names that rows already have or got. Numbering by login keeps a login's
91
+ * number while another login fails.
92
+ */
93
+ function shownRows(rows) {
94
+ const loginsByAccount = new Map();
95
+ for (const { login, row } of rows) {
96
+ const logins = loginsByAccount.get(row.account ?? "") ?? [];
97
+ if (!logins.includes(login))
98
+ logins.push(login);
99
+ loginsByAccount.set(row.account ?? "", logins);
100
+ }
101
+ const taken = new Set(loginsByAccount.keys());
102
+ /** The shown account per `${account}\u001f${login}`. */
103
+ const shown = new Map();
104
+ for (const [account, logins] of [...loginsByAccount].sort(([a], [b]) => (a < b ? -1 : 1))) {
105
+ let number = 1;
106
+ for (const login of logins.sort().slice(1)) {
107
+ let name;
108
+ do {
109
+ number += 1;
110
+ name = account ? `${account} ${number}` : `Account ${number}`;
111
+ } while (taken.has(name));
112
+ taken.add(name);
113
+ shown.set(`${account}\u001f${login}`, name);
114
+ }
115
+ }
116
+ return rows.map(({ login, row }) => {
117
+ const account = shown.get(`${row.account ?? ""}\u001f${login}`);
118
+ return account === undefined ? row : { ...row, account };
119
+ });
120
+ }
121
+ /** Rows by slot (id, account, login); a slot that appears twice can't be matched. */
122
+ function rowsBySlot(rows) {
123
+ const bySlot = new Map();
124
+ for (const row of rows) {
125
+ const slot = rowSlot(row);
126
+ bySlot.set(slot, bySlot.has(slot) ? null : row);
127
+ }
128
+ return bySlot;
129
+ }
130
+ /**
131
+ * True when `before` (its reset time first seen at `observedAtMs`, before that time) has reset
132
+ * by now: the reset time passed less than a day ago and the new row has a later reset and more
133
+ * left.
134
+ */
135
+ function didReset(before, after, observedAtMs, nowMs) {
136
+ const resetMs = Date.parse(before.resetsAt ?? "");
137
+ const nextResetMs = Date.parse(after.resetsAt ?? "");
138
+ if (!Number.isFinite(resetMs) || !Number.isFinite(nextResetMs))
139
+ return false;
140
+ if (before.percentRemaining === undefined || after.percentRemaining === undefined)
141
+ return false;
142
+ const lateMs = nowMs - resetMs;
143
+ return (observedAtMs <= resetMs &&
144
+ lateMs >= 0 &&
145
+ lateMs <= RESET_NOTICE_MAX_LATENESS_MS &&
146
+ nextResetMs > resetMs &&
147
+ nextResetMs > nowMs &&
148
+ after.percentRemaining > before.percentRemaining &&
149
+ before.percentRemaining < 100);
150
+ }
151
+ /**
152
+ * Reset notices for `rows` (the new rows of `previous`'s entry), with their shown accounts.
153
+ * A notice's id names its row's slot (id, account, login), so each login's reset is one notice.
154
+ */
155
+ function findResets(previous, rows, nowMs) {
156
+ const before = rowsBySlot(previous.rows);
157
+ const after = rowsBySlot(rows);
158
+ const shown = shownRows(rows);
159
+ const notices = [];
160
+ rows.forEach((current, index) => {
161
+ const slot = rowSlot(current);
162
+ const old = before.get(slot)?.row;
163
+ const { row } = current;
164
+ if (!old || after.get(slot) === null)
165
+ return;
166
+ if (row.type !== "quota" || !row.window || !WINDOWS[row.window].resets)
167
+ return;
168
+ const observedAtMs = previous.resetSeenAtMs[slot] ?? previous.okAtMs;
169
+ if (observedAtMs === undefined || !didReset(old, row, observedAtMs, nowMs))
170
+ return;
171
+ const account = shown[index]?.account;
172
+ notices.push({
173
+ id: `${row.id}|${row.account ?? ""}|${current.login}|${old.resetsAt}`,
174
+ rowId: row.id,
175
+ providerId: row.providerId,
176
+ ...(account === undefined ? {} : { account }),
177
+ label: row.label,
178
+ window: row.window,
179
+ percentRemaining: row.percentRemaining,
180
+ atMs: nowMs,
181
+ });
182
+ });
183
+ return notices;
184
+ }
185
+ /**
186
+ * When each row's reset time was first seen. A provider that repeats a reset time already past
187
+ * keeps the earlier observation, so the refill it reports later still counts as a reset.
188
+ */
189
+ function resetSeenTimes(previous, rows, nowMs) {
190
+ const before = rowsBySlot(previous?.rows ?? []);
191
+ const seen = {};
192
+ for (const current of rows) {
193
+ if (!current.row.resetsAt)
194
+ continue;
195
+ const slot = rowSlot(current);
196
+ const earlier = previous?.resetSeenAtMs[slot];
197
+ const sameReset = before.get(slot)?.row.resetsAt === current.row.resetsAt;
198
+ seen[slot] = earlier !== undefined && sameReset ? earlier : nowMs;
199
+ }
200
+ return seen;
201
+ }
202
+ function errorMessage(error) {
203
+ return error instanceof Error ? error.message : String(error);
204
+ }
205
+ export function createQuotaStore(deps) {
206
+ const now = deps.now ?? Date.now;
207
+ const log = deps.log ?? ((message) => console.warn(`[opencode-quota] ${message}`));
208
+ const timeouts = deps.timeouts ?? { readMs: READ_TIMEOUT_MS, fetchMs: FETCH_TIMEOUT_MS };
209
+ const entries = new Map();
210
+ const inFlight = new Map();
211
+ /** Running fetches per provider (an old one may still run after a login change). */
212
+ const fetching = new Map();
213
+ const listeners = new Set();
214
+ /** Running operations and background refreshes; `dispose` waits for them. */
215
+ const tasks = new Set();
216
+ /** Bumped on every login change; operations of an older generation are stale. */
217
+ let generation = 0;
218
+ let disposed = false;
219
+ let loaded;
220
+ let writing;
221
+ let writeAgain = false;
222
+ /** Names this store in its snapshots, so a TUI can tell a restarted server apart. */
223
+ const serverId = randomUUID();
224
+ /** The last snapshot's revision; each next snapshot gets one more. */
225
+ let revision = 0;
226
+ /** The provider ids subscribers last heard of; undefined until the first snapshot. */
227
+ let heardProviders;
228
+ function track(promise) {
229
+ tasks.add(promise);
230
+ promise
231
+ .finally(() => {
232
+ tasks.delete(promise);
233
+ })
234
+ .catch(() => { });
235
+ return promise;
236
+ }
237
+ /** Runs one operation as a tracked task, from before its first read; none after dispose. */
238
+ function start(work) {
239
+ if (disposed)
240
+ return Promise.reject(new Error("the quota store is disposed"));
241
+ return track(work());
242
+ }
243
+ function isCurrent(operation) {
244
+ return operation.generation === generation;
245
+ }
246
+ function adopt(saved) {
247
+ for (const [key, entry] of saved.entries) {
248
+ const ours = entries.get(key);
249
+ if (!ours || (ours.checkedAtMs ?? 0) < (entry.checkedAtMs ?? 0)) {
250
+ entries.set(key, { ...entry, persist: true });
251
+ }
252
+ else {
253
+ ours.notices = joinNotices(ours.notices, entry.notices);
254
+ }
255
+ }
256
+ }
257
+ function load() {
258
+ loaded ??= deps.file ? readSavedState(deps.file).then(adopt) : Promise.resolve();
259
+ return loaded;
260
+ }
261
+ async function writeFile(file) {
262
+ const saved = new Map();
263
+ for (const [key, { persist: keep, exportPart: _memoryOnly, ...entry }] of entries) {
264
+ if (keep)
265
+ saved.set(key, entry);
266
+ }
267
+ try {
268
+ const options = { nowMs: now(), noticeMaxAgeMs: RESET_NOTICE_KEEP_MS };
269
+ adopt(await writeSavedState(file, { entries: saved }, options));
270
+ }
271
+ catch (error) {
272
+ log(`could not save the quota snapshot: ${errorMessage(error)}`);
273
+ }
274
+ }
275
+ /** Writes the file soon; writes asked for while one runs are joined into one more write. */
276
+ function persist() {
277
+ const file = deps.file;
278
+ if (!file)
279
+ return;
280
+ if (writing) {
281
+ writeAgain = true;
282
+ return;
283
+ }
284
+ writing = writeFile(file).finally(() => {
285
+ writing = undefined;
286
+ if (writeAgain) {
287
+ writeAgain = false;
288
+ persist();
289
+ }
290
+ });
291
+ }
292
+ async function flush() {
293
+ while (writing)
294
+ await writing;
295
+ }
296
+ /** Who `provider` is signed in as now; unknown (memory only) when that can't be read. */
297
+ async function resolveKey(provider) {
298
+ try {
299
+ const message = `reading the ${provider.id} login timed out`;
300
+ return resolvedKey(provider.id, await withTimeout(provider.identity(), timeouts.readMs, message));
301
+ }
302
+ catch {
303
+ return resolvedKey(provider.id, { key: "unknown", persist: false });
304
+ }
305
+ }
306
+ /** Starts an operation: loads the file once, reads the providers and who each one is. */
307
+ async function prepare() {
308
+ const startedIn = generation;
309
+ await load();
310
+ const message = "reading the quota providers timed out";
311
+ const source = await withTimeout(deps.source(), timeouts.readMs, message);
312
+ const keys = new Map();
313
+ await Promise.all(source.providers.map(async (provider) => {
314
+ keys.set(provider.id, await resolveKey(provider));
315
+ }));
316
+ const operation = { generation: startedIn, source, keys };
317
+ // The rows read from the file, or a provider turned on or off, are news to subscribers.
318
+ if (providerIdsOf(operation) !== heardProviders)
319
+ emit(operation);
320
+ return operation;
321
+ }
322
+ /** The snapshot an operation sees; a stale one shows no rows (whose they are is unknown). */
323
+ function buildSnapshot(operation, model) {
324
+ const nowMs = now();
325
+ const current = isCurrent(operation);
326
+ const resetNotices = [];
327
+ const providers = operation.source.providers.map((provider) => {
328
+ const key = current ? operation.keys.get(provider.id)?.key : undefined;
329
+ const entry = key === undefined ? undefined : entries.get(key);
330
+ for (const notice of entry?.notices ?? []) {
331
+ if (nowMs - notice.atMs <= RESET_NOTICE_KEEP_MS)
332
+ resetNotices.push(notice);
333
+ }
334
+ return {
335
+ providerId: provider.id,
336
+ label: provider.label,
337
+ rows: shownRows(entry?.rows ?? []),
338
+ ...(entry?.okAtMs === undefined ? {} : { okAtMs: entry.okAtMs }),
339
+ ...(entry?.checkedAtMs === undefined ? {} : { checkedAtMs: entry.checkedAtMs }),
340
+ ...(entry?.error === undefined ? {} : { error: entry.error }),
341
+ refreshing: fetching.has(provider.id),
342
+ debug: entry?.debug ?? [],
343
+ ...(entry?.exportPart === undefined ? {} : { exportPart: entry.exportPart }),
344
+ };
345
+ });
346
+ revision += 1;
347
+ const snapshot = {
348
+ version: 6,
349
+ providers,
350
+ resetNotices,
351
+ generatedAtMs: nowMs,
352
+ serverId,
353
+ revision,
354
+ };
355
+ const { providerIdsForModel, rowPrefixesForModel } = operation.source;
356
+ if (model && (model.id || model.providerID) && providerIdsForModel) {
357
+ const shown = new Set(providers.map((provider) => provider.providerId));
358
+ snapshot.currentModelProviderIds = providerIdsForModel(model).filter((id) => shown.has(id));
359
+ if (rowPrefixesForModel)
360
+ snapshot.currentModelRowPrefixes = rowPrefixesForModel(model);
361
+ }
362
+ return snapshot;
363
+ }
364
+ function providerIdsOf(operation) {
365
+ return JSON.stringify(operation.source.providers.map((provider) => provider.id));
366
+ }
367
+ function emit(operation) {
368
+ if (listeners.size === 0 || !isCurrent(operation))
369
+ return;
370
+ heardProviders = providerIdsOf(operation);
371
+ const snapshot = buildSnapshot(operation);
372
+ for (const listener of listeners) {
373
+ try {
374
+ listener(snapshot);
375
+ }
376
+ catch (error) {
377
+ log(`a quota snapshot subscriber failed: ${errorMessage(error)}`);
378
+ }
379
+ }
380
+ }
381
+ function record(provider, where, result) {
382
+ const nowMs = now();
383
+ const previous = entries.get(where.key);
384
+ const fresh = loginRows(result);
385
+ const gotRows = fresh.length > 0;
386
+ const error = result.error ?? (gotRows ? undefined : { code: "no_data" });
387
+ // With an error, the logins that did not answer keep their last rows.
388
+ const answered = new Set(fresh.map((row) => row.login));
389
+ const kept = gotRows && result.error
390
+ ? (previous?.rows ?? []).filter((row) => !answered.has(row.login))
391
+ : [];
392
+ const rows = gotRows ? [...fresh, ...kept] : (previous?.rows ?? []);
393
+ const found = gotRows && previous ? findResets(previous, rows, nowMs) : [];
394
+ const notices = joinNotices((previous?.notices ?? []).filter((notice) => nowMs - notice.atMs <= RESET_NOTICE_KEEP_MS), found);
395
+ const okAtMs = gotRows ? nowMs : previous?.okAtMs;
396
+ // The check's own rows, numbered among the kept ones as the snapshot numbers them.
397
+ const exportPart = result.buildExportPart?.({
398
+ rows: shownRows(rows).slice(0, fresh.length),
399
+ ...(error === undefined ? {} : { error }),
400
+ checkedAtMs: nowMs,
401
+ });
402
+ entries.set(where.key, {
403
+ providerId: provider.id,
404
+ persist: where.persist,
405
+ rows,
406
+ ...(okAtMs === undefined ? {} : { okAtMs }),
407
+ checkedAtMs: nowMs,
408
+ ...(error === undefined ? {} : { error }),
409
+ // Any error backs off, also when only one of several logins failed.
410
+ failures: error === undefined ? 0 : (previous?.failures ?? 0) + 1,
411
+ debug: result.debug,
412
+ ...(exportPart === undefined ? {} : { exportPart }),
413
+ notices,
414
+ resetSeenAtMs: gotRows
415
+ ? resetSeenTimes(previous, rows, nowMs)
416
+ : (previous?.resetSeenAtMs ?? {}),
417
+ });
418
+ persist();
419
+ }
420
+ async function fetchProvider(provider) {
421
+ fetching.set(provider.id, (fetching.get(provider.id) ?? 0) + 1);
422
+ try {
423
+ const message = `Request timeout after ${Math.round(timeouts.fetchMs / 1000)}s`;
424
+ return await withTimeout(provider.fetch(), timeouts.fetchMs, message);
425
+ }
426
+ catch (error) {
427
+ return { rows: [], error: classifyError(errorMessage(error), now()), debug: [] };
428
+ }
429
+ finally {
430
+ const left = (fetching.get(provider.id) ?? 1) - 1;
431
+ if (left > 0)
432
+ fetching.set(provider.id, left);
433
+ else
434
+ fetching.delete(provider.id);
435
+ }
436
+ }
437
+ async function refreshProviderNow(operation, provider, reason) {
438
+ const where = operation.keys.get(provider.id);
439
+ if (!where)
440
+ return;
441
+ const minIntervalMs = provider.minIntervalMs ?? operation.source.minIntervalMs;
442
+ if (!isDue(entries.get(where.key), reason, minIntervalMs, now()))
443
+ return;
444
+ const result = await fetchProvider(provider);
445
+ // A fetch is stored only under the account it read. A login change (new generation) or
446
+ // another account now (same generation) drops its answer.
447
+ if (!isCurrent(operation))
448
+ return;
449
+ const after = await resolveKey(provider);
450
+ if (!isCurrent(operation))
451
+ return;
452
+ if (after.key !== where.key) {
453
+ operation.keys.set(provider.id, after);
454
+ return;
455
+ }
456
+ record(provider, where, result);
457
+ emit(operation);
458
+ }
459
+ function refreshProvider(operation, provider, reason) {
460
+ // A stale operation never joins or starts a refresh: one of the new generation would join
461
+ // its run, which fetches nothing.
462
+ if (disposed || !isCurrent(operation))
463
+ return Promise.resolve();
464
+ const running = inFlight.get(provider.id);
465
+ if (running)
466
+ return running;
467
+ const run = refreshProviderNow(operation, provider, reason).finally(() => {
468
+ if (inFlight.get(provider.id) === run)
469
+ inFlight.delete(provider.id);
470
+ });
471
+ inFlight.set(provider.id, run);
472
+ return run;
473
+ }
474
+ async function runRefresh(operation, options) {
475
+ const providers = options.providerIds
476
+ ? operation.source.providers.filter((provider) => options.providerIds?.includes(provider.id))
477
+ : operation.source.providers;
478
+ await Promise.all(providers.map((provider) => refreshProvider(operation, provider, options.reason)));
479
+ }
480
+ /** An operation of the current generation: a login or settings change meanwhile reads again. */
481
+ async function prepareCurrent() {
482
+ for (;;) {
483
+ const operation = await prepare();
484
+ if (isCurrent(operation))
485
+ return operation;
486
+ }
487
+ }
488
+ /**
489
+ * Starts a new generation: running operations store and tell nothing more, and a new pass
490
+ * reads the providers and logins, tells subscribers, then refreshes for `reason`.
491
+ */
492
+ function supersede(reason, failure) {
493
+ generation += 1;
494
+ inFlight.clear();
495
+ // Subscribers see the new providers and rows (or none) before any fetch, then fresh ones.
496
+ start(async () => {
497
+ const operation = await prepare();
498
+ emit(operation);
499
+ await runRefresh(operation, { reason });
500
+ }).catch((error) => {
501
+ log(`${failure}: ${errorMessage(error)}`);
502
+ });
503
+ }
504
+ return {
505
+ snapshot(options = {}) {
506
+ return start(async () => {
507
+ const operation = await prepareCurrent();
508
+ if (options.refresh !== false) {
509
+ track(runRefresh(operation, { reason: "poll" })).catch((error) => {
510
+ log(`background quota refresh failed: ${errorMessage(error)}`);
511
+ });
512
+ }
513
+ return buildSnapshot(operation, options.model);
514
+ });
515
+ },
516
+ refresh(options) {
517
+ return start(async () => {
518
+ const operation = await prepareCurrent();
519
+ await runRefresh(operation, options);
520
+ await flush();
521
+ // A login or settings change dropped what this pass fetched: the answer shows the
522
+ // providers and rows of now, and the new pass's rows follow as events.
523
+ const answering = isCurrent(operation) ? operation : await prepareCurrent();
524
+ return buildSnapshot(answering, options.model);
525
+ });
526
+ },
527
+ subscribe(listener) {
528
+ listeners.add(listener);
529
+ return () => {
530
+ listeners.delete(listener);
531
+ };
532
+ },
533
+ invalidateIdentity() {
534
+ if (disposed)
535
+ return;
536
+ for (const [key, entry] of entries) {
537
+ if (!entry.persist)
538
+ entries.delete(key);
539
+ }
540
+ supersede("poll", "quota refresh after a login change failed");
541
+ },
542
+ settingsChanged({ recheck }) {
543
+ if (disposed)
544
+ return;
545
+ if (!recheck) {
546
+ supersede("poll", "quota refresh after a settings change failed");
547
+ return;
548
+ }
549
+ for (const entry of entries.values())
550
+ entry.failures = 0;
551
+ // A manual refresh waits for no interval: every provider is checked again now.
552
+ supersede("manual", "quota recheck after a settings change failed");
553
+ },
554
+ async dispose() {
555
+ disposed = true;
556
+ listeners.clear();
557
+ while (tasks.size > 0)
558
+ await Promise.allSettled([...tasks]);
559
+ await flush();
560
+ },
561
+ };
562
+ }
563
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"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"}