@kaitranntt/ccs 6.7.0-dev.5 → 6.7.1-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 (623) hide show
  1. package/README.md +45 -23
  2. package/dist/api/index.d.ts +7 -0
  3. package/dist/api/index.d.ts.map +1 -0
  4. package/dist/api/index.js +24 -0
  5. package/dist/api/index.js.map +1 -0
  6. package/dist/api/services/index.d.ts +10 -0
  7. package/dist/api/services/index.d.ts.map +1 -0
  8. package/dist/api/services/index.js +26 -0
  9. package/dist/api/services/index.js.map +1 -0
  10. package/dist/api/services/profile-reader.d.ts +28 -0
  11. package/dist/api/services/profile-reader.d.ts.map +1 -0
  12. package/dist/api/services/profile-reader.js +148 -0
  13. package/dist/api/services/profile-reader.js.map +1 -0
  14. package/dist/api/services/profile-types.d.ts +42 -0
  15. package/dist/api/services/profile-types.d.ts.map +1 -0
  16. package/dist/api/services/profile-types.js +8 -0
  17. package/dist/api/services/profile-types.js.map +1 -0
  18. package/dist/api/services/profile-writer.d.ts +6 -0
  19. package/dist/api/services/profile-writer.d.ts.map +1 -0
  20. package/dist/api/services/profile-writer.js +176 -0
  21. package/dist/api/services/profile-writer.js.map +1 -0
  22. package/dist/api/services/validation-service.d.ts +26 -0
  23. package/dist/api/services/validation-service.d.ts.map +1 -0
  24. package/dist/api/services/validation-service.js +77 -0
  25. package/dist/api/services/validation-service.js.map +1 -0
  26. package/dist/auth/auth-commands.d.ts +16 -22
  27. package/dist/auth/auth-commands.d.ts.map +1 -1
  28. package/dist/auth/auth-commands.js +29 -467
  29. package/dist/auth/auth-commands.js.map +1 -1
  30. package/dist/auth/commands/create-command.d.ts +11 -0
  31. package/dist/auth/commands/create-command.d.ts.map +1 -0
  32. package/dist/auth/commands/create-command.js +137 -0
  33. package/dist/auth/commands/create-command.js.map +1 -0
  34. package/dist/auth/commands/default-command.d.ts +15 -0
  35. package/dist/auth/commands/default-command.d.ts.map +1 -0
  36. package/dist/auth/commands/default-command.js +71 -0
  37. package/dist/auth/commands/default-command.js.map +1 -0
  38. package/dist/auth/commands/index.d.ts +12 -0
  39. package/dist/auth/commands/index.d.ts.map +1 -0
  40. package/dist/auth/commands/index.js +25 -0
  41. package/dist/auth/commands/index.js.map +1 -0
  42. package/dist/auth/commands/list-command.d.ts +11 -0
  43. package/dist/auth/commands/list-command.d.ts.map +1 -0
  44. package/dist/auth/commands/list-command.js +124 -0
  45. package/dist/auth/commands/list-command.js.map +1 -0
  46. package/dist/auth/commands/remove-command.d.ts +11 -0
  47. package/dist/auth/commands/remove-command.d.ts.map +1 -0
  48. package/dist/auth/commands/remove-command.js +102 -0
  49. package/dist/auth/commands/remove-command.js.map +1 -0
  50. package/dist/auth/commands/show-command.d.ts +11 -0
  51. package/dist/auth/commands/show-command.d.ts.map +1 -0
  52. package/dist/auth/commands/show-command.js +103 -0
  53. package/dist/auth/commands/show-command.js.map +1 -0
  54. package/dist/auth/commands/types.d.ts +50 -0
  55. package/dist/auth/commands/types.d.ts.map +1 -0
  56. package/dist/auth/commands/types.js +26 -0
  57. package/dist/auth/commands/types.js.map +1 -0
  58. package/dist/auth/index.d.ts +8 -0
  59. package/dist/auth/index.d.ts.map +1 -0
  60. package/dist/auth/index.js +16 -0
  61. package/dist/auth/index.js.map +1 -0
  62. package/dist/auth/profile-detector.d.ts +0 -5
  63. package/dist/auth/profile-detector.d.ts.map +1 -1
  64. package/dist/auth/profile-detector.js +1 -9
  65. package/dist/auth/profile-detector.js.map +1 -1
  66. package/dist/auth/profile-registry.d.ts +0 -4
  67. package/dist/auth/profile-registry.d.ts.map +1 -1
  68. package/dist/auth/profile-registry.js +3 -10
  69. package/dist/auth/profile-registry.js.map +1 -1
  70. package/dist/ccs.js +21 -4
  71. package/dist/ccs.js.map +1 -1
  72. package/dist/cliproxy/auth/auth-types.d.ts +85 -0
  73. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -0
  74. package/dist/cliproxy/auth/auth-types.js +100 -0
  75. package/dist/cliproxy/auth/auth-types.js.map +1 -0
  76. package/dist/cliproxy/auth/environment-detector.d.ts +30 -0
  77. package/dist/cliproxy/auth/environment-detector.d.ts.map +1 -0
  78. package/dist/cliproxy/auth/environment-detector.js +124 -0
  79. package/dist/cliproxy/auth/environment-detector.js.map +1 -0
  80. package/dist/cliproxy/auth/index.d.ts +11 -0
  81. package/dist/cliproxy/auth/index.d.ts.map +1 -0
  82. package/dist/cliproxy/auth/index.js +35 -0
  83. package/dist/cliproxy/auth/index.js.map +1 -0
  84. package/dist/cliproxy/auth/oauth-handler.d.ts +29 -0
  85. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -0
  86. package/dist/cliproxy/auth/oauth-handler.js +205 -0
  87. package/dist/cliproxy/auth/oauth-handler.js.map +1 -0
  88. package/dist/cliproxy/auth/oauth-process.d.ts +27 -0
  89. package/dist/cliproxy/auth/oauth-process.d.ts.map +1 -0
  90. package/dist/cliproxy/auth/oauth-process.js +209 -0
  91. package/dist/cliproxy/auth/oauth-process.js.map +1 -0
  92. package/dist/cliproxy/auth/token-manager.d.ts +53 -0
  93. package/dist/cliproxy/auth/token-manager.d.ts.map +1 -0
  94. package/dist/cliproxy/auth/token-manager.js +250 -0
  95. package/dist/cliproxy/auth/token-manager.js.map +1 -0
  96. package/dist/cliproxy/auth-handler.d.ts +13 -103
  97. package/dist/cliproxy/auth-handler.d.ts.map +1 -1
  98. package/dist/cliproxy/auth-handler.js +35 -766
  99. package/dist/cliproxy/auth-handler.js.map +1 -1
  100. package/dist/cliproxy/binary/downloader.d.ts +29 -0
  101. package/dist/cliproxy/binary/downloader.d.ts.map +1 -0
  102. package/dist/cliproxy/binary/downloader.js +218 -0
  103. package/dist/cliproxy/binary/downloader.js.map +1 -0
  104. package/dist/cliproxy/binary/extractor.d.ts +12 -0
  105. package/dist/cliproxy/binary/extractor.d.ts.map +1 -0
  106. package/dist/cliproxy/binary/extractor.js +27 -0
  107. package/dist/cliproxy/binary/extractor.js.map +1 -0
  108. package/dist/cliproxy/binary/index.d.ts +13 -0
  109. package/dist/cliproxy/binary/index.d.ts.map +1 -0
  110. package/dist/cliproxy/binary/index.js +53 -0
  111. package/dist/cliproxy/binary/index.js.map +1 -0
  112. package/dist/cliproxy/binary/installer.d.ts +24 -0
  113. package/dist/cliproxy/binary/installer.d.ts.map +1 -0
  114. package/dist/cliproxy/binary/installer.js +117 -0
  115. package/dist/cliproxy/binary/installer.js.map +1 -0
  116. package/dist/cliproxy/binary/lifecycle.d.ts +11 -0
  117. package/dist/cliproxy/binary/lifecycle.d.ts.map +1 -0
  118. package/dist/cliproxy/binary/lifecycle.js +106 -0
  119. package/dist/cliproxy/binary/lifecycle.js.map +1 -0
  120. package/dist/cliproxy/binary/tar-extractor.d.ts +9 -0
  121. package/dist/cliproxy/binary/tar-extractor.d.ts.map +1 -0
  122. package/dist/cliproxy/binary/tar-extractor.js +118 -0
  123. package/dist/cliproxy/binary/tar-extractor.js.map +1 -0
  124. package/dist/cliproxy/binary/types.d.ts +24 -0
  125. package/dist/cliproxy/binary/types.d.ts.map +1 -0
  126. package/dist/cliproxy/binary/types.js +14 -0
  127. package/dist/cliproxy/binary/types.js.map +1 -0
  128. package/dist/cliproxy/binary/updater.d.ts +7 -0
  129. package/dist/cliproxy/binary/updater.d.ts.map +1 -0
  130. package/dist/cliproxy/binary/updater.js +18 -0
  131. package/dist/cliproxy/binary/updater.js.map +1 -0
  132. package/dist/cliproxy/binary/verifier.d.ts +18 -0
  133. package/dist/cliproxy/binary/verifier.d.ts.map +1 -0
  134. package/dist/cliproxy/binary/verifier.js +82 -0
  135. package/dist/cliproxy/binary/verifier.js.map +1 -0
  136. package/dist/cliproxy/binary/version-cache.d.ts +46 -0
  137. package/dist/cliproxy/binary/version-cache.d.ts.map +1 -0
  138. package/dist/cliproxy/binary/version-cache.js +171 -0
  139. package/dist/cliproxy/binary/version-cache.js.map +1 -0
  140. package/dist/cliproxy/binary/version-checker.d.ts +19 -0
  141. package/dist/cliproxy/binary/version-checker.d.ts.map +1 -0
  142. package/dist/cliproxy/binary/version-checker.js +77 -0
  143. package/dist/cliproxy/binary/version-checker.js.map +1 -0
  144. package/dist/cliproxy/binary/zip-extractor.d.ts +9 -0
  145. package/dist/cliproxy/binary/zip-extractor.d.ts.map +1 -0
  146. package/dist/cliproxy/binary/zip-extractor.js +110 -0
  147. package/dist/cliproxy/binary/zip-extractor.js.map +1 -0
  148. package/dist/cliproxy/binary-manager.d.ts +16 -170
  149. package/dist/cliproxy/binary-manager.d.ts.map +1 -1
  150. package/dist/cliproxy/binary-manager.js +38 -865
  151. package/dist/cliproxy/binary-manager.js.map +1 -1
  152. package/dist/cliproxy/services/binary-service.d.ts +65 -0
  153. package/dist/cliproxy/services/binary-service.d.ts.map +1 -0
  154. package/dist/cliproxy/services/binary-service.js +140 -0
  155. package/dist/cliproxy/services/binary-service.js.map +1 -0
  156. package/dist/cliproxy/services/index.d.ts +8 -0
  157. package/dist/cliproxy/services/index.d.ts.map +1 -0
  158. package/dist/cliproxy/services/index.js +31 -0
  159. package/dist/cliproxy/services/index.js.map +1 -0
  160. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts +38 -0
  161. package/dist/cliproxy/services/proxy-lifecycle-service.d.ts.map +1 -0
  162. package/dist/cliproxy/services/proxy-lifecycle-service.js +41 -0
  163. package/dist/cliproxy/services/proxy-lifecycle-service.js.map +1 -0
  164. package/dist/cliproxy/services/variant-config-adapter.d.ts +38 -0
  165. package/dist/cliproxy/services/variant-config-adapter.d.ts.map +1 -0
  166. package/dist/cliproxy/services/variant-config-adapter.js +172 -0
  167. package/dist/cliproxy/services/variant-config-adapter.js.map +1 -0
  168. package/dist/cliproxy/services/variant-service.d.ts +37 -0
  169. package/dist/cliproxy/services/variant-service.d.ts.map +1 -0
  170. package/dist/cliproxy/services/variant-service.js +128 -0
  171. package/dist/cliproxy/services/variant-service.js.map +1 -0
  172. package/dist/cliproxy/services/variant-settings.d.ts +32 -0
  173. package/dist/cliproxy/services/variant-settings.d.ts.map +1 -0
  174. package/dist/cliproxy/services/variant-settings.js +128 -0
  175. package/dist/cliproxy/services/variant-settings.js.map +1 -0
  176. package/dist/commands/api-command.d.ts +3 -6
  177. package/dist/commands/api-command.d.ts.map +1 -1
  178. package/dist/commands/api-command.js +84 -445
  179. package/dist/commands/api-command.js.map +1 -1
  180. package/dist/commands/cliproxy-command.d.ts +0 -3
  181. package/dist/commands/cliproxy-command.d.ts.map +1 -1
  182. package/dist/commands/cliproxy-command.js +182 -621
  183. package/dist/commands/cliproxy-command.js.map +1 -1
  184. package/dist/commands/index.d.ts +17 -0
  185. package/dist/commands/index.d.ts.map +1 -0
  186. package/dist/commands/index.js +33 -0
  187. package/dist/commands/index.js.map +1 -0
  188. package/dist/config/unified-config-loader.d.ts +7 -0
  189. package/dist/config/unified-config-loader.d.ts.map +1 -1
  190. package/dist/config/unified-config-loader.js +11 -1
  191. package/dist/config/unified-config-loader.js.map +1 -1
  192. package/dist/delegation/executor/index.d.ts +7 -0
  193. package/dist/delegation/executor/index.d.ts.map +1 -0
  194. package/dist/delegation/executor/index.js +28 -0
  195. package/dist/delegation/executor/index.js.map +1 -0
  196. package/dist/delegation/executor/result-aggregator.d.ts +30 -0
  197. package/dist/delegation/executor/result-aggregator.d.ts.map +1 -0
  198. package/dist/delegation/executor/result-aggregator.js +66 -0
  199. package/dist/delegation/executor/result-aggregator.js.map +1 -0
  200. package/dist/delegation/executor/stream-parser.d.ts +28 -0
  201. package/dist/delegation/executor/stream-parser.d.ts.map +1 -0
  202. package/dist/delegation/executor/stream-parser.js +140 -0
  203. package/dist/delegation/executor/stream-parser.js.map +1 -0
  204. package/dist/delegation/executor/types.d.ts +121 -0
  205. package/dist/delegation/executor/types.d.ts.map +1 -0
  206. package/dist/delegation/executor/types.js +6 -0
  207. package/dist/delegation/executor/types.js.map +1 -0
  208. package/dist/delegation/headless-executor.d.ts +13 -91
  209. package/dist/delegation/headless-executor.d.ts.map +1 -1
  210. package/dist/delegation/headless-executor.js +84 -291
  211. package/dist/delegation/headless-executor.js.map +1 -1
  212. package/dist/delegation/index.d.ts +11 -0
  213. package/dist/delegation/index.d.ts.map +1 -0
  214. package/dist/delegation/index.js +33 -0
  215. package/dist/delegation/index.js.map +1 -0
  216. package/dist/delegation/result-formatter.d.ts +1 -30
  217. package/dist/delegation/result-formatter.d.ts.map +1 -1
  218. package/dist/delegation/result-formatter.js.map +1 -1
  219. package/dist/errors/cleanup-registry.d.ts +64 -0
  220. package/dist/errors/cleanup-registry.d.ts.map +1 -0
  221. package/dist/errors/cleanup-registry.js +141 -0
  222. package/dist/errors/cleanup-registry.js.map +1 -0
  223. package/dist/errors/error-handler.d.ts +45 -0
  224. package/dist/errors/error-handler.d.ts.map +1 -0
  225. package/dist/errors/error-handler.js +150 -0
  226. package/dist/errors/error-handler.js.map +1 -0
  227. package/dist/errors/error-types.d.ts +102 -0
  228. package/dist/errors/error-types.d.ts.map +1 -0
  229. package/dist/errors/error-types.js +158 -0
  230. package/dist/errors/error-types.js.map +1 -0
  231. package/dist/errors/exit-codes.d.ts +49 -0
  232. package/dist/errors/exit-codes.d.ts.map +1 -0
  233. package/dist/errors/exit-codes.js +72 -0
  234. package/dist/errors/exit-codes.js.map +1 -0
  235. package/dist/errors/index.d.ts +29 -0
  236. package/dist/errors/index.d.ts.map +1 -0
  237. package/dist/errors/index.js +62 -0
  238. package/dist/errors/index.js.map +1 -0
  239. package/dist/glmt/glmt-transformer.d.ts +29 -248
  240. package/dist/glmt/glmt-transformer.d.ts.map +1 -1
  241. package/dist/glmt/glmt-transformer.js +63 -718
  242. package/dist/glmt/glmt-transformer.js.map +1 -1
  243. package/dist/glmt/index.d.ts +14 -0
  244. package/dist/glmt/index.d.ts.map +1 -0
  245. package/dist/glmt/index.js +41 -0
  246. package/dist/glmt/index.js.map +1 -0
  247. package/dist/glmt/pipeline/content-transformer.d.ts +39 -0
  248. package/dist/glmt/pipeline/content-transformer.d.ts.map +1 -0
  249. package/dist/glmt/pipeline/content-transformer.js +162 -0
  250. package/dist/glmt/pipeline/content-transformer.js.map +1 -0
  251. package/dist/glmt/pipeline/index.d.ts +12 -0
  252. package/dist/glmt/pipeline/index.d.ts.map +1 -0
  253. package/dist/glmt/pipeline/index.js +20 -0
  254. package/dist/glmt/pipeline/index.js.map +1 -0
  255. package/dist/glmt/pipeline/request-transformer.d.ts +31 -0
  256. package/dist/glmt/pipeline/request-transformer.d.ts.map +1 -0
  257. package/dist/glmt/pipeline/request-transformer.js +116 -0
  258. package/dist/glmt/pipeline/request-transformer.js.map +1 -0
  259. package/dist/glmt/pipeline/response-builder.d.ts +52 -0
  260. package/dist/glmt/pipeline/response-builder.d.ts.map +1 -0
  261. package/dist/glmt/pipeline/response-builder.js +205 -0
  262. package/dist/glmt/pipeline/response-builder.js.map +1 -0
  263. package/dist/glmt/pipeline/stream-parser.d.ts +59 -0
  264. package/dist/glmt/pipeline/stream-parser.d.ts.map +1 -0
  265. package/dist/glmt/pipeline/stream-parser.js +241 -0
  266. package/dist/glmt/pipeline/stream-parser.js.map +1 -0
  267. package/dist/glmt/pipeline/tool-call-handler.d.ts +22 -0
  268. package/dist/glmt/pipeline/tool-call-handler.d.ts.map +1 -0
  269. package/dist/glmt/pipeline/tool-call-handler.js +87 -0
  270. package/dist/glmt/pipeline/tool-call-handler.js.map +1 -0
  271. package/dist/glmt/pipeline/types.d.ts +159 -0
  272. package/dist/glmt/pipeline/types.d.ts.map +1 -0
  273. package/dist/glmt/pipeline/types.js +6 -0
  274. package/dist/glmt/pipeline/types.js.map +1 -0
  275. package/dist/management/checks/cliproxy-check.d.ts +37 -0
  276. package/dist/management/checks/cliproxy-check.d.ts.map +1 -0
  277. package/dist/management/checks/cliproxy-check.js +187 -0
  278. package/dist/management/checks/cliproxy-check.js.map +1 -0
  279. package/dist/management/checks/config-check.d.ts +27 -0
  280. package/dist/management/checks/config-check.d.ts.map +1 -0
  281. package/dist/management/checks/config-check.js +158 -0
  282. package/dist/management/checks/config-check.js.map +1 -0
  283. package/dist/management/checks/env-check.d.ts +17 -0
  284. package/dist/management/checks/env-check.d.ts.map +1 -0
  285. package/dist/management/checks/env-check.js +71 -0
  286. package/dist/management/checks/env-check.js.map +1 -0
  287. package/dist/management/checks/index.d.ts +12 -0
  288. package/dist/management/checks/index.d.ts.map +1 -0
  289. package/dist/management/checks/index.js +48 -0
  290. package/dist/management/checks/index.js.map +1 -0
  291. package/dist/management/checks/oauth-check.d.ts +16 -0
  292. package/dist/management/checks/oauth-check.d.ts.map +1 -0
  293. package/dist/management/checks/oauth-check.js +68 -0
  294. package/dist/management/checks/oauth-check.js.map +1 -0
  295. package/dist/management/checks/profile-check.d.ts +36 -0
  296. package/dist/management/checks/profile-check.d.ts.map +1 -0
  297. package/dist/management/checks/profile-check.js +165 -0
  298. package/dist/management/checks/profile-check.js.map +1 -0
  299. package/dist/management/checks/symlink-check.d.ts +30 -0
  300. package/dist/management/checks/symlink-check.d.ts.map +1 -0
  301. package/dist/management/checks/symlink-check.js +204 -0
  302. package/dist/management/checks/symlink-check.js.map +1 -0
  303. package/dist/management/checks/system-check.d.ts +25 -0
  304. package/dist/management/checks/system-check.d.ts.map +1 -0
  305. package/dist/management/checks/system-check.js +136 -0
  306. package/dist/management/checks/system-check.js.map +1 -0
  307. package/dist/management/checks/types.d.ts +64 -0
  308. package/dist/management/checks/types.d.ts.map +1 -0
  309. package/dist/management/checks/types.js +63 -0
  310. package/dist/management/checks/types.js.map +1 -0
  311. package/dist/management/doctor.d.ts +3 -92
  312. package/dist/management/doctor.d.ts.map +1 -1
  313. package/dist/management/doctor.js +15 -831
  314. package/dist/management/doctor.js.map +1 -1
  315. package/dist/management/index.d.ts +15 -0
  316. package/dist/management/index.d.ts.map +1 -0
  317. package/dist/management/index.js +56 -0
  318. package/dist/management/index.js.map +1 -0
  319. package/dist/management/repair/auto-repair.d.ts +13 -0
  320. package/dist/management/repair/auto-repair.d.ts.map +1 -0
  321. package/dist/management/repair/auto-repair.js +170 -0
  322. package/dist/management/repair/auto-repair.js.map +1 -0
  323. package/dist/management/repair/index.d.ts +5 -0
  324. package/dist/management/repair/index.d.ts.map +1 -0
  325. package/dist/management/repair/index.js +9 -0
  326. package/dist/management/repair/index.js.map +1 -0
  327. package/dist/types/delegation.d.ts +1 -13
  328. package/dist/types/delegation.d.ts.map +1 -1
  329. package/dist/types/utils.d.ts +27 -0
  330. package/dist/types/utils.d.ts.map +1 -1
  331. package/dist/ui/assets/{accounts-p1_nf0Jy.js → accounts-BqDNXZu4.js} +1 -1
  332. package/dist/ui/assets/analytics-DQMyOsqI.js +1 -0
  333. package/dist/ui/assets/api-Bzyq4XP7.js +1 -0
  334. package/dist/ui/assets/{card-CCDc-Mx9.js → card-CIN0KDsX.js} +1 -1
  335. package/dist/ui/assets/cliproxy-5iKdPrEG.js +3 -0
  336. package/dist/ui/assets/cliproxy-control-panel-CJ2CfYod.js +1 -0
  337. package/dist/ui/assets/{code-editor-Br9x-r-E.js → code-editor-CDmNFLQ6.js} +1 -1
  338. package/dist/ui/assets/confirm-dialog-CaiDQikc.js +1 -0
  339. package/dist/ui/assets/copilot-nS6iAyk2.js +4 -0
  340. package/dist/ui/assets/form-utils-DP6ILe7Z.js +20 -0
  341. package/dist/ui/assets/health-DYOQfC7u.js +1 -0
  342. package/dist/ui/assets/{icons-BOsxPbiD.js → icons-ZmwVoUeR.js} +1 -1
  343. package/dist/ui/assets/index-C6Dah-xh.js +46 -0
  344. package/dist/ui/assets/index-It66SkKf.css +1 -0
  345. package/dist/ui/assets/{radix-ui-DFHQr9A5.js → radix-ui-CV3R9pD6.js} +3 -3
  346. package/dist/ui/assets/settings-DABC9b5G.js +1 -0
  347. package/dist/ui/assets/{shared-BfYhSN4-.js → shared-BwU4OKQc.js} +1 -1
  348. package/dist/ui/assets/{switch-CMk95lwf.js → switch-BQ6sBBUv.js} +1 -1
  349. package/dist/ui/assets/{tanstack-C4gT2P7V.js → tanstack-Df9bCj5R.js} +1 -1
  350. package/dist/ui/index.html +6 -6
  351. package/dist/utils/claude-spawner.d.ts +54 -0
  352. package/dist/utils/claude-spawner.d.ts.map +1 -0
  353. package/dist/utils/claude-spawner.js +118 -0
  354. package/dist/utils/claude-spawner.js.map +1 -0
  355. package/dist/utils/delegation-validator.d.ts +8 -4
  356. package/dist/utils/delegation-validator.d.ts.map +1 -1
  357. package/dist/utils/delegation-validator.js.map +1 -1
  358. package/dist/utils/helpers.d.ts +0 -11
  359. package/dist/utils/helpers.d.ts.map +1 -1
  360. package/dist/utils/helpers.js +1 -57
  361. package/dist/utils/helpers.js.map +1 -1
  362. package/dist/utils/index.d.ts +15 -0
  363. package/dist/utils/index.d.ts.map +1 -0
  364. package/dist/utils/index.js +50 -0
  365. package/dist/utils/index.js.map +1 -0
  366. package/dist/utils/time.d.ts +10 -0
  367. package/dist/utils/time.d.ts.map +1 -0
  368. package/dist/utils/time.js +27 -0
  369. package/dist/utils/time.js.map +1 -0
  370. package/dist/utils/ui/boxes.d.ts +24 -0
  371. package/dist/utils/ui/boxes.d.ts.map +1 -0
  372. package/dist/utils/ui/boxes.js +108 -0
  373. package/dist/utils/ui/boxes.js.map +1 -0
  374. package/dist/utils/ui/colors.d.ts +25 -0
  375. package/dist/utils/ui/colors.d.ts.map +1 -0
  376. package/dist/utils/ui/colors.js +70 -0
  377. package/dist/utils/ui/colors.js.map +1 -0
  378. package/dist/utils/ui/index.d.ts +51 -0
  379. package/dist/utils/ui/index.d.ts.map +1 -0
  380. package/dist/utils/ui/index.js +96 -0
  381. package/dist/utils/ui/index.js.map +1 -0
  382. package/dist/utils/ui/indicators.d.ts +23 -0
  383. package/dist/utils/ui/indicators.d.ts.map +1 -0
  384. package/dist/utils/ui/indicators.js +39 -0
  385. package/dist/utils/ui/indicators.js.map +1 -0
  386. package/dist/utils/ui/init.d.ts +30 -0
  387. package/dist/utils/ui/init.d.ts.map +1 -0
  388. package/dist/utils/ui/init.js +102 -0
  389. package/dist/utils/ui/init.js.map +1 -0
  390. package/dist/utils/ui/spinner.d.ts +13 -0
  391. package/dist/utils/ui/spinner.d.ts.map +1 -0
  392. package/dist/utils/ui/spinner.js +89 -0
  393. package/dist/utils/ui/spinner.js.map +1 -0
  394. package/dist/utils/ui/tables.d.ts +12 -0
  395. package/dist/utils/ui/tables.d.ts.map +1 -0
  396. package/dist/utils/ui/tables.js +69 -0
  397. package/dist/utils/ui/tables.js.map +1 -0
  398. package/dist/utils/ui/tasks.d.ts +26 -0
  399. package/dist/utils/ui/tasks.d.ts.map +1 -0
  400. package/dist/utils/ui/tasks.js +102 -0
  401. package/dist/utils/ui/tasks.js.map +1 -0
  402. package/dist/utils/ui/text.d.ts +24 -0
  403. package/dist/utils/ui/text.d.ts.map +1 -0
  404. package/dist/utils/ui/text.js +60 -0
  405. package/dist/utils/ui/text.js.map +1 -0
  406. package/dist/utils/ui/types.d.ts +36 -0
  407. package/dist/utils/ui/types.d.ts.map +1 -0
  408. package/dist/utils/ui/types.js +33 -0
  409. package/dist/utils/ui/types.js.map +1 -0
  410. package/dist/utils/ui.d.ts +3 -138
  411. package/dist/utils/ui.d.ts.map +1 -1
  412. package/dist/utils/ui.js +40 -567
  413. package/dist/utils/ui.js.map +1 -1
  414. package/dist/utils/websearch/gemini-cli.d.ts +36 -0
  415. package/dist/utils/websearch/gemini-cli.d.ts.map +1 -0
  416. package/dist/utils/websearch/gemini-cli.js +132 -0
  417. package/dist/utils/websearch/gemini-cli.js.map +1 -0
  418. package/dist/utils/websearch/grok-cli.d.ts +26 -0
  419. package/dist/utils/websearch/grok-cli.d.ts.map +1 -0
  420. package/dist/utils/websearch/grok-cli.js +81 -0
  421. package/dist/utils/websearch/grok-cli.js.map +1 -0
  422. package/dist/utils/websearch/hook-config.d.ts +21 -0
  423. package/dist/utils/websearch/hook-config.d.ts.map +1 -0
  424. package/dist/utils/websearch/hook-config.js +183 -0
  425. package/dist/utils/websearch/hook-config.js.map +1 -0
  426. package/dist/utils/websearch/hook-env.d.ts +16 -0
  427. package/dist/utils/websearch/hook-env.d.ts.map +1 -0
  428. package/dist/utils/websearch/hook-env.js +62 -0
  429. package/dist/utils/websearch/hook-env.js.map +1 -0
  430. package/dist/utils/websearch/hook-installer.d.ts +27 -0
  431. package/dist/utils/websearch/hook-installer.d.ts.map +1 -0
  432. package/dist/utils/websearch/hook-installer.js +141 -0
  433. package/dist/utils/websearch/hook-installer.js.map +1 -0
  434. package/dist/utils/websearch/index.d.ts +15 -0
  435. package/dist/utils/websearch/index.d.ts.map +1 -0
  436. package/dist/utils/websearch/index.js +44 -0
  437. package/dist/utils/websearch/index.js.map +1 -0
  438. package/dist/utils/websearch/opencode-cli.d.ts +26 -0
  439. package/dist/utils/websearch/opencode-cli.d.ts.map +1 -0
  440. package/dist/utils/websearch/opencode-cli.js +81 -0
  441. package/dist/utils/websearch/opencode-cli.js.map +1 -0
  442. package/dist/utils/websearch/status.d.ts +35 -0
  443. package/dist/utils/websearch/status.d.ts.map +1 -0
  444. package/dist/utils/websearch/status.js +185 -0
  445. package/dist/utils/websearch/status.js.map +1 -0
  446. package/dist/utils/websearch/types.d.ts +85 -0
  447. package/dist/utils/websearch/types.d.ts.map +1 -0
  448. package/dist/utils/websearch/types.js +10 -0
  449. package/dist/utils/websearch/types.js.map +1 -0
  450. package/dist/utils/websearch-manager.d.ts +7 -186
  451. package/dist/utils/websearch-manager.d.ts.map +1 -1
  452. package/dist/utils/websearch-manager.js +37 -710
  453. package/dist/utils/websearch-manager.js.map +1 -1
  454. package/dist/web-server/data-aggregator.d.ts +3 -51
  455. package/dist/web-server/data-aggregator.d.ts.map +1 -1
  456. package/dist/web-server/data-aggregator.js +18 -386
  457. package/dist/web-server/data-aggregator.js.map +1 -1
  458. package/dist/web-server/health/cliproxy-checks.d.ts +23 -0
  459. package/dist/web-server/health/cliproxy-checks.d.ts.map +1 -0
  460. package/dist/web-server/health/cliproxy-checks.js +145 -0
  461. package/dist/web-server/health/cliproxy-checks.js.map +1 -0
  462. package/dist/web-server/health/config-checks.d.ts +19 -0
  463. package/dist/web-server/health/config-checks.d.ts.map +1 -0
  464. package/dist/web-server/health/config-checks.js +174 -0
  465. package/dist/web-server/health/config-checks.js.map +1 -0
  466. package/dist/web-server/health/environment-checks.d.ts +11 -0
  467. package/dist/web-server/health/environment-checks.d.ts.map +1 -0
  468. package/dist/web-server/health/environment-checks.js +40 -0
  469. package/dist/web-server/health/environment-checks.js.map +1 -0
  470. package/dist/web-server/health/index.d.ts +13 -0
  471. package/dist/web-server/health/index.d.ts.map +1 -0
  472. package/dist/web-server/health/index.js +41 -0
  473. package/dist/web-server/health/index.js.map +1 -0
  474. package/dist/web-server/health/oauth-checks.d.ts +11 -0
  475. package/dist/web-server/health/oauth-checks.d.ts.map +1 -0
  476. package/dist/web-server/health/oauth-checks.js +34 -0
  477. package/dist/web-server/health/oauth-checks.js.map +1 -0
  478. package/dist/web-server/health/profile-checks.d.ts +19 -0
  479. package/dist/web-server/health/profile-checks.d.ts.map +1 -0
  480. package/dist/web-server/health/profile-checks.js +152 -0
  481. package/dist/web-server/health/profile-checks.js.map +1 -0
  482. package/dist/web-server/health/symlink-checks.d.ts +15 -0
  483. package/dist/web-server/health/symlink-checks.d.ts.map +1 -0
  484. package/dist/web-server/health/symlink-checks.js +173 -0
  485. package/dist/web-server/health/symlink-checks.js.map +1 -0
  486. package/dist/web-server/health/system-checks.d.ts +19 -0
  487. package/dist/web-server/health/system-checks.d.ts.map +1 -0
  488. package/dist/web-server/health/system-checks.js +127 -0
  489. package/dist/web-server/health/system-checks.js.map +1 -0
  490. package/dist/web-server/health/types.d.ts +34 -0
  491. package/dist/web-server/health/types.d.ts.map +1 -0
  492. package/dist/web-server/health/types.js +8 -0
  493. package/dist/web-server/health/types.js.map +1 -0
  494. package/dist/web-server/health/websearch-checks.d.ts +11 -0
  495. package/dist/web-server/health/websearch-checks.d.ts.map +1 -0
  496. package/dist/web-server/health/websearch-checks.js +53 -0
  497. package/dist/web-server/health/websearch-checks.js.map +1 -0
  498. package/dist/web-server/health-service.d.ts +4 -30
  499. package/dist/web-server/health-service.d.ts.map +1 -1
  500. package/dist/web-server/health-service.js +28 -695
  501. package/dist/web-server/health-service.js.map +1 -1
  502. package/dist/web-server/index.d.ts.map +1 -1
  503. package/dist/web-server/index.js +2 -5
  504. package/dist/web-server/index.js.map +1 -1
  505. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +6 -0
  506. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -0
  507. package/dist/web-server/routes/cliproxy-auth-routes.js +202 -0
  508. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -0
  509. package/dist/web-server/routes/cliproxy-stats-routes.d.ts +6 -0
  510. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -0
  511. package/dist/web-server/routes/cliproxy-stats-routes.js +253 -0
  512. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -0
  513. package/dist/web-server/routes/config-routes.d.ts +6 -0
  514. package/dist/web-server/routes/config-routes.d.ts.map +1 -0
  515. package/dist/web-server/routes/config-routes.js +145 -0
  516. package/dist/web-server/routes/config-routes.js.map +1 -0
  517. package/dist/web-server/routes/copilot-routes.d.ts +6 -0
  518. package/dist/web-server/routes/copilot-routes.d.ts.map +1 -0
  519. package/dist/web-server/routes/copilot-routes.js +195 -0
  520. package/dist/web-server/routes/copilot-routes.js.map +1 -0
  521. package/dist/web-server/routes/copilot-settings-routes.d.ts +6 -0
  522. package/dist/web-server/routes/copilot-settings-routes.d.ts.map +1 -0
  523. package/dist/web-server/routes/copilot-settings-routes.js +122 -0
  524. package/dist/web-server/routes/copilot-settings-routes.js.map +1 -0
  525. package/dist/web-server/routes/health-routes.d.ts +6 -0
  526. package/dist/web-server/routes/health-routes.d.ts.map +1 -0
  527. package/dist/web-server/routes/health-routes.js +30 -0
  528. package/dist/web-server/routes/health-routes.js.map +1 -0
  529. package/dist/web-server/routes/index.d.ts +8 -0
  530. package/dist/web-server/routes/index.d.ts.map +1 -0
  531. package/dist/web-server/routes/index.js +54 -0
  532. package/dist/web-server/routes/index.js.map +1 -0
  533. package/dist/web-server/routes/misc-routes.d.ts +6 -0
  534. package/dist/web-server/routes/misc-routes.d.ts.map +1 -0
  535. package/dist/web-server/routes/misc-routes.js +219 -0
  536. package/dist/web-server/routes/misc-routes.js.map +1 -0
  537. package/dist/web-server/routes/profile-routes.d.ts +6 -0
  538. package/dist/web-server/routes/profile-routes.d.ts.map +1 -0
  539. package/dist/web-server/routes/profile-routes.js +164 -0
  540. package/dist/web-server/routes/profile-routes.js.map +1 -0
  541. package/dist/web-server/routes/provider-routes.d.ts +6 -0
  542. package/dist/web-server/routes/provider-routes.d.ts.map +1 -0
  543. package/dist/web-server/routes/provider-routes.js +146 -0
  544. package/dist/web-server/routes/provider-routes.js.map +1 -0
  545. package/dist/web-server/routes/route-helpers.d.ts +55 -0
  546. package/dist/web-server/routes/route-helpers.d.ts.map +1 -0
  547. package/dist/web-server/routes/route-helpers.js +201 -0
  548. package/dist/web-server/routes/route-helpers.js.map +1 -0
  549. package/dist/web-server/routes/settings-routes.d.ts +6 -0
  550. package/dist/web-server/routes/settings-routes.d.ts.map +1 -0
  551. package/dist/web-server/routes/settings-routes.js +207 -0
  552. package/dist/web-server/routes/settings-routes.js.map +1 -0
  553. package/dist/web-server/routes/variant-routes.d.ts +6 -0
  554. package/dist/web-server/routes/variant-routes.d.ts.map +1 -0
  555. package/dist/web-server/routes/variant-routes.js +158 -0
  556. package/dist/web-server/routes/variant-routes.js.map +1 -0
  557. package/dist/web-server/routes/websearch-routes.d.ts +6 -0
  558. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -0
  559. package/dist/web-server/routes/websearch-routes.js +130 -0
  560. package/dist/web-server/routes/websearch-routes.js.map +1 -0
  561. package/dist/web-server/services/index.d.ts +7 -0
  562. package/dist/web-server/services/index.d.ts.map +1 -0
  563. package/dist/web-server/services/index.js +21 -0
  564. package/dist/web-server/services/index.js.map +1 -0
  565. package/dist/web-server/services/usage-aggregator.d.ts +7 -0
  566. package/dist/web-server/services/usage-aggregator.d.ts.map +1 -0
  567. package/dist/web-server/services/usage-aggregator.js +23 -0
  568. package/dist/web-server/services/usage-aggregator.js.map +1 -0
  569. package/dist/web-server/usage/aggregator.d.ts +54 -0
  570. package/dist/web-server/usage/aggregator.d.ts.map +1 -0
  571. package/dist/web-server/usage/aggregator.js +470 -0
  572. package/dist/web-server/usage/aggregator.js.map +1 -0
  573. package/dist/web-server/usage/data-aggregator.d.ts +55 -0
  574. package/dist/web-server/usage/data-aggregator.d.ts.map +1 -0
  575. package/dist/web-server/usage/data-aggregator.js +391 -0
  576. package/dist/web-server/usage/data-aggregator.js.map +1 -0
  577. package/dist/web-server/usage/disk-cache.d.ts +46 -0
  578. package/dist/web-server/usage/disk-cache.d.ts.map +1 -0
  579. package/dist/web-server/usage/disk-cache.js +162 -0
  580. package/dist/web-server/usage/disk-cache.js.map +1 -0
  581. package/dist/web-server/usage/handlers.d.ts +50 -0
  582. package/dist/web-server/usage/handlers.d.ts.map +1 -0
  583. package/dist/web-server/usage/handlers.js +524 -0
  584. package/dist/web-server/usage/handlers.js.map +1 -0
  585. package/dist/web-server/usage/index.d.ts +12 -0
  586. package/dist/web-server/usage/index.d.ts.map +1 -0
  587. package/dist/web-server/usage/index.js +54 -0
  588. package/dist/web-server/usage/index.js.map +1 -0
  589. package/dist/web-server/usage/routes.d.ts +11 -0
  590. package/dist/web-server/usage/routes.d.ts.map +1 -0
  591. package/dist/web-server/usage/routes.js +37 -0
  592. package/dist/web-server/usage/routes.js.map +1 -0
  593. package/dist/web-server/usage/types.d.ts +119 -0
  594. package/dist/web-server/usage/types.d.ts.map +1 -0
  595. package/dist/web-server/usage/types.js +9 -0
  596. package/dist/web-server/usage/types.js.map +1 -0
  597. package/dist/web-server/usage-disk-cache.d.ts +3 -42
  598. package/dist/web-server/usage-disk-cache.d.ts.map +1 -1
  599. package/dist/web-server/usage-disk-cache.js +5 -144
  600. package/dist/web-server/usage-disk-cache.js.map +1 -1
  601. package/dist/web-server/usage-routes.d.ts +3 -31
  602. package/dist/web-server/usage-routes.d.ts.map +1 -1
  603. package/dist/web-server/usage-routes.js +8 -1139
  604. package/dist/web-server/usage-routes.js.map +1 -1
  605. package/dist/web-server/usage-types.d.ts +3 -115
  606. package/dist/web-server/usage-types.d.ts.map +1 -1
  607. package/dist/web-server/usage-types.js +17 -3
  608. package/dist/web-server/usage-types.js.map +1 -1
  609. package/package.json +1 -1
  610. package/dist/ui/assets/analytics-D1k2nYcF.js +0 -1
  611. package/dist/ui/assets/api-D9VVmZ1j.js +0 -1
  612. package/dist/ui/assets/cliproxy-CTt_Nsft.js +0 -1
  613. package/dist/ui/assets/cliproxy-control-panel-DKMAi4_4.js +0 -1
  614. package/dist/ui/assets/copilot-C6F8PT_L.js +0 -4
  615. package/dist/ui/assets/form-utils-BuXDJb0w.js +0 -20
  616. package/dist/ui/assets/health-DiAvJaSn.js +0 -1
  617. package/dist/ui/assets/index-Brq6EBKZ.css +0 -1
  618. package/dist/ui/assets/index-ByU8ZhED.js +0 -48
  619. package/dist/ui/assets/settings-CEomZLGl.js +0 -1
  620. package/dist/web-server/routes.d.ts +0 -7
  621. package/dist/web-server/routes.d.ts.map +0 -1
  622. package/dist/web-server/routes.js +0 -1891
  623. package/dist/web-server/routes.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Usage Route Handlers
3
+ *
4
+ * Contains all route handler logic for usage analytics endpoints.
5
+ * Separated from routes for better testability and organization.
6
+ */
7
+ import type { Request, Response } from 'express';
8
+ import type { DailyUsage, Anomaly, AnomalySummary, TokenBreakdown } from './types';
9
+ /** Query parameters for usage endpoints */
10
+ export interface UsageQuery {
11
+ since?: string;
12
+ until?: string;
13
+ limit?: string;
14
+ offset?: string;
15
+ }
16
+ /**
17
+ * Validate date string in YYYYMMDD format
18
+ */
19
+ export declare function validateDate(dateString?: string): string | undefined;
20
+ export declare function validateLimit(limit?: string): number;
21
+ export declare function validateOffset(offset?: string): number;
22
+ export declare function filterByDateRange<T extends {
23
+ date?: string;
24
+ month?: string;
25
+ lastActivity?: string;
26
+ }>(data: T[] | undefined, since?: string, until?: string): T[];
27
+ export declare function errorResponse(res: Response, error: unknown, defaultMessage: string): void;
28
+ export declare function calculateTokenBreakdownCosts(dailyData: DailyUsage[]): TokenBreakdown;
29
+ export declare function fillHourlyGaps(data: Array<{
30
+ hour: string;
31
+ tokens: number;
32
+ inputTokens: number;
33
+ outputTokens: number;
34
+ cacheTokens: number;
35
+ cost: number;
36
+ modelsUsed: number;
37
+ requests: number;
38
+ }>, since?: string, until?: string): typeof data;
39
+ export declare function detectAnomalies(dailyData: DailyUsage[]): Anomaly[];
40
+ export declare function summarizeAnomalies(anomalies: Anomaly[]): AnomalySummary;
41
+ export declare function handleSummary(req: Request<object, object, object, UsageQuery>, res: Response): Promise<void>;
42
+ export declare function handleDaily(req: Request<object, object, object, UsageQuery>, res: Response): Promise<void>;
43
+ export declare function handleHourly(req: Request<object, object, object, UsageQuery>, res: Response): Promise<void>;
44
+ export declare function handleModels(req: Request<object, object, object, UsageQuery>, res: Response): Promise<void>;
45
+ export declare function handleSessions(req: Request<object, object, object, UsageQuery>, res: Response): Promise<void>;
46
+ export declare function handleMonthly(req: Request<object, object, object, UsageQuery>, res: Response): Promise<void>;
47
+ export declare function handleRefresh(_req: Request, res: Response): void;
48
+ export declare function handleStatus(_req: Request, res: Response): void;
49
+ export declare function handleInsights(req: Request<object, object, object, UsageQuery>, res: Response): Promise<void>;
50
+ //# sourceMappingURL=handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,524 @@
1
+ "use strict";
2
+ /**
3
+ * Usage Route Handlers
4
+ *
5
+ * Contains all route handler logic for usage analytics endpoints.
6
+ * Separated from routes for better testability and organization.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.handleInsights = exports.handleStatus = exports.handleRefresh = exports.handleMonthly = exports.handleSessions = exports.handleModels = exports.handleHourly = exports.handleDaily = exports.handleSummary = exports.summarizeAnomalies = exports.detectAnomalies = exports.fillHourlyGaps = exports.calculateTokenBreakdownCosts = exports.errorResponse = exports.filterByDateRange = exports.validateOffset = exports.validateLimit = exports.validateDate = void 0;
10
+ const model_pricing_1 = require("../model-pricing");
11
+ const aggregator_1 = require("./aggregator");
12
+ // ============================================================================
13
+ // Constants
14
+ // ============================================================================
15
+ const MAX_LIMIT = 1000;
16
+ const DEFAULT_LIMIT = 50;
17
+ const DATE_REGEX = /^\d{8}$/; // YYYYMMDD format
18
+ const ANOMALY_THRESHOLDS = {
19
+ HIGH_INPUT_TOKENS: 10000000,
20
+ HIGH_IO_RATIO: 100,
21
+ COST_SPIKE_MULTIPLIER: 2,
22
+ HIGH_CACHE_READ_TOKENS: 1000000000,
23
+ };
24
+ // ============================================================================
25
+ // Validation Helpers
26
+ // ============================================================================
27
+ /**
28
+ * Validate date string in YYYYMMDD format
29
+ */
30
+ function validateDate(dateString) {
31
+ if (!dateString)
32
+ return undefined;
33
+ if (!DATE_REGEX.test(dateString)) {
34
+ throw new Error('Invalid date format. Use YYYYMMDD');
35
+ }
36
+ const year = parseInt(dateString.substring(0, 4), 10);
37
+ const month = parseInt(dateString.substring(4, 6), 10);
38
+ const day = parseInt(dateString.substring(6, 8), 10);
39
+ if (year < 2024 || year > 2100)
40
+ throw new Error('Year out of valid range');
41
+ if (month < 1 || month > 12)
42
+ throw new Error('Month out of valid range');
43
+ if (day < 1 || day > 31)
44
+ throw new Error('Day out of valid range');
45
+ return dateString;
46
+ }
47
+ exports.validateDate = validateDate;
48
+ function validateLimit(limit) {
49
+ if (!limit)
50
+ return DEFAULT_LIMIT;
51
+ const num = parseInt(limit, 10);
52
+ if (isNaN(num) || num < 1 || num > MAX_LIMIT) {
53
+ throw new Error(`Limit must be between 1 and ${MAX_LIMIT}`);
54
+ }
55
+ return num;
56
+ }
57
+ exports.validateLimit = validateLimit;
58
+ function validateOffset(offset) {
59
+ if (!offset)
60
+ return 0;
61
+ const num = parseInt(offset, 10);
62
+ if (isNaN(num) || num < 0) {
63
+ throw new Error('Offset must be a non-negative number');
64
+ }
65
+ return num;
66
+ }
67
+ exports.validateOffset = validateOffset;
68
+ function filterByDateRange(data, since, until) {
69
+ if (!data || !Array.isArray(data))
70
+ return [];
71
+ if (!since && !until)
72
+ return data;
73
+ return data.filter((item) => {
74
+ const itemDate = item.date || item.month?.replace('-', '') || item.lastActivity?.replace(/-/g, '');
75
+ if (!itemDate)
76
+ return true;
77
+ const normalizedDate = itemDate.replace(/-/g, '').substring(0, 8);
78
+ if (since && normalizedDate < since)
79
+ return false;
80
+ if (until && normalizedDate > until)
81
+ return false;
82
+ return true;
83
+ });
84
+ }
85
+ exports.filterByDateRange = filterByDateRange;
86
+ function errorResponse(res, error, defaultMessage) {
87
+ console.error(defaultMessage + ':', error);
88
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
89
+ const isValidationError = errorMessage.includes('Invalid') ||
90
+ errorMessage.includes('format') ||
91
+ errorMessage.includes('range') ||
92
+ errorMessage.includes('must be');
93
+ res.status(isValidationError ? 400 : 500).json({
94
+ success: false,
95
+ error: isValidationError ? errorMessage : defaultMessage,
96
+ });
97
+ }
98
+ exports.errorResponse = errorResponse;
99
+ // ============================================================================
100
+ // Cost Calculation Helpers
101
+ // ============================================================================
102
+ function calculateTokenBreakdownCosts(dailyData) {
103
+ let inputTokens = 0, outputTokens = 0, cacheCreationTokens = 0, cacheReadTokens = 0;
104
+ let inputCost = 0, outputCost = 0, cacheCreationCost = 0, cacheReadCost = 0;
105
+ for (const day of dailyData) {
106
+ for (const breakdown of day.modelBreakdowns) {
107
+ const pricing = (0, model_pricing_1.getModelPricing)(breakdown.modelName);
108
+ inputTokens += breakdown.inputTokens;
109
+ outputTokens += breakdown.outputTokens;
110
+ cacheCreationTokens += breakdown.cacheCreationTokens;
111
+ cacheReadTokens += breakdown.cacheReadTokens;
112
+ inputCost += (breakdown.inputTokens / 1000000) * pricing.inputPerMillion;
113
+ outputCost += (breakdown.outputTokens / 1000000) * pricing.outputPerMillion;
114
+ cacheCreationCost +=
115
+ (breakdown.cacheCreationTokens / 1000000) * pricing.cacheCreationPerMillion;
116
+ cacheReadCost += (breakdown.cacheReadTokens / 1000000) * pricing.cacheReadPerMillion;
117
+ }
118
+ }
119
+ return {
120
+ input: { tokens: inputTokens, cost: Math.round(inputCost * 100) / 100 },
121
+ output: { tokens: outputTokens, cost: Math.round(outputCost * 100) / 100 },
122
+ cacheCreation: { tokens: cacheCreationTokens, cost: Math.round(cacheCreationCost * 100) / 100 },
123
+ cacheRead: { tokens: cacheReadTokens, cost: Math.round(cacheReadCost * 100) / 100 },
124
+ };
125
+ }
126
+ exports.calculateTokenBreakdownCosts = calculateTokenBreakdownCosts;
127
+ // ============================================================================
128
+ // Hourly Gap Filling
129
+ // ============================================================================
130
+ function fillHourlyGaps(data, since, until) {
131
+ if (!since && !until)
132
+ return data.sort((a, b) => a.hour.localeCompare(b.hour));
133
+ const hourMap = new Map(data.map((d) => [d.hour, d]));
134
+ const now = new Date();
135
+ const startDate = since
136
+ ? new Date(Date.UTC(+since.slice(0, 4), +since.slice(4, 6) - 1, +since.slice(6, 8), 0, 0, 0))
137
+ : new Date(now.getTime() - 24 * 60 * 60 * 1000);
138
+ const endDate = until
139
+ ? new Date(Date.UTC(+until.slice(0, 4), +until.slice(4, 6) - 1, +until.slice(6, 8), 23, 59, 59))
140
+ : now;
141
+ const cappedEndDate = endDate > now ? now : endDate;
142
+ const result = [];
143
+ const current = new Date(startDate);
144
+ current.setMinutes(0, 0, 0);
145
+ while (current <= cappedEndDate) {
146
+ const year = current.getUTCFullYear();
147
+ const month = String(current.getUTCMonth() + 1).padStart(2, '0');
148
+ const day = String(current.getUTCDate()).padStart(2, '0');
149
+ const hour = String(current.getUTCHours()).padStart(2, '0');
150
+ const hourKey = `${year}-${month}-${day} ${hour}:00`;
151
+ result.push(hourMap.get(hourKey) || {
152
+ hour: hourKey,
153
+ tokens: 0,
154
+ inputTokens: 0,
155
+ outputTokens: 0,
156
+ cacheTokens: 0,
157
+ cost: 0,
158
+ modelsUsed: 0,
159
+ requests: 0,
160
+ });
161
+ current.setTime(current.getTime() + 60 * 60 * 1000);
162
+ }
163
+ return result;
164
+ }
165
+ exports.fillHourlyGaps = fillHourlyGaps;
166
+ // ============================================================================
167
+ // Anomaly Detection
168
+ // ============================================================================
169
+ function formatTokenCount(tokens) {
170
+ if (tokens >= 1000000000)
171
+ return `${(tokens / 1000000000).toFixed(1)}B`;
172
+ if (tokens >= 1000000)
173
+ return `${(tokens / 1000000).toFixed(1)}M`;
174
+ if (tokens >= 1000)
175
+ return `${(tokens / 1000).toFixed(1)}K`;
176
+ return tokens.toString();
177
+ }
178
+ function detectAnomalies(dailyData) {
179
+ const anomalies = [];
180
+ const totalCost = dailyData.reduce((sum, day) => sum + day.totalCost, 0);
181
+ const avgDailyCost = dailyData.length > 0 ? totalCost / dailyData.length : 0;
182
+ const costSpikeThreshold = avgDailyCost * ANOMALY_THRESHOLDS.COST_SPIKE_MULTIPLIER;
183
+ for (const day of dailyData) {
184
+ if (avgDailyCost > 0 && day.totalCost > costSpikeThreshold) {
185
+ const multiplier = Math.round((day.totalCost / avgDailyCost) * 10) / 10;
186
+ anomalies.push({
187
+ date: day.date,
188
+ type: 'cost_spike',
189
+ value: day.totalCost,
190
+ threshold: avgDailyCost,
191
+ message: `Cost ${multiplier}x above daily average ($${Math.round(day.totalCost)} vs $${Math.round(avgDailyCost)})`,
192
+ });
193
+ }
194
+ for (const breakdown of day.modelBreakdowns) {
195
+ if (breakdown.inputTokens > ANOMALY_THRESHOLDS.HIGH_INPUT_TOKENS) {
196
+ const multiplier = Math.round((breakdown.inputTokens / ANOMALY_THRESHOLDS.HIGH_INPUT_TOKENS) * 10) / 10;
197
+ anomalies.push({
198
+ date: day.date,
199
+ type: 'high_input',
200
+ model: breakdown.modelName,
201
+ value: breakdown.inputTokens,
202
+ threshold: ANOMALY_THRESHOLDS.HIGH_INPUT_TOKENS,
203
+ message: `Input tokens ${multiplier}x above threshold (${formatTokenCount(breakdown.inputTokens)})`,
204
+ });
205
+ }
206
+ if (breakdown.outputTokens > 0) {
207
+ const ioRatio = breakdown.inputTokens / breakdown.outputTokens;
208
+ if (ioRatio > ANOMALY_THRESHOLDS.HIGH_IO_RATIO) {
209
+ const multiplier = Math.round((ioRatio / ANOMALY_THRESHOLDS.HIGH_IO_RATIO) * 10) / 10;
210
+ anomalies.push({
211
+ date: day.date,
212
+ type: 'high_io_ratio',
213
+ model: breakdown.modelName,
214
+ value: ioRatio,
215
+ threshold: ANOMALY_THRESHOLDS.HIGH_IO_RATIO,
216
+ message: `I/O ratio ${multiplier}x above threshold (${Math.round(ioRatio)}:1)`,
217
+ });
218
+ }
219
+ }
220
+ if (breakdown.cacheReadTokens > ANOMALY_THRESHOLDS.HIGH_CACHE_READ_TOKENS) {
221
+ const multiplier = Math.round((breakdown.cacheReadTokens / ANOMALY_THRESHOLDS.HIGH_CACHE_READ_TOKENS) * 10) /
222
+ 10;
223
+ anomalies.push({
224
+ date: day.date,
225
+ type: 'high_cache_read',
226
+ model: breakdown.modelName,
227
+ value: breakdown.cacheReadTokens,
228
+ threshold: ANOMALY_THRESHOLDS.HIGH_CACHE_READ_TOKENS,
229
+ message: `Cache reads ${multiplier}x above threshold (${formatTokenCount(breakdown.cacheReadTokens)})`,
230
+ });
231
+ }
232
+ }
233
+ }
234
+ return anomalies.sort((a, b) => b.date.localeCompare(a.date));
235
+ }
236
+ exports.detectAnomalies = detectAnomalies;
237
+ function summarizeAnomalies(anomalies) {
238
+ const highInputDates = new Set();
239
+ const highIoRatioDates = new Set();
240
+ const costSpikeDates = new Set();
241
+ const highCacheReadDates = new Set();
242
+ for (const anomaly of anomalies) {
243
+ switch (anomaly.type) {
244
+ case 'high_input':
245
+ highInputDates.add(anomaly.date);
246
+ break;
247
+ case 'high_io_ratio':
248
+ highIoRatioDates.add(anomaly.date);
249
+ break;
250
+ case 'cost_spike':
251
+ costSpikeDates.add(anomaly.date);
252
+ break;
253
+ case 'high_cache_read':
254
+ highCacheReadDates.add(anomaly.date);
255
+ break;
256
+ }
257
+ }
258
+ return {
259
+ totalAnomalies: anomalies.length,
260
+ highInputDays: highInputDates.size,
261
+ highIoRatioDays: highIoRatioDates.size,
262
+ costSpikeDays: costSpikeDates.size,
263
+ highCacheReadDays: highCacheReadDates.size,
264
+ };
265
+ }
266
+ exports.summarizeAnomalies = summarizeAnomalies;
267
+ // ============================================================================
268
+ // Route Handlers
269
+ // ============================================================================
270
+ async function handleSummary(req, res) {
271
+ try {
272
+ const since = validateDate(req.query.since);
273
+ const until = validateDate(req.query.until);
274
+ const dailyData = await (0, aggregator_1.getCachedDailyData)();
275
+ const filtered = filterByDateRange(dailyData, since, until);
276
+ let totalInputTokens = 0, totalOutputTokens = 0;
277
+ let totalCacheCreationTokens = 0, totalCacheReadTokens = 0, totalCost = 0;
278
+ for (const day of filtered) {
279
+ totalInputTokens += day.inputTokens;
280
+ totalOutputTokens += day.outputTokens;
281
+ totalCacheCreationTokens += day.cacheCreationTokens;
282
+ totalCacheReadTokens += day.cacheReadTokens;
283
+ totalCost += day.totalCost;
284
+ }
285
+ const totalTokens = totalInputTokens + totalOutputTokens;
286
+ const tokenBreakdown = calculateTokenBreakdownCosts(filtered);
287
+ res.json({
288
+ success: true,
289
+ data: {
290
+ totalTokens,
291
+ totalInputTokens,
292
+ totalOutputTokens,
293
+ totalCacheTokens: totalCacheCreationTokens + totalCacheReadTokens,
294
+ totalCacheCreationTokens,
295
+ totalCacheReadTokens,
296
+ totalCost: Math.round(totalCost * 100) / 100,
297
+ tokenBreakdown,
298
+ totalDays: filtered.length,
299
+ averageTokensPerDay: filtered.length > 0 ? Math.round(totalTokens / filtered.length) : 0,
300
+ averageCostPerDay: filtered.length > 0 ? Math.round((totalCost / filtered.length) * 100) / 100 : 0,
301
+ },
302
+ });
303
+ }
304
+ catch (error) {
305
+ errorResponse(res, error, 'Failed to fetch usage summary');
306
+ }
307
+ }
308
+ exports.handleSummary = handleSummary;
309
+ async function handleDaily(req, res) {
310
+ try {
311
+ const since = validateDate(req.query.since);
312
+ const until = validateDate(req.query.until);
313
+ const dailyData = await (0, aggregator_1.getCachedDailyData)();
314
+ const filtered = filterByDateRange(dailyData, since, until);
315
+ const trends = filtered.map((day) => ({
316
+ date: day.date,
317
+ tokens: day.inputTokens + day.outputTokens,
318
+ inputTokens: day.inputTokens,
319
+ outputTokens: day.outputTokens,
320
+ cacheTokens: day.cacheCreationTokens + day.cacheReadTokens,
321
+ cost: Math.round(day.totalCost * 100) / 100,
322
+ modelsUsed: day.modelsUsed.length,
323
+ }));
324
+ res.json({ success: true, data: trends });
325
+ }
326
+ catch (error) {
327
+ errorResponse(res, error, 'Failed to fetch daily usage');
328
+ }
329
+ }
330
+ exports.handleDaily = handleDaily;
331
+ async function handleHourly(req, res) {
332
+ try {
333
+ const since = validateDate(req.query.since);
334
+ const until = validateDate(req.query.until);
335
+ const hourlyData = await (0, aggregator_1.getCachedHourlyData)();
336
+ const filtered = (hourlyData || []).filter((h) => {
337
+ const hourDate = h.hour.slice(0, 10).replace(/-/g, '');
338
+ if (since && hourDate < since)
339
+ return false;
340
+ if (until && hourDate > until)
341
+ return false;
342
+ return true;
343
+ });
344
+ const trends = filtered.map((hour) => ({
345
+ hour: hour.hour,
346
+ tokens: hour.inputTokens + hour.outputTokens,
347
+ inputTokens: hour.inputTokens,
348
+ outputTokens: hour.outputTokens,
349
+ cacheTokens: hour.cacheCreationTokens + hour.cacheReadTokens,
350
+ cost: Math.round(hour.totalCost * 100) / 100,
351
+ modelsUsed: hour.modelsUsed.length,
352
+ requests: hour.modelBreakdowns.length,
353
+ }));
354
+ const filledTrends = fillHourlyGaps(trends, since, until);
355
+ res.json({ success: true, data: filledTrends });
356
+ }
357
+ catch (error) {
358
+ errorResponse(res, error, 'Failed to fetch hourly usage');
359
+ }
360
+ }
361
+ exports.handleHourly = handleHourly;
362
+ async function handleModels(req, res) {
363
+ try {
364
+ const since = validateDate(req.query.since);
365
+ const until = validateDate(req.query.until);
366
+ const dailyData = await (0, aggregator_1.getCachedDailyData)();
367
+ const filtered = filterByDateRange(dailyData, since, until);
368
+ const modelMap = new Map();
369
+ for (const day of filtered) {
370
+ for (const breakdown of day.modelBreakdowns) {
371
+ const existing = modelMap.get(breakdown.modelName) || {
372
+ model: breakdown.modelName,
373
+ inputTokens: 0,
374
+ outputTokens: 0,
375
+ cacheCreationTokens: 0,
376
+ cacheReadTokens: 0,
377
+ cost: 0,
378
+ };
379
+ existing.inputTokens += breakdown.inputTokens;
380
+ existing.outputTokens += breakdown.outputTokens;
381
+ existing.cacheCreationTokens += breakdown.cacheCreationTokens;
382
+ existing.cacheReadTokens += breakdown.cacheReadTokens;
383
+ existing.cost += breakdown.cost;
384
+ modelMap.set(breakdown.modelName, existing);
385
+ }
386
+ }
387
+ const models = Array.from(modelMap.values());
388
+ const totalTokens = models.reduce((sum, m) => sum + m.inputTokens + m.outputTokens, 0);
389
+ const result = models
390
+ .map((m) => {
391
+ const pricing = (0, model_pricing_1.getModelPricing)(m.model);
392
+ const inputCost = (m.inputTokens / 1000000) * pricing.inputPerMillion;
393
+ const outputCost = (m.outputTokens / 1000000) * pricing.outputPerMillion;
394
+ const cacheCreationCost = (m.cacheCreationTokens / 1000000) * pricing.cacheCreationPerMillion;
395
+ const cacheReadCost = (m.cacheReadTokens / 1000000) * pricing.cacheReadPerMillion;
396
+ const ioRatio = m.outputTokens > 0 ? m.inputTokens / m.outputTokens : 0;
397
+ return {
398
+ model: m.model,
399
+ tokens: m.inputTokens + m.outputTokens,
400
+ inputTokens: m.inputTokens,
401
+ outputTokens: m.outputTokens,
402
+ cacheCreationTokens: m.cacheCreationTokens,
403
+ cacheReadTokens: m.cacheReadTokens,
404
+ cacheTokens: m.cacheCreationTokens + m.cacheReadTokens,
405
+ cost: Math.round(m.cost * 100) / 100,
406
+ percentage: totalTokens > 0
407
+ ? Math.round(((m.inputTokens + m.outputTokens) / totalTokens) * 1000) / 10
408
+ : 0,
409
+ costBreakdown: {
410
+ input: { tokens: m.inputTokens, cost: Math.round(inputCost * 100) / 100 },
411
+ output: { tokens: m.outputTokens, cost: Math.round(outputCost * 100) / 100 },
412
+ cacheCreation: {
413
+ tokens: m.cacheCreationTokens,
414
+ cost: Math.round(cacheCreationCost * 100) / 100,
415
+ },
416
+ cacheRead: { tokens: m.cacheReadTokens, cost: Math.round(cacheReadCost * 100) / 100 },
417
+ },
418
+ ioRatio: Math.round(ioRatio * 10) / 10,
419
+ };
420
+ })
421
+ .sort((a, b) => b.tokens - a.tokens);
422
+ res.json({ success: true, data: result });
423
+ }
424
+ catch (error) {
425
+ errorResponse(res, error, 'Failed to fetch model usage');
426
+ }
427
+ }
428
+ exports.handleModels = handleModels;
429
+ async function handleSessions(req, res) {
430
+ try {
431
+ const since = validateDate(req.query.since);
432
+ const until = validateDate(req.query.until);
433
+ const limit = validateLimit(req.query.limit);
434
+ const offset = validateOffset(req.query.offset);
435
+ const sessionData = await (0, aggregator_1.getCachedSessionData)();
436
+ const filtered = filterByDateRange(sessionData, since, until);
437
+ const sorted = [...filtered].sort((a, b) => new Date(b.lastActivity).getTime() - new Date(a.lastActivity).getTime());
438
+ const paginated = sorted.slice(offset, offset + limit);
439
+ const sessions = paginated.map((s) => ({
440
+ sessionId: s.sessionId,
441
+ projectPath: s.projectPath,
442
+ tokens: s.inputTokens + s.outputTokens,
443
+ inputTokens: s.inputTokens,
444
+ outputTokens: s.outputTokens,
445
+ cost: Math.round(s.totalCost * 100) / 100,
446
+ lastActivity: s.lastActivity,
447
+ modelsUsed: s.modelsUsed,
448
+ }));
449
+ res.json({
450
+ success: true,
451
+ data: {
452
+ sessions,
453
+ total: filtered.length,
454
+ limit,
455
+ offset,
456
+ hasMore: offset + limit < filtered.length,
457
+ },
458
+ });
459
+ }
460
+ catch (error) {
461
+ errorResponse(res, error, 'Failed to fetch sessions');
462
+ }
463
+ }
464
+ exports.handleSessions = handleSessions;
465
+ async function handleMonthly(req, res) {
466
+ try {
467
+ const since = validateDate(req.query.since);
468
+ const until = validateDate(req.query.until);
469
+ const monthlyData = await (0, aggregator_1.getCachedMonthlyData)();
470
+ const filtered = since || until
471
+ ? monthlyData.filter((m) => {
472
+ const monthDate = m.month.replace('-', '') + '01';
473
+ if (since && monthDate < since)
474
+ return false;
475
+ if (until && monthDate > until)
476
+ return false;
477
+ return true;
478
+ })
479
+ : monthlyData;
480
+ const result = filtered.map((m) => ({
481
+ month: m.month,
482
+ tokens: m.inputTokens + m.outputTokens,
483
+ inputTokens: m.inputTokens,
484
+ outputTokens: m.outputTokens,
485
+ cacheTokens: m.cacheCreationTokens + m.cacheReadTokens,
486
+ cost: Math.round(m.totalCost * 100) / 100,
487
+ modelsUsed: m.modelsUsed.length,
488
+ }));
489
+ res.json({ success: true, data: result.sort((a, b) => a.month.localeCompare(b.month)) });
490
+ }
491
+ catch (error) {
492
+ errorResponse(res, error, 'Failed to fetch monthly usage');
493
+ }
494
+ }
495
+ exports.handleMonthly = handleMonthly;
496
+ function handleRefresh(_req, res) {
497
+ (0, aggregator_1.clearUsageCache)();
498
+ res.json({ success: true, message: 'Usage cache cleared' });
499
+ }
500
+ exports.handleRefresh = handleRefresh;
501
+ function handleStatus(_req, res) {
502
+ const cache = new Map(); // Note: this is a placeholder, actual cache is in aggregator
503
+ res.json({
504
+ success: true,
505
+ data: { lastFetch: (0, aggregator_1.getLastFetchTimestamp)(), cacheSize: cache.size },
506
+ });
507
+ }
508
+ exports.handleStatus = handleStatus;
509
+ async function handleInsights(req, res) {
510
+ try {
511
+ const since = validateDate(req.query.since);
512
+ const until = validateDate(req.query.until);
513
+ const dailyData = await (0, aggregator_1.getCachedDailyData)();
514
+ const filtered = filterByDateRange(dailyData, since, until);
515
+ const anomalies = detectAnomalies(filtered);
516
+ const summary = summarizeAnomalies(anomalies);
517
+ res.json({ success: true, data: { anomalies, summary } });
518
+ }
519
+ catch (error) {
520
+ errorResponse(res, error, 'Failed to fetch usage insights');
521
+ }
522
+ }
523
+ exports.handleInsights = handleInsights;
524
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/web-server/usage/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Usage Module Barrel Export
3
+ *
4
+ * Re-exports all usage analytics functionality for convenient imports.
5
+ */
6
+ export type { ModelBreakdown, DailyUsage, HourlyUsage, MonthlyUsage, SessionUsage, TokenCategoryCost, TokenBreakdown, AnomalyType, Anomaly, AnomalySummary, UsageInsights, ExtendedModelUsage, } from './types';
7
+ export { readDiskCache, writeDiskCache, isDiskCacheFresh, isDiskCacheStale, clearDiskCache, getCacheAge, type UsageDiskCache, } from './disk-cache';
8
+ export { aggregateDailyUsage, aggregateHourlyUsage, aggregateMonthlyUsage, aggregateSessionUsage, loadDailyUsageData, loadHourlyUsageData, loadMonthlyUsageData, loadSessionData, loadAllUsageData, } from './data-aggregator';
9
+ export { getCachedDailyData, getCachedMonthlyData, getCachedSessionData, getCachedHourlyData, clearUsageCache, prewarmUsageCache, getLastFetchTimestamp, mergeDailyData, mergeMonthlyData, mergeHourlyData, mergeSessionData, } from './aggregator';
10
+ export { usageRoutes } from './routes';
11
+ export { validateDate, validateLimit, validateOffset, filterByDateRange, calculateTokenBreakdownCosts, fillHourlyGaps, detectAnomalies, summarizeAnomalies, type UsageQuery, } from './handlers';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web-server/usage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,cAAc,EACd,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,OAAO,EACP,cAAc,EACd,aAAa,EACb,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,4BAA4B,EAC5B,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC"}