@kaitranntt/ccs 8.1.4 → 8.2.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/config/base-kiro.settings.json +4 -4
  2. package/config/base-qoder.settings.json +10 -0
  3. package/dist/channels/official-channels-runtime.js +1 -1
  4. package/dist/channels/official-channels-runtime.js.map +1 -1
  5. package/dist/cliproxy/accounts/registry.d.ts.map +1 -1
  6. package/dist/cliproxy/accounts/registry.js +11 -4
  7. package/dist/cliproxy/accounts/registry.js.map +1 -1
  8. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js +1 -1
  9. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js.map +1 -1
  10. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
  11. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +88 -11
  12. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
  13. package/dist/cliproxy/auth/auth-types.d.ts +2 -0
  14. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  15. package/dist/cliproxy/auth/auth-types.js +7 -0
  16. package/dist/cliproxy/auth/auth-types.js.map +1 -1
  17. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  18. package/dist/cliproxy/auth/oauth-handler.js +19 -10
  19. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  20. package/dist/cliproxy/auth/oauth-trace/redactor.d.ts.map +1 -1
  21. package/dist/cliproxy/auth/oauth-trace/redactor.js +1 -0
  22. package/dist/cliproxy/auth/oauth-trace/redactor.js.map +1 -1
  23. package/dist/cliproxy/auth/oauth-trace/trace-recorder.js +2 -2
  24. package/dist/cliproxy/auth/oauth-trace/trace-recorder.js.map +1 -1
  25. package/dist/cliproxy/binary/version-checker.d.ts +4 -2
  26. package/dist/cliproxy/binary/version-checker.d.ts.map +1 -1
  27. package/dist/cliproxy/binary/version-checker.js +30 -20
  28. package/dist/cliproxy/binary/version-checker.js.map +1 -1
  29. package/dist/cliproxy/executor/arg-parser.d.ts +8 -5
  30. package/dist/cliproxy/executor/arg-parser.d.ts.map +1 -1
  31. package/dist/cliproxy/executor/arg-parser.js +21 -10
  32. package/dist/cliproxy/executor/arg-parser.js.map +1 -1
  33. package/dist/cliproxy/executor/browser-launch-setup.d.ts +1 -0
  34. package/dist/cliproxy/executor/browser-launch-setup.d.ts.map +1 -1
  35. package/dist/cliproxy/executor/browser-launch-setup.js +4 -3
  36. package/dist/cliproxy/executor/browser-launch-setup.js.map +1 -1
  37. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  38. package/dist/cliproxy/executor/index.js +15 -6
  39. package/dist/cliproxy/executor/index.js.map +1 -1
  40. package/dist/cliproxy/executor/proxy-resolver.d.ts +15 -9
  41. package/dist/cliproxy/executor/proxy-resolver.d.ts.map +1 -1
  42. package/dist/cliproxy/executor/proxy-resolver.js +14 -5
  43. package/dist/cliproxy/executor/proxy-resolver.js.map +1 -1
  44. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  45. package/dist/cliproxy/model-catalog.js +79 -2
  46. package/dist/cliproxy/model-catalog.js.map +1 -1
  47. package/dist/cliproxy/provider-capabilities.d.ts.map +1 -1
  48. package/dist/cliproxy/provider-capabilities.js +12 -0
  49. package/dist/cliproxy/provider-capabilities.js.map +1 -1
  50. package/dist/cliproxy/proxy/proxy-config-resolver.d.ts.map +1 -1
  51. package/dist/cliproxy/proxy/proxy-config-resolver.js +11 -1
  52. package/dist/cliproxy/proxy/proxy-config-resolver.js.map +1 -1
  53. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  54. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +160 -8
  55. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  56. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts +14 -0
  57. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -0
  58. package/dist/cliproxy/proxy/upstream-response-timeout.js +72 -0
  59. package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -0
  60. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts +9 -0
  61. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  62. package/dist/cliproxy/quota/quota-fetcher-claude.js +53 -16
  63. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  64. package/dist/cliproxy/quota/quota-fetcher-codex.d.ts +2 -2
  65. package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
  66. package/dist/cliproxy/quota/quota-fetcher-codex.js +2 -4
  67. package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
  68. package/dist/cliproxy/quota/quota-fetcher.d.ts.map +1 -1
  69. package/dist/cliproxy/quota/quota-fetcher.js +4 -0
  70. package/dist/cliproxy/quota/quota-fetcher.js.map +1 -1
  71. package/dist/cliproxy/quota/quota-label-sanitizer.d.ts +10 -0
  72. package/dist/cliproxy/quota/quota-label-sanitizer.d.ts.map +1 -0
  73. package/dist/cliproxy/quota/quota-label-sanitizer.js +31 -0
  74. package/dist/cliproxy/quota/quota-label-sanitizer.js.map +1 -0
  75. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  76. package/dist/cliproxy/quota/quota-manager.js +32 -1
  77. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  78. package/dist/cliproxy/routing/routing-strategy-http.d.ts.map +1 -1
  79. package/dist/cliproxy/routing/routing-strategy-http.js +35 -26
  80. package/dist/cliproxy/routing/routing-strategy-http.js.map +1 -1
  81. package/dist/cliproxy/services/catalog-cache.d.ts.map +1 -1
  82. package/dist/cliproxy/services/catalog-cache.js +5 -3
  83. package/dist/cliproxy/services/catalog-cache.js.map +1 -1
  84. package/dist/cliproxy/services/stats-fetcher.d.ts +13 -0
  85. package/dist/cliproxy/services/stats-fetcher.d.ts.map +1 -1
  86. package/dist/cliproxy/services/stats-fetcher.js +25 -1
  87. package/dist/cliproxy/services/stats-fetcher.js.map +1 -1
  88. package/dist/cliproxy/types/provider-types.d.ts +1 -1
  89. package/dist/cliproxy/types/provider-types.d.ts.map +1 -1
  90. package/dist/cliproxy/types/provider-types.js +1 -0
  91. package/dist/cliproxy/types/provider-types.js.map +1 -1
  92. package/dist/codex-auth/codex-config-symlink.js +21 -4
  93. package/dist/codex-auth/codex-config-symlink.js.map +1 -1
  94. package/dist/codex-auth/commands/import-default-command.d.ts +1 -1
  95. package/dist/codex-auth/commands/import-default-command.d.ts.map +1 -1
  96. package/dist/codex-auth/commands/import-default-command.js +12 -25
  97. package/dist/codex-auth/commands/import-default-command.js.map +1 -1
  98. package/dist/commands/api-command/help.js +1 -1
  99. package/dist/commands/api-command/help.js.map +1 -1
  100. package/dist/commands/bar/index.d.ts +8 -0
  101. package/dist/commands/bar/index.d.ts.map +1 -0
  102. package/dist/commands/bar/index.js +69 -0
  103. package/dist/commands/bar/index.js.map +1 -0
  104. package/dist/commands/bar/install-subcommand.d.ts +50 -0
  105. package/dist/commands/bar/install-subcommand.d.ts.map +1 -0
  106. package/dist/commands/bar/install-subcommand.js +383 -0
  107. package/dist/commands/bar/install-subcommand.js.map +1 -0
  108. package/dist/commands/bar/launch-subcommand.d.ts +38 -0
  109. package/dist/commands/bar/launch-subcommand.d.ts.map +1 -0
  110. package/dist/commands/bar/launch-subcommand.js +141 -0
  111. package/dist/commands/bar/launch-subcommand.js.map +1 -0
  112. package/dist/commands/bar/uninstall-subcommand.d.ts +13 -0
  113. package/dist/commands/bar/uninstall-subcommand.d.ts.map +1 -0
  114. package/dist/commands/bar/uninstall-subcommand.js +78 -0
  115. package/dist/commands/bar/uninstall-subcommand.js.map +1 -0
  116. package/dist/commands/bar/version-subcommand.d.ts +8 -0
  117. package/dist/commands/bar/version-subcommand.d.ts.map +1 -0
  118. package/dist/commands/bar/version-subcommand.js +62 -0
  119. package/dist/commands/bar/version-subcommand.js.map +1 -0
  120. package/dist/commands/cleanup-command.d.ts.map +1 -1
  121. package/dist/commands/cleanup-command.js +99 -51
  122. package/dist/commands/cleanup-command.js.map +1 -1
  123. package/dist/commands/cliproxy/quota-subcommand.d.ts +10 -1
  124. package/dist/commands/cliproxy/quota-subcommand.d.ts.map +1 -1
  125. package/dist/commands/cliproxy/quota-subcommand.js +15 -6
  126. package/dist/commands/cliproxy/quota-subcommand.js.map +1 -1
  127. package/dist/commands/command-catalog.d.ts.map +1 -1
  128. package/dist/commands/command-catalog.js +7 -0
  129. package/dist/commands/command-catalog.js.map +1 -1
  130. package/dist/commands/config-channels-command.d.ts +1 -4
  131. package/dist/commands/config-channels-command.d.ts.map +1 -1
  132. package/dist/commands/config-channels-command.js +20 -24
  133. package/dist/commands/config-channels-command.js.map +1 -1
  134. package/dist/commands/root-command-router.d.ts.map +1 -1
  135. package/dist/commands/root-command-router.js +7 -0
  136. package/dist/commands/root-command-router.js.map +1 -1
  137. package/dist/config/loader/yaml-serializer.d.ts.map +1 -1
  138. package/dist/config/loader/yaml-serializer.js +13 -0
  139. package/dist/config/loader/yaml-serializer.js.map +1 -1
  140. package/dist/config/reserved-names.d.ts +1 -1
  141. package/dist/config/reserved-names.d.ts.map +1 -1
  142. package/dist/config/reserved-names.js +1 -0
  143. package/dist/config/reserved-names.js.map +1 -1
  144. package/dist/config/schemas/proxy-server.js +1 -1
  145. package/dist/config/schemas/quota.d.ts +26 -2
  146. package/dist/config/schemas/quota.d.ts.map +1 -1
  147. package/dist/config/schemas/quota.js +20 -1
  148. package/dist/config/schemas/quota.js.map +1 -1
  149. package/dist/cursor/cursor-daemon-auth.d.ts +2 -0
  150. package/dist/cursor/cursor-daemon-auth.d.ts.map +1 -0
  151. package/dist/cursor/cursor-daemon-auth.js +49 -0
  152. package/dist/cursor/cursor-daemon-auth.js.map +1 -0
  153. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  154. package/dist/cursor/cursor-daemon-entry.js +44 -0
  155. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  156. package/dist/cursor/cursor-daemon.d.ts +2 -1
  157. package/dist/cursor/cursor-daemon.d.ts.map +1 -1
  158. package/dist/cursor/cursor-daemon.js +21 -5
  159. package/dist/cursor/cursor-daemon.js.map +1 -1
  160. package/dist/cursor/cursor-models.d.ts.map +1 -1
  161. package/dist/cursor/cursor-models.js +2 -1
  162. package/dist/cursor/cursor-models.js.map +1 -1
  163. package/dist/cursor/cursor-profile-executor.d.ts +1 -1
  164. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  165. package/dist/cursor/cursor-profile-executor.js +7 -4
  166. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  167. package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -1
  168. package/dist/cursor/cursor-runtime-probe.js +4 -2
  169. package/dist/cursor/cursor-runtime-probe.js.map +1 -1
  170. package/dist/cursor/types.d.ts +1 -0
  171. package/dist/cursor/types.d.ts.map +1 -1
  172. package/dist/dispatcher/profile-resolver.d.ts +16 -0
  173. package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
  174. package/dist/dispatcher/profile-resolver.js +49 -3
  175. package/dist/dispatcher/profile-resolver.js.map +1 -1
  176. package/dist/docker/docker-key-rotation.d.ts +2 -0
  177. package/dist/docker/docker-key-rotation.d.ts.map +1 -1
  178. package/dist/docker/docker-key-rotation.js +9 -1
  179. package/dist/docker/docker-key-rotation.js.map +1 -1
  180. package/dist/glmt/sse-parser.d.ts +1 -0
  181. package/dist/glmt/sse-parser.d.ts.map +1 -1
  182. package/dist/glmt/sse-parser.js +13 -1
  183. package/dist/glmt/sse-parser.js.map +1 -1
  184. package/dist/management/shared-manager.d.ts.map +1 -1
  185. package/dist/management/shared-manager.js +9 -1
  186. package/dist/management/shared-manager.js.map +1 -1
  187. package/dist/proxy/profile-router.d.ts +2 -0
  188. package/dist/proxy/profile-router.d.ts.map +1 -1
  189. package/dist/proxy/profile-router.js +6 -2
  190. package/dist/proxy/profile-router.js.map +1 -1
  191. package/dist/proxy/proxy-daemon.js +1 -1
  192. package/dist/proxy/proxy-daemon.js.map +1 -1
  193. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  194. package/dist/proxy/server/messages-route.js +79 -7
  195. package/dist/proxy/server/messages-route.js.map +1 -1
  196. package/dist/proxy/transformers/request-transformer.d.ts.map +1 -1
  197. package/dist/proxy/transformers/request-transformer.js +9 -2
  198. package/dist/proxy/transformers/request-transformer.js.map +1 -1
  199. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  200. package/dist/shared/claude-extension-setup.js +2 -1
  201. package/dist/shared/claude-extension-setup.js.map +1 -1
  202. package/dist/shared/cliproxy-model-routing.d.ts.map +1 -1
  203. package/dist/shared/cliproxy-model-routing.js +1 -0
  204. package/dist/shared/cliproxy-model-routing.js.map +1 -1
  205. package/dist/shared/stale-codex-translator-settings.d.ts.map +1 -1
  206. package/dist/shared/stale-codex-translator-settings.js +48 -9
  207. package/dist/shared/stale-codex-translator-settings.js.map +1 -1
  208. package/dist/targets/codex-adapter.d.ts.map +1 -1
  209. package/dist/targets/codex-adapter.js +10 -8
  210. package/dist/targets/codex-adapter.js.map +1 -1
  211. package/dist/targets/target-metadata.js +1 -1
  212. package/dist/targets/target-metadata.js.map +1 -1
  213. package/dist/ui/assets/{Trans-DyZQZ3e2.js → Trans-BkttMZOY.js} +1 -1
  214. package/dist/ui/assets/accounts-CMnafyvZ.js +1 -0
  215. package/dist/ui/assets/{alert-dialog-DWHL-dqd.js → alert-dialog-Dgbg5gJ1.js} +1 -1
  216. package/dist/ui/assets/api-VhuWZte1.js +4 -0
  217. package/dist/ui/assets/{auth-section-B4o90dwz.js → auth-section-DV1ImDLn.js} +1 -1
  218. package/dist/ui/assets/{backups-section-1AsdSIJO.js → backups-section-D7r-Huo_.js} +1 -1
  219. package/dist/ui/assets/{channels-CU4Zdsc_.js → channels-CKUk3W1L.js} +1 -1
  220. package/dist/ui/assets/{checkbox-CbCKGH8I.js → checkbox-B6j6PA4N.js} +1 -1
  221. package/dist/ui/assets/claude-extension-B9phgEGW.js +1 -0
  222. package/dist/ui/assets/cliproxy-CjZiufaQ.js +4 -0
  223. package/dist/ui/assets/{cliproxy-ai-providers-Dr4L5NRY.js → cliproxy-ai-providers-J_8Tg44E.js} +6 -6
  224. package/dist/ui/assets/cliproxy-control-panel-DOxGnabX.js +1 -0
  225. package/dist/ui/assets/codex-BJuDLXfe.js +30 -0
  226. package/dist/ui/assets/{confirm-dialog-b5Dahgnk.js → confirm-dialog-CjwyQ3AU.js} +1 -1
  227. package/dist/ui/assets/{copilot-B1Ojakbt.js → copilot-Nhs4PdOq.js} +2 -2
  228. package/dist/ui/assets/{cursor-PUtNVPx1.js → cursor-DqFROSqy.js} +1 -1
  229. package/dist/ui/assets/{droid-S2gclncb.js → droid-CBwAiZcv.js} +1 -1
  230. package/dist/ui/assets/{globalenv-section-7wKSmNSG.js → globalenv-section-D9WhcK3S.js} +1 -1
  231. package/dist/ui/assets/{health-hMLN_gyw.js → health-CE3lFqFV.js} +1 -1
  232. package/dist/ui/assets/icons-gI6odJjU.js +1 -0
  233. package/dist/ui/assets/{index-Cx0dmbiQ.js → index-Bssd99Pa.js} +1 -1
  234. package/dist/ui/assets/index-C6D81JHk.js +1 -0
  235. package/dist/ui/assets/{index-BWboJia4.js → index-D--xE6Kq.js} +1 -1
  236. package/dist/ui/assets/index-DFYK4jw3.js +56 -0
  237. package/dist/ui/assets/{index-DkR2KVhF.js → index-DGsfFqiO.js} +1 -1
  238. package/dist/ui/assets/index-UEdhhar4.css +1 -0
  239. package/dist/ui/assets/{index-Coc3_ABK.js → index-bJvDY0e2.js} +1 -1
  240. package/dist/ui/assets/{index-CxvNNHgE.js → index-vK0cF4_0.js} +1 -1
  241. package/dist/ui/assets/logs-BUA9GCN2.js +1 -0
  242. package/dist/ui/assets/{masked-input-4L9CIZGb.js → masked-input-BZdCgWmH.js} +1 -1
  243. package/dist/ui/assets/providers/qoder.svg +1 -0
  244. package/dist/ui/assets/proxy-status-widget-I35xB9u9.js +1 -0
  245. package/dist/ui/assets/{raw-json-settings-editor-panel-DXh8c8rA.js → raw-json-settings-editor-panel-DuL_4ncA.js} +1 -1
  246. package/dist/ui/assets/{searchable-select-CtvEQrMo.js → searchable-select-BleLprBy.js} +1 -1
  247. package/dist/ui/assets/{separator-E0ISp1SN.js → separator-De5-VTtx.js} +1 -1
  248. package/dist/ui/assets/{shared-BeYwHeNS.js → shared-Bu81YVUK.js} +2 -2
  249. package/dist/ui/assets/{table-BBslZvNP.js → table-DsXaM2jg.js} +1 -1
  250. package/dist/ui/assets/updates-C2bOO3Fo.js +1 -0
  251. package/dist/ui/assets/{use-accounts-BdalFsdY.js → use-accounts-C2OmaTJU.js} +1 -1
  252. package/dist/ui/index.html +3 -3
  253. package/dist/utils/browser/browser-settings.d.ts.map +1 -1
  254. package/dist/utils/browser/browser-settings.js +13 -3
  255. package/dist/utils/browser/browser-settings.js.map +1 -1
  256. package/dist/utils/glmt-deprecation.d.ts.map +1 -1
  257. package/dist/utils/glmt-deprecation.js +1 -3
  258. package/dist/utils/glmt-deprecation.js.map +1 -1
  259. package/dist/utils/retry-strategy.js +1 -1
  260. package/dist/utils/retry-strategy.js.map +1 -1
  261. package/dist/web-server/index.d.ts.map +1 -1
  262. package/dist/web-server/index.js +0 -9
  263. package/dist/web-server/index.js.map +1 -1
  264. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  265. package/dist/web-server/middleware/auth-middleware.js +26 -4
  266. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  267. package/dist/web-server/model-pricing.d.ts +18 -2
  268. package/dist/web-server/model-pricing.d.ts.map +1 -1
  269. package/dist/web-server/model-pricing.js +79 -3
  270. package/dist/web-server/model-pricing.js.map +1 -1
  271. package/dist/web-server/models-dev/pricing-resolver.js +14 -14
  272. package/dist/web-server/models-dev/pricing-resolver.js.map +1 -1
  273. package/dist/web-server/routes/account-routes.d.ts.map +1 -1
  274. package/dist/web-server/routes/account-routes.js +116 -0
  275. package/dist/web-server/routes/account-routes.js.map +1 -1
  276. package/dist/web-server/routes/bar-routes.d.ts +149 -0
  277. package/dist/web-server/routes/bar-routes.d.ts.map +1 -0
  278. package/dist/web-server/routes/bar-routes.js +415 -0
  279. package/dist/web-server/routes/bar-routes.js.map +1 -0
  280. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +10 -0
  281. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  282. package/dist/web-server/routes/cliproxy-auth-routes.js +45 -13
  283. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  284. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  285. package/dist/web-server/routes/cliproxy-local-proxy.js +25 -8
  286. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  287. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  288. package/dist/web-server/routes/cursor-routes.js +6 -1
  289. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  290. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  291. package/dist/web-server/routes/image-analysis-routes.js +7 -0
  292. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  293. package/dist/web-server/routes/index.d.ts.map +1 -1
  294. package/dist/web-server/routes/index.js +18 -0
  295. package/dist/web-server/routes/index.js.map +1 -1
  296. package/dist/web-server/routes/profile-routes.d.ts.map +1 -1
  297. package/dist/web-server/routes/profile-routes.js +6 -1
  298. package/dist/web-server/routes/profile-routes.js.map +1 -1
  299. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  300. package/dist/web-server/routes/settings-routes.js +10 -1
  301. package/dist/web-server/routes/settings-routes.js.map +1 -1
  302. package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -1
  303. package/dist/web-server/services/claude-extension-settings-service.js +5 -1
  304. package/dist/web-server/services/claude-extension-settings-service.js.map +1 -1
  305. package/dist/web-server/usage/bar-analytics.d.ts +101 -0
  306. package/dist/web-server/usage/bar-analytics.d.ts.map +1 -0
  307. package/dist/web-server/usage/bar-analytics.js +315 -0
  308. package/dist/web-server/usage/bar-analytics.js.map +1 -0
  309. package/dist/web-server/usage/claude-native-credentials.d.ts +56 -0
  310. package/dist/web-server/usage/claude-native-credentials.d.ts.map +1 -0
  311. package/dist/web-server/usage/claude-native-credentials.js +140 -0
  312. package/dist/web-server/usage/claude-native-credentials.js.map +1 -0
  313. package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts +24 -0
  314. package/dist/web-server/usage/cliproxy-snapshot-reader.d.ts.map +1 -0
  315. package/dist/web-server/usage/cliproxy-snapshot-reader.js +82 -0
  316. package/dist/web-server/usage/cliproxy-snapshot-reader.js.map +1 -0
  317. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts +3 -2
  318. package/dist/web-server/usage/cliproxy-usage-syncer.d.ts.map +1 -1
  319. package/dist/web-server/usage/cliproxy-usage-syncer.js +46 -13
  320. package/dist/web-server/usage/cliproxy-usage-syncer.js.map +1 -1
  321. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts +9 -3
  322. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -1
  323. package/dist/web-server/usage/cliproxy-usage-transformer.js +133 -19
  324. package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -1
  325. package/dist/web-server/usage/codex-local-quota-collector.d.ts +74 -0
  326. package/dist/web-server/usage/codex-local-quota-collector.d.ts.map +1 -0
  327. package/dist/web-server/usage/codex-local-quota-collector.js +248 -0
  328. package/dist/web-server/usage/codex-local-quota-collector.js.map +1 -0
  329. package/dist/web-server/usage/codex-native-usage-collector.d.ts.map +1 -1
  330. package/dist/web-server/usage/codex-native-usage-collector.js +18 -2
  331. package/dist/web-server/usage/codex-native-usage-collector.js.map +1 -1
  332. package/dist/web-server/usage/data-aggregator.d.ts +11 -0
  333. package/dist/web-server/usage/data-aggregator.d.ts.map +1 -1
  334. package/dist/web-server/usage/data-aggregator.js +29 -1
  335. package/dist/web-server/usage/data-aggregator.js.map +1 -1
  336. package/dist/web-server/usage/native-quota-collector.d.ts +44 -0
  337. package/dist/web-server/usage/native-quota-collector.d.ts.map +1 -0
  338. package/dist/web-server/usage/native-quota-collector.js +378 -0
  339. package/dist/web-server/usage/native-quota-collector.js.map +1 -0
  340. package/dist/web-server/usage/profile-filter.d.ts +1 -1
  341. package/dist/web-server/usage/profile-filter.d.ts.map +1 -1
  342. package/dist/web-server/usage/profile-filter.js +6 -1
  343. package/dist/web-server/usage/profile-filter.js.map +1 -1
  344. package/dist/web-server/usage/types.d.ts +2 -0
  345. package/dist/web-server/usage/types.d.ts.map +1 -1
  346. package/lib/mcp/ccs-browser-server.cjs +31 -15
  347. package/package.json +1 -1
  348. package/scripts/completion/ccs.bash +0 -12
  349. package/scripts/completion/ccs.fish +0 -11
  350. package/scripts/completion/ccs.ps1 +0 -10
  351. package/scripts/completion/ccs.zsh +0 -13
  352. package/scripts/github/stable-release-issue-cleanup-lib.mjs +115 -0
  353. package/scripts/github/stable-release-issue-cleanup.mjs +134 -0
  354. package/dist/ui/assets/accounts-BPJltru3.js +0 -1
  355. package/dist/ui/assets/api-BxPN-zy4.js +0 -4
  356. package/dist/ui/assets/claude-extension-CWpjmIGt.js +0 -1
  357. package/dist/ui/assets/cliproxy-K6eBb5VO.js +0 -4
  358. package/dist/ui/assets/cliproxy-control-panel-Cz5r7kHP.js +0 -1
  359. package/dist/ui/assets/codex-0HdbW8NR.js +0 -30
  360. package/dist/ui/assets/icons-DzKUh8vG.js +0 -1
  361. package/dist/ui/assets/index-BMoGhs28.css +0 -1
  362. package/dist/ui/assets/index-COt1pbk-.js +0 -1
  363. package/dist/ui/assets/index-CcGVqYOy.js +0 -56
  364. package/dist/ui/assets/logs-BRFVfyLc.js +0 -1
  365. package/dist/ui/assets/proxy-status-widget-s1UWOE23.js +0 -1
  366. package/dist/ui/assets/updates-CDrm903n.js +0 -1
@@ -0,0 +1,378 @@
1
+ "use strict";
2
+ /**
3
+ * Native subscription quota collector — the ONLY server-side fetch surface for
4
+ * the user's own Claude Code + Codex subscription quota.
5
+ *
6
+ * The macOS bar reads localhost /api/bar/summary and NEVER calls Anthropic. All
7
+ * Anthropic traffic originates here, under strict safety controls, because the
8
+ * OAuth usage endpoint is undocumented and hostile to polling (persistent 429s,
9
+ * no Retry-After, first-party-only policy). The controls below exist to protect
10
+ * the user's account:
11
+ *
12
+ * - long TTL (10 min) on-demand cache, never a tight timer loop
13
+ * - in-flight coalescing so concurrent /summary calls share one fetch
14
+ * - Retry-After honored; exponential backoff + jitter on 429/5xx
15
+ * - circuit breaker stops calling after repeated 429s for a cooldown
16
+ * - serve-stale-on-failure; only omit a row when there is genuinely no data
17
+ *
18
+ * Codex is a pure local file read (no network), so it skips the network guards.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.getNativeAccountRows = exports.resetNativeQuotaState = void 0;
22
+ const claude_native_credentials_1 = require("./claude-native-credentials");
23
+ const quota_fetcher_claude_1 = require("../../cliproxy/quota/quota-fetcher-claude");
24
+ const codex_local_quota_collector_1 = require("./codex-local-quota-collector");
25
+ // ============================================================================
26
+ // Safety constants (concrete, named, module-level)
27
+ // ============================================================================
28
+ /** On-demand cache TTL. Floor is 5 min; we use 10 min because the bar polls
29
+ * /summary far more often than a hook fires. */
30
+ const NATIVE_QUOTA_TTL_MS = 600000; // 10 minutes
31
+ /** Exponential backoff base; delay = min(base * 2^n, MAX) + jitter. */
32
+ const RETRY_BASE_MS = 1000;
33
+ /** Ceiling for any single backoff / Retry-After cooldown derived from one call. */
34
+ const MAX_BACKOFF_MS = 60000; // 1 minute
35
+ /** Jitter added to backoff to avoid synchronized retries. */
36
+ const JITTER_MAX_MS = 500;
37
+ /** Consecutive 429s that trip the breaker open. */
38
+ const CB_TRIP_THRESHOLD = 3;
39
+ /** How long the breaker stays open (zero network) once tripped. */
40
+ const CB_COOLDOWN_MS = 900000; // 15 minutes
41
+ const CLAUDE_PROVIDER = 'claude-code';
42
+ const CODEX_PROVIDER = 'codex';
43
+ function freshProviderState() {
44
+ return {
45
+ cachedRow: null,
46
+ cachedAt: 0,
47
+ pending: null,
48
+ consecutive429: 0,
49
+ breakerOpenUntil: 0,
50
+ cooldownUntil: 0,
51
+ backoffAttempt: 0,
52
+ };
53
+ }
54
+ const claudeState = freshProviderState();
55
+ /** Reset all module state. Tests call this to avoid cross-test pollution. */
56
+ function resetNativeQuotaState() {
57
+ Object.assign(claudeState, freshProviderState());
58
+ }
59
+ exports.resetNativeQuotaState = resetNativeQuotaState;
60
+ // ============================================================================
61
+ // Helpers
62
+ // ============================================================================
63
+ function defaultSleep(ms) {
64
+ return new Promise((resolve) => setTimeout(resolve, ms));
65
+ }
66
+ /** Parse Retry-After (seconds or HTTP-date) into ms, capped at MAX_BACKOFF_MS. */
67
+ function parseRetryAfterMs(detail, now) {
68
+ if (!detail)
69
+ return null;
70
+ const match = /retry-after:(.+)$/.exec(detail);
71
+ if (!match)
72
+ return null;
73
+ const raw = match[1].trim();
74
+ const asSeconds = Number(raw);
75
+ if (Number.isFinite(asSeconds)) {
76
+ return Math.min(Math.max(0, asSeconds) * 1000, MAX_BACKOFF_MS);
77
+ }
78
+ const asDate = Date.parse(raw);
79
+ if (Number.isFinite(asDate)) {
80
+ return Math.min(Math.max(0, asDate - now), MAX_BACKOFF_MS);
81
+ }
82
+ return null;
83
+ }
84
+ function computeBackoffMs(attempt) {
85
+ const exp = Math.min(RETRY_BASE_MS * 2 ** attempt, MAX_BACKOFF_MS);
86
+ const jitter = Math.floor(Math.random() * JITTER_MAX_MS);
87
+ return exp + jitter;
88
+ }
89
+ /**
90
+ * Best-guess remaining percentage across the 5h + weekly core windows, mirroring
91
+ * the CLIProxy quota-manager derivation: min of remaining across non-overage
92
+ * windows, falling back to all windows if core summary is absent.
93
+ */
94
+ function deriveClaudeQuotaPercentage(quota) {
95
+ const coreWindows = [quota.coreUsage?.fiveHour, quota.coreUsage?.weekly].filter((w) => !!w);
96
+ if (coreWindows.length > 0) {
97
+ return Math.min(...coreWindows.map((w) => w.remainingPercent));
98
+ }
99
+ const usageWindows = quota.windows.filter((w) => w.rateLimitType !== 'overage');
100
+ if (usageWindows.length > 0) {
101
+ return Math.min(...usageWindows.map((w) => w.remainingPercent));
102
+ }
103
+ return null;
104
+ }
105
+ /** Soonest non-null reset ISO across the two core windows. */
106
+ function deriveClaudeNextReset(quota) {
107
+ const resets = [quota.coreUsage?.fiveHour?.resetAt, quota.coreUsage?.weekly?.resetAt]
108
+ .filter((r) => typeof r === 'string')
109
+ .map((r) => ({ iso: r, ms: new Date(r).getTime() }))
110
+ .filter((r) => Number.isFinite(r.ms))
111
+ .sort((a, b) => a.ms - b.ms);
112
+ return resets.length > 0 ? resets[0].iso : null;
113
+ }
114
+ /** Window length in minutes by Claude rate-limit family. */
115
+ const FIVE_HOUR_MINUTES = 300;
116
+ const SEVEN_DAY_MINUTES = 10080;
117
+ /**
118
+ * Build the per-window detail for a Claude subscription row.
119
+ *
120
+ * 5h + weekly come from coreUsage (the canonical core summary). Opus/Sonnet
121
+ * weekly splits come from quota.windows[] and only exist on Max plans, so they
122
+ * are omitted entirely when absent. Each window carries BOTH used and remaining
123
+ * percent so the bar never re-derives them.
124
+ */
125
+ function buildClaudeQuotaWindows(quota) {
126
+ const windows = [];
127
+ const fiveHour = quota.coreUsage?.fiveHour;
128
+ if (fiveHour) {
129
+ windows.push({
130
+ key: 'five_hour',
131
+ label: '5h',
132
+ usedPercent: 100 - fiveHour.remainingPercent,
133
+ remainingPercent: fiveHour.remainingPercent,
134
+ resetAt: fiveHour.resetAt,
135
+ windowMinutes: FIVE_HOUR_MINUTES,
136
+ });
137
+ }
138
+ const weekly = quota.coreUsage?.weekly;
139
+ if (weekly) {
140
+ windows.push({
141
+ key: 'seven_day',
142
+ label: 'week',
143
+ usedPercent: 100 - weekly.remainingPercent,
144
+ remainingPercent: weekly.remainingPercent,
145
+ resetAt: weekly.resetAt,
146
+ windowMinutes: SEVEN_DAY_MINUTES,
147
+ });
148
+ }
149
+ // Opus/Sonnet weekly splits are Max-only; surface them when the API carries
150
+ // them, otherwise omit so non-Max plans get exactly the two core windows.
151
+ const splitLabels = {
152
+ seven_day_opus: 'Opus · week',
153
+ seven_day_sonnet: 'Sonnet · week',
154
+ };
155
+ for (const w of quota.windows) {
156
+ const label = splitLabels[w.rateLimitType];
157
+ if (!label)
158
+ continue;
159
+ windows.push({
160
+ key: w.rateLimitType,
161
+ label,
162
+ usedPercent: w.usedPercent,
163
+ remainingPercent: w.remainingPercent,
164
+ resetAt: w.resetAt,
165
+ windowMinutes: SEVEN_DAY_MINUTES,
166
+ });
167
+ }
168
+ return windows;
169
+ }
170
+ function buildClaudeRow(quota, tier, now) {
171
+ const quotaWindows = buildClaudeQuotaWindows(quota);
172
+ return {
173
+ account_id: CLAUDE_PROVIDER,
174
+ provider: CLAUDE_PROVIDER,
175
+ displayName: 'Claude Code',
176
+ tier,
177
+ paused: false,
178
+ quota_percentage: deriveClaudeQuotaPercentage(quota),
179
+ quotaStatus: 'ok',
180
+ next_reset: deriveClaudeNextReset(quota),
181
+ is_default: false,
182
+ last_activity_at: null,
183
+ today_cost: null,
184
+ health: 'ok',
185
+ cached: false,
186
+ fetchedAt: new Date(now).toISOString(),
187
+ needsReauth: false,
188
+ // Omit the field entirely (rather than an empty array) when no windows
189
+ // resolved, so the wire shape stays minimal.
190
+ ...(quotaWindows.length > 0 ? { quotaWindows } : {}),
191
+ };
192
+ }
193
+ /** Map the Codex local windows into the row's per-window detail shape. */
194
+ function buildCodexQuotaWindows(quota) {
195
+ return quota.windows.map((w) => ({
196
+ key: w.key,
197
+ label: w.label,
198
+ usedPercent: w.usedPercent,
199
+ remainingPercent: w.remainingPercent,
200
+ resetAt: w.resetAt,
201
+ windowMinutes: w.windowMinutes,
202
+ }));
203
+ }
204
+ function buildCodexRow(quota, now) {
205
+ const quotaWindows = buildCodexQuotaWindows(quota);
206
+ return {
207
+ account_id: CODEX_PROVIDER,
208
+ provider: CODEX_PROVIDER,
209
+ displayName: 'Codex',
210
+ tier: quota.tier,
211
+ paused: false,
212
+ quota_percentage: quota.quotaPercentage,
213
+ quotaStatus: 'ok',
214
+ next_reset: quota.nextReset,
215
+ is_default: false,
216
+ last_activity_at: null,
217
+ today_cost: null,
218
+ // Codex is a local read; a stale source still reflects real usage so we keep
219
+ // quotaStatus 'ok' but flag health 'warning' to hint freshness.
220
+ health: quota.stale ? 'warning' : 'ok',
221
+ cached: false,
222
+ fetchedAt: new Date(now).toISOString(),
223
+ needsReauth: false,
224
+ ...(quotaWindows.length > 0 ? { quotaWindows } : {}),
225
+ // staleAsOf is only present (and serialized) when the source session is old.
226
+ ...(quota.staleAsOf ? { staleAsOf: quota.staleAsOf } : {}),
227
+ };
228
+ }
229
+ /** Return the cached row marked cached=true (used for TTL + stale serving). */
230
+ function serveCached(state) {
231
+ if (!state.cachedRow)
232
+ return null;
233
+ return { ...state.cachedRow, cached: true };
234
+ }
235
+ // ============================================================================
236
+ // Claude path with full safety controls
237
+ // ============================================================================
238
+ async function collectClaudeRow(deps) {
239
+ const now = (deps.now ?? Date.now)();
240
+ const state = claudeState;
241
+ // Serve from cache while within TTL — on-demand only, NO network.
242
+ if (state.cachedRow && now - state.cachedAt < NATIVE_QUOTA_TTL_MS) {
243
+ return serveCached(state);
244
+ }
245
+ // Breaker open or cooldown active -> zero network, serve stale (may be null).
246
+ if (now < state.breakerOpenUntil || now < state.cooldownUntil) {
247
+ return serveCached(state);
248
+ }
249
+ // Coalesce: concurrent callers past TTL share one in-flight fetch.
250
+ if (state.pending) {
251
+ return state.pending;
252
+ }
253
+ const readCredentials = deps.readCredentials ?? claude_native_credentials_1.readClaudeCredentials;
254
+ const fetchQuota = deps.fetchClaudeQuota ?? quota_fetcher_claude_1.fetchClaudeQuotaWithToken;
255
+ const sleep = deps.sleep ?? defaultSleep;
256
+ state.pending = (async () => {
257
+ try {
258
+ const creds = readCredentials();
259
+ // No token / unsupported subscription -> never spend a call, omit the row.
260
+ if (!creds || !(0, claude_native_credentials_1.hasSupportedSubscription)(creds)) {
261
+ return serveCached(state);
262
+ }
263
+ const token = (0, claude_native_credentials_1.getAccessToken)(creds);
264
+ if (!token) {
265
+ return serveCached(state);
266
+ }
267
+ const tier = (0, claude_native_credentials_1.getSubscriptionTier)(creds);
268
+ const quota = await fetchQuota(token, CLAUDE_PROVIDER);
269
+ if (quota.success) {
270
+ // Success closes the breaker and clears backoff.
271
+ state.consecutive429 = 0;
272
+ state.breakerOpenUntil = 0;
273
+ state.cooldownUntil = 0;
274
+ state.backoffAttempt = 0;
275
+ const row = buildClaudeRow(quota, tier, now);
276
+ state.cachedRow = row;
277
+ state.cachedAt = now;
278
+ return { ...row, cached: false };
279
+ }
280
+ // 401 -> token expired. Emit a reauth row so the bar can prompt; this is
281
+ // a real, actionable state distinct from a transient failure.
282
+ if (quota.needsReauth) {
283
+ const row = {
284
+ account_id: CLAUDE_PROVIDER,
285
+ provider: CLAUDE_PROVIDER,
286
+ displayName: 'Claude Code',
287
+ tier,
288
+ paused: false,
289
+ quota_percentage: null,
290
+ quotaStatus: 'error',
291
+ next_reset: null,
292
+ is_default: false,
293
+ last_activity_at: null,
294
+ today_cost: null,
295
+ health: 'error',
296
+ cached: false,
297
+ fetchedAt: new Date(now).toISOString(),
298
+ needsReauth: true,
299
+ };
300
+ // Do not cache the reauth row as a good value; it should re-evaluate
301
+ // once the user re-auths. But return it now.
302
+ return row;
303
+ }
304
+ // 429 / 5xx / transient. Apply backoff + breaker, then serve stale.
305
+ const is429 = quota.httpStatus === 429;
306
+ if (is429) {
307
+ state.consecutive429 += 1;
308
+ if (state.consecutive429 >= CB_TRIP_THRESHOLD) {
309
+ state.breakerOpenUntil = now + CB_COOLDOWN_MS;
310
+ }
311
+ const retryAfter = parseRetryAfterMs(quota.errorDetail, now);
312
+ const backoff = retryAfter ?? computeBackoffMs(state.backoffAttempt);
313
+ state.cooldownUntil = now + backoff;
314
+ state.backoffAttempt += 1;
315
+ // We do NOT sleep-then-retry inside the request path (that would burn
316
+ // the request budget). The cooldown gates the NEXT call instead.
317
+ void sleep; // retained as an injectable seam for future inline retry
318
+ }
319
+ else if (quota.retryable) {
320
+ const backoff = computeBackoffMs(state.backoffAttempt);
321
+ state.cooldownUntil = now + backoff;
322
+ state.backoffAttempt += 1;
323
+ }
324
+ // Serve last good row on failure; omit if we never succeeded.
325
+ return serveCached(state);
326
+ }
327
+ catch {
328
+ // Network/parse rejection -> treat as transient, serve stale.
329
+ const backoff = computeBackoffMs(state.backoffAttempt);
330
+ state.cooldownUntil = now + backoff;
331
+ state.backoffAttempt += 1;
332
+ return serveCached(state);
333
+ }
334
+ finally {
335
+ state.pending = null;
336
+ }
337
+ })();
338
+ return state.pending;
339
+ }
340
+ // ============================================================================
341
+ // Codex path (local read, no network guards needed)
342
+ // ============================================================================
343
+ async function collectCodexRow(deps) {
344
+ const now = (deps.now ?? Date.now)();
345
+ const getCodex = deps.getCodexQuota ?? codex_local_quota_collector_1.getCodexLocalQuota;
346
+ try {
347
+ const quota = await getCodex();
348
+ if (!quota)
349
+ return null; // exec-mode / no rate_limits -> omit the row
350
+ return buildCodexRow(quota, now);
351
+ }
352
+ catch {
353
+ return null;
354
+ }
355
+ }
356
+ // ============================================================================
357
+ // Public entry point
358
+ // ============================================================================
359
+ /**
360
+ * Build the native subscription rows (Claude Code + Codex) for /summary.
361
+ *
362
+ * Each path is independently try/caught so one failing source never blocks the
363
+ * other or the response. Returns only rows that represent real data.
364
+ */
365
+ async function getNativeAccountRows(deps = {}) {
366
+ const [claude, codex] = await Promise.all([
367
+ collectClaudeRow(deps).catch(() => null),
368
+ collectCodexRow(deps).catch(() => null),
369
+ ]);
370
+ const rows = [];
371
+ if (claude)
372
+ rows.push(claude);
373
+ if (codex)
374
+ rows.push(codex);
375
+ return rows;
376
+ }
377
+ exports.getNativeAccountRows = getNativeAccountRows;
378
+ //# sourceMappingURL=native-quota-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-quota-collector.js","sourceRoot":"","sources":["../../../src/web-server/usage/native-quota-collector.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;GAiBG;;;AAEH,2EAMqC;AACrC,oFAAsF;AACtF,+EAAyF;AAIzF,+EAA+E;AAC/E,mDAAmD;AACnD,+EAA+E;AAE/E;iDACiD;AACjD,MAAM,mBAAmB,GAAG,MAAO,CAAC,CAAC,aAAa;AAElD,uEAAuE;AACvE,MAAM,aAAa,GAAG,IAAK,CAAC;AAE5B,mFAAmF;AACnF,MAAM,cAAc,GAAG,KAAM,CAAC,CAAC,WAAW;AAE1C,6DAA6D;AAC7D,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,mDAAmD;AACnD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,mEAAmE;AACnE,MAAM,cAAc,GAAG,MAAO,CAAC,CAAC,aAAa;AAE7C,MAAM,eAAe,GAAG,aAAa,CAAC;AACtC,MAAM,cAAc,GAAG,OAAO,CAAC;AAwC/B,SAAS,kBAAkB;IACzB,OAAO;QACL,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;AAEzC,6EAA6E;AAC7E,SAAgB,qBAAqB;IACnC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;AACnD,CAAC;AAFD,sDAEC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,kFAAkF;AAClF,SAAS,iBAAiB,CAAC,MAA0B,EAAE,GAAW;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE5B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,OAAO,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC;IACzD,OAAO,GAAG,GAAG,MAAM,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAAC,KAAwB;IAC3D,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,MAAM,CAC7E,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CACvC,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC;IAChF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8DAA8D;AAC9D,SAAS,qBAAqB,CAAC,KAAwB;IACrD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;SAClF,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;SACnD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACpC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,4DAA4D;AAC5D,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAAC,KAAwB;IACvD,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC3C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,GAAG,GAAG,QAAQ,CAAC,gBAAgB;YAC5C,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,aAAa,EAAE,iBAAiB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,GAAG,GAAG,MAAM,CAAC,gBAAgB;YAC1C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,aAAa,EAAE,iBAAiB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,0EAA0E;IAC1E,MAAM,WAAW,GAA2B;QAC1C,cAAc,EAAE,aAAa;QAC7B,gBAAgB,EAAE,eAAe;KAClC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,CAAC,CAAC,aAAa;YACpB,KAAK;YACL,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,aAAa,EAAE,iBAAiB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,KAAwB,EAAE,IAAmB,EAAE,GAAW;IAChF,MAAM,YAAY,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO;QACL,UAAU,EAAE,eAAe;QAC3B,QAAQ,EAAE,eAAe;QACzB,WAAW,EAAE,aAAa;QAC1B,IAAI;QACJ,MAAM,EAAE,KAAK;QACb,gBAAgB,EAAE,2BAA2B,CAAC,KAAK,CAAC;QACpD,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,qBAAqB,CAAC,KAAK,CAAC;QACxC,UAAU,EAAE,KAAK;QACjB,gBAAgB,EAAE,IAAI;QACtB,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACtC,WAAW,EAAE,KAAK;QAClB,uEAAuE;QACvE,6CAA6C;QAC7C,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,sBAAsB,CAAC,KAAsB;IACpD,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/B,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;QACpC,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,aAAa,EAAE,CAAC,CAAC,aAAa;KAC/B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,KAAsB,EAAE,GAAW;IACxD,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACnD,OAAO;QACL,UAAU,EAAE,cAAc;QAC1B,QAAQ,EAAE,cAAc;QACxB,WAAW,EAAE,OAAO;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK;QACb,gBAAgB,EAAE,KAAK,CAAC,eAAe;QACvC,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,KAAK,CAAC,SAAS;QAC3B,UAAU,EAAE,KAAK;QACjB,gBAAgB,EAAE,IAAI;QACtB,UAAU,EAAE,IAAI;QAChB,6EAA6E;QAC7E,gEAAgE;QAChE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QACtC,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;QACtC,WAAW,EAAE,KAAK;QAClB,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,6EAA6E;QAC7E,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,WAAW,CAAC,KAAoB;IACvC,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,+EAA+E;AAC/E,wCAAwC;AACxC,+EAA+E;AAE/E,KAAK,UAAU,gBAAgB,CAAC,IAAqB;IACnD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,WAAW,CAAC;IAE1B,kEAAkE;IAClE,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,mBAAmB,EAAE,CAAC;QAClE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,8EAA8E;IAC9E,IAAI,GAAG,GAAG,KAAK,CAAC,gBAAgB,IAAI,GAAG,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QAC9D,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,mEAAmE;IACnE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,iDAAqB,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,IAAI,gDAAyB,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC;IAEzC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,IAAmC,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;YAChC,2EAA2E;YAC3E,IAAI,CAAC,KAAK,IAAI,CAAC,IAAA,oDAAwB,EAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,KAAK,GAAG,IAAA,0CAAc,EAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,IAAI,GAAG,IAAA,+CAAmB,EAAC,KAAK,CAAC,CAAC;YAExC,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAEvD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,iDAAiD;gBACjD,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;gBACzB,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC3B,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;gBACxB,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;gBACzB,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;gBAC7C,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;gBACtB,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACrB,OAAO,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACnC,CAAC;YAED,yEAAyE;YACzE,8DAA8D;YAC9D,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAkB;oBACzB,UAAU,EAAE,eAAe;oBAC3B,QAAQ,EAAE,eAAe;oBACzB,WAAW,EAAE,aAAa;oBAC1B,IAAI;oBACJ,MAAM,EAAE,KAAK;oBACb,gBAAgB,EAAE,IAAI;oBACtB,WAAW,EAAE,OAAO;oBACpB,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,KAAK;oBACjB,gBAAgB,EAAE,IAAI;oBACtB,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,OAAO;oBACf,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;oBACtC,WAAW,EAAE,IAAI;iBAClB,CAAC;gBACF,qEAAqE;gBACrE,6CAA6C;gBAC7C,OAAO,GAAG,CAAC;YACb,CAAC;YAED,oEAAoE;YACpE,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC;YACvC,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;gBAC1B,IAAI,KAAK,CAAC,cAAc,IAAI,iBAAiB,EAAE,CAAC;oBAC9C,KAAK,CAAC,gBAAgB,GAAG,GAAG,GAAG,cAAc,CAAC;gBAChD,CAAC;gBACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;gBAC7D,MAAM,OAAO,GAAG,UAAU,IAAI,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACrE,KAAK,CAAC,aAAa,GAAG,GAAG,GAAG,OAAO,CAAC;gBACpC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;gBAC1B,sEAAsE;gBACtE,iEAAiE;gBACjE,KAAK,KAAK,CAAC,CAAC,yDAAyD;YACvE,CAAC;iBAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACvD,KAAK,CAAC,aAAa,GAAG,GAAG,GAAG,OAAO,CAAC;gBACpC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,8DAA8D;YAC9D,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;YAC9D,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACvD,KAAK,CAAC,aAAa,GAAG,GAAG,GAAG,OAAO,CAAC;YACpC,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;YAC1B,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,+EAA+E;AAC/E,oDAAoD;AACpD,+EAA+E;AAE/E,KAAK,UAAU,eAAe,CAAC,IAAqB;IAClD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,gDAAkB,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,6CAA6C;QACtE,OAAO,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E;;;;;GAKG;AACI,KAAK,UAAU,oBAAoB,CAAC,OAAwB,EAAE;IACnE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACxC,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;KACxC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,IAAI,MAAM;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAVD,oDAUC"}
@@ -5,7 +5,7 @@ export interface ProfileScopedUsageData {
5
5
  monthly: MonthlyUsage[];
6
6
  session: SessionUsage[];
7
7
  }
8
- export declare function normalizeProfileQuery(profile?: string): string | undefined;
8
+ export declare function normalizeProfileQuery(profile?: unknown): string | undefined;
9
9
  export declare function annotateUsageProfile(data: ProfileScopedUsageData, profile: string): ProfileScopedUsageData;
10
10
  export declare function filterByProfile<T extends {
11
11
  profile?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"profile-filter.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/profile-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAID,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO1E;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,MAAM,GACd,sBAAsB,CAOxB;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAGhG"}
1
+ {"version":3,"file":"profile-filter.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/profile-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAID,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAY3E;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,sBAAsB,EAC5B,OAAO,EAAE,MAAM,GACd,sBAAsB,CAOxB;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAGhG"}
@@ -3,7 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.filterByProfile = exports.annotateUsageProfile = exports.normalizeProfileQuery = void 0;
4
4
  const PROFILE_NAME_REGEX = /^[A-Za-z0-9._-]+$/;
5
5
  function normalizeProfileQuery(profile) {
6
- const value = profile?.trim();
6
+ if (profile === undefined)
7
+ return undefined;
8
+ if (typeof profile !== 'string') {
9
+ throw new Error('Invalid profile filter');
10
+ }
11
+ const value = profile.trim();
7
12
  if (!value || value === 'all')
8
13
  return undefined;
9
14
  if (!PROFILE_NAME_REGEX.test(value)) {
@@ -1 +1 @@
1
- {"version":3,"file":"profile-filter.js","sourceRoot":"","sources":["../../../src/web-server/usage/profile-filter.ts"],"names":[],"mappings":";;;AASA,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAE/C,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAPD,sDAOC;AAED,SAAgB,oBAAoB,CAClC,IAA4B,EAC5B,OAAe;IAEf,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAVD,oDAUC;AAED,SAAgB,eAAe,CAAiC,IAAS,EAAE,OAAgB;IACzF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AACzD,CAAC;AAHD,0CAGC"}
1
+ {"version":3,"file":"profile-filter.js","sourceRoot":"","sources":["../../../src/web-server/usage/profile-filter.ts"],"names":[],"mappings":";;;AASA,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAE/C,SAAgB,qBAAqB,CAAC,OAAiB;IACrD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAZD,sDAYC;AAED,SAAgB,oBAAoB,CAClC,IAA4B,EAC5B,OAAe;IAEf,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAVD,oDAUC;AAED,SAAgB,eAAe,CAAiC,IAAS,EAAE,OAAgB;IACzF,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AACzD,CAAC;AAHD,0CAGC"}
@@ -19,6 +19,8 @@ export interface DailyUsage {
19
19
  date: string;
20
20
  /** Stable CCS profile name when the source can be attributed to one. */
21
21
  profile?: string;
22
+ /** Account email/id when the source can be attributed to a specific CLIProxy account. */
23
+ accountId?: string;
22
24
  source: string;
23
25
  inputTokens: number;
24
26
  outputTokens: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/types.ts"],"names":[],"mappings":"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"}
@@ -159,6 +159,8 @@ const DEFAULT_WAIT_TIMEOUT_MS = 2000;
159
159
  const DEFAULT_WAIT_POLL_INTERVAL_MS = 100;
160
160
  const DEFAULT_DRAG_STEPS = 5;
161
161
  const MAX_POINTER_ACTIONS = 25;
162
+ const MAX_CLICK_COUNT = 25;
163
+ const MAX_KEY_REPEAT = 25;
162
164
  const SESSION_START_SETTLE_WINDOW_MS = 250;
163
165
  const MAX_ARTIFACT_FILE_BYTES = 5 * 1024 * 1024;
164
166
  const MAX_LOCAL_TRANSFER_FILE_BYTES = 10 * 1024 * 1024;
@@ -454,6 +456,7 @@ function getTools() {
454
456
  clickCount: {
455
457
  type: 'integer',
456
458
  minimum: 1,
459
+ maximum: MAX_CLICK_COUNT,
457
460
  description: 'Optional click count. Defaults to 1.',
458
461
  },
459
462
  },
@@ -519,6 +522,7 @@ function getTools() {
519
522
  repeat: {
520
523
  type: 'integer',
521
524
  minimum: 1,
525
+ maximum: MAX_KEY_REPEAT,
522
526
  description: 'Optional repeat count. Defaults to 1.',
523
527
  },
524
528
  },
@@ -1230,11 +1234,16 @@ function getTools() {
1230
1234
  ];
1231
1235
  }
1232
1236
 
1233
- async function fetchJson(url, options = undefined) {
1237
+ async function fetchOk(url, options = undefined) {
1234
1238
  const response = await fetch(url, options);
1235
1239
  if (!response.ok) {
1236
1240
  throw new Error(`HTTP ${response.status} for ${url}`);
1237
1241
  }
1242
+ return response;
1243
+ }
1244
+
1245
+ async function fetchJson(url, options = undefined) {
1246
+ const response = await fetchOk(url, options);
1238
1247
  return await response.json();
1239
1248
  }
1240
1249
 
@@ -2305,10 +2314,13 @@ function requirePositiveIntegerOrDefault(value, label, fallback) {
2305
2314
  return value;
2306
2315
  }
2307
2316
 
2308
- function requirePositiveInteger(value, label) {
2317
+ function requirePositiveInteger(value, label, maximum = undefined) {
2309
2318
  if (!Number.isInteger(value) || value <= 0) {
2310
2319
  throw new Error(`${label} must be a positive integer`);
2311
2320
  }
2321
+ if (maximum !== undefined && value > maximum) {
2322
+ throw new Error(`${label} must be less than or equal to ${maximum}`);
2323
+ }
2312
2324
  return value;
2313
2325
  }
2314
2326
 
@@ -3555,7 +3567,7 @@ async function handleClick(toolArgs) {
3555
3567
  const clickCount =
3556
3568
  toolArgs.clickCount === undefined
3557
3569
  ? 1
3558
- : requirePositiveInteger(toolArgs.clickCount, 'clickCount');
3570
+ : requirePositiveInteger(toolArgs.clickCount, 'clickCount', MAX_CLICK_COUNT);
3559
3571
 
3560
3572
  const expression = `(() => {
3561
3573
  const selector = JSON.parse(${JSON.stringify(JSON.stringify(selector))});
@@ -3805,7 +3817,9 @@ async function handlePressKey(toolArgs) {
3805
3817
  'Shift',
3806
3818
  ]);
3807
3819
  const repeat =
3808
- toolArgs.repeat === undefined ? 1 : requirePositiveInteger(toolArgs.repeat, 'repeat');
3820
+ toolArgs.repeat === undefined
3821
+ ? 1
3822
+ : requirePositiveInteger(toolArgs.repeat, 'repeat', MAX_KEY_REPEAT);
3809
3823
  const modifierMask =
3810
3824
  (modifiers.includes('Alt') ? 1 : 0) |
3811
3825
  (modifiers.includes('Control') ? 2 : 0) |
@@ -5097,16 +5111,18 @@ async function ensureInterceptSession(page) {
5097
5111
  })
5098
5112
  );
5099
5113
  }
5100
- pushRecentRequest({
5101
- requestId: String(paused.requestId || ''),
5102
- pageId: page.id,
5103
- url: String(paused.request?.url || ''),
5104
- method: String(paused.request?.method || ''),
5105
- resourceType: String(paused.resourceType || ''),
5106
- matchedRuleId: matchedRule ? matchedRule.ruleId : '',
5107
- action,
5108
- statusCode: action === 'fulfill' ? matchedRule.statusCode : 0,
5109
- });
5114
+ if (matchedRule) {
5115
+ pushRecentRequest({
5116
+ requestId: String(paused.requestId || ''),
5117
+ pageId: page.id,
5118
+ url: String(paused.request?.url || ''),
5119
+ method: String(paused.request?.method || ''),
5120
+ resourceType: String(paused.resourceType || ''),
5121
+ matchedRuleId: matchedRule.ruleId,
5122
+ action,
5123
+ statusCode: action === 'fulfill' ? matchedRule.statusCode : 0,
5124
+ });
5125
+ }
5110
5126
  })();
5111
5127
  activityChain = activityChain
5112
5128
  .catch(() => {})
@@ -5193,7 +5209,7 @@ async function handleClosePage(toolArgs) {
5193
5209
  activeRecordingSession = null;
5194
5210
  }
5195
5211
 
5196
- await fetchJson(`${getHttpUrl()}/json/close/${encodeURIComponent(page.id)}`);
5212
+ await fetchOk(`${getHttpUrl()}/json/close/${encodeURIComponent(page.id)}`, { method: 'PUT' });
5197
5213
  const interceptSession = interceptSessionsByPageId.get(page.id);
5198
5214
  if (interceptSession) {
5199
5215
  closeSocket(interceptSession.ws);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaitranntt/ccs",
3
- "version": "8.1.4",
3
+ "version": "8.2.0-dev.1",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude, GLM, Kimi, and more",
5
5
  "keywords": [
6
6
  "cli",
@@ -22,18 +22,6 @@ __ccs_completion_run() {
22
22
  local current="$1"
23
23
  shift || true
24
24
 
25
- local script_dir repo_root repo_cli
26
- script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
27
- repo_root="$(cd "${script_dir}/../.." && pwd)"
28
- repo_cli="${repo_root}/dist/ccs.js"
29
- if [[ ! -f "${repo_cli}" ]]; then
30
- repo_cli="${repo_root}/bin/ccs.js"
31
- fi
32
- if [[ -f "${repo_cli}" ]]; then
33
- node "${repo_cli}" __complete --shell bash --current "${current}" -- "$@" 2>/dev/null
34
- return 0
35
- fi
36
-
37
25
  if command -v ccs >/dev/null 2>&1; then
38
26
  ccs __complete --shell bash --current "${current}" -- "$@" 2>/dev/null
39
27
  fi
@@ -11,17 +11,6 @@ function __fish_ccs_complete
11
11
  set -e tokens_before_current[-1]
12
12
  end
13
13
 
14
- set -l script_file (status filename)
15
- set -l repo_root (realpath (dirname $script_file)/../.. 2>/dev/null)
16
- set -l repo_cli "$repo_root/dist/ccs.js"
17
- if not test -f "$repo_cli"
18
- set repo_cli "$repo_root/bin/ccs.js"
19
- end
20
- if test -f "$repo_cli"
21
- node "$repo_cli" __complete --shell fish --current "$current" -- $tokens_before_current 2>/dev/null
22
- return
23
- end
24
-
25
14
  if command -sq ccs
26
15
  ccs __complete --shell fish --current "$current" -- $tokens_before_current 2>/dev/null
27
16
  end
@@ -6,16 +6,6 @@ function Invoke-CcsCompletionBackend {
6
6
  [string[]]$TokensBeforeCurrent
7
7
  )
8
8
 
9
- $repoRoot = (Resolve-Path (Join-Path $PSScriptRoot '..\..')).Path
10
- $repoCli = Join-Path $repoRoot 'dist\ccs.js'
11
- if (-not (Test-Path $repoCli)) {
12
- $repoCli = Join-Path $repoRoot 'bin\ccs.js'
13
- }
14
- if (Test-Path $repoCli) {
15
- & node $repoCli __complete --shell powershell --current $CurrentWord -- @TokensBeforeCurrent 2>$null
16
- return
17
- }
18
-
19
9
  if (Get-Command ccs -ErrorAction SilentlyContinue) {
20
10
  & ccs __complete --shell powershell --current $CurrentWord -- @TokensBeforeCurrent 2>$null
21
11
  }