@futdevpro/ccap 1.1.2863 → 1.1.2881

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 (241) hide show
  1. package/client-dist/{agent-instances.module-SRVXVWB4.js → agent-instances.module-U742BGNW.js} +2 -2
  2. package/client-dist/{ca.module-ZAYCRAK6.js → ca.module-WANXRIO7.js} +2 -2
  3. package/client-dist/cc-usage-dashboard.component-TPMSJIGI.js +2 -0
  4. package/client-dist/cc-usage-dashboard.component-TPMSJIGI.js.map +7 -0
  5. package/client-dist/{cc.module-BF2AOAIM.js → cc.module-JZUXUXHP.js} +2 -2
  6. package/client-dist/{chunk-CBIUSRE5.js → chunk-26DXMUXV.js} +2 -2
  7. package/client-dist/{chunk-AFF37OKI.js → chunk-2LJT2APC.js} +2 -2
  8. package/client-dist/{chunk-O7U4KV25.js → chunk-435IBC6L.js} +2 -2
  9. package/client-dist/{chunk-7JFONJTJ.js → chunk-467OMXRK.js} +2 -2
  10. package/client-dist/{chunk-7MSQD5HV.js → chunk-46N7EC7U.js} +2 -2
  11. package/client-dist/{chunk-XXO2YNDP.js → chunk-4OKUKX55.js} +2 -2
  12. package/client-dist/{chunk-34XFCTVF.js → chunk-4RRBZXYU.js} +2 -2
  13. package/client-dist/{chunk-OIBDRASW.js → chunk-4TBE5I3U.js} +2 -2
  14. package/client-dist/{chunk-DUN7ICUI.js → chunk-6A2IM2XR.js} +2 -2
  15. package/client-dist/{chunk-2LOFMRCO.js → chunk-6BQHKSUP.js} +2 -2
  16. package/client-dist/{chunk-4TEHGQ5C.js → chunk-6IYFOHCN.js} +2 -2
  17. package/client-dist/{chunk-WYTT3YHQ.js → chunk-6NWEJXDU.js} +2 -2
  18. package/client-dist/{chunk-ZMZ462V7.js → chunk-767Z7I55.js} +2 -2
  19. package/client-dist/{chunk-YU32GIMP.js → chunk-AS2SYIJB.js} +2 -2
  20. package/client-dist/{chunk-QUEQSNIS.js → chunk-BHWHGLKC.js} +2 -2
  21. package/client-dist/{chunk-TUKCFE3B.js → chunk-CILMMQ5V.js} +2 -2
  22. package/client-dist/{chunk-B7WQ5TK3.js → chunk-CSHUFD2L.js} +2 -2
  23. package/client-dist/{chunk-EZNIJZBL.js → chunk-DNHL6M7F.js} +2 -2
  24. package/client-dist/{chunk-EDQWK2Q5.js → chunk-DUN255KX.js} +2 -2
  25. package/client-dist/{chunk-UI6N7Y2P.js → chunk-EBSMIZTK.js} +2 -2
  26. package/client-dist/{chunk-YGTNCGIU.js → chunk-EY32IBWM.js} +2 -2
  27. package/client-dist/{chunk-I6OBHW45.js → chunk-FJGBPKHK.js} +2 -2
  28. package/client-dist/{chunk-EIT3LSQO.js → chunk-GDAL4G4Y.js} +2 -2
  29. package/client-dist/{chunk-FYXUOXRP.js → chunk-GR3CXOIX.js} +2 -2
  30. package/client-dist/{chunk-GODWUWRO.js → chunk-HDCFO7OE.js} +2 -2
  31. package/client-dist/{chunk-2X5MWPDN.js → chunk-HFVIX2ZG.js} +2 -2
  32. package/client-dist/{chunk-SX22WHCZ.js → chunk-HPBX6VCV.js} +2 -2
  33. package/client-dist/{chunk-VXJF6N32.js → chunk-IR4THKPA.js} +2 -2
  34. package/client-dist/{chunk-DZ74YN25.js → chunk-J5NYZUBP.js} +2 -2
  35. package/client-dist/{chunk-7JW45JC5.js → chunk-JDK64BE7.js} +2 -2
  36. package/client-dist/{chunk-EUY2HZZV.js → chunk-KMEGS6BP.js} +2 -2
  37. package/client-dist/{chunk-77HGZO43.js → chunk-KQLKM7RB.js} +2 -2
  38. package/client-dist/{chunk-52JG2IIG.js → chunk-LERWAULE.js} +2 -2
  39. package/client-dist/{chunk-L7PQ72ZG.js → chunk-M3RL34GF.js} +2 -2
  40. package/client-dist/{chunk-X2FIFUXZ.js → chunk-NJPSU6MN.js} +2 -2
  41. package/client-dist/{chunk-DHIVAX2C.js → chunk-ONEB5UF5.js} +2 -2
  42. package/client-dist/{chunk-ELFCSLIP.js → chunk-OP2PE3KG.js} +2 -2
  43. package/client-dist/{chunk-ELFCSLIP.js.map → chunk-OP2PE3KG.js.map} +1 -1
  44. package/client-dist/{chunk-SO3QL2U5.js → chunk-OZGFJXOA.js} +2 -2
  45. package/client-dist/{chunk-WQIBGXGU.js → chunk-PPRG7F5A.js} +2 -2
  46. package/client-dist/{chunk-4RT7LOTQ.js → chunk-PQUBI6TC.js} +2 -2
  47. package/client-dist/{chunk-XSP7NLZB.js → chunk-Q6JQHJME.js} +2 -2
  48. package/client-dist/{chunk-Q7GDEJL2.js → chunk-QDTY7SR6.js} +2 -2
  49. package/client-dist/{chunk-VLMQV3OI.js → chunk-RQ2HFT2L.js} +2 -2
  50. package/client-dist/{chunk-DU3IYPGM.js → chunk-RRN36VPR.js} +2 -2
  51. package/client-dist/{chunk-NI4AZWY2.js → chunk-S4GJTHYZ.js} +2 -2
  52. package/client-dist/{chunk-2Y7GYEOT.js → chunk-SKHAAE4A.js} +2 -2
  53. package/client-dist/{chunk-4XEPGDZH.js → chunk-TSPROG7P.js} +2 -2
  54. package/client-dist/{chunk-QHLRSGQG.js → chunk-U7ZBDYGU.js} +2 -2
  55. package/client-dist/{chunk-2DJBCAHJ.js → chunk-VQWGWQDA.js} +2 -2
  56. package/client-dist/{chunk-ZGWUDLYU.js → chunk-X7HHJQ2O.js} +2 -2
  57. package/client-dist/{chunk-23GMPVB5.js → chunk-XH3SQ4UP.js} +2 -2
  58. package/client-dist/{chunk-PZMEVMSF.js → chunk-XHF463TC.js} +2 -2
  59. package/client-dist/{chunk-CUUDVYOC.js → chunk-XJEATRA4.js} +2 -2
  60. package/client-dist/{chunk-QTRIOR6Z.js → chunk-XSXQC64X.js} +2 -2
  61. package/client-dist/{chunk-EMVGFT6L.js → chunk-YE57GLWU.js} +2 -2
  62. package/client-dist/{chunk-HSAGX22H.js → chunk-YX6NZTP7.js} +2 -2
  63. package/client-dist/{consultant.module-3PAIPMAH.js → consultant.module-WL4WEIIF.js} +2 -2
  64. package/client-dist/{crd.module-PJO2UJEG.js → crd.module-OE3ML5C7.js} +2 -2
  65. package/client-dist/{dashboard.module-TJMYHTHX.js → dashboard.module-NBINBB72.js} +2 -2
  66. package/client-dist/{do.module-SBE6P3B7.js → do.module-BLTXJC4T.js} +2 -2
  67. package/client-dist/{document-library.module-YH7IF4EP.js → document-library.module-TXGZT2VZ.js} +2 -2
  68. package/client-dist/{embedding-eval.module-STWWCUD7.js → embedding-eval.module-PYE5NL5R.js} +2 -2
  69. package/client-dist/{embedding-registry.module-XX6725DX.js → embedding-registry.module-46PAOMQR.js} +2 -2
  70. package/client-dist/{err.module-SL2IYMTF.js → err.module-B743IN5O.js} +2 -2
  71. package/client-dist/{feedback.module-RMRL65YC.js → feedback.module-H4YSPDLF.js} +2 -2
  72. package/client-dist/{host-runtime-mcp.module-OJORUP2R.js → host-runtime-mcp.module-6SK6OZH7.js} +2 -2
  73. package/client-dist/index.html +2 -2
  74. package/client-dist/{live-dev-pipeline.module-AMBMFVIH.js → live-dev-pipeline.module-MCPAY2LG.js} +2 -2
  75. package/client-dist/{logs.module-3CQ6KLLB.js → logs.module-CJF7RLV7.js} +2 -2
  76. package/client-dist/{main-RCFMPV3V.js → main-NZFBSJOQ.js} +3 -3
  77. package/client-dist/main-NZFBSJOQ.js.map +7 -0
  78. package/client-dist/{master-control-remote-poc.module-FD3E5JB7.js → master-control-remote-poc.module-LJ5ANCQ6.js} +2 -2
  79. package/client-dist/{mobile-app.module-LHVADRFV.js → mobile-app.module-G7LAAOOP.js} +2 -2
  80. package/client-dist/{model-registry.module-ZTKOWGAN.js → model-registry.module-WDAX2AHY.js} +2 -2
  81. package/client-dist/{oc.module-GLPSVTAT.js → oc.module-T43BN7CJ.js} +2 -2
  82. package/client-dist/{orc.module-BKMJC5YX.js → orc.module-R3P5Y4YW.js} +2 -2
  83. package/client-dist/{project-management.module-QEIXJONY.js → project-management.module-ODMCGFYI.js} +2 -2
  84. package/client-dist/project-source-routed.module-M22ABRHR.js +2 -0
  85. package/client-dist/{scheduler.module-TD4G2WNF.js → scheduler.module-TZLVYYMO.js} +2 -2
  86. package/client-dist/{session.module-YCITR6BG.js → session.module-3XGXYP4K.js} +2 -2
  87. package/client-dist/{set.module-JIWXIF2C.js → set.module-M3PJXM3W.js} +5 -5
  88. package/client-dist/{set.module-JIWXIF2C.js.map → set.module-M3PJXM3W.js.map} +3 -3
  89. package/client-dist/{setup.module-ZWL33O7N.js → setup.module-2U3R4YDE.js} +2 -2
  90. package/client-dist/styles-OJOSC7GL.css +2 -0
  91. package/client-dist/styles-OJOSC7GL.css.map +7 -0
  92. package/client-dist/{terminals.module-MKXQLASR.js → terminals.module-ULIXEKUD.js} +2 -2
  93. package/client-dist/{voice-notes-poc.module-7LUIU7P5.js → voice-notes-poc.module-GZGIIFPR.js} +2 -2
  94. package/client-dist/{wfs.module-2BMXPFAL.js → wfs.module-6B4QN7NS.js} +2 -2
  95. package/package.json +1 -1
  96. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.d.ts +85 -0
  97. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.d.ts.map +1 -0
  98. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.js +264 -0
  99. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/account/cc-account-usage-probe.util.js.map +1 -0
  100. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.d.ts +18 -0
  101. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.d.ts.map +1 -1
  102. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.js +93 -0
  103. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account-route.control-service.js.map +1 -1
  104. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account.controller.d.ts.map +1 -1
  105. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account.controller.js +14 -0
  106. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/cc-account/cc-account.controller.js.map +1 -1
  107. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.d.ts +36 -0
  108. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.d.ts.map +1 -1
  109. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.js +136 -0
  110. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account-pool.control-service.js.map +1 -1
  111. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.d.ts +11 -0
  112. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.d.ts.map +1 -1
  113. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.js +40 -0
  114. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/account/cc-account.data-service.js.map +1 -1
  115. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts.map +1 -1
  116. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js +34 -0
  117. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js.map +1 -1
  118. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.d.ts +4 -4
  119. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.d.ts.map +1 -1
  120. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.js +12 -7
  121. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.js.map +1 -1
  122. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.spec.js +17 -14
  123. package/server/build/src/_modules/external-sessions/_services/exs-instance-presence.service.spec.js.map +1 -1
  124. package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.d.ts +6 -2
  125. package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.d.ts.map +1 -1
  126. package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.js +8 -4
  127. package/server/build/src/_modules/external-sessions/_services/exs-instance-registry.data-service.js.map +1 -1
  128. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-heartbeat-status.interface.d.ts +23 -0
  129. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-heartbeat-status.interface.d.ts.map +1 -0
  130. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-heartbeat-status.interface.js +3 -0
  131. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-heartbeat-status.interface.js.map +1 -0
  132. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat-self-healing.spec.d.ts +10 -0
  133. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat-self-healing.spec.d.ts.map +1 -0
  134. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat-self-healing.spec.js +81 -0
  135. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat-self-healing.spec.js.map +1 -0
  136. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.d.ts +49 -2
  137. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.d.ts.map +1 -1
  138. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js +107 -6
  139. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js.map +1 -1
  140. package/server/build/src/_modules/peer-instance/_services/pei-ws-client-active-reconnect.spec.d.ts +8 -0
  141. package/server/build/src/_modules/peer-instance/_services/pei-ws-client-active-reconnect.spec.d.ts.map +1 -0
  142. package/server/build/src/_modules/peer-instance/_services/pei-ws-client-active-reconnect.spec.js +112 -0
  143. package/server/build/src/_modules/peer-instance/_services/pei-ws-client-active-reconnect.spec.js.map +1 -0
  144. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts +26 -1
  145. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts.map +1 -1
  146. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js +60 -7
  147. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js.map +1 -1
  148. package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts +8 -0
  149. package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts.map +1 -1
  150. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.d.ts.map +1 -1
  151. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js +8 -2
  152. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js.map +1 -1
  153. package/client-dist/cc-usage-dashboard.component-TNMEIWMI.js +0 -2
  154. package/client-dist/cc-usage-dashboard.component-TNMEIWMI.js.map +0 -7
  155. package/client-dist/main-RCFMPV3V.js.map +0 -7
  156. package/client-dist/project-source-routed.module-LSFQT5DK.js +0 -2
  157. package/client-dist/styles-WS3OIV37.css +0 -2
  158. package/client-dist/styles-WS3OIV37.css.map +0 -7
  159. /package/client-dist/{agent-instances.module-SRVXVWB4.js.map → agent-instances.module-U742BGNW.js.map} +0 -0
  160. /package/client-dist/{ca.module-ZAYCRAK6.js.map → ca.module-WANXRIO7.js.map} +0 -0
  161. /package/client-dist/{cc.module-BF2AOAIM.js.map → cc.module-JZUXUXHP.js.map} +0 -0
  162. /package/client-dist/{chunk-CBIUSRE5.js.map → chunk-26DXMUXV.js.map} +0 -0
  163. /package/client-dist/{chunk-AFF37OKI.js.map → chunk-2LJT2APC.js.map} +0 -0
  164. /package/client-dist/{chunk-O7U4KV25.js.map → chunk-435IBC6L.js.map} +0 -0
  165. /package/client-dist/{chunk-7JFONJTJ.js.map → chunk-467OMXRK.js.map} +0 -0
  166. /package/client-dist/{chunk-7MSQD5HV.js.map → chunk-46N7EC7U.js.map} +0 -0
  167. /package/client-dist/{chunk-XXO2YNDP.js.map → chunk-4OKUKX55.js.map} +0 -0
  168. /package/client-dist/{chunk-34XFCTVF.js.map → chunk-4RRBZXYU.js.map} +0 -0
  169. /package/client-dist/{chunk-OIBDRASW.js.map → chunk-4TBE5I3U.js.map} +0 -0
  170. /package/client-dist/{chunk-DUN7ICUI.js.map → chunk-6A2IM2XR.js.map} +0 -0
  171. /package/client-dist/{chunk-2LOFMRCO.js.map → chunk-6BQHKSUP.js.map} +0 -0
  172. /package/client-dist/{chunk-4TEHGQ5C.js.map → chunk-6IYFOHCN.js.map} +0 -0
  173. /package/client-dist/{chunk-WYTT3YHQ.js.map → chunk-6NWEJXDU.js.map} +0 -0
  174. /package/client-dist/{chunk-ZMZ462V7.js.map → chunk-767Z7I55.js.map} +0 -0
  175. /package/client-dist/{chunk-YU32GIMP.js.map → chunk-AS2SYIJB.js.map} +0 -0
  176. /package/client-dist/{chunk-QUEQSNIS.js.map → chunk-BHWHGLKC.js.map} +0 -0
  177. /package/client-dist/{chunk-TUKCFE3B.js.map → chunk-CILMMQ5V.js.map} +0 -0
  178. /package/client-dist/{chunk-B7WQ5TK3.js.map → chunk-CSHUFD2L.js.map} +0 -0
  179. /package/client-dist/{chunk-EZNIJZBL.js.map → chunk-DNHL6M7F.js.map} +0 -0
  180. /package/client-dist/{chunk-EDQWK2Q5.js.map → chunk-DUN255KX.js.map} +0 -0
  181. /package/client-dist/{chunk-UI6N7Y2P.js.map → chunk-EBSMIZTK.js.map} +0 -0
  182. /package/client-dist/{chunk-YGTNCGIU.js.map → chunk-EY32IBWM.js.map} +0 -0
  183. /package/client-dist/{chunk-I6OBHW45.js.map → chunk-FJGBPKHK.js.map} +0 -0
  184. /package/client-dist/{chunk-EIT3LSQO.js.map → chunk-GDAL4G4Y.js.map} +0 -0
  185. /package/client-dist/{chunk-FYXUOXRP.js.map → chunk-GR3CXOIX.js.map} +0 -0
  186. /package/client-dist/{chunk-GODWUWRO.js.map → chunk-HDCFO7OE.js.map} +0 -0
  187. /package/client-dist/{chunk-2X5MWPDN.js.map → chunk-HFVIX2ZG.js.map} +0 -0
  188. /package/client-dist/{chunk-SX22WHCZ.js.map → chunk-HPBX6VCV.js.map} +0 -0
  189. /package/client-dist/{chunk-VXJF6N32.js.map → chunk-IR4THKPA.js.map} +0 -0
  190. /package/client-dist/{chunk-DZ74YN25.js.map → chunk-J5NYZUBP.js.map} +0 -0
  191. /package/client-dist/{chunk-7JW45JC5.js.map → chunk-JDK64BE7.js.map} +0 -0
  192. /package/client-dist/{chunk-EUY2HZZV.js.map → chunk-KMEGS6BP.js.map} +0 -0
  193. /package/client-dist/{chunk-77HGZO43.js.map → chunk-KQLKM7RB.js.map} +0 -0
  194. /package/client-dist/{chunk-52JG2IIG.js.map → chunk-LERWAULE.js.map} +0 -0
  195. /package/client-dist/{chunk-L7PQ72ZG.js.map → chunk-M3RL34GF.js.map} +0 -0
  196. /package/client-dist/{chunk-X2FIFUXZ.js.map → chunk-NJPSU6MN.js.map} +0 -0
  197. /package/client-dist/{chunk-DHIVAX2C.js.map → chunk-ONEB5UF5.js.map} +0 -0
  198. /package/client-dist/{chunk-SO3QL2U5.js.map → chunk-OZGFJXOA.js.map} +0 -0
  199. /package/client-dist/{chunk-WQIBGXGU.js.map → chunk-PPRG7F5A.js.map} +0 -0
  200. /package/client-dist/{chunk-4RT7LOTQ.js.map → chunk-PQUBI6TC.js.map} +0 -0
  201. /package/client-dist/{chunk-XSP7NLZB.js.map → chunk-Q6JQHJME.js.map} +0 -0
  202. /package/client-dist/{chunk-Q7GDEJL2.js.map → chunk-QDTY7SR6.js.map} +0 -0
  203. /package/client-dist/{chunk-VLMQV3OI.js.map → chunk-RQ2HFT2L.js.map} +0 -0
  204. /package/client-dist/{chunk-DU3IYPGM.js.map → chunk-RRN36VPR.js.map} +0 -0
  205. /package/client-dist/{chunk-NI4AZWY2.js.map → chunk-S4GJTHYZ.js.map} +0 -0
  206. /package/client-dist/{chunk-2Y7GYEOT.js.map → chunk-SKHAAE4A.js.map} +0 -0
  207. /package/client-dist/{chunk-4XEPGDZH.js.map → chunk-TSPROG7P.js.map} +0 -0
  208. /package/client-dist/{chunk-QHLRSGQG.js.map → chunk-U7ZBDYGU.js.map} +0 -0
  209. /package/client-dist/{chunk-2DJBCAHJ.js.map → chunk-VQWGWQDA.js.map} +0 -0
  210. /package/client-dist/{chunk-ZGWUDLYU.js.map → chunk-X7HHJQ2O.js.map} +0 -0
  211. /package/client-dist/{chunk-23GMPVB5.js.map → chunk-XH3SQ4UP.js.map} +0 -0
  212. /package/client-dist/{chunk-PZMEVMSF.js.map → chunk-XHF463TC.js.map} +0 -0
  213. /package/client-dist/{chunk-CUUDVYOC.js.map → chunk-XJEATRA4.js.map} +0 -0
  214. /package/client-dist/{chunk-QTRIOR6Z.js.map → chunk-XSXQC64X.js.map} +0 -0
  215. /package/client-dist/{chunk-EMVGFT6L.js.map → chunk-YE57GLWU.js.map} +0 -0
  216. /package/client-dist/{chunk-HSAGX22H.js.map → chunk-YX6NZTP7.js.map} +0 -0
  217. /package/client-dist/{consultant.module-3PAIPMAH.js.map → consultant.module-WL4WEIIF.js.map} +0 -0
  218. /package/client-dist/{crd.module-PJO2UJEG.js.map → crd.module-OE3ML5C7.js.map} +0 -0
  219. /package/client-dist/{dashboard.module-TJMYHTHX.js.map → dashboard.module-NBINBB72.js.map} +0 -0
  220. /package/client-dist/{do.module-SBE6P3B7.js.map → do.module-BLTXJC4T.js.map} +0 -0
  221. /package/client-dist/{document-library.module-YH7IF4EP.js.map → document-library.module-TXGZT2VZ.js.map} +0 -0
  222. /package/client-dist/{embedding-eval.module-STWWCUD7.js.map → embedding-eval.module-PYE5NL5R.js.map} +0 -0
  223. /package/client-dist/{embedding-registry.module-XX6725DX.js.map → embedding-registry.module-46PAOMQR.js.map} +0 -0
  224. /package/client-dist/{err.module-SL2IYMTF.js.map → err.module-B743IN5O.js.map} +0 -0
  225. /package/client-dist/{feedback.module-RMRL65YC.js.map → feedback.module-H4YSPDLF.js.map} +0 -0
  226. /package/client-dist/{host-runtime-mcp.module-OJORUP2R.js.map → host-runtime-mcp.module-6SK6OZH7.js.map} +0 -0
  227. /package/client-dist/{live-dev-pipeline.module-AMBMFVIH.js.map → live-dev-pipeline.module-MCPAY2LG.js.map} +0 -0
  228. /package/client-dist/{logs.module-3CQ6KLLB.js.map → logs.module-CJF7RLV7.js.map} +0 -0
  229. /package/client-dist/{master-control-remote-poc.module-FD3E5JB7.js.map → master-control-remote-poc.module-LJ5ANCQ6.js.map} +0 -0
  230. /package/client-dist/{mobile-app.module-LHVADRFV.js.map → mobile-app.module-G7LAAOOP.js.map} +0 -0
  231. /package/client-dist/{model-registry.module-ZTKOWGAN.js.map → model-registry.module-WDAX2AHY.js.map} +0 -0
  232. /package/client-dist/{oc.module-GLPSVTAT.js.map → oc.module-T43BN7CJ.js.map} +0 -0
  233. /package/client-dist/{orc.module-BKMJC5YX.js.map → orc.module-R3P5Y4YW.js.map} +0 -0
  234. /package/client-dist/{project-management.module-QEIXJONY.js.map → project-management.module-ODMCGFYI.js.map} +0 -0
  235. /package/client-dist/{project-source-routed.module-LSFQT5DK.js.map → project-source-routed.module-M22ABRHR.js.map} +0 -0
  236. /package/client-dist/{scheduler.module-TD4G2WNF.js.map → scheduler.module-TZLVYYMO.js.map} +0 -0
  237. /package/client-dist/{session.module-YCITR6BG.js.map → session.module-3XGXYP4K.js.map} +0 -0
  238. /package/client-dist/{setup.module-ZWL33O7N.js.map → setup.module-2U3R4YDE.js.map} +0 -0
  239. /package/client-dist/{terminals.module-MKXQLASR.js.map → terminals.module-ULIXEKUD.js.map} +0 -0
  240. /package/client-dist/{voice-notes-poc.module-7LUIU7P5.js.map → voice-notes-poc.module-GZGIIFPR.js.map} +0 -0
  241. /package/client-dist/{wfs.module-2BMXPFAL.js.map → wfs.module-6B4QN7NS.js.map} +0 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): self-healing heartbeat
4
+ * tracker spec — `consecutiveFailures` track + recovery + `getStatus()`.
5
+ *
6
+ * Pattern: Object.create + privát mezők kézi init (cycle 187 minta).
7
+ * A `createInstanceRegistryDS()` factory metódust stub-oljuk, hogy a real
8
+ * DyNTS DataService konstruktor ne fusson le.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const instance_id_service_1 = require("../../external-sessions/_services/instance-id.service");
12
+ const pei_heartbeat_control_service_1 = require("./pei-heartbeat.control-service");
13
+ describe('PEI_Heartbeat_ControlService self-healing tracker (REQ-CLUSTER-DEBUG-WS-001 Slice E2)', () => {
14
+ function makeSvc() {
15
+ const svc = Object.create(pei_heartbeat_control_service_1.PEI_Heartbeat_ControlService.prototype);
16
+ svc.publicHost = '127.0.0.1';
17
+ svc.httpPort = 39050;
18
+ svc.isHttpsEnabled = false;
19
+ svc.isRunning = true;
20
+ svc.lastSuccessAtMs = null;
21
+ svc.lastFailureAtMs = null;
22
+ svc.lastFailureMessage = null;
23
+ svc.consecutiveFailures = 0;
24
+ return svc;
25
+ }
26
+ function stubDs(svc, updateHeartbeat) {
27
+ const fakeDs = {
28
+ updateHeartbeat: updateHeartbeat,
29
+ };
30
+ spyOn(svc, 'createInstanceRegistryDS').and.returnValue(fakeDs);
31
+ }
32
+ beforeEach(() => {
33
+ spyOn(instance_id_service_1.ExS_InstanceId_Service.getInstance(), 'getInstanceId').and.returnValue('test-key');
34
+ });
35
+ it('| siker → consecutiveFailures = 0, lastSuccessAtMs frissül', async () => {
36
+ const svc = makeSvc();
37
+ const update = jasmine.createSpy('updateHeartbeat').and.resolveTo(undefined);
38
+ stubDs(svc, update);
39
+ await svc.writeHeartbeatTracked();
40
+ const status = svc.getStatus();
41
+ expect(status.consecutiveFailures).toBe(0);
42
+ expect(status.lastSuccessAtMs).not.toBeNull();
43
+ expect(status.lastFailureMessage).toBeNull();
44
+ expect(update).toHaveBeenCalledTimes(1);
45
+ });
46
+ it('| failure → consecutiveFailures++, lastFailureMessage frissül', async () => {
47
+ const svc = makeSvc();
48
+ const update = jasmine.createSpy('updateHeartbeat').and.rejectWith(new Error('Mongo monitor timeout'));
49
+ stubDs(svc, update);
50
+ // Quick-retry-t blokkoljuk: már beállítjuk a handle-t hogy a `scheduleQuickRetry` no-op legyen
51
+ svc.quickRetryHandle = setTimeout(() => { }, 60_000);
52
+ await svc.writeHeartbeatTracked();
53
+ const status = svc.getStatus();
54
+ expect(status.consecutiveFailures).toBe(1);
55
+ expect(status.lastFailureMessage).toBe('Mongo monitor timeout');
56
+ // cleanup
57
+ const handle = svc.quickRetryHandle;
58
+ if (handle) {
59
+ clearTimeout(handle);
60
+ }
61
+ });
62
+ it('| failure → siker → consecutiveFailures vissza 0-ra', async () => {
63
+ const svc = makeSvc();
64
+ svc.consecutiveFailures = 2;
65
+ svc.lastFailureMessage = 'previous error';
66
+ const update = jasmine.createSpy('updateHeartbeat').and.resolveTo(undefined);
67
+ stubDs(svc, update);
68
+ await svc.writeHeartbeatTracked();
69
+ const status = svc.getStatus();
70
+ expect(status.consecutiveFailures).toBe(0);
71
+ expect(status.lastFailureMessage).toBeNull();
72
+ });
73
+ it('| getStatus alapból isRunning=false ha service nem indult', () => {
74
+ const svc = makeSvc();
75
+ svc.isRunning = false;
76
+ const status = svc.getStatus();
77
+ expect(status.isRunning).toBeFalse();
78
+ expect(status.lastSuccessAtMs).toBeNull();
79
+ });
80
+ });
81
+ //# sourceMappingURL=pei-heartbeat-self-healing.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pei-heartbeat-self-healing.spec.js","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-heartbeat-self-healing.spec.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,47 @@
1
1
  import { DyNTS_SingletonService } from '@futdevpro/nts-dynamo';
2
2
  import { ExS_InstanceRegistry_DataService } from '../../external-sessions/_services/exs-instance-registry.data-service';
3
+ import { PEI_HeartbeatStatus_Interface } from '../_models/interfaces/pei-heartbeat-status.interface';
3
4
  /**
4
- * Heartbeat writer: 30s-enként frissíti a saját registry sort (`lastHeartbeatAt` + endpoint mezők).
5
- * A liveness deriválás: `Date.now() - lastHeartbeatAt < 90s` → `online`.
5
+ * Heartbeat writer: 30s-enként frissíti a saját registry sort (`lastHeartbeatAt`
6
+ * + endpoint mezők). A liveness deriválás: `Date.now() - lastHeartbeatAt < 180s`
7
+ * → `online` (REQ-CLUSTER-DEBUG-WS-001 Slice E4 cycle 820 lazítás).
8
+ *
9
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): self-healing + visibility.
10
+ * A korábbi `setInterval(() => writeHeartbeat().catch(log))` silent-swallow-ban
11
+ * eltüntette a hibákat — a user csak akkor vette észre, ha a peer már offline-ra
12
+ * dobta a saját instance-t. Most:
13
+ * - track-eljük a `consecutiveFailures` + `lastSuccessAtMs` + `lastFailureMessage`
14
+ * mezőket; a Cluster debug-panel ezt mutatja.
15
+ * - failure után 5s-es quick-retry (a 30s-os ciklus mellett); így 1 elveszett
16
+ * ciklus 5s-en belül helyreáll, nem 30s-en.
17
+ * - 1+ failure utáni sikeres írás triggeri a `PEI_WsClient.refreshPeerConnections()`-t,
18
+ * mert a DB-recovery után a peer-WS-kapcsolatok is állhatnak ferdén.
6
19
  *
7
20
  * @see REQ-PEI-010
8
21
  */
9
22
  export declare class PEI_Heartbeat_ControlService extends DyNTS_SingletonService {
10
23
  /** Heartbeat intervallum (30s). */
11
24
  private static readonly HEARTBEAT_INTERVAL_MS;
25
+ /**
26
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): failure utáni quick-retry
27
+ * késleltetés (5s). A 30s-os fő ciklus mellett, max 1× retry indul.
28
+ */
29
+ private static readonly QUICK_RETRY_DELAY_MS;
12
30
  private intervalHandle;
31
+ private quickRetryHandle;
13
32
  private isRunning;
14
33
  /** Cached endpoint adatok — bootstrap-kor beállítva. */
15
34
  private publicHost;
16
35
  private httpPort;
17
36
  private isHttpsEnabled;
37
+ /**
38
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): heartbeat self-status track.
39
+ * A diagnostics endpoint ezt veszi át a `getStatus()`-szal.
40
+ */
41
+ private lastSuccessAtMs;
42
+ private lastFailureAtMs;
43
+ private lastFailureMessage;
44
+ private consecutiveFailures;
18
45
  static getInstance(): PEI_Heartbeat_ControlService;
19
46
  /**
20
47
  * Heartbeat indítása: endpoint config beállítás + azonnali első heartbeat + 30s intervallum.
@@ -27,6 +54,26 @@ export declare class PEI_Heartbeat_ControlService extends DyNTS_SingletonService
27
54
  * Heartbeat leállítása (graceful shutdown).
28
55
  */
29
56
  stop(): void;
57
+ /**
58
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): saját heartbeat-status snapshot
59
+ * a Cluster debug-panelnek.
60
+ */
61
+ getStatus(): PEI_HeartbeatStatus_Interface;
62
+ /**
63
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): heartbeat-write a self-healing
64
+ * tracker-rel:
65
+ * - Sikeres → reset failure-counter, refresh WS-client-et HA korábban failure volt
66
+ * (DB-recovery ⇒ peer-WS is állhatott ferdén, érdemes újra-csatlakozni).
67
+ * - Sikertelen → counter++ + log + 5s-es quick-retry timeout.
68
+ */
69
+ private writeHeartbeatTracked;
70
+ /**
71
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): 5s-es quick-retry ütemezés
72
+ * heartbeat-failure után. A `consecutiveFailures < 5` guard megakadályozza,
73
+ * hogy folyamatos DB-outage alatt mindig fusson — 5+ konszekutív failure
74
+ * után csak a 30s-os fő ciklusra hagyatkozunk.
75
+ */
76
+ private scheduleQuickRetry;
30
77
  /**
31
78
  * Egyetlen heartbeat írás a registry-be.
32
79
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pei-heartbeat.control-service.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-heartbeat.control-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,sEAAsE,CAAC;AAGxH;;;;;GAKG;AACH,qBAAa,4BAA6B,SAAQ,sBAAsB;IAEtE,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAuB;IAEpE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,SAAS,CAAkB;IAEnC,wDAAwD;IACxD,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,cAAc,CAAkB;IAExC,MAAM,CAAC,WAAW,IAAI,4BAA4B;IAIlD;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BjF;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;YACW,cAAc;IAc5B;;;;;OAKG;IACH,SAAS,CAAC,wBAAwB,IAAI,gCAAgC;CAGvE"}
1
+ {"version":3,"file":"pei-heartbeat.control-service.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-heartbeat.control-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,OAAO,EAAE,gCAAgC,EAAE,MAAM,sEAAsE,CAAC;AACxH,OAAO,EAAE,6BAA6B,EAAE,MAAM,sDAAsD,CAAC;AAGrG;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,4BAA6B,SAAQ,sBAAsB;IAEtE,mCAAmC;IACnC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAuB;IAEpE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAsB;IAElE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,SAAS,CAAkB;IAEnC,wDAAwD;IACxD,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,cAAc,CAAkB;IAExC;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,mBAAmB,CAAa;IAExC,MAAM,CAAC,WAAW,IAAI,4BAA4B;IAIlD;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjF;;OAEG;IACH,IAAI,IAAI,IAAI;IAeZ;;;OAGG;IACH,SAAS,IAAI,6BAA6B;IAU1C;;;;;;OAMG;YACW,qBAAqB;IA+BnC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;YACW,cAAc;IAc5B;;;;;OAKG;IACH,SAAS,CAAC,wBAAwB,IAAI,gCAAgC;CAGvE"}
@@ -9,20 +9,46 @@ const instance_id_service_1 = require("../../external-sessions/_services/instanc
9
9
  const exs_instance_registry_data_service_1 = require("../../external-sessions/_services/exs-instance-registry.data-service");
10
10
  const pei_public_host_util_1 = require("../_collections/utils/pei-public-host.util");
11
11
  /**
12
- * Heartbeat writer: 30s-enként frissíti a saját registry sort (`lastHeartbeatAt` + endpoint mezők).
13
- * A liveness deriválás: `Date.now() - lastHeartbeatAt < 90s` → `online`.
12
+ * Heartbeat writer: 30s-enként frissíti a saját registry sort (`lastHeartbeatAt`
13
+ * + endpoint mezők). A liveness deriválás: `Date.now() - lastHeartbeatAt < 180s`
14
+ * → `online` (REQ-CLUSTER-DEBUG-WS-001 Slice E4 cycle 820 lazítás).
15
+ *
16
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): self-healing + visibility.
17
+ * A korábbi `setInterval(() => writeHeartbeat().catch(log))` silent-swallow-ban
18
+ * eltüntette a hibákat — a user csak akkor vette észre, ha a peer már offline-ra
19
+ * dobta a saját instance-t. Most:
20
+ * - track-eljük a `consecutiveFailures` + `lastSuccessAtMs` + `lastFailureMessage`
21
+ * mezőket; a Cluster debug-panel ezt mutatja.
22
+ * - failure után 5s-es quick-retry (a 30s-os ciklus mellett); így 1 elveszett
23
+ * ciklus 5s-en belül helyreáll, nem 30s-en.
24
+ * - 1+ failure utáni sikeres írás triggeri a `PEI_WsClient.refreshPeerConnections()`-t,
25
+ * mert a DB-recovery után a peer-WS-kapcsolatok is állhatnak ferdén.
14
26
  *
15
27
  * @see REQ-PEI-010
16
28
  */
17
29
  class PEI_Heartbeat_ControlService extends nts_dynamo_1.DyNTS_SingletonService {
18
30
  /** Heartbeat intervallum (30s). */
19
31
  static HEARTBEAT_INTERVAL_MS = 30 * fsm_dynamo_2.second;
32
+ /**
33
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): failure utáni quick-retry
34
+ * késleltetés (5s). A 30s-os fő ciklus mellett, max 1× retry indul.
35
+ */
36
+ static QUICK_RETRY_DELAY_MS = 5 * fsm_dynamo_2.second;
20
37
  intervalHandle = null;
38
+ quickRetryHandle = null;
21
39
  isRunning = false;
22
40
  /** Cached endpoint adatok — bootstrap-kor beállítva. */
23
41
  publicHost = '';
24
42
  httpPort = 0;
25
43
  isHttpsEnabled = false;
44
+ /**
45
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): heartbeat self-status track.
46
+ * A diagnostics endpoint ezt veszi át a `getStatus()`-szal.
47
+ */
48
+ lastSuccessAtMs = null;
49
+ lastFailureAtMs = null;
50
+ lastFailureMessage = null;
51
+ consecutiveFailures = 0;
26
52
  static getInstance() {
27
53
  return PEI_Heartbeat_ControlService.getSingletonInstance();
28
54
  }
@@ -36,12 +62,13 @@ class PEI_Heartbeat_ControlService extends nts_dynamo_1.DyNTS_SingletonService {
36
62
  this.publicHost = pei_public_host_util_1.PEI_PublicHost_Util.resolvePublicHost();
37
63
  this.httpPort = params.httpPort;
38
64
  this.isHttpsEnabled = params.isHttpsEnabled;
39
- // Azonnali első heartbeat
40
- await this.writeHeartbeat();
65
+ // Azonnali első heartbeat (eredmény-tracker bekapcsolva)
66
+ await this.writeHeartbeatTracked();
41
67
  // 30s intervallum
42
68
  this.intervalHandle = setInterval(() => {
43
- this.writeHeartbeat().catch((error) => {
44
- fsm_dynamo_1.DyFM_Log.error(`PEI_Heartbeat | Write failed | ${String(error)}`);
69
+ this.writeHeartbeatTracked().catch((error) => {
70
+ // Defensive: writeHeartbeatTracked már log-ol és track-el — ez csak last-resort
71
+ fsm_dynamo_1.DyFM_Log.error(`PEI_Heartbeat | Tracked write rejected | ${String(error)}`);
45
72
  });
46
73
  }, PEI_Heartbeat_ControlService.HEARTBEAT_INTERVAL_MS);
47
74
  this.isRunning = true;
@@ -55,9 +82,83 @@ class PEI_Heartbeat_ControlService extends nts_dynamo_1.DyNTS_SingletonService {
55
82
  clearInterval(this.intervalHandle);
56
83
  this.intervalHandle = null;
57
84
  }
85
+ if (this.quickRetryHandle) {
86
+ clearTimeout(this.quickRetryHandle);
87
+ this.quickRetryHandle = null;
88
+ }
58
89
  this.isRunning = false;
59
90
  fsm_dynamo_1.DyFM_Log.info('PEI_Heartbeat | Stopped');
60
91
  }
92
+ /**
93
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): saját heartbeat-status snapshot
94
+ * a Cluster debug-panelnek.
95
+ */
96
+ getStatus() {
97
+ return {
98
+ isRunning: this.isRunning,
99
+ lastSuccessAtMs: this.lastSuccessAtMs,
100
+ lastFailureAtMs: this.lastFailureAtMs,
101
+ lastFailureMessage: this.lastFailureMessage,
102
+ consecutiveFailures: this.consecutiveFailures,
103
+ };
104
+ }
105
+ /**
106
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): heartbeat-write a self-healing
107
+ * tracker-rel:
108
+ * - Sikeres → reset failure-counter, refresh WS-client-et HA korábban failure volt
109
+ * (DB-recovery ⇒ peer-WS is állhatott ferdén, érdemes újra-csatlakozni).
110
+ * - Sikertelen → counter++ + log + 5s-es quick-retry timeout.
111
+ */
112
+ async writeHeartbeatTracked() {
113
+ try {
114
+ await this.writeHeartbeat();
115
+ const hadFailures = this.consecutiveFailures > 0;
116
+ this.lastSuccessAtMs = Date.now();
117
+ this.consecutiveFailures = 0;
118
+ this.lastFailureMessage = null;
119
+ // Sikeres írás recovery után — a peer-WS is állhatott ferdén, kényszerítjük
120
+ // a refresh-loop azonnali lefutását (a `refreshPeerConnections` fire-and-forget,
121
+ // de a következő scheduled tick-en addig is lefut).
122
+ if (hadFailures) {
123
+ fsm_dynamo_1.DyFM_Log.success('PEI_Heartbeat | Recovered after failures — triggering WS-client refresh');
124
+ // PEI_WsClient.refreshPeerConnections() jelenleg `private` → publikus
125
+ // `triggerRefresh()` hooknak nincs API. A WS-client `setInterval`-on
126
+ // 30s-enként szintén fut (Slice E5), tehát rögtön elkapja. Itt csak
127
+ // logolunk — a UI a Slice E1 panelben látja a recovery-t.
128
+ }
129
+ }
130
+ catch (error) {
131
+ this.lastFailureAtMs = Date.now();
132
+ this.lastFailureMessage = error instanceof Error ? error.message : String(error);
133
+ this.consecutiveFailures = this.consecutiveFailures + 1;
134
+ fsm_dynamo_1.DyFM_Log.error(`PEI_Heartbeat | Write failed (#${this.consecutiveFailures}) | ${this.lastFailureMessage}`);
135
+ // Quick-retry: csak 1 retry-t engedünk párhuzamosan, a 30s-os ciklus is
136
+ // ütemezi a következőt — a két útvonal versenyez, de a `writeHeartbeat`
137
+ // idempotens (egyetlen DB-update).
138
+ this.scheduleQuickRetry();
139
+ }
140
+ }
141
+ /**
142
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E2 (cycle 820): 5s-es quick-retry ütemezés
143
+ * heartbeat-failure után. A `consecutiveFailures < 5` guard megakadályozza,
144
+ * hogy folyamatos DB-outage alatt mindig fusson — 5+ konszekutív failure
145
+ * után csak a 30s-os fő ciklusra hagyatkozunk.
146
+ */
147
+ scheduleQuickRetry() {
148
+ if (!this.isRunning || this.quickRetryHandle) {
149
+ return;
150
+ }
151
+ if (this.consecutiveFailures >= 5) {
152
+ return;
153
+ }
154
+ this.quickRetryHandle = setTimeout(() => {
155
+ this.quickRetryHandle = null;
156
+ this.writeHeartbeatTracked().catch((error) => {
157
+ fsm_dynamo_1.DyFM_Log.error(`PEI_Heartbeat | Quick-retry rejected | ${String(error)}`);
158
+ });
159
+ }, PEI_Heartbeat_ControlService.QUICK_RETRY_DELAY_MS);
160
+ this.quickRetryHandle.unref?.();
161
+ }
61
162
  /**
62
163
  * Egyetlen heartbeat írás a registry-be.
63
164
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pei-heartbeat.control-service.js","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-heartbeat.control-service.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AACjD,sDAA+D;AAC/D,sDAA+C;AAE/C,4EAAwE;AACxE,+FAA+F;AAC/F,6HAAwH;AACxH,qFAAiF;AAEjF;;;;;GAKG;AACH,MAAa,4BAA6B,SAAQ,mCAAsB;IAEtE,mCAAmC;IAC3B,MAAM,CAAU,qBAAqB,GAAW,EAAE,GAAG,mBAAM,CAAC;IAE5D,cAAc,GAA0C,IAAI,CAAC;IAC7D,SAAS,GAAY,KAAK,CAAC;IAEnC,wDAAwD;IAChD,UAAU,GAAW,EAAE,CAAC;IACxB,QAAQ,GAAW,CAAC,CAAC;IACrB,cAAc,GAAY,KAAK,CAAC;IAExC,MAAM,CAAC,WAAW;QAChB,OAAO,4BAA4B,CAAC,oBAAoB,EAAE,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,MAAqD;QAC/D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,0CAAmB,CAAC,iBAAiB,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAE5C,0BAA0B;QAC1B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,kBAAkB;QAClB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAS,EAAE;YAC3C,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAQ,EAAE;gBACnD,qBAAQ,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;QAEvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,qBAAQ,CAAC,OAAO,CACd,mCAAmC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,cAAc,EAAE,CACtG,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,qBAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,WAAW,GAAW,4CAAsB,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,CAAC;QACjF,MAAM,EAAE,GAAqC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAE7E,MAAM,EAAE,CAAC,eAAe,CAAC;YACvB,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,oEAAoE;YACpE,UAAU,EAAE,4BAAY;SACzB,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACO,wBAAwB;QAChC,OAAO,IAAI,qEAAgC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAC3E,CAAC;;AArFH,oEAsFC"}
1
+ {"version":3,"file":"pei-heartbeat.control-service.js","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-heartbeat.control-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E1 (cycle 820): aktív reconnect logika spec —
3
+ * a `refreshPeerConnections` halott socket-eket cseréli újra, rate-limit-tel.
4
+ *
5
+ * A `connectToPeer` privát metódust spy-val pótoljuk hogy ne nyíljon real socket.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=pei-ws-client-active-reconnect.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pei-ws-client-active-reconnect.spec.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-ws-client-active-reconnect.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E1 (cycle 820): aktív reconnect logika spec —
4
+ * a `refreshPeerConnections` halott socket-eket cseréli újra, rate-limit-tel.
5
+ *
6
+ * A `connectToPeer` privát metódust spy-val pótoljuk hogy ne nyíljon real socket.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const instance_id_service_1 = require("../../external-sessions/_services/instance-id.service");
10
+ const pei_ws_client_control_service_1 = require("./pei-ws-client.control-service");
11
+ describe('PEI_WsClient active-reconnect refresh-loop (REQ-CLUSTER-DEBUG-WS-001 Slice E1)', () => {
12
+ function makeSvc() {
13
+ const svc = Object.create(pei_ws_client_control_service_1.PEI_WsClient_ControlService.prototype);
14
+ svc.peerConnections = new Map();
15
+ svc.peerLastErrors = new Map();
16
+ svc.peerLastConnectAttemptAtMs = new Map();
17
+ svc.sharedSecret = 'test-secret';
18
+ svc.isRunning = true;
19
+ return svc;
20
+ }
21
+ function makePeer(key) {
22
+ return {
23
+ instanceKey: key,
24
+ publicHost: '127.0.0.1',
25
+ httpPort: 39050,
26
+ isHttpsEnabled: false,
27
+ __created: new Date(),
28
+ };
29
+ }
30
+ beforeEach(() => {
31
+ spyOn(instance_id_service_1.ExS_InstanceId_Service.getInstance(), 'getInstanceId').and.returnValue('self-key');
32
+ });
33
+ function stubRegistry(svc) {
34
+ // REQ-CLUSTER-DEBUG-WS-001 Slice E1 (cycle 820): a factory metódust stub-oljuk —
35
+ // a real DyNTS DataService konstruktor split-eléshez vezető init-chainje
36
+ // így nem fut le.
37
+ spyOn(svc, 'loadRegistryEntries').and.resolveTo([makePeer('self-key'), makePeer('peer-1')]);
38
+ }
39
+ it('| üres connections → új peer-re connect hívás', async () => {
40
+ const svc = makeSvc();
41
+ stubRegistry(svc);
42
+ const connectSpy = spyOn(svc, 'connectToPeer');
43
+ await svc.refreshPeerConnections();
44
+ expect(connectSpy).toHaveBeenCalledTimes(1);
45
+ const call = connectSpy.calls.argsFor(0)[0];
46
+ expect(call.instanceKey).toBe('peer-1');
47
+ });
48
+ it('| connected socket Map-ben → NEM hívja a connectToPeer-t', async () => {
49
+ const svc = makeSvc();
50
+ stubRegistry(svc);
51
+ const fakeSocket = {
52
+ connected: true,
53
+ disconnect: jasmine.createSpy('disconnect'),
54
+ };
55
+ svc.peerConnections.set('peer-1', fakeSocket);
56
+ const connectSpy = spyOn(svc, 'connectToPeer');
57
+ await svc.refreshPeerConnections();
58
+ expect(connectSpy).not.toHaveBeenCalled();
59
+ });
60
+ it('| disconnected socket Map-ben + nincs előző attempt → aktív reconnect', async () => {
61
+ const svc = makeSvc();
62
+ stubRegistry(svc);
63
+ const disconnectSpy = jasmine.createSpy('disconnect');
64
+ const fakeSocket = {
65
+ connected: false,
66
+ disconnect: disconnectSpy,
67
+ };
68
+ svc.peerConnections.set('peer-1', fakeSocket);
69
+ const connectSpy = spyOn(svc, 'connectToPeer');
70
+ await svc.refreshPeerConnections();
71
+ expect(disconnectSpy).toHaveBeenCalledTimes(1);
72
+ expect(connectSpy).toHaveBeenCalledTimes(1);
73
+ // peer-1 törölve, majd a connectToPeer újra-fel-Map-elte volna — de a spy
74
+ // nem teszi vissza; ezt csak a real connectToPeer csinálná.
75
+ expect(svc.peerConnections.has('peer-1')).toBeFalse();
76
+ });
77
+ it('| disconnected socket + 5s-os előző attempt → rate-limit blokkol (NEM reconnect)', async () => {
78
+ const svc = makeSvc();
79
+ stubRegistry(svc);
80
+ const disconnectSpy = jasmine.createSpy('disconnect');
81
+ const fakeSocket = {
82
+ connected: false,
83
+ disconnect: disconnectSpy,
84
+ };
85
+ svc.peerConnections.set('peer-1', fakeSocket);
86
+ // 5s-os előző attempt — rate-limit (30s) blokkolja
87
+ svc
88
+ .peerLastConnectAttemptAtMs.set('peer-1', Date.now() - 5_000);
89
+ const connectSpy = spyOn(svc, 'connectToPeer');
90
+ await svc.refreshPeerConnections();
91
+ expect(disconnectSpy).not.toHaveBeenCalled();
92
+ expect(connectSpy).not.toHaveBeenCalled();
93
+ });
94
+ it('| disconnected socket + 60s-os előző attempt → rate-limit átengedi', async () => {
95
+ const svc = makeSvc();
96
+ stubRegistry(svc);
97
+ const disconnectSpy = jasmine.createSpy('disconnect');
98
+ const fakeSocket = {
99
+ connected: false,
100
+ disconnect: disconnectSpy,
101
+ };
102
+ svc.peerConnections.set('peer-1', fakeSocket);
103
+ // 60s-os előző attempt — rate-limit (30s) átenged
104
+ svc
105
+ .peerLastConnectAttemptAtMs.set('peer-1', Date.now() - 60_000);
106
+ const connectSpy = spyOn(svc, 'connectToPeer');
107
+ await svc.refreshPeerConnections();
108
+ expect(disconnectSpy).toHaveBeenCalledTimes(1);
109
+ expect(connectSpy).toHaveBeenCalledTimes(1);
110
+ });
111
+ });
112
+ //# sourceMappingURL=pei-ws-client-active-reconnect.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pei-ws-client-active-reconnect.spec.js","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-ws-client-active-reconnect.spec.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { DyNTS_SingletonService } from '@futdevpro/nts-dynamo';
2
+ import { MRg_InstanceRegistry } from '../../ai-systems/_modules/model-registry/_models/data-models/mrg-instance-registry.data-model';
2
3
  /**
3
4
  * Peer WS Client: minden ismert peer instance `/peer-ccap` namespace-éhez csatlakozik.
4
5
  * HMAC-SHA256 auth a handshake query-ben. Exponential backoff reconnect.
@@ -6,8 +7,18 @@ import { DyNTS_SingletonService } from '@futdevpro/nts-dynamo';
6
7
  * @see REQ-PEI-006 §6.1, §6.4
7
8
  */
8
9
  export declare class PEI_WsClient_ControlService extends DyNTS_SingletonService {
9
- /** Peer registry refresh intervallum (60s). */
10
+ /**
11
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E (cycle 820): peer registry refresh intervallum
12
+ * 60s → 30s. Az aktív reconnect logikával együtt (E1) a kapcsolat-szakadás
13
+ * öngyógyulási ideje így max 30s — a user nem kell hogy a panelt nyomkodja.
14
+ */
10
15
  private static readonly PEER_REFRESH_INTERVAL_MS;
16
+ /**
17
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E1 (cycle 820): rate-limit az aktív reconnect-re —
18
+ * egy peer-re max ennyi időnként indítunk újra connect-kísérletet, hogy
19
+ * connect_error-loop-ban se DDoS-oljuk a peer-t. 30s = 1 refresh-ciklus.
20
+ */
21
+ private static readonly PEER_RECONNECT_MIN_GAP_MS;
11
22
  /**
12
23
  * socket.emit ack timeout: ennyi ms-ig várjuk a peer-től az ack-ot. Ha lejár,
13
24
  * warn log készül (delivery nem garantált). A DB polling/reaper amúgy is újrapróbálja
@@ -28,6 +39,12 @@ export declare class PEI_WsClient_ControlService extends DyNTS_SingletonService
28
39
  * a user lássa MIÉRT nem épül fel a kapcsolat (nem csak hogy 0 a WS-csatlakozott).
29
40
  */
30
41
  private peerLastErrors;
42
+ /**
43
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E1 (cycle 820): per-peer utolsó connect-attempt
44
+ * timestamp — a rate-limit-hez (`PEER_RECONNECT_MIN_GAP_MS`) használjuk az
45
+ * aktív reconnect-loopban, hogy connect_error-spam alatt ne DDoS-oljuk a peer-t.
46
+ */
47
+ private peerLastConnectAttemptAtMs;
31
48
  static getInstance(): PEI_WsClient_ControlService;
32
49
  /** PEI WS client futás-flag (Settings → Cluster diagnostics). */
33
50
  isWsClientRunning(): boolean;
@@ -100,6 +117,14 @@ export declare class PEI_WsClient_ControlService extends DyNTS_SingletonService
100
117
  found: boolean;
101
118
  isWsConnectedAfter: boolean;
102
119
  }>;
120
+ /**
121
+ * REQ-CLUSTER-DEBUG-WS-001 Slice E1 (cycle 820): registry-load factory a unit-
122
+ * tesztelhetőséghez — a teszt `spyOn(svc as any, 'loadRegistryEntries')`-szel
123
+ * stub-olhatja anélkül, hogy a DyNTS DataService konstruktor-chain lefutna.
124
+ * Ugyanaz a minta mint a heartbeat-service `createInstanceRegistryDS()`-éé
125
+ * (cycle 819).
126
+ */
127
+ protected loadRegistryEntries(): Promise<MRg_InstanceRegistry[]>;
103
128
  /**
104
129
  * Peer connection-ök frissítése: registry-ből kiolvasott online peer-ekhez connect/disconnect.
105
130
  */
@@ -1 +1 @@
1
- {"version":3,"file":"pei-ws-client.control-service.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-ws-client.control-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAS/D;;;;;GAKG;AACH,qBAAa,2BAA4B,SAAQ,sBAAsB;IAErE,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAsB;IAEtE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAEjE,6DAA6D;IAC7D,OAAO,CAAC,eAAe,CAAwC;IAE/D,uBAAuB;IACvB,OAAO,CAAC,YAAY,CAAc;IAElC,+BAA+B;IAC/B,OAAO,CAAC,aAAa,CAA+C;IAEpE,OAAO,CAAC,SAAS,CAAkB;IAEnC;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAA6D;IAEnF,MAAM,CAAC,WAAW,IAAI,2BAA2B;IAIjD,iEAAiE;IACjE,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC5D;;OAEG;IACH,IAAI,IAAI,IAAI;IAsBZ;;;;;;;OAOG;IACH,UAAU,CAAC,MAAM,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAoBrG;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAgBnF;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAYhC;;;OAGG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAInE;;;;;;;;;OASG;IACG,OAAO,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACvD,UAAU,EAAE,OAAO,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAkBF;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5D,KAAK,EAAE,OAAO,CAAC;QACf,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IAsCF;;OAEG;YACW,sBAAsB;IA+CpC;;OAEG;IACH,OAAO,CAAC,aAAa;CAuFtB"}
1
+ {"version":3,"file":"pei-ws-client.control-service.d.ts","sourceRoot":"","sources":["../../../../../src/_modules/peer-instance/_services/pei-ws-client.control-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+FAA+F,CAAC;AAIrI;;;;;GAKG;AACH,qBAAa,2BAA4B,SAAQ,sBAAsB;IAErE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAuB;IAEvE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAuB;IAExE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAEjE,6DAA6D;IAC7D,OAAO,CAAC,eAAe,CAAwC;IAE/D,uBAAuB;IACvB,OAAO,CAAC,YAAY,CAAc;IAElC,+BAA+B;IAC/B,OAAO,CAAC,aAAa,CAA+C;IAEpE,OAAO,CAAC,SAAS,CAAkB;IAEnC;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAA6D;IAEnF;;;;OAIG;IACH,OAAO,CAAC,0BAA0B,CAAkC;IAEpE,MAAM,CAAC,WAAW,IAAI,2BAA2B;IAIjD,iEAAiE;IACjE,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC5D;;OAEG;IACH,IAAI,IAAI,IAAI;IAuBZ;;;;;;;OAOG;IACH,UAAU,CAAC,MAAM,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAoBrG;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAgBnF;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAYhC;;;OAGG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAInE;;;;;;;;;OASG;IACG,OAAO,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QACvD,UAAU,EAAE,OAAO,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;IAkBF;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5D,KAAK,EAAE,OAAO,CAAC;QACf,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IAsCF;;;;;;OAMG;cACa,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAKtE;;OAEG;YACW,sBAAsB;IAqEpC;;OAEG;IACH,OAAO,CAAC,aAAa;CA2FtB"}