@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-source.d.ts","sourceRoot":"","sources":["../../src/core/provider-source.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,KAAK,EAAE,cAAc,EAAY,MAAM,sBAAsB,CAAC;AAGrE,OAAO,KAAK,EAAmD,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,mEAAmE;IACnE,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACvC,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,cAAc,CAAC;CAChC,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,cAAc,GAAG;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,mBAAmB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,EAAE,CAAC;IACvD,wFAAwF;IACxF,2BAA2B,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,EAAE,CAAC;IAC/D,mEAAmE;IACnE,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,mEAAmE;IACnE,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AASF,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,IAAI,EAAE,kBAAkB,EACxB,MAAM,GAAE,cAAgC,GACvC,oBAAoB,CAoBtB;AA8ED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAuCD,sFAAsF;AACtF,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CA4CvF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CAa1F"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * The providers as the store needs them: which ones the server settings turn on and which of
3
+ * those are available, how to ask each one, and who it is signed in as. Every read takes the
4
+ * settings the host holds now, so a settings change applies to the next snapshot or refresh.
5
+ */
6
+ import { createHmac, randomBytes } from "node:crypto";
7
+ import { getQuotaProviderDisplayLabel, isLiveLocalUsageProviderId, } from "../lib/provider-metadata.js";
8
+ import { exportProviderFromCheck } from "../lib/quota-export.js";
9
+ import { cloneQuotaProviders, QUOTA_PROVIDERS_AGGREGATE_ID, selectEligibleQuotaProviderDefinitions, } from "../lib/quota-providers.js";
10
+ import { deriveResolvedAuthIdentity } from "../lib/resolved-auth-identity.js";
11
+ import { createRuntimeProviderIdResolver } from "../lib/runtime-provider-ids.js";
12
+ import { getProviders } from "../providers/registry.js";
13
+ import { rowsFromProviderResult } from "./rows.js";
14
+ import { matchesQuotaProviderCurrentSelection } from "./selection.js";
15
+ /** All registered providers except the ids switched off, with custom mapped to its registry id. */
16
+ function registryProviderIds(off) {
17
+ return getProviders()
18
+ .map((provider) => provider.id)
19
+ .filter((id) => !off.includes(id === QUOTA_PROVIDERS_AGGREGATE_ID ? "custom" : id));
20
+ }
21
+ /** What every provider reads from the settings when it checks its quota. */
22
+ export function providerContext(host, loaded = host.settings()) {
23
+ const { settings, fromFile } = loaded;
24
+ const { anthropic, cursor, opencode } = settings.providers;
25
+ return {
26
+ client: host.client,
27
+ resolveRuntimeProviderIds: createRuntimeProviderIdResolver(host.client),
28
+ workspaceRoot: host.workspaceRoot,
29
+ config: {
30
+ anthropicBinaryPath: anthropic.binaryPath,
31
+ cursorPlan: cursor.plan,
32
+ cursorIncludedApiUsd: cursor.includedApiUsd ?? undefined,
33
+ cursorBillingCycleStartDay: cursor.billingCycleStartDay ?? undefined,
34
+ opencodeMonthlyLimit: opencode.monthlyLimitUsd ?? undefined,
35
+ requestTimeoutMs: settings.providers.checking.requestTimeoutMs,
36
+ requestTimeoutMsConfigured: fromFile.includes("providers.checking.requestTimeoutMs"),
37
+ enabledProviders: registryProviderIds(settings.providers.off),
38
+ automaticDiscovery: true,
39
+ quotaProviders: cloneQuotaProviders(settings.providers.custom),
40
+ },
41
+ };
42
+ }
43
+ /** The registered providers that serve `model`, by the settings in `ctx`. */
44
+ function providerIdsForModel(ctx, model) {
45
+ return getProviders()
46
+ .filter((provider) => matchesQuotaProviderCurrentSelection({
47
+ provider,
48
+ currentModel: model.id,
49
+ currentProviderID: model.providerID,
50
+ enabledProviders: ctx.config.enabledProviders,
51
+ automaticDiscovery: ctx.config.automaticDiscovery,
52
+ quotaProviders: ctx.config.quotaProviders,
53
+ }))
54
+ .map((provider) => provider.id);
55
+ }
56
+ /** OpenCode's provider ids; none when its list can't be read. */
57
+ async function openCodeProviderIds(ctx) {
58
+ try {
59
+ return await ctx.resolveRuntimeProviderIds();
60
+ }
61
+ catch {
62
+ return new Set();
63
+ }
64
+ }
65
+ /**
66
+ * The custom definitions (rows `quota-providers.custom.<id>.*`) that serve `model`; without
67
+ * OpenCode's provider list none can be matched to a model.
68
+ */
69
+ function customDefinitionIdsForModel(ctx, availableProviderIds, model) {
70
+ return selectEligibleQuotaProviderDefinitions({
71
+ definitions: ctx.config.quotaProviders ?? [],
72
+ availableProviderIds,
73
+ onlyCurrentModel: true,
74
+ currentModel: model.id,
75
+ currentProviderID: model.providerID,
76
+ }).map((definition) => definition.id);
77
+ }
78
+ /** The quota-providers aggregate needs the custom definitions OpenCode can serve right now. */
79
+ async function cacheContextFor(provider, ctx) {
80
+ if (provider.id !== QUOTA_PROVIDERS_AGGREGATE_ID)
81
+ return {};
82
+ return {
83
+ runtimeEligibleQuotaProviders: selectEligibleQuotaProviderDefinitions({
84
+ definitions: ctx.config.quotaProviders ?? [],
85
+ availableProviderIds: await ctx.resolveRuntimeProviderIds(),
86
+ }),
87
+ };
88
+ }
89
+ /** The signed-in account per the provider's cache policy; null when it can't be told safely. */
90
+ async function accountIdentity(provider, ctx, cacheContext) {
91
+ const policy = provider.cachePolicy;
92
+ if (!policy || policy.kind === "uncached")
93
+ return null;
94
+ if (policy.kind === "account-neutral")
95
+ return "account-neutral";
96
+ try {
97
+ return await policy.resolveIdentity(ctx, cacheContext);
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ /** Keys logins while the install's protected key can't be read; no account is saved then. */
104
+ const processLoginKey = randomBytes(32);
105
+ /**
106
+ * Each login (a source id: an account number, a credential id, often an email) as an opaque id
107
+ * keyed with the install's protected key, so the snapshot file and notice ids can't be matched
108
+ * against guessed emails. Without that key no account identity exists either, so the store
109
+ * keeps such rows in memory only, and a key of this process is enough.
110
+ */
111
+ export async function keyedLogins(providerId, logins) {
112
+ return Promise.all(logins.map(async (login) => {
113
+ if (!login)
114
+ return "";
115
+ const keyed = await deriveResolvedAuthIdentity({
116
+ providerId,
117
+ principal: { kind: "stable-id", value: login },
118
+ qualifiers: ["v6-row-login"],
119
+ });
120
+ return (keyed ??
121
+ createHmac("sha256", processLoginKey)
122
+ .update(JSON.stringify([providerId, login]))
123
+ .digest("base64url"));
124
+ }));
125
+ }
126
+ function storeProvider(provider, ctx, settingsKey) {
127
+ return {
128
+ id: provider.id,
129
+ label: getQuotaProviderDisplayLabel(provider.id),
130
+ // Cursor and Alibaba Coding Plan count OpenCode's own history: cheap, and stale at once.
131
+ ...(isLiveLocalUsageProviderId(provider.id) ? { minIntervalMs: 0 } : {}),
132
+ async identity() {
133
+ const account = await accountIdentity(provider, ctx, await cacheContextFor(provider, ctx));
134
+ return account === null
135
+ ? { key: settingsKey, persist: false }
136
+ : { key: `${account}\u001f${settingsKey}`, persist: true };
137
+ },
138
+ async fetch() {
139
+ const result = await provider.fetch(ctx, await cacheContextFor(provider, ctx));
140
+ const fetched = rowsFromProviderResult(provider.id, result);
141
+ const buildExportPart = (check) => exportProviderFromCheck({
142
+ ...check,
143
+ providerId: provider.id,
144
+ label: getQuotaProviderDisplayLabel(provider.id),
145
+ customDefinitions: ctx.config.quotaProviders ?? [],
146
+ accounts: result.accounts,
147
+ });
148
+ if (!fetched.rowLogins)
149
+ return { ...fetched, buildExportPart };
150
+ return {
151
+ ...fetched,
152
+ rowLogins: await keyedLogins(provider.id, fetched.rowLogins),
153
+ buildExportPart,
154
+ };
155
+ },
156
+ };
157
+ }
158
+ /** The store's source: the enabled and available providers, with the settings now. */
159
+ export async function loadProviderSource(host) {
160
+ const loaded = host.settings();
161
+ const ctx = providerContext(host, loaded);
162
+ const { enabledProviders } = ctx.config;
163
+ const enabled = getProviders().filter((provider) => enabledProviders === "auto" || enabledProviders.includes(provider.id));
164
+ const available = await Promise.all(enabled.map(async (provider) => {
165
+ try {
166
+ return await provider.isAvailable(ctx);
167
+ }
168
+ catch {
169
+ return false;
170
+ }
171
+ }));
172
+ // A settings change that alters what a provider reports also changes its identity.
173
+ const { config } = ctx;
174
+ const settingsKey = JSON.stringify([
175
+ config.anthropicBinaryPath ?? null,
176
+ config.cursorPlan,
177
+ config.cursorIncludedApiUsd ?? null,
178
+ config.cursorBillingCycleStartDay ?? null,
179
+ config.opencodeMonthlyLimit ?? null,
180
+ config.quotaProviders ?? [],
181
+ ]);
182
+ const availableProviderIds = config.quotaProviders?.length
183
+ ? await openCodeProviderIds(ctx)
184
+ : new Set();
185
+ return {
186
+ providers: enabled
187
+ .filter((_, index) => available[index])
188
+ .map((provider) => storeProvider(provider, ctx, settingsKey)),
189
+ minIntervalMs: loaded.settings.providers.checking.minIntervalMs,
190
+ providerIdsForModel: (model) => providerIdsForModel(ctx, model),
191
+ // A custom definition's rows serve only the models the definition serves.
192
+ rowPrefixesForModel: (model) => ({
193
+ [QUOTA_PROVIDERS_AGGREGATE_ID]: customDefinitionIdsForModel(ctx, availableProviderIds, model).map((id) => `${QUOTA_PROVIDERS_AGGREGATE_ID}.custom.${id}.`),
194
+ }),
195
+ };
196
+ }
197
+ export async function loadServerSettings(host) {
198
+ const loaded = host.settings();
199
+ const { settings } = loaded;
200
+ const ctx = providerContext(host, loaded);
201
+ const availableProviderIds = await openCodeProviderIds(ctx);
202
+ return {
203
+ waitForQuotaReset: settings.providers.checking.waitForQuotaReset,
204
+ providerIdsForModel: (model) => providerIdsForModel(ctx, model),
205
+ customDefinitionIdsForModel: (model) => customDefinitionIdsForModel(ctx, availableProviderIds, model),
206
+ export: { enabled: settings.system.exportFile, path: settings.system.exportPath },
207
+ telemetry: settings.system.telemetry,
208
+ };
209
+ }
210
+ //# sourceMappingURL=provider-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-source.js","sourceRoot":"","sources":["../../src/core/provider-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /** One safe line: control characters removed, credentials redacted, then cut to `maxLength`. */
2
+ export declare function safeDetail(text: string, maxLength: number): string;
3
+ /**
4
+ * A debug detail's value made safe: fully redacted when its key holds a secret; any other
5
+ * value still has the secrets inside it redacted.
6
+ */
7
+ export declare function safeDebugValue(key: string, value: string, maxLength: number): string;
8
+ /**
9
+ * Text a public issue may show: control characters removed first, then the home dir as "~"
10
+ * (found before spaces are joined), then one line with credentials as "[redacted]", email
11
+ * addresses as "[email]", and account, team, org, user and session ids as "[id]". It is cut to
12
+ * `maxLength` last, so a cut never leaves part of a hidden value.
13
+ */
14
+ export declare function publicDetail(text: string, maxLength: number, homeDir?: string): string;
15
+ /** A detail's value as `publicDetail` shows it; all hidden when its key holds a secret or an id. */
16
+ export declare function publicDebugValue(key: string, value: string, maxLength: number, homeDir?: string): string;
17
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/core/redact.ts"],"names":[],"mappings":"AA4KA,gGAAgG;AAChG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAYD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF;AA2BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,SAAY,GAAG,MAAM,CAMzF;AAED,oGAAoG;AACpG,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,SAAY,GAClB,MAAM,CAIR"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Credential redaction for any provider text the store keeps or sends: error details, debug
3
+ * details and logs. Provider errors can echo a request (an Authorization header, a key in the
4
+ * query string, a token in a JSON body), so every such text passes here before it is cut to
5
+ * length, saved or shown. `publicDetail` also hides the home dir, email addresses and account
6
+ * ids, for the error and debug details the store keeps. /quota_status shows only structured
7
+ * values and passes them through `publicDetail` as a second filter.
8
+ */
9
+ import { homedir } from "node:os";
10
+ import { sanitizeDisplayText, sanitizeSingleLineDisplayText } from "../lib/display-sanitize.js";
11
+ import { replaceHomeDirWithTilde } from "../lib/home-dir-display.js";
12
+ const REDACTED = "[redacted]";
13
+ const PRIVATE_ID = "[id]";
14
+ const EMAIL_ADDRESS = "[email]";
15
+ /** Words that make a field name secret wherever they stand in it: "session_id", "x-api-key". */
16
+ const SECRET_WORDS = new Set([
17
+ "token",
18
+ "key",
19
+ "apikey",
20
+ "secret",
21
+ "password",
22
+ "passwd",
23
+ "pwd",
24
+ "cookie",
25
+ "cookies",
26
+ "session",
27
+ "sessionid",
28
+ "authorization",
29
+ "credential",
30
+ "credentials",
31
+ "signature",
32
+ "sig",
33
+ "jwt",
34
+ "bearer",
35
+ ]);
36
+ /** Last words of a debug key that make it a fact about a secret: "api_key_source". */
37
+ const FACT_WORDS = new Set([
38
+ "source",
39
+ "env",
40
+ "present",
41
+ "configured",
42
+ "set",
43
+ "kind",
44
+ "type",
45
+ "status",
46
+ "expires",
47
+ "expiry",
48
+ "age",
49
+ "state",
50
+ "path",
51
+ "paths",
52
+ "file",
53
+ "name",
54
+ "count",
55
+ "diagnostics",
56
+ ]);
57
+ /** A field name's words, split on anything but letters and digits and on camelCase. */
58
+ function nameWords(name) {
59
+ return name
60
+ .replace(/([a-z0-9])([A-Z])/gu, "$1 $2")
61
+ .replace(/([A-Z]+)([A-Z][a-z])/gu, "$1 $2")
62
+ .toLowerCase()
63
+ .split(/[^a-z0-9]+/u)
64
+ .filter(Boolean);
65
+ }
66
+ /**
67
+ * True when a word of a field name is a secret word: "access_token", "apiKey", "XSRFToken",
68
+ * "Set-Cookie", "session_id".
69
+ */
70
+ function namesSecret(name) {
71
+ return nameWords(name).some((word) => SECRET_WORDS.has(word));
72
+ }
73
+ /**
74
+ * A field value: a JSON array (a "]" inside its strings included), quoted to its closing quote
75
+ * (escaped quotes and spaces included; also with escaped quotes around it, as in JSON inside
76
+ * JSON), or one unquoted word.
77
+ */
78
+ const VALUE = String.raw `(?:\[(?:"(?:[^"\\]|\\.)*"?|'(?:[^'\\]|\\.)*'?|[^\]"'])*\]?|\\"(?:[^\\]|\\(?!"))*(?:\\")?|"(?:[^"\\]|\\.)*"?|'(?:[^'\\]|\\.)*'?|[^\s"'&,;}]+)`;
79
+ /** Between a name and its value: `=`, `: `, JSON's `":` and escaped JSON's `\":`. */
80
+ const SEPARATOR = String.raw `(\\?["']?\s*[:=]\s*)`;
81
+ /** `name: value`, `name=value`, `"name":"value"` (also `\"name\":\"value\"`). */
82
+ const NAMED_VALUE = String.raw `\b([A-Za-z_][\w-]{0,63})${SEPARATOR}${VALUE}`;
83
+ /** The value of every pair whose name holds a secret; other values are searched as well. */
84
+ function redactNamedValues(text) {
85
+ const pattern = new RegExp(NAMED_VALUE, "gu");
86
+ let result = "";
87
+ let copied = 0;
88
+ for (let match = pattern.exec(text); match; match = pattern.exec(text)) {
89
+ const [whole, name = "", separator = ""] = match;
90
+ const valueAt = match.index + name.length + separator.length;
91
+ if (holdsSecret(name)) {
92
+ result += `${text.slice(copied, valueAt)}${REDACTED}`;
93
+ copied = match.index + whole.length;
94
+ }
95
+ else {
96
+ // The value may hold pairs of its own: {"error":"bad api_key=abc"}.
97
+ pattern.lastIndex = valueAt;
98
+ }
99
+ }
100
+ return result + text.slice(copied);
101
+ }
102
+ /** Checked in order, before named values; each replaces what it matches. */
103
+ const SECRET_PATTERNS = [
104
+ // Cookie, Set-Cookie and Authorization headers: the whole value, to the end of the line or
105
+ // the next " | " joiner. The JSON forms ("cookie": "a=1") are named values.
106
+ [
107
+ /\b((?:set-)?cookie|(?:proxy-)?authorization)(\s*[:=]\s*)(?:(?! \| )[^\r\n])*/giu,
108
+ `$1$2${REDACTED}`,
109
+ ],
110
+ // Bearer abc, Basic abc (outside a header too)
111
+ [/\b(bearer|basic)\s+[A-Za-z0-9._~+/=-]{6,}/giu, `$1 ${REDACTED}`],
112
+ ];
113
+ /** Well-known key shapes and JWT-shaped strings; after named values. */
114
+ const SHAPE_PATTERNS = [
115
+ /\b(?:sk|pk|rk)[-_][A-Za-z0-9_-]{8,}/gu,
116
+ /\b(?:gh[pousr]_|github_pat_)[A-Za-z0-9_]{10,}/gu,
117
+ /\bAIza[0-9A-Za-z_-]{20,}/gu,
118
+ /\bxai-[A-Za-z0-9]{10,}/gu,
119
+ /eyJ[A-Za-z0-9_-]{10,}(?:\.[A-Za-z0-9_-]+)*/gu,
120
+ ];
121
+ /**
122
+ * One part of a name or model id: a word, also capitalised, camel-cased or with a number after
123
+ * it ("Coder", "DeepSeek", "Qwen3", "FP8"), a number, or up to 4 letters and digits ("A35B").
124
+ */
125
+ const NAME_PART = /^(?:[a-z]{1,20}|[A-Z]{1,20}\d{0,4}|(?:[A-Z]{1,6}|[A-Z]?[a-z]{2,20}){1,3}\d{0,4}|\d{1,14}|[A-Za-z0-9]{1,4})$/u;
126
+ /**
127
+ * A long run of letters, digits, `_` and `-` is a token or session id, unless it is words and
128
+ * numbers joined by separators: a model id ("Qwen3-Coder-480B-A35B-Instruct-FP8") or a name
129
+ * ("custom_production-gateway-us_check").
130
+ */
131
+ function hideOpaqueRun(run) {
132
+ const parts = run.split(/[-_]+/u).filter(Boolean);
133
+ const wordsOnly = parts.length >= 2 && parts.every((part) => NAME_PART.test(part));
134
+ return wordsOnly ? run : REDACTED;
135
+ }
136
+ /** `text` with credential-looking parts replaced by "[redacted]". */
137
+ function redactSecrets(text) {
138
+ let result = text;
139
+ for (const [pattern, replacement] of SECRET_PATTERNS) {
140
+ result = result.replace(pattern, replacement);
141
+ }
142
+ result = redactNamedValues(result);
143
+ for (const pattern of SHAPE_PATTERNS)
144
+ result = result.replace(pattern, REDACTED);
145
+ return result.replace(/[A-Za-z0-9_-]{32,}/gu, hideOpaqueRun);
146
+ }
147
+ /**
148
+ * The text as a screen shows it, before any pattern looks at it: JSON's `\u0049` escapes
149
+ * decoded and control characters removed (an escape inside a name or home dir would hide it
150
+ * from the patterns). Line breaks stay.
151
+ */
152
+ function visibleText(text) {
153
+ const decoded = text.replace(/(?<!\\)\\u([0-9A-Fa-f]{4})/gu, (_, hex) => String.fromCharCode(Number.parseInt(hex, 16)));
154
+ return sanitizeDisplayText(decoded);
155
+ }
156
+ /** One safe line: control characters removed, credentials redacted, then cut to `maxLength`. */
157
+ export function safeDetail(text, maxLength) {
158
+ return redactSecrets(sanitizeSingleLineDisplayText(visibleText(text))).slice(0, maxLength);
159
+ }
160
+ /**
161
+ * True when a debug key's value is a secret: the key names one, and its last word does not
162
+ * name a fact about it ("api_key_source", "token_expires_at", "apiKeyEnv").
163
+ */
164
+ function holdsSecret(key) {
165
+ const words = nameWords(key);
166
+ const last = words.at(-1) === "at" ? words.at(-2) : words.at(-1);
167
+ return namesSecret(key) && !FACT_WORDS.has(last ?? "");
168
+ }
169
+ /**
170
+ * A debug detail's value made safe: fully redacted when its key holds a secret; any other
171
+ * value still has the secrets inside it redacted.
172
+ */
173
+ export function safeDebugValue(key, value, maxLength) {
174
+ return holdsSecret(key) ? REDACTED : safeDetail(value, maxLength);
175
+ }
176
+ /** Whose data a field is about: a "<word> id" field holds a private identity. */
177
+ const PRIVATE_ID_WORDS = ["account", "team", "org", "organization", "user", "session"];
178
+ /** Checked in order; each replaces what it matches. */
179
+ const PRIVATE_ID_PATTERNS = [
180
+ // account_id=abc, "teamId": "t_1", "user_ids": ["a", "b"], \"org_id\":\"o_1\"
181
+ [
182
+ new RegExp(`\\b((?:[A-Za-z0-9]+[_-])*(?:${PRIVATE_ID_WORDS.join("|")})[_-]?ids?)${SEPARATOR}${VALUE}`, "giu"),
183
+ `$1$2${PRIVATE_ID}`,
184
+ ],
185
+ // alice@example.com, alice%40example.com
186
+ [/[\w.%+-]+(?:@|%40)[\w-]+(?:\.[\w-]+)*\.[A-Za-z]{2,}\b/giu, EMAIL_ADDRESS],
187
+ ];
188
+ /** True when a field name ends in an account, team, org, user or session id: "teamId". */
189
+ function namesPrivateId(name) {
190
+ const words = nameWords(name);
191
+ const last = words.at(-1) ?? "";
192
+ if (last === "id" || last === "ids")
193
+ return PRIVATE_ID_WORDS.includes(words.at(-2) ?? "");
194
+ return PRIVATE_ID_WORDS.some((word) => last === `${word}id` || last === `${word}ids`);
195
+ }
196
+ /**
197
+ * Text a public issue may show: control characters removed first, then the home dir as "~"
198
+ * (found before spaces are joined), then one line with credentials as "[redacted]", email
199
+ * addresses as "[email]", and account, team, org, user and session ids as "[id]". It is cut to
200
+ * `maxLength` last, so a cut never leaves part of a hidden value.
201
+ */
202
+ export function publicDetail(text, maxLength, homeDir = homedir()) {
203
+ let result = sanitizeSingleLineDisplayText(replaceHomeDirWithTilde(visibleText(text), homeDir));
204
+ for (const [pattern, replacement] of PRIVATE_ID_PATTERNS) {
205
+ result = result.replace(pattern, replacement);
206
+ }
207
+ return redactSecrets(result).slice(0, maxLength);
208
+ }
209
+ /** A detail's value as `publicDetail` shows it; all hidden when its key holds a secret or an id. */
210
+ export function publicDebugValue(key, value, maxLength, homeDir = homedir()) {
211
+ if (namesPrivateId(key))
212
+ return PRIVATE_ID;
213
+ if (holdsSecret(key))
214
+ return REDACTED;
215
+ return publicDetail(value, maxLength, homeDir);
216
+ }
217
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/core/redact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Provider results as v6 rows. Every provider returns the row contract (`ProviderFetchResult`,
3
+ * see `providers/contract.ts`); each row gets its id (`${providerId}.${key}`), its provider and
4
+ * its account's account text.
5
+ */
6
+ import type { ProviderFetchResult } from "../providers/contract.js";
7
+ import type { ProviderFetch } from "./store.js";
8
+ /**
9
+ * The account or plan in a legacy group: "OpenAI (Pro)" → "Pro", "[Claude Work] (active)" →
10
+ * "Work", "[OpenAI Work] (Business)" → "Work (Business)". "(active)" is dropped: it moves
11
+ * when the user switches logins, and the account must stay the same.
12
+ */
13
+ export declare function accountFromGroup(providerId: string, group: string | undefined): string | undefined;
14
+ /**
15
+ * A provider result as v6 rows, the error to show and the debug details. Each row is checked on
16
+ * its own, so it keeps its login. `rowLogins` holds the logins as the provider gave them; the
17
+ * provider source keys them before the store gets them.
18
+ */
19
+ export declare function rowsFromProviderResult(providerId: string, result: ProviderFetchResult, nowMs?: number): ProviderFetch;
20
+ //# sourceMappingURL=rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../src/core/rows.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmDhD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CASpB;AAkCD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,mBAAmB,EAC3B,KAAK,GAAE,MAAmB,GACzB,aAAa,CA0Cf"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Provider results as v6 rows. Every provider returns the row contract (`ProviderFetchResult`,
3
+ * see `providers/contract.ts`); each row gets its id (`${providerId}.${key}`), its provider and
4
+ * its account's account text.
5
+ */
6
+ import { sanitizeSingleLineDisplaySnippet } from "../lib/display-sanitize.js";
7
+ import { QUOTA_PROVIDERS_AGGREGATE_ID } from "../lib/quota-providers.js";
8
+ import { classifyError, errorKind } from "./errors.js";
9
+ import { publicDebugValue } from "./redact.js";
10
+ import { validateRows } from "./validate.js";
11
+ const DEBUG_VALUE_MAX_LENGTH = 300;
12
+ /** Brand words at the start of a provider's groups; what follows names the account or plan. */
13
+ const GROUP_BRANDS = {
14
+ anthropic: ["Claude"],
15
+ copilot: ["Copilot"],
16
+ openai: ["OpenAI"],
17
+ openrouter: ["OpenRouter"],
18
+ kilo: ["Kilo Gateway"],
19
+ cursor: ["Cursor"],
20
+ "alibaba-coding-plan": ["Alibaba Coding Plan"],
21
+ "alibaba-token-plan": ["Alibaba Personal Token Plan"],
22
+ synthetic: ["Synthetic"],
23
+ chutes: ["Chutes"],
24
+ "google-gemini-cli": ["Gemini CLI"],
25
+ "google-agy": ["Google AGY", "AGY"],
26
+ zai: ["Z.ai"],
27
+ zhipu: ["Zhipu"],
28
+ nanogpt: ["NanoGPT"],
29
+ "minimax-coding-plan": ["MiniMax Token Plan"],
30
+ "minimax-china-coding-plan": ["MiniMax Token Plan (CN)", "MiniMax Token Plan"],
31
+ "kimi-code-plan-global": ["Kimi Code"],
32
+ "kimi-code-plan-cn": ["Kimi Code (CN)", "Kimi Code"],
33
+ deepseek: ["DeepSeek"],
34
+ xai: ["xAI"],
35
+ xiaomi: ["Xiaomi MiMo"],
36
+ "opencode-go": ["OpenCode Go"],
37
+ opencode: ["OpenCode Zen"],
38
+ "ollama-cloud": ["Ollama Cloud"],
39
+ };
40
+ /** "(Pro)" → "Pro", ": Standard [code]" → "Standard". */
41
+ function unwrap(text) {
42
+ let result = text.trim().replace(/^:\s*/u, "");
43
+ const parens = /^\((.*)\)$/u.exec(result);
44
+ if (parens)
45
+ result = parens[1] ?? "";
46
+ const withoutCode = result.replace(/\s*\[[^\]]*\]$/u, "").trim();
47
+ return withoutCode || result.trim();
48
+ }
49
+ function stripBrand(providerId, text) {
50
+ const brand = (GROUP_BRANDS[providerId] ?? []).find((name) => text === name || text.startsWith(`${name} `) || text.startsWith(`${name}:`));
51
+ return brand ? text.slice(brand.length) : text;
52
+ }
53
+ /**
54
+ * The account or plan in a legacy group: "OpenAI (Pro)" → "Pro", "[Claude Work] (active)" →
55
+ * "Work", "[OpenAI Work] (Business)" → "Work (Business)". "(active)" is dropped: it moves
56
+ * when the user switches logins, and the account must stay the same.
57
+ */
58
+ export function accountFromGroup(providerId, group) {
59
+ if (!group)
60
+ return undefined;
61
+ const text = group.replace(/\s*\(active\)/gu, "").trim();
62
+ if (providerId === QUOTA_PROVIDERS_AGGREGATE_ID)
63
+ return text || undefined;
64
+ const bracket = /^\[([^\]]*)\]\s*(.*)$/u.exec(text);
65
+ const alias = unwrap(stripBrand(providerId, bracket ? (bracket[1] ?? "") : text));
66
+ const category = bracket ? (bracket[2] ?? "").trim() : "";
67
+ const account = alias && category ? `${alias} ${category}` : alias || unwrap(category);
68
+ return account || undefined;
69
+ }
70
+ /**
71
+ * Drops a row repeated for one login (same id and account). Logins that share an account text
72
+ * keep it here; the store tells them apart, as it also sees logins that failed this time.
73
+ */
74
+ function dropRepeatedRows(candidates, debug) {
75
+ const seen = new Set();
76
+ return candidates.filter(({ row, login }) => {
77
+ const slot = `${String(row.id)}\u001f${String(row.account ?? "")}\u001f${login}`;
78
+ if (!seen.has(slot)) {
79
+ seen.add(slot);
80
+ return true;
81
+ }
82
+ debug.push({ key: "dropped_row", value: `${String(row.id)}: repeated row` });
83
+ return false;
84
+ });
85
+ }
86
+ /**
87
+ * Debug details are kept for /quota_status, as a public issue may show them (see
88
+ * `publicDetail`): hidden before they are cut, so a cut never leaves part of a hidden value.
89
+ * A key is a name the adapter or this file chose, so it is only cleaned and shortened.
90
+ */
91
+ function detail(key, value) {
92
+ return {
93
+ key: sanitizeSingleLineDisplaySnippet(key, 64),
94
+ value: publicDebugValue(key, value, DEBUG_VALUE_MAX_LENGTH),
95
+ };
96
+ }
97
+ /**
98
+ * A provider result as v6 rows, the error to show and the debug details. Each row is checked on
99
+ * its own, so it keeps its login. `rowLogins` holds the logins as the provider gave them; the
100
+ * provider source keys them before the store gets them.
101
+ */
102
+ export function rowsFromProviderResult(providerId, result, nowMs = Date.now()) {
103
+ const debug = result.debug.map((item) => detail(item.key, item.value));
104
+ const candidates = result.accounts.flatMap((account) => {
105
+ const accountText = accountFromGroup(providerId, account.name);
106
+ return account.rows.map(({ key, ...fields }) => ({
107
+ row: {
108
+ ...fields,
109
+ id: `${providerId}.${key}`,
110
+ providerId,
111
+ ...(accountText ? { account: accountText } : {}),
112
+ },
113
+ login: account.login ?? "",
114
+ }));
115
+ });
116
+ const rows = [];
117
+ const rowLogins = [];
118
+ for (const { row, login } of dropRepeatedRows(candidates, debug)) {
119
+ const checked = validateRows(providerId, [row]);
120
+ debug.push(...checked.dropped);
121
+ for (const clean of checked.rows) {
122
+ rows.push(clean);
123
+ rowLogins.push(login);
124
+ }
125
+ }
126
+ const logins = rowLogins.some(Boolean) ? { rowLogins } : {};
127
+ const errors = result.accounts.flatMap((account) => account.errors.map((error) => ({ account: account.name, message: error.message })));
128
+ for (const error of errors) {
129
+ debug.push(detail("error", `${error.account}: ${error.message}`));
130
+ // Read from the message alone, so a number or word in the account name is never its kind.
131
+ debug.push(detail("error_kind", errorKind(classifyError(error.message, nowMs))));
132
+ }
133
+ const [firstError] = errors;
134
+ if (firstError) {
135
+ return { rows, ...logins, error: classifyError(firstError.message, nowMs), debug };
136
+ }
137
+ if (!result.attempted && rows.length === 0) {
138
+ return { rows: [], error: { code: "not_configured" }, debug };
139
+ }
140
+ return { rows, ...logins, debug };
141
+ }
142
+ //# sourceMappingURL=rows.js.map