@futdevpro/ccap 1.1.2881 → 1.1.2933

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 (294) hide show
  1. package/client-dist/{agent-instances.module-U742BGNW.js → agent-instances.module-SF3QXH7Q.js} +2 -2
  2. package/client-dist/{ca.module-WANXRIO7.js → ca.module-ZXYBANCD.js} +2 -2
  3. package/client-dist/cc-usage-dashboard.component-UHRXNYYU.js +2 -0
  4. package/client-dist/cc-usage-dashboard.component-UHRXNYYU.js.map +7 -0
  5. package/client-dist/{cc.module-JZUXUXHP.js → cc.module-3IJO6TX5.js} +2 -2
  6. package/client-dist/{chunk-GDAL4G4Y.js → chunk-2K7TLHL3.js} +2 -2
  7. package/client-dist/{chunk-YE57GLWU.js → chunk-2LKPFAFT.js} +2 -2
  8. package/client-dist/{chunk-EBSMIZTK.js → chunk-3GPPZKXA.js} +2 -2
  9. package/client-dist/{chunk-KQLKM7RB.js → chunk-3NDSB3FP.js} +2 -2
  10. package/client-dist/{chunk-S4GJTHYZ.js → chunk-4HOHFHQY.js} +2 -2
  11. package/client-dist/{chunk-4TBE5I3U.js → chunk-52CLKNM3.js} +2 -2
  12. package/client-dist/{chunk-X7HHJQ2O.js → chunk-5DQCBSN4.js} +2 -2
  13. package/client-dist/{chunk-IR4THKPA.js → chunk-7FC47YOQ.js} +2 -2
  14. package/client-dist/{chunk-AS2SYIJB.js → chunk-7JD2RJHO.js} +2 -2
  15. package/client-dist/{chunk-DUN255KX.js → chunk-7R7RRZXO.js} +2 -2
  16. package/client-dist/{chunk-6IYFOHCN.js → chunk-AA3UG5RH.js} +2 -2
  17. package/client-dist/{chunk-XSXQC64X.js → chunk-ACBLDGL6.js} +2 -2
  18. package/client-dist/{chunk-6A2IM2XR.js → chunk-AQVXBUA5.js} +2 -2
  19. package/client-dist/{chunk-DNHL6M7F.js → chunk-AUIGEZUZ.js} +2 -2
  20. package/client-dist/{chunk-435IBC6L.js → chunk-B3XTPMW6.js} +2 -2
  21. package/client-dist/{chunk-HDCFO7OE.js → chunk-BSSBUQMF.js} +2 -2
  22. package/client-dist/{chunk-HPBX6VCV.js → chunk-BZODSYB4.js} +2 -2
  23. package/client-dist/{chunk-46N7EC7U.js → chunk-C7Y7EOTP.js} +2 -2
  24. package/client-dist/{chunk-26DXMUXV.js → chunk-CF32SLMO.js} +2 -2
  25. package/client-dist/{chunk-EY32IBWM.js → chunk-DEWO3RCC.js} +2 -2
  26. package/client-dist/{chunk-CSHUFD2L.js → chunk-DJPNMRQB.js} +2 -2
  27. package/client-dist/{chunk-JDK64BE7.js → chunk-DWDPX7GN.js} +2 -2
  28. package/client-dist/{chunk-TSPROG7P.js → chunk-FGCVS2XR.js} +2 -2
  29. package/client-dist/{chunk-767Z7I55.js → chunk-FPOA2CXV.js} +2 -2
  30. package/client-dist/{chunk-RRN36VPR.js → chunk-FQ7KTP4N.js} +2 -2
  31. package/client-dist/{chunk-CILMMQ5V.js → chunk-G3XU7AFS.js} +2 -2
  32. package/client-dist/{chunk-ONEB5UF5.js → chunk-GRFSKLRH.js} +2 -2
  33. package/client-dist/{chunk-6BQHKSUP.js → chunk-JKYTN4IT.js} +2 -2
  34. package/client-dist/{chunk-RQ2HFT2L.js → chunk-KH2H3WNG.js} +2 -2
  35. package/client-dist/{chunk-XH3SQ4UP.js → chunk-KK5KCTKO.js} +2 -2
  36. package/client-dist/{chunk-GR3CXOIX.js → chunk-KVLGE2TX.js} +2 -2
  37. package/client-dist/{chunk-6NWEJXDU.js → chunk-L22NVKP6.js} +2 -2
  38. package/client-dist/{chunk-HFVIX2ZG.js → chunk-L7ET4NMN.js} +2 -2
  39. package/client-dist/{chunk-BHWHGLKC.js → chunk-MLN5NNFE.js} +2 -2
  40. package/client-dist/{chunk-4RRBZXYU.js → chunk-N6CBIM3Q.js} +2 -2
  41. package/client-dist/{chunk-Q6JQHJME.js → chunk-ORFGZMJM.js} +2 -2
  42. package/client-dist/{chunk-U7ZBDYGU.js → chunk-P76SM44R.js} +2 -2
  43. package/client-dist/{chunk-FJGBPKHK.js → chunk-PKS4NUXK.js} +2 -2
  44. package/client-dist/{chunk-M3RL34GF.js → chunk-QUMACHM2.js} +2 -2
  45. package/client-dist/{chunk-PPRG7F5A.js → chunk-QWELO4IZ.js} +2 -2
  46. package/client-dist/{chunk-OP2PE3KG.js → chunk-RMI5MIMK.js} +2 -2
  47. package/client-dist/{chunk-OP2PE3KG.js.map → chunk-RMI5MIMK.js.map} +1 -1
  48. package/client-dist/{chunk-PQUBI6TC.js → chunk-RVMBHRZ4.js} +2 -2
  49. package/client-dist/{chunk-VQWGWQDA.js → chunk-SM6OLK3P.js} +2 -2
  50. package/client-dist/{chunk-LERWAULE.js → chunk-T4UXH4VI.js} +2 -2
  51. package/client-dist/{chunk-2LJT2APC.js → chunk-TJUC4UJO.js} +2 -2
  52. package/client-dist/{chunk-XJEATRA4.js → chunk-TQWGNGN7.js} +2 -2
  53. package/client-dist/{chunk-OZGFJXOA.js → chunk-U733DNNP.js} +2 -2
  54. package/client-dist/{chunk-467OMXRK.js → chunk-VHIVQE42.js} +2 -2
  55. package/client-dist/{chunk-XHF463TC.js → chunk-W2JOFYIP.js} +2 -2
  56. package/client-dist/{chunk-YX6NZTP7.js → chunk-XCM5OTA2.js} +2 -2
  57. package/client-dist/{chunk-SKHAAE4A.js → chunk-XUIND3Z7.js} +2 -2
  58. package/client-dist/{chunk-NJPSU6MN.js → chunk-Y3TU3XB6.js} +2 -2
  59. package/client-dist/{chunk-4OKUKX55.js → chunk-YDTOH4TX.js} +2 -2
  60. package/client-dist/{chunk-J5NYZUBP.js → chunk-YUA67L6D.js} +2 -2
  61. package/client-dist/{chunk-QDTY7SR6.js → chunk-ZIUOV7TD.js} +2 -2
  62. package/client-dist/{chunk-KMEGS6BP.js → chunk-ZWXTHLAF.js} +2 -2
  63. package/client-dist/{consultant.module-WL4WEIIF.js → consultant.module-BLJWRAGO.js} +2 -2
  64. package/client-dist/{crd.module-OE3ML5C7.js → crd.module-IVABLS5S.js} +2 -2
  65. package/client-dist/{dashboard.module-NBINBB72.js → dashboard.module-VF74IE7S.js} +2 -2
  66. package/client-dist/{do-character-preview.component-3NLSIHMO.css.map → do-character-preview.component-AWJ6PC6Z.css.map} +2 -2
  67. package/client-dist/{do.module-BLTXJC4T.js → do.module-62BEJMCY.js} +4 -4
  68. package/client-dist/{document-library.module-TXGZT2VZ.js → document-library.module-U3XCH34R.js} +2 -2
  69. package/client-dist/{embedding-eval.module-PYE5NL5R.js → embedding-eval.module-FF45WVLU.js} +2 -2
  70. package/client-dist/{embedding-registry.module-46PAOMQR.js → embedding-registry.module-67P7G74S.js} +2 -2
  71. package/client-dist/{err.module-B743IN5O.js → err.module-FFVEHDQ7.js} +2 -2
  72. package/client-dist/{feedback.module-H4YSPDLF.js → feedback.module-WGSHEJMF.js} +2 -2
  73. package/client-dist/{host-runtime-mcp.module-6SK6OZH7.js → host-runtime-mcp.module-MA2RED5X.js} +2 -2
  74. package/client-dist/index.html +2 -2
  75. package/client-dist/{live-dev-pipeline.module-MCPAY2LG.js → live-dev-pipeline.module-ID23FB5H.js} +2 -2
  76. package/client-dist/{logs.module-CJF7RLV7.js → logs.module-FJYFLWN4.js} +2 -2
  77. package/client-dist/{main-NZFBSJOQ.js → main-BEDPIKFQ.js} +3 -3
  78. package/client-dist/{main-NZFBSJOQ.js.map → main-BEDPIKFQ.js.map} +3 -3
  79. package/client-dist/{master-control-remote-poc.module-LJ5ANCQ6.js → master-control-remote-poc.module-7HH5WVLB.js} +2 -2
  80. package/client-dist/{mobile-app.module-G7LAAOOP.js → mobile-app.module-OJW2CGEG.js} +2 -2
  81. package/client-dist/{model-registry.module-WDAX2AHY.js → model-registry.module-2YVNUZTJ.js} +2 -2
  82. package/client-dist/{oc.module-T43BN7CJ.js → oc.module-LSZIPGGA.js} +2 -2
  83. package/client-dist/{orc.module-R3P5Y4YW.js → orc.module-XFF3AEVT.js} +2 -2
  84. package/client-dist/{project-management.module-ODMCGFYI.js → project-management.module-F2GQZRED.js} +2 -2
  85. package/client-dist/project-source-routed.module-67W3FF7R.js +2 -0
  86. package/client-dist/{scheduler.module-TZLVYYMO.js → scheduler.module-NAHRKPQ3.js} +2 -2
  87. package/client-dist/{session.module-3XGXYP4K.js → session.module-QNGNGJKL.js} +2 -2
  88. package/client-dist/{set.module-M3PJXM3W.js → set.module-GNLSTQZB.js} +2 -2
  89. package/client-dist/{setup.module-2U3R4YDE.js → setup.module-C7IUGHXY.js} +2 -2
  90. package/client-dist/styles-MUU7N64U.css +2 -0
  91. package/client-dist/styles-MUU7N64U.css.map +7 -0
  92. package/client-dist/{terminals.module-ULIXEKUD.js → terminals.module-7XS2L34N.js} +2 -2
  93. package/client-dist/{voice-notes-poc.module-GZGIIFPR.js → voice-notes-poc.module-ZV5GCEJF.js} +2 -2
  94. package/client-dist/{wfs.module-6B4QN7NS.js → wfs.module-BT3QPUHF.js} +2 -2
  95. package/package.json +1 -1
  96. package/server/build/src/_modules/external-sessions/_collections/utils/exs-status-mapping.util.d.ts.map +1 -1
  97. package/server/build/src/_modules/external-sessions/_collections/utils/exs-status-mapping.util.js +14 -0
  98. package/server/build/src/_modules/external-sessions/_collections/utils/exs-status-mapping.util.js.map +1 -1
  99. package/server/build/src/_modules/external-sessions/_models/interfaces/exs-instance-presence-info.interface.d.ts +8 -0
  100. package/server/build/src/_modules/external-sessions/_models/interfaces/exs-instance-presence-info.interface.d.ts.map +1 -1
  101. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-discovery.util.d.ts +13 -3
  102. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-discovery.util.d.ts.map +1 -1
  103. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-discovery.util.js +45 -3
  104. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-discovery.util.js.map +1 -1
  105. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-discovery.util.spec.js +33 -0
  106. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-discovery.util.spec.js.map +1 -1
  107. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-outcome.type.d.ts +22 -0
  108. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-outcome.type.d.ts.map +1 -0
  109. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-outcome.type.js +3 -0
  110. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-outcome.type.js.map +1 -0
  111. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-result.interface.d.ts +13 -0
  112. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-result.interface.d.ts.map +1 -0
  113. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-result.interface.js +3 -0
  114. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe-result.interface.js.map +1 -0
  115. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.d.ts +14 -36
  116. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.d.ts.map +1 -1
  117. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.js +15 -16
  118. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.js.map +1 -1
  119. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-window-snapshot.interface.d.ts +8 -0
  120. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-window-snapshot.interface.d.ts.map +1 -0
  121. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-window-snapshot.interface.js +3 -0
  122. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-window-snapshot.interface.js.map +1 -0
  123. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.d.ts +26 -0
  124. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.d.ts.map +1 -1
  125. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.js +89 -0
  126. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.js.map +1 -1
  127. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.d.ts +12 -0
  128. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.d.ts.map +1 -1
  129. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js +34 -0
  130. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js.map +1 -1
  131. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-detail-status.enum.d.ts +7 -1
  132. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-detail-status.enum.d.ts.map +1 -1
  133. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-detail-status.enum.js +6 -0
  134. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-detail-status.enum.js.map +1 -1
  135. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.d.ts +15 -2
  136. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.d.ts.map +1 -1
  137. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.js +15 -2
  138. package/server/build/src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.js.map +1 -1
  139. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.d.ts +49 -0
  140. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.d.ts.map +1 -0
  141. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.js +71 -0
  142. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.js.map +1 -0
  143. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.spec.d.ts +2 -0
  144. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.spec.d.ts.map +1 -0
  145. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.spec.js +45 -0
  146. package/server/build/src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.spec.js.map +1 -0
  147. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.d.ts +36 -1
  148. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.d.ts.map +1 -1
  149. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.js +162 -39
  150. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.js.map +1 -1
  151. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.spec.js +1 -1
  152. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.spec.js.map +1 -1
  153. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account.controller.d.ts.map +1 -1
  154. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account.controller.js +15 -0
  155. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account.controller.js.map +1 -1
  156. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.d.ts +70 -0
  157. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.d.ts.map +1 -0
  158. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.js +152 -0
  159. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.js.map +1 -0
  160. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.spec.d.ts +2 -0
  161. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.spec.d.ts.map +1 -0
  162. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.spec.js +153 -0
  163. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-auto-pull.control-service.spec.js.map +1 -0
  164. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.d.ts +4 -1
  165. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.d.ts.map +1 -1
  166. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.js +23 -3
  167. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.js.map +1 -1
  168. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.spec.js +5 -5
  169. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.spec.js.map +1 -1
  170. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-usage-event.data-service.d.ts +43 -0
  171. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-usage-event.data-service.d.ts.map +1 -0
  172. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-usage-event.data-service.js +80 -0
  173. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-usage-event.data-service.js.map +1 -0
  174. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.d.ts +15 -2
  175. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.d.ts.map +1 -1
  176. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.js +24 -4
  177. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.js.map +1 -1
  178. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.spec.js +2 -2
  179. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.spec.js.map +1 -1
  180. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts +81 -0
  181. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts.map +1 -0
  182. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js +160 -0
  183. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js.map +1 -0
  184. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts.map +1 -1
  185. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js +44 -79
  186. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js.map +1 -1
  187. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts.map +1 -1
  188. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js +13 -0
  189. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js.map +1 -1
  190. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts.map +1 -1
  191. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js +23 -68
  192. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js.map +1 -1
  193. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.d.ts.map +1 -1
  194. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.js +12 -0
  195. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.js.map +1 -1
  196. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.d.ts.map +1 -1
  197. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js +30 -4
  198. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js.map +1 -1
  199. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js +68 -0
  200. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js.map +1 -1
  201. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat-self-healing.spec.js +29 -0
  202. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat-self-healing.spec.js.map +1 -1
  203. package/server/build/src/app.server.d.ts.map +1 -1
  204. package/server/build/src/app.server.js +40 -31
  205. package/server/build/src/app.server.js.map +1 -1
  206. package/client-dist/cc-usage-dashboard.component-TPMSJIGI.js +0 -2
  207. package/client-dist/cc-usage-dashboard.component-TPMSJIGI.js.map +0 -7
  208. package/client-dist/project-source-routed.module-M22ABRHR.js +0 -2
  209. package/client-dist/styles-OJOSC7GL.css +0 -2
  210. package/client-dist/styles-OJOSC7GL.css.map +0 -7
  211. /package/client-dist/{agent-instances.module-U742BGNW.js.map → agent-instances.module-SF3QXH7Q.js.map} +0 -0
  212. /package/client-dist/{ca.module-WANXRIO7.js.map → ca.module-ZXYBANCD.js.map} +0 -0
  213. /package/client-dist/{cc.module-JZUXUXHP.js.map → cc.module-3IJO6TX5.js.map} +0 -0
  214. /package/client-dist/{chunk-GDAL4G4Y.js.map → chunk-2K7TLHL3.js.map} +0 -0
  215. /package/client-dist/{chunk-YE57GLWU.js.map → chunk-2LKPFAFT.js.map} +0 -0
  216. /package/client-dist/{chunk-EBSMIZTK.js.map → chunk-3GPPZKXA.js.map} +0 -0
  217. /package/client-dist/{chunk-KQLKM7RB.js.map → chunk-3NDSB3FP.js.map} +0 -0
  218. /package/client-dist/{chunk-S4GJTHYZ.js.map → chunk-4HOHFHQY.js.map} +0 -0
  219. /package/client-dist/{chunk-4TBE5I3U.js.map → chunk-52CLKNM3.js.map} +0 -0
  220. /package/client-dist/{chunk-X7HHJQ2O.js.map → chunk-5DQCBSN4.js.map} +0 -0
  221. /package/client-dist/{chunk-IR4THKPA.js.map → chunk-7FC47YOQ.js.map} +0 -0
  222. /package/client-dist/{chunk-AS2SYIJB.js.map → chunk-7JD2RJHO.js.map} +0 -0
  223. /package/client-dist/{chunk-DUN255KX.js.map → chunk-7R7RRZXO.js.map} +0 -0
  224. /package/client-dist/{chunk-6IYFOHCN.js.map → chunk-AA3UG5RH.js.map} +0 -0
  225. /package/client-dist/{chunk-XSXQC64X.js.map → chunk-ACBLDGL6.js.map} +0 -0
  226. /package/client-dist/{chunk-6A2IM2XR.js.map → chunk-AQVXBUA5.js.map} +0 -0
  227. /package/client-dist/{chunk-DNHL6M7F.js.map → chunk-AUIGEZUZ.js.map} +0 -0
  228. /package/client-dist/{chunk-435IBC6L.js.map → chunk-B3XTPMW6.js.map} +0 -0
  229. /package/client-dist/{chunk-HDCFO7OE.js.map → chunk-BSSBUQMF.js.map} +0 -0
  230. /package/client-dist/{chunk-HPBX6VCV.js.map → chunk-BZODSYB4.js.map} +0 -0
  231. /package/client-dist/{chunk-46N7EC7U.js.map → chunk-C7Y7EOTP.js.map} +0 -0
  232. /package/client-dist/{chunk-26DXMUXV.js.map → chunk-CF32SLMO.js.map} +0 -0
  233. /package/client-dist/{chunk-EY32IBWM.js.map → chunk-DEWO3RCC.js.map} +0 -0
  234. /package/client-dist/{chunk-CSHUFD2L.js.map → chunk-DJPNMRQB.js.map} +0 -0
  235. /package/client-dist/{chunk-JDK64BE7.js.map → chunk-DWDPX7GN.js.map} +0 -0
  236. /package/client-dist/{chunk-TSPROG7P.js.map → chunk-FGCVS2XR.js.map} +0 -0
  237. /package/client-dist/{chunk-767Z7I55.js.map → chunk-FPOA2CXV.js.map} +0 -0
  238. /package/client-dist/{chunk-RRN36VPR.js.map → chunk-FQ7KTP4N.js.map} +0 -0
  239. /package/client-dist/{chunk-CILMMQ5V.js.map → chunk-G3XU7AFS.js.map} +0 -0
  240. /package/client-dist/{chunk-ONEB5UF5.js.map → chunk-GRFSKLRH.js.map} +0 -0
  241. /package/client-dist/{chunk-6BQHKSUP.js.map → chunk-JKYTN4IT.js.map} +0 -0
  242. /package/client-dist/{chunk-RQ2HFT2L.js.map → chunk-KH2H3WNG.js.map} +0 -0
  243. /package/client-dist/{chunk-XH3SQ4UP.js.map → chunk-KK5KCTKO.js.map} +0 -0
  244. /package/client-dist/{chunk-GR3CXOIX.js.map → chunk-KVLGE2TX.js.map} +0 -0
  245. /package/client-dist/{chunk-6NWEJXDU.js.map → chunk-L22NVKP6.js.map} +0 -0
  246. /package/client-dist/{chunk-HFVIX2ZG.js.map → chunk-L7ET4NMN.js.map} +0 -0
  247. /package/client-dist/{chunk-BHWHGLKC.js.map → chunk-MLN5NNFE.js.map} +0 -0
  248. /package/client-dist/{chunk-4RRBZXYU.js.map → chunk-N6CBIM3Q.js.map} +0 -0
  249. /package/client-dist/{chunk-Q6JQHJME.js.map → chunk-ORFGZMJM.js.map} +0 -0
  250. /package/client-dist/{chunk-U7ZBDYGU.js.map → chunk-P76SM44R.js.map} +0 -0
  251. /package/client-dist/{chunk-FJGBPKHK.js.map → chunk-PKS4NUXK.js.map} +0 -0
  252. /package/client-dist/{chunk-M3RL34GF.js.map → chunk-QUMACHM2.js.map} +0 -0
  253. /package/client-dist/{chunk-PPRG7F5A.js.map → chunk-QWELO4IZ.js.map} +0 -0
  254. /package/client-dist/{chunk-PQUBI6TC.js.map → chunk-RVMBHRZ4.js.map} +0 -0
  255. /package/client-dist/{chunk-VQWGWQDA.js.map → chunk-SM6OLK3P.js.map} +0 -0
  256. /package/client-dist/{chunk-LERWAULE.js.map → chunk-T4UXH4VI.js.map} +0 -0
  257. /package/client-dist/{chunk-2LJT2APC.js.map → chunk-TJUC4UJO.js.map} +0 -0
  258. /package/client-dist/{chunk-XJEATRA4.js.map → chunk-TQWGNGN7.js.map} +0 -0
  259. /package/client-dist/{chunk-OZGFJXOA.js.map → chunk-U733DNNP.js.map} +0 -0
  260. /package/client-dist/{chunk-467OMXRK.js.map → chunk-VHIVQE42.js.map} +0 -0
  261. /package/client-dist/{chunk-XHF463TC.js.map → chunk-W2JOFYIP.js.map} +0 -0
  262. /package/client-dist/{chunk-YX6NZTP7.js.map → chunk-XCM5OTA2.js.map} +0 -0
  263. /package/client-dist/{chunk-SKHAAE4A.js.map → chunk-XUIND3Z7.js.map} +0 -0
  264. /package/client-dist/{chunk-NJPSU6MN.js.map → chunk-Y3TU3XB6.js.map} +0 -0
  265. /package/client-dist/{chunk-4OKUKX55.js.map → chunk-YDTOH4TX.js.map} +0 -0
  266. /package/client-dist/{chunk-J5NYZUBP.js.map → chunk-YUA67L6D.js.map} +0 -0
  267. /package/client-dist/{chunk-QDTY7SR6.js.map → chunk-ZIUOV7TD.js.map} +0 -0
  268. /package/client-dist/{chunk-KMEGS6BP.js.map → chunk-ZWXTHLAF.js.map} +0 -0
  269. /package/client-dist/{consultant.module-WL4WEIIF.js.map → consultant.module-BLJWRAGO.js.map} +0 -0
  270. /package/client-dist/{crd.module-OE3ML5C7.js.map → crd.module-IVABLS5S.js.map} +0 -0
  271. /package/client-dist/{dashboard.module-NBINBB72.js.map → dashboard.module-VF74IE7S.js.map} +0 -0
  272. /package/client-dist/{do.module-BLTXJC4T.js.map → do.module-62BEJMCY.js.map} +0 -0
  273. /package/client-dist/{document-library.module-TXGZT2VZ.js.map → document-library.module-U3XCH34R.js.map} +0 -0
  274. /package/client-dist/{embedding-eval.module-PYE5NL5R.js.map → embedding-eval.module-FF45WVLU.js.map} +0 -0
  275. /package/client-dist/{embedding-registry.module-46PAOMQR.js.map → embedding-registry.module-67P7G74S.js.map} +0 -0
  276. /package/client-dist/{err.module-B743IN5O.js.map → err.module-FFVEHDQ7.js.map} +0 -0
  277. /package/client-dist/{feedback.module-H4YSPDLF.js.map → feedback.module-WGSHEJMF.js.map} +0 -0
  278. /package/client-dist/{host-runtime-mcp.module-6SK6OZH7.js.map → host-runtime-mcp.module-MA2RED5X.js.map} +0 -0
  279. /package/client-dist/{live-dev-pipeline.module-MCPAY2LG.js.map → live-dev-pipeline.module-ID23FB5H.js.map} +0 -0
  280. /package/client-dist/{logs.module-CJF7RLV7.js.map → logs.module-FJYFLWN4.js.map} +0 -0
  281. /package/client-dist/{master-control-remote-poc.module-LJ5ANCQ6.js.map → master-control-remote-poc.module-7HH5WVLB.js.map} +0 -0
  282. /package/client-dist/{mobile-app.module-G7LAAOOP.js.map → mobile-app.module-OJW2CGEG.js.map} +0 -0
  283. /package/client-dist/{model-registry.module-WDAX2AHY.js.map → model-registry.module-2YVNUZTJ.js.map} +0 -0
  284. /package/client-dist/{oc.module-T43BN7CJ.js.map → oc.module-LSZIPGGA.js.map} +0 -0
  285. /package/client-dist/{orc.module-R3P5Y4YW.js.map → orc.module-XFF3AEVT.js.map} +0 -0
  286. /package/client-dist/{project-management.module-ODMCGFYI.js.map → project-management.module-F2GQZRED.js.map} +0 -0
  287. /package/client-dist/{project-source-routed.module-M22ABRHR.js.map → project-source-routed.module-67W3FF7R.js.map} +0 -0
  288. /package/client-dist/{scheduler.module-TZLVYYMO.js.map → scheduler.module-NAHRKPQ3.js.map} +0 -0
  289. /package/client-dist/{session.module-3XGXYP4K.js.map → session.module-QNGNGJKL.js.map} +0 -0
  290. /package/client-dist/{set.module-M3PJXM3W.js.map → set.module-GNLSTQZB.js.map} +0 -0
  291. /package/client-dist/{setup.module-2U3R4YDE.js.map → setup.module-C7IUGHXY.js.map} +0 -0
  292. /package/client-dist/{terminals.module-ULIXEKUD.js.map → terminals.module-7XS2L34N.js.map} +0 -0
  293. /package/client-dist/{voice-notes-poc.module-GZGIIFPR.js.map → voice-notes-poc.module-ZV5GCEJF.js.map} +0 -0
  294. /package/client-dist/{wfs.module-6B4QN7NS.js.map → wfs.module-BT3QPUHF.js.map} +0 -0
@@ -2,16 +2,23 @@
2
2
  * Claude Code session állapotgép (state machine).
3
3
  * Lehetséges átmenetek:
4
4
  * creating → starting → running ↔ waiting_input
5
- * running → completed | errored | terminated | stalled
6
- * waiting_input → running | errored | terminated | stalled
5
+ * running → completed | errored | terminated | stalled | blocked
6
+ * waiting_input → running | errored | terminated | stalled | blocked
7
7
  * stalled → running (bármely új event érkezésére) | terminated
8
8
  * errored → terminated
9
9
  * completed → running (resume)
10
+ * blocked → running (rate-limit reset → auto-trigger 'continue' prompt) | terminated
10
11
  *
11
12
  * A `stalled` nem-terminál állapot: a REQ-CC-STATUS-001 időalapú korrektor
12
13
  * állítja be, amikor egy `running`/`waiting-input` session-ből 5-10 percig
13
14
  * egyetlen új event sem érkezik. Új event érkezésekor automatikusan visszavált
14
15
  * `running`-ra (lásd `CC_Monitoring_ControlService.updateActivity`).
16
+ *
17
+ * A `blocked` nem-terminál állapot: a REQ-CC-BLOCKED-USAGE-LIMIT-001 (cycle 812)
18
+ * Usage Limit Error / rate-limit-reached eseményre állítja be. A reset időpontig
19
+ * minden új user-üzenet queue-ba kerül, scheduled trigger-ek skippelnek.
20
+ * Reset után automatikus „continue" prompt indítja újra a session-t (NEM a
21
+ * queued üzenettel, hanem külön continue-vel — utána a queue-drain kézbesít).
15
22
  */
16
23
  export declare enum CC_Status_Type {
17
24
  /** Session objektum létrejött, CLI process még nem indult. */
@@ -24,6 +31,12 @@ export declare enum CC_Status_Type {
24
31
  waitingInput = "waiting-input",
25
32
  /** Timeout-alapú korrektor megállítottnak jelzi — nincs új event N percig; új event → running. */
26
33
  stalled = "stalled",
34
+ /**
35
+ * REQ-CC-BLOCKED-USAGE-LIMIT-001 (cycle 812): Usage Limit / rate-limit miatt
36
+ * blokkolt — a reset időpontig nem fogadhat input-ot. Auto-resume a reset-kor
37
+ * `continue` prompt-tal, utána queue-drain.
38
+ */
39
+ blocked = "blocked",
27
40
  /** Hiba történt, de session recoverable. */
28
41
  errored = "errored",
29
42
  /** CLI process normálisan lezárult. */
@@ -1 +1 @@
1
- {"version":3,"file":"cc-status.enum.d.ts","sourceRoot":"","sources":["../../../../../../../src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,oBAAY,cAAc;IACxB,8DAA8D;IAC9D,QAAQ,aAAa;IACrB,yDAAyD;IACzD,QAAQ,aAAa;IACrB,wDAAwD;IACxD,OAAO,YAAY;IACnB,qCAAqC;IACrC,YAAY,kBAAkB;IAC9B,kGAAkG;IAClG,OAAO,YAAY;IACnB,4CAA4C;IAC5C,OAAO,YAAY;IACnB,uCAAuC;IACvC,SAAS,cAAc;IACvB,mCAAmC;IACnC,UAAU,eAAe;CAC1B"}
1
+ {"version":3,"file":"cc-status.enum.d.ts","sourceRoot":"","sources":["../../../../../../../src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,oBAAY,cAAc;IACxB,8DAA8D;IAC9D,QAAQ,aAAa;IACrB,yDAAyD;IACzD,QAAQ,aAAa;IACrB,wDAAwD;IACxD,OAAO,YAAY;IACnB,qCAAqC;IACrC,YAAY,kBAAkB;IAC9B,kGAAkG;IAClG,OAAO,YAAY;IACnB;;;;OAIG;IACH,OAAO,YAAY;IACnB,4CAA4C;IAC5C,OAAO,YAAY;IACnB,uCAAuC;IACvC,SAAS,cAAc;IACvB,mCAAmC;IACnC,UAAU,eAAe;CAC1B"}
@@ -5,16 +5,23 @@ exports.CC_Status_Type = void 0;
5
5
  * Claude Code session állapotgép (state machine).
6
6
  * Lehetséges átmenetek:
7
7
  * creating → starting → running ↔ waiting_input
8
- * running → completed | errored | terminated | stalled
9
- * waiting_input → running | errored | terminated | stalled
8
+ * running → completed | errored | terminated | stalled | blocked
9
+ * waiting_input → running | errored | terminated | stalled | blocked
10
10
  * stalled → running (bármely új event érkezésére) | terminated
11
11
  * errored → terminated
12
12
  * completed → running (resume)
13
+ * blocked → running (rate-limit reset → auto-trigger 'continue' prompt) | terminated
13
14
  *
14
15
  * A `stalled` nem-terminál állapot: a REQ-CC-STATUS-001 időalapú korrektor
15
16
  * állítja be, amikor egy `running`/`waiting-input` session-ből 5-10 percig
16
17
  * egyetlen új event sem érkezik. Új event érkezésekor automatikusan visszavált
17
18
  * `running`-ra (lásd `CC_Monitoring_ControlService.updateActivity`).
19
+ *
20
+ * A `blocked` nem-terminál állapot: a REQ-CC-BLOCKED-USAGE-LIMIT-001 (cycle 812)
21
+ * Usage Limit Error / rate-limit-reached eseményre állítja be. A reset időpontig
22
+ * minden új user-üzenet queue-ba kerül, scheduled trigger-ek skippelnek.
23
+ * Reset után automatikus „continue" prompt indítja újra a session-t (NEM a
24
+ * queued üzenettel, hanem külön continue-vel — utána a queue-drain kézbesít).
18
25
  */
19
26
  var CC_Status_Type;
20
27
  (function (CC_Status_Type) {
@@ -28,6 +35,12 @@ var CC_Status_Type;
28
35
  CC_Status_Type["waitingInput"] = "waiting-input";
29
36
  /** Timeout-alapú korrektor megállítottnak jelzi — nincs új event N percig; új event → running. */
30
37
  CC_Status_Type["stalled"] = "stalled";
38
+ /**
39
+ * REQ-CC-BLOCKED-USAGE-LIMIT-001 (cycle 812): Usage Limit / rate-limit miatt
40
+ * blokkolt — a reset időpontig nem fogadhat input-ot. Auto-resume a reset-kor
41
+ * `continue` prompt-tal, utána queue-drain.
42
+ */
43
+ CC_Status_Type["blocked"] = "blocked";
31
44
  /** Hiba történt, de session recoverable. */
32
45
  CC_Status_Type["errored"] = "errored";
33
46
  /** CLI process normálisan lezárult. */
@@ -1 +1 @@
1
- {"version":3,"file":"cc-status.enum.js","sourceRoot":"","sources":["../../../../../../../src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACH,IAAY,cAiBX;AAjBD,WAAY,cAAc;IACxB,8DAA8D;IAC9D,uCAAqB,CAAA;IACrB,yDAAyD;IACzD,uCAAqB,CAAA;IACrB,wDAAwD;IACxD,qCAAmB,CAAA;IACnB,qCAAqC;IACrC,gDAA8B,CAAA;IAC9B,kGAAkG;IAClG,qCAAmB,CAAA;IACnB,4CAA4C;IAC5C,qCAAmB,CAAA;IACnB,uCAAuC;IACvC,yCAAuB,CAAA;IACvB,mCAAmC;IACnC,2CAAyB,CAAA;AAC3B,CAAC,EAjBW,cAAc,8BAAd,cAAc,QAiBzB"}
1
+ {"version":3,"file":"cc-status.enum.js","sourceRoot":"","sources":["../../../../../../../src/_modules/external-sessions/_modules/claude-code/_enums/cc-status.enum.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,IAAY,cAuBX;AAvBD,WAAY,cAAc;IACxB,8DAA8D;IAC9D,uCAAqB,CAAA;IACrB,yDAAyD;IACzD,uCAAqB,CAAA;IACrB,wDAAwD;IACxD,qCAAmB,CAAA;IACnB,qCAAqC;IACrC,gDAA8B,CAAA;IAC9B,kGAAkG;IAClG,qCAAmB,CAAA;IACnB;;;;OAIG;IACH,qCAAmB,CAAA;IACnB,4CAA4C;IAC5C,qCAAmB,CAAA;IACnB,uCAAuC;IACvC,yCAAuB,CAAA;IACvB,mCAAmC;IACnC,2CAAyB,CAAA;AAC3B,CAAC,EAvBW,cAAc,8BAAd,cAAc,QAuBzB"}
@@ -0,0 +1,49 @@
1
+ import { DyFM_DataModel_Params, DyFM_Metadata } from '@futdevpro/fsm-dynamo';
2
+ /**
3
+ * CC Account Usage Event — append-only timeline (REQ-CC-USAGE-DASHBOARD-001 cycle 878).
4
+ *
5
+ * Minden usage-frissítésre (akár stream-driven `rate_limit_event`-ből, akár
6
+ * az auto-pull / manual-pull `/api/oauth/usage`-ból) egy új rekordot dobunk
7
+ * be ebbe a kollekcióba. NEM upsert — minden esemény külön sorként él, hogy
8
+ * **trend-elemzés és metrika-építés** (pl. „mennyit használt a user az utóbbi
9
+ * 7 napban", „milyen ütemben égeti", „mikor érte el a limit-et utoljára")
10
+ * lehetséges legyen.
11
+ *
12
+ * **Indexelt mezők:** `accountKey`, `windowType`, `lastObservedByCcapId`,
13
+ * `observedAt` — a leggyakoribb query-mintákhoz (account-szűrés + idő-tartomány).
14
+ *
15
+ * **NEM helyettesíti** a `CC_AccountUsageState` DBNT-t — az a *legutóbbi*
16
+ * snapshot per `(accountKey, windowType)`, gyors lookup-hoz; ez a *teljes
17
+ * történet* trend-megjelenítéshez. A két DBNT együtt él.
18
+ */
19
+ export declare class CC_AccountUsageEvent extends DyFM_Metadata {
20
+ /** A `CC_Account` rekord stable kulcsa — az event ezt az account-ot érinti. */
21
+ accountKey: string;
22
+ /** Window-typeName: `five_hour` | `seven_day` | `seven_day_opus` | `seven_day_sonnet` | `extra_usage`. */
23
+ windowType: string;
24
+ /** Utilization fraction 0..1 (a CLI / Anthropic által szolgáltatott; lehet undefined ha nem értelmezhető). */
25
+ utilization?: number;
26
+ /** Reset timestamp ms (unix-seconds * 1000 vagy ISO-parsolt). */
27
+ resetsAtMs?: number;
28
+ /** Klasszifikáció a snapshot pillanatában: `reached` | `approaching` | `info`. */
29
+ lastObservedStatus?: string;
30
+ /** Forrás: `stream` (CC session rate_limit_event chunk) vagy `pull` (auto/manual /api/oauth/usage probe). */
31
+ source?: string;
32
+ /** Mely CCAP instance jelezte (akár stream-driven sessionből, akár pull-ból). */
33
+ lastObservedByCcapId?: string;
34
+ /** Stream-driven esetben a CC session id, ami küldte. `pull` source-nál üres / `pool-refresh`. */
35
+ lastObservedBySessionId?: string;
36
+ /** Az esemény timestamp-je (snapshot rögzítésének ideje). */
37
+ observedAt?: Date;
38
+ constructor(set?: CC_AccountUsageEvent);
39
+ }
40
+ /**
41
+ * MongoDB dataParams: `ccap_cc_account_usage_event` collection. Append-only —
42
+ * sose törlünk, sose update-elünk meglévő rekordot. A trend-query mintákhoz
43
+ * a `(accountKey, observedAt)` és `(lastObservedByCcapId, observedAt)` compound
44
+ * index lenne ideális; Slice 1-ben single-field-indexek (a Mongo bő mintázatra
45
+ * single-field is acceptable, compound index a Slice 4 instance-mapping
46
+ * mintára Slice utánra hagyva).
47
+ */
48
+ export declare const ccapCcAccountUsageEvent_dataParams: DyFM_DataModel_Params<CC_AccountUsageEvent>;
49
+ //# sourceMappingURL=cc-account-usage-event.data-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-account-usage-event.data-model.d.ts","sourceRoot":"","sources":["../../../../../../../../src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAe,MAAM,uBAAuB,CAAC;AAE1F;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;IACrD,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAM;IAExB,0GAA0G;IAC1G,UAAU,EAAE,MAAM,CAAM;IAExB,8GAA8G;IAC9G,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kFAAkF;IAClF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,6GAA6G;IAC7G,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,kGAAkG;IAClG,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,IAAI,CAAC;gBAEN,GAAG,CAAC,EAAE,oBAAoB;CAOvC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kCAAkC,EAAE,qBAAqB,CAAC,oBAAoB,CAcvF,CAAC"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ccapCcAccountUsageEvent_dataParams = exports.CC_AccountUsageEvent = void 0;
4
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
+ /**
6
+ * CC Account Usage Event — append-only timeline (REQ-CC-USAGE-DASHBOARD-001 cycle 878).
7
+ *
8
+ * Minden usage-frissítésre (akár stream-driven `rate_limit_event`-ből, akár
9
+ * az auto-pull / manual-pull `/api/oauth/usage`-ból) egy új rekordot dobunk
10
+ * be ebbe a kollekcióba. NEM upsert — minden esemény külön sorként él, hogy
11
+ * **trend-elemzés és metrika-építés** (pl. „mennyit használt a user az utóbbi
12
+ * 7 napban", „milyen ütemben égeti", „mikor érte el a limit-et utoljára")
13
+ * lehetséges legyen.
14
+ *
15
+ * **Indexelt mezők:** `accountKey`, `windowType`, `lastObservedByCcapId`,
16
+ * `observedAt` — a leggyakoribb query-mintákhoz (account-szűrés + idő-tartomány).
17
+ *
18
+ * **NEM helyettesíti** a `CC_AccountUsageState` DBNT-t — az a *legutóbbi*
19
+ * snapshot per `(accountKey, windowType)`, gyors lookup-hoz; ez a *teljes
20
+ * történet* trend-megjelenítéshez. A két DBNT együtt él.
21
+ */
22
+ class CC_AccountUsageEvent extends fsm_dynamo_1.DyFM_Metadata {
23
+ /** A `CC_Account` rekord stable kulcsa — az event ezt az account-ot érinti. */
24
+ accountKey = '';
25
+ /** Window-typeName: `five_hour` | `seven_day` | `seven_day_opus` | `seven_day_sonnet` | `extra_usage`. */
26
+ windowType = '';
27
+ /** Utilization fraction 0..1 (a CLI / Anthropic által szolgáltatott; lehet undefined ha nem értelmezhető). */
28
+ utilization;
29
+ /** Reset timestamp ms (unix-seconds * 1000 vagy ISO-parsolt). */
30
+ resetsAtMs;
31
+ /** Klasszifikáció a snapshot pillanatában: `reached` | `approaching` | `info`. */
32
+ lastObservedStatus;
33
+ /** Forrás: `stream` (CC session rate_limit_event chunk) vagy `pull` (auto/manual /api/oauth/usage probe). */
34
+ source;
35
+ /** Mely CCAP instance jelezte (akár stream-driven sessionből, akár pull-ból). */
36
+ lastObservedByCcapId;
37
+ /** Stream-driven esetben a CC session id, ami küldte. `pull` source-nál üres / `pool-refresh`. */
38
+ lastObservedBySessionId;
39
+ /** Az esemény timestamp-je (snapshot rögzítésének ideje). */
40
+ observedAt;
41
+ constructor(set) {
42
+ super(set);
43
+ if (set) {
44
+ fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
45
+ }
46
+ }
47
+ }
48
+ exports.CC_AccountUsageEvent = CC_AccountUsageEvent;
49
+ /**
50
+ * MongoDB dataParams: `ccap_cc_account_usage_event` collection. Append-only —
51
+ * sose törlünk, sose update-elünk meglévő rekordot. A trend-query mintákhoz
52
+ * a `(accountKey, observedAt)` és `(lastObservedByCcapId, observedAt)` compound
53
+ * index lenne ideális; Slice 1-ben single-field-indexek (a Mongo bő mintázatra
54
+ * single-field is acceptable, compound index a Slice 4 instance-mapping
55
+ * mintára Slice utánra hagyva).
56
+ */
57
+ exports.ccapCcAccountUsageEvent_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
58
+ dataName: 'ccap_cc_account_usage_event',
59
+ properties: {
60
+ accountKey: { type: 'string', required: true, index: true },
61
+ windowType: { type: 'string', required: true, index: true },
62
+ utilization: { type: 'number' },
63
+ resetsAtMs: { type: 'number' },
64
+ lastObservedStatus: { type: 'string' },
65
+ source: { type: 'string', index: true },
66
+ lastObservedByCcapId: { type: 'string', index: true },
67
+ lastObservedBySessionId: { type: 'string' },
68
+ observedAt: { type: 'date', index: true },
69
+ },
70
+ });
71
+ //# sourceMappingURL=cc-account-usage-event.data-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-account-usage-event.data-model.js","sourceRoot":"","sources":["../../../../../../../../src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.ts"],"names":[],"mappings":";;;AAAA,sDAA0F;AAE1F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,oBAAqB,SAAQ,0BAAa;IACrD,+EAA+E;IAC/E,UAAU,GAAW,EAAE,CAAC;IAExB,0GAA0G;IAC1G,UAAU,GAAW,EAAE,CAAC;IAExB,8GAA8G;IAC9G,WAAW,CAAU;IAErB,iEAAiE;IACjE,UAAU,CAAU;IAEpB,kFAAkF;IAClF,kBAAkB,CAAU;IAE5B,6GAA6G;IAC7G,MAAM,CAAU;IAEhB,iFAAiF;IACjF,oBAAoB,CAAU;IAE9B,kGAAkG;IAClG,uBAAuB,CAAU;IAEjC,6DAA6D;IAC7D,UAAU,CAAQ;IAElB,YAAY,GAA0B;QACpC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEX,IAAI,GAAG,EAAE,CAAC;YACR,wBAAW,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;CACF;AAnCD,oDAmCC;AAED;;;;;;;GAOG;AACU,QAAA,kCAAkC,GAC7C,IAAI,kCAAqB,CAAuB;IAC9C,QAAQ,EAAE,6BAA6B;IACvC,UAAU,EAAE;QACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QAC3D,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QAC3D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/B,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,kBAAkB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;QACvC,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;QACrD,uBAAuB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3C,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;KAC1C;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cc-account-usage-event.data-model.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-account-usage-event.data-model.spec.d.ts","sourceRoot":"","sources":["../../../../../../../../src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cc_account_usage_event_data_model_1 = require("./cc-account-usage-event.data-model");
4
+ describe('CC_AccountUsageEvent data model', () => {
5
+ it('üres konstruktorral létrehozható', () => {
6
+ const m = new cc_account_usage_event_data_model_1.CC_AccountUsageEvent();
7
+ expect(m).toBeDefined();
8
+ expect(m.accountKey).toBe('');
9
+ expect(m.windowType).toBe('');
10
+ });
11
+ it('set paraméterrel inicializálja a mezőket', () => {
12
+ const set = {
13
+ accountKey: 'k1',
14
+ windowType: 'five_hour',
15
+ utilization: 0.45,
16
+ resetsAtMs: 1_900_000_000_000,
17
+ lastObservedStatus: 'approaching',
18
+ source: 'pull',
19
+ lastObservedByCcapId: 'ccap-1',
20
+ lastObservedBySessionId: 'pool-refresh',
21
+ observedAt: new Date('2026-05-09T10:00:00.000Z'),
22
+ };
23
+ const m = new cc_account_usage_event_data_model_1.CC_AccountUsageEvent(set);
24
+ expect(m.accountKey).toBe('k1');
25
+ expect(m.windowType).toBe('five_hour');
26
+ expect(m.utilization).toBe(0.45);
27
+ expect(m.source).toBe('pull');
28
+ expect(m.lastObservedByCcapId).toBe('ccap-1');
29
+ });
30
+ it('dataParams dataName ccap_cc_account_usage_event', () => {
31
+ expect(cc_account_usage_event_data_model_1.ccapCcAccountUsageEvent_dataParams.dataName).toBe('ccap_cc_account_usage_event');
32
+ });
33
+ it('dataParams: accountKey + windowType kötelező + indexelt', () => {
34
+ const props = cc_account_usage_event_data_model_1.ccapCcAccountUsageEvent_dataParams.properties;
35
+ expect(props.accountKey).toEqual(jasmine.objectContaining({ type: 'string', required: true, index: true }));
36
+ expect(props.windowType).toEqual(jasmine.objectContaining({ type: 'string', required: true, index: true }));
37
+ });
38
+ it('dataParams: source / lastObservedByCcapId / observedAt indexelt (trend-query)', () => {
39
+ const props = cc_account_usage_event_data_model_1.ccapCcAccountUsageEvent_dataParams.properties;
40
+ expect(props.source.index).toBe(true);
41
+ expect(props.lastObservedByCcapId.index).toBe(true);
42
+ expect(props.observedAt.index).toBe(true);
43
+ });
44
+ });
45
+ //# sourceMappingURL=cc-account-usage-event.data-model.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cc-account-usage-event.data-model.spec.js","sourceRoot":"","sources":["../../../../../../../../src/_modules/external-sessions/_modules/claude-code/_models/data-models/cc-account-usage-event.data-model.spec.ts"],"names":[],"mappings":";;AAAA,2FAG6C;AAE7C,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAE/C,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAyB,IAAI,wDAAoB,EAAE,CAAC;QAC3D,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAkC;YACzC,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,WAAW;YACvB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,iBAAiB;YAC7B,kBAAkB,EAAE,aAAa;YACjC,MAAM,EAAE,MAAM;YACd,oBAAoB,EAAE,QAAQ;YAC9B,uBAAuB,EAAE,cAAc;YACvC,UAAU,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;SACjD,CAAC;QACF,MAAM,CAAC,GAAyB,IAAI,wDAAoB,CAAC,GAA2B,CAAC,CAAC;QACtF,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,sEAAkC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,KAAK,GAA4B,sEAAkC,CAAC,UAAU,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5G,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,KAAK,GAAwC,sEAAkC,CAAC,UAAU,CAAC;QACjG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { DyNTS_SingletonService } from '@futdevpro/nts-dynamo';
2
2
  import { CC_Account } from '../../_models/data-models/cc-account.data-model';
3
+ import { CC_AccountUsageEvent } from '../../_models/data-models/cc-account-usage-event.data-model';
3
4
  import { CC_AccountUsageState } from '../../_models/data-models/cc-account-usage-state.data-model';
4
5
  /**
5
6
  * REST handler delegáció a CC Account endpoint-okhoz
@@ -18,6 +19,15 @@ export declare class CC_AccountRoute_ControlService extends DyNTS_SingletonServi
18
19
  static readonly ACCOUNT_KEY_PATTERN: RegExp;
19
20
  /** displayName max hossz — limit a `/list` response méretére (Dashboard pollolható). */
20
21
  static readonly DISPLAY_NAME_MAX_LENGTH: number;
22
+ /** Email max hossz — RFC 5321 (320 char). */
23
+ static readonly EMAIL_MAX_LENGTH: number;
24
+ /**
25
+ * Email alap-formátum check (cycle 876). NEM teljes RFC 5322 — csak a triviális
26
+ * szakmányos validáció (`local@domain.tld`). A fő cél: a UI-bind ne fogadjon
27
+ * el véletlen szóközös / üres / random stringet. A teljes RFC 5322 implementálás
28
+ * túlzás (a server NEM authentikál ezzel — pure metadata).
29
+ */
30
+ static readonly EMAIL_BASIC_PATTERN: RegExp;
21
31
  /** Kontroll-karakter regex — sose engedjük be DB-be (későbbi UI-render zavart okozna). */
22
32
  static readonly CONTROL_CHAR_PATTERN: RegExp;
23
33
  static getInstance(): CC_AccountRoute_ControlService;
@@ -53,6 +63,25 @@ export declare class CC_AccountRoute_ControlService extends DyNTS_SingletonServi
53
63
  }): Promise<{
54
64
  items: CC_AccountUsageState[];
55
65
  }>;
66
+ /**
67
+ * GET /cc-account/:accountKey/usage-history?windowType=&fromMs=&toMs=
68
+ *
69
+ * Történeti usage-event-lista (cycle 878). Append-only timeline a
70
+ * `ccap_cc_account_usage_event` collection-ből, opcionális szűrésekkel:
71
+ * - `windowType` (one of `five_hour|seven_day|seven_day_opus|seven_day_sonnet|extra_usage`)
72
+ * - `fromMs` / `toMs` (Unix ms timestamps az `observedAt`-ra)
73
+ *
74
+ * Sorrend: rögzítés szerinti (insert-order, opcionális explicit `observedAt`-rendezés
75
+ * a kliens-oldalon). A Dashboard chart-rendere ebből építi a trend-vonalat.
76
+ */
77
+ handleGetAccountUsageHistory(params: {
78
+ accountKey: string;
79
+ query: unknown;
80
+ }): Promise<{
81
+ items: CC_AccountUsageEvent[];
82
+ }>;
83
+ /** Query-param parse pozitív integer ms timestamp-re. */
84
+ private parsePositiveInt;
56
85
  /**
57
86
  * POST /cc-account/:accountKey/refresh-usage — aktív usage-pull az Anthropic
58
87
  * `/api/oauth/usage` endpoint-jával (REQ-CC-USAGE-DASHBOARD-001 cycle 873).
@@ -88,7 +117,13 @@ export declare class CC_AccountRoute_ControlService extends DyNTS_SingletonServi
88
117
  items: CC_AccountUsageState[];
89
118
  }[];
90
119
  }>;
91
- /** PATCH /cc-account/:accountKey — user-readable display-name átírása. */
120
+ /**
121
+ * PATCH /cc-account/:accountKey — user-editable mezők frissítése: `displayName`
122
+ * és/vagy `email` (cycle 876). Mindkettő opcionális — ha mindkettő hiányzik
123
+ * → 400. Ha az `email` empty/null → kitörli (clear). Validáció: displayName
124
+ * 200-char cap + control-char tiltás (mint korábban); email RFC-szerű alap-
125
+ * formátum-check (`@` + `.`) és 320-char cap (RFC 5321).
126
+ */
92
127
  handleRenameAccount(params: {
93
128
  accountKey: string;
94
129
  body: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"cc-account-route.control-service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6DAA6D,CAAC;AAInG;;;;;;;;;;;GAWG;AACH,qBAAa,8BAA+B,SAAQ,sBAAsB;IAExE,iGAAiG;IACjG,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAoB;IAE/D,wFAAwF;IACxF,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAO;IAEtD,0FAA0F;IAC1F,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAA2B;IAEvE,MAAM,CAAC,WAAW,IAAI,8BAA8B;IAIpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CACe;IAE9C,2DAA2D;IACrD,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAK5D;;;OAGG;IACG,0BAA0B,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAI9F,2DAA2D;IACrD,gBAAgB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAe3E;;;;;;;;;OASG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;KAAE,CAAC;IASvG;;;;;;;;;;OAUG;IACG,yBAAyB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACvE,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IA8FF;;;;;;;;;;OAUG;IACG,wBAAwB,IAAI,OAAO,CAAC;QACxC,SAAS,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,oBAAoB,EAAE,CAAA;SAAE,EAAE,CAAC;KAChE,CAAC;IA0BF,0EAA0E;IACpE,mBAAmB,CAAC,MAAM,EAAE;QAChC,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,UAAU,CAAC;IAiEvB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;CAgBjC"}
1
+ {"version":3,"file":"cc-account-route.control-service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6DAA6D,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,6DAA6D,CAAC;AAKnG;;;;;;;;;;;GAWG;AACH,qBAAa,8BAA+B,SAAQ,sBAAsB;IAExE,iGAAiG;IACjG,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAoB;IAE/D,wFAAwF;IACxF,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAO;IAEtD,6CAA6C;IAC7C,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAO;IAE/C;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAgC;IAE3E,0FAA0F;IAC1F,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAA2B;IAEvE,MAAM,CAAC,WAAW,IAAI,8BAA8B;IAIpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CACe;IAE9C,2DAA2D;IACrD,kBAAkB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAK5D;;;OAGG;IACG,0BAA0B,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAI9F,2DAA2D;IACrD,gBAAgB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAe3E;;;;;;;;;OASG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;KAAE,CAAC;IASvG;;;;;;;;;;OAUG;IACG,4BAA4B,CAAC,MAAM,EAAE;QACzC,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,OAAO,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;KAAE,CAAC;IAyB9C,yDAAyD;IACzD,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;;;OAUG;IACG,yBAAyB,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACvE,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IA8FF;;;;;;;;;;OAUG;IACG,wBAAwB,IAAI,OAAO,CAAC;QACxC,SAAS,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,oBAAoB,EAAE,CAAA;SAAE,EAAE,CAAC;KAChE,CAAC;IA0BF;;;;;;OAMG;IACG,mBAAmB,CAAC,MAAM,EAAE;QAChC,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,GAAG,OAAO,CAAC,UAAU,CAAC;IAmIvB;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;CAgBjC"}
@@ -4,6 +4,7 @@ exports.CC_AccountRoute_ControlService = void 0;
4
4
  const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
5
  const nts_dynamo_1 = require("@futdevpro/nts-dynamo");
6
6
  const cc_account_pool_control_service_1 = require("../../_services/core/account/cc-account-pool.control-service");
7
+ const cc_account_usage_event_data_service_1 = require("../../_services/core/account/cc-account-usage-event.data-service");
7
8
  const cc_account_usage_state_data_service_1 = require("../../_services/core/account/cc-account-usage-state.data-service");
8
9
  /**
9
10
  * REST handler delegáció a CC Account endpoint-okhoz
@@ -22,6 +23,15 @@ class CC_AccountRoute_ControlService extends nts_dynamo_1.DyNTS_SingletonService
22
23
  static ACCOUNT_KEY_PATTERN = /^[a-f0-9]{12}$/;
23
24
  /** displayName max hossz — limit a `/list` response méretére (Dashboard pollolható). */
24
25
  static DISPLAY_NAME_MAX_LENGTH = 200;
26
+ /** Email max hossz — RFC 5321 (320 char). */
27
+ static EMAIL_MAX_LENGTH = 320;
28
+ /**
29
+ * Email alap-formátum check (cycle 876). NEM teljes RFC 5322 — csak a triviális
30
+ * szakmányos validáció (`local@domain.tld`). A fő cél: a UI-bind ne fogadjon
31
+ * el véletlen szóközös / üres / random stringet. A teljes RFC 5322 implementálás
32
+ * túlzás (a server NEM authentikál ezzel — pure metadata).
33
+ */
34
+ static EMAIL_BASIC_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
25
35
  /** Kontroll-karakter regex — sose engedjük be DB-be (későbbi UI-render zavart okozna). */
26
36
  static CONTROL_CHAR_PATTERN = /[\u0000-\u001F\u007F]/;
27
37
  static getInstance() {
@@ -73,6 +83,48 @@ class CC_AccountRoute_ControlService extends nts_dynamo_1.DyNTS_SingletonService
73
83
  const items = await ds.listByAccountKey(params.accountKey);
74
84
  return { items: items };
75
85
  }
86
+ /**
87
+ * GET /cc-account/:accountKey/usage-history?windowType=&fromMs=&toMs=
88
+ *
89
+ * Történeti usage-event-lista (cycle 878). Append-only timeline a
90
+ * `ccap_cc_account_usage_event` collection-ből, opcionális szűrésekkel:
91
+ * - `windowType` (one of `five_hour|seven_day|seven_day_opus|seven_day_sonnet|extra_usage`)
92
+ * - `fromMs` / `toMs` (Unix ms timestamps az `observedAt`-ra)
93
+ *
94
+ * Sorrend: rögzítés szerinti (insert-order, opcionális explicit `observedAt`-rendezés
95
+ * a kliens-oldalon). A Dashboard chart-rendere ebből építi a trend-vonalat.
96
+ */
97
+ async handleGetAccountUsageHistory(params) {
98
+ this.validateAccountKeyFormat(params.accountKey);
99
+ const queryRec = params.query != null && typeof params.query === 'object' && !Array.isArray(params.query)
100
+ ? params.query
101
+ : {};
102
+ const windowType = typeof queryRec.windowType === 'string'
103
+ ? queryRec.windowType
104
+ : undefined;
105
+ const fromMs = this.parsePositiveInt(queryRec.fromMs);
106
+ const toMs = this.parsePositiveInt(queryRec.toMs);
107
+ const ds = new cc_account_usage_event_data_service_1.CC_AccountUsageEvent_DataService({
108
+ issuer: 'cc-account-route:get-usage-history',
109
+ });
110
+ const items = await ds.listByAccountInRange({
111
+ accountKey: params.accountKey,
112
+ windowType: windowType,
113
+ fromMs: fromMs,
114
+ toMs: toMs,
115
+ });
116
+ return { items: items };
117
+ }
118
+ /** Query-param parse pozitív integer ms timestamp-re. */
119
+ parsePositiveInt(raw) {
120
+ if (typeof raw === 'string' && raw !== '') {
121
+ const parsed = Number(raw);
122
+ if (!isNaN(parsed) && parsed > 0) {
123
+ return parsed;
124
+ }
125
+ }
126
+ return undefined;
127
+ }
76
128
  /**
77
129
  * POST /cc-account/:accountKey/refresh-usage — aktív usage-pull az Anthropic
78
130
  * `/api/oauth/usage` endpoint-jával (REQ-CC-USAGE-DASHBOARD-001 cycle 873).
@@ -203,59 +255,130 @@ class CC_AccountRoute_ControlService extends nts_dynamo_1.DyNTS_SingletonService
203
255
  }
204
256
  return { instances: instances };
205
257
  }
206
- /** PATCH /cc-account/:accountKey — user-readable display-name átírása. */
258
+ /**
259
+ * PATCH /cc-account/:accountKey — user-editable mezők frissítése: `displayName`
260
+ * és/vagy `email` (cycle 876). Mindkettő opcionális — ha mindkettő hiányzik
261
+ * → 400. Ha az `email` empty/null → kitörli (clear). Validáció: displayName
262
+ * 200-char cap + control-char tiltás (mint korábban); email RFC-szerű alap-
263
+ * formátum-check (`@` + `.`) és 320-char cap (RFC 5321).
264
+ */
207
265
  async handleRenameAccount(params) {
208
266
  this.validateAccountKeyFormat(params.accountKey);
209
- const displayNameRaw = params.body?.displayName;
210
- if (typeof displayNameRaw !== 'string') {
211
- throw new fsm_dynamo_1.DyFM_Error({
212
- message: 'CC Account rename: displayName is required and must be a string.',
213
- errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
214
- status: 400,
215
- error: new Error('Invalid displayName: not a string'),
216
- additionalContent: { accountKey: params.accountKey, providedDisplayNameType: typeof displayNameRaw },
217
- });
218
- }
219
- const trimmed = displayNameRaw.trim();
220
- if (trimmed === '') {
221
- throw new fsm_dynamo_1.DyFM_Error({
222
- message: 'CC Account rename: displayName must be non-empty after trim.',
223
- errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
224
- status: 400,
225
- error: new Error('Invalid displayName: empty'),
226
- additionalContent: { accountKey: params.accountKey, rawLength: displayNameRaw.length },
227
- });
267
+ const fields = {};
268
+ let anyFieldProvided = false;
269
+ // displayName (opcionális, de ha jelen → validáljuk).
270
+ if (params.body?.displayName !== undefined) {
271
+ anyFieldProvided = true;
272
+ const raw = params.body.displayName;
273
+ if (typeof raw !== 'string') {
274
+ throw new fsm_dynamo_1.DyFM_Error({
275
+ message: 'CC Account update: displayName must be a string.',
276
+ errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
277
+ status: 400,
278
+ error: new Error('Invalid displayName: not a string'),
279
+ additionalContent: { accountKey: params.accountKey, providedType: typeof raw },
280
+ });
281
+ }
282
+ const trimmed = raw.trim();
283
+ if (trimmed === '') {
284
+ throw new fsm_dynamo_1.DyFM_Error({
285
+ message: 'CC Account update: displayName must be non-empty after trim.',
286
+ errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
287
+ status: 400,
288
+ error: new Error('Invalid displayName: empty'),
289
+ additionalContent: { accountKey: params.accountKey, rawLength: raw.length },
290
+ });
291
+ }
292
+ if (trimmed.length > CC_AccountRoute_ControlService.DISPLAY_NAME_MAX_LENGTH) {
293
+ throw new fsm_dynamo_1.DyFM_Error({
294
+ message: `CC Account update: displayName exceeds max length`
295
+ + ` (${CC_AccountRoute_ControlService.DISPLAY_NAME_MAX_LENGTH} chars).`,
296
+ errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
297
+ status: 400,
298
+ error: new Error(`Invalid displayName: too long (${trimmed.length} chars)`),
299
+ additionalContent: {
300
+ accountKey: params.accountKey,
301
+ providedLength: trimmed.length,
302
+ maxLength: CC_AccountRoute_ControlService.DISPLAY_NAME_MAX_LENGTH,
303
+ },
304
+ });
305
+ }
306
+ if (CC_AccountRoute_ControlService.CONTROL_CHAR_PATTERN.test(trimmed)) {
307
+ throw new fsm_dynamo_1.DyFM_Error({
308
+ message: 'CC Account update: displayName must not contain control characters.',
309
+ errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
310
+ status: 400,
311
+ error: new Error('Invalid displayName: contains control characters'),
312
+ additionalContent: { accountKey: params.accountKey },
313
+ });
314
+ }
315
+ fields.displayName = trimmed;
228
316
  }
229
- if (trimmed.length > CC_AccountRoute_ControlService.DISPLAY_NAME_MAX_LENGTH) {
230
- throw new fsm_dynamo_1.DyFM_Error({
231
- message: `CC Account rename: displayName exceeds max length`
232
- + ` (${CC_AccountRoute_ControlService.DISPLAY_NAME_MAX_LENGTH} chars).`,
233
- errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
234
- status: 400,
235
- error: new Error(`Invalid displayName: too long (${trimmed.length} chars)`),
236
- additionalContent: {
237
- accountKey: params.accountKey,
238
- providedLength: trimmed.length,
239
- maxLength: CC_AccountRoute_ControlService.DISPLAY_NAME_MAX_LENGTH,
240
- },
241
- });
317
+ // email (opcionális). Empty / null → clear; non-empty → RFC alap-validáció.
318
+ if (params.body?.email !== undefined) {
319
+ anyFieldProvided = true;
320
+ const raw = params.body.email;
321
+ if (raw === null || (typeof raw === 'string' && raw.trim() === '')) {
322
+ fields.email = null; // clear
323
+ }
324
+ else if (typeof raw === 'string') {
325
+ const trimmed = raw.trim();
326
+ if (trimmed.length > CC_AccountRoute_ControlService.EMAIL_MAX_LENGTH) {
327
+ throw new fsm_dynamo_1.DyFM_Error({
328
+ message: `CC Account update: email exceeds max length`
329
+ + ` (${CC_AccountRoute_ControlService.EMAIL_MAX_LENGTH} chars per RFC 5321).`,
330
+ errorCode: 'CCAP-CC-ACCOUNT-EMAIL-INVALID',
331
+ status: 400,
332
+ error: new Error(`Invalid email: too long (${trimmed.length} chars)`),
333
+ additionalContent: { accountKey: params.accountKey, providedLength: trimmed.length },
334
+ });
335
+ }
336
+ if (!CC_AccountRoute_ControlService.EMAIL_BASIC_PATTERN.test(trimmed)) {
337
+ throw new fsm_dynamo_1.DyFM_Error({
338
+ message: 'CC Account update: email must look like an email address (`local@domain.tld`).',
339
+ errorCode: 'CCAP-CC-ACCOUNT-EMAIL-INVALID',
340
+ status: 400,
341
+ error: new Error('Invalid email: format check failed'),
342
+ additionalContent: { accountKey: params.accountKey },
343
+ });
344
+ }
345
+ if (CC_AccountRoute_ControlService.CONTROL_CHAR_PATTERN.test(trimmed)) {
346
+ throw new fsm_dynamo_1.DyFM_Error({
347
+ message: 'CC Account update: email must not contain control characters.',
348
+ errorCode: 'CCAP-CC-ACCOUNT-EMAIL-INVALID',
349
+ status: 400,
350
+ error: new Error('Invalid email: contains control characters'),
351
+ additionalContent: { accountKey: params.accountKey },
352
+ });
353
+ }
354
+ fields.email = trimmed;
355
+ }
356
+ else {
357
+ throw new fsm_dynamo_1.DyFM_Error({
358
+ message: 'CC Account update: email must be a string or null.',
359
+ errorCode: 'CCAP-CC-ACCOUNT-EMAIL-INVALID',
360
+ status: 400,
361
+ error: new Error('Invalid email: not a string'),
362
+ additionalContent: { accountKey: params.accountKey, providedType: typeof raw },
363
+ });
364
+ }
242
365
  }
243
- if (CC_AccountRoute_ControlService.CONTROL_CHAR_PATTERN.test(trimmed)) {
366
+ if (!anyFieldProvided) {
244
367
  throw new fsm_dynamo_1.DyFM_Error({
245
- message: 'CC Account rename: displayName must not contain control characters.',
368
+ message: 'CC Account update: at least one of `displayName` or `email` must be provided.',
246
369
  errorCode: 'CCAP-CC-ACCOUNT-RENAME-INVALID',
247
370
  status: 400,
248
- error: new Error('Invalid displayName: contains control characters'),
371
+ error: new Error('No editable fields provided'),
249
372
  additionalContent: { accountKey: params.accountKey },
250
373
  });
251
374
  }
252
- const updated = await this.accountPool_CS.renameAccount(params.accountKey, trimmed);
375
+ const updated = await this.accountPool_CS.renameAccount(params.accountKey, fields);
253
376
  if (updated == null) {
254
377
  throw new fsm_dynamo_1.DyFM_Error({
255
- message: `CC Account not found for rename: ${params.accountKey}`,
378
+ message: `CC Account not found for update: ${params.accountKey}`,
256
379
  errorCode: 'CCAP-CC-ACCOUNT-NOT-FOUND',
257
380
  status: 404,
258
- error: new Error(`CC Account not found for rename: ${params.accountKey}`),
381
+ error: new Error(`CC Account not found for update: ${params.accountKey}`),
259
382
  additionalContent: { accountKey: params.accountKey },
260
383
  });
261
384
  }