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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (794) hide show
  1. package/README.md +30 -44
  2. package/dist/agent-tools.d.ts +24 -0
  3. package/dist/agent-tools.d.ts.map +1 -0
  4. package/dist/agent-tools.js +578 -0
  5. package/dist/agent-tools.js.map +1 -0
  6. package/dist/bin/opencode-quota.d.ts.map +1 -1
  7. package/dist/bin/opencode-quota.js +1 -32
  8. package/dist/bin/opencode-quota.js.map +1 -1
  9. package/dist/core/errors.d.ts +12 -0
  10. package/dist/core/errors.d.ts.map +1 -0
  11. package/dist/core/errors.js +141 -0
  12. package/dist/core/errors.js.map +1 -0
  13. package/dist/core/pace.d.ts +13 -0
  14. package/dist/core/pace.d.ts.map +1 -0
  15. package/dist/core/pace.js +52 -0
  16. package/dist/core/pace.js.map +1 -0
  17. package/dist/core/persist.d.ts +44 -0
  18. package/dist/core/persist.d.ts.map +1 -0
  19. package/dist/core/persist.js +210 -0
  20. package/dist/core/persist.js.map +1 -0
  21. package/dist/core/provider-source.d.ts +40 -0
  22. package/dist/core/provider-source.d.ts.map +1 -0
  23. package/dist/core/provider-source.js +210 -0
  24. package/dist/core/provider-source.js.map +1 -0
  25. package/dist/core/redact.d.ts +17 -0
  26. package/dist/core/redact.d.ts.map +1 -0
  27. package/dist/core/redact.js +217 -0
  28. package/dist/core/redact.js.map +1 -0
  29. package/dist/core/rows.d.ts +20 -0
  30. package/dist/core/rows.d.ts.map +1 -0
  31. package/dist/core/rows.js +142 -0
  32. package/dist/core/rows.js.map +1 -0
  33. package/dist/core/selection.d.ts +15 -0
  34. package/dist/core/selection.d.ts.map +1 -0
  35. package/dist/core/selection.js +43 -0
  36. package/dist/core/selection.js.map +1 -0
  37. package/dist/core/snapshot-publisher.d.ts +15 -0
  38. package/dist/core/snapshot-publisher.d.ts.map +1 -0
  39. package/dist/core/snapshot-publisher.js +57 -0
  40. package/dist/core/snapshot-publisher.js.map +1 -0
  41. package/dist/core/store.d.ts +93 -0
  42. package/dist/core/store.d.ts.map +1 -0
  43. package/dist/core/store.js +563 -0
  44. package/dist/core/store.js.map +1 -0
  45. package/dist/core/types.d.ts +186 -0
  46. package/dist/core/types.d.ts.map +1 -0
  47. package/dist/core/types.js +2 -0
  48. package/dist/core/types.js.map +1 -0
  49. package/dist/core/usage-ranges.d.ts +46 -0
  50. package/dist/core/usage-ranges.d.ts.map +1 -0
  51. package/dist/core/usage-ranges.js +72 -0
  52. package/dist/core/usage-ranges.js.map +1 -0
  53. package/dist/core/usage.d.ts +100 -0
  54. package/dist/core/usage.d.ts.map +1 -0
  55. package/dist/core/usage.js +373 -0
  56. package/dist/core/usage.js.map +1 -0
  57. package/dist/core/validate.d.ts +8 -0
  58. package/dist/core/validate.d.ts.map +1 -0
  59. package/dist/core/validate.js +167 -0
  60. package/dist/core/validate.js.map +1 -0
  61. package/dist/core/windows.d.ts +24 -0
  62. package/dist/core/windows.d.ts.map +1 -0
  63. package/dist/core/windows.js +43 -0
  64. package/dist/core/windows.js.map +1 -0
  65. package/dist/index.d.ts +2 -1
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/lib/accounting-format.d.ts +2 -52
  69. package/dist/lib/accounting-format.d.ts.map +1 -1
  70. package/dist/lib/accounting-format.js +6 -255
  71. package/dist/lib/accounting-format.js.map +1 -1
  72. package/dist/lib/alibaba-auth.d.ts +14 -21
  73. package/dist/lib/alibaba-auth.d.ts.map +1 -1
  74. package/dist/lib/alibaba-auth.js +36 -149
  75. package/dist/lib/alibaba-auth.js.map +1 -1
  76. package/dist/lib/alibaba-coding-plan-local-quota.d.ts +1 -6
  77. package/dist/lib/alibaba-coding-plan-local-quota.d.ts.map +1 -1
  78. package/dist/lib/alibaba-coding-plan-local-quota.js +1 -1
  79. package/dist/lib/alibaba-coding-plan-local-quota.js.map +1 -1
  80. package/dist/lib/alibaba-token-plan.d.ts +18 -27
  81. package/dist/lib/alibaba-token-plan.d.ts.map +1 -1
  82. package/dist/lib/alibaba-token-plan.js +121 -285
  83. package/dist/lib/alibaba-token-plan.js.map +1 -1
  84. package/dist/lib/anthropic-auth.d.ts +3 -5
  85. package/dist/lib/anthropic-auth.d.ts.map +1 -1
  86. package/dist/lib/anthropic-auth.js +6 -9
  87. package/dist/lib/anthropic-auth.js.map +1 -1
  88. package/dist/lib/anthropic.d.ts +12 -37
  89. package/dist/lib/anthropic.d.ts.map +1 -1
  90. package/dist/lib/anthropic.js +348 -698
  91. package/dist/lib/anthropic.js.map +1 -1
  92. package/dist/lib/api-key-resolver.d.ts +165 -192
  93. package/dist/lib/api-key-resolver.d.ts.map +1 -1
  94. package/dist/lib/api-key-resolver.js +208 -234
  95. package/dist/lib/api-key-resolver.js.map +1 -1
  96. package/dist/lib/atomic-json.d.ts +4 -1
  97. package/dist/lib/atomic-json.d.ts.map +1 -1
  98. package/dist/lib/atomic-json.js +2 -3
  99. package/dist/lib/atomic-json.js.map +1 -1
  100. package/dist/lib/calendar-date.d.ts +15 -0
  101. package/dist/lib/calendar-date.d.ts.map +1 -0
  102. package/dist/lib/calendar-date.js +21 -0
  103. package/dist/lib/calendar-date.js.map +1 -0
  104. package/dist/lib/chutes.d.ts +0 -1
  105. package/dist/lib/chutes.d.ts.map +1 -1
  106. package/dist/lib/chutes.js +2 -4
  107. package/dist/lib/chutes.js.map +1 -1
  108. package/dist/lib/cli-reports.d.ts +15 -11
  109. package/dist/lib/cli-reports.d.ts.map +1 -1
  110. package/dist/lib/cli-reports.js +34 -107
  111. package/dist/lib/cli-reports.js.map +1 -1
  112. package/dist/lib/cli-show.d.ts +9 -22
  113. package/dist/lib/cli-show.d.ts.map +1 -1
  114. package/dist/lib/cli-show.js +104 -75
  115. package/dist/lib/cli-show.js.map +1 -1
  116. package/dist/lib/config-file-utils.d.ts +3 -15
  117. package/dist/lib/config-file-utils.d.ts.map +1 -1
  118. package/dist/lib/config-file-utils.js +4 -63
  119. package/dist/lib/config-file-utils.js.map +1 -1
  120. package/dist/lib/config-write-target.d.ts +4 -7
  121. package/dist/lib/config-write-target.d.ts.map +1 -1
  122. package/dist/lib/config-write-target.js +4 -18
  123. package/dist/lib/config-write-target.js.map +1 -1
  124. package/dist/lib/copilot.d.ts +29 -20
  125. package/dist/lib/copilot.d.ts.map +1 -1
  126. package/dist/lib/copilot.js +392 -649
  127. package/dist/lib/copilot.js.map +1 -1
  128. package/dist/lib/cursor-detection.d.ts +3 -3
  129. package/dist/lib/cursor-detection.d.ts.map +1 -1
  130. package/dist/lib/cursor-detection.js +44 -88
  131. package/dist/lib/cursor-detection.js.map +1 -1
  132. package/dist/lib/cursor-pricing.d.ts +71 -8
  133. package/dist/lib/cursor-pricing.d.ts.map +1 -1
  134. package/dist/lib/cursor-pricing.js +33 -125
  135. package/dist/lib/cursor-pricing.js.map +1 -1
  136. package/dist/lib/cursor-usage.d.ts +6 -4
  137. package/dist/lib/cursor-usage.d.ts.map +1 -1
  138. package/dist/lib/cursor-usage.js +27 -40
  139. package/dist/lib/cursor-usage.js.map +1 -1
  140. package/dist/lib/deepseek.d.ts +9 -17
  141. package/dist/lib/deepseek.d.ts.map +1 -1
  142. package/dist/lib/deepseek.js +24 -54
  143. package/dist/lib/deepseek.js.map +1 -1
  144. package/dist/lib/display-sanitize.d.ts +0 -8
  145. package/dist/lib/display-sanitize.d.ts.map +1 -1
  146. package/dist/lib/display-sanitize.js +0 -139
  147. package/dist/lib/display-sanitize.js.map +1 -1
  148. package/dist/lib/entries.d.ts +13 -239
  149. package/dist/lib/entries.d.ts.map +1 -1
  150. package/dist/lib/entries.js +1 -46
  151. package/dist/lib/entries.js.map +1 -1
  152. package/dist/lib/file-lock.d.ts +23 -0
  153. package/dist/lib/file-lock.d.ts.map +1 -0
  154. package/dist/lib/file-lock.js +122 -0
  155. package/dist/lib/file-lock.js.map +1 -0
  156. package/dist/lib/format-utils.d.ts +2 -82
  157. package/dist/lib/format-utils.d.ts.map +1 -1
  158. package/dist/lib/format-utils.js +2 -191
  159. package/dist/lib/format-utils.js.map +1 -1
  160. package/dist/lib/glm-coding-plan.d.ts +6 -5
  161. package/dist/lib/glm-coding-plan.d.ts.map +1 -1
  162. package/dist/lib/glm-coding-plan.js +19 -1
  163. package/dist/lib/glm-coding-plan.js.map +1 -1
  164. package/dist/lib/google-agy.d.ts +8 -40
  165. package/dist/lib/google-agy.d.ts.map +1 -1
  166. package/dist/lib/google-agy.js +88 -519
  167. package/dist/lib/google-agy.js.map +1 -1
  168. package/dist/lib/google-companion-credentials.d.ts +9 -40
  169. package/dist/lib/google-companion-credentials.d.ts.map +1 -1
  170. package/dist/lib/google-companion-credentials.js +167 -224
  171. package/dist/lib/google-companion-credentials.js.map +1 -1
  172. package/dist/lib/google-gemini-cli.d.ts +5 -38
  173. package/dist/lib/google-gemini-cli.d.ts.map +1 -1
  174. package/dist/lib/google-gemini-cli.js +71 -442
  175. package/dist/lib/google-gemini-cli.js.map +1 -1
  176. package/dist/lib/google-oauth-quota.d.ts +76 -0
  177. package/dist/lib/google-oauth-quota.d.ts.map +1 -0
  178. package/dist/lib/google-oauth-quota.js +297 -0
  179. package/dist/lib/google-oauth-quota.js.map +1 -0
  180. package/dist/lib/google-token-cache.d.ts +3 -5
  181. package/dist/lib/google-token-cache.d.ts.map +1 -1
  182. package/dist/lib/google-token-cache.js +2 -14
  183. package/dist/lib/google-token-cache.js.map +1 -1
  184. package/dist/lib/home-dir-display.d.ts.map +1 -1
  185. package/dist/lib/home-dir-display.js +21 -39
  186. package/dist/lib/home-dir-display.js.map +1 -1
  187. package/dist/lib/http.d.ts +4 -1
  188. package/dist/lib/http.d.ts.map +1 -1
  189. package/dist/lib/http.js +2 -1
  190. package/dist/lib/http.js.map +1 -1
  191. package/dist/lib/json-guards.d.ts +11 -0
  192. package/dist/lib/json-guards.d.ts.map +1 -0
  193. package/dist/lib/json-guards.js +25 -0
  194. package/dist/lib/json-guards.js.map +1 -0
  195. package/dist/lib/kilo.d.ts +0 -2
  196. package/dist/lib/kilo.d.ts.map +1 -1
  197. package/dist/lib/kilo.js +33 -116
  198. package/dist/lib/kilo.js.map +1 -1
  199. package/dist/lib/kimi-endpoints.d.ts +2 -2
  200. package/dist/lib/kimi-endpoints.d.ts.map +1 -1
  201. package/dist/lib/kimi-endpoints.js +1 -1
  202. package/dist/lib/kimi-endpoints.js.map +1 -1
  203. package/dist/lib/kimi.d.ts.map +1 -1
  204. package/dist/lib/kimi.js +40 -86
  205. package/dist/lib/kimi.js.map +1 -1
  206. package/dist/lib/maintainer-announcements.d.ts +4 -17
  207. package/dist/lib/maintainer-announcements.d.ts.map +1 -1
  208. package/dist/lib/maintainer-announcements.js +7 -44
  209. package/dist/lib/maintainer-announcements.js.map +1 -1
  210. package/dist/lib/maintainer-home-notice.d.ts +19 -0
  211. package/dist/lib/maintainer-home-notice.d.ts.map +1 -0
  212. package/dist/lib/maintainer-home-notice.js +92 -0
  213. package/dist/lib/maintainer-home-notice.js.map +1 -0
  214. package/dist/lib/mimo-config.d.ts +6 -9
  215. package/dist/lib/mimo-config.d.ts.map +1 -1
  216. package/dist/lib/mimo-config.js +43 -74
  217. package/dist/lib/mimo-config.js.map +1 -1
  218. package/dist/lib/mimo.d.ts +2 -5
  219. package/dist/lib/mimo.d.ts.map +1 -1
  220. package/dist/lib/mimo.js +57 -109
  221. package/dist/lib/mimo.js.map +1 -1
  222. package/dist/lib/minimax-endpoints.d.ts +2 -2
  223. package/dist/lib/minimax-endpoints.d.ts.map +1 -1
  224. package/dist/lib/minimax-endpoints.js +1 -1
  225. package/dist/lib/minimax-endpoints.js.map +1 -1
  226. package/dist/lib/modelsdev-pricing.d.ts +22 -16
  227. package/dist/lib/modelsdev-pricing.d.ts.map +1 -1
  228. package/dist/lib/modelsdev-pricing.js +279 -560
  229. package/dist/lib/modelsdev-pricing.js.map +1 -1
  230. package/dist/lib/nanogpt.d.ts +6 -6
  231. package/dist/lib/nanogpt.d.ts.map +1 -1
  232. package/dist/lib/nanogpt.js +19 -72
  233. package/dist/lib/nanogpt.js.map +1 -1
  234. package/dist/lib/ollama-cloud.d.ts +3 -6
  235. package/dist/lib/ollama-cloud.d.ts.map +1 -1
  236. package/dist/lib/ollama-cloud.js +26 -37
  237. package/dist/lib/ollama-cloud.js.map +1 -1
  238. package/dist/lib/openai.d.ts +18 -29
  239. package/dist/lib/openai.d.ts.map +1 -1
  240. package/dist/lib/openai.js +108 -182
  241. package/dist/lib/openai.js.map +1 -1
  242. package/dist/lib/opencode-auth-sqlite.d.ts.map +1 -1
  243. package/dist/lib/opencode-auth-sqlite.js +22 -23
  244. package/dist/lib/opencode-auth-sqlite.js.map +1 -1
  245. package/dist/lib/opencode-auth.d.ts +17 -11
  246. package/dist/lib/opencode-auth.d.ts.map +1 -1
  247. package/dist/lib/opencode-auth.js +39 -46
  248. package/dist/lib/opencode-auth.js.map +1 -1
  249. package/dist/lib/opencode-config-editor.d.ts +3 -34
  250. package/dist/lib/opencode-config-editor.d.ts.map +1 -1
  251. package/dist/lib/opencode-config-editor.js +23 -142
  252. package/dist/lib/opencode-config-editor.js.map +1 -1
  253. package/dist/lib/opencode-config-providers.d.ts +4 -3
  254. package/dist/lib/opencode-config-providers.d.ts.map +1 -1
  255. package/dist/lib/opencode-config-providers.js +7 -11
  256. package/dist/lib/opencode-config-providers.js.map +1 -1
  257. package/dist/lib/opencode-config-read.d.ts +2 -1
  258. package/dist/lib/opencode-config-read.d.ts.map +1 -1
  259. package/dist/lib/opencode-config-read.js +3 -2
  260. package/dist/lib/opencode-config-read.js.map +1 -1
  261. package/dist/lib/opencode-console-auth.d.ts +2 -3
  262. package/dist/lib/opencode-console-auth.d.ts.map +1 -1
  263. package/dist/lib/opencode-console-auth.js +2 -2
  264. package/dist/lib/opencode-console-auth.js.map +1 -1
  265. package/dist/lib/opencode-go.d.ts.map +1 -1
  266. package/dist/lib/opencode-go.js +51 -79
  267. package/dist/lib/opencode-go.js.map +1 -1
  268. package/dist/lib/opencode-storage.d.ts +18 -3
  269. package/dist/lib/opencode-storage.d.ts.map +1 -1
  270. package/dist/lib/opencode-storage.js +134 -2
  271. package/dist/lib/opencode-storage.js.map +1 -1
  272. package/dist/lib/opencode-zen.d.ts +15 -12
  273. package/dist/lib/opencode-zen.d.ts.map +1 -1
  274. package/dist/lib/opencode-zen.js +139 -147
  275. package/dist/lib/opencode-zen.js.map +1 -1
  276. package/dist/lib/openrouter.d.ts.map +1 -1
  277. package/dist/lib/openrouter.js +1 -13
  278. package/dist/lib/openrouter.js.map +1 -1
  279. package/dist/lib/pricing-key.d.ts +48 -0
  280. package/dist/lib/pricing-key.d.ts.map +1 -0
  281. package/dist/lib/pricing-key.js +371 -0
  282. package/dist/lib/pricing-key.js.map +1 -0
  283. package/dist/lib/provider-metadata.d.ts +16 -20
  284. package/dist/lib/provider-metadata.d.ts.map +1 -1
  285. package/dist/lib/provider-metadata.js +69 -69
  286. package/dist/lib/provider-metadata.js.map +1 -1
  287. package/dist/lib/provider-model-matching.d.ts +2 -1
  288. package/dist/lib/provider-model-matching.d.ts.map +1 -1
  289. package/dist/lib/provider-registration.d.ts +1 -177
  290. package/dist/lib/provider-registration.d.ts.map +1 -1
  291. package/dist/lib/provider-registration.js +1 -163
  292. package/dist/lib/provider-registration.js.map +1 -1
  293. package/dist/lib/quota-dialog-commands.d.ts +87 -53
  294. package/dist/lib/quota-dialog-commands.d.ts.map +1 -1
  295. package/dist/lib/quota-dialog-commands.js +259 -519
  296. package/dist/lib/quota-dialog-commands.js.map +1 -1
  297. package/dist/lib/quota-export-types.d.ts +29 -23
  298. package/dist/lib/quota-export-types.d.ts.map +1 -1
  299. package/dist/lib/quota-export.d.ts +16 -26
  300. package/dist/lib/quota-export.d.ts.map +1 -1
  301. package/dist/lib/quota-export.js +105 -147
  302. package/dist/lib/quota-export.js.map +1 -1
  303. package/dist/lib/quota-providers-local.d.ts +12 -8
  304. package/dist/lib/quota-providers-local.d.ts.map +1 -1
  305. package/dist/lib/quota-providers-local.js +150 -223
  306. package/dist/lib/quota-providers-local.js.map +1 -1
  307. package/dist/lib/quota-providers-remote.d.ts +3 -8
  308. package/dist/lib/quota-providers-remote.d.ts.map +1 -1
  309. package/dist/lib/quota-providers-remote.js +309 -449
  310. package/dist/lib/quota-providers-remote.js.map +1 -1
  311. package/dist/lib/quota-providers.d.ts +57 -15
  312. package/dist/lib/quota-providers.d.ts.map +1 -1
  313. package/dist/lib/quota-providers.js +157 -64
  314. package/dist/lib/quota-providers.js.map +1 -1
  315. package/dist/lib/quota-report-message.d.ts +23 -10
  316. package/dist/lib/quota-report-message.d.ts.map +1 -1
  317. package/dist/lib/quota-report-message.js +37 -13
  318. package/dist/lib/quota-report-message.js.map +1 -1
  319. package/dist/lib/quota-retry-wait.d.ts +14 -6
  320. package/dist/lib/quota-retry-wait.d.ts.map +1 -1
  321. package/dist/lib/quota-retry-wait.js +37 -39
  322. package/dist/lib/quota-retry-wait.js.map +1 -1
  323. package/dist/lib/quota-status.d.ts +50 -33
  324. package/dist/lib/quota-status.d.ts.map +1 -1
  325. package/dist/lib/quota-status.js +1113 -773
  326. package/dist/lib/quota-status.js.map +1 -1
  327. package/dist/lib/quota-telemetry.d.ts +7 -14
  328. package/dist/lib/quota-telemetry.d.ts.map +1 -1
  329. package/dist/lib/quota-telemetry.js +46 -97
  330. package/dist/lib/quota-telemetry.js.map +1 -1
  331. package/dist/lib/report-document.d.ts +5 -65
  332. package/dist/lib/report-document.d.ts.map +1 -1
  333. package/dist/lib/report-document.js +14 -167
  334. package/dist/lib/report-document.js.map +1 -1
  335. package/dist/lib/resolved-auth-identity.d.ts +1 -2
  336. package/dist/lib/resolved-auth-identity.d.ts.map +1 -1
  337. package/dist/lib/resolved-auth-identity.js +0 -4
  338. package/dist/lib/resolved-auth-identity.js.map +1 -1
  339. package/dist/lib/session-tokens.d.ts +19 -19
  340. package/dist/lib/session-tokens.d.ts.map +1 -1
  341. package/dist/lib/session-tokens.js +58 -44
  342. package/dist/lib/session-tokens.js.map +1 -1
  343. package/dist/lib/synthetic.d.ts +0 -1
  344. package/dist/lib/synthetic.d.ts.map +1 -1
  345. package/dist/lib/synthetic.js +43 -94
  346. package/dist/lib/synthetic.js.map +1 -1
  347. package/dist/lib/token-buckets.d.ts +0 -1
  348. package/dist/lib/token-buckets.d.ts.map +1 -1
  349. package/dist/lib/token-buckets.js +0 -3
  350. package/dist/lib/token-buckets.js.map +1 -1
  351. package/dist/lib/token-cost.d.ts +2 -1
  352. package/dist/lib/token-cost.d.ts.map +1 -1
  353. package/dist/lib/types.d.ts +25 -333
  354. package/dist/lib/types.d.ts.map +1 -1
  355. package/dist/lib/types.js +2 -70
  356. package/dist/lib/types.js.map +1 -1
  357. package/dist/lib/xai.d.ts +6 -6
  358. package/dist/lib/xai.d.ts.map +1 -1
  359. package/dist/lib/xai.js +51 -90
  360. package/dist/lib/xai.js.map +1 -1
  361. package/dist/plugin.d.ts +6 -3
  362. package/dist/plugin.d.ts.map +1 -1
  363. package/dist/plugin.js +315 -90
  364. package/dist/plugin.js.map +1 -1
  365. package/dist/providers/alibaba-coding-plan.d.ts +4 -0
  366. package/dist/providers/alibaba-coding-plan.d.ts.map +1 -1
  367. package/dist/providers/alibaba-coding-plan.js +47 -77
  368. package/dist/providers/alibaba-coding-plan.js.map +1 -1
  369. package/dist/providers/alibaba-token-plan.d.ts.map +1 -1
  370. package/dist/providers/alibaba-token-plan.js +34 -46
  371. package/dist/providers/alibaba-token-plan.js.map +1 -1
  372. package/dist/providers/anthropic.d.ts +2 -4
  373. package/dist/providers/anthropic.d.ts.map +1 -1
  374. package/dist/providers/anthropic.js +80 -162
  375. package/dist/providers/anthropic.js.map +1 -1
  376. package/dist/providers/cache-policies.d.ts +0 -2
  377. package/dist/providers/cache-policies.d.ts.map +1 -1
  378. package/dist/providers/cache-policies.js +38 -88
  379. package/dist/providers/cache-policies.js.map +1 -1
  380. package/dist/providers/chutes.d.ts +0 -3
  381. package/dist/providers/chutes.d.ts.map +1 -1
  382. package/dist/providers/chutes.js +16 -28
  383. package/dist/providers/chutes.js.map +1 -1
  384. package/dist/providers/contract.d.ts +128 -0
  385. package/dist/providers/contract.d.ts.map +1 -0
  386. package/dist/providers/contract.js +101 -0
  387. package/dist/providers/contract.js.map +1 -0
  388. package/dist/providers/copilot.d.ts.map +1 -1
  389. package/dist/providers/copilot.js +171 -175
  390. package/dist/providers/copilot.js.map +1 -1
  391. package/dist/providers/cursor.d.ts.map +1 -1
  392. package/dist/providers/cursor.js +56 -109
  393. package/dist/providers/cursor.js.map +1 -1
  394. package/dist/providers/deepseek.d.ts +1 -6
  395. package/dist/providers/deepseek.d.ts.map +1 -1
  396. package/dist/providers/deepseek.js +46 -81
  397. package/dist/providers/deepseek.js.map +1 -1
  398. package/dist/providers/glm-coding-plan.d.ts +8 -0
  399. package/dist/providers/glm-coding-plan.d.ts.map +1 -0
  400. package/dist/providers/glm-coding-plan.js +106 -0
  401. package/dist/providers/glm-coding-plan.js.map +1 -0
  402. package/dist/providers/google-agy.d.ts +0 -1
  403. package/dist/providers/google-agy.d.ts.map +1 -1
  404. package/dist/providers/google-agy.js +41 -192
  405. package/dist/providers/google-agy.js.map +1 -1
  406. package/dist/providers/google-gemini-cli.d.ts.map +1 -1
  407. package/dist/providers/google-gemini-cli.js +51 -151
  408. package/dist/providers/google-gemini-cli.js.map +1 -1
  409. package/dist/providers/google-oauth-provider.d.ts +39 -0
  410. package/dist/providers/google-oauth-provider.d.ts.map +1 -0
  411. package/dist/providers/google-oauth-provider.js +161 -0
  412. package/dist/providers/google-oauth-provider.js.map +1 -0
  413. package/dist/providers/kilo.d.ts +0 -3
  414. package/dist/providers/kilo.d.ts.map +1 -1
  415. package/dist/providers/kilo.js +69 -123
  416. package/dist/providers/kilo.js.map +1 -1
  417. package/dist/providers/kimi-code.d.ts +5 -0
  418. package/dist/providers/kimi-code.d.ts.map +1 -1
  419. package/dist/providers/kimi-code.js +91 -136
  420. package/dist/providers/kimi-code.js.map +1 -1
  421. package/dist/providers/mimo.d.ts.map +1 -1
  422. package/dist/providers/mimo.js +55 -94
  423. package/dist/providers/mimo.js.map +1 -1
  424. package/dist/providers/minimax-coding-plan.d.ts +2 -23
  425. package/dist/providers/minimax-coding-plan.d.ts.map +1 -1
  426. package/dist/providers/minimax-coding-plan.js +161 -277
  427. package/dist/providers/minimax-coding-plan.js.map +1 -1
  428. package/dist/providers/nanogpt.d.ts +0 -3
  429. package/dist/providers/nanogpt.d.ts.map +1 -1
  430. package/dist/providers/nanogpt.js +61 -95
  431. package/dist/providers/nanogpt.js.map +1 -1
  432. package/dist/providers/ollama-cloud.d.ts +0 -6
  433. package/dist/providers/ollama-cloud.d.ts.map +1 -1
  434. package/dist/providers/ollama-cloud.js +86 -112
  435. package/dist/providers/ollama-cloud.js.map +1 -1
  436. package/dist/providers/openai.d.ts.map +1 -1
  437. package/dist/providers/openai.js +144 -166
  438. package/dist/providers/openai.js.map +1 -1
  439. package/dist/providers/opencode-go.d.ts.map +1 -1
  440. package/dist/providers/opencode-go.js +157 -199
  441. package/dist/providers/opencode-go.js.map +1 -1
  442. package/dist/providers/opencode-zen.d.ts.map +1 -1
  443. package/dist/providers/opencode-zen.js +100 -150
  444. package/dist/providers/opencode-zen.js.map +1 -1
  445. package/dist/providers/openrouter.d.ts +0 -3
  446. package/dist/providers/openrouter.d.ts.map +1 -1
  447. package/dist/providers/openrouter.js +26 -13
  448. package/dist/providers/openrouter.js.map +1 -1
  449. package/dist/providers/quota-providers.d.ts +7 -3
  450. package/dist/providers/quota-providers.d.ts.map +1 -1
  451. package/dist/providers/quota-providers.js +111 -217
  452. package/dist/providers/quota-providers.js.map +1 -1
  453. package/dist/providers/registry.d.ts.map +1 -1
  454. package/dist/providers/registry.js +1 -2
  455. package/dist/providers/registry.js.map +1 -1
  456. package/dist/providers/result-helpers.d.ts +10 -37
  457. package/dist/providers/result-helpers.d.ts.map +1 -1
  458. package/dist/providers/result-helpers.js +23 -56
  459. package/dist/providers/result-helpers.js.map +1 -1
  460. package/dist/providers/synthetic.d.ts +0 -3
  461. package/dist/providers/synthetic.d.ts.map +1 -1
  462. package/dist/providers/synthetic.js +16 -58
  463. package/dist/providers/synthetic.js.map +1 -1
  464. package/dist/providers/xai.d.ts +2 -1
  465. package/dist/providers/xai.d.ts.map +1 -1
  466. package/dist/providers/xai.js +49 -71
  467. package/dist/providers/xai.js.map +1 -1
  468. package/dist/rpc.d.ts +110 -38
  469. package/dist/rpc.d.ts.map +1 -1
  470. package/dist/rpc.js +125 -37
  471. package/dist/rpc.js.map +1 -1
  472. package/dist/settings/convert.d.ts +60 -0
  473. package/dist/settings/convert.d.ts.map +1 -0
  474. package/dist/settings/convert.js +473 -0
  475. package/dist/settings/convert.js.map +1 -0
  476. package/dist/settings/file.d.ts +89 -0
  477. package/dist/settings/file.d.ts.map +1 -0
  478. package/dist/settings/file.js +452 -0
  479. package/dist/settings/file.js.map +1 -0
  480. package/dist/settings/index.d.ts +10 -0
  481. package/dist/settings/index.d.ts.map +1 -0
  482. package/dist/settings/index.js +3 -0
  483. package/dist/settings/index.js.map +1 -0
  484. package/dist/settings/schema.d.ts +607 -0
  485. package/dist/settings/schema.d.ts.map +1 -0
  486. package/dist/settings/schema.js +479 -0
  487. package/dist/settings/schema.js.map +1 -0
  488. package/dist/tui/client.d.ts +86 -0
  489. package/dist/tui/client.d.ts.map +1 -0
  490. package/dist/tui/client.js +229 -0
  491. package/dist/tui/client.js.map +1 -0
  492. package/dist/tui/display.d.ts +127 -0
  493. package/dist/tui/display.d.ts.map +1 -0
  494. package/dist/tui/display.js +474 -0
  495. package/dist/tui/display.js.map +1 -0
  496. package/dist/tui/index.d.ts +21 -0
  497. package/dist/tui/index.d.ts.map +1 -0
  498. package/dist/tui/index.js +305 -0
  499. package/dist/tui/server-settings.d.ts +43 -0
  500. package/dist/tui/server-settings.d.ts.map +1 -0
  501. package/dist/tui/server-settings.js +233 -0
  502. package/dist/tui/server-settings.js.map +1 -0
  503. package/dist/tui/sidebar.d.ts +41 -0
  504. package/dist/tui/sidebar.d.ts.map +1 -0
  505. package/dist/tui/sidebar.js +148 -0
  506. package/dist/tui/status-line.d.ts +14 -0
  507. package/dist/tui/status-line.d.ts.map +1 -0
  508. package/dist/tui/status-line.js +225 -0
  509. package/dist/tui/theme.d.ts +41 -0
  510. package/dist/tui/theme.d.ts.map +1 -0
  511. package/dist/tui/theme.js +52 -0
  512. package/dist/tui/theme.js.map +1 -0
  513. package/dist/tui/toast-colors.d.ts +37 -0
  514. package/dist/tui/toast-colors.d.ts.map +1 -0
  515. package/dist/tui/toast-colors.js +77 -0
  516. package/dist/tui/toasts.d.ts +59 -0
  517. package/dist/tui/toasts.d.ts.map +1 -0
  518. package/dist/tui/toasts.js +148 -0
  519. package/dist/tui/toasts.js.map +1 -0
  520. package/dist/tui/window/drag.d.ts +26 -0
  521. package/dist/tui/window/drag.d.ts.map +1 -0
  522. package/dist/tui/window/drag.js +80 -0
  523. package/dist/tui/window/drag.js.map +1 -0
  524. package/dist/tui/window/limits.d.ts +15 -0
  525. package/dist/tui/window/limits.d.ts.map +1 -0
  526. package/dist/tui/window/limits.js +227 -0
  527. package/dist/tui/window/limits.js.map +1 -0
  528. package/dist/tui/window/rail.d.ts +21 -0
  529. package/dist/tui/window/rail.d.ts.map +1 -0
  530. package/dist/tui/window/rail.js +81 -0
  531. package/dist/tui/window/settings.d.ts +164 -0
  532. package/dist/tui/window/settings.d.ts.map +1 -0
  533. package/dist/tui/window/settings.js +1679 -0
  534. package/dist/tui/window/shell.d.ts +108 -0
  535. package/dist/tui/window/shell.d.ts.map +1 -0
  536. package/dist/tui/window/shell.js +1003 -0
  537. package/dist/tui/window/usage.d.ts +75 -0
  538. package/dist/tui/window/usage.d.ts.map +1 -0
  539. package/dist/tui/window/usage.js +928 -0
  540. package/dist/tui/window/views.d.ts +61 -0
  541. package/dist/tui/window/views.d.ts.map +1 -0
  542. package/dist/tui/window/views.js +242 -0
  543. package/dist/tui.d.ts +1 -5
  544. package/dist/tui.js +1 -894
  545. package/dist/view/columns.d.ts +15 -0
  546. package/dist/view/columns.d.ts.map +1 -0
  547. package/dist/view/columns.js +48 -0
  548. package/dist/view/columns.js.map +1 -0
  549. package/dist/view/format.d.ts +82 -0
  550. package/dist/view/format.d.ts.map +1 -0
  551. package/dist/view/format.js +201 -0
  552. package/dist/view/format.js.map +1 -0
  553. package/dist/view/quick-look.d.ts +28 -0
  554. package/dist/view/quick-look.d.ts.map +1 -0
  555. package/dist/view/quick-look.js +150 -0
  556. package/dist/view/quick-look.js.map +1 -0
  557. package/dist/view/select.d.ts +67 -0
  558. package/dist/view/select.d.ts.map +1 -0
  559. package/dist/view/select.js +87 -0
  560. package/dist/view/select.js.map +1 -0
  561. package/dist/view/text.d.ts +153 -0
  562. package/dist/view/text.d.ts.map +1 -0
  563. package/dist/view/text.js +642 -0
  564. package/dist/view/text.js.map +1 -0
  565. package/dist/view/usage.d.ts +86 -0
  566. package/dist/view/usage.d.ts.map +1 -0
  567. package/dist/view/usage.js +724 -0
  568. package/dist/view/usage.js.map +1 -0
  569. package/package.json +4 -6
  570. package/dist/lib/chutes-config.d.ts +0 -15
  571. package/dist/lib/chutes-config.d.ts.map +0 -1
  572. package/dist/lib/chutes-config.js +0 -28
  573. package/dist/lib/chutes-config.js.map +0 -1
  574. package/dist/lib/cli-status.d.ts +0 -8
  575. package/dist/lib/cli-status.d.ts.map +0 -1
  576. package/dist/lib/cli-status.js +0 -98
  577. package/dist/lib/cli-status.js.map +0 -1
  578. package/dist/lib/command-parsing.d.ts +0 -43
  579. package/dist/lib/command-parsing.d.ts.map +0 -1
  580. package/dist/lib/command-parsing.js +0 -103
  581. package/dist/lib/command-parsing.js.map +0 -1
  582. package/dist/lib/config.d.ts +0 -63
  583. package/dist/lib/config.d.ts.map +0 -1
  584. package/dist/lib/config.js +0 -1092
  585. package/dist/lib/config.js.map +0 -1
  586. package/dist/lib/deepseek-auth.d.ts +0 -15
  587. package/dist/lib/deepseek-auth.d.ts.map +0 -1
  588. package/dist/lib/deepseek-auth.js +0 -28
  589. package/dist/lib/deepseek-auth.js.map +0 -1
  590. package/dist/lib/format.d.ts +0 -25
  591. package/dist/lib/format.d.ts.map +0 -1
  592. package/dist/lib/format.js +0 -300
  593. package/dist/lib/format.js.map +0 -1
  594. package/dist/lib/google-agy-companion.d.ts +0 -8
  595. package/dist/lib/google-agy-companion.d.ts.map +0 -1
  596. package/dist/lib/google-agy-companion.js +0 -64
  597. package/dist/lib/google-agy-companion.js.map +0 -1
  598. package/dist/lib/google-gemini-cli-companion.d.ts +0 -8
  599. package/dist/lib/google-gemini-cli-companion.d.ts.map +0 -1
  600. package/dist/lib/google-gemini-cli-companion.js +0 -64
  601. package/dist/lib/google-gemini-cli-companion.js.map +0 -1
  602. package/dist/lib/grouped-entry-normalization.d.ts +0 -12
  603. package/dist/lib/grouped-entry-normalization.d.ts.map +0 -1
  604. package/dist/lib/grouped-entry-normalization.js +0 -124
  605. package/dist/lib/grouped-entry-normalization.js.map +0 -1
  606. package/dist/lib/grouped-header-format.d.ts +0 -5
  607. package/dist/lib/grouped-header-format.d.ts.map +0 -1
  608. package/dist/lib/grouped-header-format.js +0 -16
  609. package/dist/lib/grouped-header-format.js.map +0 -1
  610. package/dist/lib/init-installer.d.ts +0 -123
  611. package/dist/lib/init-installer.d.ts.map +0 -1
  612. package/dist/lib/init-installer.js +0 -1111
  613. package/dist/lib/init-installer.js.map +0 -1
  614. package/dist/lib/jsonc.d.ts +0 -17
  615. package/dist/lib/jsonc.d.ts.map +0 -1
  616. package/dist/lib/jsonc.js +0 -23
  617. package/dist/lib/jsonc.js.map +0 -1
  618. package/dist/lib/kilo-config.d.ts +0 -15
  619. package/dist/lib/kilo-config.d.ts.map +0 -1
  620. package/dist/lib/kilo-config.js +0 -27
  621. package/dist/lib/kilo-config.js.map +0 -1
  622. package/dist/lib/kimi-auth.d.ts +0 -49
  623. package/dist/lib/kimi-auth.d.ts.map +0 -1
  624. package/dist/lib/kimi-auth.js +0 -82
  625. package/dist/lib/kimi-auth.js.map +0 -1
  626. package/dist/lib/markdown-table.d.ts +0 -51
  627. package/dist/lib/markdown-table.d.ts.map +0 -1
  628. package/dist/lib/markdown-table.js +0 -179
  629. package/dist/lib/markdown-table.js.map +0 -1
  630. package/dist/lib/minimax-auth.d.ts +0 -62
  631. package/dist/lib/minimax-auth.d.ts.map +0 -1
  632. package/dist/lib/minimax-auth.js +0 -206
  633. package/dist/lib/minimax-auth.js.map +0 -1
  634. package/dist/lib/nanogpt-config.d.ts +0 -15
  635. package/dist/lib/nanogpt-config.d.ts.map +0 -1
  636. package/dist/lib/nanogpt-config.js +0 -31
  637. package/dist/lib/nanogpt-config.js.map +0 -1
  638. package/dist/lib/ollama-cloud-config.d.ts +0 -15
  639. package/dist/lib/ollama-cloud-config.d.ts.map +0 -1
  640. package/dist/lib/ollama-cloud-config.js +0 -27
  641. package/dist/lib/ollama-cloud-config.js.map +0 -1
  642. package/dist/lib/opencode-go-auth.d.ts +0 -16
  643. package/dist/lib/opencode-go-auth.d.ts.map +0 -1
  644. package/dist/lib/opencode-go-auth.js +0 -42
  645. package/dist/lib/opencode-go-auth.js.map +0 -1
  646. package/dist/lib/opencode-version.d.ts +0 -6
  647. package/dist/lib/opencode-version.d.ts.map +0 -1
  648. package/dist/lib/opencode-version.js +0 -26
  649. package/dist/lib/opencode-version.js.map +0 -1
  650. package/dist/lib/provider-add-command.d.ts +0 -35
  651. package/dist/lib/provider-add-command.d.ts.map +0 -1
  652. package/dist/lib/provider-add-command.js +0 -204
  653. package/dist/lib/provider-add-command.js.map +0 -1
  654. package/dist/lib/provider-add-json-v1-questionnaire.d.ts +0 -32
  655. package/dist/lib/provider-add-json-v1-questionnaire.d.ts.map +0 -1
  656. package/dist/lib/provider-add-json-v1-questionnaire.js +0 -336
  657. package/dist/lib/provider-add-json-v1-questionnaire.js.map +0 -1
  658. package/dist/lib/provider-add.d.ts +0 -21
  659. package/dist/lib/provider-add.d.ts.map +0 -1
  660. package/dist/lib/provider-add.js +0 -219
  661. package/dist/lib/provider-add.js.map +0 -1
  662. package/dist/lib/quota-accounting-projection.d.ts +0 -9
  663. package/dist/lib/quota-accounting-projection.d.ts.map +0 -1
  664. package/dist/lib/quota-accounting-projection.js +0 -254
  665. package/dist/lib/quota-accounting-projection.js.map +0 -1
  666. package/dist/lib/quota-columns.d.ts +0 -38
  667. package/dist/lib/quota-columns.d.ts.map +0 -1
  668. package/dist/lib/quota-columns.js +0 -129
  669. package/dist/lib/quota-columns.js.map +0 -1
  670. package/dist/lib/quota-command-format.d.ts +0 -34
  671. package/dist/lib/quota-command-format.d.ts.map +0 -1
  672. package/dist/lib/quota-command-format.js +0 -240
  673. package/dist/lib/quota-command-format.js.map +0 -1
  674. package/dist/lib/quota-dialog-command-specs.d.ts +0 -63
  675. package/dist/lib/quota-dialog-command-specs.d.ts.map +0 -1
  676. package/dist/lib/quota-dialog-command-specs.js +0 -145
  677. package/dist/lib/quota-dialog-command-specs.js.map +0 -1
  678. package/dist/lib/quota-entry-display.d.ts +0 -7
  679. package/dist/lib/quota-entry-display.d.ts.map +0 -1
  680. package/dist/lib/quota-entry-display.js +0 -59
  681. package/dist/lib/quota-entry-display.js.map +0 -1
  682. package/dist/lib/quota-exhaustion-projection.d.ts +0 -11
  683. package/dist/lib/quota-exhaustion-projection.d.ts.map +0 -1
  684. package/dist/lib/quota-exhaustion-projection.js +0 -105
  685. package/dist/lib/quota-exhaustion-projection.js.map +0 -1
  686. package/dist/lib/quota-format-style.d.ts +0 -21
  687. package/dist/lib/quota-format-style.d.ts.map +0 -1
  688. package/dist/lib/quota-format-style.js +0 -38
  689. package/dist/lib/quota-format-style.js.map +0 -1
  690. package/dist/lib/quota-render-data.d.ts +0 -102
  691. package/dist/lib/quota-render-data.d.ts.map +0 -1
  692. package/dist/lib/quota-render-data.js +0 -419
  693. package/dist/lib/quota-render-data.js.map +0 -1
  694. package/dist/lib/quota-reset-notifications.d.ts +0 -20
  695. package/dist/lib/quota-reset-notifications.d.ts.map +0 -1
  696. package/dist/lib/quota-reset-notifications.js +0 -331
  697. package/dist/lib/quota-reset-notifications.js.map +0 -1
  698. package/dist/lib/quota-runtime-context.d.ts +0 -54
  699. package/dist/lib/quota-runtime-context.d.ts.map +0 -1
  700. package/dist/lib/quota-runtime-context.js +0 -110
  701. package/dist/lib/quota-runtime-context.js.map +0 -1
  702. package/dist/lib/quota-state-codec.d.ts +0 -16
  703. package/dist/lib/quota-state-codec.d.ts.map +0 -1
  704. package/dist/lib/quota-state-codec.js +0 -412
  705. package/dist/lib/quota-state-codec.js.map +0 -1
  706. package/dist/lib/quota-state.d.ts +0 -28
  707. package/dist/lib/quota-state.d.ts.map +0 -1
  708. package/dist/lib/quota-state.js +0 -473
  709. package/dist/lib/quota-state.js.map +0 -1
  710. package/dist/lib/quota-stats-format.d.ts +0 -29
  711. package/dist/lib/quota-stats-format.d.ts.map +0 -1
  712. package/dist/lib/quota-stats-format.js +0 -459
  713. package/dist/lib/quota-stats-format.js.map +0 -1
  714. package/dist/lib/quota-stats.d.ts +0 -126
  715. package/dist/lib/quota-stats.d.ts.map +0 -1
  716. package/dist/lib/quota-stats.js +0 -695
  717. package/dist/lib/quota-stats.js.map +0 -1
  718. package/dist/lib/quota-surface-data.d.ts +0 -21
  719. package/dist/lib/quota-surface-data.d.ts.map +0 -1
  720. package/dist/lib/quota-surface-data.js +0 -362
  721. package/dist/lib/quota-surface-data.js.map +0 -1
  722. package/dist/lib/scoped-update-migration.d.ts +0 -103
  723. package/dist/lib/scoped-update-migration.d.ts.map +0 -1
  724. package/dist/lib/scoped-update-migration.js +0 -344
  725. package/dist/lib/scoped-update-migration.js.map +0 -1
  726. package/dist/lib/scoped-update.d.ts +0 -77
  727. package/dist/lib/scoped-update.d.ts.map +0 -1
  728. package/dist/lib/scoped-update.js +0 -590
  729. package/dist/lib/scoped-update.js.map +0 -1
  730. package/dist/lib/session-tokens-format.d.ts +0 -36
  731. package/dist/lib/session-tokens-format.d.ts.map +0 -1
  732. package/dist/lib/session-tokens-format.js +0 -111
  733. package/dist/lib/session-tokens-format.js.map +0 -1
  734. package/dist/lib/synthetic-config.d.ts +0 -15
  735. package/dist/lib/synthetic-config.d.ts.map +0 -1
  736. package/dist/lib/synthetic-config.js +0 -28
  737. package/dist/lib/synthetic-config.js.map +0 -1
  738. package/dist/lib/toast-format-grouped.d.ts +0 -25
  739. package/dist/lib/toast-format-grouped.d.ts.map +0 -1
  740. package/dist/lib/toast-format-grouped.js +0 -296
  741. package/dist/lib/toast-format-grouped.js.map +0 -1
  742. package/dist/lib/tui-compact-format.d.ts +0 -10
  743. package/dist/lib/tui-compact-format.d.ts.map +0 -1
  744. package/dist/lib/tui-compact-format.js +0 -460
  745. package/dist/lib/tui-compact-format.js.map +0 -1
  746. package/dist/lib/tui-panel-state.d.ts +0 -15
  747. package/dist/lib/tui-panel-state.d.ts.map +0 -1
  748. package/dist/lib/tui-panel-state.js +0 -2
  749. package/dist/lib/tui-panel-state.js.map +0 -1
  750. package/dist/lib/tui-prompt-bar-format.d.ts +0 -25
  751. package/dist/lib/tui-prompt-bar-format.d.ts.map +0 -1
  752. package/dist/lib/tui-prompt-bar-format.js +0 -206
  753. package/dist/lib/tui-prompt-bar-format.js.map +0 -1
  754. package/dist/lib/tui-sidebar-format.d.ts +0 -13
  755. package/dist/lib/tui-sidebar-format.d.ts.map +0 -1
  756. package/dist/lib/tui-sidebar-format.js +0 -34
  757. package/dist/lib/tui-sidebar-format.js.map +0 -1
  758. package/dist/lib/zai-auth.d.ts +0 -15
  759. package/dist/lib/zai-auth.d.ts.map +0 -1
  760. package/dist/lib/zai-auth.js +0 -37
  761. package/dist/lib/zai-auth.js.map +0 -1
  762. package/dist/lib/zai.d.ts +0 -5
  763. package/dist/lib/zai.d.ts.map +0 -1
  764. package/dist/lib/zai.js +0 -14
  765. package/dist/lib/zai.js.map +0 -1
  766. package/dist/lib/zhipu-auth.d.ts +0 -15
  767. package/dist/lib/zhipu-auth.d.ts.map +0 -1
  768. package/dist/lib/zhipu-auth.js +0 -42
  769. package/dist/lib/zhipu-auth.js.map +0 -1
  770. package/dist/lib/zhipu.d.ts +0 -5
  771. package/dist/lib/zhipu.d.ts.map +0 -1
  772. package/dist/lib/zhipu.js +0 -13
  773. package/dist/lib/zhipu.js.map +0 -1
  774. package/dist/providers/glm-coding-plan-provider.d.ts +0 -56
  775. package/dist/providers/glm-coding-plan-provider.d.ts.map +0 -1
  776. package/dist/providers/glm-coding-plan-provider.js +0 -115
  777. package/dist/providers/glm-coding-plan-provider.js.map +0 -1
  778. package/dist/providers/google-account-format.d.ts +0 -7
  779. package/dist/providers/google-account-format.d.ts.map +0 -1
  780. package/dist/providers/google-account-format.js +0 -52
  781. package/dist/providers/google-account-format.js.map +0 -1
  782. package/dist/providers/zai.d.ts +0 -2
  783. package/dist/providers/zai.d.ts.map +0 -1
  784. package/dist/providers/zai.js +0 -24
  785. package/dist/providers/zai.js.map +0 -1
  786. package/dist/providers/zhipu.d.ts +0 -2
  787. package/dist/providers/zhipu.d.ts.map +0 -1
  788. package/dist/providers/zhipu.js +0 -21
  789. package/dist/providers/zhipu.js.map +0 -1
  790. package/dist/tui-v2.d.ts +0 -5
  791. package/dist/tui-v2.d.ts.map +0 -1
  792. package/dist/tui-v2.jsx +0 -624
  793. package/dist/tui-v2.jsx.map +0 -1
  794. package/dist/tui.d.ts.map +0 -1
@@ -1,571 +1,140 @@
1
1
  import crypto from "node:crypto";
2
- import { readGlobalProviderConfigString } from "./api-key-resolver.js";
3
- import { clearAgyCompanionCacheForTests, inspectAgyCompanionPresence, resolveAgyClientCredentials, } from "./google-agy-companion.js";
4
- import { getCachedAccessToken, makeAccountCacheKey, setCachedAccessToken, } from "./google-token-cache.js";
5
- import { fetchWithTimeout } from "./http.js";
6
- import { mapWithConcurrency } from "./map-with-concurrency.js";
7
- import { readAuthFileCached } from "./opencode-auth.js";
8
- import { composeResolvedAuthIdentities, deriveResolvedAuthIdentity, } from "./resolved-auth-identity.js";
9
- export const DEFAULT_AGY_AUTH_CACHE_MAX_AGE_MS = 5_000;
2
+ import { agyCompanion } from "./google-companion-credentials.js";
3
+ import { hasGoogleQuotaRuntimeAvailable, inspectGoogleAuthPresence, queryGoogleQuota, resolveGoogleAuthIdentity, } from "./google-oauth-quota.js";
4
+ import { nonEmptyString } from "./json-guards.js";
10
5
  export const AGY_AUTH_KEYS = [
11
6
  "google-agy",
12
7
  "opencode-agy-auth",
13
8
  "google-agy-auth",
14
9
  ];
15
- const AGY_CODE_ASSIST_ENDPOINT = "https://daily-cloudcode-pa.googleapis.com";
16
- const AGY_QUOTA_SUMMARY_API_URL = `${AGY_CODE_ASSIST_ENDPOINT}/v1internal:retrieveUserQuotaSummary`;
17
- const AGY_TOKEN_REFRESH_URL = "https://oauth2.googleapis.com/token";
18
- const AGY_TOKEN_TIMEOUT_MS = 8_000;
19
- const AGY_QUOTA_TIMEOUT_MS = 6_000;
20
- const AGY_ACCOUNTS_CONCURRENCY = 3;
21
- const AGY_USER_AGENT = "antigravity/cli/1.3.5 darwin/amd64";
22
- function createAgyActivityRequestId() {
23
- return crypto.randomUUID();
24
- }
25
- function normalizeString(value) {
26
- if (typeof value !== "string") {
27
- return undefined;
28
- }
29
- const trimmed = value.trim();
30
- return trimmed || undefined;
31
- }
32
- export function parseAgyRefreshParts(refresh) {
33
- const [refreshToken = "", projectId = "", managedProjectId = ""] = (refresh ?? "").split("|");
34
- return {
35
- refreshToken: refreshToken.trim(),
36
- ...(normalizeString(projectId) ? { projectId: projectId.trim() } : {}),
37
- ...(normalizeString(managedProjectId) ? { managedProjectId: managedProjectId.trim() } : {}),
38
- };
39
- }
40
- export function resolveAgyAccounts(auth, configuredProjectId) {
41
- if (!auth) {
42
- return [];
43
- }
44
- const accounts = [];
45
- const seen = new Set();
46
- for (const sourceKey of AGY_AUTH_KEYS) {
47
- const entry = auth[sourceKey];
48
- if (!entry || entry.type !== "oauth") {
49
- continue;
50
- }
51
- const parts = parseAgyRefreshParts(entry.refresh);
52
- if (!parts.refreshToken) {
53
- continue;
54
- }
55
- const projectId = normalizeString(entry.managedProjectId) ??
56
- normalizeString(entry.quotaProjectId) ??
57
- parts.managedProjectId ??
58
- normalizeString(entry.projectId) ??
59
- normalizeString(entry.projectID) ??
60
- parts.projectId ??
61
- normalizeString(configuredProjectId);
62
- if (!projectId) {
63
- continue;
64
- }
65
- const email = normalizeString(entry.email) ??
66
- normalizeString(entry.accountEmail) ??
67
- normalizeString(entry.login);
68
- const key = `${parts.refreshToken}\n${projectId}`;
69
- if (seen.has(key)) {
70
- continue;
71
- }
72
- seen.add(key);
73
- accounts.push({
74
- sourceKey,
75
- refreshToken: parts.refreshToken,
76
- projectId,
77
- ...(email ? { email } : {}),
78
- ...(normalizeString(entry.access) ? { accessToken: entry.access.trim() } : {}),
79
- ...(typeof entry.expires === "number" ? { expiresAt: entry.expires } : {}),
80
- });
81
- }
82
- return accounts;
83
- }
84
- export async function resolveAgyConfiguredProjectId() {
85
- const explicitEnvProjectId = normalizeString(process.env.OPENCODE_AGY_PROJECT_ID);
86
- if (explicitEnvProjectId) {
87
- return explicitEnvProjectId;
88
- }
89
- const configProjectId = await readGlobalProviderConfigString("google-agy", "projectId");
90
- if (configProjectId) {
91
- return configProjectId;
92
- }
93
- return (normalizeString(process.env.GOOGLE_CLOUD_PROJECT) ??
94
- normalizeString(process.env.GOOGLE_CLOUD_PROJECT_ID));
95
- }
96
- export async function resolveGoogleAgyAuthIdentity() {
97
- const [auth, configuredProjectId, credentials] = await Promise.all([
98
- readAuthFileCached({
99
- maxAgeMs: DEFAULT_AGY_AUTH_CACHE_MAX_AGE_MS,
100
- integrationIds: AGY_AUTH_KEYS,
101
- }),
102
- resolveAgyConfiguredProjectId(),
103
- resolveAgyClientCredentials(),
104
- ]);
105
- const accounts = resolveAgyAccounts(auth, configuredProjectId);
106
- if (accounts.length === 0 || credentials.state !== "configured")
107
- return null;
108
- const accountIdentities = await Promise.all(accounts.map((account) => deriveResolvedAuthIdentity({
109
- providerId: "google-agy",
110
- principal: { kind: "credential", value: account.refreshToken },
111
- qualifiers: [account.projectId],
112
- })));
113
- if (accountIdentities.some((identity) => identity === null))
114
- return null;
115
- const companionIdentity = await deriveResolvedAuthIdentity({
116
- providerId: "google-agy:companion",
117
- principal: { kind: "credential", value: credentials.clientSecret },
118
- qualifiers: [credentials.clientId],
119
- });
120
- if (!companionIdentity)
121
- return null;
122
- return composeResolvedAuthIdentities({
123
- providerId: "google-agy",
124
- identities: [...accountIdentities, companionIdentity],
125
- });
126
- }
127
- export async function inspectAgyAuthPresence() {
128
- const [auth, configuredProjectId] = await Promise.all([
129
- readAuthFileCached({
130
- maxAgeMs: DEFAULT_AGY_AUTH_CACHE_MAX_AGE_MS,
131
- integrationIds: AGY_AUTH_KEYS,
132
- }),
133
- resolveAgyConfiguredProjectId(),
134
- ]);
135
- let accountCount = 0;
136
- if (auth) {
137
- for (const sourceKey of AGY_AUTH_KEYS) {
138
- const entry = auth[sourceKey];
139
- if (entry && entry.type === "oauth") {
140
- accountCount++;
141
- }
142
- }
143
- }
144
- if (accountCount === 0) {
145
- return { state: "missing", accountCount: 0, validAccountCount: 0 };
146
- }
147
- const accounts = resolveAgyAccounts(auth, configuredProjectId);
148
- const sourceKey = accounts[0]?.sourceKey ?? AGY_AUTH_KEYS.find((key) => auth?.[key]?.type === "oauth");
149
- if (accounts.length === 0) {
150
- return {
151
- state: "invalid",
152
- ...(sourceKey ? { sourceKey } : {}),
153
- accountCount,
154
- validAccountCount: 0,
155
- error: "Google AGY OAuth auth is missing a refresh token or project id",
156
- };
157
- }
158
- return {
159
- state: "present",
160
- sourceKey: accounts[0].sourceKey,
161
- accountCount,
162
- validAccountCount: accounts.length,
163
- };
164
- }
165
- export async function hasAgyQuotaRuntimeAvailable() {
166
- const [authPresence, companionPresence] = await Promise.all([
167
- inspectAgyAuthPresence(),
168
- inspectAgyCompanionPresence(),
169
- ]);
170
- return (authPresence.state === "present" &&
171
- authPresence.validAccountCount > 0 &&
172
- companionPresence.state === "present");
173
- }
174
- async function refreshAccessToken(params) {
175
- try {
176
- return await fetchWithTimeout(AGY_TOKEN_REFRESH_URL, {
177
- request: {
178
- method: "POST",
179
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
180
- body: new URLSearchParams({
181
- client_id: params.clientId,
182
- client_secret: params.clientSecret,
183
- refresh_token: params.refreshToken,
184
- grant_type: "refresh_token",
185
- }),
186
- },
187
- timeoutMs: params.timeoutMs ?? AGY_TOKEN_TIMEOUT_MS,
188
- consume: async (response, timeoutSignal) => {
189
- if (!response.ok) {
190
- try {
191
- const errorData = (await response.json());
192
- if (errorData.error === "invalid_grant") {
193
- return { error: "Token revoked" };
194
- }
195
- return { error: errorData.error_description || `HTTP ${response.status}` };
196
- }
197
- catch (error) {
198
- if (timeoutSignal.aborted)
199
- throw error;
200
- return { error: `HTTP ${response.status}` };
201
- }
202
- }
203
- const data = (await response.json());
204
- return {
205
- accessToken: data.access_token,
206
- expiresIn: data.expires_in,
207
- };
208
- },
209
- });
210
- }
211
- catch (err) {
212
- if (err instanceof Error && err.message.includes("timeout")) {
213
- return { error: "Token refresh timeout" };
214
- }
215
- return { error: "Token refresh failed" };
216
- }
217
- }
218
- async function refreshAgyAccessTokenWithCache(params) {
219
- const skewMs = params.skewMs ?? 2 * 60_000;
220
- const key = makeAccountCacheKey({
221
- refreshToken: params.account.refreshToken,
222
- projectId: params.account.projectId,
223
- });
224
- if (!params.force) {
225
- const cached = await getCachedAccessToken({ key, skewMs });
226
- if (cached)
227
- return { accessToken: cached.accessToken };
228
- if (params.account.accessToken &&
229
- typeof params.account.expiresAt === "number" &&
230
- params.account.expiresAt > Date.now() + skewMs) {
231
- return { accessToken: params.account.accessToken };
232
- }
233
- }
234
- const refreshed = await refreshAccessToken({
235
- refreshToken: params.account.refreshToken,
236
- clientId: params.credentials.clientId,
237
- clientSecret: params.credentials.clientSecret,
238
- timeoutMs: params.timeoutMs,
239
- });
240
- if ("error" in refreshed)
241
- return refreshed;
242
- await setCachedAccessToken({
243
- key,
244
- entry: {
245
- accessToken: refreshed.accessToken,
246
- expiresAt: Date.now() + Math.max(1, refreshed.expiresIn) * 1000,
247
- },
248
- });
249
- return { accessToken: refreshed.accessToken };
250
- }
251
- async function retrieveGoogleAgyQuotaSummary(accessToken, projectId, timeoutMs = AGY_QUOTA_TIMEOUT_MS) {
252
- return await fetchWithTimeout(AGY_QUOTA_SUMMARY_API_URL, {
253
- request: {
254
- method: "POST",
255
- headers: {
256
- "Content-Type": "application/json",
257
- Authorization: `Bearer ${accessToken}`,
258
- "User-Agent": AGY_USER_AGENT,
259
- "x-activity-request-id": createAgyActivityRequestId(),
260
- },
261
- body: JSON.stringify({ project: projectId }),
262
- },
263
- timeoutMs,
264
- consume: async (response) => {
265
- if (!response.ok) {
266
- if (response.status === 401 || response.status === 403) {
267
- throw new Error(`Google AGY quota auth error: ${response.status}`);
268
- }
269
- throw new Error(`Google AGY quota API error: ${response.status}`);
270
- }
271
- return (await response.json());
272
- },
273
- });
274
- }
275
- export function formatDisplayName(modelId) {
276
- // Replace all underscores with hyphens
277
- let cleaned = modelId.replace(/_/g, "-").trim();
278
- // Special cases for well-known prefixes
279
- if (cleaned.toLowerCase().startsWith("claude-")) {
280
- // Handle versions like claude-3-5-sonnet -> Claude 3.5 Sonnet
281
- return cleaned
282
- .split("-")
283
- .map((part, i) => {
284
- if (i === 0)
285
- return "Claude";
286
- if (/^\d+$/.test(part) && /^\d+$/.test(cleaned.split("-")[i + 1] || "")) {
287
- return part + "." + cleaned.split("-")[i + 1];
288
- }
289
- if (/^\d+$/.test(part) && /^\d+$/.test(cleaned.split("-")[i - 1] || "")) {
290
- return ""; // Skip second part of version
291
- }
292
- return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
293
- })
294
- .filter(Boolean)
295
- .join(" ");
296
- }
297
- // Replace gpt-oss (case-insensitive) with a temporary placeholder
298
- cleaned = cleaned.replace(/gpt-oss/gi, "GPT_OSS");
299
- // Replace digit-digit with digit.digit (e.g. 4-6 to 4.6)
300
- cleaned = cleaned.replace(/(\d+)-(\d+)/g, "$1.$2");
301
- let suffix = "";
302
- if (cleaned.toLowerCase().endsWith("-medium")) {
303
- suffix = " (Medium)";
304
- cleaned = cleaned.slice(0, -7);
305
- }
306
- else if (cleaned.toLowerCase().endsWith("-large")) {
307
- suffix = " (Large)";
308
- cleaned = cleaned.slice(0, -6);
309
- }
310
- const parts = cleaned.split("-").filter(Boolean);
311
- const formattedParts = parts.map((part) => {
312
- if (part === "GPT_OSS") {
313
- return "GPT-OSS";
314
- }
315
- const lower = part.toLowerCase();
316
- if (lower === "gpt")
317
- return "GPT";
318
- if (lower === "oss")
319
- return "OSS";
320
- // If it's a size like 120b, capitalize it to 120B
321
- if (/^\d+[a-zA-Z]+$/.test(part)) {
322
- return part.toUpperCase();
323
- }
324
- // If it's a version number like 3.5 or 4.6, keep as-is
325
- if (/^[0-9]+(?:\.[0-9]+)*$/.test(part)) {
326
- return part;
327
- }
328
- return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
329
- });
330
- return formattedParts.join(" ") + suffix;
331
- }
332
- function normalizeSummaryWindow(value) {
333
- const normalized = normalizeString(value)
10
+ const AGY = {
11
+ providerId: "google-agy",
12
+ name: "Google AGY",
13
+ authKeys: AGY_AUTH_KEYS,
14
+ projectIdEnvVar: "OPENCODE_AGY_PROJECT_ID",
15
+ projectIdConfigProvider: "google-agy",
16
+ failedLoginCountsAsPresent: false,
17
+ companion: agyCompanion,
18
+ quotaUrl: "https://daily-cloudcode-pa.googleapis.com/v1internal:retrieveUserQuotaSummary",
19
+ quotaHeaders: () => ({
20
+ "User-Agent": "antigravity/cli/1.3.5 darwin/amd64",
21
+ "x-activity-request-id": crypto.randomUUID(),
22
+ }),
23
+ toBuckets: toAgyBuckets,
24
+ };
25
+ function normalizeWindow(value) {
26
+ const normalized = nonEmptyString(value)
334
27
  ?.toUpperCase()
335
28
  .replace(/[\s-]+/gu, "_");
336
- if (normalized === "WEEKLY") {
29
+ if (normalized === "WEEKLY")
337
30
  return { window: "weekly", windowLabel: "Weekly" };
338
- }
339
31
  if (normalized === "FIVE_HOUR" || normalized === "5H") {
340
32
  return { window: "five_hour", windowLabel: "5h" };
341
33
  }
342
34
  return undefined;
343
35
  }
344
- function normalizeSummaryFamily(value) {
345
- const displayName = normalizeString(value);
346
- if (!displayName) {
36
+ function normalizeFamily(value) {
37
+ const displayName = nonEmptyString(value);
38
+ if (!displayName)
347
39
  return undefined;
348
- }
349
40
  const normalized = displayName.toLowerCase();
350
- if (normalized.includes("gemini")) {
41
+ if (normalized.includes("gemini"))
351
42
  return "Gemini Models";
352
- }
353
- if (normalized.includes("claude") || normalized.includes("gpt")) {
43
+ if (normalized.includes("claude") || normalized.includes("gpt"))
354
44
  return "Claude and GPT models";
355
- }
356
45
  return displayName;
357
46
  }
358
- function normalizeResetTimeIso(value) {
359
- const raw = normalizeString(value);
360
- if (!raw)
361
- return undefined;
362
- const timestamp = Date.parse(raw);
363
- return Number.isFinite(timestamp) ? new Date(timestamp).toISOString() : undefined;
364
- }
365
- function summaryFamilyRank(family) {
47
+ function familyRank(family) {
366
48
  if (family === "Gemini Models")
367
49
  return 0;
368
50
  if (family === "Claude and GPT models")
369
51
  return 1;
370
52
  return 2;
371
53
  }
372
- function summaryWindowRank(window) {
373
- return window === "weekly" ? 0 : 1;
374
- }
375
- function compareSummaryBuckets(left, right) {
376
- if (left.accountIndex !== right.accountIndex) {
377
- return left.accountIndex - right.accountIndex;
378
- }
379
- const familyRank = summaryFamilyRank(left.family) - summaryFamilyRank(right.family);
380
- if (familyRank !== 0) {
381
- return familyRank;
382
- }
383
- const familyName = left.family.localeCompare(right.family);
384
- if (familyName !== 0) {
385
- return familyName;
386
- }
387
- const windowRank = summaryWindowRank(left.window) - summaryWindowRank(right.window);
388
- if (windowRank !== 0) {
389
- return windowRank;
390
- }
391
- const bucketLabel = (left.bucketLabel ?? "").localeCompare(right.bucketLabel ?? "");
392
- if (bucketLabel !== 0) {
393
- return bucketLabel;
394
- }
395
- return (left.bucketId ?? "").localeCompare(right.bucketId ?? "");
396
- }
397
- function normalizeSummaryBucket(params) {
398
- if (params.bucket.disabled) {
54
+ /** Account, then Gemini before Claude/GPT before other families, then weekly before 5h. */
55
+ export function compareAgyBuckets(left, right) {
56
+ return (left.accountIndex - right.accountIndex ||
57
+ familyRank(left.family) - familyRank(right.family) ||
58
+ left.family.localeCompare(right.family) ||
59
+ (left.window === "weekly" ? 0 : 1) - (right.window === "weekly" ? 0 : 1) ||
60
+ (left.bucketLabel ?? "").localeCompare(right.bucketLabel ?? "") ||
61
+ (left.bucketId ?? "").localeCompare(right.bucketId ?? ""));
62
+ }
63
+ function toAgyBucket(bucket, family, account, accountIndex) {
64
+ if (!bucket || typeof bucket !== "object" || bucket.disabled)
399
65
  return undefined;
400
- }
401
- const window = normalizeSummaryWindow(params.bucket.window);
402
- const remainingFraction = params.bucket.remainingFraction;
66
+ const window = normalizeWindow(bucket.window);
67
+ const remainingFraction = bucket.remainingFraction;
403
68
  if (!window || typeof remainingFraction !== "number" || !Number.isFinite(remainingFraction)) {
404
69
  return undefined;
405
70
  }
406
- const bucketId = normalizeString(params.bucket.bucketId);
407
- const bucketLabel = normalizeString(params.bucket.displayName);
408
- const remainingAmount = normalizeString(params.bucket.remainingAmount) ?? normalizeString(params.bucket.remaining);
409
- const resetTimeIso = normalizeResetTimeIso(params.bucket.resetTime);
71
+ const bucketId = nonEmptyString(bucket.bucketId);
72
+ const bucketLabel = nonEmptyString(bucket.displayName);
73
+ const remainingAmount = nonEmptyString(bucket.remainingAmount) ?? nonEmptyString(bucket.remaining);
74
+ const resetTimeMs = Date.parse(nonEmptyString(bucket.resetTime) ?? "");
410
75
  return {
411
- family: params.family,
76
+ family,
412
77
  ...window,
413
78
  ...(bucketId ? { bucketId } : {}),
414
79
  ...(bucketLabel ? { bucketLabel } : {}),
415
80
  remainingFraction,
416
81
  percentRemaining: Math.round(Math.min(1, Math.max(0, remainingFraction)) * 100),
417
- ...(resetTimeIso ? { resetTimeIso } : {}),
82
+ ...(Number.isFinite(resetTimeMs) ? { resetTimeIso: new Date(resetTimeMs).toISOString() } : {}),
418
83
  ...(remainingAmount ? { remainingAmount } : {}),
419
- ...(params.account.email ? { accountEmail: params.account.email } : {}),
420
- accountIndex: params.accountIndex,
421
- sourceKey: params.account.sourceKey,
84
+ ...(account.email ? { accountEmail: account.email } : {}),
85
+ accountIndex,
86
+ sourceKey: account.sourceKey,
422
87
  };
423
88
  }
424
- function mapSummaryBuckets(response, account, accountIndex) {
425
- if (!response || typeof response !== "object") {
426
- return [];
427
- }
428
- const normalized = [];
429
- for (const group of Array.isArray(response.groups) ? response.groups : []) {
430
- const family = normalizeSummaryFamily(group?.displayName);
431
- if (!family || !Array.isArray(group?.buckets)) {
432
- continue;
89
+ /**
90
+ * Rows of the grouped summary, or of the top-level buckets when no group has a
91
+ * usable row. Duplicate rows keep the most constrained one.
92
+ */
93
+ function toAgyBuckets(response, account, accountIndex) {
94
+ const rows = [];
95
+ const addRows = (buckets, family) => {
96
+ if (!family || !Array.isArray(buckets))
97
+ return;
98
+ for (const bucket of buckets) {
99
+ const row = toAgyBucket(bucket, family, account, accountIndex);
100
+ if (row)
101
+ rows.push(row);
433
102
  }
434
- for (const bucket of group.buckets) {
435
- if (!bucket || typeof bucket !== "object") {
436
- continue;
437
- }
438
- const row = normalizeSummaryBucket({ bucket, family, account, accountIndex });
439
- if (row) {
440
- normalized.push(row);
441
- }
103
+ };
104
+ if (response && typeof response === "object") {
105
+ for (const group of Array.isArray(response.groups) ? response.groups : []) {
106
+ addRows(group?.buckets, normalizeFamily(group?.displayName));
442
107
  }
443
- }
444
- if (normalized.length === 0 && Array.isArray(response.buckets)) {
445
- const family = normalizeSummaryFamily(response.description) ?? "Quota Summary";
446
- for (const bucket of response.buckets) {
447
- if (!bucket || typeof bucket !== "object") {
448
- continue;
449
- }
450
- const row = normalizeSummaryBucket({ bucket, family, account, accountIndex });
451
- if (row) {
452
- normalized.push(row);
453
- }
108
+ if (rows.length === 0) {
109
+ addRows(response.buckets, normalizeFamily(response.description) ?? "Quota Summary");
454
110
  }
455
111
  }
456
112
  const deduplicated = new Map();
457
- for (const bucket of normalized) {
458
- const bucketIdentity = bucket.bucketId ?? bucket.bucketLabel ?? bucket.window;
459
- const identity = `${bucket.family}\0${bucket.window}\0${bucketIdentity}`;
113
+ for (const row of rows) {
114
+ const identity = `${row.family}\0${row.window}\0${row.bucketId ?? row.bucketLabel ?? row.window}`;
460
115
  const existing = deduplicated.get(identity);
461
- if (!existing || bucket.remainingFraction < existing.remainingFraction) {
462
- deduplicated.set(identity, bucket);
116
+ if (!existing || row.remainingFraction < existing.remainingFraction) {
117
+ deduplicated.set(identity, row);
463
118
  }
464
119
  }
465
- return Array.from(deduplicated.values()).sort(compareSummaryBuckets);
120
+ // A summary without one usable row fails this account.
121
+ if (deduplicated.size === 0)
122
+ throw new Error("Quota summary API unavailable");
123
+ return [...deduplicated.values()].sort(compareAgyBuckets);
466
124
  }
467
- async function fetchAccountQuota(params) {
468
- const accountEmail = params.account.email || params.account.sourceKey;
469
- try {
470
- const tokenResult = await refreshAgyAccessTokenWithCache({
471
- account: params.account,
472
- credentials: params.credentials,
473
- timeoutMs: params.timeoutMs,
474
- });
475
- if ("error" in tokenResult) {
476
- return { success: false, error: tokenResult.error, accountEmail };
477
- }
478
- let summary;
479
- try {
480
- summary = await retrieveGoogleAgyQuotaSummary(tokenResult.accessToken, params.account.projectId, params.timeoutMs);
481
- }
482
- catch (err) {
483
- if (err instanceof Error && err.message.includes("auth error")) {
484
- const retryToken = await refreshAgyAccessTokenWithCache({
485
- account: params.account,
486
- credentials: params.credentials,
487
- force: true,
488
- timeoutMs: params.timeoutMs,
489
- });
490
- if ("error" in retryToken) {
491
- return { success: false, error: retryToken.error, accountEmail };
492
- }
493
- summary = await retrieveGoogleAgyQuotaSummary(retryToken.accessToken, params.account.projectId, params.timeoutMs);
494
- }
495
- else {
496
- throw err;
497
- }
498
- }
499
- const buckets = mapSummaryBuckets(summary, params.account, params.accountIndex);
500
- if (buckets.length === 0) {
501
- return {
502
- success: false,
503
- error: "Quota summary API unavailable",
504
- accountEmail,
505
- };
506
- }
507
- return { success: true, buckets, accountEmail };
508
- }
509
- catch (err) {
510
- if (err instanceof Error && err.message.includes("timeout")) {
511
- return { success: false, error: "API timeout", accountEmail };
512
- }
513
- return {
514
- success: false,
515
- error: err instanceof Error ? err.message : String(err),
516
- accountEmail,
517
- };
518
- }
125
+ export function resolveGoogleAgyAuthIdentity() {
126
+ return resolveGoogleAuthIdentity(AGY);
519
127
  }
520
- export async function queryGoogleAgyQuota(options = {}) {
521
- const [auth, configuredProjectId] = await Promise.all([
522
- options.authData ??
523
- readAuthFileCached({
524
- maxAgeMs: DEFAULT_AGY_AUTH_CACHE_MAX_AGE_MS,
525
- integrationIds: AGY_AUTH_KEYS,
526
- }),
527
- resolveAgyConfiguredProjectId(),
528
- ]);
529
- const accounts = resolveAgyAccounts(auth, configuredProjectId);
530
- if (accounts.length === 0) {
531
- return null;
532
- }
533
- const credentials = await resolveAgyClientCredentials();
534
- if (credentials.state !== "configured") {
535
- return {
536
- success: false,
537
- error: credentials.error || "Google AGY companion auth plugin not found",
538
- };
539
- }
540
- const results = await mapWithConcurrency(accounts, AGY_ACCOUNTS_CONCURRENCY, async (account, accountIndex) => fetchAccountQuota({
541
- account,
542
- accountIndex,
543
- credentials,
544
- timeoutMs: options.requestTimeoutMs,
545
- }));
546
- const allBuckets = [];
547
- const errors = [];
548
- for (const result of results) {
549
- if (result.success && result.buckets && result.buckets.length > 0) {
550
- allBuckets.push(...result.buckets);
551
- }
552
- else if (!result.success && result.error && result.accountEmail) {
553
- errors.push({ email: result.accountEmail, error: result.error });
554
- }
555
- }
556
- if (allBuckets.length === 0 && errors.length === 0) {
557
- return {
558
- success: false,
559
- error: "No Google AGY quota data available",
560
- };
561
- }
562
- return {
563
- success: true,
564
- buckets: allBuckets.sort(compareSummaryBuckets),
565
- errors: errors.length > 0 ? errors : undefined,
566
- };
128
+ export function inspectAgyAuthPresence() {
129
+ return inspectGoogleAuthPresence(AGY);
130
+ }
131
+ export function inspectAgyCompanionPresence() {
132
+ return agyCompanion.inspect();
133
+ }
134
+ export function hasAgyQuotaRuntimeAvailable() {
135
+ return hasGoogleQuotaRuntimeAvailable(AGY);
567
136
  }
568
- export function clearAgyRuntimeCacheForTests() {
569
- clearAgyCompanionCacheForTests();
137
+ export function queryGoogleAgyQuota(options = {}) {
138
+ return queryGoogleQuota(AGY, options);
570
139
  }
571
140
  //# sourceMappingURL=google-agy.js.map