@kaitranntt/ccs 8.10.0-dev.2 → 8.10.0-dev.20

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 (309) hide show
  1. package/README.md +17 -5
  2. package/claude-mods/ccs-notices/.claude-plugin/plugin.json +1 -0
  3. package/claude-mods/ccs-notices/hooks/hooks.json +1 -0
  4. package/claude-mods/ccs-notices/hooks/register.ts +67 -0
  5. package/claude-mods/ccs-notices/tsconfig.json +3 -0
  6. package/dist/cliproxy/accounts/account-safety.d.ts +3 -2
  7. package/dist/cliproxy/accounts/account-safety.d.ts.map +1 -1
  8. package/dist/cliproxy/accounts/account-safety.js +23 -35
  9. package/dist/cliproxy/accounts/account-safety.js.map +1 -1
  10. package/dist/cliproxy/accounts/claude-pool-policy-api.d.ts +12 -0
  11. package/dist/cliproxy/accounts/claude-pool-policy-api.d.ts.map +1 -0
  12. package/dist/cliproxy/accounts/claude-pool-policy-api.js +74 -0
  13. package/dist/cliproxy/accounts/claude-pool-policy-api.js.map +1 -0
  14. package/dist/cliproxy/accounts/claude-pool-policy-lease.d.ts +11 -0
  15. package/dist/cliproxy/accounts/claude-pool-policy-lease.d.ts.map +1 -0
  16. package/dist/cliproxy/accounts/claude-pool-policy-lease.js +55 -0
  17. package/dist/cliproxy/accounts/claude-pool-policy-lease.js.map +1 -0
  18. package/dist/cliproxy/accounts/claude-pool-policy-reconciliation.d.ts +13 -0
  19. package/dist/cliproxy/accounts/claude-pool-policy-reconciliation.d.ts.map +1 -0
  20. package/dist/cliproxy/accounts/claude-pool-policy-reconciliation.js +215 -0
  21. package/dist/cliproxy/accounts/claude-pool-policy-reconciliation.js.map +1 -0
  22. package/dist/cliproxy/accounts/claude-pool-policy-runtime.d.ts +19 -0
  23. package/dist/cliproxy/accounts/claude-pool-policy-runtime.d.ts.map +1 -0
  24. package/dist/cliproxy/accounts/claude-pool-policy-runtime.js +65 -0
  25. package/dist/cliproxy/accounts/claude-pool-policy-runtime.js.map +1 -0
  26. package/dist/cliproxy/accounts/claude-pool-policy-state.d.ts +37 -0
  27. package/dist/cliproxy/accounts/claude-pool-policy-state.d.ts.map +1 -0
  28. package/dist/cliproxy/accounts/claude-pool-policy-state.js +205 -0
  29. package/dist/cliproxy/accounts/claude-pool-policy-state.js.map +1 -0
  30. package/dist/cliproxy/accounts/claude-pool-policy.d.ts +48 -0
  31. package/dist/cliproxy/accounts/claude-pool-policy.d.ts.map +1 -0
  32. package/dist/cliproxy/accounts/claude-pool-policy.js +401 -0
  33. package/dist/cliproxy/accounts/claude-pool-policy.js.map +1 -0
  34. package/dist/cliproxy/accounts/drain-order.d.ts +1 -1
  35. package/dist/cliproxy/accounts/drain-order.d.ts.map +1 -1
  36. package/dist/cliproxy/accounts/drain-order.js +17 -0
  37. package/dist/cliproxy/accounts/drain-order.js.map +1 -1
  38. package/dist/cliproxy/accounts/email-account-identity.d.ts.map +1 -1
  39. package/dist/cliproxy/accounts/email-account-identity.js +3 -1
  40. package/dist/cliproxy/accounts/email-account-identity.js.map +1 -1
  41. package/dist/cliproxy/accounts/pool-state.d.ts +1 -1
  42. package/dist/cliproxy/accounts/pool-state.d.ts.map +1 -1
  43. package/dist/cliproxy/accounts/registry-config.d.ts +4 -0
  44. package/dist/cliproxy/accounts/registry-config.d.ts.map +1 -0
  45. package/dist/cliproxy/accounts/registry-config.js +46 -0
  46. package/dist/cliproxy/accounts/registry-config.js.map +1 -0
  47. package/dist/cliproxy/accounts/registry.d.ts.map +1 -1
  48. package/dist/cliproxy/accounts/registry.js +38 -16
  49. package/dist/cliproxy/accounts/registry.js.map +1 -1
  50. package/dist/cliproxy/accounts/session-notices.d.ts +35 -0
  51. package/dist/cliproxy/accounts/session-notices.d.ts.map +1 -0
  52. package/dist/cliproxy/accounts/session-notices.js +147 -0
  53. package/dist/cliproxy/accounts/session-notices.js.map +1 -0
  54. package/dist/cliproxy/accounts/token-file-ops.d.ts +1 -2
  55. package/dist/cliproxy/accounts/token-file-ops.d.ts.map +1 -1
  56. package/dist/cliproxy/accounts/token-file-ops.js +2 -7
  57. package/dist/cliproxy/accounts/token-file-ops.js.map +1 -1
  58. package/dist/cliproxy/accounts/types.d.ts +1 -1
  59. package/dist/cliproxy/accounts/types.d.ts.map +1 -1
  60. package/dist/cliproxy/ai-providers/codex-plan-compatibility.d.ts.map +1 -1
  61. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js +10 -8
  62. package/dist/cliproxy/ai-providers/codex-plan-compatibility.js.map +1 -1
  63. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts +12 -2
  64. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
  65. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +107 -88
  66. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
  67. package/dist/cliproxy/ai-providers/model-id-normalizer.d.ts +1 -1
  68. package/dist/cliproxy/ai-providers/model-id-normalizer.d.ts.map +1 -1
  69. package/dist/cliproxy/ai-providers/model-id-normalizer.js +1 -1
  70. package/dist/cliproxy/ai-providers/model-id-normalizer.js.map +1 -1
  71. package/dist/cliproxy/ai-providers/schema-sanitizer.d.ts +3 -1
  72. package/dist/cliproxy/ai-providers/schema-sanitizer.d.ts.map +1 -1
  73. package/dist/cliproxy/ai-providers/schema-sanitizer.js +3 -1
  74. package/dist/cliproxy/ai-providers/schema-sanitizer.js.map +1 -1
  75. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  76. package/dist/cliproxy/config/env-builder.js +8 -1
  77. package/dist/cliproxy/config/env-builder.js.map +1 -1
  78. package/dist/cliproxy/config/fallback-chain-serializer.d.ts +8 -0
  79. package/dist/cliproxy/config/fallback-chain-serializer.d.ts.map +1 -0
  80. package/dist/cliproxy/config/fallback-chain-serializer.js +67 -0
  81. package/dist/cliproxy/config/fallback-chain-serializer.js.map +1 -0
  82. package/dist/cliproxy/config/generator.d.ts +9 -1
  83. package/dist/cliproxy/config/generator.d.ts.map +1 -1
  84. package/dist/cliproxy/config/generator.js +162 -10
  85. package/dist/cliproxy/config/generator.js.map +1 -1
  86. package/dist/cliproxy/config/thinking-config.js +5 -5
  87. package/dist/cliproxy/config/thinking-config.js.map +1 -1
  88. package/dist/cliproxy/executor/account-resolution.d.ts.map +1 -1
  89. package/dist/cliproxy/executor/account-resolution.js +7 -1
  90. package/dist/cliproxy/executor/account-resolution.js.map +1 -1
  91. package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -1
  92. package/dist/cliproxy/executor/claude-launcher.js +23 -3
  93. package/dist/cliproxy/executor/claude-launcher.js.map +1 -1
  94. package/dist/cliproxy/executor/claude-mods.d.ts +33 -0
  95. package/dist/cliproxy/executor/claude-mods.d.ts.map +1 -0
  96. package/dist/cliproxy/executor/claude-mods.js +121 -0
  97. package/dist/cliproxy/executor/claude-mods.js.map +1 -0
  98. package/dist/cliproxy/executor/env-resolver.js +1 -1
  99. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  100. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  101. package/dist/cliproxy/executor/index.js +2 -1
  102. package/dist/cliproxy/executor/index.js.map +1 -1
  103. package/dist/cliproxy/executor/proxy-chain-builder.d.ts.map +1 -1
  104. package/dist/cliproxy/executor/proxy-chain-builder.js +4 -0
  105. package/dist/cliproxy/executor/proxy-chain-builder.js.map +1 -1
  106. package/dist/cliproxy/model-catalog.d.ts +1 -1
  107. package/dist/cliproxy/model-catalog.d.ts.map +1 -1
  108. package/dist/cliproxy/model-catalog.js +103 -10
  109. package/dist/cliproxy/model-catalog.js.map +1 -1
  110. package/dist/cliproxy/proxy/content-encoding.d.ts +20 -0
  111. package/dist/cliproxy/proxy/content-encoding.d.ts.map +1 -0
  112. package/dist/cliproxy/proxy/content-encoding.js +37 -0
  113. package/dist/cliproxy/proxy/content-encoding.js.map +1 -0
  114. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts +7 -1
  115. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  116. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +71 -109
  117. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  118. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts +13 -0
  119. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -1
  120. package/dist/cliproxy/proxy/upstream-response-timeout.js +26 -1
  121. package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -1
  122. package/dist/cliproxy/quota/quota-fetcher-claude-normalizer.d.ts +17 -4
  123. package/dist/cliproxy/quota/quota-fetcher-claude-normalizer.d.ts.map +1 -1
  124. package/dist/cliproxy/quota/quota-fetcher-claude-normalizer.js +246 -153
  125. package/dist/cliproxy/quota/quota-fetcher-claude-normalizer.js.map +1 -1
  126. package/dist/cliproxy/quota/quota-fetcher-claude-probe-state.d.ts +47 -0
  127. package/dist/cliproxy/quota/quota-fetcher-claude-probe-state.d.ts.map +1 -0
  128. package/dist/cliproxy/quota/quota-fetcher-claude-probe-state.js +160 -0
  129. package/dist/cliproxy/quota/quota-fetcher-claude-probe-state.js.map +1 -0
  130. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts +4 -4
  131. package/dist/cliproxy/quota/quota-fetcher-claude.d.ts.map +1 -1
  132. package/dist/cliproxy/quota/quota-fetcher-claude.js +188 -21
  133. package/dist/cliproxy/quota/quota-fetcher-claude.js.map +1 -1
  134. package/dist/cliproxy/quota/quota-label-sanitizer.d.ts +3 -2
  135. package/dist/cliproxy/quota/quota-label-sanitizer.d.ts.map +1 -1
  136. package/dist/cliproxy/quota/quota-label-sanitizer.js +6 -5
  137. package/dist/cliproxy/quota/quota-label-sanitizer.js.map +1 -1
  138. package/dist/cliproxy/quota/quota-manager.d.ts.map +1 -1
  139. package/dist/cliproxy/quota/quota-manager.js +3 -9
  140. package/dist/cliproxy/quota/quota-manager.js.map +1 -1
  141. package/dist/cliproxy/quota/quota-types.d.ts +17 -0
  142. package/dist/cliproxy/quota/quota-types.d.ts.map +1 -1
  143. package/dist/cliproxy/services/stats-fetcher.d.ts +4 -0
  144. package/dist/cliproxy/services/stats-fetcher.d.ts.map +1 -1
  145. package/dist/cliproxy/services/stats-fetcher.js +14 -1
  146. package/dist/cliproxy/services/stats-fetcher.js.map +1 -1
  147. package/dist/cliproxy/services/usage-compatibility-transformer.d.ts +5 -0
  148. package/dist/cliproxy/services/usage-compatibility-transformer.d.ts.map +1 -1
  149. package/dist/cliproxy/services/usage-compatibility-transformer.js +77 -6
  150. package/dist/cliproxy/services/usage-compatibility-transformer.js.map +1 -1
  151. package/dist/cliproxy/types/config-types.d.ts +3 -0
  152. package/dist/cliproxy/types/config-types.d.ts.map +1 -1
  153. package/dist/commands/api-command/help.d.ts.map +1 -1
  154. package/dist/commands/api-command/help.js +2 -0
  155. package/dist/commands/api-command/help.js.map +1 -1
  156. package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
  157. package/dist/commands/cliproxy/help-subcommand.js +9 -0
  158. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  159. package/dist/commands/cliproxy/order-subcommand.d.ts.map +1 -1
  160. package/dist/commands/cliproxy/order-subcommand.js +86 -44
  161. package/dist/commands/cliproxy/order-subcommand.js.map +1 -1
  162. package/dist/commands/cliproxy/pool-state-renderer.d.ts.map +1 -1
  163. package/dist/commands/cliproxy/pool-state-renderer.js +9 -2
  164. package/dist/commands/cliproxy/pool-state-renderer.js.map +1 -1
  165. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts +1 -2
  166. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.d.ts.map +1 -1
  167. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js +5 -16
  168. package/dist/commands/cliproxy/quota-subcommand/claude-window-helpers.js.map +1 -1
  169. package/dist/commands/cliproxy/quota-subcommand/sections/claude.d.ts.map +1 -1
  170. package/dist/commands/cliproxy/quota-subcommand/sections/claude.js +4 -1
  171. package/dist/commands/cliproxy/quota-subcommand/sections/claude.js.map +1 -1
  172. package/dist/config/schemas/cliproxy.d.ts +16 -1
  173. package/dist/config/schemas/cliproxy.d.ts.map +1 -1
  174. package/dist/config/schemas/cliproxy.js.map +1 -1
  175. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  176. package/dist/cursor/cursor-daemon-entry.js +11 -49
  177. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  178. package/dist/cursor/cursor-daemon.d.ts.map +1 -1
  179. package/dist/cursor/cursor-daemon.js +7 -4
  180. package/dist/cursor/cursor-daemon.js.map +1 -1
  181. package/dist/dispatcher/flows/cliproxy-flow.d.ts.map +1 -1
  182. package/dist/dispatcher/flows/cliproxy-flow.js +1 -0
  183. package/dist/dispatcher/flows/cliproxy-flow.js.map +1 -1
  184. package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -1
  185. package/dist/dispatcher/flows/settings-flow.js +3 -1
  186. package/dist/dispatcher/flows/settings-flow.js.map +1 -1
  187. package/dist/docker/docker-bootstrap.d.ts.map +1 -1
  188. package/dist/docker/docker-bootstrap.js +29 -5
  189. package/dist/docker/docker-bootstrap.js.map +1 -1
  190. package/dist/glmt/glmt-proxy.d.ts +0 -4
  191. package/dist/glmt/glmt-proxy.d.ts.map +1 -1
  192. package/dist/glmt/glmt-proxy.js +6 -21
  193. package/dist/glmt/glmt-proxy.js.map +1 -1
  194. package/dist/management/shared-manager/plugin-layout-internals.d.ts.map +1 -1
  195. package/dist/management/shared-manager/plugin-layout-internals.js +8 -0
  196. package/dist/management/shared-manager/plugin-layout-internals.js.map +1 -1
  197. package/dist/management/shared-manager/plugin-metadata-normalizer.d.ts.map +1 -1
  198. package/dist/management/shared-manager/plugin-metadata-normalizer.js +72 -21
  199. package/dist/management/shared-manager/plugin-metadata-normalizer.js.map +1 -1
  200. package/dist/management/shared-manager/shared-dir-linker.d.ts.map +1 -1
  201. package/dist/management/shared-manager/shared-dir-linker.js +5 -0
  202. package/dist/management/shared-manager/shared-dir-linker.js.map +1 -1
  203. package/dist/management/shared-manager/types.d.ts.map +1 -1
  204. package/dist/management/shared-manager/types.js +4 -1
  205. package/dist/management/shared-manager/types.js.map +1 -1
  206. package/dist/proxy/server/http-helpers.d.ts +6 -1
  207. package/dist/proxy/server/http-helpers.d.ts.map +1 -1
  208. package/dist/proxy/server/http-helpers.js +19 -77
  209. package/dist/proxy/server/http-helpers.js.map +1 -1
  210. package/dist/proxy/server/messages-route.d.ts.map +1 -1
  211. package/dist/proxy/server/messages-route.js +11 -5
  212. package/dist/proxy/server/messages-route.js.map +1 -1
  213. package/dist/shared/claude-pool-policy.d.ts +20 -0
  214. package/dist/shared/claude-pool-policy.d.ts.map +1 -0
  215. package/dist/shared/claude-pool-policy.js +3 -0
  216. package/dist/shared/claude-pool-policy.js.map +1 -0
  217. package/dist/shared/provider-preset-catalog.d.ts +1 -1
  218. package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
  219. package/dist/shared/provider-preset-catalog.js +80 -7
  220. package/dist/shared/provider-preset-catalog.js.map +1 -1
  221. package/dist/targets/droid-provider.d.ts.map +1 -1
  222. package/dist/targets/droid-provider.js +10 -8
  223. package/dist/targets/droid-provider.js.map +1 -1
  224. package/dist/ui/assets/{Trans-BFurXtDk.js → Trans-Dlb02vqu.js} +1 -1
  225. package/dist/ui/assets/{accounts-B_ik6YOD.js → accounts-NMmfEBnl.js} +1 -1
  226. package/dist/ui/assets/{alert-dialog-C6fhMbXC.js → alert-dialog-CLeTz0Di.js} +1 -1
  227. package/dist/ui/assets/{api-CxCFoBC0.js → api-DxGxeHbw.js} +2 -2
  228. package/dist/ui/assets/{auth-section-CtmO77JA.js → auth-section-AI2YNrUB.js} +1 -1
  229. package/dist/ui/assets/{backups-section-BYKnAWUa.js → backups-section-CxyuzCda.js} +1 -1
  230. package/dist/ui/assets/{channels-3uR41jWp.js → channels-SBcIEMn0.js} +1 -1
  231. package/dist/ui/assets/{checkbox-fCmjUiDn.js → checkbox-C1D6YcRy.js} +1 -1
  232. package/dist/ui/assets/{claude-extension-BplTVbCF.js → claude-extension-C3Ik79tl.js} +1 -1
  233. package/dist/ui/assets/cliproxy-BySCuRxu.js +4 -0
  234. package/dist/ui/assets/{cliproxy-ai-providers-D4OTiwA3.js → cliproxy-ai-providers-B8LPZhj3.js} +6 -6
  235. package/dist/ui/assets/{cliproxy-control-panel-DCyhsdm1.js → cliproxy-control-panel-Dsv31SI_.js} +1 -1
  236. package/dist/ui/assets/{codex-BGF20GsK.js → codex-CWZlSLEn.js} +5 -5
  237. package/dist/ui/assets/{confirm-dialog-BtMwDW6c.js → confirm-dialog-tpU9d5TR.js} +1 -1
  238. package/dist/ui/assets/{copilot-r1b0KLFf.js → copilot-C5uwBK-k.js} +1 -1
  239. package/dist/ui/assets/{cursor-BhVKTiz1.js → cursor-BwoYXKM4.js} +1 -1
  240. package/dist/ui/assets/{droid-lol9hAdK.js → droid-Cv6mZctn.js} +2 -2
  241. package/dist/ui/assets/{globalenv-section-B0gg-kuR.js → globalenv-section-CKc1Udhj.js} +1 -1
  242. package/dist/ui/assets/{health-Bu6RFYCP.js → health-Ctfcm6p0.js} +1 -1
  243. package/dist/ui/assets/{index-BbPI5sU_.js → index--TAxR0Iy.js} +1 -1
  244. package/dist/ui/assets/index-0hASk2BU.css +1 -0
  245. package/dist/ui/assets/{index-Pn_n_HFQ.js → index-C2ABCKof.js} +1 -1
  246. package/dist/ui/assets/{index-Djse8iLV.js → index-C5YaR--I.js} +1 -1
  247. package/dist/ui/assets/{index-BmjgsjcO.js → index-CBKaNavQ.js} +1 -1
  248. package/dist/ui/assets/{index-ptYEAEzZ.js → index-DnnSa3K6.js} +1 -1
  249. package/dist/ui/assets/{index-awbhDVzL.js → index-G9JzuSyw.js} +1 -1
  250. package/dist/ui/assets/index-gX7Mi5Ws.js +56 -0
  251. package/dist/ui/assets/{logs-B5Sbi4IG.js → logs-D6LiKkzU.js} +1 -1
  252. package/dist/ui/assets/{masked-input-BnrL_TdT.js → masked-input-CmtENW5h.js} +1 -1
  253. package/dist/ui/assets/proxy-status-widget-DqVBhfEP.js +1 -0
  254. package/dist/ui/assets/{raw-json-settings-editor-panel-PStRjNEl.js → raw-json-settings-editor-panel-C9-_RC57.js} +1 -1
  255. package/dist/ui/assets/{searchable-select-BDpwwNsP.js → searchable-select-BeEQJh2E.js} +1 -1
  256. package/dist/ui/assets/{separator-CJCyWDRS.js → separator-CB-e5SCL.js} +1 -1
  257. package/dist/ui/assets/{shared-6BrToCad.js → shared-GU9wziRt.js} +3 -3
  258. package/dist/ui/assets/{table-CnZev3Iu.js → table-BFrniqUJ.js} +1 -1
  259. package/dist/ui/assets/{updates-BiS0o8aM.js → updates-DYhBCREi.js} +1 -1
  260. package/dist/ui/assets/{use-accounts-89FOqhFc.js → use-accounts-xaNW9KeG.js} +1 -1
  261. package/dist/ui/index.html +2 -2
  262. package/dist/utils/delegation-validator.d.ts.map +1 -1
  263. package/dist/utils/delegation-validator.js +29 -8
  264. package/dist/utils/delegation-validator.js.map +1 -1
  265. package/dist/utils/openai-compat-launch-settings.d.ts +11 -1
  266. package/dist/utils/openai-compat-launch-settings.d.ts.map +1 -1
  267. package/dist/utils/openai-compat-launch-settings.js +55 -5
  268. package/dist/utils/openai-compat-launch-settings.js.map +1 -1
  269. package/dist/utils/request-body.d.ts +40 -0
  270. package/dist/utils/request-body.d.ts.map +1 -0
  271. package/dist/utils/request-body.js +142 -0
  272. package/dist/utils/request-body.js.map +1 -0
  273. package/dist/web-server/index.d.ts +1 -1
  274. package/dist/web-server/index.d.ts.map +1 -1
  275. package/dist/web-server/index.js +4 -1
  276. package/dist/web-server/index.js.map +1 -1
  277. package/dist/web-server/jsonl-parser.d.ts +2 -0
  278. package/dist/web-server/jsonl-parser.d.ts.map +1 -1
  279. package/dist/web-server/jsonl-parser.js +54 -4
  280. package/dist/web-server/jsonl-parser.js.map +1 -1
  281. package/dist/web-server/model-pricing.d.ts.map +1 -1
  282. package/dist/web-server/model-pricing.js +99 -1
  283. package/dist/web-server/model-pricing.js.map +1 -1
  284. package/dist/web-server/routes/bar-pool-account-quota-adapter.d.ts.map +1 -1
  285. package/dist/web-server/routes/bar-pool-account-quota-adapter.js +1 -3
  286. package/dist/web-server/routes/bar-pool-account-quota-adapter.js.map +1 -1
  287. package/dist/web-server/routes/cliproxy-routing-routes.d.ts.map +1 -1
  288. package/dist/web-server/routes/cliproxy-routing-routes.js +16 -0
  289. package/dist/web-server/routes/cliproxy-routing-routes.js.map +1 -1
  290. package/dist/web-server/shutdown.d.ts +2 -3
  291. package/dist/web-server/shutdown.d.ts.map +1 -1
  292. package/dist/web-server/shutdown.js +16 -8
  293. package/dist/web-server/shutdown.js.map +1 -1
  294. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts +6 -0
  295. package/dist/web-server/usage/cliproxy-usage-transformer.d.ts.map +1 -1
  296. package/dist/web-server/usage/cliproxy-usage-transformer.js +57 -1
  297. package/dist/web-server/usage/cliproxy-usage-transformer.js.map +1 -1
  298. package/dist/web-server/usage/codex-native-usage-collector.d.ts.map +1 -1
  299. package/dist/web-server/usage/codex-native-usage-collector.js +7 -4
  300. package/dist/web-server/usage/codex-native-usage-collector.js.map +1 -1
  301. package/dist/web-server/usage/native-quota-collector.d.ts.map +1 -1
  302. package/dist/web-server/usage/native-quota-collector.js +35 -67
  303. package/dist/web-server/usage/native-quota-collector.js.map +1 -1
  304. package/package.json +3 -1
  305. package/scripts/run-test-bucket.js +4 -0
  306. package/dist/ui/assets/cliproxy-BdW2ctsn.js +0 -4
  307. package/dist/ui/assets/index-DzFlVVV3.css +0 -1
  308. package/dist/ui/assets/index-pHOoeHgY.js +0 -56
  309. package/dist/ui/assets/proxy-status-widget-ColaQQXh.js +0 -1
@@ -27,6 +27,8 @@ exports.createOpenAICompatLaunchSettings = void 0;
27
27
  const fs = __importStar(require("fs"));
28
28
  const os = __importStar(require("os"));
29
29
  const path = __importStar(require("path"));
30
+ const crypto_1 = require("crypto");
31
+ const config_manager_1 = require("./config-manager");
30
32
  const shell_executor_1 = require("./shell-executor");
31
33
  // SIBLING HELPER: src/cliproxy/executor/launch-settings.ts (prepareLaunchSettings)
32
34
  // solves the same problem by OVERLAYING resolved routing values instead of
@@ -34,9 +36,7 @@ const shell_executor_1 = require("./shell-executor");
34
36
  // delete a routing key (e.g. ANTHROPIC_API_KEY in settings-flow) and need it
35
37
  // ABSENT from the launch settings. Do not unify without an explicit force-absent
36
38
  // key list — see issue #1609.
37
- function createOpenAICompatLaunchSettings(settingsPath, settings) {
38
- const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ccs-openai-compat-settings-'));
39
- fs.chmodSync(tempDir, 0o700);
39
+ function createOpenAICompatLaunchSettings(settingsPath, settings, options) {
40
40
  const launchSettings = JSON.parse(JSON.stringify(settings));
41
41
  const sanitizedEnv = Object.fromEntries(Object.entries((0, shell_executor_1.stripAnthropicRoutingEnv)({ ...(launchSettings.env ?? {}) })).filter((entry) => typeof entry[1] === 'string'));
42
42
  if (Object.keys(sanitizedEnv).length > 0) {
@@ -45,8 +45,53 @@ function createOpenAICompatLaunchSettings(settingsPath, settings) {
45
45
  else {
46
46
  delete launchSettings.env;
47
47
  }
48
+ const contentStr = JSON.stringify(launchSettings, null, 2) + '\n';
49
+ if (options?.durable) {
50
+ // Durable mode: key one private directory per canonical settings path so each
51
+ // profile has exactly one snapshot, atomically replaced on content updates.
52
+ // Do not fall back to $TMPDIR: failure here must fail the launch early rather than
53
+ // causing a deferred background fleet respawn crash (Issue #1734).
54
+ const pathHash = (0, crypto_1.createHash)('sha256')
55
+ .update(path.resolve(settingsPath))
56
+ .digest('hex')
57
+ .slice(0, 16);
58
+ const durableDir = path.join((0, config_manager_1.getCcsDir)(), 'cache', 'isolated-settings', pathHash);
59
+ fs.mkdirSync(durableDir, { recursive: true, mode: 0o700 });
60
+ fs.chmodSync(durableDir, 0o700);
61
+ const launchSettingsPath = path.join(durableDir, path.basename(settingsPath));
62
+ const tempFile = path.join(durableDir, `.${path.basename(settingsPath)}.${(0, crypto_1.randomUUID)()}.tmp`);
63
+ let renamed = false;
64
+ try {
65
+ fs.writeFileSync(tempFile, contentStr, {
66
+ encoding: 'utf8',
67
+ mode: 0o600,
68
+ flag: 'wx',
69
+ });
70
+ fs.renameSync(tempFile, launchSettingsPath);
71
+ renamed = true;
72
+ }
73
+ finally {
74
+ if (!renamed) {
75
+ try {
76
+ fs.unlinkSync(tempFile);
77
+ }
78
+ catch {
79
+ // best-effort cleanup on failure
80
+ }
81
+ }
82
+ }
83
+ return {
84
+ settingsPath: launchSettingsPath,
85
+ cleanup: () => {
86
+ // No-op in durable mode: snapshot persists for background fleet daemon respawns.
87
+ },
88
+ };
89
+ }
90
+ // Ephemeral mode (default / headless): create isolated tempdir in os.tmpdir() and purge on cleanup.
91
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ccs-openai-compat-settings-'));
92
+ fs.chmodSync(tempDir, 0o700);
48
93
  const launchSettingsPath = path.join(tempDir, path.basename(settingsPath));
49
- fs.writeFileSync(launchSettingsPath, JSON.stringify(launchSettings, null, 2) + '\n', {
94
+ fs.writeFileSync(launchSettingsPath, contentStr, {
50
95
  encoding: 'utf8',
51
96
  mode: 0o600,
52
97
  });
@@ -56,7 +101,12 @@ function createOpenAICompatLaunchSettings(settingsPath, settings) {
56
101
  return;
57
102
  }
58
103
  cleanedUp = true;
59
- fs.rmSync(tempDir, { recursive: true, force: true });
104
+ try {
105
+ fs.rmSync(tempDir, { recursive: true, force: true });
106
+ }
107
+ catch {
108
+ // best-effort cleanup
109
+ }
60
110
  };
61
111
  return {
62
112
  settingsPath: launchSettingsPath,
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compat-launch-settings.js","sourceRoot":"","sources":["../../src/utils/openai-compat-launch-settings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAG7B,qDAA4D;AAO5D,mFAAmF;AACnF,2EAA2E;AAC3E,kFAAkF;AAClF,6EAA6E;AAC7E,iFAAiF;AACjF,8BAA8B;AAC9B,SAAgB,gCAAgC,CAC9C,YAAoB,EACpB,QAAkB;IAElB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,6BAA6B,CAAC,CAAC,CAAC;IACtF,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE7B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAa,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,MAAM,CAAC,OAAO,CAAC,IAAA,yCAAwB,EAAC,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAChF,CAAC,KAAK,EAA6B,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CACnE,CACF,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,cAAc,CAAC,GAAG,GAAG,YAAY,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,cAAc,CAAC,GAAG,CAAC;IAC5B,CAAC;IAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3E,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACnF,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;IAEH,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,SAAS,GAAG,IAAI,CAAC;QACjB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,OAAO;QACL,YAAY,EAAE,kBAAkB;QAChC,OAAO;KACR,CAAC;AACJ,CAAC;AAvCD,4EAuCC"}
1
+ {"version":3,"file":"openai-compat-launch-settings.js","sourceRoot":"","sources":["../../src/utils/openai-compat-launch-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Bounded request-body reader shared by the local CCS proxies.
3
+ *
4
+ * An oversized body must end in an HTTP 413, never a reset socket. A reset
5
+ * reaches Claude Code as a bare ECONNRESET that it retries silently for
6
+ * minutes. So past the limit we stop buffering but keep draining the body,
7
+ * and only give up on the connection once it passes DRAIN_CAP_MULTIPLIER
8
+ * times the limit.
9
+ */
10
+ /// <reference types="node" />
11
+ /// <reference types="bun-types" />
12
+ /// <reference types="node" />
13
+ import type * as http from 'http';
14
+ import { type Logger } from '../services/logging';
15
+ export declare const MAX_BODY_ENV_VAR = "CCS_PROXY_MAX_BODY_MB";
16
+ /** Matches the Anthropic Messages API request size limit (32 MB). */
17
+ export declare const DEFAULT_MAX_BODY_MB = 32;
18
+ export declare const REQUEST_TOO_LARGE_ERROR_TYPE = "request_too_large";
19
+ export declare class RequestBodyTooLargeError extends Error {
20
+ readonly receivedBytes: number;
21
+ readonly limitBytes: number;
22
+ /** True when the whole body was read, so the connection can stay open. */
23
+ readonly drained: boolean;
24
+ constructor(receivedBytes: number, limitBytes: number, drained: boolean);
25
+ }
26
+ /**
27
+ * Resolve the body limit from CCS_PROXY_MAX_BODY_MB (MiB, 0 < n <= 1024).
28
+ * Invalid values fall back to the default and log one warning per value.
29
+ */
30
+ export declare function resolveMaxBodyBytes(env?: NodeJS.ProcessEnv): number;
31
+ /**
32
+ * Read the request body as UTF-8. Rejects with RequestBodyTooLargeError when
33
+ * it exceeds `limitBytes`; the socket is never destroyed here.
34
+ */
35
+ export declare function readRequestBody(req: http.IncomingMessage, limitBytes?: number): Promise<string>;
36
+ /** Log an oversized request at warn level: size, limit and path, never the body. */
37
+ export declare function logRequestTooLarge(log: Logger, req: http.IncomingMessage, error: RequestBodyTooLargeError): void;
38
+ /** Log the oversized request and answer it with an Anthropic-shaped 413. */
39
+ export declare function respondRequestTooLarge(req: http.IncomingMessage, res: http.ServerResponse, error: RequestBodyTooLargeError, log: Logger): void;
40
+ //# sourceMappingURL=request-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-body.d.ts","sourceRoot":"","sources":["../../src/utils/request-body.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;;;;AAEH,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC;AAClC,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEhE,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,4BAA4B,sBAAsB,CAAC;AAchE,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAEd,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAaxE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAoBhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,UAAU,GAAE,MAA8B,GACzC,OAAO,CAAC,MAAM,CAAC,CAsDjB;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,KAAK,EAAE,wBAAwB,GAC9B,IAAI,CAQN;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,wBAAwB,EAC/B,GAAG,EAAE,MAAM,GACV,IAAI,CAaN"}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ /**
3
+ * Bounded request-body reader shared by the local CCS proxies.
4
+ *
5
+ * An oversized body must end in an HTTP 413, never a reset socket. A reset
6
+ * reaches Claude Code as a bare ECONNRESET that it retries silently for
7
+ * minutes. So past the limit we stop buffering but keep draining the body,
8
+ * and only give up on the connection once it passes DRAIN_CAP_MULTIPLIER
9
+ * times the limit.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.respondRequestTooLarge = exports.logRequestTooLarge = exports.readRequestBody = exports.resolveMaxBodyBytes = exports.RequestBodyTooLargeError = exports.REQUEST_TOO_LARGE_ERROR_TYPE = exports.DEFAULT_MAX_BODY_MB = exports.MAX_BODY_ENV_VAR = void 0;
13
+ const logging_1 = require("../services/logging");
14
+ exports.MAX_BODY_ENV_VAR = 'CCS_PROXY_MAX_BODY_MB';
15
+ /** Matches the Anthropic Messages API request size limit (32 MB). */
16
+ exports.DEFAULT_MAX_BODY_MB = 32;
17
+ exports.REQUEST_TOO_LARGE_ERROR_TYPE = 'request_too_large';
18
+ const MAX_ALLOWED_BODY_MB = 1024;
19
+ const DRAIN_CAP_MULTIPLIER = 4;
20
+ const BYTES_PER_MB = 1024 * 1024;
21
+ const logger = (0, logging_1.createLogger)('proxy:request-body');
22
+ let lastInvalidLimitValue;
23
+ function formatMb(bytes) {
24
+ const mb = bytes / BYTES_PER_MB;
25
+ return Number.isInteger(mb) ? String(mb) : mb.toFixed(1);
26
+ }
27
+ class RequestBodyTooLargeError extends Error {
28
+ constructor(receivedBytes, limitBytes, drained) {
29
+ const size = drained
30
+ ? `Request is ${formatMb(receivedBytes)} MB`
31
+ : `Request is over ${formatMb(receivedBytes)} MB`;
32
+ super(`${size}, over the ${formatMb(limitBytes)} MB limit of the local ccs proxy ` +
33
+ `(${exports.MAX_BODY_ENV_VAR}). Run /compact or start a new session.`);
34
+ this.name = 'RequestBodyTooLargeError';
35
+ this.receivedBytes = receivedBytes;
36
+ this.limitBytes = limitBytes;
37
+ this.drained = drained;
38
+ }
39
+ }
40
+ exports.RequestBodyTooLargeError = RequestBodyTooLargeError;
41
+ /**
42
+ * Resolve the body limit from CCS_PROXY_MAX_BODY_MB (MiB, 0 < n <= 1024).
43
+ * Invalid values fall back to the default and log one warning per value.
44
+ */
45
+ function resolveMaxBodyBytes(env = process.env) {
46
+ const defaultBytes = exports.DEFAULT_MAX_BODY_MB * BYTES_PER_MB;
47
+ const raw = env[exports.MAX_BODY_ENV_VAR]?.trim();
48
+ if (!raw)
49
+ return defaultBytes;
50
+ const mb = Number(raw);
51
+ if (Number.isFinite(mb) && mb > 0 && mb <= MAX_ALLOWED_BODY_MB) {
52
+ return Math.floor(mb * BYTES_PER_MB);
53
+ }
54
+ if (lastInvalidLimitValue !== raw) {
55
+ lastInvalidLimitValue = raw;
56
+ logger.warn('request-body.invalid-limit', `Ignoring ${exports.MAX_BODY_ENV_VAR}="${raw}": expected a number of MB above 0 and at most ` +
57
+ `${MAX_ALLOWED_BODY_MB}. Using ${exports.DEFAULT_MAX_BODY_MB} MB.`, { value: raw, defaultMb: exports.DEFAULT_MAX_BODY_MB });
58
+ }
59
+ return defaultBytes;
60
+ }
61
+ exports.resolveMaxBodyBytes = resolveMaxBodyBytes;
62
+ /**
63
+ * Read the request body as UTF-8. Rejects with RequestBodyTooLargeError when
64
+ * it exceeds `limitBytes`; the socket is never destroyed here.
65
+ */
66
+ function readRequestBody(req, limitBytes = resolveMaxBodyBytes()) {
67
+ const drainCapBytes = limitBytes * DRAIN_CAP_MULTIPLIER;
68
+ return new Promise((resolve, reject) => {
69
+ let chunks = [];
70
+ let total = 0;
71
+ const cleanup = () => {
72
+ req.off('data', onData);
73
+ req.off('end', onEnd);
74
+ req.off('error', onError);
75
+ req.off('close', onClose);
76
+ };
77
+ const onData = (chunk) => {
78
+ total += chunk.length;
79
+ if (total <= limitBytes) {
80
+ chunks.push(chunk);
81
+ return;
82
+ }
83
+ // Over the limit: free the buffer and keep draining so we can answer 413.
84
+ chunks = [];
85
+ if (total > drainCapBytes) {
86
+ cleanup();
87
+ // Keep the stream flowing so leftover bytes are discarded, not stalled.
88
+ req.resume();
89
+ reject(new RequestBodyTooLargeError(total, limitBytes, false));
90
+ }
91
+ };
92
+ const onEnd = () => {
93
+ cleanup();
94
+ if (total > limitBytes) {
95
+ reject(new RequestBodyTooLargeError(total, limitBytes, true));
96
+ return;
97
+ }
98
+ resolve(Buffer.concat(chunks, total).toString('utf8'));
99
+ };
100
+ const onError = (error) => {
101
+ cleanup();
102
+ reject(error instanceof Error ? error : new Error(String(error)));
103
+ };
104
+ const onClose = () => {
105
+ cleanup();
106
+ reject(new Error('Request closed before the body was fully received'));
107
+ };
108
+ req.on('data', onData);
109
+ req.on('end', onEnd);
110
+ req.on('error', onError);
111
+ req.on('close', onClose);
112
+ });
113
+ }
114
+ exports.readRequestBody = readRequestBody;
115
+ /** Log an oversized request at warn level: size, limit and path, never the body. */
116
+ function logRequestTooLarge(log, req, error) {
117
+ log.warn('request.body-too-large', error.message, {
118
+ method: req.method,
119
+ path: req.url,
120
+ receivedBytes: error.receivedBytes,
121
+ limitBytes: error.limitBytes,
122
+ drained: error.drained,
123
+ });
124
+ }
125
+ exports.logRequestTooLarge = logRequestTooLarge;
126
+ /** Log the oversized request and answer it with an Anthropic-shaped 413. */
127
+ function respondRequestTooLarge(req, res, error, log) {
128
+ logRequestTooLarge(log, req, error);
129
+ if (res.headersSent || res.writableEnded || res.destroyed)
130
+ return;
131
+ const headers = { 'Content-Type': 'application/json' };
132
+ // The rest of the body is still on the wire; ask the client to drop the connection.
133
+ if (!error.drained)
134
+ headers.Connection = 'close';
135
+ res.writeHead(413, headers);
136
+ res.end(JSON.stringify({
137
+ type: 'error',
138
+ error: { type: exports.REQUEST_TOO_LARGE_ERROR_TYPE, message: error.message },
139
+ }));
140
+ }
141
+ exports.respondRequestTooLarge = respondRequestTooLarge;
142
+ //# sourceMappingURL=request-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-body.js","sourceRoot":"","sources":["../../src/utils/request-body.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export interface ServerOptions {
17
17
  export interface ServerInstance {
18
18
  server: http.Server;
19
19
  wss: WebSocketServer;
20
- cleanup: () => void;
20
+ cleanup: () => Promise<void>;
21
21
  }
22
22
  /**
23
23
  * Start Express server with WebSocket support
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;AAGH,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAcrC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,GAAG,EAAE,eAAe,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAQD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAiLjF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;AAGH,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAerC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,GAAG,EAAE,eAAe,CAAC;IACrB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAQD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAmLjF"}
@@ -45,6 +45,7 @@ const sync_1 = require("../cliproxy/sync");
45
45
  const aggregator_1 = require("./usage/aggregator");
46
46
  const logging_1 = require("../services/logging");
47
47
  const config_dashboard_host_1 = require("../commands/config-dashboard-host");
48
+ const claude_pool_policy_1 = require("../cliproxy/accounts/claude-pool-policy");
48
49
  function getListenHost(options) {
49
50
  return options.host || config_dashboard_host_1.DEFAULT_DASHBOARD_HOST;
50
51
  }
@@ -144,11 +145,13 @@ async function startServer(options) {
144
145
  const { cleanup: wsCleanup } = (0, websocket_1.setupWebSocket)(wss);
145
146
  // Start auto-sync watcher (if enabled in config)
146
147
  (0, sync_1.startAutoSyncWatcher)();
148
+ const stopClaudePoolPolicy = (0, claude_pool_policy_1.startClaudePoolPolicyController)();
147
149
  // Combined cleanup function
148
- const cleanup = () => {
150
+ const cleanup = async () => {
149
151
  wsCleanup();
150
152
  (0, sync_1.stopAutoSyncWatcher)().catch(() => { });
151
153
  (0, aggregator_1.shutdownUsageAggregator)();
154
+ await stopClaudePoolPolicy();
152
155
  };
153
156
  // Start listening
154
157
  return new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,8 @@ export interface RawUsageEntry {
22
22
  projectPath: string;
23
23
  version?: string;
24
24
  target?: string;
25
+ /** Shared by every transcript line of one API response; see getDedupeKey */
26
+ dedupeKey?: string;
25
27
  }
26
28
  /** Parser options */
27
29
  export interface ParserOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-parser.d.ts","sourceRoot":"","sources":["../../src/web-server/jsonl-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqBD,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiCD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA4CvF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B1B;AAWD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAqBxF;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAWrE;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAqCjG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAc5D"}
1
+ {"version":3,"file":"jsonl-parser.d.ts","sourceRoot":"","sources":["../../src/web-server/jsonl-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuBD,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8ED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA6CvF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC,CA0B1B;AAWD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAwBxF;AAMD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAWrE;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA0CjG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAc5D"}
@@ -66,6 +66,48 @@ function parseRequiredNonNegativeNumber(value) {
66
66
  function isValidTimestamp(value) {
67
67
  return typeof value === 'string' && Number.isFinite(Date.parse(value));
68
68
  }
69
+ /**
70
+ * Claude Code writes one transcript line per content block, each repeating the
71
+ * response usage, and resumed sessions copy earlier lines into a new file.
72
+ * A request ID pins lines to one response. Without one, only message IDs that
73
+ * are unique per response (Anthropic `msg_`, OpenAI Responses `resp_`) are
74
+ * trusted, since some gateways reuse one placeholder ID for every response.
75
+ */
76
+ function getDedupeKey(entry) {
77
+ const messageId = entry.message.id;
78
+ if (typeof messageId !== 'string' || !messageId)
79
+ return undefined;
80
+ if (typeof entry.requestId === 'string' && entry.requestId) {
81
+ return `${messageId}:${entry.requestId}`;
82
+ }
83
+ return /^(msg|resp)_/.test(messageId) ? messageId : undefined;
84
+ }
85
+ function totalTokens(entry) {
86
+ return entry.inputTokens + entry.outputTokens + entry.cacheCreationTokens + entry.cacheReadTokens;
87
+ }
88
+ /**
89
+ * Count each API response once. Keeps the line with the most tokens, since
90
+ * streaming proxies may only report final usage on the last content block.
91
+ */
92
+ function dedupeResponses(entries) {
93
+ const result = [];
94
+ const indexByKey = new Map();
95
+ for (const entry of entries) {
96
+ if (!entry.dedupeKey) {
97
+ result.push(entry);
98
+ continue;
99
+ }
100
+ const index = indexByKey.get(entry.dedupeKey);
101
+ if (index === undefined) {
102
+ indexByKey.set(entry.dedupeKey, result.length);
103
+ result.push(entry);
104
+ }
105
+ else if (totalTokens(entry) > totalTokens(result[index])) {
106
+ result[index] = entry;
107
+ }
108
+ }
109
+ return result;
110
+ }
69
111
  function parseUsageEntry(line, projectPath) {
70
112
  // Strip UTF-8 BOM if present (can occur on first line of some files)
71
113
  const cleanLine = line.replace(/^\uFEFF/, '').trim();
@@ -103,6 +145,7 @@ function parseUsageEntry(line, projectPath) {
103
145
  target: typeof entry.target === 'string'
104
146
  ? entry.target
105
147
  : undefined,
148
+ dedupeKey: getDedupeKey(assistant),
106
149
  };
107
150
  }
108
151
  catch {
@@ -163,7 +206,10 @@ async function parseProjectDirectory(projectDir) {
163
206
  for (const file of jsonlFiles) {
164
207
  const filePath = path.join(projectDir, file);
165
208
  const fileEntries = await parseJsonlFile(filePath, projectPath);
166
- entries.push(...fileEntries);
209
+ // Append one at a time: spreading a large array as arguments throws a RangeError.
210
+ for (const entry of fileEntries) {
211
+ entries.push(entry);
212
+ }
167
213
  }
168
214
  }
169
215
  catch {
@@ -223,18 +269,22 @@ async function scanProjectsDirectory(options = {}) {
223
269
  const batch = projectDirs.slice(i, i + concurrency);
224
270
  const batchResults = await Promise.all(batch.map((dir) => parseProjectDirectory(dir)));
225
271
  for (const entries of batchResults) {
226
- allEntries.push(...entries);
272
+ // A single project can hold more entries than a spread call accepts as arguments.
273
+ for (const entry of entries) {
274
+ allEntries.push(entry);
275
+ }
227
276
  }
228
277
  }
278
+ const uniqueEntries = dedupeResponses(allEntries);
229
279
  // Filter by date if specified
230
280
  if (options.minDate) {
231
281
  const minTime = options.minDate.getTime();
232
- return allEntries.filter((entry) => {
282
+ return uniqueEntries.filter((entry) => {
233
283
  const entryTime = Date.parse(entry.timestamp);
234
284
  return Number.isFinite(entryTime) && entryTime >= minTime;
235
285
  });
236
286
  }
237
- return allEntries;
287
+ return uniqueEntries;
238
288
  }
239
289
  exports.scanProjectsDirectory = scanProjectsDirectory;
240
290
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl-parser.js","sourceRoot":"","sources":["../../src/web-server/jsonl-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonl-parser.js","sourceRoot":"","sources":["../../src/web-server/jsonl-parser.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"model-pricing.d.ts","sourceRoot":"","sources":["../../src/web-server/model-pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,+BAA+B,CAAC;AAMvC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,6BAA6B;IACzE;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA4gCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,YAAY,CAG/F;AAsCD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAK3F"}
1
+ {"version":3,"file":"model-pricing.d.ts","sourceRoot":"","sources":["../../src/web-server/model-pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,+BAA+B,CAAC;AAMvC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAqB,SAAQ,6BAA6B;IACzE;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+mCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,YAAY,CAG/F;AAqCD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAK3F"}