@kaitranntt/ccs 8.2.0 → 8.3.0

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 (301) hide show
  1. package/README.md +12 -0
  2. package/config/base-claude.settings.json +1 -5
  3. package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
  4. package/dist/api/services/cliproxy-profile-bridge.js +6 -0
  5. package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
  6. package/dist/api/services/profile-writer.d.ts.map +1 -1
  7. package/dist/api/services/profile-writer.js +18 -8
  8. package/dist/api/services/profile-writer.js.map +1 -1
  9. package/dist/auth/commands/create-command.d.ts.map +1 -1
  10. package/dist/auth/commands/create-command.js +11 -0
  11. package/dist/auth/commands/create-command.js.map +1 -1
  12. package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts +41 -0
  13. package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts.map +1 -0
  14. package/dist/cliproxy/accounts/account-safety-cross-lane.js +177 -0
  15. package/dist/cliproxy/accounts/account-safety-cross-lane.js.map +1 -0
  16. package/dist/cliproxy/accounts/account-safety.d.ts +29 -1
  17. package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
  18. package/dist/cliproxy/accounts/account-safety.js +41 -7
  19. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  20. package/dist/cliproxy/accounts/drain-order.d.ts +277 -0
  21. package/dist/cliproxy/accounts/drain-order.d.ts.map +1 -0
  22. package/dist/cliproxy/accounts/drain-order.js +575 -0
  23. package/dist/cliproxy/accounts/drain-order.js.map +1 -0
  24. package/dist/cliproxy/accounts/pool-state.d.ts +132 -0
  25. package/dist/cliproxy/accounts/pool-state.d.ts.map +1 -0
  26. package/dist/cliproxy/accounts/pool-state.js +201 -0
  27. package/dist/cliproxy/accounts/pool-state.js.map +1 -0
  28. package/dist/cliproxy/accounts/registry.d.ts +17 -1
  29. package/dist/cliproxy/accounts/registry.d.ts.map +1 -1
  30. package/dist/cliproxy/accounts/registry.js +47 -1
  31. package/dist/cliproxy/accounts/registry.js.map +1 -1
  32. package/dist/cliproxy/accounts/types.d.ts +20 -0
  33. package/dist/cliproxy/accounts/types.d.ts.map +1 -1
  34. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  35. package/dist/cliproxy/auth/oauth-handler.js +29 -0
  36. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  37. package/dist/cliproxy/claude-shadow-warning.d.ts +39 -0
  38. package/dist/cliproxy/claude-shadow-warning.d.ts.map +1 -0
  39. package/dist/cliproxy/claude-shadow-warning.js +187 -0
  40. package/dist/cliproxy/claude-shadow-warning.js.map +1 -0
  41. package/dist/cliproxy/config/base-config-loader.d.ts +6 -5
  42. package/dist/cliproxy/config/base-config-loader.d.ts.map +1 -1
  43. package/dist/cliproxy/config/base-config-loader.js +19 -12
  44. package/dist/cliproxy/config/base-config-loader.js.map +1 -1
  45. package/dist/cliproxy/config/env-builder.d.ts +3 -0
  46. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  47. package/dist/cliproxy/config/env-builder.js +158 -20
  48. package/dist/cliproxy/config/env-builder.js.map +1 -1
  49. package/dist/cliproxy/config/generator.d.ts +2 -1
  50. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  51. package/dist/cliproxy/config/generator.js +66 -9
  52. package/dist/cliproxy/config/generator.js.map +1 -1
  53. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  54. package/dist/cliproxy/config/thinking-config.js +2 -0
  55. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  56. package/dist/cliproxy/executor/account-resolution.d.ts.map +1 -1
  57. package/dist/cliproxy/executor/account-resolution.js +5 -0
  58. package/dist/cliproxy/executor/account-resolution.js.map +1 -1
  59. package/dist/cliproxy/executor/auth-coordinator.d.ts +4 -0
  60. package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -1
  61. package/dist/cliproxy/executor/auth-coordinator.js +5 -1
  62. package/dist/cliproxy/executor/auth-coordinator.js.map +1 -1
  63. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  64. package/dist/cliproxy/executor/index.js +20 -0
  65. package/dist/cliproxy/executor/index.js.map +1 -1
  66. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  67. package/dist/cliproxy/model-catalog.js +15 -0
  68. package/dist/cliproxy/model-catalog.js.map +1 -1
  69. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -1
  70. package/dist/cliproxy/proxy/upstream-response-timeout.js +8 -1
  71. package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -1
  72. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts +9 -0
  73. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  74. package/dist/cliproxy/quota/quota-fetcher-claude.js +53 -16
  75. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  76. package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
  77. package/dist/cliproxy/quota/quota-fetcher.js +4 -0
  78. package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
  79. package/dist/cliproxy/quota/quota-manager.d.ts +7 -0
  80. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  81. package/dist/cliproxy/quota/quota-manager.js +51 -2
  82. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  83. package/dist/cliproxy/routing/pool-onboarding-hint.d.ts +95 -0
  84. package/dist/cliproxy/routing/pool-onboarding-hint.d.ts.map +1 -0
  85. package/dist/cliproxy/routing/pool-onboarding-hint.js +172 -0
  86. package/dist/cliproxy/routing/pool-onboarding-hint.js.map +1 -0
  87. package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts +50 -0
  88. package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts.map +1 -0
  89. package/dist/cliproxy/routing/pool-opt-in-prompt.js +232 -0
  90. package/dist/cliproxy/routing/pool-opt-in-prompt.js.map +1 -0
  91. package/dist/cliproxy/routing/routing-strategy.d.ts +132 -0
  92. package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
  93. package/dist/cliproxy/routing/routing-strategy.js +342 -5
  94. package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
  95. package/dist/cliproxy/services/stats-fetcher.d.ts +13 -0
  96. package/dist/cliproxy/services/stats-fetcher.d.ts.map +1 -1
  97. package/dist/cliproxy/services/stats-fetcher.js +25 -1
  98. package/dist/cliproxy/services/stats-fetcher.js.map +1 -1
  99. package/dist/commands/bar/help-subcommand.d.ts +2 -0
  100. package/dist/commands/bar/help-subcommand.d.ts.map +1 -0
  101. package/dist/commands/bar/help-subcommand.js +63 -0
  102. package/dist/commands/bar/help-subcommand.js.map +1 -0
  103. package/dist/commands/bar/index.d.ts +8 -0
  104. package/dist/commands/bar/index.d.ts.map +1 -0
  105. package/dist/commands/bar/index.js +78 -0
  106. package/dist/commands/bar/index.js.map +1 -0
  107. package/dist/commands/bar/install-subcommand.d.ts +92 -0
  108. package/dist/commands/bar/install-subcommand.d.ts.map +1 -0
  109. package/dist/commands/bar/install-subcommand.js +605 -0
  110. package/dist/commands/bar/install-subcommand.js.map +1 -0
  111. package/dist/commands/bar/launch-subcommand.d.ts +64 -0
  112. package/dist/commands/bar/launch-subcommand.d.ts.map +1 -0
  113. package/dist/commands/bar/launch-subcommand.js +236 -0
  114. package/dist/commands/bar/launch-subcommand.js.map +1 -0
  115. package/dist/commands/bar/uninstall-subcommand.d.ts +13 -0
  116. package/dist/commands/bar/uninstall-subcommand.d.ts.map +1 -0
  117. package/dist/commands/bar/uninstall-subcommand.js +78 -0
  118. package/dist/commands/bar/uninstall-subcommand.js.map +1 -0
  119. package/dist/commands/bar/version-subcommand.d.ts +8 -0
  120. package/dist/commands/bar/version-subcommand.d.ts.map +1 -0
  121. package/dist/commands/bar/version-subcommand.js +62 -0
  122. package/dist/commands/bar/version-subcommand.js.map +1 -0
  123. package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
  124. package/dist/commands/cliproxy/help-subcommand.js +20 -1
  125. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  126. package/dist/commands/cliproxy/index.d.ts.map +1 -1
  127. package/dist/commands/cliproxy/index.js +20 -0
  128. package/dist/commands/cliproxy/index.js.map +1 -1
  129. package/dist/commands/cliproxy/order-subcommand.d.ts +16 -0
  130. package/dist/commands/cliproxy/order-subcommand.d.ts.map +1 -0
  131. package/dist/commands/cliproxy/order-subcommand.js +520 -0
  132. package/dist/commands/cliproxy/order-subcommand.js.map +1 -0
  133. package/dist/commands/cliproxy/pool-state-renderer.d.ts +40 -0
  134. package/dist/commands/cliproxy/pool-state-renderer.d.ts.map +1 -0
  135. package/dist/commands/cliproxy/pool-state-renderer.js +220 -0
  136. package/dist/commands/cliproxy/pool-state-renderer.js.map +1 -0
  137. package/dist/commands/cliproxy/pool-subcommand.d.ts +10 -0
  138. package/dist/commands/cliproxy/pool-subcommand.d.ts.map +1 -0
  139. package/dist/commands/cliproxy/pool-subcommand.js +112 -0
  140. package/dist/commands/cliproxy/pool-subcommand.js.map +1 -0
  141. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  142. package/dist/commands/cliproxy/quota-subcommand.js +7 -0
  143. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  144. package/dist/commands/cliproxy/routing-subcommand.d.ts.map +1 -1
  145. package/dist/commands/cliproxy/routing-subcommand.js +19 -0
  146. package/dist/commands/cliproxy/routing-subcommand.js.map +1 -1
  147. package/dist/commands/command-catalog.d.ts.map +1 -1
  148. package/dist/commands/command-catalog.js +7 -0
  149. package/dist/commands/command-catalog.js.map +1 -1
  150. package/dist/commands/help-command.d.ts.map +1 -1
  151. package/dist/commands/help-command.js +6 -1
  152. package/dist/commands/help-command.js.map +1 -1
  153. package/dist/commands/root-command-router.d.ts.map +1 -1
  154. package/dist/commands/root-command-router.js +7 -0
  155. package/dist/commands/root-command-router.js.map +1 -1
  156. package/dist/config/loader/yaml-serializer.d.ts.map +1 -1
  157. package/dist/config/loader/yaml-serializer.js +13 -0
  158. package/dist/config/loader/yaml-serializer.js.map +1 -1
  159. package/dist/config/schemas/cliproxy.d.ts +37 -0
  160. package/dist/config/schemas/cliproxy.d.ts.map +1 -1
  161. package/dist/config/schemas/quota.d.ts +26 -2
  162. package/dist/config/schemas/quota.d.ts.map +1 -1
  163. package/dist/config/schemas/quota.js +20 -1
  164. package/dist/config/schemas/quota.js.map +1 -1
  165. package/dist/config/unified-config-loader.d.ts.map +1 -1
  166. package/dist/config/unified-config-loader.js +3 -0
  167. package/dist/config/unified-config-loader.js.map +1 -1
  168. package/dist/dispatcher/flows/account-flow.d.ts.map +1 -1
  169. package/dist/dispatcher/flows/account-flow.js +9 -0
  170. package/dist/dispatcher/flows/account-flow.js.map +1 -1
  171. package/dist/glmt/delta-accumulator.d.ts.map +1 -1
  172. package/dist/glmt/delta-accumulator.js +1 -0
  173. package/dist/glmt/delta-accumulator.js.map +1 -1
  174. package/dist/management/doctor.d.ts.map +1 -1
  175. package/dist/management/doctor.js +10 -0
  176. package/dist/management/doctor.js.map +1 -1
  177. package/dist/proxy/profile-router.d.ts +14 -0
  178. package/dist/proxy/profile-router.d.ts.map +1 -1
  179. package/dist/proxy/profile-router.js +1 -0
  180. package/dist/proxy/profile-router.js.map +1 -1
  181. package/dist/proxy/server/http-helpers.d.ts +5 -0
  182. package/dist/proxy/server/http-helpers.d.ts.map +1 -1
  183. package/dist/proxy/server/http-helpers.js +40 -1
  184. package/dist/proxy/server/http-helpers.js.map +1 -1
  185. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  186. package/dist/proxy/server/messages-route.js +173 -10
  187. package/dist/proxy/server/messages-route.js.map +1 -1
  188. package/dist/proxy/upstream-url.d.ts +42 -2
  189. package/dist/proxy/upstream-url.d.ts.map +1 -1
  190. package/dist/proxy/upstream-url.js +83 -4
  191. package/dist/proxy/upstream-url.js.map +1 -1
  192. package/dist/ui/assets/{Trans-DsGR5Bhb.js → Trans-RG_sMDEu.js} +1 -1
  193. package/dist/ui/assets/accounts-yTXURc-q.js +1 -0
  194. package/dist/ui/assets/{alert-dialog-Do0XfN46.js → alert-dialog-DjvPgzFs.js} +1 -1
  195. package/dist/ui/assets/{api-B7OYas_V.js → api-Ck1dtNEM.js} +3 -3
  196. package/dist/ui/assets/{auth-section-BmTeNetL.js → auth-section-DBnY_LPz.js} +1 -1
  197. package/dist/ui/assets/{backups-section-COawLfTr.js → backups-section-Ci-uL4Of.js} +1 -1
  198. package/dist/ui/assets/{channels-C9LVYmNJ.js → channels-BeS9O5q0.js} +1 -1
  199. package/dist/ui/assets/{checkbox-BkFzg8C-.js → checkbox-DFeFDZBp.js} +1 -1
  200. package/dist/ui/assets/{claude-extension-Ch7L4lTF.js → claude-extension-DS5qN19Z.js} +1 -1
  201. package/dist/ui/assets/{cliproxy-B3uWt6gn.js → cliproxy-D7HJH4mZ.js} +1 -1
  202. package/dist/ui/assets/{cliproxy-ai-providers-Bn1_AdKD.js → cliproxy-ai-providers-oJQZXrtc.js} +1 -1
  203. package/dist/ui/assets/{cliproxy-control-panel-DC4pOOfY.js → cliproxy-control-panel-2mRPEcRj.js} +1 -1
  204. package/dist/ui/assets/codex-D0AUQ6jA.js +30 -0
  205. package/dist/ui/assets/{confirm-dialog-4rb-E8-R.js → confirm-dialog-B37-CVuq.js} +1 -1
  206. package/dist/ui/assets/{copilot-zgPXNkMw.js → copilot-KaaW-mko.js} +2 -2
  207. package/dist/ui/assets/{cursor-lRPpppk-.js → cursor-BKiTgYi5.js} +1 -1
  208. package/dist/ui/assets/{droid-koOj34SB.js → droid-DHdqGnFw.js} +2 -2
  209. package/dist/ui/assets/{globalenv-section-jOkPVwvN.js → globalenv-section-SfZO97nU.js} +1 -1
  210. package/dist/ui/assets/health-CSRS9O0D.js +1 -0
  211. package/dist/ui/assets/icons-DSLG1YsC.js +1 -0
  212. package/dist/ui/assets/{index-D7crOfea.js → index-CGgavq2X.js} +37 -37
  213. package/dist/ui/assets/{index-BLC5PyZn.js → index-ChTYEBCZ.js} +1 -1
  214. package/dist/ui/assets/index-Cu_F55_O.js +1 -0
  215. package/dist/ui/assets/{index-CRhKyfnS.js → index-DJ66NrBH.js} +1 -1
  216. package/dist/ui/assets/index-DWUuSBUe.js +1 -0
  217. package/dist/ui/assets/{index-BK-PSsqi.js → index-DycwEe96.js} +1 -1
  218. package/dist/ui/assets/index-DzFlVVV3.css +1 -0
  219. package/dist/ui/assets/{index-De3yNJ94.js → index-iQuEEGbH.js} +1 -1
  220. package/dist/ui/assets/{logs-BplpQHRb.js → logs-tiZ_51mo.js} +1 -1
  221. package/dist/ui/assets/{masked-input-DuLL3EwS.js → masked-input-D9FVoeMA.js} +1 -1
  222. package/dist/ui/assets/proxy-status-widget-2k26d8pS.js +1 -0
  223. package/dist/ui/assets/{raw-json-settings-editor-panel-ClPqZ6iZ.js → raw-json-settings-editor-panel-CguBh93H.js} +1 -1
  224. package/dist/ui/assets/{searchable-select-BH1b065u.js → searchable-select-C4wShshD.js} +1 -1
  225. package/dist/ui/assets/{separator-BOiJ0l4s.js → separator-mvGlDdEW.js} +1 -1
  226. package/dist/ui/assets/{shared-CunXigZu.js → shared-Ck0yAwbs.js} +1 -1
  227. package/dist/ui/assets/{table-C7ysR1Xz.js → table-DrUJOxKL.js} +1 -1
  228. package/dist/ui/assets/updates-BVHBFcq8.js +1 -0
  229. package/dist/ui/assets/{use-accounts-CwRU3ln9.js → use-accounts-DLtuaniS.js} +1 -1
  230. package/dist/ui/index.html +3 -3
  231. package/dist/utils/browser/mcp-installer.d.ts.map +1 -1
  232. package/dist/utils/browser/mcp-installer.js +5 -34
  233. package/dist/utils/browser/mcp-installer.js.map +1 -1
  234. package/dist/utils/claude-user-config-lock.d.ts +9 -0
  235. package/dist/utils/claude-user-config-lock.d.ts.map +1 -0
  236. package/dist/utils/claude-user-config-lock.js +96 -0
  237. package/dist/utils/claude-user-config-lock.js.map +1 -0
  238. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
  239. package/dist/utils/image-analysis/mcp-installer.js +5 -34
  240. package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
  241. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
  242. package/dist/utils/websearch/mcp-installer.js +112 -78
  243. package/dist/utils/websearch/mcp-installer.js.map +1 -1
  244. package/dist/web-server/model-pricing.d.ts.map +1 -1
  245. package/dist/web-server/model-pricing.js +7 -0
  246. package/dist/web-server/model-pricing.js.map +1 -1
  247. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  248. package/dist/web-server/routes/account-routes.js +116 -0
  249. package/dist/web-server/routes/account-routes.js.map +1 -1
  250. package/dist/web-server/routes/bar-routes.d.ts +149 -0
  251. package/dist/web-server/routes/bar-routes.d.ts.map +1 -0
  252. package/dist/web-server/routes/bar-routes.js +415 -0
  253. package/dist/web-server/routes/bar-routes.js.map +1 -0
  254. package/dist/web-server/routes/index.d.ts.map +1 -1
  255. package/dist/web-server/routes/index.js +18 -0
  256. package/dist/web-server/routes/index.js.map +1 -1
  257. package/dist/web-server/usage/bar-analytics.d.ts +101 -0
  258. package/dist/web-server/usage/bar-analytics.d.ts.map +1 -0
  259. package/dist/web-server/usage/bar-analytics.js +315 -0
  260. package/dist/web-server/usage/bar-analytics.js.map +1 -0
  261. package/dist/web-server/usage/claude-native-credentials.d.ts +56 -0
  262. package/dist/web-server/usage/claude-native-credentials.d.ts.map +1 -0
  263. package/dist/web-server/usage/claude-native-credentials.js +140 -0
  264. package/dist/web-server/usage/claude-native-credentials.js.map +1 -0
  265. package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts +24 -0
  266. package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts.map +1 -0
  267. package/dist/web-server/usage/cliproxy-snapshot-reader.js +82 -0
  268. package/dist/web-server/usage/cliproxy-snapshot-reader.js.map +1 -0
  269. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts +3 -2
  270. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -1
  271. package/dist/web-server/usage/cliproxy-usage-syncer.js +14 -2
  272. package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -1
  273. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts +8 -1
  274. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -1
  275. package/dist/web-server/usage/cliproxy-usage-transformer.js +31 -4
  276. package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -1
  277. package/dist/web-server/usage/codex-local-quota-collector.d.ts +74 -0
  278. package/dist/web-server/usage/codex-local-quota-collector.d.ts.map +1 -0
  279. package/dist/web-server/usage/codex-local-quota-collector.js +250 -0
  280. package/dist/web-server/usage/codex-local-quota-collector.js.map +1 -0
  281. package/dist/web-server/usage/data-aggregator.d.ts +11 -0
  282. package/dist/web-server/usage/data-aggregator.d.ts.map +1 -1
  283. package/dist/web-server/usage/data-aggregator.js +29 -1
  284. package/dist/web-server/usage/data-aggregator.js.map +1 -1
  285. package/dist/web-server/usage/native-quota-collector.d.ts +44 -0
  286. package/dist/web-server/usage/native-quota-collector.d.ts.map +1 -0
  287. package/dist/web-server/usage/native-quota-collector.js +378 -0
  288. package/dist/web-server/usage/native-quota-collector.js.map +1 -0
  289. package/dist/web-server/usage/types.d.ts +2 -0
  290. package/dist/web-server/usage/types.d.ts.map +1 -1
  291. package/package.json +1 -1
  292. package/scripts/run-test-bucket.js +183 -17
  293. package/dist/ui/assets/accounts-DHBmHeH-.js +0 -1
  294. package/dist/ui/assets/codex-CcODhykP.js +0 -30
  295. package/dist/ui/assets/health-CxHauE3Y.js +0 -1
  296. package/dist/ui/assets/icons-DzKUh8vG.js +0 -1
  297. package/dist/ui/assets/index-DOfPoKe_.css +0 -1
  298. package/dist/ui/assets/index-DUGnoURR.js +0 -1
  299. package/dist/ui/assets/index-I_ek1xyD.js +0 -1
  300. package/dist/ui/assets/proxy-status-widget-BruRPTSl.js +0 -1
  301. package/dist/ui/assets/updates-BtBCV2xk.js +0 -1
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CLIProxy Accounts Drain Order Subcommand
3
+ *
4
+ * Handles:
5
+ * ccs cliproxy accounts order <provider>
6
+ * ccs cliproxy accounts order <provider> --by-tier
7
+ * ccs cliproxy accounts order <provider> --set a@x.com,b@y.com,...
8
+ * ccs cliproxy accounts order <provider> --reset
9
+ */
10
+ import { tieBreakKey } from '../../cliproxy/accounts/drain-order';
11
+ export { tieBreakKey };
12
+ /**
13
+ * Main handler for `ccs cliproxy accounts order <provider> [flags]`
14
+ */
15
+ export declare function handleOrderSubcommand(args: string[]): Promise<void>;
16
+ //# sourceMappingURL=order-subcommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/order-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAML,WAAW,EAGZ,MAAM,qCAAqC,CAAC;AAa7C,OAAO,EAAE,WAAW,EAAE,CAAC;AAokBvB;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDzE"}
@@ -0,0 +1,520 @@
1
+ "use strict";
2
+ /**
3
+ * CLIProxy Accounts Drain Order Subcommand
4
+ *
5
+ * Handles:
6
+ * ccs cliproxy accounts order <provider>
7
+ * ccs cliproxy accounts order <provider> --by-tier
8
+ * ccs cliproxy accounts order <provider> --set a@x.com,b@y.com,...
9
+ * ccs cliproxy accounts order <provider> --reset
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.handleOrderSubcommand = exports.tieBreakKey = void 0;
13
+ const ui_1 = require("../../utils/ui");
14
+ const arg_extractor_1 = require("../arg-extractor");
15
+ const registry_1 = require("../../cliproxy/accounts/registry");
16
+ const query_1 = require("../../cliproxy/accounts/query");
17
+ const drain_order_1 = require("../../cliproxy/accounts/drain-order");
18
+ Object.defineProperty(exports, "tieBreakKey", { enumerable: true, get: function () { return drain_order_1.tieBreakKey; } });
19
+ const proxy_detector_1 = require("../../cliproxy/proxy/proxy-detector");
20
+ const proxy_target_resolver_1 = require("../../cliproxy/proxy/proxy-target-resolver");
21
+ const provider_capabilities_1 = require("../../cliproxy/provider-capabilities");
22
+ const port_manager_1 = require("../../cliproxy/config/port-manager");
23
+ /** Providers where tier metadata is expected and --by-tier is meaningful. */
24
+ const TIER_AWARE_PROVIDERS = new Set(['agy', 'gemini']);
25
+ function formatTierLabel(tier, tierDerived) {
26
+ if (!tier || tier === 'unknown') {
27
+ return (0, ui_1.dim)('unknown');
28
+ }
29
+ const label = tier === 'ultra' ? (0, ui_1.color)(tier, 'success') : tier === 'pro' ? (0, ui_1.color)(tier, 'info') : (0, ui_1.dim)(tier);
30
+ return tierDerived ? label : (0, ui_1.dim)(tier);
31
+ }
32
+ function printOrderTable(entries, showCurrentPriority, sortByFilePriority = false) {
33
+ const rows = entries.slice().sort((a, b) => {
34
+ if (sortByFilePriority) {
35
+ // Sort by currentPriority (the selector's actual input), treating undefined as 0.
36
+ // This is the priority the selector actually sees on disk, not the computed config priority.
37
+ const aCurrent = a.currentPriority ?? 0;
38
+ const bCurrent = b.currentPriority ?? 0;
39
+ return bCurrent - aCurrent || ((0, drain_order_1.tieBreakKey)(a.tokenFile) < (0, drain_order_1.tieBreakKey)(b.tokenFile) ? -1 : 1);
40
+ }
41
+ // Tie-break by tokenFile ascending, matching the Go selector. Upstream sorts
42
+ // by Auth.ID byte order and only lowercases on Windows (see tieBreakKey).
43
+ // localeCompare is intentionally avoided - Go sorts by byte value, not locale.
44
+ return (b.priority - a.priority || ((0, drain_order_1.tieBreakKey)(a.tokenFile) < (0, drain_order_1.tieBreakKey)(b.tokenFile) ? -1 : 1));
45
+ });
46
+ const maxId = Math.max(...rows.map((r) => r.accountId.length), 'Account'.length);
47
+ const maxPri = Math.max(...rows.map((r) => String(r.priority).length), 'Priority'.length);
48
+ console.log(` ${'#'.padStart(3)} ${(0, ui_1.color)('Account'.padEnd(maxId), 'command')} ${'Priority'.padStart(maxPri)} Tier`);
49
+ console.log(` ${'---'} ${'-'.repeat(maxId)} ${'-'.repeat(maxPri)} ----`);
50
+ rows.forEach((entry, idx) => {
51
+ const pos = String(idx + 1).padStart(3);
52
+ const id = entry.accountId.padEnd(maxId);
53
+ const pri = String(entry.priority).padStart(maxPri);
54
+ const tierLabel = formatTierLabel(entry.tier, entry.tierDerived);
55
+ const currentNote = showCurrentPriority && entry.currentPriority !== undefined
56
+ ? (0, ui_1.dim)(` (file: ${entry.currentPriority})`)
57
+ : '';
58
+ console.log(` ${pos} ${(0, ui_1.color)(id, 'command')} ${(0, ui_1.color)(pri, 'info')} ${tierLabel}${currentNote}`);
59
+ });
60
+ }
61
+ /**
62
+ * Show effective drain order for a provider without making any changes.
63
+ */
64
+ async function handleOrderShow(provider) {
65
+ // Use getProviderAccounts() so auth files not yet in accounts.json
66
+ // (e.g. file-copied fleets) are visible and tier metadata is preserved.
67
+ const allAccounts = (0, query_1.getProviderAccounts)(provider);
68
+ if (allAccounts.length === 0) {
69
+ console.log((0, ui_1.warn)(`No accounts found for provider: ${provider}`));
70
+ console.log('');
71
+ return;
72
+ }
73
+ const accounts = allAccounts
74
+ .filter((a) => !a.paused)
75
+ .map((a) => ({
76
+ accountId: a.id,
77
+ tokenFile: a.tokenFile,
78
+ tier: a.tier,
79
+ }));
80
+ if (accounts.length === 0) {
81
+ console.log((0, ui_1.warn)(`All accounts for ${provider} are paused.`));
82
+ console.log('');
83
+ return;
84
+ }
85
+ // Shared effective-order resolver: same semantics the quota Pool section and
86
+ // the selector use (sort by on-disk priority, surface drift).
87
+ const effective = (0, drain_order_1.resolveEffectiveDrainOrder)(provider, accounts);
88
+ if (effective.mode === 'file') {
89
+ // File order: no priority writes. Render from the resolver's output so the
90
+ // displayed order matches what the selector actually drains, honouring any
91
+ // residual on-disk priorities (e.g. left by `order --reset`). Reached when
92
+ // no config is stored, or when a stored manual order has only stale IDs.
93
+ printFileOrderView(provider, effective.entries, effective.hasDrift);
94
+ return;
95
+ }
96
+ const entries = effective.entries;
97
+ const modeLabel = effective.mode === 'manual'
98
+ ? `manual (${(0, ui_1.color)('--set', 'command')})`
99
+ : `tier-derived (${(0, ui_1.color)('--by-tier', 'command')})`;
100
+ const hasDrift = effective.hasDrift;
101
+ console.log(` Mode: ${modeLabel}`);
102
+ if (hasDrift) {
103
+ console.log('');
104
+ console.log((0, ui_1.warn)(`Drift detected: stored order does not match auth files; re-run --set/--by-tier to re-apply.`));
105
+ }
106
+ console.log('');
107
+ // Show rows in selector pick order (currentPriority desc, tokenFile asc on tie).
108
+ // This reflects what CLIProxy will actually drain, not just the intended config.
109
+ console.log((0, ui_1.subheader)('Effective drain order (selector pick order, highest priority first):'));
110
+ printOrderTable(entries, true, true);
111
+ console.log('');
112
+ console.log((0, ui_1.dim)(` To update: ccs cliproxy accounts order ${provider} --set <comma-separated-ids>`));
113
+ if (TIER_AWARE_PROVIDERS.has(provider)) {
114
+ console.log((0, ui_1.dim)(` Tier-based: ccs cliproxy accounts order ${provider} --by-tier`));
115
+ }
116
+ console.log((0, ui_1.dim)(` To reset: ccs cliproxy accounts order ${provider} --reset`));
117
+ console.log('');
118
+ }
119
+ function filePriorityNote(entry) {
120
+ return entry.currentPriority !== undefined ? (0, ui_1.dim)(` [priority: ${entry.currentPriority}]`) : '';
121
+ }
122
+ /**
123
+ * Render the file-order view from the shared resolver's output. No priority
124
+ * writes; used when no drain order config is stored, or when a stored manual
125
+ * order has only stale IDs.
126
+ *
127
+ * Entries arrive already sorted in selector pick order (on-disk priority desc,
128
+ * tokenFile asc on tie), so the displayed order matches what CLIProxy actually
129
+ * drains even when residual priorities exist (e.g. left by `order --reset`). The
130
+ * mode label and drift warning are kept honest for that residual case.
131
+ */
132
+ function printFileOrderView(provider, entries, hasDrift) {
133
+ if (!TIER_AWARE_PROVIDERS.has(provider)) {
134
+ console.log((0, ui_1.info)(`Tier unknown for ${provider} accounts - using file order.\n` +
135
+ ` Use --set to specify manual order.`));
136
+ }
137
+ // Under drift, "no priority set" would be a lie - residual on-disk priorities
138
+ // are present and are what the selector follows. Label accordingly.
139
+ const label = hasDrift
140
+ ? 'file order (residual priorities present)'
141
+ : 'file order (no priority set)';
142
+ console.log(` Mode: ${(0, ui_1.dim)(label)}`);
143
+ if (hasDrift) {
144
+ console.log('');
145
+ console.log((0, ui_1.warn)(`Drift detected: residual on-disk priorities steer the selector;\n` +
146
+ ` clear them with --reset (or re-auth the accounts) to return to plain file order.`));
147
+ }
148
+ console.log('');
149
+ console.log((0, ui_1.subheader)('Active accounts (selector pick order):'));
150
+ // Entries are already in selector pick order from the resolver; render as-is.
151
+ entries.forEach((entry, idx) => {
152
+ const pri = filePriorityNote(entry);
153
+ console.log(` ${String(idx + 1).padStart(3)} ${(0, ui_1.color)(entry.accountId, 'command')}${pri}`);
154
+ });
155
+ console.log('');
156
+ console.log((0, ui_1.dim)(` To set manual order: ccs cliproxy accounts order ${provider} --set a@x.com,b@y.com`));
157
+ if (TIER_AWARE_PROVIDERS.has(provider)) {
158
+ console.log((0, ui_1.dim)(` To use tier-based order: ccs cliproxy accounts order ${provider} --by-tier`));
159
+ }
160
+ console.log('');
161
+ }
162
+ /**
163
+ * Apply tier-derived drain order for a provider.
164
+ */
165
+ async function handleOrderByTier(provider) {
166
+ if (!TIER_AWARE_PROVIDERS.has(provider)) {
167
+ console.log((0, ui_1.warn)(`Tier metadata is not available for ${provider} accounts.\n` +
168
+ ` Tier is tracked for: ${[...TIER_AWARE_PROVIDERS].join(', ')}\n` +
169
+ ` Use --set for manual order instead.`));
170
+ console.log('');
171
+ process.exitCode = 1;
172
+ return;
173
+ }
174
+ // Use getProviderAccounts() so auth files not yet in accounts.json
175
+ // (e.g. file-copied fleets) are visible and tier metadata is preserved.
176
+ const allProviderAccounts = (0, query_1.getProviderAccounts)(provider);
177
+ if (allProviderAccounts.length === 0) {
178
+ console.log((0, ui_1.warn)(`No accounts found for provider: ${provider}`));
179
+ console.log('');
180
+ process.exitCode = 1;
181
+ return;
182
+ }
183
+ const accounts = allProviderAccounts
184
+ .filter((a) => !a.paused)
185
+ .map((a) => ({
186
+ accountId: a.id,
187
+ tokenFile: a.tokenFile,
188
+ tier: a.tier,
189
+ }));
190
+ if (accounts.length === 0) {
191
+ console.log((0, ui_1.warn)(`All ${provider} accounts are paused.`));
192
+ console.log('');
193
+ process.exitCode = 1;
194
+ return;
195
+ }
196
+ const allUnknown = accounts.every((a) => !a.tier || a.tier === 'unknown');
197
+ if (allUnknown) {
198
+ console.log((0, ui_1.warn)(`All ${provider} accounts have unknown tier.\n` +
199
+ ` Run quota to populate tier metadata, or use --set for manual order.`));
200
+ console.log('');
201
+ process.exitCode = 1;
202
+ return;
203
+ }
204
+ const entries = (0, drain_order_1.computeTierDrainOrder)(accounts);
205
+ console.log((0, ui_1.subheader)('Computed tier-based drain order:'));
206
+ printOrderTable(entries, false);
207
+ console.log('');
208
+ // Check proxy state for write path selection.
209
+ // Use the configured local port (not the hardcoded default) for detection.
210
+ // Remote targets: refuse with guidance - detection and current-priority reads
211
+ // require management API access that is not wired in v1.
212
+ const proxyTarget = (0, proxy_target_resolver_1.getProxyTarget)();
213
+ if (proxyTarget.isRemote) {
214
+ console.log((0, ui_1.warn)(`Remote proxy target detected. Drain order management for remote proxies is not\n` +
215
+ ` supported in v1. Run this command on the host running CLIProxy instead.`));
216
+ console.log('');
217
+ process.exitCode = 1;
218
+ return;
219
+ }
220
+ const localPort = (0, port_manager_1.resolveLifecyclePort)();
221
+ const proxyStatus = await (0, proxy_detector_1.detectRunningProxy)(localPort);
222
+ // Ambiguous state: proxy process is alive but not yet responding to HTTP.
223
+ // A direct file write while CLIProxy is serving could be silently clobbered
224
+ // by the MarkResult-persist path. Refuse rather than risk priority loss.
225
+ if (proxyStatus.running && !proxyStatus.verified) {
226
+ console.log((0, ui_1.fail)('Proxy state ambiguous - retry in a moment or stop the proxy first.'));
227
+ console.log('');
228
+ process.exitCode = 1;
229
+ return;
230
+ }
231
+ const proxyRunning = proxyStatus.running && proxyStatus.verified;
232
+ if (proxyRunning) {
233
+ console.log((0, ui_1.info)('Proxy is running - writing via management API (avoids clobber race).'));
234
+ }
235
+ else {
236
+ console.log((0, ui_1.info)('Proxy is stopped - writing directly to auth files.'));
237
+ }
238
+ console.log('');
239
+ const result = await (0, drain_order_1.applyDrainOrder)(entries, proxyRunning);
240
+ if (result.written.length > 0) {
241
+ console.log((0, ui_1.ok)(`Set priorities for ${result.written.length} account(s).`));
242
+ }
243
+ if (result.skipped.length > 0) {
244
+ console.log((0, ui_1.info)(`Skipped ${result.skipped.length} account(s) (priority already correct).`));
245
+ }
246
+ if (result.failed.length > 0) {
247
+ for (const f of result.failed) {
248
+ console.log((0, ui_1.fail)(`Failed to set priority for ${f.entry.accountId}: ${f.reason}`));
249
+ }
250
+ process.exitCode = 1;
251
+ }
252
+ if (result.failed.length === 0) {
253
+ // Persist mode
254
+ const persisted = (0, registry_1.saveDrainOrderConfig)(provider, { mode: 'tier' });
255
+ if (persisted) {
256
+ console.log((0, ui_1.ok)(`Drain order mode saved as "tier". Re-run "ccs cliproxy accounts order ${provider} --by-tier" after adding or re-authing accounts to re-apply.`));
257
+ }
258
+ else {
259
+ console.log((0, ui_1.warn)(`Order applied to auth files but mode not persisted - no registered accounts for ${provider}; run ccs cliproxy quota to register, then re-run`));
260
+ }
261
+ }
262
+ console.log('');
263
+ }
264
+ /**
265
+ * Apply manual drain order specified as comma-separated account IDs.
266
+ */
267
+ async function handleOrderSet(provider, setArg) {
268
+ const orderedIds = setArg
269
+ .split(',')
270
+ .map((s) => s.trim())
271
+ .filter((s) => s.length > 0);
272
+ if (orderedIds.length === 0) {
273
+ console.log((0, ui_1.fail)('--set requires a comma-separated list of account IDs.'));
274
+ console.log('');
275
+ process.exitCode = 1;
276
+ return;
277
+ }
278
+ // Use getProviderAccounts() so auth files not yet in accounts.json
279
+ // (e.g. file-copied fleets) are visible and tier metadata is preserved.
280
+ const allProviderAccounts = (0, query_1.getProviderAccounts)(provider);
281
+ if (allProviderAccounts.length === 0) {
282
+ console.log((0, ui_1.warn)(`No accounts found for provider: ${provider}`));
283
+ console.log('');
284
+ process.exitCode = 1;
285
+ return;
286
+ }
287
+ const allAccounts = allProviderAccounts
288
+ .filter((a) => !a.paused)
289
+ .map((a) => ({
290
+ accountId: a.id,
291
+ tokenFile: a.tokenFile,
292
+ tier: a.tier,
293
+ }));
294
+ let entries;
295
+ try {
296
+ entries = (0, drain_order_1.computeManualDrainOrder)(orderedIds, allAccounts);
297
+ }
298
+ catch (err) {
299
+ console.log((0, ui_1.fail)(`${err.message}`));
300
+ console.log('');
301
+ process.exitCode = 1;
302
+ return;
303
+ }
304
+ console.log((0, ui_1.subheader)('Computed manual drain order:'));
305
+ printOrderTable(entries, false);
306
+ console.log('');
307
+ // Use the configured local port (not the hardcoded default) for detection.
308
+ // Remote targets: refuse with guidance.
309
+ const proxyTarget = (0, proxy_target_resolver_1.getProxyTarget)();
310
+ if (proxyTarget.isRemote) {
311
+ console.log((0, ui_1.warn)(`Remote proxy target detected. Drain order management for remote proxies is not\n` +
312
+ ` supported in v1. Run this command on the host running CLIProxy instead.`));
313
+ console.log('');
314
+ process.exitCode = 1;
315
+ return;
316
+ }
317
+ const localPort = (0, port_manager_1.resolveLifecyclePort)();
318
+ const proxyStatus = await (0, proxy_detector_1.detectRunningProxy)(localPort);
319
+ // Ambiguous state: proxy process is alive but not yet responding to HTTP.
320
+ // A direct file write while CLIProxy is serving could be silently clobbered
321
+ // by the MarkResult-persist path. Refuse rather than risk priority loss.
322
+ if (proxyStatus.running && !proxyStatus.verified) {
323
+ console.log((0, ui_1.fail)('Proxy state ambiguous - retry in a moment or stop the proxy first.'));
324
+ console.log('');
325
+ process.exitCode = 1;
326
+ return;
327
+ }
328
+ const proxyRunning = proxyStatus.running && proxyStatus.verified;
329
+ if (proxyRunning) {
330
+ console.log((0, ui_1.info)('Proxy is running - writing via management API (avoids clobber race).'));
331
+ }
332
+ else {
333
+ console.log((0, ui_1.info)('Proxy is stopped - writing directly to auth files.'));
334
+ }
335
+ console.log('');
336
+ const result = await (0, drain_order_1.applyDrainOrder)(entries, proxyRunning);
337
+ if (result.written.length > 0) {
338
+ console.log((0, ui_1.ok)(`Set priorities for ${result.written.length} account(s).`));
339
+ }
340
+ if (result.skipped.length > 0) {
341
+ console.log((0, ui_1.info)(`Skipped ${result.skipped.length} account(s) (priority already correct).`));
342
+ }
343
+ if (result.failed.length > 0) {
344
+ for (const f of result.failed) {
345
+ console.log((0, ui_1.fail)(`Failed to set priority for ${f.entry.accountId}: ${f.reason}`));
346
+ }
347
+ process.exitCode = 1;
348
+ }
349
+ if (result.failed.length === 0) {
350
+ const persisted = (0, registry_1.saveDrainOrderConfig)(provider, { mode: 'manual', orderedIds });
351
+ if (persisted) {
352
+ console.log((0, ui_1.ok)(`Drain order mode saved as "manual". Re-run "ccs cliproxy accounts order ${provider} --set <ids>" after adding or re-authing accounts to re-apply.`));
353
+ }
354
+ else {
355
+ console.log((0, ui_1.warn)(`Order applied to auth files but mode not persisted - no registered accounts for ${provider}; run ccs cliproxy quota to register, then re-run`));
356
+ }
357
+ }
358
+ console.log('');
359
+ }
360
+ /**
361
+ * Reset drain order to file order: remove the persisted config AND clear the
362
+ * residual priority field from the provider's auth files so the selector
363
+ * actually returns to plain file order.
364
+ *
365
+ * Clearing the field uses the same dual write path as --set/--by-tier:
366
+ * - Proxy running: PATCH priority:0 via the management API (the management layer
367
+ * treats 0 as delete). A direct file write here would be clobbered by the
368
+ * proxy's whole-file MarkResult persist, so the API path is mandatory.
369
+ * - Proxy stopped: delete the field directly with an atomic temp-rename.
370
+ *
371
+ * Remote targets are refused with guidance (same as --set/--by-tier), and an
372
+ * ambiguous proxy state (alive but not yet serving HTTP) is refused to avoid a
373
+ * clobbered write.
374
+ */
375
+ async function handleOrderReset(provider) {
376
+ const configCleared = (0, registry_1.clearDrainOrderConfig)(provider);
377
+ // Collect the auth files that may carry residual priorities. Use
378
+ // getProviderAccounts() so file-copied fleets (not yet in accounts.json) are
379
+ // covered too; clearing is idempotent for files with no priority field.
380
+ const tokenFiles = (0, query_1.getProviderAccounts)(provider).map((a) => a.tokenFile);
381
+ if (tokenFiles.length === 0) {
382
+ if (configCleared) {
383
+ console.log((0, ui_1.ok)(`Drain order reset to file order for ${provider}.`));
384
+ }
385
+ else {
386
+ console.log((0, ui_1.info)(`No drain order config found for ${provider}. Already in file order.`));
387
+ }
388
+ console.log('');
389
+ return;
390
+ }
391
+ // Remote targets: refuse with guidance - clearing priorities needs management
392
+ // API access that is not wired for remote proxies in v1.
393
+ const proxyTarget = (0, proxy_target_resolver_1.getProxyTarget)();
394
+ if (proxyTarget.isRemote) {
395
+ if (configCleared) {
396
+ console.log((0, ui_1.ok)(`Drain order config cleared for ${provider} (mode reset to file order).`));
397
+ }
398
+ else {
399
+ console.log((0, ui_1.info)(`No drain order config found for ${provider}.`));
400
+ }
401
+ console.log((0, ui_1.warn)(`Remote proxy target detected. Residual auth-file priorities were NOT cleared;\n` +
402
+ ` drain order management for remote proxies is not supported in v1. Run this\n` +
403
+ ` command on the host running CLIProxy to clear them.`));
404
+ console.log('');
405
+ process.exitCode = 1;
406
+ return;
407
+ }
408
+ const localPort = (0, port_manager_1.resolveLifecyclePort)();
409
+ const proxyStatus = await (0, proxy_detector_1.detectRunningProxy)(localPort);
410
+ // Ambiguous state: proxy alive but not yet serving HTTP. A direct write could
411
+ // be clobbered; refuse rather than risk a half-cleared state.
412
+ if (proxyStatus.running && !proxyStatus.verified) {
413
+ if (configCleared) {
414
+ console.log((0, ui_1.ok)(`Drain order config cleared for ${provider} (mode reset to file order).`));
415
+ }
416
+ console.log((0, ui_1.fail)('Proxy state ambiguous - residual priorities not cleared. Retry in a moment or stop the proxy first.'));
417
+ console.log('');
418
+ process.exitCode = 1;
419
+ return;
420
+ }
421
+ const proxyRunning = proxyStatus.running && proxyStatus.verified;
422
+ if (proxyRunning) {
423
+ console.log((0, ui_1.info)('Proxy is running - clearing priorities via management API (avoids clobber race).'));
424
+ }
425
+ else {
426
+ console.log((0, ui_1.info)('Proxy is stopped - clearing priorities directly in auth files.'));
427
+ }
428
+ const result = await (0, drain_order_1.clearDrainOrderPriorities)(tokenFiles, proxyRunning);
429
+ if (configCleared || result.cleared.length > 0) {
430
+ console.log((0, ui_1.ok)(`Drain order reset to file order for ${provider}.`));
431
+ }
432
+ else {
433
+ console.log((0, ui_1.info)(`No drain order config found for ${provider}. Already in file order.`));
434
+ }
435
+ if (result.cleared.length > 0) {
436
+ console.log((0, ui_1.ok)(`Cleared residual priority from ${result.cleared.length} auth file(s).`));
437
+ }
438
+ if (result.alreadyClear.length > 0) {
439
+ console.log((0, ui_1.info)(`${result.alreadyClear.length} auth file(s) had no priority set (nothing to clear).`));
440
+ }
441
+ if (result.failed.length > 0) {
442
+ for (const f of result.failed) {
443
+ console.log((0, ui_1.fail)(`Failed to clear priority for ${f.tokenFile}: ${f.reason}`));
444
+ }
445
+ console.log((0, ui_1.dim)(' Residual priorities remain on the failed files above and will still steer the selector.'));
446
+ process.exitCode = 1;
447
+ }
448
+ console.log('');
449
+ }
450
+ function printOrderHelp(provider) {
451
+ const prov = provider ?? '<provider>';
452
+ console.log((0, ui_1.subheader)('Usage:'));
453
+ console.log(` ${(0, ui_1.color)(`ccs cliproxy accounts order ${prov}`, 'command')}`);
454
+ console.log(` ${(0, ui_1.color)(`ccs cliproxy accounts order ${prov} --by-tier`, 'command')}`);
455
+ console.log(` ${(0, ui_1.color)(`ccs cliproxy accounts order ${prov} --set a@x.com,b@y.com`, 'command')}`);
456
+ console.log(` ${(0, ui_1.color)(`ccs cliproxy accounts order ${prov} --reset`, 'command')}`);
457
+ console.log('');
458
+ console.log((0, ui_1.subheader)('Options:'));
459
+ console.log(` ${(0, ui_1.dim)('(no flags)')} Show effective drain order`);
460
+ console.log(` ${(0, ui_1.color)('--by-tier', 'command')} Derive order from tier metadata (ultra > pro > free)`);
461
+ console.log(` ${(0, ui_1.color)('--set', 'command')} <ids> Set manual order (comma-separated account IDs)`);
462
+ console.log(` ${(0, ui_1.color)('--reset', 'command')} Revert to stable file order`);
463
+ console.log('');
464
+ console.log((0, ui_1.dim)(' Tier-based ordering is available for: agy, gemini'));
465
+ console.log((0, ui_1.dim)(' Claude accounts have unknown tier; use --set for manual order.'));
466
+ console.log('');
467
+ }
468
+ /**
469
+ * Main handler for `ccs cliproxy accounts order <provider> [flags]`
470
+ */
471
+ async function handleOrderSubcommand(args) {
472
+ await (0, ui_1.initUI)();
473
+ console.log('');
474
+ console.log((0, ui_1.header)('CLIProxy Drain Order'));
475
+ console.log('');
476
+ if ((0, arg_extractor_1.hasAnyFlag)(args, ['--help', '-h']) || args.length === 0) {
477
+ printOrderHelp();
478
+ return;
479
+ }
480
+ // First positional arg is provider name
481
+ const providerRaw = args[0];
482
+ if (!providerRaw || providerRaw.startsWith('-')) {
483
+ console.log((0, ui_1.fail)('Provider name required. Usage: ccs cliproxy accounts order <provider>'));
484
+ console.log('');
485
+ printOrderHelp();
486
+ process.exitCode = 1;
487
+ return;
488
+ }
489
+ const provider = (0, provider_capabilities_1.mapExternalProviderName)(providerRaw);
490
+ if (!provider) {
491
+ console.log((0, ui_1.fail)(`Unknown provider: ${providerRaw}`));
492
+ console.log('');
493
+ process.exitCode = 1;
494
+ return;
495
+ }
496
+ const subArgs = args.slice(1);
497
+ if ((0, arg_extractor_1.hasAnyFlag)(subArgs, ['--reset'])) {
498
+ await handleOrderReset(provider);
499
+ return;
500
+ }
501
+ if ((0, arg_extractor_1.hasAnyFlag)(subArgs, ['--by-tier'])) {
502
+ await handleOrderByTier(provider);
503
+ return;
504
+ }
505
+ const extracted = (0, arg_extractor_1.extractOption)(subArgs, ['--set']);
506
+ if (extracted.found) {
507
+ if (extracted.missingValue || !extracted.value) {
508
+ console.log((0, ui_1.fail)('--set requires a value: --set a@x.com,b@y.com,...'));
509
+ console.log('');
510
+ process.exitCode = 1;
511
+ return;
512
+ }
513
+ await handleOrderSet(provider, extracted.value);
514
+ return;
515
+ }
516
+ // Default: show current order
517
+ await handleOrderShow(provider);
518
+ }
519
+ exports.handleOrderSubcommand = handleOrderSubcommand;
520
+ //# sourceMappingURL=order-subcommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-subcommand.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/order-subcommand.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,uCAA6F;AAC7F,oDAA6D;AAC7D,+DAA+F;AAC/F,yDAAoE;AACpE,qEAS6C;AAapC,4FAhBP,yBAAW,OAgBO;AAZpB,wEAAyE;AACzE,sFAA4E;AAC5E,gFAA+E;AAG/E,qEAA0E;AAE1E,6EAA6E;AAC7E,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAM1E,SAAS,eAAe,CAAC,IAA6B,EAAE,WAAoB;IAC1E,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,IAAA,QAAG,EAAC,SAAS,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GACT,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAA,UAAK,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAA,UAAK,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,QAAG,EAAC,IAAI,CAAC,CAAC;IAC/F,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,QAAG,EAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CACtB,OAA0B,EAC1B,mBAA4B,EAC5B,qBAA8B,KAAK;IAEnC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzC,IAAI,kBAAkB,EAAE,CAAC;YACvB,kFAAkF;YAClF,6FAA6F;YAC7F,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC;YACxC,OAAO,QAAQ,GAAG,QAAQ,IAAI,CAAC,IAAA,yBAAW,EAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAA,yBAAW,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,6EAA6E;QAC7E,0EAA0E;QAC1E,+EAA+E;QAC/E,OAAO,CACL,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAA,yBAAW,EAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAA,yBAAW,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAE1F,OAAO,CAAC,GAAG,CACT,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAA,UAAK,EAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAC3G,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE7E,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACjE,MAAM,WAAW,GACf,mBAAmB,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS;YACxD,CAAC,CAAC,IAAA,QAAG,EAAC,WAAW,KAAK,CAAC,eAAe,GAAG,CAAC;YAC1C,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CACT,KAAK,GAAG,KAAK,IAAA,UAAK,EAAC,EAAE,EAAE,SAAS,CAAC,KAAK,IAAA,UAAK,EAAC,GAAG,EAAE,MAAM,CAAC,KAAK,SAAS,GAAG,WAAW,EAAE,CACvF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,QAA0B;IACvD,mEAAmE;IACnE,wEAAwE;IACxE,MAAM,WAAW,GAAG,IAAA,2BAAmB,EAAC,QAAQ,CAAC,CAAC;IAElD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAsB,WAAW;SAC5C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAC;IAEN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,oBAAoB,QAAQ,cAAc,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,8DAA8D;IAC9D,MAAM,SAAS,GAAG,IAAA,wCAA0B,EAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEjE,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC9B,2EAA2E;QAC3E,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,MAAM,SAAS,GACb,SAAS,CAAC,IAAI,KAAK,QAAQ;QACzB,CAAC,CAAC,WAAW,IAAA,UAAK,EAAC,OAAO,EAAE,SAAS,CAAC,GAAG;QACzC,CAAC,CAAC,iBAAiB,IAAA,UAAK,EAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC;IACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,6FAA6F,CAC9F,CACF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,iFAAiF;IACjF,iFAAiF;IACjF,OAAO,CAAC,GAAG,CAAC,IAAA,cAAS,EAAC,sEAAsE,CAAC,CAAC,CAAC;IAC/F,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,IAAA,QAAG,EAAC,4CAA4C,QAAQ,8BAA8B,CAAC,CACxF,CAAC;IACF,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,IAAA,QAAG,EAAC,6CAA6C,QAAQ,YAAY,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAA,QAAG,EAAC,4CAA4C,QAAQ,UAAU,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAsB;IAC9C,OAAO,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,QAAG,EAAC,eAAe,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjG,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CACzB,QAA0B,EAC1B,OAA0B,EAC1B,QAAiB;IAEjB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,oBAAoB,QAAQ,iCAAiC;YAC3D,wCAAwC,CAC3C,CACF,CAAC;IACJ,CAAC;IACD,8EAA8E;IAC9E,oEAAoE;IACpE,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,0CAA0C;QAC5C,CAAC,CAAC,8BAA8B,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAA,QAAG,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,mEAAmE;YACjE,sFAAsF,CACzF,CACF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAA,cAAS,EAAC,wCAAwC,CAAC,CAAC,CAAC;IACjE,8EAA8E;IAC9E,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAA,UAAK,EAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CACT,IAAA,QAAG,EAAC,yDAAyD,QAAQ,wBAAwB,CAAC,CAC/F,CAAC;IACF,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CACT,IAAA,QAAG,EAAC,0DAA0D,QAAQ,YAAY,CAAC,CACpF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,QAA0B;IACzD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,sCAAsC,QAAQ,cAAc;YAC1D,4BAA4B,CAAC,GAAG,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACpE,yCAAyC,CAC5C,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,wEAAwE;IACxE,MAAM,mBAAmB,GAAG,IAAA,2BAAmB,EAAC,QAAQ,CAAC,CAAC;IAE1D,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAsB,mBAAmB;SACpD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAC;IAEN,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,OAAO,QAAQ,uBAAuB,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC1E,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,OAAO,QAAQ,gCAAgC;YAC7C,yEAAyE,CAC5E,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAA,mCAAqB,EAAC,QAAQ,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,IAAA,cAAS,EAAC,kCAAkC,CAAC,CAAC,CAAC;IAC3D,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,8CAA8C;IAC9C,2EAA2E;IAC3E,8EAA8E;IAC9E,yDAAyD;IACzD,MAAM,WAAW,GAAG,IAAA,sCAAc,GAAE,CAAC;IACrC,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,kFAAkF;YAChF,6EAA6E,CAChF,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,mCAAoB,GAAE,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,IAAA,mCAAkB,EAAC,SAAS,CAAC,CAAC;IAExD,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,oEAAoE,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC;IAEjE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,sEAAsE,CAAC,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,oDAAoD,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAe,EAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5D,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,yCAAyC,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,eAAe;QACf,MAAM,SAAS,GAAG,IAAA,+BAAoB,EAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,IAAA,OAAE,EACA,yEAAyE,QAAQ,8DAA8D,CAChJ,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,mFAAmF,QAAQ,mDAAmD,CAC/I,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,QAA0B,EAAE,MAAc;IACtE,MAAM,UAAU,GAAG,MAAM;SACtB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,uDAAuD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,wEAAwE;IACxE,MAAM,mBAAmB,GAAG,IAAA,2BAAmB,EAAC,QAAQ,CAAC,CAAC;IAE1D,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAsB,mBAAmB;SACvD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,IAAI,EAAE,CAAC,CAAC,IAAI;KACb,CAAC,CAAC,CAAC;IAEN,IAAI,OAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,GAAG,IAAA,qCAAuB,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,GAAI,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAA,cAAS,EAAC,8BAA8B,CAAC,CAAC,CAAC;IACvD,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,2EAA2E;IAC3E,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAA,sCAAc,GAAE,CAAC;IACrC,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,kFAAkF;YAChF,6EAA6E,CAChF,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,mCAAoB,GAAE,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,IAAA,mCAAkB,EAAC,SAAS,CAAC,CAAC;IAExD,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,oEAAoE,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC;IAEjE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,sEAAsE,CAAC,CAAC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,oDAAoD,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAe,EAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5D,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,yCAAyC,CAAC,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,8BAA8B,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAA,+BAAoB,EAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QACjF,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CACT,IAAA,OAAE,EACA,2EAA2E,QAAQ,gEAAgE,CACpJ,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,mFAAmF,QAAQ,mDAAmD,CAC/I,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAA0B;IACxD,MAAM,aAAa,GAAG,IAAA,gCAAqB,EAAC,QAAQ,CAAC,CAAC;IAEtD,iEAAiE;IACjE,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,UAAU,GAAG,IAAA,2BAAmB,EAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEzE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,uCAAuC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mCAAmC,QAAQ,0BAA0B,CAAC,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,8EAA8E;IAC9E,yDAAyD;IACzD,MAAM,WAAW,GAAG,IAAA,sCAAc,GAAE,CAAC;IACrC,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzB,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,kCAAkC,QAAQ,8BAA8B,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mCAAmC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,iFAAiF;YAC/E,kFAAkF;YAClF,yDAAyD,CAC5D,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,mCAAoB,GAAE,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,IAAA,mCAAkB,EAAC,SAAS,CAAC,CAAC;IAExD,8EAA8E;IAC9E,8DAA8D;IAC9D,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,kCAAkC,QAAQ,8BAA8B,CAAC,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EACF,qGAAqG,CACtG,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC;IACjE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EAAC,kFAAkF,CAAC,CACzF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,gEAAgE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAyB,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEzE,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,uCAAuC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mCAAmC,QAAQ,0BAA0B,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,OAAE,EAAC,kCAAkC,MAAM,CAAC,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EAAC,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,uDAAuD,CAAC,CAC3F,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,gCAAgC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,CAAC,GAAG,CACT,IAAA,QAAG,EACD,2FAA2F,CAC5F,CACF,CAAC;QACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,QAAiB;IACvC,MAAM,IAAI,GAAG,QAAQ,IAAI,YAAY,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,IAAA,cAAS,EAAC,QAAQ,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,+BAA+B,IAAI,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,+BAA+B,IAAI,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,+BAA+B,IAAI,wBAAwB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,+BAA+B,IAAI,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAA,cAAS,EAAC,UAAU,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,QAAG,EAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CACT,KAAK,IAAA,UAAK,EAAC,WAAW,EAAE,SAAS,CAAC,0DAA0D,CAC7F,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,IAAA,UAAK,EAAC,OAAO,EAAE,SAAS,CAAC,wDAAwD,CACvF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,UAAK,EAAC,SAAS,EAAE,SAAS,CAAC,mCAAmC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAA,QAAG,EAAC,qDAAqD,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,IAAA,QAAG,EAAC,kEAAkE,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,qBAAqB,CAAC,IAAc;IACxD,MAAM,IAAA,WAAM,GAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,IAAA,WAAM,EAAC,sBAAsB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,IAAA,0BAAU,EAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,cAAc,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,uEAAuE,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,cAAc,EAAE,CAAC;QACjB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,+CAAuB,EAAC,WAAW,CAA4B,CAAC;IACjF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,qBAAqB,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE9B,IAAI,IAAA,0BAAU,EAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACrC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,IAAI,IAAA,0BAAU,EAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,6BAAa,EAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,SAAS,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,mDAAmD,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAvDD,sDAuDC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Pool State Renderer (CLI)
3
+ *
4
+ * Renders the pool context section appended to `ccs cliproxy quota` per provider:
5
+ * - routing mode line (pool on/off, strategy, session affinity)
6
+ * - effective drain order (Phase 4 resolver)
7
+ * - per-account state: available / cooling-until-<time> / paused
8
+ *
9
+ * ASCII only. No color is required for correctness; color is applied via the ui
10
+ * helpers, which already degrade to plain text under NO_COLOR / non-TTY.
11
+ */
12
+ import { type PoolAccountState, type PoolRoutingSettings, type PoolDrainOrderMode } from '../../cliproxy/accounts/pool-state';
13
+ import type { CLIProxyProvider } from '../../cliproxy/types';
14
+ /**
15
+ * Read pool routing settings from the unified config. Pool routing, when on,
16
+ * uses fill-first + session affinity regardless of stored routing values, so the
17
+ * effective routing shown reflects the pool defaults in that case.
18
+ */
19
+ export declare function readPoolRoutingSettings(): PoolRoutingSettings;
20
+ /** Format an epoch-ms reset time as a short relative + clock label. */
21
+ export declare function formatCooldownReset(until: number, now: number): string;
22
+ /**
23
+ * Human label + tone for a single account state. The three states map to
24
+ * distinct client failure modes, so they are labelled differently on purpose.
25
+ */
26
+ export declare function describeAccountState(account: PoolAccountState, now: number): {
27
+ label: string;
28
+ tone: 'available' | 'cooling' | 'paused';
29
+ };
30
+ export declare function modeLabel(mode: PoolDrainOrderMode): string;
31
+ /**
32
+ * Render the pool context section for one provider. Returns silently (renders
33
+ * nothing) when the provider has no accounts, so quota output stays clean.
34
+ *
35
+ * Async because it folds in live in-proxy 429 cooldowns (the real session-hop
36
+ * mechanism when pool routing is ON) via a single bounded management API read;
37
+ * that read degrades silently when the proxy is stopped, remote, or older.
38
+ */
39
+ export declare function renderProviderPoolSection(provider: CLIProxyProvider, settings: PoolRoutingSettings, now?: number): Promise<void>;
40
+ //# sourceMappingURL=pool-state-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-state-renderer.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/pool-state-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,oCAAoC,CAAC;AAO5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,mBAAmB,CAwB7D;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBtE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;CAAE,CAoB7D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAU1D;AAiED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,mBAAmB,EAC7B,GAAG,GAAE,MAAmB,GACvB,OAAO,CAAC,IAAI,CAAC,CAyEf"}