@kaitranntt/ccs 8.4.0-dev.10 → 8.4.0-dev.11

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 (478) hide show
  1. package/dist/auth/profile-registry.d.ts.map +1 -1
  2. package/dist/auth/profile-registry.js +13 -12
  3. package/dist/auth/profile-registry.js.map +1 -1
  4. package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
  5. package/dist/cliproxy/accounts/account-safety.js +56 -56
  6. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  7. package/dist/cliproxy/auth/antigravity-responsibility.d.ts.map +1 -1
  8. package/dist/cliproxy/auth/antigravity-responsibility.js +15 -15
  9. package/dist/cliproxy/auth/antigravity-responsibility.js.map +1 -1
  10. package/dist/cliproxy/auth/auth-token-manager.d.ts.map +1 -1
  11. package/dist/cliproxy/auth/auth-token-manager.js +2 -1
  12. package/dist/cliproxy/auth/auth-token-manager.js.map +1 -1
  13. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  14. package/dist/cliproxy/auth/auth-types.js +3 -2
  15. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  16. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  17. package/dist/cliproxy/auth/oauth-handler.js +6 -5
  18. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  19. package/dist/cliproxy/auth/provider-refreshers/index.d.ts.map +1 -1
  20. package/dist/cliproxy/auth/provider-refreshers/index.js +2 -1
  21. package/dist/cliproxy/auth/provider-refreshers/index.js.map +1 -1
  22. package/dist/cliproxy/config/model-config.d.ts.map +1 -1
  23. package/dist/cliproxy/config/model-config.js +32 -32
  24. package/dist/cliproxy/config/model-config.js.map +1 -1
  25. package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -1
  26. package/dist/cliproxy/executor/arg-parser.js +26 -26
  27. package/dist/cliproxy/executor/arg-parser.js.map +1 -1
  28. package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -1
  29. package/dist/cliproxy/executor/auth-coordinator.js +15 -14
  30. package/dist/cliproxy/executor/auth-coordinator.js.map +1 -1
  31. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  32. package/dist/cliproxy/executor/index.js +17 -13
  33. package/dist/cliproxy/executor/index.js.map +1 -1
  34. package/dist/cliproxy/executor/lifecycle-manager.d.ts.map +1 -1
  35. package/dist/cliproxy/executor/lifecycle-manager.js +18 -16
  36. package/dist/cliproxy/executor/lifecycle-manager.js.map +1 -1
  37. package/dist/cliproxy/executor/model-warnings.d.ts.map +1 -1
  38. package/dist/cliproxy/executor/model-warnings.js +24 -13
  39. package/dist/cliproxy/executor/model-warnings.js.map +1 -1
  40. package/dist/cliproxy/executor/retry-handler.d.ts.map +1 -1
  41. package/dist/cliproxy/executor/retry-handler.js +13 -11
  42. package/dist/cliproxy/executor/retry-handler.js.map +1 -1
  43. package/dist/cliproxy/executor/session-bridge.d.ts.map +1 -1
  44. package/dist/cliproxy/executor/session-bridge.js +18 -10
  45. package/dist/cliproxy/executor/session-bridge.js.map +1 -1
  46. package/dist/cliproxy/management/remote-token-uploader.d.ts.map +1 -1
  47. package/dist/cliproxy/management/remote-token-uploader.js +11 -11
  48. package/dist/cliproxy/management/remote-token-uploader.js.map +1 -1
  49. package/dist/cliproxy/proxy/https-tunnel-proxy.d.ts +5 -1
  50. package/dist/cliproxy/proxy/https-tunnel-proxy.d.ts.map +1 -1
  51. package/dist/cliproxy/proxy/https-tunnel-proxy.js +22 -10
  52. package/dist/cliproxy/proxy/https-tunnel-proxy.js.map +1 -1
  53. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts +0 -12
  54. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  55. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +42 -72
  56. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  57. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.d.ts +21 -0
  58. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.d.ts.map +1 -0
  59. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.js +154 -0
  60. package/dist/cliproxy/quota/quota-fetcher/account-quota-fetcher.js.map +1 -0
  61. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.d.ts +35 -0
  62. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.d.ts.map +1 -0
  63. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.js +98 -0
  64. package/dist/cliproxy/quota/quota-fetcher/all-accounts-fetcher.js.map +1 -0
  65. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.d.ts +22 -0
  66. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.d.ts.map +1 -0
  67. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.js +111 -0
  68. package/dist/cliproxy/quota/quota-fetcher/auth-file-reader.js.map +1 -0
  69. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.d.ts +17 -0
  70. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.d.ts.map +1 -0
  71. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.js +85 -0
  72. package/dist/cliproxy/quota/quota-fetcher/available-models-fetcher.js.map +1 -0
  73. package/dist/cliproxy/quota/quota-fetcher/constants.d.ts +25 -0
  74. package/dist/cliproxy/quota/quota-fetcher/constants.d.ts.map +1 -0
  75. package/dist/cliproxy/quota/quota-fetcher/constants.js +31 -0
  76. package/dist/cliproxy/quota/quota-fetcher/constants.js.map +1 -0
  77. package/dist/cliproxy/quota/quota-fetcher/http-client.d.ts +29 -0
  78. package/dist/cliproxy/quota/quota-fetcher/http-client.d.ts.map +1 -0
  79. package/dist/cliproxy/quota/quota-fetcher/http-client.js +199 -0
  80. package/dist/cliproxy/quota/quota-fetcher/http-client.js.map +1 -0
  81. package/dist/cliproxy/quota/quota-fetcher/project-lookup.d.ts +16 -0
  82. package/dist/cliproxy/quota/quota-fetcher/project-lookup.d.ts.map +1 -0
  83. package/dist/cliproxy/quota/quota-fetcher/project-lookup.js +89 -0
  84. package/dist/cliproxy/quota/quota-fetcher/project-lookup.js.map +1 -0
  85. package/dist/cliproxy/quota/quota-fetcher/status-classifier.d.ts +29 -0
  86. package/dist/cliproxy/quota/quota-fetcher/status-classifier.d.ts.map +1 -0
  87. package/dist/cliproxy/quota/quota-fetcher/status-classifier.js +168 -0
  88. package/dist/cliproxy/quota/quota-fetcher/status-classifier.js.map +1 -0
  89. package/dist/cliproxy/quota/quota-fetcher/types.d.ts +165 -0
  90. package/dist/cliproxy/quota/quota-fetcher/types.d.ts.map +1 -0
  91. package/dist/cliproxy/quota/quota-fetcher/types.js +9 -0
  92. package/dist/cliproxy/quota/quota-fetcher/types.js.map +1 -0
  93. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  94. package/dist/cliproxy/quota/quota-fetcher-claude.js +14 -3
  95. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  96. package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
  97. package/dist/cliproxy/quota/quota-fetcher-codex.js +36 -9
  98. package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
  99. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.d.ts +26 -0
  100. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.d.ts.map +1 -0
  101. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.js +132 -0
  102. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/auth-file-discovery.js.map +1 -0
  103. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.d.ts +23 -0
  104. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.d.ts.map +1 -0
  105. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.js +54 -0
  106. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/bucket-building.js.map +1 -0
  107. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.d.ts +26 -0
  108. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.d.ts.map +1 -0
  109. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.js +29 -0
  110. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/constants.js.map +1 -0
  111. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.d.ts +61 -0
  112. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.d.ts.map +1 -0
  113. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.js +259 -0
  114. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/error-parsing.js.map +1 -0
  115. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.d.ts +20 -0
  116. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.d.ts.map +1 -0
  117. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.js +38 -0
  118. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/index.js.map +1 -0
  119. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.d.ts +82 -0
  120. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.d.ts.map +1 -0
  121. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.js +263 -0
  122. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/managed-request.js.map +1 -0
  123. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.d.ts +46 -0
  124. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.d.ts.map +1 -0
  125. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.js +188 -0
  126. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/quota-fetcher.js.map +1 -0
  127. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.d.ts +35 -0
  128. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.d.ts.map +1 -0
  129. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.js +65 -0
  130. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/shared-utils.js.map +1 -0
  131. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.d.ts +37 -0
  132. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.d.ts.map +1 -0
  133. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.js +117 -0
  134. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/supplementary-metadata.js.map +1 -0
  135. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.d.ts +31 -0
  136. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.d.ts.map +1 -0
  137. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.js +77 -0
  138. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/token-parsing.js.map +1 -0
  139. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.d.ts +114 -0
  140. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.d.ts.map +1 -0
  141. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.js +10 -0
  142. package/dist/cliproxy/quota/quota-fetcher-gemini-cli/types.js.map +1 -0
  143. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.d.ts +13 -58
  144. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.d.ts.map +1 -1
  145. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.js +20 -819
  146. package/dist/cliproxy/quota/quota-fetcher-gemini-cli.js.map +1 -1
  147. package/dist/cliproxy/quota/quota-fetcher-ghcp.d.ts.map +1 -1
  148. package/dist/cliproxy/quota/quota-fetcher-ghcp.js +19 -4
  149. package/dist/cliproxy/quota/quota-fetcher-ghcp.js.map +1 -1
  150. package/dist/cliproxy/quota/quota-fetcher.d.ts +12 -108
  151. package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
  152. package/dist/cliproxy/quota/quota-fetcher.js +23 -766
  153. package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
  154. package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
  155. package/dist/cliproxy/routing/routing-strategy.js +11 -3
  156. package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
  157. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts +26 -0
  158. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts.map +1 -0
  159. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js +82 -0
  160. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js.map +1 -0
  161. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.d.ts +41 -0
  162. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.d.ts.map +1 -0
  163. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.js +202 -0
  164. package/dist/commands/cliproxy/quota-subcommand/codex-window-helpers.js.map +1 -0
  165. package/dist/commands/cliproxy/quota-subcommand/format-helpers.d.ts +32 -0
  166. package/dist/commands/cliproxy/quota-subcommand/format-helpers.d.ts.map +1 -0
  167. package/dist/commands/cliproxy/quota-subcommand/format-helpers.js +90 -0
  168. package/dist/commands/cliproxy/quota-subcommand/format-helpers.js.map +1 -0
  169. package/dist/commands/cliproxy/quota-subcommand/handlers.d.ts +25 -0
  170. package/dist/commands/cliproxy/quota-subcommand/handlers.d.ts.map +1 -0
  171. package/dist/commands/cliproxy/quota-subcommand/handlers.js +245 -0
  172. package/dist/commands/cliproxy/quota-subcommand/handlers.js.map +1 -0
  173. package/dist/commands/cliproxy/quota-subcommand/profile-args.d.ts +10 -0
  174. package/dist/commands/cliproxy/quota-subcommand/profile-args.d.ts.map +1 -0
  175. package/dist/commands/cliproxy/quota-subcommand/profile-args.js +37 -0
  176. package/dist/commands/cliproxy/quota-subcommand/profile-args.js.map +1 -0
  177. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.d.ts +12 -0
  178. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.d.ts.map +1 -0
  179. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.js +64 -0
  180. package/dist/commands/cliproxy/quota-subcommand/provider-runtime.js.map +1 -0
  181. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.d.ts +27 -0
  182. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.d.ts.map +1 -0
  183. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.js +74 -0
  184. package/dist/commands/cliproxy/quota-subcommand/quota-failure-display.js.map +1 -0
  185. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.d.ts +10 -0
  186. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.d.ts.map +1 -0
  187. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.js +46 -0
  188. package/dist/commands/cliproxy/quota-subcommand/sections/antigravity.js.map +1 -0
  189. package/dist/commands/cliproxy/quota-subcommand/sections/claude.d.ts +14 -0
  190. package/dist/commands/cliproxy/quota-subcommand/sections/claude.d.ts.map +1 -0
  191. package/dist/commands/cliproxy/quota-subcommand/sections/claude.js +68 -0
  192. package/dist/commands/cliproxy/quota-subcommand/sections/claude.js.map +1 -0
  193. package/dist/commands/cliproxy/quota-subcommand/sections/codex.d.ts +14 -0
  194. package/dist/commands/cliproxy/quota-subcommand/sections/codex.d.ts.map +1 -0
  195. package/dist/commands/cliproxy/quota-subcommand/sections/codex.js +82 -0
  196. package/dist/commands/cliproxy/quota-subcommand/sections/codex.js.map +1 -0
  197. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.d.ts +14 -0
  198. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.d.ts.map +1 -0
  199. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.js +61 -0
  200. package/dist/commands/cliproxy/quota-subcommand/sections/gemini-cli.js.map +1 -0
  201. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.d.ts +13 -0
  202. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.d.ts.map +1 -0
  203. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.js +63 -0
  204. package/dist/commands/cliproxy/quota-subcommand/sections/ghcp.js.map +1 -0
  205. package/dist/commands/cliproxy/quota-subcommand/test-exports.d.ts +19 -0
  206. package/dist/commands/cliproxy/quota-subcommand/test-exports.d.ts.map +1 -0
  207. package/dist/commands/cliproxy/quota-subcommand/test-exports.js +22 -0
  208. package/dist/commands/cliproxy/quota-subcommand/test-exports.js.map +1 -0
  209. package/dist/commands/cliproxy/quota-subcommand/types.d.ts +42 -0
  210. package/dist/commands/cliproxy/quota-subcommand/types.d.ts.map +1 -0
  211. package/dist/commands/cliproxy/quota-subcommand/types.js +9 -0
  212. package/dist/commands/cliproxy/quota-subcommand/types.js.map +1 -0
  213. package/dist/commands/cliproxy/quota-subcommand.d.ts +14 -36
  214. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  215. package/dist/commands/cliproxy/quota-subcommand.js +21 -872
  216. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  217. package/dist/commands/persist-command/arg-parsing.d.ts +14 -0
  218. package/dist/commands/persist-command/arg-parsing.d.ts.map +1 -0
  219. package/dist/commands/persist-command/arg-parsing.js +84 -0
  220. package/dist/commands/persist-command/arg-parsing.js.map +1 -0
  221. package/dist/commands/persist-command/backup-rotation.d.ts +23 -0
  222. package/dist/commands/persist-command/backup-rotation.d.ts.map +1 -0
  223. package/dist/commands/persist-command/backup-rotation.js +260 -0
  224. package/dist/commands/persist-command/backup-rotation.js.map +1 -0
  225. package/dist/commands/persist-command/handler.d.ts +10 -0
  226. package/dist/commands/persist-command/handler.d.ts.map +1 -0
  227. package/dist/commands/persist-command/handler.js +267 -0
  228. package/dist/commands/persist-command/handler.js.map +1 -0
  229. package/dist/commands/persist-command/help.d.ts +9 -0
  230. package/dist/commands/persist-command/help.d.ts.map +1 -0
  231. package/dist/commands/persist-command/help.js +86 -0
  232. package/dist/commands/persist-command/help.js.map +1 -0
  233. package/dist/commands/persist-command/receipt.d.ts +13 -0
  234. package/dist/commands/persist-command/receipt.d.ts.map +1 -0
  235. package/dist/commands/persist-command/receipt.js +102 -0
  236. package/dist/commands/persist-command/receipt.js.map +1 -0
  237. package/dist/commands/persist-command/secret-detection.d.ts +11 -0
  238. package/dist/commands/persist-command/secret-detection.d.ts.map +1 -0
  239. package/dist/commands/persist-command/secret-detection.js +54 -0
  240. package/dist/commands/persist-command/secret-detection.js.map +1 -0
  241. package/dist/commands/persist-command/secure-file.d.ts +21 -0
  242. package/dist/commands/persist-command/secure-file.d.ts.map +1 -0
  243. package/dist/commands/persist-command/secure-file.js +231 -0
  244. package/dist/commands/persist-command/secure-file.js.map +1 -0
  245. package/dist/commands/persist-command/types.d.ts +42 -0
  246. package/dist/commands/persist-command/types.d.ts.map +1 -0
  247. package/dist/commands/persist-command/types.js +34 -0
  248. package/dist/commands/persist-command/types.js.map +1 -0
  249. package/dist/commands/persist-command.d.ts +7 -2
  250. package/dist/commands/persist-command.d.ts.map +1 -1
  251. package/dist/commands/persist-command.js +17 -933
  252. package/dist/commands/persist-command.js.map +1 -1
  253. package/dist/copilot/copilot-executor.js +25 -25
  254. package/dist/copilot/copilot-executor.js.map +1 -1
  255. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  256. package/dist/cursor/cursor-daemon-entry.js +34 -9
  257. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  258. package/dist/cursor/cursor-daemon.d.ts.map +1 -1
  259. package/dist/cursor/cursor-daemon.js +1 -0
  260. package/dist/cursor/cursor-daemon.js.map +1 -1
  261. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  262. package/dist/cursor/cursor-profile-executor.js +18 -17
  263. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  264. package/dist/delegation/delegation-handler.d.ts.map +1 -1
  265. package/dist/delegation/delegation-handler.js +29 -23
  266. package/dist/delegation/delegation-handler.js.map +1 -1
  267. package/dist/delegation/headless-executor.d.ts +1 -0
  268. package/dist/delegation/headless-executor.d.ts.map +1 -1
  269. package/dist/delegation/headless-executor.js +35 -14
  270. package/dist/delegation/headless-executor.js.map +1 -1
  271. package/dist/delegation/session-manager.d.ts.map +1 -1
  272. package/dist/delegation/session-manager.js +12 -4
  273. package/dist/delegation/session-manager.js.map +1 -1
  274. package/dist/dispatcher/cli-argument-parser.d.ts +1 -1
  275. package/dist/dispatcher/cli-argument-parser.d.ts.map +1 -1
  276. package/dist/dispatcher/cli-argument-parser.js +24 -23
  277. package/dist/dispatcher/cli-argument-parser.js.map +1 -1
  278. package/dist/dispatcher/flows/cliproxy-flow.d.ts.map +1 -1
  279. package/dist/dispatcher/flows/cliproxy-flow.js +12 -11
  280. package/dist/dispatcher/flows/cliproxy-flow.js.map +1 -1
  281. package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -1
  282. package/dist/dispatcher/flows/settings-flow.js +27 -27
  283. package/dist/dispatcher/flows/settings-flow.js.map +1 -1
  284. package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
  285. package/dist/dispatcher/profile-resolver.js +16 -16
  286. package/dist/dispatcher/profile-resolver.js.map +1 -1
  287. package/dist/docker/supervisord-lifecycle.d.ts.map +1 -1
  288. package/dist/docker/supervisord-lifecycle.js +5 -1
  289. package/dist/docker/supervisord-lifecycle.js.map +1 -1
  290. package/dist/errors/error-types.d.ts +26 -22
  291. package/dist/errors/error-types.d.ts.map +1 -1
  292. package/dist/errors/error-types.js +15 -12
  293. package/dist/errors/error-types.js.map +1 -1
  294. package/dist/errors/exit-codes.d.ts +20 -13
  295. package/dist/errors/exit-codes.d.ts.map +1 -1
  296. package/dist/errors/exit-codes.js +32 -28
  297. package/dist/errors/exit-codes.js.map +1 -1
  298. package/dist/glmt/delta-accumulator.d.ts +1 -0
  299. package/dist/glmt/delta-accumulator.d.ts.map +1 -1
  300. package/dist/glmt/delta-accumulator.js +12 -4
  301. package/dist/glmt/delta-accumulator.js.map +1 -1
  302. package/dist/glmt/glmt-proxy.d.ts.map +1 -1
  303. package/dist/glmt/glmt-proxy.js +39 -10
  304. package/dist/glmt/glmt-proxy.js.map +1 -1
  305. package/dist/glmt/glmt-transformer.d.ts.map +1 -1
  306. package/dist/glmt/glmt-transformer.js +1 -4
  307. package/dist/glmt/glmt-transformer.js.map +1 -1
  308. package/dist/glmt/pipeline/request-transformer.d.ts.map +1 -1
  309. package/dist/glmt/pipeline/request-transformer.js +5 -1
  310. package/dist/glmt/pipeline/request-transformer.js.map +1 -1
  311. package/dist/glmt/pipeline/response-builder.d.ts.map +1 -1
  312. package/dist/glmt/pipeline/response-builder.js +7 -3
  313. package/dist/glmt/pipeline/response-builder.js.map +1 -1
  314. package/dist/glmt/pipeline/stream-parser.d.ts.map +1 -1
  315. package/dist/glmt/pipeline/stream-parser.js +11 -5
  316. package/dist/glmt/pipeline/stream-parser.js.map +1 -1
  317. package/dist/glmt/pipeline/tool-call-handler.d.ts.map +1 -1
  318. package/dist/glmt/pipeline/tool-call-handler.js +7 -1
  319. package/dist/glmt/pipeline/tool-call-handler.js.map +1 -1
  320. package/dist/glmt/sse-parser.d.ts +1 -0
  321. package/dist/glmt/sse-parser.d.ts.map +1 -1
  322. package/dist/glmt/sse-parser.js +7 -3
  323. package/dist/glmt/sse-parser.js.map +1 -1
  324. package/dist/management/shared-manager/fs-helpers.d.ts +69 -0
  325. package/dist/management/shared-manager/fs-helpers.d.ts.map +1 -0
  326. package/dist/management/shared-manager/fs-helpers.js +241 -0
  327. package/dist/management/shared-manager/fs-helpers.js.map +1 -0
  328. package/dist/management/shared-manager/migrations.d.ts +21 -0
  329. package/dist/management/shared-manager/migrations.d.ts.map +1 -0
  330. package/dist/management/shared-manager/migrations.js +187 -0
  331. package/dist/management/shared-manager/migrations.js.map +1 -0
  332. package/dist/management/shared-manager/orchestrator.d.ts +87 -0
  333. package/dist/management/shared-manager/orchestrator.d.ts.map +1 -0
  334. package/dist/management/shared-manager/orchestrator.js +161 -0
  335. package/dist/management/shared-manager/orchestrator.js.map +1 -0
  336. package/dist/management/shared-manager/plugin-layout-internals.d.ts +42 -0
  337. package/dist/management/shared-manager/plugin-layout-internals.d.ts.map +1 -0
  338. package/dist/management/shared-manager/plugin-layout-internals.js +192 -0
  339. package/dist/management/shared-manager/plugin-layout-internals.js.map +1 -0
  340. package/dist/management/shared-manager/plugin-metadata-normalizer.d.ts +53 -0
  341. package/dist/management/shared-manager/plugin-metadata-normalizer.d.ts.map +1 -0
  342. package/dist/management/shared-manager/plugin-metadata-normalizer.js +253 -0
  343. package/dist/management/shared-manager/plugin-metadata-normalizer.js.map +1 -0
  344. package/dist/management/shared-manager/project-context-sync.d.ts +36 -0
  345. package/dist/management/shared-manager/project-context-sync.d.ts.map +1 -0
  346. package/dist/management/shared-manager/project-context-sync.js +204 -0
  347. package/dist/management/shared-manager/project-context-sync.js.map +1 -0
  348. package/dist/management/shared-manager/project-memory-sync.d.ts +21 -0
  349. package/dist/management/shared-manager/project-memory-sync.d.ts.map +1 -0
  350. package/dist/management/shared-manager/project-memory-sync.js +113 -0
  351. package/dist/management/shared-manager/project-memory-sync.js.map +1 -0
  352. package/dist/management/shared-manager/shared-dir-linker.d.ts +41 -0
  353. package/dist/management/shared-manager/shared-dir-linker.d.ts.map +1 -0
  354. package/dist/management/shared-manager/shared-dir-linker.js +227 -0
  355. package/dist/management/shared-manager/shared-dir-linker.js.map +1 -0
  356. package/dist/management/shared-manager/symlink-helpers.d.ts +61 -0
  357. package/dist/management/shared-manager/symlink-helpers.d.ts.map +1 -0
  358. package/dist/management/shared-manager/symlink-helpers.js +243 -0
  359. package/dist/management/shared-manager/symlink-helpers.js.map +1 -0
  360. package/dist/management/shared-manager/types.d.ts +45 -0
  361. package/dist/management/shared-manager/types.d.ts.map +1 -0
  362. package/dist/management/shared-manager/types.js +57 -0
  363. package/dist/management/shared-manager/types.js.map +1 -0
  364. package/dist/management/shared-manager.d.ts +13 -160
  365. package/dist/management/shared-manager.d.ts.map +1 -1
  366. package/dist/management/shared-manager.js +18 -1294
  367. package/dist/management/shared-manager.js.map +1 -1
  368. package/dist/proxy/proxy-daemon-entry.js +1 -1
  369. package/dist/proxy/proxy-daemon-entry.js.map +1 -1
  370. package/dist/proxy/transformers/sse-stream-transformer.d.ts.map +1 -1
  371. package/dist/proxy/transformers/sse-stream-transformer.js +12 -17
  372. package/dist/proxy/transformers/sse-stream-transformer.js.map +1 -1
  373. package/dist/services/logging/index.d.ts +1 -1
  374. package/dist/services/logging/index.d.ts.map +1 -1
  375. package/dist/services/logging/index.js +6 -1
  376. package/dist/services/logging/index.js.map +1 -1
  377. package/dist/services/logging/log-context.d.ts +27 -2
  378. package/dist/services/logging/log-context.d.ts.map +1 -1
  379. package/dist/services/logging/log-context.js +43 -4
  380. package/dist/services/logging/log-context.js.map +1 -1
  381. package/dist/services/logging/log-redaction.d.ts +9 -0
  382. package/dist/services/logging/log-redaction.d.ts.map +1 -1
  383. package/dist/services/logging/log-redaction.js +31 -3
  384. package/dist/services/logging/log-redaction.js.map +1 -1
  385. package/dist/services/logging/logger.js +2 -2
  386. package/dist/services/logging/logger.js.map +1 -1
  387. package/dist/targets/codex-adapter.d.ts.map +1 -1
  388. package/dist/targets/codex-adapter.js +11 -10
  389. package/dist/targets/codex-adapter.js.map +1 -1
  390. package/dist/targets/droid-adapter.d.ts.map +1 -1
  391. package/dist/targets/droid-adapter.js +12 -12
  392. package/dist/targets/droid-adapter.js.map +1 -1
  393. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
  394. package/dist/utils/image-analysis/mcp-installer.js +16 -13
  395. package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
  396. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
  397. package/dist/utils/websearch/mcp-installer.js +14 -12
  398. package/dist/utils/websearch/mcp-installer.js.map +1 -1
  399. package/dist/web-server/middleware/request-logging-middleware.d.ts.map +1 -1
  400. package/dist/web-server/middleware/request-logging-middleware.js +14 -9
  401. package/dist/web-server/middleware/request-logging-middleware.js.map +1 -1
  402. package/dist/web-server/routes/bar-routes.d.ts.map +1 -1
  403. package/dist/web-server/routes/bar-routes.js +11 -2
  404. package/dist/web-server/routes/bar-routes.js.map +1 -1
  405. package/dist/web-server/routes/claude-extension-routes.d.ts.map +1 -1
  406. package/dist/web-server/routes/claude-extension-routes.js +3 -2
  407. package/dist/web-server/routes/claude-extension-routes.js.map +1 -1
  408. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  409. package/dist/web-server/routes/cliproxy-auth-routes.js +6 -4
  410. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  411. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.d.ts +16 -0
  412. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.d.ts.map +1 -0
  413. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.js +219 -0
  414. package/dist/web-server/routes/cliproxy-stats-routes/config-routes.js.map +1 -0
  415. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.d.ts +12 -0
  416. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.d.ts.map +1 -0
  417. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.js +153 -0
  418. package/dist/web-server/routes/cliproxy-stats-routes/error-log-routes.js.map +1 -0
  419. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.d.ts +19 -0
  420. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.d.ts.map +1 -0
  421. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.js +38 -0
  422. package/dist/web-server/routes/cliproxy-stats-routes/quota-helpers.js.map +1 -0
  423. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.d.ts +13 -0
  424. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.d.ts.map +1 -0
  425. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.js +195 -0
  426. package/dist/web-server/routes/cliproxy-stats-routes/quota-routes.js.map +1 -0
  427. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.d.ts +17 -0
  428. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.d.ts.map +1 -0
  429. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.js +34 -0
  430. package/dist/web-server/routes/cliproxy-stats-routes/restart-route.js.map +1 -0
  431. package/dist/web-server/routes/cliproxy-stats-routes/router.d.ts +10 -0
  432. package/dist/web-server/routes/cliproxy-stats-routes/router.d.ts.map +1 -0
  433. package/dist/web-server/routes/cliproxy-stats-routes/router.js +245 -0
  434. package/dist/web-server/routes/cliproxy-stats-routes/router.js.map +1 -0
  435. package/dist/web-server/routes/cliproxy-stats-routes/shared.d.ts +35 -0
  436. package/dist/web-server/routes/cliproxy-stats-routes/shared.d.ts.map +1 -0
  437. package/dist/web-server/routes/cliproxy-stats-routes/shared.js +59 -0
  438. package/dist/web-server/routes/cliproxy-stats-routes/shared.js.map +1 -0
  439. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.d.ts +44 -0
  440. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.d.ts.map +1 -0
  441. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.js +66 -0
  442. package/dist/web-server/routes/cliproxy-stats-routes/version-helpers.js.map +1 -0
  443. package/dist/web-server/routes/cliproxy-stats-routes.d.ts +16 -57
  444. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  445. package/dist/web-server/routes/cliproxy-stats-routes.js +25 -926
  446. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  447. package/dist/web-server/routes/cliproxy-sync-routes.d.ts.map +1 -1
  448. package/dist/web-server/routes/cliproxy-sync-routes.js +9 -2
  449. package/dist/web-server/routes/cliproxy-sync-routes.js.map +1 -1
  450. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -1
  451. package/dist/web-server/routes/copilot-settings-routes.js +2 -1
  452. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -1
  453. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  454. package/dist/web-server/routes/image-analysis-routes.js +2 -1
  455. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  456. package/dist/web-server/routes/persist-routes.d.ts.map +1 -1
  457. package/dist/web-server/routes/persist-routes.js +8 -1
  458. package/dist/web-server/routes/persist-routes.js.map +1 -1
  459. package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
  460. package/dist/web-server/routes/proxy-routes.js +33 -5
  461. package/dist/web-server/routes/proxy-routes.js.map +1 -1
  462. package/dist/web-server/routes/route-helpers.d.ts.map +1 -1
  463. package/dist/web-server/routes/route-helpers.js +10 -6
  464. package/dist/web-server/routes/route-helpers.js.map +1 -1
  465. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  466. package/dist/web-server/routes/settings-routes.js +7 -6
  467. package/dist/web-server/routes/settings-routes.js.map +1 -1
  468. package/dist/web-server/usage/aggregator.d.ts.map +1 -1
  469. package/dist/web-server/usage/aggregator.js +8 -8
  470. package/dist/web-server/usage/aggregator.js.map +1 -1
  471. package/dist/web-server/usage/handlers.d.ts.map +1 -1
  472. package/dist/web-server/usage/handlers.js +1 -1
  473. package/dist/web-server/usage/handlers.js.map +1 -1
  474. package/package.json +1 -1
  475. package/scripts/ci-parity-gate.sh +31 -0
  476. package/scripts/generate-throw-error-baseline.js +103 -0
  477. package/scripts/hardening-inventory.js +62 -4
  478. package/scripts/maintainability-metrics.js +356 -0
@@ -1,878 +1,27 @@
1
1
  "use strict";
2
2
  /**
3
- * CLIProxy Quota Management
3
+ * CLIProxy Quota Management - public barrel.
4
4
  *
5
- * Handles:
6
- * - ccs cliproxy quota [--provider <name>]
7
- * - ccs cliproxy default <account>
8
- * - ccs cliproxy pause <account>
9
- * - ccs cliproxy resume <account>
10
- * - ccs cliproxy doctor
5
+ * Source lives in ./quota-subcommand/. This file re-exports the original
6
+ * public surface so existing importers (src/commands/cliproxy/index.ts and
7
+ * the unit-test module loader) are unaffected by the god-file split.
8
+ *
9
+ * Public surface (unchanged):
10
+ * - handleQuotaStatus (`ccs cliproxy quota`)
11
+ * - handleDoctor (`ccs cliproxy doctor` / `diag`)
12
+ * - handleSetDefault (`ccs cliproxy default <account>`)
13
+ * - handlePauseAccount (`ccs cliproxy pause <account>`)
14
+ * - handleResumeAccount (`ccs cliproxy resume <account>`)
15
+ * - __testExports (helpers consumed by the unit test loader)
11
16
  */
12
17
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.handleResumeAccount = exports.handlePauseAccount = exports.handleSetDefault = exports.handleDoctor = exports.handleQuotaStatus = exports.__testExports = void 0;
14
- const account_manager_1 = require("../../cliproxy/accounts/account-manager");
15
- const quota_fetcher_1 = require("../../cliproxy/quota/quota-fetcher");
16
- const quota_fetcher_codex_1 = require("../../cliproxy/quota/quota-fetcher-codex");
17
- const quota_label_sanitizer_1 = require("../../cliproxy/quota/quota-label-sanitizer");
18
- const quota_fetcher_claude_1 = require("../../cliproxy/quota/quota-fetcher-claude");
19
- const quota_fetcher_claude_normalizer_1 = require("../../cliproxy/quota/quota-fetcher-claude-normalizer");
20
- const quota_fetcher_gemini_cli_1 = require("../../cliproxy/quota/quota-fetcher-gemini-cli");
21
- const quota_fetcher_ghcp_1 = require("../../cliproxy/quota/quota-fetcher-ghcp");
22
- const quota_manager_1 = require("../../cliproxy/quota/quota-manager");
23
- const pool_state_renderer_1 = require("./pool-state-renderer");
24
- const provider_capabilities_1 = require("../../cliproxy/provider-capabilities");
25
- const email_account_identity_1 = require("../../cliproxy/accounts/email-account-identity");
26
- const ui_1 = require("../../utils/ui");
27
- function parseProfileArgs(args) {
28
- const result = {};
29
- for (let i = 0; i < args.length; i++) {
30
- const arg = args[i];
31
- if (arg === '--provider' && args[i + 1]) {
32
- result.provider = args[++i];
33
- }
34
- else if (arg === '--model' && args[i + 1]) {
35
- result.model = args[++i];
36
- }
37
- else if (arg === '--account' && args[i + 1]) {
38
- result.account = args[++i];
39
- }
40
- else if (arg === '--force') {
41
- result.force = true;
42
- }
43
- else if (arg === '--yes' || arg === '-y') {
44
- result.yes = true;
45
- }
46
- else if (!arg.startsWith('-') && !result.name) {
47
- result.name = arg;
48
- }
49
- }
50
- return result;
51
- }
52
- function formatQuotaBar(percentage) {
53
- const width = 20;
54
- const clampedPct = Math.max(0, Math.min(100, percentage));
55
- const filled = Math.round((clampedPct / 100) * width);
56
- const empty = width - filled;
57
- const filledChar = clampedPct > 50 ? '█' : clampedPct > 10 ? '▓' : '░';
58
- return `[${filledChar.repeat(filled)}${' '.repeat(empty)}]`;
59
- }
60
- function formatResetTime(seconds) {
61
- if (seconds <= 0)
62
- return 'now';
63
- if (seconds < 60)
64
- return `in ${seconds}s`;
65
- if (seconds < 3600)
66
- return `in ${Math.round(seconds / 60)}m`;
67
- if (seconds < 86400)
68
- return `in ${Math.round(seconds / 3600)}h`;
69
- const days = Math.floor(seconds / 86400);
70
- const hours = Math.round((seconds % 86400) / 3600);
71
- if (hours <= 0)
72
- return `in ${days}d`;
73
- if (hours >= 24)
74
- return `in ${days + 1}d`;
75
- return `in ${days}d ${hours}h`;
76
- }
77
- function formatResetTimeISO(isoTime) {
78
- if (!isoTime)
79
- return 'unknown';
80
- const resetDate = new Date(isoTime);
81
- if (isNaN(resetDate.getTime()))
82
- return 'unknown';
83
- const seconds = Math.max(0, Math.round((resetDate.getTime() - Date.now()) / 1000));
84
- return formatResetTime(seconds);
85
- }
86
- function formatCliAccountLabel(account) {
87
- const displayName = (0, email_account_identity_1.formatAccountDisplayName)(account);
88
- return account.nickname ? `${account.nickname} (${displayName})` : displayName;
89
- }
90
- function resolveDisplayedTier(accountTier, liveTier) {
91
- return (liveTier && liveTier !== 'unknown' ? liveTier : accountTier) || 'unknown';
92
- }
93
- function getQuotaFailureDisplayEntries(quota) {
94
- const entries = [
95
- {
96
- tone: 'error',
97
- text: quota.error || 'Failed to fetch quota',
98
- },
99
- ];
100
- if (quota.actionHint) {
101
- entries.push({
102
- tone: 'info',
103
- text: quota.actionHint,
104
- });
105
- }
106
- const diagnostics = [];
107
- if (typeof quota.httpStatus === 'number') {
108
- diagnostics.push(`HTTP ${quota.httpStatus}`);
109
- }
110
- if (quota.errorCode) {
111
- diagnostics.push(`Code: ${quota.errorCode}`);
112
- }
113
- if (quota.retryable) {
114
- diagnostics.push('Retryable');
115
- }
116
- if (diagnostics.length > 0) {
117
- entries.push({
118
- tone: 'dim',
119
- text: diagnostics.join(' | '),
120
- });
121
- }
122
- const normalizedError = quota.error?.trim();
123
- const normalizedDetail = quota.errorDetail?.trim();
124
- if (normalizedDetail && normalizedDetail !== normalizedError) {
125
- entries.push({
126
- tone: 'dim',
127
- text: `Detail: ${normalizedDetail}`,
128
- });
129
- }
130
- return entries;
131
- }
132
- function displayQuotaFailure(quota) {
133
- for (const entry of getQuotaFailureDisplayEntries(quota)) {
134
- const rendered = entry.tone === 'error'
135
- ? (0, ui_1.color)(entry.text, 'error')
136
- : entry.tone === 'info'
137
- ? (0, ui_1.info)(entry.text)
138
- : (0, ui_1.dim)(entry.text);
139
- console.log(` ${rendered}`);
140
- }
141
- }
142
- function formatAbsoluteResetTime(isoTime) {
143
- if (!isoTime)
144
- return null;
145
- const resetDate = new Date(isoTime);
146
- if (isNaN(resetDate.getTime()))
147
- return null;
148
- const date = resetDate.toLocaleDateString(undefined, {
149
- month: '2-digit',
150
- day: '2-digit',
151
- });
152
- const time = resetDate.toLocaleTimeString(undefined, {
153
- hour: '2-digit',
154
- minute: '2-digit',
155
- });
156
- return `${date} ${time}`;
157
- }
158
- function formatCodexWindowReset(window) {
159
- if (typeof window.resetAfterSeconds === 'number' && isFinite(window.resetAfterSeconds)) {
160
- const relative = formatResetTime(Math.max(0, window.resetAfterSeconds));
161
- if (window.resetAfterSeconds >= 86400 && window.resetAt) {
162
- const absolute = formatAbsoluteResetTime(window.resetAt);
163
- return absolute ? `${relative} (${absolute})` : relative;
164
- }
165
- return relative;
166
- }
167
- if (window.resetAt) {
168
- return formatResetTimeISO(window.resetAt);
169
- }
170
- return null;
171
- }
172
- function getCodexWindowKind(label) {
173
- const lower = (label || '').toLowerCase();
174
- const isCodeReview = lower.includes('code review') || lower.includes('code_review');
175
- const isPrimary = lower.includes('primary');
176
- const isSecondary = lower.includes('secondary');
177
- if (isCodeReview) {
178
- if (isPrimary)
179
- return 'code-review-5h';
180
- if (isSecondary)
181
- return 'code-review-weekly';
182
- return 'code-review';
183
- }
184
- if (isPrimary)
185
- return 'usage-5h';
186
- if (isSecondary)
187
- return 'usage-weekly';
188
- return 'unknown';
189
- }
190
- function inferCodeReviewCadence(window, allWindows) {
191
- const kind = getCodexWindowKind(window.label);
192
- if (kind === 'code-review-weekly')
193
- return 'weekly';
194
- const reset = window.resetAfterSeconds;
195
- if (typeof reset !== 'number' || !isFinite(reset) || reset <= 0)
196
- return null;
197
- const usage5h = allWindows.find((w) => getCodexWindowKind(w.label) === 'usage-5h' &&
198
- typeof w.resetAfterSeconds === 'number' &&
199
- isFinite(w.resetAfterSeconds) &&
200
- w.resetAfterSeconds > 0);
201
- const usageWeekly = allWindows.find((w) => getCodexWindowKind(w.label) === 'usage-weekly' &&
202
- typeof w.resetAfterSeconds === 'number' &&
203
- isFinite(w.resetAfterSeconds) &&
204
- w.resetAfterSeconds > 0);
205
- if (!usage5h || !usageWeekly)
206
- return null;
207
- const diffTo5h = Math.abs(reset - usage5h.resetAfterSeconds);
208
- const diffToWeekly = Math.abs(reset - usageWeekly.resetAfterSeconds);
209
- return diffToWeekly <= diffTo5h ? 'weekly' : '5h';
210
- }
211
- /**
212
- * Strip a leading "GPT-X.Y-Codex-" prefix from a feature label and turn the
213
- * remainder into a Codex-prefixed display name. Other labels pass through unchanged.
214
- */
215
- function prettifyCodexFeatureLabel(featureLabel, fallbackLabel) {
216
- const trimmed = (0, quota_label_sanitizer_1.sanitizeCodexFeatureLabelOrNull)(featureLabel) ??
217
- (fallbackLabel === undefined
218
- ? (0, quota_label_sanitizer_1.sanitizeCodexFeatureLabel)(featureLabel)
219
- : (0, quota_label_sanitizer_1.sanitizeCodexFeatureLabel)(fallbackLabel));
220
- const stripped = trimmed.replace(/^GPT-[\d.]+-Codex-/i, '');
221
- if (stripped !== trimmed && stripped.length > 0) {
222
- return `Codex ${stripped}`;
223
- }
224
- return trimmed;
225
- }
226
- function getCodexWindowDisplayLabel(window, allWindows = []) {
227
- const context = allWindows.length > 0 ? allWindows : [window];
228
- // Prefer explicit category metadata when present (post-2026-04 windows).
229
- if (window.category === 'usage') {
230
- if (window.cadence === '5h')
231
- return '5h usage limit';
232
- if (window.cadence === 'weekly')
233
- return 'Weekly usage limit';
234
- }
235
- if (window.category === 'additional') {
236
- const pretty = prettifyCodexFeatureLabel(window.featureLabel, window.label);
237
- if (window.cadence === '5h')
238
- return `${pretty} (5h)`;
239
- if (window.cadence === 'weekly')
240
- return `${pretty} (weekly)`;
241
- return pretty;
242
- }
243
- if (window.category === 'code-review') {
244
- if (window.cadence === '5h')
245
- return 'Code review (5h)';
246
- if (window.cadence === 'weekly')
247
- return 'Code review (weekly)';
248
- return 'Code review';
249
- }
250
- // Legacy fallback: classify via label sniffing for cached windows without metadata.
251
- switch (getCodexWindowKind(window.label)) {
252
- case 'usage-5h':
253
- return '5h usage limit';
254
- case 'usage-weekly':
255
- return 'Weekly usage limit';
256
- case 'code-review-5h':
257
- case 'code-review-weekly':
258
- case 'code-review': {
259
- const inferred = inferCodeReviewCadence(window, context);
260
- if (inferred === '5h')
261
- return 'Code review (5h)';
262
- if (inferred === 'weekly')
263
- return 'Code review (weekly)';
264
- return 'Code review';
265
- }
266
- case 'unknown':
267
- return window.label;
268
- }
269
- }
270
- function getCodexCoreUsageWindows(windows) {
271
- let fiveHourWindow = null;
272
- let weeklyWindow = null;
273
- const nonCodeReviewWindows = [];
274
- // Prefer explicit category metadata when present so 'additional' windows
275
- // (e.g. GPT-5.3 Codex Spark) do not displace core usage windows in the summary.
276
- const hasCategoryMetadata = windows.some((window) => Boolean(window.category));
277
- if (hasCategoryMetadata) {
278
- for (const window of windows) {
279
- if (window.category === 'usage') {
280
- if (window.cadence === '5h' && !fiveHourWindow)
281
- fiveHourWindow = window;
282
- else if (window.cadence === 'weekly' && !weeklyWindow)
283
- weeklyWindow = window;
284
- nonCodeReviewWindows.push(window);
285
- }
286
- // 'code-review' and 'additional' are excluded from the core usage summary.
287
- }
288
- }
289
- else {
290
- for (const window of windows) {
291
- const kind = getCodexWindowKind(window.label);
292
- if (kind === 'usage-5h') {
293
- if (!fiveHourWindow)
294
- fiveHourWindow = window;
295
- nonCodeReviewWindows.push(window);
296
- continue;
297
- }
298
- if (kind === 'usage-weekly') {
299
- if (!weeklyWindow)
300
- weeklyWindow = window;
301
- nonCodeReviewWindows.push(window);
302
- continue;
303
- }
304
- if (kind === 'unknown') {
305
- nonCodeReviewWindows.push(window);
306
- }
307
- }
308
- }
309
- if ((!fiveHourWindow || !weeklyWindow) && nonCodeReviewWindows.length > 0) {
310
- const withReset = nonCodeReviewWindows
311
- .filter((w) => typeof w.resetAfterSeconds === 'number' && w.resetAfterSeconds >= 0)
312
- .sort((a, b) => (a.resetAfterSeconds || 0) - (b.resetAfterSeconds || 0));
313
- if (!fiveHourWindow) {
314
- fiveHourWindow = withReset[0] || nonCodeReviewWindows[0] || null;
315
- }
316
- if (!weeklyWindow) {
317
- weeklyWindow =
318
- withReset.length > 1
319
- ? withReset[withReset.length - 1]
320
- : nonCodeReviewWindows.find((w) => w !== fiveHourWindow) || null;
321
- }
322
- }
323
- return { fiveHourWindow, weeklyWindow };
324
- }
325
- function displayAntigravityQuotaSection(quotaResult) {
326
- const provider = 'agy';
327
- const accounts = (0, account_manager_1.getProviderAccounts)(provider);
328
- console.log((0, ui_1.subheader)(`Antigravity (${accounts.length} account${accounts.length !== 1 ? 's' : ''})`));
329
- console.log('');
330
- const rows = [];
331
- for (const account of accounts) {
332
- const quotaData = quotaResult.accounts.find((q) => q.account.id === account.id);
333
- const quota = quotaData?.quota;
334
- let avgQuota = 'N/A';
335
- if (quota?.success && quota.models.length > 0) {
336
- const avg = Math.round(quota.models.reduce((sum, m) => sum + m.percentage, 0) / quota.models.length);
337
- avgQuota = `${avg}%`;
338
- }
339
- const statusParts = [];
340
- if (account.paused)
341
- statusParts.push((0, ui_1.color)('PAUSED', 'warning'));
342
- if ((0, quota_manager_1.isOnCooldown)(provider, account.id))
343
- statusParts.push((0, ui_1.color)('COOLDOWN', 'warning'));
344
- const defaultMark = account.isDefault ? (0, ui_1.color)('*', 'success') : ' ';
345
- const tier = resolveDisplayedTier(account.tier, quota?.entitlement?.normalizedTier);
346
- const status = statusParts.join(', ');
347
- rows.push([defaultMark, formatCliAccountLabel(account), tier, avgQuota, status]);
348
- }
349
- console.log((0, ui_1.table)(rows, {
350
- head: ['', 'Account', 'Tier', 'Quota', 'Status'],
351
- colWidths: [3, 30, 10, 10, 20],
352
- }));
353
- console.log('');
354
- }
355
- function displayCodexQuotaSection(results) {
356
- console.log((0, ui_1.subheader)(`Codex (${results.length} account${results.length !== 1 ? 's' : ''})`));
357
- console.log('');
358
- for (const { account, quota } of results) {
359
- const accountInfo = (0, account_manager_1.findAccountByQuery)('codex', account);
360
- const accountLabel = accountInfo ? formatCliAccountLabel(accountInfo) : account;
361
- const defaultMark = accountInfo?.isDefault ? (0, ui_1.color)(' (default)', 'info') : '';
362
- if (!quota.success) {
363
- console.log(` ${(0, ui_1.fail)(accountLabel)}${defaultMark}`);
364
- displayQuotaFailure(quota);
365
- console.log('');
366
- continue;
367
- }
368
- const { fiveHourWindow, weeklyWindow } = getCodexCoreUsageWindows(quota.windows);
369
- const coreUsageWindows = [fiveHourWindow, weeklyWindow].filter((w, index, arr) => !!w && arr.indexOf(w) === index);
370
- const statusWindows = coreUsageWindows.length > 0 ? coreUsageWindows : quota.windows;
371
- const avgQuota = statusWindows.length > 0
372
- ? statusWindows.reduce((sum, w) => sum + w.remainingPercent, 0) / statusWindows.length
373
- : 0;
374
- const statusIcon = avgQuota > 50 ? (0, ui_1.ok)('') : avgQuota > 10 ? (0, ui_1.warn)('') : (0, ui_1.fail)('');
375
- const planBadge = quota.planType ? (0, ui_1.color)(` [${quota.planType}]`, 'info') : '';
376
- console.log(` ${statusIcon}${accountLabel}${defaultMark}${planBadge}`);
377
- const coreUsageSummary = quota.coreUsage ?? {
378
- fiveHour: fiveHourWindow
379
- ? {
380
- label: fiveHourWindow.label,
381
- remainingPercent: fiveHourWindow.remainingPercent,
382
- resetAfterSeconds: fiveHourWindow.resetAfterSeconds,
383
- resetAt: fiveHourWindow.resetAt,
384
- }
385
- : null,
386
- weekly: weeklyWindow
387
- ? {
388
- label: weeklyWindow.label,
389
- remainingPercent: weeklyWindow.remainingPercent,
390
- resetAfterSeconds: weeklyWindow.resetAfterSeconds,
391
- resetAt: weeklyWindow.resetAt,
392
- }
393
- : null,
394
- };
395
- const resetParts = [];
396
- const fiveHourReset = coreUsageSummary.fiveHour
397
- ? formatCodexWindowReset(coreUsageSummary.fiveHour)
398
- : null;
399
- const weeklyReset = coreUsageSummary.weekly
400
- ? formatCodexWindowReset(coreUsageSummary.weekly)
401
- : null;
402
- if (fiveHourReset)
403
- resetParts.push(`5h ${fiveHourReset}`);
404
- if (weeklyReset)
405
- resetParts.push(`weekly ${weeklyReset}`);
406
- if (resetParts.length > 0) {
407
- console.log(` ${(0, ui_1.dim)(`Reset schedule: ${resetParts.join(' | ')}`)}`);
408
- }
409
- const orderedWindows = [fiveHourWindow, weeklyWindow, ...quota.windows].filter((w, index, arr) => !!w && arr.indexOf(w) === index);
410
- for (const window of orderedWindows) {
411
- const bar = formatQuotaBar(window.remainingPercent);
412
- const resetValue = formatCodexWindowReset(window);
413
- const resetLabel = resetValue ? (0, ui_1.dim)(` Resets ${resetValue}`) : '';
414
- console.log(` ${getCodexWindowDisplayLabel(window, orderedWindows).padEnd(24)} ${bar} ${window.remainingPercent.toFixed(0)}%${resetLabel}`);
415
- }
416
- console.log('');
417
- }
418
- }
419
- function getClaudeWindowDisplayLabel(window) {
420
- switch (window.rateLimitType) {
421
- case 'five_hour':
422
- return '5h usage limit';
423
- case 'seven_day':
424
- return 'Weekly usage limit';
425
- case 'seven_day_opus':
426
- return 'Weekly usage (Opus)';
427
- case 'seven_day_sonnet':
428
- return 'Weekly usage (Sonnet)';
429
- case 'seven_day_oauth_apps':
430
- return 'Weekly usage (OAuth apps)';
431
- case 'seven_day_cowork':
432
- return 'Weekly usage (Cowork)';
433
- case 'overage':
434
- return 'Extra usage';
435
- default:
436
- return window.label;
437
- }
438
- }
439
- function toClaudeDisplayWindow(window) {
440
- return {
441
- rateLimitType: window.rateLimitType,
442
- label: window.label,
443
- remainingPercent: window.remainingPercent,
444
- resetAt: window.resetAt,
445
- status: window.status,
446
- };
447
- }
448
- function toClaudeCoreDisplayWindow(window) {
449
- if (!window)
450
- return null;
451
- return {
452
- rateLimitType: window.rateLimitType,
453
- label: window.label,
454
- remainingPercent: window.remainingPercent,
455
- resetAt: window.resetAt,
456
- status: window.status,
457
- };
458
- }
459
- function getClaudeCoreUsageWindows(quota) {
460
- const coreUsage = quota.coreUsage;
461
- const fiveHourFromCore = toClaudeCoreDisplayWindow(coreUsage?.fiveHour ?? null);
462
- const weeklyFromCore = toClaudeCoreDisplayWindow(coreUsage?.weekly ?? null);
463
- if (fiveHourFromCore || weeklyFromCore) {
464
- return {
465
- fiveHourWindow: fiveHourFromCore,
466
- weeklyWindow: weeklyFromCore,
467
- };
468
- }
469
- const fiveHourPolicy = quota.windows.find((window) => window.rateLimitType === 'five_hour') ?? null;
470
- const weeklyPolicy = (0, quota_fetcher_claude_normalizer_1.pickMostRestrictiveClaudeWeeklyWindow)(quota.windows);
471
- return {
472
- fiveHourWindow: fiveHourPolicy ? toClaudeDisplayWindow(fiveHourPolicy) : null,
473
- weeklyWindow: weeklyPolicy ? toClaudeDisplayWindow(weeklyPolicy) : null,
474
- };
475
- }
476
- function displayClaudeQuotaSection(results) {
477
- console.log((0, ui_1.subheader)(`Claude (${results.length} account${results.length !== 1 ? 's' : ''})`));
478
- console.log('');
479
- for (const { account, quota } of results) {
480
- const accountInfo = (0, account_manager_1.findAccountByQuery)('claude', account);
481
- const accountLabel = accountInfo ? formatCliAccountLabel(accountInfo) : account;
482
- const defaultMark = accountInfo?.isDefault ? (0, ui_1.color)(' (default)', 'info') : '';
483
- if (!quota.success) {
484
- console.log(` ${(0, ui_1.fail)(accountLabel)}${defaultMark}`);
485
- displayQuotaFailure(quota);
486
- console.log('');
487
- continue;
488
- }
489
- const { fiveHourWindow, weeklyWindow } = getClaudeCoreUsageWindows(quota);
490
- const coreWindows = [fiveHourWindow, weeklyWindow].filter((window, index, arr) => !!window && arr.indexOf(window) === index);
491
- const statusWindows = coreWindows.length > 0 ? coreWindows : quota.windows.map(toClaudeDisplayWindow);
492
- const minQuota = statusWindows.length > 0
493
- ? Math.min(...statusWindows.map((window) => window.remainingPercent))
494
- : null;
495
- const statusIcon = minQuota === null ? (0, ui_1.info)('') : minQuota > 50 ? (0, ui_1.ok)('') : minQuota > 10 ? (0, ui_1.warn)('') : (0, ui_1.fail)('');
496
- console.log(` ${statusIcon}${accountLabel}${defaultMark}`);
497
- const resetParts = [];
498
- if (fiveHourWindow?.resetAt)
499
- resetParts.push(`5h ${formatResetTimeISO(fiveHourWindow.resetAt)}`);
500
- if (weeklyWindow?.resetAt)
501
- resetParts.push(`weekly ${formatResetTimeISO(weeklyWindow.resetAt)}`);
502
- if (resetParts.length > 0) {
503
- console.log(` ${(0, ui_1.dim)(`Reset schedule: ${resetParts.join(' | ')}`)}`);
504
- }
505
- const orderedWindows = [...coreWindows, ...quota.windows.map(toClaudeDisplayWindow)].filter((window, index, arr) => arr.findIndex((candidate) => candidate.rateLimitType === window.rateLimitType &&
506
- candidate.resetAt === window.resetAt &&
507
- candidate.status === window.status) === index);
508
- if (orderedWindows.length === 0) {
509
- console.log(` ${(0, ui_1.dim)('Policy limits unavailable for this account')}`);
510
- console.log('');
511
- continue;
512
- }
513
- for (const window of orderedWindows) {
514
- const bar = formatQuotaBar(window.remainingPercent);
515
- const resetLabel = window.resetAt ? (0, ui_1.dim)(` Resets ${formatResetTimeISO(window.resetAt)}`) : '';
516
- const statusLabel = window.status === 'rejected'
517
- ? (0, ui_1.dim)(' [blocked]')
518
- : window.status === 'allowed_warning'
519
- ? (0, ui_1.dim)(' [warning]')
520
- : '';
521
- console.log(` ${getClaudeWindowDisplayLabel(window).padEnd(24)} ${bar} ${window.remainingPercent.toFixed(0)}%${statusLabel}${resetLabel}`);
522
- }
523
- console.log('');
524
- }
525
- }
526
- function displayGeminiCliQuotaSection(results) {
527
- console.log((0, ui_1.subheader)(`Gemini CLI (${results.length} account${results.length !== 1 ? 's' : ''})`));
528
- console.log('');
529
- for (const { account, quota } of results) {
530
- const accountInfo = (0, account_manager_1.findAccountByQuery)('gemini', account);
531
- const accountLabel = accountInfo ? formatCliAccountLabel(accountInfo) : account;
532
- const defaultMark = accountInfo?.isDefault ? (0, ui_1.color)(' (default)', 'info') : '';
533
- if (!quota.success) {
534
- console.log(` ${(0, ui_1.fail)(accountLabel)}${defaultMark}`);
535
- displayQuotaFailure(quota);
536
- console.log('');
537
- continue;
538
- }
539
- const avgQuota = quota.buckets.length > 0
540
- ? quota.buckets.reduce((sum, b) => sum + b.remainingPercent, 0) / quota.buckets.length
541
- : 0;
542
- const statusIcon = avgQuota > 50 ? (0, ui_1.ok)('') : avgQuota > 10 ? (0, ui_1.warn)('') : (0, ui_1.fail)('');
543
- console.log(` ${statusIcon}${accountLabel}${defaultMark}`);
544
- if (quota.projectId) {
545
- console.log(` Project: ${(0, ui_1.dim)(quota.projectId)}`);
546
- }
547
- if (quota.tierLabel) {
548
- console.log(` Tier: ${(0, ui_1.dim)(quota.tierLabel)}`);
549
- }
550
- if (quota.entitlement?.rawTierId) {
551
- console.log(` Tier ID: ${(0, ui_1.dim)(quota.entitlement.rawTierId)}`);
552
- }
553
- if (quota.creditBalance !== null && quota.creditBalance !== undefined) {
554
- console.log(` Credits: ${(0, ui_1.dim)(quota.creditBalance.toLocaleString())}`);
555
- }
556
- for (const bucket of quota.buckets) {
557
- const bar = formatQuotaBar(bucket.remainingPercent);
558
- const tokenLabel = bucket.tokenType ? (0, ui_1.dim)(` (${bucket.tokenType})`) : '';
559
- const amountLabel = bucket.remainingAmount !== null && bucket.remainingAmount !== undefined
560
- ? (0, ui_1.dim)(` ${bucket.remainingAmount.toLocaleString()} left`)
561
- : '';
562
- const resetLabel = bucket.resetTime
563
- ? (0, ui_1.dim)(` Resets ${formatResetTimeISO(bucket.resetTime)}`)
564
- : '';
565
- console.log(` ${bucket.label.padEnd(24)} ${bar} ${bucket.remainingPercent.toFixed(0)}%${tokenLabel}${amountLabel}${resetLabel}`);
566
- }
567
- console.log('');
568
- }
569
- }
570
- function formatSnapshotLabel(snapshot) {
571
- if (snapshot.unlimited) {
572
- return `${snapshot.percentUsed.toFixed(0)}% used (unlimited)`;
573
- }
574
- return `${snapshot.used}/${snapshot.entitlement} used`;
575
- }
576
- function displayGhcpQuotaSection(results) {
577
- console.log((0, ui_1.subheader)(`GitHub Copilot (${results.length} account${results.length !== 1 ? 's' : ''})`));
578
- console.log('');
579
- for (const { account, quota } of results) {
580
- const accountInfo = (0, account_manager_1.findAccountByQuery)('ghcp', account);
581
- const accountLabel = accountInfo ? formatCliAccountLabel(accountInfo) : account;
582
- const defaultMark = accountInfo?.isDefault ? (0, ui_1.color)(' (default)', 'info') : '';
583
- if (!quota.success) {
584
- console.log(` ${(0, ui_1.fail)(accountLabel)}${defaultMark}`);
585
- displayQuotaFailure(quota);
586
- console.log('');
587
- continue;
588
- }
589
- const reportedSnapshots = [
590
- quota.snapshots.premiumInteractions,
591
- quota.snapshots.chat,
592
- quota.snapshots.completions,
593
- ].filter((snapshot) => snapshot.reported !== false);
594
- const rows = reportedSnapshots.map((snapshot) => snapshot.unlimited ? 100 : snapshot.percentRemaining);
595
- const minQuota = rows.length > 0 ? Math.min(...rows) : null;
596
- const statusIcon = minQuota === null ? (0, ui_1.info)('') : minQuota > 50 ? (0, ui_1.ok)('') : minQuota > 10 ? (0, ui_1.warn)('') : (0, ui_1.fail)('');
597
- const planBadge = quota.planType ? (0, ui_1.color)(` [${quota.planType}]`, 'info') : '';
598
- console.log(` ${statusIcon}${accountLabel}${defaultMark}${planBadge}`);
599
- if (quota.quotaResetDate) {
600
- console.log(` ${(0, ui_1.dim)(`Resets ${formatResetTimeISO(quota.quotaResetDate)}`)}`);
601
- }
602
- const allItems = [
603
- ['Premium interactions', quota.snapshots.premiumInteractions],
604
- ['Chat', quota.snapshots.chat],
605
- ['Completions', quota.snapshots.completions],
606
- ];
607
- const items = allItems.filter(([, snapshot]) => snapshot.reported !== false);
608
- for (const [label, snapshot] of items) {
609
- const bar = formatQuotaBar(snapshot.percentRemaining);
610
- const usageLabel = (0, ui_1.dim)(` ${formatSnapshotLabel(snapshot)}`);
611
- console.log(` ${label.padEnd(24)} ${bar} ${snapshot.percentRemaining.toFixed(0)}%${usageLabel}`);
612
- }
613
- console.log('');
614
- }
615
- }
616
- const QUOTA_PROVIDER_RUNTIME = {
617
- agy: {
618
- fetch: (verbose) => (0, quota_fetcher_1.fetchAllProviderQuotas)('agy', verbose),
619
- hasData: (result) => result.accounts.length > 0,
620
- render: (result) => displayAntigravityQuotaSection(result),
621
- emptyTitle: 'Antigravity (0 accounts)',
622
- emptyMessage: 'No Antigravity accounts configured',
623
- authCommand: 'ccs agy --auth',
624
- },
625
- codex: {
626
- fetch: (verbose) => (0, quota_fetcher_codex_1.fetchAllCodexQuotas)(verbose),
627
- hasData: (result) => result.length > 0,
628
- render: (result) => displayCodexQuotaSection(result),
629
- emptyTitle: 'Codex (0 accounts)',
630
- emptyMessage: 'No Codex accounts configured',
631
- authCommand: 'ccs codex --auth',
632
- },
633
- claude: {
634
- fetch: (verbose) => (0, quota_fetcher_claude_1.fetchAllClaudeQuotas)(verbose),
635
- hasData: (result) => result.length > 0,
636
- render: (result) => displayClaudeQuotaSection(result),
637
- emptyTitle: 'Claude (0 accounts)',
638
- emptyMessage: 'No Claude accounts configured',
639
- authCommand: 'ccs claude --auth',
640
- },
641
- gemini: {
642
- fetch: (verbose) => (0, quota_fetcher_gemini_cli_1.fetchAllGeminiCliQuotas)(verbose),
643
- hasData: (result) => result.length > 0,
644
- render: (result) => displayGeminiCliQuotaSection(result),
645
- emptyTitle: 'Gemini CLI (0 accounts)',
646
- emptyMessage: 'No Gemini CLI accounts configured',
647
- authCommand: 'ccs gemini --auth',
648
- },
649
- ghcp: {
650
- fetch: (verbose) => (0, quota_fetcher_ghcp_1.fetchAllGhcpQuotas)(verbose),
651
- hasData: (result) => result.length > 0,
652
- render: (result) => displayGhcpQuotaSection(result),
653
- emptyTitle: 'GitHub Copilot (0 accounts)',
654
- emptyMessage: 'No GitHub Copilot accounts configured',
655
- authCommand: 'ccs ghcp --auth',
656
- },
657
- };
658
- exports.__testExports = {
659
- getCodexWindowDisplayLabel,
660
- getQuotaFailureDisplayEntries,
661
- prettifyCodexFeatureLabel,
662
- resolveDisplayedTier,
663
- };
664
- async function handleQuotaStatus(verbose = false, providerFilter = 'all') {
665
- await (0, ui_1.initUI)();
666
- console.log((0, ui_1.header)('Quota Status'));
667
- console.log('');
668
- const requestedProviders = new Set(providerFilter === 'all' ? provider_capabilities_1.QUOTA_SUPPORTED_PROVIDER_IDS : [providerFilter]);
669
- const shouldFetch = (provider) => requestedProviders.has(provider);
670
- console.log((0, ui_1.dim)('Fetching quotas...'));
671
- const providerResults = new Map(await Promise.all(provider_capabilities_1.QUOTA_SUPPORTED_PROVIDER_IDS.map(async (provider) => {
672
- if (!shouldFetch(provider)) {
673
- return [provider, null];
674
- }
675
- return [provider, await QUOTA_PROVIDER_RUNTIME[provider].fetch(verbose)];
676
- })));
677
- console.log('');
678
- // Pool routing settings are global to the CLIProxy config; read once.
679
- const poolSettings = (0, pool_state_renderer_1.readPoolRoutingSettings)();
680
- for (const provider of provider_capabilities_1.QUOTA_SUPPORTED_PROVIDER_IDS) {
681
- if (!shouldFetch(provider)) {
682
- continue;
683
- }
684
- const runtime = QUOTA_PROVIDER_RUNTIME[provider];
685
- const result = providerResults.get(provider) ?? null;
686
- if (result !== null && runtime.hasData(result)) {
687
- runtime.render(result);
688
- // Pool context: drain order + per-account state (available/cooling/paused).
689
- // QuotaSupportedProvider ids are all valid CLIProxyProvider values.
690
- // Async: folds in live in-proxy 429 cooldowns when pool routing is on.
691
- await (0, pool_state_renderer_1.renderProviderPoolSection)(provider, poolSettings);
692
- continue;
693
- }
694
- console.log((0, ui_1.subheader)(runtime.emptyTitle));
695
- console.log((0, ui_1.info)(runtime.emptyMessage));
696
- console.log(` Run: ${(0, ui_1.color)(runtime.authCommand, 'command')} to authenticate`);
697
- console.log('');
698
- }
699
- }
700
- exports.handleQuotaStatus = handleQuotaStatus;
701
- async function handleDoctor(verbose = false) {
702
- await (0, ui_1.initUI)();
703
- console.log((0, ui_1.header)('CLIProxy Quota Diagnostics'));
704
- console.log('');
705
- const provider = 'agy';
706
- const accounts = (0, account_manager_1.getProviderAccounts)(provider);
707
- if (accounts.length === 0) {
708
- console.log((0, ui_1.info)('No Antigravity accounts configured'));
709
- console.log(` Run: ${(0, ui_1.color)('ccs agy --auth', 'command')} to authenticate`);
710
- return;
711
- }
712
- console.log((0, ui_1.subheader)(`Antigravity Accounts (${accounts.length})`));
713
- console.log('');
714
- console.log((0, ui_1.dim)('Fetching quotas...'));
715
- const quotaResult = await (0, quota_fetcher_1.fetchAllProviderQuotas)(provider, verbose);
716
- for (const { account, quota } of quotaResult.accounts) {
717
- const accountLabel = formatCliAccountLabel(account);
718
- const defaultBadge = account.isDefault ? (0, ui_1.color)(' (default)', 'info') : '';
719
- if (!quota.success) {
720
- console.log(` ${(0, ui_1.fail)(accountLabel)}${defaultBadge}`);
721
- displayQuotaFailure(quota);
722
- if (quota.isUnprovisioned) {
723
- console.log(` ${(0, ui_1.warn)('Account not provisioned - open Gemini Code Assist in IDE first')}`);
724
- }
725
- console.log('');
726
- continue;
727
- }
728
- const avgQuota = quota.models.length > 0
729
- ? quota.models.reduce((sum, m) => sum + m.percentage, 0) / quota.models.length
730
- : 0;
731
- const statusIcon = avgQuota > 50 ? (0, ui_1.ok)('') : avgQuota > 10 ? (0, ui_1.warn)('') : (0, ui_1.fail)('');
732
- console.log(` ${statusIcon}${accountLabel}${defaultBadge}`);
733
- if (quota.projectId) {
734
- console.log(` Project: ${(0, ui_1.dim)(quota.projectId)}`);
735
- }
736
- for (const model of quota.models) {
737
- const bar = formatQuotaBar(model.percentage);
738
- console.log(` ${model.name.padEnd(20)} ${bar} ${model.percentage.toFixed(0)}%`);
739
- }
740
- console.log('');
741
- }
742
- const sharedProjects = Object.entries(quotaResult.projectGroups).filter(([, accountIds]) => accountIds.length > 1);
743
- if (sharedProjects.length > 0) {
744
- console.log('');
745
- console.log((0, ui_1.subheader)('Shared Project Warning'));
746
- console.log('');
747
- for (const [projectId, accountIds] of sharedProjects) {
748
- console.log((0, ui_1.fail)(`Project ${projectId.substring(0, 20)}... shared by ${accountIds.length} accounts:`));
749
- for (const accountId of accountIds) {
750
- console.log(` - ${accountId}`);
751
- }
752
- console.log('');
753
- console.log((0, ui_1.warn)('These accounts share the same quota pool!'));
754
- console.log((0, ui_1.warn)('Failover between them will NOT help when quota is exhausted.'));
755
- console.log((0, ui_1.info)('Solution: Use accounts from different GCP projects.'));
756
- }
757
- }
758
- console.log('');
759
- console.log((0, ui_1.subheader)('Summary'));
760
- const healthyAccounts = quotaResult.accounts.filter(({ quota }) => quota.success && quota.models.some((m) => m.percentage > 5));
761
- console.log(` Accounts with quota: ${healthyAccounts.length}/${accounts.length}`);
762
- if (sharedProjects.length > 0) {
763
- console.log(` ${(0, ui_1.fail)(`Shared projects: ${sharedProjects.length} (failover limited)`)}`);
764
- }
765
- else if (accounts.length > 1) {
766
- console.log(` ${(0, ui_1.ok)('No shared projects (failover fully operational)')}`);
767
- }
768
- console.log('');
769
- }
770
- exports.handleDoctor = handleDoctor;
771
- async function handleSetDefault(args) {
772
- await (0, ui_1.initUI)();
773
- const parsed = parseProfileArgs(args);
774
- if (!parsed.name) {
775
- console.log((0, ui_1.fail)('Usage: ccs cliproxy default <account> [--provider <provider>]'));
776
- console.log('');
777
- console.log('Examples:');
778
- console.log(' ccs cliproxy default ultra@gmail.com');
779
- console.log(' ccs cliproxy default john --provider agy');
780
- process.exit(1);
781
- }
782
- const provider = (parsed.provider || 'agy');
783
- const account = (0, account_manager_1.findAccountByQuery)(provider, parsed.name);
784
- if (!account) {
785
- console.log((0, ui_1.fail)(`Account not found: ${parsed.name}`));
786
- console.log('');
787
- const accounts = (0, account_manager_1.getProviderAccounts)(provider);
788
- if (accounts.length > 0) {
789
- console.log('Available accounts:');
790
- for (const acc of accounts) {
791
- const badge = acc.isDefault ? (0, ui_1.color)(' (current default)', 'info') : '';
792
- console.log(` - ${formatCliAccountLabel(acc)}${badge}`);
793
- }
794
- }
795
- else {
796
- console.log(`No accounts found for provider: ${provider}`);
797
- console.log(`Run: ccs ${provider} --auth`);
798
- }
799
- process.exit(1);
800
- }
801
- const success = (0, account_manager_1.setDefaultAccount)(provider, account.id);
802
- if (success) {
803
- console.log((0, ui_1.ok)(`Default account set to: ${formatCliAccountLabel(account)}`));
804
- console.log((0, ui_1.info)(`Provider: ${provider}`));
805
- }
806
- else {
807
- console.log((0, ui_1.fail)('Failed to set default account'));
808
- process.exit(1);
809
- }
810
- }
811
- exports.handleSetDefault = handleSetDefault;
812
- async function handlePauseAccount(args) {
813
- await (0, ui_1.initUI)();
814
- const parsed = parseProfileArgs(args);
815
- if (!parsed.name) {
816
- console.log((0, ui_1.fail)('Usage: ccs cliproxy pause <account> [--provider <provider>]'));
817
- console.log('');
818
- console.log('Pauses an account so it will be skipped in quota rotation.');
819
- process.exit(1);
820
- }
821
- const provider = (parsed.provider || 'agy');
822
- const account = (0, account_manager_1.findAccountByQuery)(provider, parsed.name);
823
- if (!account) {
824
- console.log((0, ui_1.fail)(`Account not found: ${parsed.name}`));
825
- process.exit(1);
826
- }
827
- if (account.paused) {
828
- const refreshed = (0, account_manager_1.pauseAccount)(provider, account.id);
829
- const refreshedAccount = refreshed ? (0, account_manager_1.findAccountByQuery)(provider, account.id) : account;
830
- console.log((0, ui_1.warn)(`Account already paused: ${formatCliAccountLabel(account)}`));
831
- if (refreshed) {
832
- console.log((0, ui_1.info)('Manual pause refreshed; account will stay out of quota rotation'));
833
- }
834
- console.log((0, ui_1.info)(`Paused at: ${refreshedAccount?.pausedAt || account.pausedAt || 'unknown'}`));
835
- return;
836
- }
837
- const success = (0, account_manager_1.pauseAccount)(provider, account.id);
838
- if (success) {
839
- console.log((0, ui_1.ok)(`Account paused: ${formatCliAccountLabel(account)}`));
840
- console.log((0, ui_1.info)('Account will be skipped in quota rotation'));
841
- }
842
- else {
843
- console.log((0, ui_1.fail)('Failed to pause account'));
844
- process.exit(1);
845
- }
846
- }
847
- exports.handlePauseAccount = handlePauseAccount;
848
- async function handleResumeAccount(args) {
849
- await (0, ui_1.initUI)();
850
- const parsed = parseProfileArgs(args);
851
- if (!parsed.name) {
852
- console.log((0, ui_1.fail)('Usage: ccs cliproxy resume <account> [--provider <provider>]'));
853
- console.log('');
854
- console.log('Resumes a paused account for quota rotation.');
855
- process.exit(1);
856
- }
857
- const provider = (parsed.provider || 'agy');
858
- const account = (0, account_manager_1.findAccountByQuery)(provider, parsed.name);
859
- if (!account) {
860
- console.log((0, ui_1.fail)(`Account not found: ${parsed.name}`));
861
- process.exit(1);
862
- }
863
- if (!account.paused) {
864
- console.log((0, ui_1.warn)(`Account is not paused: ${formatCliAccountLabel(account)}`));
865
- return;
866
- }
867
- const success = (0, account_manager_1.resumeAccount)(provider, account.id);
868
- if (success) {
869
- console.log((0, ui_1.ok)(`Account resumed: ${formatCliAccountLabel(account)}`));
870
- console.log((0, ui_1.info)('Account is now active in quota rotation'));
871
- }
872
- else {
873
- console.log((0, ui_1.fail)('Failed to resume account'));
874
- process.exit(1);
875
- }
876
- }
877
- exports.handleResumeAccount = handleResumeAccount;
18
+ exports.__testExports = exports.handleResumeAccount = exports.handlePauseAccount = exports.handleSetDefault = exports.handleDoctor = exports.handleQuotaStatus = void 0;
19
+ var handlers_1 = require("./quota-subcommand/handlers");
20
+ Object.defineProperty(exports, "handleQuotaStatus", { enumerable: true, get: function () { return handlers_1.handleQuotaStatus; } });
21
+ Object.defineProperty(exports, "handleDoctor", { enumerable: true, get: function () { return handlers_1.handleDoctor; } });
22
+ Object.defineProperty(exports, "handleSetDefault", { enumerable: true, get: function () { return handlers_1.handleSetDefault; } });
23
+ Object.defineProperty(exports, "handlePauseAccount", { enumerable: true, get: function () { return handlers_1.handlePauseAccount; } });
24
+ Object.defineProperty(exports, "handleResumeAccount", { enumerable: true, get: function () { return handlers_1.handleResumeAccount; } });
25
+ var test_exports_1 = require("./quota-subcommand/test-exports");
26
+ Object.defineProperty(exports, "__testExports", { enumerable: true, get: function () { return test_exports_1.__testExports; } });
878
27
  //# sourceMappingURL=quota-subcommand.js.map