@kaitranntt/ccs 8.1.4 → 8.2.0-dev.10

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 (493) hide show
  1. package/README.md +12 -0
  2. package/config/base-claude.settings.json +1 -5
  3. package/config/base-kiro.settings.json +4 -4
  4. package/config/base-qoder.settings.json +10 -0
  5. package/dist/api/services/cliproxy-profile-bridge.d.ts.map +1 -1
  6. package/dist/api/services/cliproxy-profile-bridge.js +6 -0
  7. package/dist/api/services/cliproxy-profile-bridge.js.map +1 -1
  8. package/dist/api/services/profile-writer.d.ts.map +1 -1
  9. package/dist/api/services/profile-writer.js +18 -8
  10. package/dist/api/services/profile-writer.js.map +1 -1
  11. package/dist/auth/commands/create-command.d.ts.map +1 -1
  12. package/dist/auth/commands/create-command.js +11 -0
  13. package/dist/auth/commands/create-command.js.map +1 -1
  14. package/dist/channels/official-channels-runtime.js +1 -1
  15. package/dist/channels/official-channels-runtime.js.map +1 -1
  16. package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts +41 -0
  17. package/dist/cliproxy/accounts/account-safety-cross-lane.d.ts.map +1 -0
  18. package/dist/cliproxy/accounts/account-safety-cross-lane.js +177 -0
  19. package/dist/cliproxy/accounts/account-safety-cross-lane.js.map +1 -0
  20. package/dist/cliproxy/accounts/account-safety.d.ts +29 -1
  21. package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
  22. package/dist/cliproxy/accounts/account-safety.js +41 -7
  23. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  24. package/dist/cliproxy/accounts/drain-order.d.ts +277 -0
  25. package/dist/cliproxy/accounts/drain-order.d.ts.map +1 -0
  26. package/dist/cliproxy/accounts/drain-order.js +575 -0
  27. package/dist/cliproxy/accounts/drain-order.js.map +1 -0
  28. package/dist/cliproxy/accounts/pool-state.d.ts +132 -0
  29. package/dist/cliproxy/accounts/pool-state.d.ts.map +1 -0
  30. package/dist/cliproxy/accounts/pool-state.js +201 -0
  31. package/dist/cliproxy/accounts/pool-state.js.map +1 -0
  32. package/dist/cliproxy/accounts/registry.d.ts +17 -1
  33. package/dist/cliproxy/accounts/registry.d.ts.map +1 -1
  34. package/dist/cliproxy/accounts/registry.js +58 -5
  35. package/dist/cliproxy/accounts/registry.js.map +1 -1
  36. package/dist/cliproxy/accounts/types.d.ts +20 -0
  37. package/dist/cliproxy/accounts/types.d.ts.map +1 -1
  38. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js +1 -1
  39. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js.map +1 -1
  40. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
  41. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +88 -11
  42. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
  43. package/dist/cliproxy/auth/auth-types.d.ts +2 -0
  44. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  45. package/dist/cliproxy/auth/auth-types.js +7 -0
  46. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  47. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  48. package/dist/cliproxy/auth/oauth-handler.js +48 -10
  49. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  50. package/dist/cliproxy/auth/oauth-trace/redactor.d.ts.map +1 -1
  51. package/dist/cliproxy/auth/oauth-trace/redactor.js +1 -0
  52. package/dist/cliproxy/auth/oauth-trace/redactor.js.map +1 -1
  53. package/dist/cliproxy/auth/oauth-trace/trace-recorder.js +2 -2
  54. package/dist/cliproxy/auth/oauth-trace/trace-recorder.js.map +1 -1
  55. package/dist/cliproxy/binary/version-checker.d.ts +4 -2
  56. package/dist/cliproxy/binary/version-checker.d.ts.map +1 -1
  57. package/dist/cliproxy/binary/version-checker.js +30 -20
  58. package/dist/cliproxy/binary/version-checker.js.map +1 -1
  59. package/dist/cliproxy/claude-shadow-warning.d.ts +39 -0
  60. package/dist/cliproxy/claude-shadow-warning.d.ts.map +1 -0
  61. package/dist/cliproxy/claude-shadow-warning.js +187 -0
  62. package/dist/cliproxy/claude-shadow-warning.js.map +1 -0
  63. package/dist/cliproxy/config/base-config-loader.d.ts +6 -5
  64. package/dist/cliproxy/config/base-config-loader.d.ts.map +1 -1
  65. package/dist/cliproxy/config/base-config-loader.js +19 -12
  66. package/dist/cliproxy/config/base-config-loader.js.map +1 -1
  67. package/dist/cliproxy/config/env-builder.d.ts +3 -0
  68. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  69. package/dist/cliproxy/config/env-builder.js +158 -20
  70. package/dist/cliproxy/config/env-builder.js.map +1 -1
  71. package/dist/cliproxy/config/generator.d.ts +2 -1
  72. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  73. package/dist/cliproxy/config/generator.js +66 -9
  74. package/dist/cliproxy/config/generator.js.map +1 -1
  75. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  76. package/dist/cliproxy/config/thinking-config.js +2 -0
  77. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  78. package/dist/cliproxy/executor/arg-parser.d.ts +8 -5
  79. package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -1
  80. package/dist/cliproxy/executor/arg-parser.js +21 -10
  81. package/dist/cliproxy/executor/arg-parser.js.map +1 -1
  82. package/dist/cliproxy/executor/auth-coordinator.d.ts +4 -0
  83. package/dist/cliproxy/executor/auth-coordinator.d.ts.map +1 -1
  84. package/dist/cliproxy/executor/auth-coordinator.js +5 -1
  85. package/dist/cliproxy/executor/auth-coordinator.js.map +1 -1
  86. package/dist/cliproxy/executor/browser-launch-setup.d.ts +1 -0
  87. package/dist/cliproxy/executor/browser-launch-setup.d.ts.map +1 -1
  88. package/dist/cliproxy/executor/browser-launch-setup.js +4 -3
  89. package/dist/cliproxy/executor/browser-launch-setup.js.map +1 -1
  90. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  91. package/dist/cliproxy/executor/index.js +35 -6
  92. package/dist/cliproxy/executor/index.js.map +1 -1
  93. package/dist/cliproxy/executor/proxy-resolver.d.ts +15 -9
  94. package/dist/cliproxy/executor/proxy-resolver.d.ts.map +1 -1
  95. package/dist/cliproxy/executor/proxy-resolver.js +14 -5
  96. package/dist/cliproxy/executor/proxy-resolver.js.map +1 -1
  97. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  98. package/dist/cliproxy/model-catalog.js +94 -2
  99. package/dist/cliproxy/model-catalog.js.map +1 -1
  100. package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
  101. package/dist/cliproxy/provider-capabilities.js +12 -0
  102. package/dist/cliproxy/provider-capabilities.js.map +1 -1
  103. package/dist/cliproxy/proxy/proxy-config-resolver.d.ts.map +1 -1
  104. package/dist/cliproxy/proxy/proxy-config-resolver.js +11 -1
  105. package/dist/cliproxy/proxy/proxy-config-resolver.js.map +1 -1
  106. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  107. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +160 -8
  108. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  109. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts +14 -0
  110. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -0
  111. package/dist/cliproxy/proxy/upstream-response-timeout.js +79 -0
  112. package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -0
  113. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts +9 -0
  114. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  115. package/dist/cliproxy/quota/quota-fetcher-claude.js +53 -16
  116. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  117. package/dist/cliproxy/quota/quota-fetcher-codex.d.ts +2 -2
  118. package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
  119. package/dist/cliproxy/quota/quota-fetcher-codex.js +2 -4
  120. package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
  121. package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
  122. package/dist/cliproxy/quota/quota-fetcher.js +4 -0
  123. package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
  124. package/dist/cliproxy/quota/quota-label-sanitizer.d.ts +10 -0
  125. package/dist/cliproxy/quota/quota-label-sanitizer.d.ts.map +1 -0
  126. package/dist/cliproxy/quota/quota-label-sanitizer.js +31 -0
  127. package/dist/cliproxy/quota/quota-label-sanitizer.js.map +1 -0
  128. package/dist/cliproxy/quota/quota-manager.d.ts +7 -0
  129. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  130. package/dist/cliproxy/quota/quota-manager.js +51 -2
  131. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  132. package/dist/cliproxy/routing/pool-onboarding-hint.d.ts +95 -0
  133. package/dist/cliproxy/routing/pool-onboarding-hint.d.ts.map +1 -0
  134. package/dist/cliproxy/routing/pool-onboarding-hint.js +172 -0
  135. package/dist/cliproxy/routing/pool-onboarding-hint.js.map +1 -0
  136. package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts +50 -0
  137. package/dist/cliproxy/routing/pool-opt-in-prompt.d.ts.map +1 -0
  138. package/dist/cliproxy/routing/pool-opt-in-prompt.js +232 -0
  139. package/dist/cliproxy/routing/pool-opt-in-prompt.js.map +1 -0
  140. package/dist/cliproxy/routing/routing-strategy-http.d.ts.map +1 -1
  141. package/dist/cliproxy/routing/routing-strategy-http.js +35 -26
  142. package/dist/cliproxy/routing/routing-strategy-http.js.map +1 -1
  143. package/dist/cliproxy/routing/routing-strategy.d.ts +132 -0
  144. package/dist/cliproxy/routing/routing-strategy.d.ts.map +1 -1
  145. package/dist/cliproxy/routing/routing-strategy.js +342 -5
  146. package/dist/cliproxy/routing/routing-strategy.js.map +1 -1
  147. package/dist/cliproxy/services/catalog-cache.d.ts.map +1 -1
  148. package/dist/cliproxy/services/catalog-cache.js +5 -3
  149. package/dist/cliproxy/services/catalog-cache.js.map +1 -1
  150. package/dist/cliproxy/services/stats-fetcher.d.ts +13 -0
  151. package/dist/cliproxy/services/stats-fetcher.d.ts.map +1 -1
  152. package/dist/cliproxy/services/stats-fetcher.js +25 -1
  153. package/dist/cliproxy/services/stats-fetcher.js.map +1 -1
  154. package/dist/cliproxy/types/provider-types.d.ts +1 -1
  155. package/dist/cliproxy/types/provider-types.d.ts.map +1 -1
  156. package/dist/cliproxy/types/provider-types.js +1 -0
  157. package/dist/cliproxy/types/provider-types.js.map +1 -1
  158. package/dist/codex-auth/codex-config-symlink.js +21 -4
  159. package/dist/codex-auth/codex-config-symlink.js.map +1 -1
  160. package/dist/codex-auth/commands/import-default-command.d.ts +1 -1
  161. package/dist/codex-auth/commands/import-default-command.d.ts.map +1 -1
  162. package/dist/codex-auth/commands/import-default-command.js +12 -25
  163. package/dist/codex-auth/commands/import-default-command.js.map +1 -1
  164. package/dist/commands/api-command/help.js +1 -1
  165. package/dist/commands/api-command/help.js.map +1 -1
  166. package/dist/commands/bar/help-subcommand.d.ts +2 -0
  167. package/dist/commands/bar/help-subcommand.d.ts.map +1 -0
  168. package/dist/commands/bar/help-subcommand.js +63 -0
  169. package/dist/commands/bar/help-subcommand.js.map +1 -0
  170. package/dist/commands/bar/index.d.ts +8 -0
  171. package/dist/commands/bar/index.d.ts.map +1 -0
  172. package/dist/commands/bar/index.js +78 -0
  173. package/dist/commands/bar/index.js.map +1 -0
  174. package/dist/commands/bar/install-subcommand.d.ts +92 -0
  175. package/dist/commands/bar/install-subcommand.d.ts.map +1 -0
  176. package/dist/commands/bar/install-subcommand.js +605 -0
  177. package/dist/commands/bar/install-subcommand.js.map +1 -0
  178. package/dist/commands/bar/launch-subcommand.d.ts +64 -0
  179. package/dist/commands/bar/launch-subcommand.d.ts.map +1 -0
  180. package/dist/commands/bar/launch-subcommand.js +236 -0
  181. package/dist/commands/bar/launch-subcommand.js.map +1 -0
  182. package/dist/commands/bar/uninstall-subcommand.d.ts +13 -0
  183. package/dist/commands/bar/uninstall-subcommand.d.ts.map +1 -0
  184. package/dist/commands/bar/uninstall-subcommand.js +78 -0
  185. package/dist/commands/bar/uninstall-subcommand.js.map +1 -0
  186. package/dist/commands/bar/version-subcommand.d.ts +8 -0
  187. package/dist/commands/bar/version-subcommand.d.ts.map +1 -0
  188. package/dist/commands/bar/version-subcommand.js +62 -0
  189. package/dist/commands/bar/version-subcommand.js.map +1 -0
  190. package/dist/commands/cleanup-command.d.ts.map +1 -1
  191. package/dist/commands/cleanup-command.js +99 -51
  192. package/dist/commands/cleanup-command.js.map +1 -1
  193. package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
  194. package/dist/commands/cliproxy/help-subcommand.js +20 -1
  195. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  196. package/dist/commands/cliproxy/index.d.ts.map +1 -1
  197. package/dist/commands/cliproxy/index.js +20 -0
  198. package/dist/commands/cliproxy/index.js.map +1 -1
  199. package/dist/commands/cliproxy/order-subcommand.d.ts +16 -0
  200. package/dist/commands/cliproxy/order-subcommand.d.ts.map +1 -0
  201. package/dist/commands/cliproxy/order-subcommand.js +520 -0
  202. package/dist/commands/cliproxy/order-subcommand.js.map +1 -0
  203. package/dist/commands/cliproxy/pool-state-renderer.d.ts +40 -0
  204. package/dist/commands/cliproxy/pool-state-renderer.d.ts.map +1 -0
  205. package/dist/commands/cliproxy/pool-state-renderer.js +220 -0
  206. package/dist/commands/cliproxy/pool-state-renderer.js.map +1 -0
  207. package/dist/commands/cliproxy/pool-subcommand.d.ts +10 -0
  208. package/dist/commands/cliproxy/pool-subcommand.d.ts.map +1 -0
  209. package/dist/commands/cliproxy/pool-subcommand.js +112 -0
  210. package/dist/commands/cliproxy/pool-subcommand.js.map +1 -0
  211. package/dist/commands/cliproxy/quota-subcommand.d.ts +10 -1
  212. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  213. package/dist/commands/cliproxy/quota-subcommand.js +22 -6
  214. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  215. package/dist/commands/cliproxy/routing-subcommand.d.ts.map +1 -1
  216. package/dist/commands/cliproxy/routing-subcommand.js +19 -0
  217. package/dist/commands/cliproxy/routing-subcommand.js.map +1 -1
  218. package/dist/commands/command-catalog.d.ts.map +1 -1
  219. package/dist/commands/command-catalog.js +8 -0
  220. package/dist/commands/command-catalog.js.map +1 -1
  221. package/dist/commands/config-channels-command.d.ts +1 -4
  222. package/dist/commands/config-channels-command.d.ts.map +1 -1
  223. package/dist/commands/config-channels-command.js +20 -24
  224. package/dist/commands/config-channels-command.js.map +1 -1
  225. package/dist/commands/help-command.d.ts.map +1 -1
  226. package/dist/commands/help-command.js +6 -1
  227. package/dist/commands/help-command.js.map +1 -1
  228. package/dist/commands/root-command-router.d.ts.map +1 -1
  229. package/dist/commands/root-command-router.js +7 -0
  230. package/dist/commands/root-command-router.js.map +1 -1
  231. package/dist/config/loader/yaml-serializer.d.ts.map +1 -1
  232. package/dist/config/loader/yaml-serializer.js +13 -0
  233. package/dist/config/loader/yaml-serializer.js.map +1 -1
  234. package/dist/config/reserved-names.d.ts +1 -1
  235. package/dist/config/reserved-names.d.ts.map +1 -1
  236. package/dist/config/reserved-names.js +1 -0
  237. package/dist/config/reserved-names.js.map +1 -1
  238. package/dist/config/schemas/cliproxy.d.ts +37 -0
  239. package/dist/config/schemas/cliproxy.d.ts.map +1 -1
  240. package/dist/config/schemas/proxy-server.js +1 -1
  241. package/dist/config/schemas/quota.d.ts +26 -2
  242. package/dist/config/schemas/quota.d.ts.map +1 -1
  243. package/dist/config/schemas/quota.js +20 -1
  244. package/dist/config/schemas/quota.js.map +1 -1
  245. package/dist/config/unified-config-loader.d.ts.map +1 -1
  246. package/dist/config/unified-config-loader.js +3 -0
  247. package/dist/config/unified-config-loader.js.map +1 -1
  248. package/dist/cursor/cursor-daemon-auth.d.ts +2 -0
  249. package/dist/cursor/cursor-daemon-auth.d.ts.map +1 -0
  250. package/dist/cursor/cursor-daemon-auth.js +49 -0
  251. package/dist/cursor/cursor-daemon-auth.js.map +1 -0
  252. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  253. package/dist/cursor/cursor-daemon-entry.js +44 -0
  254. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  255. package/dist/cursor/cursor-daemon.d.ts +2 -1
  256. package/dist/cursor/cursor-daemon.d.ts.map +1 -1
  257. package/dist/cursor/cursor-daemon.js +21 -5
  258. package/dist/cursor/cursor-daemon.js.map +1 -1
  259. package/dist/cursor/cursor-models.d.ts.map +1 -1
  260. package/dist/cursor/cursor-models.js +2 -1
  261. package/dist/cursor/cursor-models.js.map +1 -1
  262. package/dist/cursor/cursor-profile-executor.d.ts +1 -1
  263. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  264. package/dist/cursor/cursor-profile-executor.js +7 -4
  265. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  266. package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -1
  267. package/dist/cursor/cursor-runtime-probe.js +4 -2
  268. package/dist/cursor/cursor-runtime-probe.js.map +1 -1
  269. package/dist/cursor/types.d.ts +1 -0
  270. package/dist/cursor/types.d.ts.map +1 -1
  271. package/dist/dispatcher/flows/account-flow.d.ts.map +1 -1
  272. package/dist/dispatcher/flows/account-flow.js +9 -0
  273. package/dist/dispatcher/flows/account-flow.js.map +1 -1
  274. package/dist/dispatcher/profile-resolver.d.ts +16 -0
  275. package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
  276. package/dist/dispatcher/profile-resolver.js +49 -3
  277. package/dist/dispatcher/profile-resolver.js.map +1 -1
  278. package/dist/docker/docker-key-rotation.d.ts +2 -0
  279. package/dist/docker/docker-key-rotation.d.ts.map +1 -1
  280. package/dist/docker/docker-key-rotation.js +9 -1
  281. package/dist/docker/docker-key-rotation.js.map +1 -1
  282. package/dist/glmt/sse-parser.d.ts +1 -0
  283. package/dist/glmt/sse-parser.d.ts.map +1 -1
  284. package/dist/glmt/sse-parser.js +13 -1
  285. package/dist/glmt/sse-parser.js.map +1 -1
  286. package/dist/management/doctor.d.ts.map +1 -1
  287. package/dist/management/doctor.js +10 -0
  288. package/dist/management/doctor.js.map +1 -1
  289. package/dist/management/shared-manager.d.ts.map +1 -1
  290. package/dist/management/shared-manager.js +9 -1
  291. package/dist/management/shared-manager.js.map +1 -1
  292. package/dist/proxy/profile-router.d.ts +16 -0
  293. package/dist/proxy/profile-router.d.ts.map +1 -1
  294. package/dist/proxy/profile-router.js +7 -2
  295. package/dist/proxy/profile-router.js.map +1 -1
  296. package/dist/proxy/proxy-daemon.js +1 -1
  297. package/dist/proxy/proxy-daemon.js.map +1 -1
  298. package/dist/proxy/server/http-helpers.d.ts +5 -0
  299. package/dist/proxy/server/http-helpers.d.ts.map +1 -1
  300. package/dist/proxy/server/http-helpers.js +40 -1
  301. package/dist/proxy/server/http-helpers.js.map +1 -1
  302. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  303. package/dist/proxy/server/messages-route.js +252 -17
  304. package/dist/proxy/server/messages-route.js.map +1 -1
  305. package/dist/proxy/transformers/request-transformer.d.ts.map +1 -1
  306. package/dist/proxy/transformers/request-transformer.js +9 -2
  307. package/dist/proxy/transformers/request-transformer.js.map +1 -1
  308. package/dist/proxy/upstream-url.d.ts +42 -2
  309. package/dist/proxy/upstream-url.d.ts.map +1 -1
  310. package/dist/proxy/upstream-url.js +83 -4
  311. package/dist/proxy/upstream-url.js.map +1 -1
  312. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  313. package/dist/shared/claude-extension-setup.js +2 -1
  314. package/dist/shared/claude-extension-setup.js.map +1 -1
  315. package/dist/shared/cliproxy-model-routing.d.ts.map +1 -1
  316. package/dist/shared/cliproxy-model-routing.js +1 -0
  317. package/dist/shared/cliproxy-model-routing.js.map +1 -1
  318. package/dist/shared/stale-codex-translator-settings.d.ts.map +1 -1
  319. package/dist/shared/stale-codex-translator-settings.js +48 -9
  320. package/dist/shared/stale-codex-translator-settings.js.map +1 -1
  321. package/dist/targets/codex-adapter.d.ts.map +1 -1
  322. package/dist/targets/codex-adapter.js +10 -8
  323. package/dist/targets/codex-adapter.js.map +1 -1
  324. package/dist/targets/target-metadata.js +1 -1
  325. package/dist/targets/target-metadata.js.map +1 -1
  326. package/dist/ui/assets/{Trans-DyZQZ3e2.js → Trans-RG_sMDEu.js} +1 -1
  327. package/dist/ui/assets/accounts-yTXURc-q.js +1 -0
  328. package/dist/ui/assets/{alert-dialog-DWHL-dqd.js → alert-dialog-DjvPgzFs.js} +1 -1
  329. package/dist/ui/assets/api-Ck1dtNEM.js +4 -0
  330. package/dist/ui/assets/{auth-section-B4o90dwz.js → auth-section-DBnY_LPz.js} +1 -1
  331. package/dist/ui/assets/{backups-section-1AsdSIJO.js → backups-section-Ci-uL4Of.js} +1 -1
  332. package/dist/ui/assets/{channels-CU4Zdsc_.js → channels-BeS9O5q0.js} +1 -1
  333. package/dist/ui/assets/{checkbox-CbCKGH8I.js → checkbox-DFeFDZBp.js} +1 -1
  334. package/dist/ui/assets/claude-extension-DS5qN19Z.js +1 -0
  335. package/dist/ui/assets/cliproxy-D7HJH4mZ.js +4 -0
  336. package/dist/ui/assets/{cliproxy-ai-providers-Dr4L5NRY.js → cliproxy-ai-providers-oJQZXrtc.js} +6 -6
  337. package/dist/ui/assets/cliproxy-control-panel-2mRPEcRj.js +1 -0
  338. package/dist/ui/assets/{codex-0HdbW8NR.js → codex-D0AUQ6jA.js} +4 -4
  339. package/dist/ui/assets/{confirm-dialog-b5Dahgnk.js → confirm-dialog-B37-CVuq.js} +1 -1
  340. package/dist/ui/assets/{copilot-B1Ojakbt.js → copilot-KaaW-mko.js} +2 -2
  341. package/dist/ui/assets/{cursor-PUtNVPx1.js → cursor-BKiTgYi5.js} +1 -1
  342. package/dist/ui/assets/{droid-S2gclncb.js → droid-DHdqGnFw.js} +2 -2
  343. package/dist/ui/assets/{globalenv-section-7wKSmNSG.js → globalenv-section-SfZO97nU.js} +1 -1
  344. package/dist/ui/assets/health-CSRS9O0D.js +1 -0
  345. package/dist/ui/assets/icons-DSLG1YsC.js +1 -0
  346. package/dist/ui/assets/index-CGgavq2X.js +56 -0
  347. package/dist/ui/assets/{index-BWboJia4.js → index-ChTYEBCZ.js} +1 -1
  348. package/dist/ui/assets/index-Cu_F55_O.js +1 -0
  349. package/dist/ui/assets/{index-Coc3_ABK.js → index-DJ66NrBH.js} +1 -1
  350. package/dist/ui/assets/index-DWUuSBUe.js +1 -0
  351. package/dist/ui/assets/{index-CxvNNHgE.js → index-DycwEe96.js} +1 -1
  352. package/dist/ui/assets/index-DzFlVVV3.css +1 -0
  353. package/dist/ui/assets/{index-Cx0dmbiQ.js → index-iQuEEGbH.js} +1 -1
  354. package/dist/ui/assets/logs-tiZ_51mo.js +1 -0
  355. package/dist/ui/assets/{masked-input-4L9CIZGb.js → masked-input-D9FVoeMA.js} +1 -1
  356. package/dist/ui/assets/providers/qoder.svg +1 -0
  357. package/dist/ui/assets/proxy-status-widget-2k26d8pS.js +1 -0
  358. package/dist/ui/assets/{raw-json-settings-editor-panel-DXh8c8rA.js → raw-json-settings-editor-panel-CguBh93H.js} +1 -1
  359. package/dist/ui/assets/{searchable-select-CtvEQrMo.js → searchable-select-C4wShshD.js} +1 -1
  360. package/dist/ui/assets/{separator-E0ISp1SN.js → separator-mvGlDdEW.js} +1 -1
  361. package/dist/ui/assets/{shared-BeYwHeNS.js → shared-Ck0yAwbs.js} +2 -2
  362. package/dist/ui/assets/{table-BBslZvNP.js → table-DrUJOxKL.js} +1 -1
  363. package/dist/ui/assets/updates-BVHBFcq8.js +1 -0
  364. package/dist/ui/assets/{use-accounts-BdalFsdY.js → use-accounts-DLtuaniS.js} +1 -1
  365. package/dist/ui/index.html +3 -3
  366. package/dist/utils/browser/browser-settings.d.ts.map +1 -1
  367. package/dist/utils/browser/browser-settings.js +13 -3
  368. package/dist/utils/browser/browser-settings.js.map +1 -1
  369. package/dist/utils/browser/mcp-installer.d.ts.map +1 -1
  370. package/dist/utils/browser/mcp-installer.js +5 -34
  371. package/dist/utils/browser/mcp-installer.js.map +1 -1
  372. package/dist/utils/claude-user-config-lock.d.ts +9 -0
  373. package/dist/utils/claude-user-config-lock.d.ts.map +1 -0
  374. package/dist/utils/claude-user-config-lock.js +96 -0
  375. package/dist/utils/claude-user-config-lock.js.map +1 -0
  376. package/dist/utils/glmt-deprecation.d.ts.map +1 -1
  377. package/dist/utils/glmt-deprecation.js +1 -3
  378. package/dist/utils/glmt-deprecation.js.map +1 -1
  379. package/dist/utils/image-analysis/mcp-installer.d.ts.map +1 -1
  380. package/dist/utils/image-analysis/mcp-installer.js +5 -34
  381. package/dist/utils/image-analysis/mcp-installer.js.map +1 -1
  382. package/dist/utils/retry-strategy.js +1 -1
  383. package/dist/utils/retry-strategy.js.map +1 -1
  384. package/dist/utils/websearch/mcp-installer.d.ts.map +1 -1
  385. package/dist/utils/websearch/mcp-installer.js +112 -78
  386. package/dist/utils/websearch/mcp-installer.js.map +1 -1
  387. package/dist/web-server/index.d.ts.map +1 -1
  388. package/dist/web-server/index.js +0 -9
  389. package/dist/web-server/index.js.map +1 -1
  390. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  391. package/dist/web-server/middleware/auth-middleware.js +26 -4
  392. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  393. package/dist/web-server/model-pricing.d.ts +18 -2
  394. package/dist/web-server/model-pricing.d.ts.map +1 -1
  395. package/dist/web-server/model-pricing.js +86 -3
  396. package/dist/web-server/model-pricing.js.map +1 -1
  397. package/dist/web-server/models-dev/pricing-resolver.js +14 -14
  398. package/dist/web-server/models-dev/pricing-resolver.js.map +1 -1
  399. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  400. package/dist/web-server/routes/account-routes.js +116 -0
  401. package/dist/web-server/routes/account-routes.js.map +1 -1
  402. package/dist/web-server/routes/bar-routes.d.ts +149 -0
  403. package/dist/web-server/routes/bar-routes.d.ts.map +1 -0
  404. package/dist/web-server/routes/bar-routes.js +415 -0
  405. package/dist/web-server/routes/bar-routes.js.map +1 -0
  406. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +10 -0
  407. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  408. package/dist/web-server/routes/cliproxy-auth-routes.js +45 -13
  409. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  410. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  411. package/dist/web-server/routes/cliproxy-local-proxy.js +25 -8
  412. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  413. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  414. package/dist/web-server/routes/cursor-routes.js +6 -1
  415. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  416. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  417. package/dist/web-server/routes/image-analysis-routes.js +7 -0
  418. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  419. package/dist/web-server/routes/index.d.ts.map +1 -1
  420. package/dist/web-server/routes/index.js +18 -0
  421. package/dist/web-server/routes/index.js.map +1 -1
  422. package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
  423. package/dist/web-server/routes/profile-routes.js +6 -1
  424. package/dist/web-server/routes/profile-routes.js.map +1 -1
  425. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  426. package/dist/web-server/routes/settings-routes.js +10 -1
  427. package/dist/web-server/routes/settings-routes.js.map +1 -1
  428. package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -1
  429. package/dist/web-server/services/claude-extension-settings-service.js +5 -1
  430. package/dist/web-server/services/claude-extension-settings-service.js.map +1 -1
  431. package/dist/web-server/usage/bar-analytics.d.ts +101 -0
  432. package/dist/web-server/usage/bar-analytics.d.ts.map +1 -0
  433. package/dist/web-server/usage/bar-analytics.js +315 -0
  434. package/dist/web-server/usage/bar-analytics.js.map +1 -0
  435. package/dist/web-server/usage/claude-native-credentials.d.ts +56 -0
  436. package/dist/web-server/usage/claude-native-credentials.d.ts.map +1 -0
  437. package/dist/web-server/usage/claude-native-credentials.js +140 -0
  438. package/dist/web-server/usage/claude-native-credentials.js.map +1 -0
  439. package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts +24 -0
  440. package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts.map +1 -0
  441. package/dist/web-server/usage/cliproxy-snapshot-reader.js +82 -0
  442. package/dist/web-server/usage/cliproxy-snapshot-reader.js.map +1 -0
  443. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts +3 -2
  444. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -1
  445. package/dist/web-server/usage/cliproxy-usage-syncer.js +46 -13
  446. package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -1
  447. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts +9 -3
  448. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -1
  449. package/dist/web-server/usage/cliproxy-usage-transformer.js +133 -19
  450. package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -1
  451. package/dist/web-server/usage/codex-local-quota-collector.d.ts +74 -0
  452. package/dist/web-server/usage/codex-local-quota-collector.d.ts.map +1 -0
  453. package/dist/web-server/usage/codex-local-quota-collector.js +250 -0
  454. package/dist/web-server/usage/codex-local-quota-collector.js.map +1 -0
  455. package/dist/web-server/usage/codex-native-usage-collector.d.ts.map +1 -1
  456. package/dist/web-server/usage/codex-native-usage-collector.js +18 -2
  457. package/dist/web-server/usage/codex-native-usage-collector.js.map +1 -1
  458. package/dist/web-server/usage/data-aggregator.d.ts +11 -0
  459. package/dist/web-server/usage/data-aggregator.d.ts.map +1 -1
  460. package/dist/web-server/usage/data-aggregator.js +29 -1
  461. package/dist/web-server/usage/data-aggregator.js.map +1 -1
  462. package/dist/web-server/usage/native-quota-collector.d.ts +44 -0
  463. package/dist/web-server/usage/native-quota-collector.d.ts.map +1 -0
  464. package/dist/web-server/usage/native-quota-collector.js +378 -0
  465. package/dist/web-server/usage/native-quota-collector.js.map +1 -0
  466. package/dist/web-server/usage/profile-filter.d.ts +1 -1
  467. package/dist/web-server/usage/profile-filter.d.ts.map +1 -1
  468. package/dist/web-server/usage/profile-filter.js +6 -1
  469. package/dist/web-server/usage/profile-filter.js.map +1 -1
  470. package/dist/web-server/usage/types.d.ts +2 -0
  471. package/dist/web-server/usage/types.d.ts.map +1 -1
  472. package/lib/mcp/ccs-browser-server.cjs +31 -15
  473. package/package.json +1 -1
  474. package/scripts/completion/ccs.bash +0 -12
  475. package/scripts/completion/ccs.fish +0 -11
  476. package/scripts/completion/ccs.ps1 +0 -10
  477. package/scripts/completion/ccs.zsh +0 -13
  478. package/scripts/github/stable-release-issue-cleanup-lib.mjs +115 -0
  479. package/scripts/github/stable-release-issue-cleanup.mjs +134 -0
  480. package/dist/ui/assets/accounts-BPJltru3.js +0 -1
  481. package/dist/ui/assets/api-BxPN-zy4.js +0 -4
  482. package/dist/ui/assets/claude-extension-CWpjmIGt.js +0 -1
  483. package/dist/ui/assets/cliproxy-K6eBb5VO.js +0 -4
  484. package/dist/ui/assets/cliproxy-control-panel-Cz5r7kHP.js +0 -1
  485. package/dist/ui/assets/health-hMLN_gyw.js +0 -1
  486. package/dist/ui/assets/icons-DzKUh8vG.js +0 -1
  487. package/dist/ui/assets/index-BMoGhs28.css +0 -1
  488. package/dist/ui/assets/index-COt1pbk-.js +0 -1
  489. package/dist/ui/assets/index-CcGVqYOy.js +0 -56
  490. package/dist/ui/assets/index-DkR2KVhF.js +0 -1
  491. package/dist/ui/assets/logs-BRFVfyLc.js +0 -1
  492. package/dist/ui/assets/proxy-status-widget-s1UWOE23.js +0 -1
  493. package/dist/ui/assets/updates-CDrm903n.js +0 -1
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ /**
3
+ * Pool State Renderer (CLI)
4
+ *
5
+ * Renders the pool context section appended to `ccs cliproxy quota` per provider:
6
+ * - routing mode line (pool on/off, strategy, session affinity)
7
+ * - effective drain order (Phase 4 resolver)
8
+ * - per-account state: available / cooling-until-<time> / paused
9
+ *
10
+ * ASCII only. No color is required for correctness; color is applied via the ui
11
+ * helpers, which already degrade to plain text under NO_COLOR / non-TTY.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.renderProviderPoolSection = exports.modeLabel = exports.describeAccountState = exports.formatCooldownReset = exports.readPoolRoutingSettings = void 0;
15
+ const ui_1 = require("../../utils/ui");
16
+ const pool_state_1 = require("../../cliproxy/accounts/pool-state");
17
+ const routing_strategy_1 = require("../../cliproxy/routing/routing-strategy");
18
+ const config_loader_facade_1 = require("../../config/config-loader-facade");
19
+ /**
20
+ * Read pool routing settings from the unified config. Pool routing, when on,
21
+ * uses fill-first + session affinity regardless of stored routing values, so the
22
+ * effective routing shown reflects the pool defaults in that case.
23
+ */
24
+ function readPoolRoutingSettings() {
25
+ const config = (0, config_loader_facade_1.loadOrCreateUnifiedConfig)();
26
+ const poolEnabled = config.cliproxy?.pool_routing?.enabled === true;
27
+ const maxRetryCredentials = config.cliproxy?.pool_routing?.max_retry_credentials;
28
+ if (poolEnabled) {
29
+ // Pool routing overrides routing to fill-first + affinity 1h (see generator).
30
+ return {
31
+ poolEnabled: true,
32
+ strategy: 'fill-first',
33
+ sessionAffinityEnabled: true,
34
+ sessionAffinityTtl: '1h',
35
+ maxRetryCredentials,
36
+ };
37
+ }
38
+ const affinity = (0, routing_strategy_1.getConfiguredCliproxySessionAffinitySettings)();
39
+ return {
40
+ poolEnabled: false,
41
+ strategy: (0, routing_strategy_1.getConfiguredCliproxyRoutingStrategy)(),
42
+ sessionAffinityEnabled: affinity.enabled,
43
+ sessionAffinityTtl: affinity.ttl,
44
+ maxRetryCredentials,
45
+ };
46
+ }
47
+ exports.readPoolRoutingSettings = readPoolRoutingSettings;
48
+ /** Format an epoch-ms reset time as a short relative + clock label. */
49
+ function formatCooldownReset(until, now) {
50
+ const seconds = Math.max(0, Math.round((until - now) / 1000));
51
+ const relative = seconds <= 0
52
+ ? 'now'
53
+ : seconds < 60
54
+ ? `${seconds}s`
55
+ : seconds < 3600
56
+ ? `${Math.round(seconds / 60)}m`
57
+ : seconds < 86400
58
+ ? `${Math.round(seconds / 3600)}h`
59
+ : `${Math.round(seconds / 86400)}d`;
60
+ const clock = new Date(until).toLocaleTimeString(undefined, {
61
+ hour: '2-digit',
62
+ minute: '2-digit',
63
+ });
64
+ return `${relative} (${clock})`;
65
+ }
66
+ exports.formatCooldownReset = formatCooldownReset;
67
+ /**
68
+ * Human label + tone for a single account state. The three states map to
69
+ * distinct client failure modes, so they are labelled differently on purpose.
70
+ */
71
+ function describeAccountState(account, now) {
72
+ switch (account.state) {
73
+ case 'cooling': {
74
+ const reset = account.cooldownUntil !== undefined
75
+ ? formatCooldownReset(account.cooldownUntil, now)
76
+ : 'unknown';
77
+ const src = account.cooldownSource === 'memory' ? ' [in-process]' : '';
78
+ return { label: `cooling until ${reset}${src}`, tone: 'cooling' };
79
+ }
80
+ case 'paused':
81
+ // A pause can be manual (the user) OR automatic (ban detection,
82
+ // cross-provider isolation, an expired-but-not-restored quota cooldown).
83
+ // The classifier cannot tell which without a stored reason, so the label
84
+ // must not claim "manual". See pool-state.ts classifyAccount.
85
+ return { label: 'paused (manual or safety)', tone: 'paused' };
86
+ case 'available':
87
+ default:
88
+ return { label: 'available', tone: 'available' };
89
+ }
90
+ }
91
+ exports.describeAccountState = describeAccountState;
92
+ function modeLabel(mode) {
93
+ switch (mode) {
94
+ case 'manual':
95
+ return 'manual (--set)';
96
+ case 'tier':
97
+ return 'tier-derived (--by-tier)';
98
+ case 'file':
99
+ default:
100
+ return 'file order';
101
+ }
102
+ }
103
+ exports.modeLabel = modeLabel;
104
+ /**
105
+ * Render the drift warning. The honest copy depends on whether a stored order
106
+ * exists: in file mode there is no stored order (the user reset or never set
107
+ * one), so referencing a "stored order" or telling them to "re-apply" would be
108
+ * false. File-mode drift means residual on-disk priorities (e.g. left by a prior
109
+ * managed order) still steer the selector, and the fix is to clear them.
110
+ */
111
+ function renderDrainOrderDrift(provider, pool) {
112
+ if (!pool.drainOrder.hasDrift) {
113
+ return;
114
+ }
115
+ if (pool.drainOrder.mode === 'file') {
116
+ console.log(` ${(0, ui_1.warn)(`Drift: residual priorities from a previous managed order still steer the selector;\n` +
117
+ ` clear them with "ccs cliproxy accounts order ${provider} --reset" (or re-auth the accounts).`)}`);
118
+ return;
119
+ }
120
+ console.log(` ${(0, ui_1.warn)(`Drift: stored order does not match auth files; run "ccs cliproxy accounts order ${provider}" to inspect, then re-apply with --set/--by-tier.`)}`);
121
+ }
122
+ /**
123
+ * Render the honesty note about cooling visibility.
124
+ *
125
+ * - Pool OFF: cooling is disabled at the proxy (stock stability mode), so no
126
+ * account ever shows a quota cooldown here. State that plainly.
127
+ * - Pool ON but no live proxy reading available (proxy stopped/older binary, or
128
+ * the listing returned no cooling entries): the in-proxy 429 cooldowns that
129
+ * actually drive session hops are not visible, so say so rather than implying
130
+ * every account is healthy.
131
+ */
132
+ function renderCoolingNote(pool, settings) {
133
+ if (!settings.poolEnabled) {
134
+ const anyCooling = pool.states.some((s) => s.state === 'cooling');
135
+ if (!anyCooling) {
136
+ console.log((0, ui_1.dim)(' Note: cooling is off (stock stability mode); accounts never show a quota cooldown here.'));
137
+ }
138
+ return;
139
+ }
140
+ // Pool ON: only omit the caveat once we actually have live proxy-sourced
141
+ // cooling data to show. Otherwise the states reflect CCS-side checks only.
142
+ if (!(0, pool_state_1.hasProxySourcedCooling)(pool)) {
143
+ console.log((0, ui_1.dim)(' Note: live in-proxy 429 cooldowns are not shown here; states reflect CCS-side checks only.'));
144
+ }
145
+ }
146
+ /**
147
+ * Render the pool context section for one provider. Returns silently (renders
148
+ * nothing) when the provider has no accounts, so quota output stays clean.
149
+ *
150
+ * Async because it folds in live in-proxy 429 cooldowns (the real session-hop
151
+ * mechanism when pool routing is ON) via a single bounded management API read;
152
+ * that read degrades silently when the proxy is stopped, remote, or older.
153
+ */
154
+ async function renderProviderPoolSection(provider, settings, now = Date.now()) {
155
+ const pool = await (0, pool_state_1.resolvePoolStateWithProxyCooldowns)({ provider, settings, now });
156
+ if (pool.states.length === 0) {
157
+ return;
158
+ }
159
+ console.log((0, ui_1.subheader)('Pool context'));
160
+ // Routing mode line. The badge is a plain success-colored label (no marker)
161
+ // so it reads as a status, not an action item.
162
+ const routingBadge = settings.poolEnabled
163
+ ? (0, ui_1.color)('pool routing ON', 'success')
164
+ : (0, ui_1.dim)('pool routing off');
165
+ const affinity = settings.sessionAffinityEnabled
166
+ ? `affinity ${settings.sessionAffinityTtl}`
167
+ : 'no affinity';
168
+ // max-retry only applies when pool routing is on; mirror the generator's
169
+ // default so the displayed value matches the generated config.
170
+ const retry = settings.poolEnabled
171
+ ? `, max-retry ${settings.maxRetryCredentials ?? routing_strategy_1.POOL_MAX_RETRY_CREDENTIALS}`
172
+ : '';
173
+ console.log(` Routing: ${routingBadge} | ${settings.strategy} | ${affinity}${retry}`);
174
+ // Drain order line. Order is sorted by the on-disk priority the selector
175
+ // actually reads, so the first account here is the real "next" account.
176
+ const orderMode = modeLabel(pool.drainOrder.mode);
177
+ if (pool.drainOrder.order.length > 0) {
178
+ console.log(` Order: ${(0, ui_1.dim)(orderMode)} -> ${pool.drainOrder.order.join(' > ')}`);
179
+ }
180
+ else {
181
+ console.log(` Order: ${(0, ui_1.dim)(orderMode)} ${(0, ui_1.dim)('(no active accounts)')}`);
182
+ }
183
+ renderDrainOrderDrift(provider, pool);
184
+ // Per-account state. Render in drain order first, then any accounts not in the
185
+ // order (paused accounts are excluded from the order but still listed).
186
+ const stateById = new Map(pool.states.map((s) => [s.accountId, s]));
187
+ const ordered = [];
188
+ for (const id of pool.drainOrder.order) {
189
+ const s = stateById.get(id);
190
+ if (s)
191
+ ordered.push(s);
192
+ }
193
+ for (const s of pool.states) {
194
+ if (!pool.drainOrder.order.includes(s.accountId))
195
+ ordered.push(s);
196
+ }
197
+ for (const account of ordered) {
198
+ const { label, tone } = describeAccountState(account, now);
199
+ // Color-only labels (no markers) so the per-account list reads as a clean
200
+ // status column. Available is success-colored; cooling and paused are
201
+ // warning-colored to flag them without prefixing each line with a marker.
202
+ const rendered = tone === 'available' ? (0, ui_1.color)(label, 'success') : (0, ui_1.color)(label, 'warning');
203
+ const defaultMark = account.isDefault ? (0, ui_1.color)(' *', 'success') : '';
204
+ console.log(` - ${account.accountId}${defaultMark}: ${rendered}`);
205
+ }
206
+ renderCoolingNote(pool, settings);
207
+ // Resume hint: a pause can be manual OR automatic (ban detection,
208
+ // cross-provider isolation, expired-but-unrestored quota cooldown). Point the
209
+ // user at the real resume command so they can recover whichever caused it.
210
+ if (pool.states.some((s) => s.state === 'paused')) {
211
+ console.log(` ${(0, ui_1.dim)(`Resume: ccs cliproxy resume <account>`)}`);
212
+ }
213
+ // Reset/management hints. Dim hint matches the order subcommand's "To update:"
214
+ // style, and the indent stays outside the styling helper.
215
+ const tierHint = pool_state_1.POOL_TIER_AWARE_PROVIDERS.has(provider) ? ` (or --by-tier)` : '';
216
+ console.log(` ${(0, ui_1.dim)(`Manage order: ccs cliproxy accounts order ${provider} --set <ids>${tierHint}`)}`);
217
+ console.log('');
218
+ }
219
+ exports.renderProviderPoolSection = renderProviderPoolSection;
220
+ //# sourceMappingURL=pool-state-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-state-renderer.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/pool-state-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * CLIProxy Pool Routing Subcommand
3
+ *
4
+ * Handles:
5
+ * ccs cliproxy pool --enable Enable pool routing (fill-first + affinity + cooling ON)
6
+ * ccs cliproxy pool --disable Disable pool routing and restore non-pool config
7
+ * ccs cliproxy pool Show current pool routing state
8
+ */
9
+ export declare function handlePoolSubcommand(args: string[]): Promise<void>;
10
+ //# sourceMappingURL=pool-subcommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/pool-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyCH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwExE"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * CLIProxy Pool Routing Subcommand
4
+ *
5
+ * Handles:
6
+ * ccs cliproxy pool --enable Enable pool routing (fill-first + affinity + cooling ON)
7
+ * ccs cliproxy pool --disable Disable pool routing and restore non-pool config
8
+ * ccs cliproxy pool Show current pool routing state
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.handlePoolSubcommand = void 0;
12
+ const ui_1 = require("../../utils/ui");
13
+ const routing_strategy_1 = require("../../cliproxy/routing/routing-strategy");
14
+ const config_loader_facade_1 = require("../../config/config-loader-facade");
15
+ const port_manager_1 = require("../../cliproxy/config/port-manager");
16
+ const proxy_target_resolver_1 = require("../../cliproxy/proxy/proxy-target-resolver");
17
+ const path_resolver_1 = require("../../cliproxy/config/path-resolver");
18
+ const arg_extractor_1 = require("../arg-extractor");
19
+ /**
20
+ * Print the manual-config guidance for remote/Docker targets, then refuse.
21
+ * enablePoolRouting/disablePoolRouting only write local config files, so a
22
+ * remote proxy is never touched — refuse rather than lie about hot-reload.
23
+ * Mirrors the remote-refusal copy in order-subcommand and the manual snippet
24
+ * in pool-opt-in-prompt's printRemoteHint().
25
+ */
26
+ function printRemotePoolRefusal(enable) {
27
+ console.log((0, ui_1.warn)(`Remote proxy target detected. Pool routing management for remote proxies is not\n` +
28
+ ` supported in v1. Run this command on the host running CLIProxy instead.`));
29
+ console.log('');
30
+ if (enable) {
31
+ console.log(' To enable pool routing manually, add to your CLIProxy config.yaml:');
32
+ console.log(' disable-cooling: false');
33
+ console.log(` max-retry-credentials: ${routing_strategy_1.POOL_MAX_RETRY_CREDENTIALS}`);
34
+ console.log(' routing:');
35
+ console.log(' strategy: fill-first');
36
+ console.log(' session-affinity: true');
37
+ console.log(' session-affinity-ttl: "1h"');
38
+ console.log('');
39
+ }
40
+ }
41
+ async function handlePoolSubcommand(args) {
42
+ await (0, ui_1.initUI)();
43
+ console.log('');
44
+ console.log((0, ui_1.header)('CLIProxy Pool Routing'));
45
+ console.log('');
46
+ const wantsEnable = (0, arg_extractor_1.hasAnyFlag)(args, ['--enable']);
47
+ const wantsDisable = (0, arg_extractor_1.hasAnyFlag)(args, ['--disable']);
48
+ // Resolve the real proxy target before any config write. Remote targets are
49
+ // refused (enable/disable only mutate local files; the remote proxy is never
50
+ // touched, so the "hot-reload" success message would be a lie). Local targets
51
+ // use the configured lifecycle port so the regenerated config-<port>.yaml is
52
+ // the same file the running proxy reads.
53
+ if (wantsEnable || wantsDisable) {
54
+ const target = (0, proxy_target_resolver_1.getProxyTarget)();
55
+ if (target.isRemote) {
56
+ printRemotePoolRefusal(wantsEnable);
57
+ process.exitCode = 1;
58
+ return;
59
+ }
60
+ }
61
+ const port = (0, port_manager_1.resolveLifecyclePort)();
62
+ const configPath = (0, path_resolver_1.getConfigPathForPort)(port);
63
+ const authDir = (0, path_resolver_1.getAuthDir)();
64
+ if (wantsEnable) {
65
+ const result = (0, routing_strategy_1.enablePoolRouting)(port, { configPath, authDir });
66
+ if (result.failed) {
67
+ console.log((0, ui_1.warn)(result.message));
68
+ process.exitCode = 1;
69
+ }
70
+ else if (result.changed) {
71
+ console.log((0, ui_1.ok)(result.message));
72
+ }
73
+ else {
74
+ console.log((0, ui_1.info)(result.message));
75
+ }
76
+ console.log('');
77
+ return;
78
+ }
79
+ if (wantsDisable) {
80
+ const result = (0, routing_strategy_1.disablePoolRouting)(port, { configPath, authDir });
81
+ if (result.failed) {
82
+ console.log((0, ui_1.warn)(result.message));
83
+ process.exitCode = 1;
84
+ }
85
+ else if (result.changed) {
86
+ console.log((0, ui_1.ok)(result.message));
87
+ }
88
+ else {
89
+ console.log((0, ui_1.info)(result.message));
90
+ }
91
+ console.log('');
92
+ return;
93
+ }
94
+ // Default: show status
95
+ const config = (0, config_loader_facade_1.loadOrCreateUnifiedConfig)();
96
+ const enabled = config.cliproxy?.pool_routing?.enabled === true;
97
+ const dismissed = config.cliproxy?.pool_routing?.prompt_dismissed === true;
98
+ const maxRetry = config.cliproxy?.pool_routing?.max_retry_credentials;
99
+ console.log(` Status: ${enabled ? (0, ui_1.ok)('enabled') : (0, ui_1.warn)('disabled')}`);
100
+ if (enabled && maxRetry !== undefined) {
101
+ console.log(` Max retry: ${maxRetry}`);
102
+ }
103
+ if (!enabled && dismissed) {
104
+ console.log(` Dismissed: ${(0, ui_1.info)('yes (prompt will not re-show)')}`);
105
+ }
106
+ console.log('');
107
+ console.log(` Enable: ccs cliproxy pool --enable`);
108
+ console.log(` Disable: ccs cliproxy pool --disable`);
109
+ console.log('');
110
+ }
111
+ exports.handlePoolSubcommand = handlePoolSubcommand;
112
+ //# sourceMappingURL=pool-subcommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool-subcommand.js","sourceRoot":"","sources":["../../../src/commands/cliproxy/pool-subcommand.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  * - ccs cliproxy resume <account>
9
9
  * - ccs cliproxy doctor
10
10
  */
11
- import type { QuotaErrorMetadata } from '../../cliproxy/quota/quota-types';
11
+ import type { CodexQuotaResult, QuotaErrorMetadata } from '../../cliproxy/quota/quota-types';
12
12
  import { type QuotaSupportedProvider } from '../../cliproxy/provider-capabilities';
13
13
  declare function resolveDisplayedTier(accountTier: string | undefined, liveTier: string | undefined): string;
14
14
  interface QuotaFailureDisplayEntry {
@@ -18,8 +18,17 @@ interface QuotaFailureDisplayEntry {
18
18
  declare function getQuotaFailureDisplayEntries(quota: QuotaErrorMetadata & {
19
19
  error?: string;
20
20
  }): QuotaFailureDisplayEntry[];
21
+ type CodexWindowSummary = Pick<CodexQuotaResult['windows'][number], 'label' | 'resetAfterSeconds' | 'category' | 'cadence' | 'featureLabel'>;
22
+ /**
23
+ * Strip a leading "GPT-X.Y-Codex-" prefix from a feature label and turn the
24
+ * remainder into a Codex-prefixed display name. Other labels pass through unchanged.
25
+ */
26
+ declare function prettifyCodexFeatureLabel(featureLabel: unknown, fallbackLabel?: unknown): string;
27
+ declare function getCodexWindowDisplayLabel(window: CodexWindowSummary, allWindows?: CodexWindowSummary[]): string;
21
28
  export declare const __testExports: {
29
+ getCodexWindowDisplayLabel: typeof getCodexWindowDisplayLabel;
22
30
  getQuotaFailureDisplayEntries: typeof getQuotaFailureDisplayEntries;
31
+ prettifyCodexFeatureLabel: typeof prettifyCodexFeatureLabel;
23
32
  resolveDisplayedTier: typeof resolveDisplayedTier;
24
33
  };
25
34
  export declare function handleQuotaStatus(verbose?: boolean, providerFilter?: QuotaSupportedProvider | 'all'): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"quota-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/quota-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,OAAO,KAAK,EAKV,kBAAkB,EACnB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,sCAAsC,CAAC;AAqE9C,iBAAS,oBAAoB,CAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAER;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iBAAS,6BAA6B,CACpC,KAAK,EAAE,kBAAkB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,wBAAwB,EAAE,CA0C5B;AAgrBD,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,UAAQ,EACf,cAAc,GAAE,sBAAsB,GAAG,KAAa,GACrD,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAED,wBAAsB,YAAY,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFjE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CpE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCtE;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvE"}
1
+ {"version":3,"file":"quota-subcommand.d.ts","sourceRoot":"","sources":["../../../src/commands/cliproxy/quota-subcommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,OAAO,KAAK,EACV,gBAAgB,EAIhB,kBAAkB,EACnB,MAAM,kCAAkC,CAAC;AAI1C,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,sCAAsC,CAAC;AAqE9C,iBAAS,oBAAoB,CAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,CAER;AAED,UAAU,wBAAwB;IAChC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iBAAS,6BAA6B,CACpC,KAAK,EAAE,kBAAkB,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,wBAAwB,EAAE,CA0C5B;AA6ED,KAAK,kBAAkB,GAAG,IAAI,CAC5B,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EACnC,OAAO,GAAG,mBAAmB,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,CACxE,CAAC;AAkCF;;;GAGG;AACH,iBAAS,yBAAyB,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAWzF;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,kBAAkB,EAC1B,UAAU,GAAE,kBAAkB,EAAO,GACpC,MAAM,CAuCR;AAsgBD,eAAO,MAAM,aAAa;;;;;CAKzB,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,OAAO,UAAQ,EACf,cAAc,GAAE,sBAAsB,GAAG,KAAa,GACrD,OAAO,CAAC,IAAI,CAAC,CAkDf;AAED,wBAAsB,YAAY,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFjE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CpE;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCtE;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvE"}
@@ -14,11 +14,13 @@ exports.handleResumeAccount = exports.handlePauseAccount = exports.handleSetDefa
14
14
  const account_manager_1 = require("../../cliproxy/accounts/account-manager");
15
15
  const quota_fetcher_1 = require("../../cliproxy/quota/quota-fetcher");
16
16
  const quota_fetcher_codex_1 = require("../../cliproxy/quota/quota-fetcher-codex");
17
+ const quota_label_sanitizer_1 = require("../../cliproxy/quota/quota-label-sanitizer");
17
18
  const quota_fetcher_claude_1 = require("../../cliproxy/quota/quota-fetcher-claude");
18
19
  const quota_fetcher_claude_normalizer_1 = require("../../cliproxy/quota/quota-fetcher-claude-normalizer");
19
20
  const quota_fetcher_gemini_cli_1 = require("../../cliproxy/quota/quota-fetcher-gemini-cli");
20
21
  const quota_fetcher_ghcp_1 = require("../../cliproxy/quota/quota-fetcher-ghcp");
21
22
  const quota_manager_1 = require("../../cliproxy/quota/quota-manager");
23
+ const pool_state_renderer_1 = require("./pool-state-renderer");
22
24
  const provider_capabilities_1 = require("../../cliproxy/provider-capabilities");
23
25
  const email_account_identity_1 = require("../../cliproxy/accounts/email-account-identity");
24
26
  const ui_1 = require("../../utils/ui");
@@ -210,10 +212,11 @@ function inferCodeReviewCadence(window, allWindows) {
210
212
  * Strip a leading "GPT-X.Y-Codex-" prefix from a feature label and turn the
211
213
  * remainder into a Codex-prefixed display name. Other labels pass through unchanged.
212
214
  */
213
- function prettifyCodexFeatureLabel(featureLabel) {
214
- const trimmed = featureLabel.trim();
215
- if (!trimmed)
216
- return 'Additional';
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));
217
220
  const stripped = trimmed.replace(/^GPT-[\d.]+-Codex-/i, '');
218
221
  if (stripped !== trimmed && stripped.length > 0) {
219
222
  return `Codex ${stripped}`;
@@ -230,7 +233,7 @@ function getCodexWindowDisplayLabel(window, allWindows = []) {
230
233
  return 'Weekly usage limit';
231
234
  }
232
235
  if (window.category === 'additional') {
233
- const pretty = prettifyCodexFeatureLabel(window.featureLabel || window.label || 'Additional');
236
+ const pretty = prettifyCodexFeatureLabel(window.featureLabel, window.label);
234
237
  if (window.cadence === '5h')
235
238
  return `${pretty} (5h)`;
236
239
  if (window.cadence === 'weekly')
@@ -653,7 +656,9 @@ const QUOTA_PROVIDER_RUNTIME = {
653
656
  },
654
657
  };
655
658
  exports.__testExports = {
659
+ getCodexWindowDisplayLabel,
656
660
  getQuotaFailureDisplayEntries,
661
+ prettifyCodexFeatureLabel,
657
662
  resolveDisplayedTier,
658
663
  };
659
664
  async function handleQuotaStatus(verbose = false, providerFilter = 'all') {
@@ -670,6 +675,8 @@ async function handleQuotaStatus(verbose = false, providerFilter = 'all') {
670
675
  return [provider, await QUOTA_PROVIDER_RUNTIME[provider].fetch(verbose)];
671
676
  })));
672
677
  console.log('');
678
+ // Pool routing settings are global to the CLIProxy config; read once.
679
+ const poolSettings = (0, pool_state_renderer_1.readPoolRoutingSettings)();
673
680
  for (const provider of provider_capabilities_1.QUOTA_SUPPORTED_PROVIDER_IDS) {
674
681
  if (!shouldFetch(provider)) {
675
682
  continue;
@@ -678,6 +685,10 @@ async function handleQuotaStatus(verbose = false, providerFilter = 'all') {
678
685
  const result = providerResults.get(provider) ?? null;
679
686
  if (result !== null && runtime.hasData(result)) {
680
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);
681
692
  continue;
682
693
  }
683
694
  console.log((0, ui_1.subheader)(runtime.emptyTitle));
@@ -814,8 +825,13 @@ async function handlePauseAccount(args) {
814
825
  process.exit(1);
815
826
  }
816
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;
817
830
  console.log((0, ui_1.warn)(`Account already paused: ${formatCliAccountLabel(account)}`));
818
- console.log((0, ui_1.info)(`Paused at: ${account.pausedAt || 'unknown'}`));
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'}`));
819
835
  return;
820
836
  }
821
837
  const success = (0, account_manager_1.pauseAccount)(provider, account.id);