@futdevpro/ccap 1.1.3107 → 1.1.3130

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 (185) hide show
  1. package/cli/build/_commands/update.spec.d.ts +17 -0
  2. package/cli/build/_commands/update.spec.d.ts.map +1 -0
  3. package/cli/build/_commands/update.spec.js +147 -0
  4. package/cli/build/_commands/update.spec.js.map +1 -0
  5. package/client-dist/{agent-instances.module-X7PTNXBZ.js → agent-instances.module-KE64PSK7.js} +2 -2
  6. package/client-dist/ca.module-JJZX5YKQ.js +5 -0
  7. package/client-dist/{ca.module-AHEFH36G.js.map → ca.module-JJZX5YKQ.js.map} +3 -3
  8. package/client-dist/{cc-usage-dashboard.component-SCGVU2CH.js → cc-usage-dashboard.component-ODAXHZHU.js} +2 -2
  9. package/client-dist/{cc.module-HRE2USKF.js → cc.module-4MS5M5XW.js} +2 -2
  10. package/client-dist/{chunk-EXMVCGPU.js → chunk-36BCBGXK.js} +2 -2
  11. package/client-dist/{chunk-F5YM4CH2.js → chunk-3HLEHUE4.js} +2 -2
  12. package/client-dist/{chunk-TAHRBJO4.js → chunk-4CLON3UX.js} +2 -2
  13. package/client-dist/{chunk-EDPWSLEJ.js → chunk-4O4UDIWG.js} +2 -2
  14. package/client-dist/{chunk-V2FE4UOS.js → chunk-5E5W3DFK.js} +2 -2
  15. package/client-dist/{chunk-5F7AZMBN.js → chunk-5KQZGU6O.js} +2 -2
  16. package/client-dist/{chunk-GNGMQVNJ.js → chunk-5XJR5EAR.js} +2 -2
  17. package/client-dist/chunk-7TYUDNTP.js +9 -0
  18. package/client-dist/chunk-7TYUDNTP.js.map +7 -0
  19. package/client-dist/{chunk-H4KPNX6Y.js → chunk-C2ZXKTHA.js} +2 -2
  20. package/client-dist/{chunk-44B4MFA2.js → chunk-CAUXU2ZC.js} +2 -2
  21. package/client-dist/{chunk-U5G7I3PM.js → chunk-CBMKN4SJ.js} +2 -2
  22. package/client-dist/{chunk-V3MC6IHV.js → chunk-CF3BLCVD.js} +2 -2
  23. package/client-dist/{chunk-BR2OEH55.js → chunk-CIO2T2KX.js} +2 -2
  24. package/client-dist/{chunk-VVP5QPE2.js → chunk-CUA2OS6E.js} +2 -2
  25. package/client-dist/{chunk-HVEG7TDX.js → chunk-DB33SOJ3.js} +2 -2
  26. package/client-dist/{chunk-3MGMSCZJ.js → chunk-EC4VBEIV.js} +2 -2
  27. package/client-dist/{chunk-VPICQREQ.js → chunk-EFH7L2PM.js} +2 -2
  28. package/client-dist/{chunk-M7XR4RHP.js → chunk-EG7MEKVY.js} +2 -2
  29. package/client-dist/{chunk-SNX7UMSC.js → chunk-EGWEYXZW.js} +2 -2
  30. package/client-dist/{chunk-TMZGSFBR.js → chunk-EVYE6YII.js} +2 -2
  31. package/client-dist/{chunk-M744VRDZ.js → chunk-FBF7RSNU.js} +2 -2
  32. package/client-dist/{chunk-I2YW2Q64.js → chunk-FBZDKQ4K.js} +2 -2
  33. package/client-dist/{chunk-LJ75BUDR.js → chunk-FQL5FQFW.js} +2 -2
  34. package/client-dist/{chunk-IJNLP24O.js → chunk-GOPRHQFC.js} +2 -2
  35. package/client-dist/{chunk-SNGOTGBU.js → chunk-HK2TYWE7.js} +2 -2
  36. package/client-dist/{chunk-6ZYILL36.js → chunk-HSO5WM67.js} +2 -2
  37. package/client-dist/{chunk-SIEB5UUT.js → chunk-ISPLVKBM.js} +2 -2
  38. package/client-dist/{chunk-GXH7TFVW.js → chunk-JWXM6QMF.js} +2 -2
  39. package/client-dist/{chunk-H4QUFYYO.js → chunk-KC7UN4VT.js} +2 -2
  40. package/client-dist/{chunk-ODUTF4DP.js → chunk-KNTOPF7C.js} +2 -2
  41. package/client-dist/{chunk-PCZCJ5US.js → chunk-L4CLV44N.js} +2 -2
  42. package/client-dist/{chunk-AIFKGWGZ.js → chunk-LBG3XMYU.js} +2 -2
  43. package/client-dist/{chunk-NV7A2WEG.js → chunk-NBH53JWT.js} +2 -2
  44. package/client-dist/{chunk-725PEGTE.js → chunk-NHKJYR4C.js} +2 -2
  45. package/client-dist/{chunk-IUYZZJPL.js → chunk-NIMLWXGM.js} +2 -2
  46. package/client-dist/{chunk-YKD7EBRH.js → chunk-O6KFG5LW.js} +2 -2
  47. package/client-dist/{chunk-7BGF556S.js → chunk-PR5VADUQ.js} +2 -2
  48. package/client-dist/{chunk-ADOCMVHI.js → chunk-QHZI4F2F.js} +2 -2
  49. package/client-dist/{chunk-HBLLM4VT.js → chunk-QNLMNKP4.js} +2 -2
  50. package/client-dist/{chunk-3VGB3L3K.js → chunk-R2C7U5TP.js} +2 -2
  51. package/client-dist/{chunk-QMSWKCFN.js → chunk-RLXJG6ZF.js} +2 -2
  52. package/client-dist/{chunk-276XBODW.js → chunk-RNXGBUU3.js} +7 -7
  53. package/client-dist/chunk-RNXGBUU3.js.map +7 -0
  54. package/client-dist/{chunk-SREAQBYG.js → chunk-S5PG5OUU.js} +2 -2
  55. package/client-dist/{chunk-772D5UCV.js → chunk-SWJLLCFC.js} +2 -2
  56. package/client-dist/{chunk-N5BAPGOD.js → chunk-TCDXJTTX.js} +2 -2
  57. package/client-dist/{chunk-HRRC3NLD.js → chunk-U6B7OBXY.js} +2 -2
  58. package/client-dist/{chunk-UT4EWNR6.js → chunk-URXIWUNP.js} +2 -2
  59. package/client-dist/{chunk-4Y3YU4VV.js → chunk-UTJQVE4E.js} +2 -2
  60. package/client-dist/{chunk-DBG24LL5.js → chunk-V6QEYU4X.js} +2 -2
  61. package/client-dist/{chunk-IJZYOGOA.js → chunk-VL2H6COO.js} +2 -2
  62. package/client-dist/{chunk-RQ6URMIS.js → chunk-VORYOEWH.js} +2 -2
  63. package/client-dist/{chunk-P5R6KXHA.js → chunk-VU76JPZM.js} +2 -2
  64. package/client-dist/{chunk-Q6LBW5ZA.js → chunk-X4IBG3WG.js} +2 -2
  65. package/client-dist/{chunk-ZWO7VQQ7.js → chunk-XZTQ4YC7.js} +2 -2
  66. package/client-dist/{chunk-QUNT2WPJ.js → chunk-Y3DARUXQ.js} +2 -2
  67. package/client-dist/{chunk-QUNT2WPJ.js.map → chunk-Y3DARUXQ.js.map} +1 -1
  68. package/client-dist/{chunk-2VC36Y3F.js → chunk-ZTB2RW6R.js} +2 -2
  69. package/client-dist/{consultant.module-VWZJPZLC.js → consultant.module-S4UQA3UJ.js} +2 -2
  70. package/client-dist/{crd.module-X4AZNBU3.js → crd.module-XHOTNUXY.js} +2 -2
  71. package/client-dist/{dashboard.module-D6GYQMRW.js → dashboard.module-YZMJUPDH.js} +2 -2
  72. package/client-dist/{do.module-NDH2JFRB.js → do.module-ESWOBSRO.js} +2 -2
  73. package/client-dist/{document-library.module-U4UF7O2G.js → document-library.module-S2IATB7C.js} +2 -2
  74. package/client-dist/{embedding-eval.module-WU52AOFQ.js → embedding-eval.module-OAUL3HRQ.js} +2 -2
  75. package/client-dist/{embedding-registry.module-HL4BYCBG.js → embedding-registry.module-T4Q57QWS.js} +2 -2
  76. package/client-dist/{err.module-MKHC7PNL.js → err.module-YM7F2DFM.js} +2 -2
  77. package/client-dist/{feedback.module-JVEP7FXN.js → feedback.module-4ZLA4O5I.js} +2 -2
  78. package/client-dist/{host-runtime-mcp.module-TAQMHWZY.js → host-runtime-mcp.module-OIK42CRE.js} +2 -2
  79. package/client-dist/index.html +1 -1
  80. package/client-dist/{live-dev-pipeline.module-PA6JFTVM.js → live-dev-pipeline.module-AFWGOCMO.js} +2 -2
  81. package/client-dist/{logs.module-DDCOUURP.js → logs.module-OSZVMRRI.js} +2 -2
  82. package/client-dist/{main-F237R7CH.js → main-3KSHNVCW.js} +3 -3
  83. package/client-dist/{master-control-remote-poc.module-OHIGJKXS.js → master-control-remote-poc.module-T5NK5KD7.js} +2 -2
  84. package/client-dist/{mobile-app.module-USJXPWGU.js → mobile-app.module-GPFLEVWR.js} +2 -2
  85. package/client-dist/{model-registry.module-GN625AEU.js → model-registry.module-SKRFHTWQ.js} +2 -2
  86. package/client-dist/{oc.module-T4NESJ3J.js → oc.module-562ZP6BM.js} +3 -3
  87. package/client-dist/{oc.module-T4NESJ3J.js.map → oc.module-562ZP6BM.js.map} +3 -3
  88. package/client-dist/{orc.module-7OMMUAVJ.js → orc.module-SCMVZ535.js} +2 -2
  89. package/client-dist/{project-management.module-BUQ4WMDF.js → project-management.module-LA7M6MXA.js} +2 -2
  90. package/client-dist/project-source-routed.module-QQBPIDUK.js +2 -0
  91. package/client-dist/{scheduler.module-426MNXRU.js → scheduler.module-QNWITVDV.js} +2 -2
  92. package/client-dist/{session.module-AOUHRRCF.js → session.module-LJNWNXN7.js} +2 -2
  93. package/client-dist/{set.module-WTQQZANN.js → set.module-FINVUQYD.js} +2 -2
  94. package/client-dist/{setup.module-BYCCCF4Q.js → setup.module-5FOSEQWI.js} +2 -2
  95. package/client-dist/{terminals.module-7X5GXSDY.js → terminals.module-LMW6DR3T.js} +2 -2
  96. package/client-dist/{voice-notes-poc.module-ZZD3NWJE.js → voice-notes-poc.module-R3ECC3V3.js} +2 -2
  97. package/client-dist/{wfs.module-VFUPP5VV.js → wfs.module-TAZFZ2BH.js} +2 -2
  98. package/package.json +1 -1
  99. package/client-dist/ca.module-AHEFH36G.js +0 -5
  100. package/client-dist/chunk-276XBODW.js.map +0 -7
  101. package/client-dist/chunk-UEPFY6HU.js +0 -9
  102. package/client-dist/chunk-UEPFY6HU.js.map +0 -7
  103. package/client-dist/project-source-routed.module-HBMJJWHZ.js +0 -2
  104. /package/client-dist/{agent-instances.module-X7PTNXBZ.js.map → agent-instances.module-KE64PSK7.js.map} +0 -0
  105. /package/client-dist/{cc-usage-dashboard.component-SCGVU2CH.js.map → cc-usage-dashboard.component-ODAXHZHU.js.map} +0 -0
  106. /package/client-dist/{cc.module-HRE2USKF.js.map → cc.module-4MS5M5XW.js.map} +0 -0
  107. /package/client-dist/{chunk-EXMVCGPU.js.map → chunk-36BCBGXK.js.map} +0 -0
  108. /package/client-dist/{chunk-F5YM4CH2.js.map → chunk-3HLEHUE4.js.map} +0 -0
  109. /package/client-dist/{chunk-TAHRBJO4.js.map → chunk-4CLON3UX.js.map} +0 -0
  110. /package/client-dist/{chunk-EDPWSLEJ.js.map → chunk-4O4UDIWG.js.map} +0 -0
  111. /package/client-dist/{chunk-V2FE4UOS.js.map → chunk-5E5W3DFK.js.map} +0 -0
  112. /package/client-dist/{chunk-5F7AZMBN.js.map → chunk-5KQZGU6O.js.map} +0 -0
  113. /package/client-dist/{chunk-GNGMQVNJ.js.map → chunk-5XJR5EAR.js.map} +0 -0
  114. /package/client-dist/{chunk-H4KPNX6Y.js.map → chunk-C2ZXKTHA.js.map} +0 -0
  115. /package/client-dist/{chunk-44B4MFA2.js.map → chunk-CAUXU2ZC.js.map} +0 -0
  116. /package/client-dist/{chunk-U5G7I3PM.js.map → chunk-CBMKN4SJ.js.map} +0 -0
  117. /package/client-dist/{chunk-V3MC6IHV.js.map → chunk-CF3BLCVD.js.map} +0 -0
  118. /package/client-dist/{chunk-BR2OEH55.js.map → chunk-CIO2T2KX.js.map} +0 -0
  119. /package/client-dist/{chunk-VVP5QPE2.js.map → chunk-CUA2OS6E.js.map} +0 -0
  120. /package/client-dist/{chunk-HVEG7TDX.js.map → chunk-DB33SOJ3.js.map} +0 -0
  121. /package/client-dist/{chunk-3MGMSCZJ.js.map → chunk-EC4VBEIV.js.map} +0 -0
  122. /package/client-dist/{chunk-VPICQREQ.js.map → chunk-EFH7L2PM.js.map} +0 -0
  123. /package/client-dist/{chunk-M7XR4RHP.js.map → chunk-EG7MEKVY.js.map} +0 -0
  124. /package/client-dist/{chunk-SNX7UMSC.js.map → chunk-EGWEYXZW.js.map} +0 -0
  125. /package/client-dist/{chunk-TMZGSFBR.js.map → chunk-EVYE6YII.js.map} +0 -0
  126. /package/client-dist/{chunk-M744VRDZ.js.map → chunk-FBF7RSNU.js.map} +0 -0
  127. /package/client-dist/{chunk-I2YW2Q64.js.map → chunk-FBZDKQ4K.js.map} +0 -0
  128. /package/client-dist/{chunk-LJ75BUDR.js.map → chunk-FQL5FQFW.js.map} +0 -0
  129. /package/client-dist/{chunk-IJNLP24O.js.map → chunk-GOPRHQFC.js.map} +0 -0
  130. /package/client-dist/{chunk-SNGOTGBU.js.map → chunk-HK2TYWE7.js.map} +0 -0
  131. /package/client-dist/{chunk-6ZYILL36.js.map → chunk-HSO5WM67.js.map} +0 -0
  132. /package/client-dist/{chunk-SIEB5UUT.js.map → chunk-ISPLVKBM.js.map} +0 -0
  133. /package/client-dist/{chunk-GXH7TFVW.js.map → chunk-JWXM6QMF.js.map} +0 -0
  134. /package/client-dist/{chunk-H4QUFYYO.js.map → chunk-KC7UN4VT.js.map} +0 -0
  135. /package/client-dist/{chunk-ODUTF4DP.js.map → chunk-KNTOPF7C.js.map} +0 -0
  136. /package/client-dist/{chunk-PCZCJ5US.js.map → chunk-L4CLV44N.js.map} +0 -0
  137. /package/client-dist/{chunk-AIFKGWGZ.js.map → chunk-LBG3XMYU.js.map} +0 -0
  138. /package/client-dist/{chunk-NV7A2WEG.js.map → chunk-NBH53JWT.js.map} +0 -0
  139. /package/client-dist/{chunk-725PEGTE.js.map → chunk-NHKJYR4C.js.map} +0 -0
  140. /package/client-dist/{chunk-IUYZZJPL.js.map → chunk-NIMLWXGM.js.map} +0 -0
  141. /package/client-dist/{chunk-YKD7EBRH.js.map → chunk-O6KFG5LW.js.map} +0 -0
  142. /package/client-dist/{chunk-7BGF556S.js.map → chunk-PR5VADUQ.js.map} +0 -0
  143. /package/client-dist/{chunk-ADOCMVHI.js.map → chunk-QHZI4F2F.js.map} +0 -0
  144. /package/client-dist/{chunk-HBLLM4VT.js.map → chunk-QNLMNKP4.js.map} +0 -0
  145. /package/client-dist/{chunk-3VGB3L3K.js.map → chunk-R2C7U5TP.js.map} +0 -0
  146. /package/client-dist/{chunk-QMSWKCFN.js.map → chunk-RLXJG6ZF.js.map} +0 -0
  147. /package/client-dist/{chunk-SREAQBYG.js.map → chunk-S5PG5OUU.js.map} +0 -0
  148. /package/client-dist/{chunk-772D5UCV.js.map → chunk-SWJLLCFC.js.map} +0 -0
  149. /package/client-dist/{chunk-N5BAPGOD.js.map → chunk-TCDXJTTX.js.map} +0 -0
  150. /package/client-dist/{chunk-HRRC3NLD.js.map → chunk-U6B7OBXY.js.map} +0 -0
  151. /package/client-dist/{chunk-UT4EWNR6.js.map → chunk-URXIWUNP.js.map} +0 -0
  152. /package/client-dist/{chunk-4Y3YU4VV.js.map → chunk-UTJQVE4E.js.map} +0 -0
  153. /package/client-dist/{chunk-DBG24LL5.js.map → chunk-V6QEYU4X.js.map} +0 -0
  154. /package/client-dist/{chunk-IJZYOGOA.js.map → chunk-VL2H6COO.js.map} +0 -0
  155. /package/client-dist/{chunk-RQ6URMIS.js.map → chunk-VORYOEWH.js.map} +0 -0
  156. /package/client-dist/{chunk-P5R6KXHA.js.map → chunk-VU76JPZM.js.map} +0 -0
  157. /package/client-dist/{chunk-Q6LBW5ZA.js.map → chunk-X4IBG3WG.js.map} +0 -0
  158. /package/client-dist/{chunk-ZWO7VQQ7.js.map → chunk-XZTQ4YC7.js.map} +0 -0
  159. /package/client-dist/{chunk-2VC36Y3F.js.map → chunk-ZTB2RW6R.js.map} +0 -0
  160. /package/client-dist/{consultant.module-VWZJPZLC.js.map → consultant.module-S4UQA3UJ.js.map} +0 -0
  161. /package/client-dist/{crd.module-X4AZNBU3.js.map → crd.module-XHOTNUXY.js.map} +0 -0
  162. /package/client-dist/{dashboard.module-D6GYQMRW.js.map → dashboard.module-YZMJUPDH.js.map} +0 -0
  163. /package/client-dist/{do.module-NDH2JFRB.js.map → do.module-ESWOBSRO.js.map} +0 -0
  164. /package/client-dist/{document-library.module-U4UF7O2G.js.map → document-library.module-S2IATB7C.js.map} +0 -0
  165. /package/client-dist/{embedding-eval.module-WU52AOFQ.js.map → embedding-eval.module-OAUL3HRQ.js.map} +0 -0
  166. /package/client-dist/{embedding-registry.module-HL4BYCBG.js.map → embedding-registry.module-T4Q57QWS.js.map} +0 -0
  167. /package/client-dist/{err.module-MKHC7PNL.js.map → err.module-YM7F2DFM.js.map} +0 -0
  168. /package/client-dist/{feedback.module-JVEP7FXN.js.map → feedback.module-4ZLA4O5I.js.map} +0 -0
  169. /package/client-dist/{host-runtime-mcp.module-TAQMHWZY.js.map → host-runtime-mcp.module-OIK42CRE.js.map} +0 -0
  170. /package/client-dist/{live-dev-pipeline.module-PA6JFTVM.js.map → live-dev-pipeline.module-AFWGOCMO.js.map} +0 -0
  171. /package/client-dist/{logs.module-DDCOUURP.js.map → logs.module-OSZVMRRI.js.map} +0 -0
  172. /package/client-dist/{main-F237R7CH.js.map → main-3KSHNVCW.js.map} +0 -0
  173. /package/client-dist/{master-control-remote-poc.module-OHIGJKXS.js.map → master-control-remote-poc.module-T5NK5KD7.js.map} +0 -0
  174. /package/client-dist/{mobile-app.module-USJXPWGU.js.map → mobile-app.module-GPFLEVWR.js.map} +0 -0
  175. /package/client-dist/{model-registry.module-GN625AEU.js.map → model-registry.module-SKRFHTWQ.js.map} +0 -0
  176. /package/client-dist/{orc.module-7OMMUAVJ.js.map → orc.module-SCMVZ535.js.map} +0 -0
  177. /package/client-dist/{project-management.module-BUQ4WMDF.js.map → project-management.module-LA7M6MXA.js.map} +0 -0
  178. /package/client-dist/{project-source-routed.module-HBMJJWHZ.js.map → project-source-routed.module-QQBPIDUK.js.map} +0 -0
  179. /package/client-dist/{scheduler.module-426MNXRU.js.map → scheduler.module-QNWITVDV.js.map} +0 -0
  180. /package/client-dist/{session.module-AOUHRRCF.js.map → session.module-LJNWNXN7.js.map} +0 -0
  181. /package/client-dist/{set.module-WTQQZANN.js.map → set.module-FINVUQYD.js.map} +0 -0
  182. /package/client-dist/{setup.module-BYCCCF4Q.js.map → setup.module-5FOSEQWI.js.map} +0 -0
  183. /package/client-dist/{terminals.module-7X5GXSDY.js.map → terminals.module-LMW6DR3T.js.map} +0 -0
  184. /package/client-dist/{voice-notes-poc.module-ZZD3NWJE.js.map → voice-notes-poc.module-R3ECC3V3.js.map} +0 -0
  185. /package/client-dist/{wfs.module-VFUPP5VV.js.map → wfs.module-TAZFZ2BH.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{p as C}from"./chunk-QUNT2WPJ.js";import{aa as f,h as p,k as h,y as m}from"./chunk-TBMJSIBB.js";var a=function(o){return o.stopped="stopped",o.standby="standby",o.running="running",o}(a||{});var k={navigator_unavailable:"A hangfelv\xE9tel nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 k\xF6rnyezet nem t\xE1mogatja a navigator API-t.",media_devices_unavailable:"A hangfelv\xE9tel nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 ezen az oldalon nem ad hozz\xE1f\xE9r\xE9st a mikrofonhoz.",secure_context_required:"A hangfelv\xE9tel ezen az oldalon nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 csak biztons\xE1gos kapcsolatban (HTTPS vagy localhost) enged\xE9lyezi a mikrofont."},v={media_devices_unavailable:"A mikrofonhoz haszn\xE1ld az alkalmaz\xE1st HTTPS c\xEDmen (pl. https://localhost:39051) vagy localhost-on.",secure_context_required:"A mikrofonhoz haszn\xE1ld az alkalmaz\xE1st HTTPS c\xEDmen (pl. https://localhost:39051) vagy localhost-on."},d=class{static wrapGetUserMediaError(s){if(s instanceof Error&&"code"in s&&typeof s.code=="string"&&s.code.startsWith("CCAP_"))return s;let e=s instanceof DOMException||s instanceof Error?s.name:"UnknownError",t,i;switch(e){case"NotAllowedError":t="CCAP_MIC_PERMISSION_DENIED",i="Microphone access denied by user or browser policy";break;case"NotFoundError":t="CCAP_MIC_NOT_FOUND",i="No microphone device found on this device";break;case"NotReadableError":t="CCAP_MIC_NOT_READABLE",i="Microphone hardware error or device already in use by another application";break;case"OverconstrainedError":t="CCAP_MIC_OVERCONSTRAINED",i="Microphone does not support the requested audio constraints";break;case"AbortError":t="CCAP_MIC_ABORTED",i="Microphone access request was aborted by the system";break;case"SecurityError":t="CCAP_MIC_SECURITY_ERROR",i="Microphone access blocked by document security policy (Permissions-Policy / iframe)";break;default:t="CCAP_MIC_UNKNOWN_ERROR",i=`getUserMedia failed with ${e}`;break}let n=new Error(i);return n.code=t,n.cause=s,n}static getGetUserMediaErrorMessage(s){switch(s instanceof DOMException||s instanceof Error?s.name:""){case"NotAllowedError":return"A mikrofon haszn\xE1lata nem enged\xE9lyezett: a b\xF6ng\xE9sz\u0151 vagy a felhaszn\xE1l\xF3 megtagadta a hozz\xE1f\xE9r\xE9st.";case"NotFoundError":return"Nem tal\xE1lhat\xF3 mikrofon ezen az eszk\xF6z\xF6n.";case"NotReadableError":return"A mikrofon nem olvashat\xF3: hardverhiba vagy egy m\xE1sik alkalmaz\xE1s haszn\xE1lja.";case"OverconstrainedError":return"A mikrofon nem t\xE1mogatja a k\xE9rt audio be\xE1ll\xEDt\xE1sokat.";case"AbortError":return"A mikrofon-hozz\xE1f\xE9r\xE9si k\xE9r\xE9s megszakadt.";case"SecurityError":return"A mikrofon-hozz\xE1f\xE9r\xE9st a biztons\xE1gi szab\xE1lyzat (Permissions-Policy / iframe) blokkolta.";default:return"A mikrofon el\xE9r\xE9se sikertelen (ismeretlen hiba)."}}static getGetUserMediaErrorHint(s){switch(s instanceof DOMException||s instanceof Error?s.name:""){case"NotAllowedError":return"Enged\xE9lyezd a mikrofont a b\xF6ng\xE9sz\u0151 c\xEDmsor\xE1ban (lakat ikon \u2192 Mikrofon \u2192 Enged\xE9lyez\xE9s), majd pr\xF3b\xE1ld \xFAjra. Androidon: Be\xE1ll\xEDt\xE1sok \u2192 Alkalmaz\xE1sok \u2192 Chrome \u2192 Enged\xE9lyek \u2192 Mikrofon.";case"NotReadableError":return"Z\xE1rd be a mikrofont haszn\xE1l\xF3 m\xE1sik alkalmaz\xE1st (pl. vide\xF3h\xEDv\xE1s, diktafon), majd pr\xF3b\xE1ld \xFAjra.";case"SecurityError":return'Ha az alkalmaz\xE1s iframe-ben fut, az iframe-nek "allow=microphone" attrib\xFAtumra van sz\xFCks\xE9ge.';default:return""}}static getMediaRecordingAvailability(){return typeof navigator>"u"?{supported:!1,reason:"navigator_unavailable"}:typeof window<"u"&&window.isSecureContext===!1?{supported:!1,reason:"secure_context_required"}:navigator.mediaDevices==null?{supported:!1,reason:"media_devices_unavailable"}:{supported:!0}}static getMediaUnavailableReportMessage(s){return`Media recording not available (reason: ${s}). Use HTTPS or localhost for microphone access.`}static getMediaUnavailableHint(s){return v[s]??""}static getMediaUnavailableMessage(s){return k[s]??"A hangfelv\xE9tel nem el\xE9rhet\u0151 ezen az oldalon."}};var r=p(C());var A=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus","audio/ogg","audio/mp4"],z=(()=>{class o{volumeGate=.05;silenceTimeLimitMs=5*r.second;timesliceMs=5*r.second;segmentMaxChunks=6;segmentSoftFlushMinChunks=4;getUserMediaTimeoutMs=15*r.second;state_$=f(a.stopped);mediaStream=null;mediaRecorder=null;audioContext=null;analyser=null;audioSourceNode=null;volumeAnimationId=null;chunkIndex=0;chunks=[];isRestartingForFlush=!1;selectedMime="";onChunkCb=null;onVolumeCb=null;onErrorCb=null;deviceChangeHandler=null;silenceStartTime=null;setOnChunk(e){this.onChunkCb=e}setOnVolume(e){this.onVolumeCb=e}setOnError(e){this.onErrorCb=e}selectMime(){for(let e of A)if(MediaRecorder.isTypeSupported(e))return e;return"audio/webm"}getExtension(){return this.selectedMime.startsWith("audio/webm")?"webm":this.selectedMime.startsWith("audio/ogg")?"ogg":this.selectedMime.startsWith("audio/mp4")?"mp4":"webm"}startListening(){return h(this,null,function*(){if(this.state_$()===a.stopped)try{let e=d.getMediaRecordingAvailability();if(!e.supported){let n=`Media recording not available (reason: ${e.reason??"unknown"})`,l=new Error(n);throw l.code="CCAP_MEDIA_NOT_AVAILABLE",l}let t=null;try{let n=navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1}}),l=new Promise((c,g)=>{t=setTimeout(()=>{let u=new Error(`getUserMedia timed out after ${this.getUserMediaTimeoutMs}ms`);u.code="CCAP_MIC_TIMEOUT",g(u)},this.getUserMediaTimeoutMs)});this.mediaStream=yield Promise.race([n,l])}catch(n){throw d.wrapGetUserMediaError(n)}finally{t!==null&&clearTimeout(t)}let i=this.mediaStream.getAudioTracks()[0];i&&(r.DyFM_Log.info("[CCAP] mic track settings",i.getSettings()),i.onended=()=>{r.DyFM_Log.info("[CCAP] mic track ended unexpectedly"),this.stopListening(),this.onErrorCb?.(new Error("Microphone track ended unexpectedly (device disconnected?)"))}),this.registerDeviceChangeListener(),this.selectedMime=this.selectMime(),this.startVolumeLoop(),this.state_$.set(a.standby)}catch(e){throw this.state_$.set(a.stopped),e}})}stopListening(){let e=this.state_$()===a.running;e&&this.stopCapture(!0),this.stopVolumeLoop(),e||this.stopMediaRecorder(),this.silenceStartTime=null,this.unregisterDeviceChangeListener(),this.mediaStream&&(this.mediaStream.getTracks().forEach(t=>t.stop()),this.mediaStream=null),this.state_$.set(a.stopped)}startCapture(){return h(this,null,function*(){try{if(this.mediaStream==null&&(yield this.startListening()),this.mediaStream==null)return;this.silenceStartTime=null,this.chunks=[],this.createAndStartRecorder(),this.state_$.set(a.running)}catch(e){this.stopVolumeLoop(),this.state_$.set(a.stopped),this.onErrorCb?.(e)}})}stopCapture(e=!1,t=!1){if(this.isRestartingForFlush=!1,!(this.mediaRecorder==null||this.state_$()!==a.running)){try{this.mediaRecorder.stop()}catch(i){r.DyFM_Log.info("[CCAP] mediaRecorder.stop() failed (likely already inactive)",i),this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped);return}if(t){this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped);return}this.mediaRecorder.onstop=()=>{this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped)}}}createAndStartRecorder(){this.mediaStream&&(this.mediaRecorder=new MediaRecorder(this.mediaStream,{mimeType:this.selectedMime,audioBitsPerSecond:128e3}),this.mediaRecorder.ondataavailable=e=>{if(e.data.size>0&&this.chunks.push(e.data),this.state_$()!==a.running||this.isRestartingForFlush)return;let t=this.chunks.length>=this.segmentMaxChunks,i=this.chunks.length>=this.segmentSoftFlushMinChunks&&this.silenceStartTime!==null;(t||i)&&this.restartRecorderForFlush()},this.mediaRecorder.start(this.timesliceMs))}restartRecorderForFlush(){if(!(!this.mediaRecorder||this.mediaRecorder.state==="inactive")){this.isRestartingForFlush=!0,this.silenceStartTime=null,r.DyFM_Log.info("[CCAP] restartRecorderForFlush: stopping current recorder for mid-recording flush"),this.mediaRecorder.onstop=()=>{this.isRestartingForFlush=!1,this.mediaRecorder=null;let e=this.chunks.length;if(this.flushChunksAsSegment(!1),r.DyFM_Log.info(`[CCAP] restartRecorderForFlush: flushed ${e} chunks as segment`),this.state_$()!==a.running||!this.mediaStream){r.DyFM_Log.info("[CCAP] restartRecorderForFlush: not restarting (state changed or no stream)");return}this.createAndStartRecorder(),r.DyFM_Log.info("[CCAP] restartRecorderForFlush: new recorder started for next segment")};try{this.mediaRecorder.stop()}catch{this.isRestartingForFlush=!1,this.mediaRecorder=null,this.flushChunksAsSegment(!1)}}}flushChunksAsSegment(e){if(this.chunks.length===0)return;let t=new Blob(this.chunks,{type:this.selectedMime}),i={mimeType:this.selectedMime,filename:`audio-${Date.now()}.${this.getExtension()}`,chunkIndex:this.chunkIndex++,isFinal:e};this.chunks=[],this.onChunkCb?.(t,i)}startVolumeLoop(){if(this.mediaStream==null||this.onVolumeCb==null)return;this.audioContext=new AudioContext,this.audioContext.state==="suspended"&&this.audioContext.resume().catch(()=>{}),this.audioContext.onstatechange=()=>{let i=this.audioContext?.state??"unknown";r.DyFM_Log.info("[CCAP] AudioContext state changed:",i),i==="suspended"&&this.state_$()!==a.stopped&&this.audioContext?.resume().catch(()=>{})},this.audioSourceNode=this.audioContext.createMediaStreamSource(this.mediaStream),this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=2048,this.analyser.smoothingTimeConstant=.8,this.audioSourceNode.connect(this.analyser);let e=new Float32Array(this.analyser.fftSize),t=()=>{if(this.analyser==null||this.onVolumeCb==null)return;this.analyser.getFloatTimeDomainData(e);let i=0;for(let c=0;c<e.length;c++)i+=Math.abs(e[c]);let n=i/e.length;this.onVolumeCb(n);let l=this.state_$();if(l===a.standby&&n>=this.volumeGate){this.startCapture(),this.volumeAnimationId=requestAnimationFrame(t);return}l===a.running&&!this.isRestartingForFlush&&(n<this.volumeGate?this.silenceStartTime===null?this.silenceStartTime=Date.now():Date.now()-this.silenceStartTime>=this.silenceTimeLimitMs&&(this.stopCapture(),this.silenceStartTime=null):this.silenceStartTime=null),this.volumeAnimationId=requestAnimationFrame(t)};t()}stopVolumeLoop(){this.volumeAnimationId!=null&&(cancelAnimationFrame(this.volumeAnimationId),this.volumeAnimationId=null),this.audioSourceNode=null,this.audioContext!=null&&(this.audioContext.onstatechange=null,this.audioContext.close().catch(()=>{}),this.audioContext=null),this.analyser=null}stopMediaRecorder(){if(this.mediaRecorder!=null&&this.mediaRecorder.state!=="inactive"){try{this.mediaRecorder.stop()}catch{}this.mediaRecorder=null}this.chunks=[],this.isRestartingForFlush=!1}registerDeviceChangeListener(){try{this.deviceChangeHandler=()=>{r.DyFM_Log.info("[CCAP] media device change detected")},navigator.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler)}catch{this.deviceChangeHandler=null}}unregisterDeviceChangeListener(){if(this.deviceChangeHandler){try{navigator.mediaDevices.removeEventListener("devicechange",this.deviceChangeHandler)}catch{}this.deviceChangeHandler=null}}static \u0275fac=function(t){return new(t||o)};static \u0275prov=m({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();export{a,d as b,z as c};
2
- //# sourceMappingURL=chunk-GNGMQVNJ.js.map
1
+ import{p as C}from"./chunk-Y3DARUXQ.js";import{aa as f,h as p,k as h,y as m}from"./chunk-TBMJSIBB.js";var a=function(o){return o.stopped="stopped",o.standby="standby",o.running="running",o}(a||{});var k={navigator_unavailable:"A hangfelv\xE9tel nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 k\xF6rnyezet nem t\xE1mogatja a navigator API-t.",media_devices_unavailable:"A hangfelv\xE9tel nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 ezen az oldalon nem ad hozz\xE1f\xE9r\xE9st a mikrofonhoz.",secure_context_required:"A hangfelv\xE9tel ezen az oldalon nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 csak biztons\xE1gos kapcsolatban (HTTPS vagy localhost) enged\xE9lyezi a mikrofont."},v={media_devices_unavailable:"A mikrofonhoz haszn\xE1ld az alkalmaz\xE1st HTTPS c\xEDmen (pl. https://localhost:39051) vagy localhost-on.",secure_context_required:"A mikrofonhoz haszn\xE1ld az alkalmaz\xE1st HTTPS c\xEDmen (pl. https://localhost:39051) vagy localhost-on."},d=class{static wrapGetUserMediaError(s){if(s instanceof Error&&"code"in s&&typeof s.code=="string"&&s.code.startsWith("CCAP_"))return s;let e=s instanceof DOMException||s instanceof Error?s.name:"UnknownError",t,i;switch(e){case"NotAllowedError":t="CCAP_MIC_PERMISSION_DENIED",i="Microphone access denied by user or browser policy";break;case"NotFoundError":t="CCAP_MIC_NOT_FOUND",i="No microphone device found on this device";break;case"NotReadableError":t="CCAP_MIC_NOT_READABLE",i="Microphone hardware error or device already in use by another application";break;case"OverconstrainedError":t="CCAP_MIC_OVERCONSTRAINED",i="Microphone does not support the requested audio constraints";break;case"AbortError":t="CCAP_MIC_ABORTED",i="Microphone access request was aborted by the system";break;case"SecurityError":t="CCAP_MIC_SECURITY_ERROR",i="Microphone access blocked by document security policy (Permissions-Policy / iframe)";break;default:t="CCAP_MIC_UNKNOWN_ERROR",i=`getUserMedia failed with ${e}`;break}let n=new Error(i);return n.code=t,n.cause=s,n}static getGetUserMediaErrorMessage(s){switch(s instanceof DOMException||s instanceof Error?s.name:""){case"NotAllowedError":return"A mikrofon haszn\xE1lata nem enged\xE9lyezett: a b\xF6ng\xE9sz\u0151 vagy a felhaszn\xE1l\xF3 megtagadta a hozz\xE1f\xE9r\xE9st.";case"NotFoundError":return"Nem tal\xE1lhat\xF3 mikrofon ezen az eszk\xF6z\xF6n.";case"NotReadableError":return"A mikrofon nem olvashat\xF3: hardverhiba vagy egy m\xE1sik alkalmaz\xE1s haszn\xE1lja.";case"OverconstrainedError":return"A mikrofon nem t\xE1mogatja a k\xE9rt audio be\xE1ll\xEDt\xE1sokat.";case"AbortError":return"A mikrofon-hozz\xE1f\xE9r\xE9si k\xE9r\xE9s megszakadt.";case"SecurityError":return"A mikrofon-hozz\xE1f\xE9r\xE9st a biztons\xE1gi szab\xE1lyzat (Permissions-Policy / iframe) blokkolta.";default:return"A mikrofon el\xE9r\xE9se sikertelen (ismeretlen hiba)."}}static getGetUserMediaErrorHint(s){switch(s instanceof DOMException||s instanceof Error?s.name:""){case"NotAllowedError":return"Enged\xE9lyezd a mikrofont a b\xF6ng\xE9sz\u0151 c\xEDmsor\xE1ban (lakat ikon \u2192 Mikrofon \u2192 Enged\xE9lyez\xE9s), majd pr\xF3b\xE1ld \xFAjra. Androidon: Be\xE1ll\xEDt\xE1sok \u2192 Alkalmaz\xE1sok \u2192 Chrome \u2192 Enged\xE9lyek \u2192 Mikrofon.";case"NotReadableError":return"Z\xE1rd be a mikrofont haszn\xE1l\xF3 m\xE1sik alkalmaz\xE1st (pl. vide\xF3h\xEDv\xE1s, diktafon), majd pr\xF3b\xE1ld \xFAjra.";case"SecurityError":return'Ha az alkalmaz\xE1s iframe-ben fut, az iframe-nek "allow=microphone" attrib\xFAtumra van sz\xFCks\xE9ge.';default:return""}}static getMediaRecordingAvailability(){return typeof navigator>"u"?{supported:!1,reason:"navigator_unavailable"}:typeof window<"u"&&window.isSecureContext===!1?{supported:!1,reason:"secure_context_required"}:navigator.mediaDevices==null?{supported:!1,reason:"media_devices_unavailable"}:{supported:!0}}static getMediaUnavailableReportMessage(s){return`Media recording not available (reason: ${s}). Use HTTPS or localhost for microphone access.`}static getMediaUnavailableHint(s){return v[s]??""}static getMediaUnavailableMessage(s){return k[s]??"A hangfelv\xE9tel nem el\xE9rhet\u0151 ezen az oldalon."}};var r=p(C());var A=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus","audio/ogg","audio/mp4"],z=(()=>{class o{volumeGate=.05;silenceTimeLimitMs=5*r.second;timesliceMs=5*r.second;segmentMaxChunks=6;segmentSoftFlushMinChunks=4;getUserMediaTimeoutMs=15*r.second;state_$=f(a.stopped);mediaStream=null;mediaRecorder=null;audioContext=null;analyser=null;audioSourceNode=null;volumeAnimationId=null;chunkIndex=0;chunks=[];isRestartingForFlush=!1;selectedMime="";onChunkCb=null;onVolumeCb=null;onErrorCb=null;deviceChangeHandler=null;silenceStartTime=null;setOnChunk(e){this.onChunkCb=e}setOnVolume(e){this.onVolumeCb=e}setOnError(e){this.onErrorCb=e}selectMime(){for(let e of A)if(MediaRecorder.isTypeSupported(e))return e;return"audio/webm"}getExtension(){return this.selectedMime.startsWith("audio/webm")?"webm":this.selectedMime.startsWith("audio/ogg")?"ogg":this.selectedMime.startsWith("audio/mp4")?"mp4":"webm"}startListening(){return h(this,null,function*(){if(this.state_$()===a.stopped)try{let e=d.getMediaRecordingAvailability();if(!e.supported){let n=`Media recording not available (reason: ${e.reason??"unknown"})`,l=new Error(n);throw l.code="CCAP_MEDIA_NOT_AVAILABLE",l}let t=null;try{let n=navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1}}),l=new Promise((c,g)=>{t=setTimeout(()=>{let u=new Error(`getUserMedia timed out after ${this.getUserMediaTimeoutMs}ms`);u.code="CCAP_MIC_TIMEOUT",g(u)},this.getUserMediaTimeoutMs)});this.mediaStream=yield Promise.race([n,l])}catch(n){throw d.wrapGetUserMediaError(n)}finally{t!==null&&clearTimeout(t)}let i=this.mediaStream.getAudioTracks()[0];i&&(r.DyFM_Log.info("[CCAP] mic track settings",i.getSettings()),i.onended=()=>{r.DyFM_Log.info("[CCAP] mic track ended unexpectedly"),this.stopListening(),this.onErrorCb?.(new Error("Microphone track ended unexpectedly (device disconnected?)"))}),this.registerDeviceChangeListener(),this.selectedMime=this.selectMime(),this.startVolumeLoop(),this.state_$.set(a.standby)}catch(e){throw this.state_$.set(a.stopped),e}})}stopListening(){let e=this.state_$()===a.running;e&&this.stopCapture(!0),this.stopVolumeLoop(),e||this.stopMediaRecorder(),this.silenceStartTime=null,this.unregisterDeviceChangeListener(),this.mediaStream&&(this.mediaStream.getTracks().forEach(t=>t.stop()),this.mediaStream=null),this.state_$.set(a.stopped)}startCapture(){return h(this,null,function*(){try{if(this.mediaStream==null&&(yield this.startListening()),this.mediaStream==null)return;this.silenceStartTime=null,this.chunks=[],this.createAndStartRecorder(),this.state_$.set(a.running)}catch(e){this.stopVolumeLoop(),this.state_$.set(a.stopped),this.onErrorCb?.(e)}})}stopCapture(e=!1,t=!1){if(this.isRestartingForFlush=!1,!(this.mediaRecorder==null||this.state_$()!==a.running)){try{this.mediaRecorder.stop()}catch(i){r.DyFM_Log.info("[CCAP] mediaRecorder.stop() failed (likely already inactive)",i),this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped);return}if(t){this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped);return}this.mediaRecorder.onstop=()=>{this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped)}}}createAndStartRecorder(){this.mediaStream&&(this.mediaRecorder=new MediaRecorder(this.mediaStream,{mimeType:this.selectedMime,audioBitsPerSecond:128e3}),this.mediaRecorder.ondataavailable=e=>{if(e.data.size>0&&this.chunks.push(e.data),this.state_$()!==a.running||this.isRestartingForFlush)return;let t=this.chunks.length>=this.segmentMaxChunks,i=this.chunks.length>=this.segmentSoftFlushMinChunks&&this.silenceStartTime!==null;(t||i)&&this.restartRecorderForFlush()},this.mediaRecorder.start(this.timesliceMs))}restartRecorderForFlush(){if(!(!this.mediaRecorder||this.mediaRecorder.state==="inactive")){this.isRestartingForFlush=!0,this.silenceStartTime=null,r.DyFM_Log.info("[CCAP] restartRecorderForFlush: stopping current recorder for mid-recording flush"),this.mediaRecorder.onstop=()=>{this.isRestartingForFlush=!1,this.mediaRecorder=null;let e=this.chunks.length;if(this.flushChunksAsSegment(!1),r.DyFM_Log.info(`[CCAP] restartRecorderForFlush: flushed ${e} chunks as segment`),this.state_$()!==a.running||!this.mediaStream){r.DyFM_Log.info("[CCAP] restartRecorderForFlush: not restarting (state changed or no stream)");return}this.createAndStartRecorder(),r.DyFM_Log.info("[CCAP] restartRecorderForFlush: new recorder started for next segment")};try{this.mediaRecorder.stop()}catch{this.isRestartingForFlush=!1,this.mediaRecorder=null,this.flushChunksAsSegment(!1)}}}flushChunksAsSegment(e){if(this.chunks.length===0)return;let t=new Blob(this.chunks,{type:this.selectedMime}),i={mimeType:this.selectedMime,filename:`audio-${Date.now()}.${this.getExtension()}`,chunkIndex:this.chunkIndex++,isFinal:e};this.chunks=[],this.onChunkCb?.(t,i)}startVolumeLoop(){if(this.mediaStream==null||this.onVolumeCb==null)return;this.audioContext=new AudioContext,this.audioContext.state==="suspended"&&this.audioContext.resume().catch(()=>{}),this.audioContext.onstatechange=()=>{let i=this.audioContext?.state??"unknown";r.DyFM_Log.info("[CCAP] AudioContext state changed:",i),i==="suspended"&&this.state_$()!==a.stopped&&this.audioContext?.resume().catch(()=>{})},this.audioSourceNode=this.audioContext.createMediaStreamSource(this.mediaStream),this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=2048,this.analyser.smoothingTimeConstant=.8,this.audioSourceNode.connect(this.analyser);let e=new Float32Array(this.analyser.fftSize),t=()=>{if(this.analyser==null||this.onVolumeCb==null)return;this.analyser.getFloatTimeDomainData(e);let i=0;for(let c=0;c<e.length;c++)i+=Math.abs(e[c]);let n=i/e.length;this.onVolumeCb(n);let l=this.state_$();if(l===a.standby&&n>=this.volumeGate){this.startCapture(),this.volumeAnimationId=requestAnimationFrame(t);return}l===a.running&&!this.isRestartingForFlush&&(n<this.volumeGate?this.silenceStartTime===null?this.silenceStartTime=Date.now():Date.now()-this.silenceStartTime>=this.silenceTimeLimitMs&&(this.stopCapture(),this.silenceStartTime=null):this.silenceStartTime=null),this.volumeAnimationId=requestAnimationFrame(t)};t()}stopVolumeLoop(){this.volumeAnimationId!=null&&(cancelAnimationFrame(this.volumeAnimationId),this.volumeAnimationId=null),this.audioSourceNode=null,this.audioContext!=null&&(this.audioContext.onstatechange=null,this.audioContext.close().catch(()=>{}),this.audioContext=null),this.analyser=null}stopMediaRecorder(){if(this.mediaRecorder!=null&&this.mediaRecorder.state!=="inactive"){try{this.mediaRecorder.stop()}catch{}this.mediaRecorder=null}this.chunks=[],this.isRestartingForFlush=!1}registerDeviceChangeListener(){try{this.deviceChangeHandler=()=>{r.DyFM_Log.info("[CCAP] media device change detected")},navigator.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler)}catch{this.deviceChangeHandler=null}}unregisterDeviceChangeListener(){if(this.deviceChangeHandler){try{navigator.mediaDevices.removeEventListener("devicechange",this.deviceChangeHandler)}catch{}this.deviceChangeHandler=null}}static \u0275fac=function(t){return new(t||o)};static \u0275prov=m({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();export{a,d as b,z as c};
2
+ //# sourceMappingURL=chunk-5XJR5EAR.js.map
@@ -0,0 +1,9 @@
1
+ import{a as O}from"./chunk-HSO5WM67.js";import{a as K}from"./chunk-CF3BLCVD.js";import{e as F}from"./chunk-QHZI4F2F.js";import{h as f,j as U}from"./chunk-KNTOPF7C.js";import{I as D,p as H}from"./chunk-Y3DARUXQ.js";import{C as _,R as k,a as I,aa as u,b as C,d as L,h as N,k as d,p as h,vb as g,xb as P,y as v}from"./chunk-TBMJSIBB.js";var A=N(H());var w=(()=>{class l{static GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES=["timestamp","createdAt","updatedAt","ts","time","sentAt","messageTimestamp","created_at","updated_at","lastMessageAt","last_message_at","startedAt","started_at","lastActivityAt","last_activity_at"];static GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES=["lastActivityAt","updatedAt","lastMessageAt","updated_at","last_activity_at","last_message_at","startedAt","started_at","createdAt","created_at"];static GATEWAY_SESSION_STARTED_FIELD_NAMES=["startedAt","started_at","createdAt","created_at"];static GATEWAY_OUTPUT_ONLY_TIMESTAMP_FIELD_NAMES=["lastMessageAt","last_message_at","lastOutputAt","last_output_at"];static extractTimestamp(s,t){for(let e of t){let n=s[e];if(typeof n=="string"&&n)return n;if(typeof n=="number"&&n>0){let o=n<1e12?n*1e3:n;return new Date(o).toISOString()}}}}return l})();var E=class l{static buildGatewaySessionsFetch(y){let s=y.response._firstSessionKeys,t=Array.isArray(s)?s:[],e=Array.isArray(y.response.sessions)?y.response.sessions:[],n=e.map(i=>l.mapRawSessionToListItem({raw:i,gatewayUrl:y.response.gatewayUrl}));return{listItems:l.sortListItemsByLastActivityDesc({items:n}),rawSessions:e,gatewayUrl:y.response.gatewayUrl,source:y.response.source,instanceId:y.response.instanceId,firstSessionKeys:t}}static mapRawSessionToListItem(y){let s=y.raw;return{sessionId:typeof s.key=="string"?s.key:typeof s.sessionId=="string"?s.sessionId:typeof s.id=="string"?s.id:String(s.key??s.sessionId??s.id??""),label:typeof s.label=="string"?s.label:typeof s.name=="string"?s.name:typeof s.title=="string"?s.title:void 0,workspacePath:typeof s.workspacePath=="string"?s.workspacePath:typeof s.cwd=="string"?s.cwd:"",status:typeof s.status=="string"?s.status:"unknown",statusMessage:typeof s.statusMessage=="string"?s.statusMessage:void 0,gatewayUrl:y.gatewayUrl,openclawAgentName:typeof s.agentName=="string"?s.agentName:typeof s.agent=="string"?s.agent:void 0,promptCount:typeof s.promptCount=="number"?s.promptCount:typeof s.messageCount=="number"?s.messageCount:0,toolCallCount:typeof s.toolCallCount=="number"?s.toolCallCount:0,lastActivityAt:w.extractTimestamp(s,w.GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES),startedAt:w.extractTimestamp(s,w.GATEWAY_SESSION_STARTED_FIELD_NAMES),lastPrompt:typeof s.lastPrompt=="string"?s.lastPrompt:void 0,mode:typeof s.mode=="string"?s.mode:void 0,reasoningEffort:typeof s.reasoningEffort=="string"?s.reasoningEffort:typeof s.thinking=="string"?s.thinking:void 0,isArchived:typeof s.isArchived=="boolean"?s.isArchived:!1}}static sortListItemsByLastActivityDesc(y){return[...y.items].sort((s,t)=>{let e=s.lastActivityAt?new Date(s.lastActivityAt).getTime():0;return(t.lastActivityAt?new Date(t.lastActivityAt).getTime():0)-e})}};var G=(()=>{class l{baseUrl=`${D.api.baseUrl}/oc-session`;http=_(P);peiContext_DS=_(K);withCcapId(s){let t=this.peiContext_DS.activeCcapId_$();return t?s.set("ccapId",t):s}createSession(s){let t=this.withCcapId(new g);return h(this.http.post(this.baseUrl,s,{params:t}))}listSessions(s){let t=this.withCcapId(new g);return s?.status&&(t=t.set("status",s.status)),s?.workspacePath&&(t=t.set("workspacePath",s.workspacePath)),s?.gatewayUrl&&(t=t.set("gatewayUrl",s.gatewayUrl)),s?.includeArchived&&(t=t.set("includeArchived","1")),s?.limit!=null&&(t=t.set("limit",String(s.limit))),s?.offset!=null&&(t=t.set("offset",String(s.offset))),h(this.http.get(this.baseUrl,{params:t}))}listGatewaySessions(s){let t=new g().set("instanceId",s.instanceId);return h(this.http.get(`${this.baseUrl}/gateway-sessions`,{params:t}))}getGatewaySessionHistory(s){let t=new g().set("instanceId",s.instanceId);return h(this.http.get(`${this.baseUrl}/gateway-sessions/${s.sessionId}/history`,{params:t}))}sendGatewayPrompt(s){return h(this.http.post(`${this.baseUrl}/gateway-sessions/${s.sessionId}/send`,{instanceId:s.instanceId,content:s.content,agentName:s.agentName}))}abortGatewaySession(s){return h(this.http.post(`${this.baseUrl}/gateway-sessions/${s.sessionId}/abort`,{instanceId:s.instanceId}))}deleteGatewaySession(s){let t=new g().set("instanceId",s.instanceId);return h(this.http.delete(`${this.baseUrl}/gateway-sessions/${s.sessionId}`,{params:t}))}getSession(s){let t=this.withCcapId(new g);return h(this.http.get(`${this.baseUrl}/${s.sessionId}`,{params:t}))}sendPrompt(s){let t=this.withCcapId(new g);return h(this.http.post(`${this.baseUrl}/${s.sessionId}/prompt`,{content:s.content},{params:t}))}reconnectSession(s){let t=this.withCcapId(new g);return h(this.http.post(`${this.baseUrl}/${s.sessionId}/reconnect`,{},{params:t}))}stopExecution(s){let t=this.withCcapId(new g);return h(this.http.post(`${this.baseUrl}/${s.sessionId}/stop-execution`,{},{params:t}))}terminateSession(s){let t=this.withCcapId(new g);return h(this.http.post(`${this.baseUrl}/${s.sessionId}/terminate`,{},{params:t}))}updateSessionConfig(s){let o=s,{sessionId:t}=o,e=L(o,["sessionId"]),n=this.withCcapId(new g);return h(this.http.patch(`${this.baseUrl}/${t}/config`,e,{params:n}))}setSessionArchived(s){let t=this.withCcapId(new g);return h(this.http.patch(`${this.baseUrl}/${s.sessionId}/archive`,{isArchived:s.isArchived},{params:t}))}getSessionEvents(s){let t=this.withCcapId(new g);return s.eventType&&(t=t.set("eventType",s.eventType)),s.since&&(t=t.set("since",s.since)),s.sinceSequence!=null&&(t=t.set("sinceSequence",String(s.sinceSequence))),s.limit!=null&&(t=t.set("limit",String(s.limit))),s.offset!=null&&(t=t.set("offset",String(s.offset))),s.latest&&(t=t.set("latest","1")),h(this.http.get(`${this.baseUrl}/${s.sessionId}/events`,{params:t}))}getSessionEventStreamUrl(s){let t=`${this.baseUrl}/${s.sessionId}/events/stream`,e=this.peiContext_DS.activeCcapId_$();return e?`${t}?ccapId=${encodeURIComponent(e)}`:t}static \u0275fac=function(t){return new(t||l)};static \u0275prov=v({token:l,factory:l.\u0275fac,providedIn:"root"})}return l})();var ls=(()=>{class l{sessions_$=u([]);sessionsLoading_$=u(!1);sessionsLoadError_$=u(null);selectedSession_$=u(null);selectedSessionLoading_$=u(!1);selectedSessionEvents_$=u([]);consoleMessages_$=u([]);assembledMessages_$=u([]);assembledMessagesHasMore_$=u(!1);isLoadingOlderMessages_$=u(!1);lastStatusUpdate_$=u(null);sessionUsage_$=u({inputTokens:0,outputTokens:0,costUsd:0});activeSessionId_$=u("");activeInstanceId_$=u("");gatewayFilter_$=u(null);extSessionMsg_AS=_(O);ocSession_AS=_(G);globalError_CS=_(U);socket_CS=_(F);ngZone=_(k);eventSubscription=null;reconnectSubscription=null;lastKnownEventSequence=-1;chatPollHandle=null;detailPollHandle=null;lastPolledHistoryFingerprint="";constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(s=>{this.handleSocketEvent(s)}),this.reconnectSubscription=this.socket_CS.connected$.subscribe(s=>{if(s){let t=this.activeSessionId_$();t&&(this.socket_CS.emit("oc-session:subscribe",{sessionId:t}),this.loadAssembledMessages({sessionId:t}).catch(()=>{})),this.backfillMissedEvents()}})}ngOnDestroy(){this.stopChatPolling(),this.eventSubscription&&(this.eventSubscription.unsubscribe(),this.eventSubscription=null),this.reconnectSubscription&&(this.reconnectSubscription.unsubscribe(),this.reconnectSubscription=null)}setGatewayFilter(s){this.gatewayFilter_$.set(s),this.loadSessions().catch(()=>{})}setGatewayFilterOnly(s){this.gatewayFilter_$.set(s)}loadSessions(s){return d(this,null,function*(){this.sessionsLoading_$.set(!0),this.sessionsLoadError_$.set(null);try{let e=[...(yield this.ocSession_AS.listSessions({status:s?.status,workspacePath:s?.workspacePath,gatewayUrl:this.gatewayFilter_$()??void 0,includeArchived:s?.includeArchived})).sessions].sort((n,o)=>{let i=n.lastActivityAt?new Date(n.lastActivityAt).getTime():0;return(o.lastActivityAt?new Date(o.lastActivityAt).getTime():0)-i});this.sessions_$.set(e)}catch(t){this.sessionsLoadError_$.set(t),this.pushConsoleMessage({type:"error",text:`Load sessions failed: ${f.getErrorMessageForDisplay(t)}`})}finally{this.sessionsLoading_$.set(!1)}})}fetchGatewaySessionsForInstance(s){return d(this,null,function*(){let t=yield this.ocSession_AS.listGatewaySessions({instanceId:s.instanceId});return E.buildGatewaySessionsFetch({response:t})})}loadGatewaySessions(s){return d(this,null,function*(){this.sessionsLoading_$.set(!0),this.sessionsLoadError_$.set(null);try{let t=yield this.fetchGatewaySessionsForInstance({instanceId:s.instanceId});!t.listItems.length&&t.rawSessions.length>0&&this.pushConsoleMessage({type:"error",text:`Gateway returned ${t.rawSessions.length} sessions but mapping produced 0.
2
+ First session keys: ${t.firstSessionKeys.join(", ")}`}),this.sessions_$.set(t.listItems)}catch(t){this.sessionsLoadError_$.set(t),this.pushConsoleMessage({type:"error",text:`Load gateway sessions failed: ${f.getErrorMessageForDisplay(t)}`})}finally{this.sessionsLoading_$.set(!1)}})}loadSessionDetail(s){return d(this,null,function*(){let t=s.isSilent===!0;t||this.selectedSessionLoading_$.set(!0);try{let e=yield this.ocSession_AS.getSession({sessionId:s.sessionId});this.selectedSession_$.set(e),this.loadAssembledMessages({sessionId:s.sessionId}).catch(()=>{})}catch(e){if(!t){this.selectedSession_$.set(null);let n=e instanceof Error?e.message:"Failed to load session details";this.pushConsoleMessage({type:"error",text:`Load session failed: ${n}`})}}finally{t||this.selectedSessionLoading_$.set(!1)}})}loadGatewaySessionHistory(s){return d(this,null,function*(){this.selectedSessionLoading_$.set(!0),this.consoleMessages_$.set([]);try{let t=yield this.ocSession_AS.getGatewaySessionHistory({sessionId:s.sessionId,instanceId:s.instanceId}),e=t,n=Array.isArray(e._rawKeys)?e._rawKeys:[],o=Array.isArray(t.history)?t.history:[],i=this.parseGatewayHistory(o),a=typeof e.messageCount=="number"?e.messageCount:0,r=Array.isArray(e._firstMessageKeys)?e._firstMessageKeys:[];i.length?this.consoleMessages_$.set(i):a>0?this.consoleMessages_$.set([{listKey:this.allocateConsoleListKey(),type:"error",text:`Gateway session has ${a} messages, but mapping failed.
3
+ Message keys: ${r.join(", ")||"unknown"}
4
+ Gateway response keys: ${n.join(", ")||"none"}`,timestamp:new Date().toISOString()}]):this.consoleMessages_$.set([{listKey:this.allocateConsoleListKey(),type:"info",text:"Gateway session loaded \u2014 session has no messages yet.",timestamp:new Date().toISOString()}]),this.selectedSession_$.set({session:{sessionId:s.sessionId,workspacePath:"",status:"unknown",promptCount:0,toolCallCount:0,isArchived:!1},runtime:{isLive:!1,runtimeStatus:null,outputBufferLength:0}}),this.lastPolledHistoryFingerprint=this.computeGatewayHistoryFingerprint(o),this.startChatPolling()}catch(t){this.selectedSession_$.set(null),this.pushConsoleMessage({type:"error",text:`Load gateway session history failed: ${f.getErrorMessageForDisplay(t)}`})}finally{this.selectedSessionLoading_$.set(!1)}})}loadSessionEvents(s){return d(this,null,function*(){try{let t=yield this.ocSession_AS.getSessionEvents({sessionId:s.sessionId,eventType:s.eventType,limit:s.limit??500,latest:!0});this.selectedSessionEvents_$.set(t.events),this.updateLastKnownSequence(t.events);for(let e of t.events)this.pushConsoleMessageFromEvent(e)}catch(t){this.selectedSessionEvents_$.set([]),this.pushConsoleMessage({type:"error",text:`Load events failed: ${f.getErrorMessageForDisplay(t)}`})}})}createSession(s){return d(this,null,function*(){try{let t=yield this.ocSession_AS.createSession(s),e=String(t.session.sessionId||"");return yield this.loadSessions(),e}catch(t){throw this.pushConsoleMessage({type:"error",text:`Create session failed: ${f.getErrorMessageForDisplay(t)}`}),t}})}sendPrompt(s){return d(this,null,function*(){this.pushConsoleMessage({type:"prompt",text:s.content});try{let t=this.activeInstanceId_$();t?yield this.ocSession_AS.sendGatewayPrompt({sessionId:s.sessionId,instanceId:t,content:s.content}):yield this.ocSession_AS.sendPrompt(s)}catch(t){throw this.pushConsoleMessage({type:"error",text:`Send failed: ${f.getErrorMessageForDisplay(t)}`}),t}})}reconnectSession(s){return d(this,null,function*(){try{yield this.ocSession_AS.reconnectSession(s),yield this.loadSessions()}catch(t){throw this.pushConsoleMessage({type:"error",text:`Reconnect failed: ${f.getErrorMessageForDisplay(t)}`}),t}})}stopExecution(s){return d(this,null,function*(){try{yield this.ocSession_AS.stopExecution(s)}catch(t){throw this.pushConsoleMessage({type:"error",text:`Stop execution failed: ${f.getErrorMessageForDisplay(t)}`}),t}})}terminateSession(s){return d(this,null,function*(){try{yield this.ocSession_AS.terminateSession(s),yield this.loadSessions()}catch(t){throw this.pushConsoleMessage({type:"error",text:`Terminate failed: ${f.getErrorMessageForDisplay(t)}`}),t}})}setSessionArchived(s){return d(this,null,function*(){try{yield this.ocSession_AS.setSessionArchived(s),yield this.loadSessions()}catch(t){throw this.pushConsoleMessage({type:"error",text:`Archive failed: ${f.getErrorMessageForDisplay(t)}`}),t}})}updateSessionConfig(s){return d(this,null,function*(){try{yield this.ocSession_AS.updateSessionConfig(s);let t=this.selectedSession_$();if(t?.session.sessionId===s.sessionId){let e=I({},t.session);s.mode!=null&&(e.mode=s.mode),s.reasoningEffort!=null&&(e.reasoningEffort=s.reasoningEffort),s.openclawAgentName!=null&&(e.openclawAgentName=s.openclawAgentName),this.selectedSession_$.set(C(I({},t),{session:e}))}}catch(t){throw this.pushConsoleMessage({type:"error",text:`Config update failed: ${f.getErrorMessageForDisplay(t)}`}),t}})}setActiveSessionId(s){let t=this.activeSessionId_$();t&&t!==s&&this.socket_CS.emit("oc-session:unsubscribe",{sessionId:t}),this.activeSessionId_$.set(s),s&&this.socket_CS.emit("oc-session:subscribe",{sessionId:s})}clearLiveOutput(){this.stopChatPolling(),this.consoleMessages_$.set([]),this.sessionUsage_$.set({inputTokens:0,outputTokens:0,costUsd:0}),this.lastKnownEventSequence=-1}allocateConsoleListKey(){return globalThis.crypto.randomUUID()}pushConsoleMessage(s){let t=s.type==="assistant"||s.type==="prompt"?s.text.trim():s.text,e={listKey:s.listKey??this.allocateConsoleListKey(),type:s.type,text:t,timestamp:s.timestamp??new Date().toISOString(),expandableContent:s.expandableContent,rawData:s.rawData},n=this.consoleMessages_$();this.consoleMessages_$.set([...n,e])}static CHAT_POLL_INTERVAL_MS=5*A.second;static DETAIL_POLL_INTERVAL_MS=10*A.second;startChatPolling(){this.stopChatPolling(),this.chatPollHandle=setInterval(()=>{this.pollChatHistory()},l.CHAT_POLL_INTERVAL_MS),this.detailPollHandle=setInterval(()=>{let s=this.activeSessionId_$();s&&this.loadSessionDetail({sessionId:s,isSilent:!0})},l.DETAIL_POLL_INTERVAL_MS)}stopChatPolling(){this.chatPollHandle&&(clearInterval(this.chatPollHandle),this.chatPollHandle=null),this.detailPollHandle&&(clearInterval(this.detailPollHandle),this.detailPollHandle=null),this.lastPolledHistoryFingerprint=""}computeGatewayHistoryFingerprint(s){let t=s.length;if(!t)return"0";let e=s[t-1],n=typeof e.id=="string"?e.id:typeof e.messageId=="string"?e.messageId:"",o=l.extractGatewayChatMessageTimestamp(e),i=this.extractTextFromMessage(e),a=400,r=i.length>a?i.slice(0,a):i;return`${t}${n}${o}${r}`}pollChatHistory(){return d(this,null,function*(){let s=this.activeSessionId_$(),t=this.activeInstanceId_$();if(!(!s||!t))try{let e=yield this.ocSession_AS.getGatewaySessionHistory({sessionId:s,instanceId:t}),n=Array.isArray(e.history)?e.history:[],o=this.computeGatewayHistoryFingerprint(n);if(o===this.lastPolledHistoryFingerprint)return;this.lastPolledHistoryFingerprint=o;let i=this.parseGatewayHistory(n);this.ngZone.run(()=>{this.consoleMessages_$.set(i)})}catch{}})}parseGatewayHistory(s){let t=[],e=new Map,n=[];for(let i of s){let a=i.content;if(Array.isArray(a))for(let r of a){let p=typeof r.type=="string"?r.type:"";if(p==="tool_use"||p==="toolCall"){let S=typeof r.id=="string"?r.id:"";S&&n.push(S)}if(p==="tool_result"){let S=typeof r.tool_use_id=="string"?r.tool_use_id:"";S&&e.set(S,this.extractTextFromContentBlock(r))}}}let o=0;for(let i of s){let a=typeof i.role=="string"?i.role:"";if(a==="toolResult"||a==="tool_result"){let r=this.extractTextFromMessage(i);o<n.length&&(e.set(n[o],r),o++)}}for(let i of s){let a=typeof i.role=="string"?i.role:"unknown",r=i.content,p=l.extractGatewayChatMessageTimestamp(i);if(a==="toolResult"||a==="tool_result")continue;if(typeof r=="string"){t.push({listKey:this.allocateConsoleListKey(),type:a==="user"||a==="human"?"prompt":a==="assistant"?"assistant":"info",text:r,timestamp:p,rawData:i});continue}if(Array.isArray(r)){for(let c of r){let M=typeof c.type=="string"?c.type:"";if(M==="text")t.push({listKey:this.allocateConsoleListKey(),type:a==="user"||a==="human"?"prompt":"assistant",text:typeof c.text=="string"?c.text:"",timestamp:p,rawData:{_block:c,_message:{role:a,timestamp:p,contentBlockCount:r.length}}});else if(M==="tool_use"||M==="toolCall"){let b=typeof c.name=="string"?c.name:"unknown tool",T=typeof c.id=="string"?c.id:"",m=c.input??c.arguments,$=e.get(T);t.push({listKey:this.allocateConsoleListKey(),type:"tool",text:`${b}
5
+ ${JSON.stringify(m,null,2)}`,timestamp:p,expandableContent:$,rawData:{_block:c,_pairedResultLength:$?.length??0}})}else if(M==="tool_result"){let b=typeof c.tool_use_id=="string"?c.tool_use_id:"";if(!(!!b&&[...t].some(m=>m.type==="tool"&&m.expandableContent===e.get(b)))){let m=c.content,$="";typeof m=="string"?$=m:Array.isArray(m)?$=m.map(x=>typeof x.text=="string"?x.text:JSON.stringify(x,null,2)).join(`
6
+ `):$=JSON.stringify(c,null,2),t.push({listKey:this.allocateConsoleListKey(),type:"tool-result",text:$,timestamp:p,rawData:{_block:c}})}}else M==="thinking"?t.push({listKey:this.allocateConsoleListKey(),type:"info",text:typeof c.thinking=="string"?c.thinking:JSON.stringify(c,null,2),timestamp:p,rawData:{_block:c}}):t.push({listKey:this.allocateConsoleListKey(),type:"info",text:JSON.stringify(c,null,2),timestamp:p,rawData:{_block:c}})}continue}let S=typeof i.text=="string"?i.text:typeof i.message=="string"?i.message:JSON.stringify(i,null,2);t.push({listKey:this.allocateConsoleListKey(),type:a==="user"||a==="human"?"prompt":a==="assistant"?"assistant":a==="tool"||a==="tool_result"||a==="tool_use"?"tool":"info",text:S,timestamp:p,rawData:i})}return t}backfillMissedEvents(){return d(this,null,function*(){let s=this.activeSessionId_$();if(!(!s||this.lastKnownEventSequence<0))try{let e=(yield this.ocSession_AS.getSessionEvents({sessionId:s,sinceSequence:this.lastKnownEventSequence})).events;if(!e.length)return;this.ngZone.run(()=>{let n=this.selectedSessionEvents_$();this.selectedSessionEvents_$.set([...n,...e]);for(let o of e)this.pushConsoleMessageFromEvent(o);this.updateLastKnownSequence(e)})}catch(t){A.DyFM_Log.warn("CCAP_OcSession_DS | backfill failed",t)}})}updateLastKnownSequence(s){for(let t of s)t.sequence>this.lastKnownEventSequence&&(this.lastKnownEventSequence=t.sequence)}handleSocketEvent(s){let t=s.event,e=s.payload;try{this.ngZone.run(()=>{switch(t){case"oc-session:status":this.handleStatusUpdate(e);break;case"oc-session:output":this.handleOutputChunk(e);break;case"oc-session:event":this.handleSessionEvent(e);break;case"oc-session:list-update":this.handleListUpdate(e);break;case"ext-session-msg:message":this.handleAssembledMessage(e);break;case"ext-session-msg:update":this.handleAssembledMessageUpdate(e);break}})}catch(n){A.DyFM_Log.error(`CCAP_OcSession_DS | socket event error | event: ${t}`,n)}}handleStatusUpdate(s){let t=s.sessionId??"",e=s.status??"",n=s.statusMessage;this.lastStatusUpdate_$.set({sessionId:t,status:e,statusMessage:n});let i=this.sessions_$().map(r=>r.sessionId===t?C(I({},r),{status:e,statusMessage:n}):r);this.sessions_$.set(i);let a=this.selectedSession_$();if(a?.session.sessionId===t){let r=e==="running"||e==="waiting-input";this.selectedSession_$.set(C(I({},a),{session:C(I({},a.session),{status:e,statusMessage:n}),runtime:C(I({},a.runtime),{isLive:r,runtimeStatus:e})}))}if(e==="errored"){let r=n?`OC Session error (${t}): ${n}`:`OC Session error (${t}): session entered errored state`;this.globalError_CS.showError(new Error(r),"oc-session-status")}}handleOutputChunk(s){let t=s.sessionId??"";if(t&&t!==this.activeSessionId_$())return;let e=s.content??"",n=s.type??"response";e&&this.pushConsoleMessage({type:n==="error"?"error":"assistant",text:e})}handleSessionEvent(s){let t=s.sessionId??"";if(t&&t!==this.activeSessionId_$())return;let e=s.event??{},n={sessionId:t,eventType:e.eventType??"",timestamp:e.timestamp??"",data:e.data??{},sequence:e.sequence??0};if(n.sequence<=this.lastKnownEventSequence)return;this.lastKnownEventSequence=n.sequence;let o=this.selectedSessionEvents_$();this.selectedSessionEvents_$.set([...o,n]),this.pushConsoleMessageFromEvent(n)}handleListUpdate(s){this.loadSessions().catch(()=>{})}extractTextFromContentBlock(s){let t=s.content;return typeof t=="string"?t:Array.isArray(t)?t.map(e=>typeof e.text=="string"?e.text:JSON.stringify(e,null,2)).join(`
7
+ `):typeof s.text=="string"?s.text:JSON.stringify(s,null,2)}extractTextFromMessage(s){let t=s.content;return typeof t=="string"?t:Array.isArray(t)?t.map(e=>typeof e.text=="string"?e.text:JSON.stringify(e,null,2)).join(`
8
+ `):JSON.stringify(s,null,2)}pushConsoleMessageFromEvent(s){let t=s.data;switch(s.eventType){case"response-chunk":{let e=typeof t.content=="string"?t.content:"";e&&this.pushConsoleMessage({type:"assistant",text:e});break}case"response-complete":{let e=t.usage;if(e&&typeof e=="object"){let n=e,o=this.sessionUsage_$();this.sessionUsage_$.set({inputTokens:o.inputTokens+(typeof n.inputTokens=="number"?n.inputTokens:0),outputTokens:o.outputTokens+(typeof n.outputTokens=="number"?n.outputTokens:0),costUsd:o.costUsd+(typeof n.costUsd=="number"?n.costUsd:0)})}break}case"tool-call-start":{let e=typeof t.name=="string"?t.name:"unknown",n=t.input,o=n?this.summarizeToolInput(n):"",i=o?`${e}: ${o}`:e;this.pushConsoleMessage({type:"tool",text:i,rawData:t});break}case"tool-call-end":{let e=t.content??t.output,n=typeof e=="string"?e:JSON.stringify(e??{});this.pushConsoleMessage({type:"tool-result",text:n.length>200?n.substring(0,200)+"\u2026":n,expandableContent:n.length>200?n:void 0,rawData:t});break}case"error":{let e=t.message??t.content;typeof e=="string"&&e&&this.pushConsoleMessage({type:"error",text:e});break}case"connection-change":{let e=typeof t.state=="string"?t.state:"";e&&this.pushConsoleMessage({type:"info",text:`Gateway connection: ${e}`,rawData:t});break}default:break}}summarizeToolInput(s){if(typeof s=="string")return s.length>80?s.substring(0,80)+"\u2026":s;if(typeof s=="object"&&s!==null){let t=JSON.stringify(s);return t.length>80?t.substring(0,80)+"\u2026":t}return""}static extractGatewayChatMessageTimestamp(s){return w.extractTimestamp(s,w.GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES)??""}loadAssembledMessages(s){return d(this,null,function*(){try{let t=yield this.extSessionMsg_AS.getMessages({sessionId:s.sessionId,latest:!0});this.assembledMessages_$.set(t.messages),this.assembledMessagesHasMore_$.set(t.hasMore===!0)}catch(t){A.DyFM_Log.error(`CCAP_OcSession_DS | loadAssembledMessages failed | sessionId: ${s.sessionId}`,t)}})}loadOlderAssembledMessages(s){return d(this,null,function*(){if(this.isLoadingOlderMessages_$()||!this.assembledMessagesHasMore_$())return;let t=this.assembledMessages_$();if(!t.length)return;let e=t.reduce((n,o)=>(o.sequence??0)<n?o.sequence??0:n,t[0].sequence??0);this.isLoadingOlderMessages_$.set(!0);try{let n=yield this.extSessionMsg_AS.getMessages({sessionId:s.sessionId,beforeSequence:e,limit:s.limit??50});n.messages.length&&this.assembledMessages_$.set([...n.messages,...t]),this.assembledMessagesHasMore_$.set(n.hasMore===!0)}catch(n){A.DyFM_Log.error(`CCAP_OcSession_DS | loadOlderAssembledMessages failed | sessionId: ${s.sessionId}`,n)}finally{this.isLoadingOlderMessages_$.set(!1)}})}handleAssembledMessage(s){let t=typeof s.sessionId=="string"?s.sessionId:"";if(!t||t!==this.activeSessionId_$())return;let e=s.message;if(!e||typeof e!="object")return;let n=e,o=this.assembledMessages_$();this.assembledMessages_$.set([...o,n])}handleAssembledMessageUpdate(s){let t=typeof s.sessionId=="string"?s.sessionId:"";if(!t||t!==this.activeSessionId_$())return;let e=typeof s.messageKey=="string"?s.messageKey:"";if(!e)return;let n=s.update;if(!n||typeof n!="object")return;let o=n,i=this.assembledMessages_$(),a=i.findIndex(S=>S.messageKey===e);if(a<0)return;let r=I({},i[a]);typeof o.bodyText=="string"&&(r.bodyText=o.bodyText),o.toolResult!==void 0&&(r.toolResult=o.toolResult),typeof o.toolStatus=="string"&&(r.toolStatus=o.toolStatus),o.headerStatusDot!==void 0&&(r.headerStatusDot=typeof o.headerStatusDot=="string"?o.headerStatusDot:void 0);let p=[...i];p[a]=r,this.assembledMessages_$.set(p)}static \u0275fac=function(t){return new(t||l)};static \u0275prov=v({token:l,factory:l.\u0275fac,providedIn:"root"})}return l})();export{w as a,ls as b};
9
+ //# sourceMappingURL=chunk-7TYUDNTP.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/app/_modules/external-sessions/_modules/openclaw/_services/openclaw.data-service.ts", "src/app/_collections/oc/ccap-oc-gateway-timestamp.util.ts", "src/app/_collections/oc/ccap-oc-gateway-list.util.ts", "src/app/_modules/external-sessions/_modules/openclaw/_services/openclaw.api-service.ts"],
4
+ "sourcesContent": ["import { inject, Injectable, NgZone, OnDestroy, signal } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\n\nimport { DyFM_Log, second } from '@futdevpro/fsm-dynamo';\n\nimport { CCAP_OcGatewaySessionList_Util } from '../../../../../_collections/oc/ccap-oc-gateway-list.util';\nimport { CCAP_OcGatewayTimestamp_Util } from '../../../../../_collections/oc/ccap-oc-gateway-timestamp.util';\nimport {\n Oc_GatewaySessionsFetch_Interface,\n Oc_ListItem_Interface,\n Oc_EventItem_Interface,\n Oc_Detail_Response,\n} from '../_models/interfaces/oc-list-item.interface';\nimport { CCAP_ErrorDisplay_Util } from '../../../../../_collections/error/error-display.util';\nimport { Openclaw_ApiService } from './openclaw.api-service';\nimport { ExS_Message_ApiService } from '../../../_services/exs-message.api-service';\nimport { CCAP_GlobalError_ControlService } from '../../../../../_services/control-services/ccap-global-error.control-service';\nimport { CCAP_Socket_ControlService } from '../../../../../_services/control-services/ccap-socket.control-service';\nimport { CCAP_ExtSessionMessage_Response } from '../../../../../_models/interfaces/shared/ccap-ext-message.interface';\nimport {\n OcSessionConsoleMessage_Interface,\n OcSessionUsage_Interface,\n} from './oc.data-service.interface';\n\n/**\n * OpenClaw Session Toolkit data service (SSOT).\n * Reactive state management: session lista, detail, events, live output.\n * Socket.io event subscription a real-time push-hoz.\n */\n@Injectable({ providedIn: 'root' })\nexport class Openclaw_DataService implements OnDestroy {\n\n /** Session lista. */\n readonly sessions_$ = signal<Oc_ListItem_Interface[]>([]);\n\n /** Session lista betöltés folyamatban. */\n readonly sessionsLoading_$ = signal<boolean>(false);\n\n /** Session lista hiba. */\n readonly sessionsLoadError_$ = signal<unknown | null>(null);\n\n /** Kiválasztott session részletek. */\n readonly selectedSession_$ = signal<Oc_Detail_Response | null>(null);\n\n /** Kiválasztott session betöltés. */\n readonly selectedSessionLoading_$ = signal<boolean>(false);\n\n /** Kiválasztott session event log. */\n readonly selectedSessionEvents_$ = signal<Oc_EventItem_Interface[]>([]);\n\n /** Console rendszer-üzenetek (prompt echo, status change, error feedback). */\n readonly consoleMessages_$ = signal<OcSessionConsoleMessage_Interface[]>([]);\n\n /** Szerver-oldali assembled messages (SSOT). */\n readonly assembledMessages_$ = signal<CCAP_ExtSessionMessage_Response[]>([]);\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 — backward-prepend pagináció state.\n * `assembledMessagesHasMore_$`: van-e még régebbi szakasz a head felé;\n * `isLoadingOlderMessages_$`: true a backward-fetch alatt (UI top-spinner +\n * race-guard, hogy duplikált fetch ne induljon).\n */\n readonly assembledMessagesHasMore_$ = signal<boolean>(false);\n readonly isLoadingOlderMessages_$ = signal<boolean>(false);\n\n /** Utolsó status update a socket-ről. */\n readonly lastStatusUpdate_$ = signal<{\n sessionId: string;\n status: string;\n statusMessage?: string;\n } | null>(null);\n\n /** Kumulatív token usage az aktív session-höz. */\n readonly sessionUsage_$ = signal<OcSessionUsage_Interface>({\n inputTokens: 0,\n outputTokens: 0,\n costUsd: 0,\n });\n\n /** Aktuálisan kiválasztott session ID (a detail nézet állítja be). */\n readonly activeSessionId_$ = signal<string>('');\n\n /** Aktuálisan kiválasztott OpenClaw instance ID (a dashboard állítja be). */\n readonly activeInstanceId_$ = signal<string>('');\n\n /** Aktív gateway szűrő: csak az adott gatewayUrl-hez tartozó session-ök (null = összes). */\n readonly gatewayFilter_$ = signal<string | null>(null);\n\n private readonly extSessionMsg_AS: ExS_Message_ApiService =\n inject(ExS_Message_ApiService);\n private readonly ocSession_AS: Openclaw_ApiService =\n inject(Openclaw_ApiService);\n\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n\n private readonly socket_CS: CCAP_Socket_ControlService =\n inject(CCAP_Socket_ControlService);\n\n private readonly ngZone: NgZone = inject(NgZone);\n\n private eventSubscription: Subscription | null = null;\n\n /** Socket reconnect subscription (backfill trigger). */\n private reconnectSubscription: Subscription | null = null;\n\n /** Legutolsó ismert event sequence szám (duplikáció elkerüléséhez). */\n private lastKnownEventSequence: number = -1;\n\n /** Chat history polling timer handle. */\n private chatPollHandle: ReturnType<typeof setInterval> | null = null;\n\n /** Session detail (REST) polling — metadata panel frissítése gateway mód mellett. */\n private detailPollHandle: ReturnType<typeof setInterval> | null = null;\n\n /**\n * Gateway history fingerprint az utolsó poll / initial load után (tartalom + méret változás\n * detektálása, nem csak üzenetszám).\n */\n private lastPolledHistoryFingerprint: string = '';\n\n constructor() {\n // Socket event-ek feliratkozása\n this.eventSubscription = this.socket_CS.event$.subscribe(\n (envelope: { event: string; payload: Record<string, unknown> }): void => {\n this.handleSocketEvent(envelope);\n },\n );\n\n // Socket reconnect → resubscribe + backfill\n this.reconnectSubscription = this.socket_CS.connected$.subscribe(\n (isConnected: boolean): void => {\n if (isConnected) {\n const activeId: string = this.activeSessionId_$();\n if (activeId) {\n this.socket_CS.emit('oc-session:subscribe', { sessionId: activeId });\n // Assembled messages újratöltése — a disconnect alatt érkezett socket push-ok\n // (ext-session-msg:message/update) elvesztek; a REST reload pótolja őket.\n this.loadAssembledMessages({ sessionId: activeId }).catch((): void => {});\n }\n this.backfillMissedEvents();\n }\n },\n );\n }\n\n ngOnDestroy(): void {\n this.stopChatPolling();\n if (this.eventSubscription) {\n this.eventSubscription.unsubscribe();\n this.eventSubscription = null;\n }\n if (this.reconnectSubscription) {\n this.reconnectSubscription.unsubscribe();\n this.reconnectSubscription = null;\n }\n }\n\n // ── Session Lista ───────────────────────────────────────────\n\n /**\n * Session lista betöltése a szerverről.\n */\n /**\n * Gateway szűrő beállítása — frissíti a session listát.\n */\n setGatewayFilter(gatewayUrl: string | null): void {\n this.gatewayFilter_$.set(gatewayUrl);\n this.loadSessions().catch((): void => {});\n }\n\n /**\n * Gateway szűrő beállítása session lista újratöltés nélkül.\n * A hívó felelős a loadSessions explicit hívásáért (dupla load elkerülése).\n */\n setGatewayFilterOnly(gatewayUrl: string | null): void {\n this.gatewayFilter_$.set(gatewayUrl);\n }\n\n async loadSessions(params?: {\n status?: string;\n workspacePath?: string;\n includeArchived?: boolean;\n }): Promise<void> {\n this.sessionsLoading_$.set(true);\n this.sessionsLoadError_$.set(null);\n\n try {\n const response = await this.ocSession_AS.listSessions({\n status: params?.status,\n workspacePath: params?.workspacePath,\n gatewayUrl: this.gatewayFilter_$() ?? undefined,\n includeArchived: params?.includeArchived,\n });\n\n // Rendezés: legfrissebb session legfelül (lastActivityAt desc)\n const sorted: Oc_ListItem_Interface[] = [...response.sessions].sort(\n (a: Oc_ListItem_Interface, b: Oc_ListItem_Interface): number => {\n const dateA: number = a.lastActivityAt ? new Date(a.lastActivityAt).getTime() : 0;\n const dateB: number = b.lastActivityAt ? new Date(b.lastActivityAt).getTime() : 0;\n return dateB - dateA;\n },\n );\n this.sessions_$.set(sorted);\n } catch (err: unknown) {\n this.sessionsLoadError_$.set(err);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load sessions failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n } finally {\n this.sessionsLoading_$.set(false);\n }\n }\n\n /**\n * Gateway session lista lekérése — nincs loading/console mellékhatás (Dark Office OCI enrich, tesztek).\n * A normalizált lista és a nyers sorok ugyanabból a válaszból készülnek (mapper SSOT).\n */\n async fetchGatewaySessionsForInstance(params: {\n instanceId: string;\n }): Promise<Oc_GatewaySessionsFetch_Interface> {\n const response = await this.ocSession_AS.listGatewaySessions({\n instanceId: params.instanceId,\n });\n return CCAP_OcGatewaySessionList_Util.buildGatewaySessionsFetch({ response: response });\n }\n\n /**\n * Session lista betöltése közvetlenül a gateway-ről (SSOT).\n * Az OpenClaw gateway a sessions_list RPC-n adja vissza az aktív session-öket.\n */\n async loadGatewaySessions(params: { instanceId: string }): Promise<void> {\n this.sessionsLoading_$.set(true);\n this.sessionsLoadError_$.set(null);\n\n try {\n const fetchResult: Oc_GatewaySessionsFetch_Interface =\n await this.fetchGatewaySessionsForInstance({ instanceId: params.instanceId });\n\n // Ha nincs session, diagnosztika\n if (!fetchResult.listItems.length && fetchResult.rawSessions.length > 0) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Gateway returned ${fetchResult.rawSessions.length} sessions but mapping produced 0.\\n`\n + `First session keys: ${fetchResult.firstSessionKeys.join(', ')}`,\n });\n }\n\n this.sessions_$.set(fetchResult.listItems);\n } catch (err: unknown) {\n this.sessionsLoadError_$.set(err);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load gateway sessions failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n } finally {\n this.sessionsLoading_$.set(false);\n }\n }\n\n // ── Session Detail ──────────────────────────────────────────\n\n /**\n * Session részletek betöltése (CCAP REST).\n * `isSilent`: nincs loading flag és poll / háttér-frissítés hibája nem törli a state-et.\n */\n async loadSessionDetail(params: { sessionId: string; isSilent?: boolean }): Promise<void> {\n const isSilent: boolean = params.isSilent === true;\n\n if (!isSilent) {\n this.selectedSessionLoading_$.set(true);\n }\n\n try {\n const response: Oc_Detail_Response =\n await this.ocSession_AS.getSession({\n sessionId: params.sessionId,\n });\n\n this.selectedSession_$.set(response);\n\n // Assembled messages betöltése (SSOT — fire-and-forget)\n this.loadAssembledMessages({ sessionId: params.sessionId })\n .catch((): void => {});\n } catch (err: unknown) {\n if (!isSilent) {\n this.selectedSession_$.set(null);\n const errorMessage: string = err instanceof Error\n ? err.message\n : 'Failed to load session details';\n this.pushConsoleMessage({\n type: 'error',\n text: `Load session failed: ${errorMessage}`,\n });\n }\n } finally {\n if (!isSilent) {\n this.selectedSessionLoading_$.set(false);\n }\n }\n }\n\n /**\n * Session history betöltése közvetlenül a gateway-ről (SSOT).\n * A gateway a chat.history RPC-n adja vissza az üzeneteket.\n */\n async loadGatewaySessionHistory(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<void> {\n this.selectedSessionLoading_$.set(true);\n this.consoleMessages_$.set([]);\n\n try {\n const response = await this.ocSession_AS.getGatewaySessionHistory({\n sessionId: params.sessionId,\n instanceId: params.instanceId,\n });\n\n // Gateway response feldolgozás — a _rawKeys diagnosztikát ad ha a mapping nem talál üzeneteket\n const rawResponse: Record<string, unknown> = response as Record<string, unknown>;\n const rawKeys: string[] = Array.isArray(rawResponse._rawKeys)\n ? rawResponse._rawKeys as string[] : [];\n\n // History üzeneteket console message-ekké alakítjuk a közös parser-rel\n const history: Record<string, unknown>[] = Array.isArray(response.history)\n ? response.history : [];\n const messages: OcSessionConsoleMessage_Interface[] = this.parseGatewayHistory(history);\n\n const gatewayMessageCount: number = typeof rawResponse.messageCount === 'number'\n ? rawResponse.messageCount as number : 0;\n const firstMessageKeys: string[] = Array.isArray(rawResponse._firstMessageKeys)\n ? rawResponse._firstMessageKeys as string[] : [];\n\n if (messages.length) {\n this.consoleMessages_$.set(messages);\n } else if (gatewayMessageCount > 0) {\n // A gateway-nek van üzenete, de a mapping nem tudta feldolgozni\n this.consoleMessages_$.set([{\n listKey: this.allocateConsoleListKey(),\n type: 'error',\n text: `Gateway session has ${gatewayMessageCount} messages, but mapping failed.\\n`\n + `Message keys: ${firstMessageKeys.join(', ') || 'unknown'}\\n`\n + `Gateway response keys: ${rawKeys.join(', ') || 'none'}`,\n timestamp: new Date().toISOString(),\n }]);\n } else {\n this.consoleMessages_$.set([{\n listKey: this.allocateConsoleListKey(),\n type: 'info',\n text: `Gateway session loaded — session has no messages yet.`,\n timestamp: new Date().toISOString(),\n }]);\n }\n\n // Minimális selectedSession beállítás a UI-nak\n this.selectedSession_$.set({\n session: {\n sessionId: params.sessionId,\n workspacePath: '',\n status: 'unknown',\n promptCount: 0,\n toolCallCount: 0,\n isArchived: false,\n },\n runtime: {\n isLive: false,\n runtimeStatus: null,\n outputBufferLength: 0,\n },\n });\n\n // Chat polling indítása — a gateway SSOT, periodikusan frissítjük a history-t\n this.lastPolledHistoryFingerprint = this.computeGatewayHistoryFingerprint(history);\n this.startChatPolling();\n } catch (err: unknown) {\n this.selectedSession_$.set(null);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load gateway session history failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n } finally {\n this.selectedSessionLoading_$.set(false);\n }\n }\n\n /**\n * Session event log betöltése.\n */\n async loadSessionEvents(params: {\n sessionId: string;\n eventType?: string;\n limit?: number;\n }): Promise<void> {\n try {\n const response = await this.ocSession_AS.getSessionEvents({\n sessionId: params.sessionId,\n eventType: params.eventType,\n limit: params.limit ?? 500,\n latest: true,\n });\n\n this.selectedSessionEvents_$.set(response.events);\n this.updateLastKnownSequence(response.events);\n\n // Historikus event-ek konvertálása console üzenetekké\n for (const event of response.events) {\n this.pushConsoleMessageFromEvent(event);\n }\n } catch (err: unknown) {\n this.selectedSessionEvents_$.set([]);\n this.pushConsoleMessage({\n type: 'error',\n text: `Load events failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n }\n }\n\n // ── Actions ─────────────────────────────────────────────────\n\n /**\n * Új session létrehozása.\n */\n async createSession(params: {\n workspacePath: string;\n label?: string;\n gatewayUrl?: string;\n openclawAgentName?: string;\n initialPrompt?: string;\n mode?: string;\n reasoningEffort?: string;\n }): Promise<string> {\n try {\n const result: { session: Record<string, unknown> } =\n await this.ocSession_AS.createSession(params);\n const sessionId: string = String(result.session.sessionId || '');\n await this.loadSessions();\n return sessionId;\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Create session failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Prompt küldése.\n */\n async sendPrompt(params: {\n sessionId: string;\n content: string;\n }): Promise<void> {\n // Azonnali prompt echo a chat-be\n this.pushConsoleMessage({\n type: 'prompt',\n text: params.content,\n });\n\n try {\n // Gateway SSOT: ha van aktív instanceId, a gateway-re küldjük\n const instanceId: string = this.activeInstanceId_$();\n if (instanceId) {\n await this.ocSession_AS.sendGatewayPrompt({\n sessionId: params.sessionId,\n instanceId: instanceId,\n content: params.content,\n });\n } else {\n await this.ocSession_AS.sendPrompt(params);\n }\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Send failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session reconnect (gateway reconnect).\n */\n async reconnectSession(params: { sessionId: string }): Promise<void> {\n try {\n await this.ocSession_AS.reconnectSession(params);\n await this.loadSessions();\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Reconnect failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Futó execution leállítása (gateway sessions.abort).\n */\n async stopExecution(params: { sessionId: string }): Promise<void> {\n try {\n await this.ocSession_AS.stopExecution(params);\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Stop execution failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session terminate.\n */\n async terminateSession(params: { sessionId: string }): Promise<void> {\n try {\n await this.ocSession_AS.terminateSession(params);\n await this.loadSessions();\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Terminate failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session archiválás állapot beállítása.\n */\n async setSessionArchived(params: {\n sessionId: string;\n isArchived: boolean;\n }): Promise<void> {\n try {\n await this.ocSession_AS.setSessionArchived(params);\n await this.loadSessions();\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Archive failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Session config frissítése (mode, effort, agentName).\n */\n async updateSessionConfig(params: {\n sessionId: string;\n mode?: string;\n reasoningEffort?: string;\n openclawAgentName?: string;\n }): Promise<void> {\n try {\n await this.ocSession_AS.updateSessionConfig(params);\n\n // Lokális state frissítése (selectedSession detail-ban)\n const currentDetail: Oc_Detail_Response | null =\n this.selectedSession_$();\n if (currentDetail?.session.sessionId === params.sessionId) {\n const updatedSession: Oc_ListItem_Interface = {\n ...currentDetail.session,\n };\n if (params.mode != null) {\n updatedSession.mode = params.mode;\n }\n if (params.reasoningEffort != null) {\n updatedSession.reasoningEffort = params.reasoningEffort;\n }\n if (params.openclawAgentName != null) {\n updatedSession.openclawAgentName = params.openclawAgentName;\n }\n this.selectedSession_$.set({\n ...currentDetail,\n session: updatedSession,\n });\n }\n } catch (err: unknown) {\n this.pushConsoleMessage({\n type: 'error',\n text: `Config update failed: ${CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err)}`,\n });\n throw err;\n }\n }\n\n /**\n * Aktív session ID beállítása (detail nézet hívja navigáláskor).\n * Socket subscribe/unsubscribe: a monitoring service célzott push-hoz.\n */\n setActiveSessionId(sessionId: string): void {\n const previousId: string = this.activeSessionId_$();\n\n if (previousId && previousId !== sessionId) {\n this.socket_CS.emit('oc-session:unsubscribe', { sessionId: previousId });\n }\n\n this.activeSessionId_$.set(sessionId);\n\n if (sessionId) {\n this.socket_CS.emit('oc-session:subscribe', { sessionId: sessionId });\n }\n }\n\n /**\n * Live output és console törlése (pl. új session-re navigáláskor).\n */\n clearLiveOutput(): void {\n this.stopChatPolling();\n this.consoleMessages_$.set([]);\n this.sessionUsage_$.set({\n inputTokens: 0,\n outputTokens: 0,\n costUsd: 0,\n });\n this.lastKnownEventSequence = -1;\n }\n\n /**\n * Egyedi console üzenet kulcs — @for track és stabil diff.\n */\n private allocateConsoleListKey(): string {\n return globalThis.crypto.randomUUID();\n }\n\n /**\n * Console rendszer-üzenet hozzáadása.\n */\n pushConsoleMessage(params: {\n listKey?: string;\n type: OcSessionConsoleMessage_Interface['type'];\n text: string;\n timestamp?: string;\n expandableContent?: string;\n rawData?: Record<string, unknown>;\n }): void {\n const trimmedText: string = (params.type === 'assistant' || params.type === 'prompt')\n ? params.text.trim()\n : params.text;\n const message: OcSessionConsoleMessage_Interface = {\n listKey: params.listKey ?? this.allocateConsoleListKey(),\n type: params.type,\n text: trimmedText,\n timestamp: params.timestamp ?? new Date().toISOString(),\n expandableContent: params.expandableContent,\n rawData: params.rawData,\n };\n const current: OcSessionConsoleMessage_Interface[] = this.consoleMessages_$();\n this.consoleMessages_$.set([...current, message]);\n }\n\n // ── Private: Chat History Polling ────────────────────────────\n\n /** Chat poll intervallum (5 másodperc). */\n private static readonly CHAT_POLL_INTERVAL_MS: number = 5 * second;\n\n /** REST session detail poll intervallum (10 másodperc) — metadata SSOT kiegészítés. */\n private static readonly DETAIL_POLL_INTERVAL_MS: number = 10 * second;\n\n /**\n * Chat history polling indítása.\n * Periodikusan lekérdezi a gateway history-t és frissíti a console-t ha változott a fingerprint.\n * REST detail poll párhuzamosan fut a metadata panelhez.\n */\n startChatPolling(): void {\n this.stopChatPolling();\n this.chatPollHandle = setInterval((): void => {\n void this.pollChatHistory();\n }, Openclaw_DataService.CHAT_POLL_INTERVAL_MS);\n this.detailPollHandle = setInterval((): void => {\n const sid: string = this.activeSessionId_$();\n if (sid) {\n void this.loadSessionDetail({ sessionId: sid, isSilent: true });\n }\n }, Openclaw_DataService.DETAIL_POLL_INTERVAL_MS);\n }\n\n /**\n * Chat history polling leállítása.\n */\n stopChatPolling(): void {\n if (this.chatPollHandle) {\n clearInterval(this.chatPollHandle);\n this.chatPollHandle = null;\n }\n if (this.detailPollHandle) {\n clearInterval(this.detailPollHandle);\n this.detailPollHandle = null;\n }\n this.lastPolledHistoryFingerprint = '';\n }\n\n /**\n * Gateway history snapshot fingerprint — hossz, utolsó üzenet idő / id, tartalom slice.\n * Ugyanannyi üzenet mellett is észleli az utolsó elem tartalom-változását (pl. stream).\n */\n private computeGatewayHistoryFingerprint(history: Record<string, unknown>[]): string {\n const length: number = history.length;\n if (!length) {\n return '0';\n }\n const last: Record<string, unknown> = history[length - 1];\n const idPart: string = typeof last.id === 'string' ? last.id\n : typeof last.messageId === 'string' ? last.messageId : '';\n const tsPart: string = Openclaw_DataService.extractGatewayChatMessageTimestamp(last);\n const body: string = this.extractTextFromMessage(last);\n const sliceMax: number = 400;\n const contentSlice: string = body.length > sliceMax ? body.slice(0, sliceMax) : body;\n return `${length}\\u001f${idPart}\\u001f${tsPart}\\u001f${contentSlice}`;\n }\n\n /**\n * Egyetlen poll ciklus: gateway history lekérdezés + frissítés ha a fingerprint változott.\n */\n private async pollChatHistory(): Promise<void> {\n const sessionId: string = this.activeSessionId_$();\n const instanceId: string = this.activeInstanceId_$();\n if (!sessionId || !instanceId) {\n return;\n }\n\n try {\n const response = await this.ocSession_AS.getGatewaySessionHistory({\n sessionId: sessionId,\n instanceId: instanceId,\n });\n\n const history: Record<string, unknown>[] = Array.isArray(response.history)\n ? response.history : [];\n\n const fingerprint: string = this.computeGatewayHistoryFingerprint(history);\n if (fingerprint === this.lastPolledHistoryFingerprint) {\n return;\n }\n\n this.lastPolledHistoryFingerprint = fingerprint;\n const messages: OcSessionConsoleMessage_Interface[] = this.parseGatewayHistory(history);\n\n this.ngZone.run((): void => {\n this.consoleMessages_$.set(messages);\n });\n } catch {\n // Poll hiba: csendes — nem terhelünk a console-t ismétlődő hibaüzenetekkel\n }\n }\n\n /**\n * Gateway history feldolgozása console message-ekké.\n * Content blocks szétbontás + tool call / tool result párosítás.\n * Két formátum támogatott:\n * 1. Anthropic: content block {type: \"tool_result\", tool_use_id: \"...\"} + content\n * 2. OpenClaw: top-level message {role: \"toolResult\"} — a content-ben text blokkok\n */\n private parseGatewayHistory(\n history: Record<string, unknown>[],\n ): OcSessionConsoleMessage_Interface[] {\n const messages: OcSessionConsoleMessage_Interface[] = [];\n const toolResultMap = new Map<string, string>();\n\n // Gyűjtsük össze a toolCall id-ket sorrendben, hogy a toolResult-okat párosíthassuk\n const toolCallIds: string[] = [];\n for (const msg of history) {\n const rawContent: unknown = msg.content;\n if (!Array.isArray(rawContent)) {\n continue;\n }\n for (const block of rawContent as Record<string, unknown>[]) {\n const btype: string = typeof block.type === 'string' ? block.type : '';\n if (btype === 'tool_use' || btype === 'toolCall') {\n const toolId: string = typeof block.id === 'string' ? block.id : '';\n if (toolId) {\n toolCallIds.push(toolId);\n }\n }\n if (btype === 'tool_result') {\n const toolUseId: string = typeof block.tool_use_id === 'string'\n ? block.tool_use_id : '';\n if (toolUseId) {\n toolResultMap.set(toolUseId, this.extractTextFromContentBlock(block));\n }\n }\n }\n }\n\n // OpenClaw toolResult messages: role alapú párosítás az előző toolCall id-jével\n let toolCallIdIndex: number = 0;\n for (const msg of history) {\n const role: string = typeof msg.role === 'string' ? msg.role : '';\n if (role === 'toolResult' || role === 'tool_result') {\n const resultText: string = this.extractTextFromMessage(msg);\n if (toolCallIdIndex < toolCallIds.length) {\n toolResultMap.set(toolCallIds[toolCallIdIndex], resultText);\n toolCallIdIndex++;\n }\n }\n }\n\n // Második pass: üzenetek építése, tool_use + tool_result párosítva\n for (const msg of history) {\n const role: string = typeof msg.role === 'string' ? msg.role : 'unknown';\n const rawContent: unknown = msg.content;\n const timestamp: string = Openclaw_DataService.extractGatewayChatMessageTimestamp(msg);\n\n // toolResult role-ú üzenet: kihagyjuk (párosítva a toolCall-hoz)\n if (role === 'toolResult' || role === 'tool_result') {\n continue;\n }\n\n // String content → egyetlen üzenet\n if (typeof rawContent === 'string') {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: role === 'user' || role === 'human' ? 'prompt' : role === 'assistant' ? 'assistant' : 'info',\n text: rawContent,\n timestamp: timestamp,\n rawData: msg,\n });\n continue;\n }\n\n // Content blocks array → szétbontás típusonként\n if (Array.isArray(rawContent)) {\n for (const block of rawContent as Record<string, unknown>[]) {\n const blockType: string = typeof block.type === 'string' ? block.type : '';\n\n if (blockType === 'text') {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: role === 'user' || role === 'human' ? 'prompt' : 'assistant',\n text: typeof block.text === 'string' ? block.text : '',\n timestamp: timestamp,\n rawData: {\n _block: block,\n _message: {\n role: role,\n timestamp: timestamp,\n contentBlockCount: (rawContent as unknown[]).length,\n },\n },\n });\n } else if (blockType === 'tool_use' || blockType === 'toolCall') {\n const toolName: string = typeof block.name === 'string' ? block.name : 'unknown tool';\n const toolId: string = typeof block.id === 'string' ? block.id : '';\n const toolInput: unknown = block.input ?? block.arguments;\n const pairedResult: string | undefined = toolResultMap.get(toolId);\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'tool',\n text: `${toolName}\\n${JSON.stringify(toolInput, null, 2)}`,\n timestamp: timestamp,\n expandableContent: pairedResult,\n rawData: { _block: block, _pairedResultLength: pairedResult?.length ?? 0 },\n });\n } else if (blockType === 'tool_result') {\n const toolUseId: string = typeof block.tool_use_id === 'string'\n ? block.tool_use_id : '';\n const hasMatch: boolean = !!toolUseId && [...messages].some(\n (m: OcSessionConsoleMessage_Interface): boolean =>\n m.type === 'tool' && m.expandableContent === toolResultMap.get(toolUseId),\n );\n if (!hasMatch) {\n const resultContent: unknown = block.content;\n let resultText: string = '';\n if (typeof resultContent === 'string') {\n resultText = resultContent;\n } else if (Array.isArray(resultContent)) {\n resultText = (resultContent as Record<string, unknown>[])\n .map((rc: Record<string, unknown>): string =>\n typeof rc.text === 'string' ? rc.text : JSON.stringify(rc, null, 2),\n ).join('\\n');\n } else {\n resultText = JSON.stringify(block, null, 2);\n }\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'tool-result',\n text: resultText,\n timestamp: timestamp,\n rawData: { _block: block },\n });\n }\n } else if (blockType === 'thinking') {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'info',\n text: typeof block.thinking === 'string'\n ? block.thinking : JSON.stringify(block, null, 2),\n timestamp: timestamp,\n rawData: { _block: block },\n });\n } else {\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: 'info',\n text: JSON.stringify(block, null, 2),\n timestamp: timestamp,\n rawData: { _block: block },\n });\n }\n }\n continue;\n }\n\n // Egyéb: text/message mező vagy teljes msg JSON\n const fallbackContent: string = typeof msg.text === 'string'\n ? msg.text\n : typeof msg.message === 'string'\n ? msg.message\n : JSON.stringify(msg, null, 2);\n\n messages.push({\n listKey: this.allocateConsoleListKey(),\n type: role === 'user' || role === 'human' ? 'prompt'\n : role === 'assistant' ? 'assistant'\n : role === 'tool' || role === 'tool_result' || role === 'tool_use' ? 'tool' : 'info',\n text: fallbackContent,\n timestamp: timestamp,\n rawData: msg,\n });\n }\n\n return messages;\n }\n\n // ── Private: Socket Reconnect Backfill ──────────────────────\n\n /**\n * Socket reconnect utáni hiányzó event-ek pótlása.\n */\n private async backfillMissedEvents(): Promise<void> {\n const sessionId: string = this.activeSessionId_$();\n if (!sessionId || this.lastKnownEventSequence < 0) {\n return;\n }\n\n try {\n const response = await this.ocSession_AS.getSessionEvents({\n sessionId: sessionId,\n sinceSequence: this.lastKnownEventSequence,\n });\n\n const newEvents: Oc_EventItem_Interface[] = response.events;\n\n if (!newEvents.length) {\n return;\n }\n\n this.ngZone.run((): void => {\n const currentEvents: Oc_EventItem_Interface[] =\n this.selectedSessionEvents_$();\n this.selectedSessionEvents_$.set([...currentEvents, ...newEvents]);\n\n for (const event of newEvents) {\n this.pushConsoleMessageFromEvent(event);\n }\n\n this.updateLastKnownSequence(newEvents);\n });\n } catch (err: unknown) {\n DyFM_Log.warn('CCAP_OcSession_DS | backfill failed', err);\n }\n }\n\n /**\n * LastKnownEventSequence frissítése az event lista legmagasabb sequence-éből.\n */\n private updateLastKnownSequence(events: Oc_EventItem_Interface[]): void {\n for (const event of events) {\n if (event.sequence > this.lastKnownEventSequence) {\n this.lastKnownEventSequence = event.sequence;\n }\n }\n }\n\n // ── Private: Socket event handling ──────────────────────────\n\n /**\n * Socket.io event feldolgozása.\n * oc-session:* event-ekre reagál.\n */\n private handleSocketEvent(envelope: {\n event: string;\n payload: Record<string, unknown>;\n }): void {\n const eventName: string = envelope.event;\n const payload: Record<string, unknown> = envelope.payload;\n\n try {\n this.ngZone.run((): void => {\n switch (eventName) {\n case 'oc-session:status':\n this.handleStatusUpdate(payload);\n break;\n case 'oc-session:output':\n this.handleOutputChunk(payload);\n break;\n case 'oc-session:event':\n this.handleSessionEvent(payload);\n break;\n case 'oc-session:list-update':\n this.handleListUpdate(payload);\n break;\n case 'ext-session-msg:message':\n this.handleAssembledMessage(payload);\n break;\n case 'ext-session-msg:update':\n this.handleAssembledMessageUpdate(payload);\n break;\n }\n });\n } catch (err: unknown) {\n DyFM_Log.error(`CCAP_OcSession_DS | socket event error | event: ${eventName}`, err);\n }\n }\n\n /**\n * Status update feldolgozása.\n */\n private handleStatusUpdate(payload: Record<string, unknown>): void {\n const sessionId: string = (payload.sessionId as string) ?? '';\n const status: string = (payload.status as string) ?? '';\n const statusMessage: string | undefined = payload.statusMessage as string | undefined;\n\n this.lastStatusUpdate_$.set({\n sessionId: sessionId,\n status: status,\n statusMessage: statusMessage,\n });\n\n // Session lista frissítése\n const currentSessions: Oc_ListItem_Interface[] = this.sessions_$();\n const updated: Oc_ListItem_Interface[] = currentSessions.map(\n (s: Oc_ListItem_Interface): Oc_ListItem_Interface => {\n if (s.sessionId === sessionId) {\n return { ...s, status: status, statusMessage: statusMessage };\n }\n return s;\n },\n );\n this.sessions_$.set(updated);\n\n // Kiválasztott session detail frissítése\n const currentDetail: Oc_Detail_Response | null =\n this.selectedSession_$();\n if (currentDetail?.session.sessionId === sessionId) {\n const isLive: boolean = status === 'running' || status === 'waiting-input';\n this.selectedSession_$.set({\n ...currentDetail,\n session: {\n ...currentDetail.session,\n status: status,\n statusMessage: statusMessage,\n },\n runtime: {\n ...currentDetail.runtime,\n isLive: isLive,\n runtimeStatus: status,\n },\n });\n }\n\n // Errored státusz → globális error kezelés\n if (status === 'errored') {\n const errorMessage: string = statusMessage\n ? `OC Session error (${sessionId}): ${statusMessage}`\n : `OC Session error (${sessionId}): session entered errored state`;\n this.globalError_CS.showError(\n new Error(errorMessage),\n 'oc-session-status',\n );\n }\n }\n\n /**\n * Output chunk feldolgozása (live console-hoz).\n * Csak az aktív session output-ját fogadjuk.\n */\n private handleOutputChunk(payload: Record<string, unknown>): void {\n const sessionId: string = (payload.sessionId as string) ?? '';\n\n if (sessionId && sessionId !== this.activeSessionId_$()) {\n return;\n }\n\n const content: string = (payload.content as string) ?? '';\n const outputType: string = (payload.type as string) ?? 'response';\n\n if (content) {\n this.pushConsoleMessage({\n type: outputType === 'error' ? 'error' : 'assistant',\n text: content,\n });\n }\n }\n\n /**\n * Session event feldolgozása (timeline-hoz + console-hoz).\n */\n private handleSessionEvent(payload: Record<string, unknown>): void {\n const sessionId: string = (payload.sessionId as string) ?? '';\n\n if (sessionId && sessionId !== this.activeSessionId_$()) {\n return;\n }\n\n const event: Record<string, unknown> =\n (payload.event as Record<string, unknown>) ?? {};\n\n const eventItem: Oc_EventItem_Interface = {\n sessionId: sessionId,\n eventType: (event.eventType as string) ?? '',\n timestamp: (event.timestamp as string) ?? '',\n data: (event.data as Record<string, unknown>) ?? {},\n sequence: (event.sequence as number) ?? 0,\n };\n\n // Duplikáció védelem\n if (eventItem.sequence <= this.lastKnownEventSequence) {\n return;\n }\n\n this.lastKnownEventSequence = eventItem.sequence;\n\n // Timeline-ba hozzáadás\n const currentEvents: Oc_EventItem_Interface[] =\n this.selectedSessionEvents_$();\n this.selectedSessionEvents_$.set([...currentEvents, eventItem]);\n\n // Console-ba: parsolt event-ekből olvasható üzenetek\n this.pushConsoleMessageFromEvent(eventItem);\n }\n\n /**\n * Session lista frissítése (broadcast: session létrehozás / state change).\n */\n private handleListUpdate(_payload: Record<string, unknown>): void {\n // Lista újratöltése (nem blokkoló, hibatoleráns)\n this.loadSessions().catch((): void => {});\n }\n\n /**\n * Parsolt session event-ből olvasható console message generálás.\n */\n /**\n * Szöveg kinyerése egy content block-ból (tool_result, text, stb.).\n */\n private extractTextFromContentBlock(block: Record<string, unknown>): string {\n const resultContent: unknown = block.content;\n if (typeof resultContent === 'string') {\n return resultContent;\n }\n if (Array.isArray(resultContent)) {\n return (resultContent as Record<string, unknown>[])\n .map((rc: Record<string, unknown>): string =>\n typeof rc.text === 'string' ? rc.text : JSON.stringify(rc, null, 2),\n ).join('\\n');\n }\n if (typeof block.text === 'string') {\n return block.text;\n }\n return JSON.stringify(block, null, 2);\n }\n\n /**\n * Szöveg kinyerése egy top-level message-ből (content: string | array).\n */\n private extractTextFromMessage(msg: Record<string, unknown>): string {\n const rawContent: unknown = msg.content;\n if (typeof rawContent === 'string') {\n return rawContent;\n }\n if (Array.isArray(rawContent)) {\n return (rawContent as Record<string, unknown>[])\n .map((block: Record<string, unknown>): string => {\n if (typeof block.text === 'string') {\n return block.text;\n }\n return JSON.stringify(block, null, 2);\n }).join('\\n');\n }\n return JSON.stringify(msg, null, 2);\n }\n\n private pushConsoleMessageFromEvent(event: Oc_EventItem_Interface): void {\n const data: Record<string, unknown> = event.data;\n\n switch (event.eventType) {\n case 'response-chunk': {\n const content: string = typeof data.content === 'string' ? data.content : '';\n if (content) {\n this.pushConsoleMessage({ type: 'assistant', text: content });\n }\n break;\n }\n\n case 'response-complete': {\n // Usage update a tokenek összesítéséhez\n const usage: unknown = data.usage;\n if (usage && typeof usage === 'object') {\n const usageObj: Record<string, unknown> = usage as Record<string, unknown>;\n const current: OcSessionUsage_Interface = this.sessionUsage_$();\n this.sessionUsage_$.set({\n inputTokens: current.inputTokens + (typeof usageObj.inputTokens === 'number' ? usageObj.inputTokens : 0),\n outputTokens: current.outputTokens + (typeof usageObj.outputTokens === 'number' ? usageObj.outputTokens : 0),\n costUsd: current.costUsd + (typeof usageObj.costUsd === 'number' ? usageObj.costUsd : 0),\n });\n }\n break;\n }\n\n case 'tool-call-start': {\n const toolName: string = typeof data.name === 'string' ? data.name : 'unknown';\n const toolInput: unknown = data.input;\n const inputSummary: string = toolInput ? this.summarizeToolInput(toolInput) : '';\n const toolText: string = inputSummary ? `${toolName}: ${inputSummary}` : toolName;\n this.pushConsoleMessage({\n type: 'tool',\n text: toolText,\n rawData: data,\n });\n break;\n }\n\n case 'tool-call-end': {\n const content: unknown = data.content ?? data.output;\n const text: string = typeof content === 'string' ? content : JSON.stringify(content ?? {});\n this.pushConsoleMessage({\n type: 'tool-result',\n text: text.length > 200 ? text.substring(0, 200) + '…' : text,\n expandableContent: text.length > 200 ? text : undefined,\n rawData: data,\n });\n break;\n }\n\n case 'error': {\n const message: unknown = data.message ?? data.content;\n if (typeof message === 'string' && message) {\n this.pushConsoleMessage({ type: 'error', text: message });\n }\n break;\n }\n\n case 'connection-change': {\n const connectionState: string = typeof data.state === 'string' ? data.state : '';\n if (connectionState) {\n this.pushConsoleMessage({\n type: 'info',\n text: `Gateway connection: ${connectionState}`,\n rawData: data,\n });\n }\n break;\n }\n\n default:\n break;\n }\n }\n\n /**\n * Tool input rövid összefoglaló (console megjelenítéshez).\n */\n private summarizeToolInput(input: unknown): string {\n if (typeof input === 'string') {\n return input.length > 80 ? input.substring(0, 80) + '…' : input;\n }\n if (typeof input === 'object' && input !== null) {\n const json: string = JSON.stringify(input);\n return json.length > 80 ? json.substring(0, 80) + '…' : json;\n }\n return '';\n }\n\n // ── Private Static: Gateway field mapping helpers ──────────\n\n /**\n * Egy gateway history elem ideje — nincs parse-pillanat fallback; üres ha nincs ismert mező.\n */\n private static extractGatewayChatMessageTimestamp(raw: Record<string, unknown>): string {\n const iso: string | undefined = CCAP_OcGatewayTimestamp_Util.extractTimestamp(\n raw,\n CCAP_OcGatewayTimestamp_Util.GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES,\n );\n return iso ?? '';\n }\n\n // ── Assembled messages (SSOT) ──────────────────────────────\n\n /**\n * Assembled message-ek betöltése REST-en (latest tail).\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001: a `hasMore` válasz-mezőt a\n * `assembledMessagesHasMore_$` signal-ben tükrözzük, a backward-prepend\n * scroll-up trigger ezt használja.\n */\n async loadAssembledMessages(params: {\n sessionId: string;\n }): Promise<void> {\n try {\n const result = await this.extSessionMsg_AS.getMessages({\n sessionId: params.sessionId,\n latest: true,\n });\n this.assembledMessages_$.set(result.messages);\n this.assembledMessagesHasMore_$.set(result.hasMore === true);\n } catch (err: unknown) {\n DyFM_Log.error(\n `CCAP_OcSession_DS | loadAssembledMessages failed`\n + ` | sessionId: ${params.sessionId}`,\n err,\n );\n }\n }\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 — régebbi assembled message-ek\n * betöltése (backward pagination). A jelenlegi messages tömb legkisebb\n * `sequence`-ét használja `beforeSequence` cursor-ként; a result a meglévő\n * lista ELÉ kerül (prepend). Race-guard: no-op ha `isLoadingOlderMessages_$`\n * vagy `!assembledMessagesHasMore_$`.\n */\n async loadOlderAssembledMessages(params: {\n sessionId: string;\n limit?: number;\n }): Promise<void> {\n if (this.isLoadingOlderMessages_$() || !this.assembledMessagesHasMore_$()) {\n return;\n }\n const current: CCAP_ExtSessionMessage_Response[] = this.assembledMessages_$();\n if (!current.length) {\n return;\n }\n const minSequence: number = current.reduce(\n (min: number, m: CCAP_ExtSessionMessage_Response): number =>\n (m.sequence ?? 0) < min ? (m.sequence ?? 0) : min,\n current[0].sequence ?? 0,\n );\n\n this.isLoadingOlderMessages_$.set(true);\n try {\n const result = await this.extSessionMsg_AS.getMessages({\n sessionId: params.sessionId,\n beforeSequence: minSequence,\n limit: params.limit ?? 50,\n });\n if (result.messages.length) {\n this.assembledMessages_$.set([...result.messages, ...current]);\n }\n this.assembledMessagesHasMore_$.set(result.hasMore === true);\n } catch (err: unknown) {\n DyFM_Log.error(\n `CCAP_OcSession_DS | loadOlderAssembledMessages failed`\n + ` | sessionId: ${params.sessionId}`,\n err,\n );\n } finally {\n this.isLoadingOlderMessages_$.set(false);\n }\n }\n\n /** Új assembled message socket-en. */\n private handleAssembledMessage(\n payload: Record<string, unknown>,\n ): void {\n const sessionId: string =\n typeof payload.sessionId === 'string'\n ? payload.sessionId\n : '';\n if (!sessionId || sessionId !== this.activeSessionId_$()) {\n return;\n }\n const msgData: unknown = payload.message;\n if (!msgData || typeof msgData !== 'object') {\n return;\n }\n const msg: CCAP_ExtSessionMessage_Response =\n msgData as CCAP_ExtSessionMessage_Response;\n const current: CCAP_ExtSessionMessage_Response[] =\n this.assembledMessages_$();\n this.assembledMessages_$.set([...current, msg]);\n }\n\n /** Assembled message frissítés socket-en. */\n private handleAssembledMessageUpdate(\n payload: Record<string, unknown>,\n ): void {\n const sessionId: string =\n typeof payload.sessionId === 'string'\n ? payload.sessionId\n : '';\n if (!sessionId || sessionId !== this.activeSessionId_$()) {\n return;\n }\n const messageKey: string =\n typeof payload.messageKey === 'string'\n ? payload.messageKey\n : '';\n if (!messageKey) {\n return;\n }\n const updateData: unknown = payload.update;\n if (!updateData || typeof updateData !== 'object') {\n return;\n }\n const updateRec: Record<string, unknown> =\n updateData as Record<string, unknown>;\n const current: CCAP_ExtSessionMessage_Response[] =\n this.assembledMessages_$();\n const idx: number = current.findIndex(\n (m: CCAP_ExtSessionMessage_Response): boolean =>\n m.messageKey === messageKey,\n );\n if (idx < 0) {\n return;\n }\n const updated: CCAP_ExtSessionMessage_Response = {\n ...current[idx],\n };\n if (typeof updateRec.bodyText === 'string') {\n updated.bodyText = updateRec.bodyText;\n }\n if (updateRec.toolResult !== undefined) {\n updated.toolResult =\n updateRec.toolResult as CCAP_ExtSessionMessage_Response['toolResult'];\n }\n if (typeof updateRec.toolStatus === 'string') {\n updated.toolStatus = updateRec.toolStatus;\n }\n if (updateRec.headerStatusDot !== undefined) {\n updated.headerStatusDot =\n typeof updateRec.headerStatusDot === 'string'\n ? updateRec.headerStatusDot\n : undefined;\n }\n const next: CCAP_ExtSessionMessage_Response[] = [...current];\n next[idx] = updated;\n this.assembledMessages_$.set(next);\n }\n}\n", "/**\n * Gateway RPC objektumok timestamp kinyerése — közös OC Session lista és Dark Office OCI mapping SSOT.\n */\nexport class CCAP_OcGatewayTimestamp_Util {\n\n /**\n * Gateway chatHistory üzenet timestamp mező prioritás — session lista / Dark Office mapping-gel összhangban.\n * Az `extractTimestamp` string (ISO) és pozitív szám (epoch s/ms) értéket is kezel.\n */\n static readonly GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES: string[] = [\n 'timestamp',\n 'createdAt',\n 'updatedAt',\n 'ts',\n 'time',\n 'sentAt',\n 'messageTimestamp',\n 'created_at',\n 'updated_at',\n 'lastMessageAt',\n 'last_message_at',\n 'startedAt',\n 'started_at',\n 'lastActivityAt',\n 'last_activity_at',\n ];\n\n /**\n * Session lista `lastActivityAt` — több gateway mezőnév, lifecycle és üzenet idő együtt.\n */\n static readonly GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES: string[] = [\n 'lastActivityAt',\n 'updatedAt',\n 'lastMessageAt',\n 'updated_at',\n 'last_activity_at',\n 'last_message_at',\n 'startedAt',\n 'started_at',\n 'createdAt',\n 'created_at',\n ];\n\n /** Session lista `startedAt` fallback lánc. */\n static readonly GATEWAY_SESSION_STARTED_FIELD_NAMES: string[] = [\n 'startedAt',\n 'started_at',\n 'createdAt',\n 'created_at',\n ];\n\n /**\n * Csak üzenet/output időbélyegek — Dark Office workstation `working` ablak (lifecycle nélkül).\n */\n static readonly GATEWAY_OUTPUT_ONLY_TIMESTAMP_FIELD_NAMES: string[] = [\n 'lastMessageAt',\n 'last_message_at',\n 'lastOutputAt',\n 'last_output_at',\n ];\n\n /**\n * Timestamp kinyerése raw gateway objektumból — több mező nevet és típust is kezel.\n * String (ISO) és szám (epoch ms) típusú értékeket fogad; prioritás a felsorolás sorrendje.\n */\n static extractTimestamp(\n raw: Record<string, unknown>,\n fieldNames: string[],\n ): string | undefined {\n for (const field of fieldNames) {\n const value: unknown = raw[field];\n if (typeof value === 'string' && value) {\n return value;\n }\n if (typeof value === 'number' && value > 0) {\n // Epoch másodperc vs. milliszekundum heurisztika (2001-09-09 előtti epoch ms nem fordul elő)\n const ms: number = value < 1e12 ? value * 1000 : value;\n return new Date(ms).toISOString();\n }\n }\n return undefined;\n }\n}\n", "import {\n Oc_GatewaySessionsFetch_Interface,\n Oc_ListItem_Interface,\n} from '../../_modules/external-sessions/_modules/openclaw/_models/interfaces/oc-list-item.interface';\nimport { CCAP_OcGatewayTimestamp_Util } from './ccap-oc-gateway-timestamp.util';\n\n/**\n * OpenClaw gateway `sessions.list` válasz → normalizált OC session lista elemek (mapper SSOT).\n */\nexport class CCAP_OcGatewaySessionList_Util {\n\n /**\n * API válasz feldolgozása: lista map + lastActivity rendezés + nyers tömb megőrzése.\n */\n static buildGatewaySessionsFetch(params: {\n response: {\n sessions: Record<string, unknown>[];\n source: string;\n instanceId: string;\n gatewayUrl: string;\n /** Opcionális diagnosztika — szerver/gateway válasz kiterjesztése. */\n _firstSessionKeys?: string[];\n };\n }): Oc_GatewaySessionsFetch_Interface {\n const optionalKeys: string[] | undefined = params.response._firstSessionKeys;\n const firstSessionKeys: string[] = Array.isArray(optionalKeys) ? optionalKeys : [];\n\n const rawSessions: Record<string, unknown>[] = Array.isArray(params.response.sessions)\n ? params.response.sessions\n : [];\n\n const listItems: Oc_ListItem_Interface[] = rawSessions.map(\n (raw: Record<string, unknown>): Oc_ListItem_Interface =>\n CCAP_OcGatewaySessionList_Util.mapRawSessionToListItem({\n raw: raw,\n gatewayUrl: params.response.gatewayUrl,\n }),\n );\n\n const sorted: Oc_ListItem_Interface[] =\n CCAP_OcGatewaySessionList_Util.sortListItemsByLastActivityDesc({ items: listItems });\n\n return {\n listItems: sorted,\n rawSessions: rawSessions,\n gatewayUrl: params.response.gatewayUrl,\n source: params.response.source,\n instanceId: params.response.instanceId,\n firstSessionKeys: firstSessionKeys,\n };\n }\n\n /**\n * Egy nyers gateway session sor → lista elem.\n */\n private static mapRawSessionToListItem(params: {\n raw: Record<string, unknown>;\n gatewayUrl: string;\n }): Oc_ListItem_Interface {\n const raw: Record<string, unknown> = params.raw;\n return {\n sessionId: typeof raw['key'] === 'string'\n ? raw['key']\n : typeof raw['sessionId'] === 'string'\n ? raw['sessionId']\n : typeof raw['id'] === 'string'\n ? raw['id']\n : String(raw['key'] ?? raw['sessionId'] ?? raw['id'] ?? ''),\n label: typeof raw['label'] === 'string'\n ? raw['label']\n : typeof raw['name'] === 'string'\n ? raw['name']\n : typeof raw['title'] === 'string' ? raw['title'] : undefined,\n workspacePath: typeof raw['workspacePath'] === 'string'\n ? raw['workspacePath']\n : typeof raw['cwd'] === 'string' ? raw['cwd'] : '',\n status: typeof raw['status'] === 'string' ? raw['status'] : 'unknown',\n statusMessage: typeof raw['statusMessage'] === 'string' ? raw['statusMessage'] : undefined,\n gatewayUrl: params.gatewayUrl,\n openclawAgentName: typeof raw['agentName'] === 'string'\n ? raw['agentName']\n : typeof raw['agent'] === 'string' ? raw['agent'] : undefined,\n promptCount: typeof raw['promptCount'] === 'number'\n ? raw['promptCount']\n : typeof raw['messageCount'] === 'number' ? raw['messageCount'] : 0,\n toolCallCount: typeof raw['toolCallCount'] === 'number' ? raw['toolCallCount'] : 0,\n lastActivityAt: CCAP_OcGatewayTimestamp_Util.extractTimestamp(\n raw,\n CCAP_OcGatewayTimestamp_Util.GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES,\n ),\n startedAt: CCAP_OcGatewayTimestamp_Util.extractTimestamp(\n raw,\n CCAP_OcGatewayTimestamp_Util.GATEWAY_SESSION_STARTED_FIELD_NAMES,\n ),\n lastPrompt: typeof raw['lastPrompt'] === 'string' ? raw['lastPrompt'] : undefined,\n mode: typeof raw['mode'] === 'string' ? raw['mode'] : undefined,\n reasoningEffort: typeof raw['reasoningEffort'] === 'string'\n ? raw['reasoningEffort']\n : typeof raw['thinking'] === 'string' ? raw['thinking'] : undefined,\n isArchived: typeof raw['isArchived'] === 'boolean' ? raw['isArchived'] : false,\n };\n }\n\n /**\n * Legfrissebb `lastActivityAt` felül (gateway lista megjelenítés).\n */\n private static sortListItemsByLastActivityDesc(params: {\n items: Oc_ListItem_Interface[];\n }): Oc_ListItem_Interface[] {\n return [...params.items].sort(\n (a: Oc_ListItem_Interface, b: Oc_ListItem_Interface): number => {\n const dateA: number = a.lastActivityAt ? new Date(a.lastActivityAt).getTime() : 0;\n const dateB: number = b.lastActivityAt ? new Date(b.lastActivityAt).getTime() : 0;\n return dateB - dateA;\n },\n );\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { environment } from '../../../../../../environments/environment';\nimport {\n Oc_List_Response,\n Oc_Detail_Response,\n Oc_Event_Response,\n} from '../_models/interfaces/oc-list-item.interface';\nimport { ExS_InstanceContext_DataService } from '../../../_services/exs-instance-context.data-service';\n\n/**\n * OpenClaw Session Toolkit API service.\n * REST API hívások a session lifecycle kezeléséhez és monitorozáshoz.\n * Minden hívás `?ccapId=<current>` paramot küld — a ccapId forrása\n * az instance-szelektor (`ExS_InstanceContext_DataService.activeCcapId_$`).\n */\n@Injectable({ providedIn: 'root' })\nexport class Openclaw_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/oc-session`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * ccapId hozzáfűzése egy meglévő HttpParams-hoz.\n */\n private withCcapId(params: HttpParams): HttpParams {\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n if (!ccapId) {\n return params;\n }\n return params.set('ccapId', ccapId);\n }\n\n /**\n * Új session létrehozása.\n */\n createSession(params: {\n workspacePath: string;\n label?: string;\n gatewayUrl?: string;\n openclawAgentName?: string;\n initialPrompt?: string;\n actorId?: string;\n actorLabel?: string;\n mode?: string;\n reasoningEffort?: string;\n }): Promise<{ session: Record<string, unknown> }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ session: Record<string, unknown> }>(\n this.baseUrl,\n params,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session lista lekérdezése.\n */\n listSessions(params?: {\n status?: string;\n workspacePath?: string;\n gatewayUrl?: string;\n includeArchived?: boolean;\n limit?: number;\n offset?: number;\n }): Promise<Oc_List_Response> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n\n if (params?.status) {\n httpParams = httpParams.set('status', params.status);\n }\n if (params?.workspacePath) {\n httpParams = httpParams.set('workspacePath', params.workspacePath);\n }\n if (params?.gatewayUrl) {\n httpParams = httpParams.set('gatewayUrl', params.gatewayUrl);\n }\n if (params?.includeArchived) {\n httpParams = httpParams.set('includeArchived', '1');\n }\n if (params?.limit != null) {\n httpParams = httpParams.set('limit', String(params.limit));\n }\n if (params?.offset != null) {\n httpParams = httpParams.set('offset', String(params.offset));\n }\n\n return firstValueFrom(\n this.http.get<Oc_List_Response>(\n this.baseUrl,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session lista lekérdezése közvetlenül a gateway-ről (SSOT).\n * A szerver a sessions_list RPC-t hívja a megadott instance gateway-jén.\n */\n listGatewaySessions(params: {\n instanceId: string;\n }): Promise<{ sessions: Record<string, unknown>[]; source: string; instanceId: string; gatewayUrl: string }> {\n const httpParams: HttpParams = new HttpParams()\n .set('instanceId', params.instanceId);\n\n return firstValueFrom(\n this.http.get<{ sessions: Record<string, unknown>[]; source: string; instanceId: string; gatewayUrl: string }>(\n `${this.baseUrl}/gateway-sessions`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session history lekérdezése közvetlenül a gateway-ről (SSOT).\n */\n getGatewaySessionHistory(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<{ sessionId: string; history: Record<string, unknown>[]; source: string }> {\n const httpParams: HttpParams = new HttpParams()\n .set('instanceId', params.instanceId);\n return firstValueFrom(\n this.http.get<{ sessionId: string; history: Record<string, unknown>[]; source: string }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}/history`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Prompt küldése a gateway-re (SSOT).\n */\n sendGatewayPrompt(params: {\n sessionId: string;\n instanceId: string;\n content: string;\n agentName?: string;\n }): Promise<{ success: boolean; result: Record<string, unknown>; source: string }> {\n return firstValueFrom(\n this.http.post<{ success: boolean; result: Record<string, unknown>; source: string }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}/send`,\n {\n instanceId: params.instanceId,\n content: params.content,\n agentName: params.agentName,\n },\n ),\n );\n }\n\n /**\n * Session megszakítás a gateway-en (SSOT).\n */\n abortGatewaySession(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<{ success: boolean }> {\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}/abort`,\n { instanceId: params.instanceId },\n ),\n );\n }\n\n /**\n * Session törlése a gateway-en (SSOT).\n */\n deleteGatewaySession(params: {\n sessionId: string;\n instanceId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = new HttpParams()\n .set('instanceId', params.instanceId);\n return firstValueFrom(\n this.http.delete<{ success: boolean }>(\n `${this.baseUrl}/gateway-sessions/${params.sessionId}`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session részletek lekérdezése.\n */\n getSession(params: {\n sessionId: string;\n }): Promise<Oc_Detail_Response> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.get<Oc_Detail_Response>(\n `${this.baseUrl}/${params.sessionId}`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Prompt küldése egy session-nek.\n */\n sendPrompt(params: {\n sessionId: string;\n content: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/prompt`,\n { content: params.content },\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session újracsatlakoztatás (gateway reconnect).\n */\n reconnectSession(params: {\n sessionId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/reconnect`,\n {},\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Futó execution leállítása (gateway sessions.abort RPC).\n */\n stopExecution(params: {\n sessionId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/stop-execution`,\n {},\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session leállítása (terminate).\n */\n terminateSession(params: {\n sessionId: string;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/terminate`,\n {},\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session config frissítése (mode, effort, agentName).\n */\n updateSessionConfig(params: {\n sessionId: string;\n mode?: string;\n reasoningEffort?: string;\n openclawAgentName?: string;\n }): Promise<{ success: boolean }> {\n const { sessionId, ...body } = params;\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.patch<{ success: boolean }>(\n `${this.baseUrl}/${sessionId}/config`,\n body,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session archiválás állapot beállítása.\n */\n setSessionArchived(params: {\n sessionId: string;\n isArchived: boolean;\n }): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.patch<{ success: boolean }>(\n `${this.baseUrl}/${params.sessionId}/archive`,\n { isArchived: params.isArchived },\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session event log lekérdezése.\n */\n getSessionEvents(params: {\n sessionId: string;\n eventType?: string;\n since?: string;\n sinceSequence?: number;\n limit?: number;\n offset?: number;\n latest?: boolean;\n }): Promise<Oc_Event_Response> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n\n if (params.eventType) {\n httpParams = httpParams.set('eventType', params.eventType);\n }\n if (params.since) {\n httpParams = httpParams.set('since', params.since);\n }\n if (params.sinceSequence != null) {\n httpParams = httpParams.set('sinceSequence', String(params.sinceSequence));\n }\n if (params.limit != null) {\n httpParams = httpParams.set('limit', String(params.limit));\n }\n if (params.offset != null) {\n httpParams = httpParams.set('offset', String(params.offset));\n }\n if (params.latest) {\n httpParams = httpParams.set('latest', '1');\n }\n\n return firstValueFrom(\n this.http.get<Oc_Event_Response>(\n `${this.baseUrl}/${params.sessionId}/events`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * SSE event stream URL generálása (EventSource-hoz).\n */\n getSessionEventStreamUrl(params: { sessionId: string }): string {\n const baseStreamUrl: string = `${this.baseUrl}/${params.sessionId}/events/stream`;\n const ccapId: string = this.peiContext_DS.activeCcapId_$();\n if (!ccapId) {\n return baseStreamUrl;\n }\n return `${baseStreamUrl}?ccapId=${encodeURIComponent(ccapId)}`;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_fsm_dynamo", "CCAP_OcGatewayTimestamp_Util", "GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES", "GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES", "GATEWAY_SESSION_STARTED_FIELD_NAMES", "GATEWAY_OUTPUT_ONLY_TIMESTAMP_FIELD_NAMES", "extractTimestamp", "raw", "fieldNames", "field", "value", "ms", "Date", "toISOString", "CCAP_OcGatewaySessionList_Util", "buildGatewaySessionsFetch", "params", "optionalKeys", "response", "_firstSessionKeys", "firstSessionKeys", "Array", "isArray", "rawSessions", "sessions", "listItems", "map", "raw", "mapRawSessionToListItem", "gatewayUrl", "sortListItemsByLastActivityDesc", "items", "source", "instanceId", "sessionId", "String", "label", "undefined", "workspacePath", "status", "statusMessage", "openclawAgentName", "promptCount", "toolCallCount", "lastActivityAt", "CCAP_OcGatewayTimestamp_Util", "extractTimestamp", "GATEWAY_SESSION_LAST_ACTIVITY_FIELD_NAMES", "startedAt", "GATEWAY_SESSION_STARTED_FIELD_NAMES", "lastPrompt", "mode", "reasoningEffort", "isArchived", "sort", "a", "b", "dateA", "Date", "getTime", "Openclaw_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "peiContext_DS", "ExS_InstanceContext_DataService", "withCcapId", "params", "ccapId", "activeCcapId_$", "set", "createSession", "httpParams", "HttpParams", "firstValueFrom", "post", "listSessions", "status", "workspacePath", "gatewayUrl", "includeArchived", "limit", "String", "offset", "get", "listGatewaySessions", "instanceId", "getGatewaySessionHistory", "sessionId", "sendGatewayPrompt", "content", "agentName", "abortGatewaySession", "deleteGatewaySession", "delete", "getSession", "sendPrompt", "reconnectSession", "stopExecution", "terminateSession", "updateSessionConfig", "body", "patch", "setSessionArchived", "isArchived", "getSessionEvents", "eventType", "since", "sinceSequence", "latest", "getSessionEventStreamUrl", "baseStreamUrl", "encodeURIComponent", "factory", "\u0275fac", "providedIn", "Openclaw_DataService", "sessions_$", "signal", "sessionsLoading_$", "sessionsLoadError_$", "selectedSession_$", "selectedSessionLoading_$", "selectedSessionEvents_$", "consoleMessages_$", "assembledMessages_$", "assembledMessagesHasMore_$", "isLoadingOlderMessages_$", "lastStatusUpdate_$", "sessionUsage_$", "inputTokens", "outputTokens", "costUsd", "activeSessionId_$", "activeInstanceId_$", "gatewayFilter_$", "extSessionMsg_AS", "inject", "ExS_Message_ApiService", "ocSession_AS", "Openclaw_ApiService", "globalError_CS", "CCAP_GlobalError_ControlService", "socket_CS", "CCAP_Socket_ControlService", "ngZone", "NgZone", "eventSubscription", "reconnectSubscription", "lastKnownEventSequence", "chatPollHandle", "detailPollHandle", "lastPolledHistoryFingerprint", "constructor", "event$", "subscribe", "envelope", "handleSocketEvent", "connected$", "isConnected", "activeId", "emit", "sessionId", "loadAssembledMessages", "catch", "backfillMissedEvents", "ngOnDestroy", "stopChatPolling", "unsubscribe", "setGatewayFilter", "gatewayUrl", "set", "loadSessions", "setGatewayFilterOnly", "params", "__async", "sorted", "listSessions", "status", "workspacePath", "undefined", "includeArchived", "sessions", "sort", "a", "b", "dateA", "lastActivityAt", "Date", "getTime", "err", "pushConsoleMessage", "type", "text", "CCAP_ErrorDisplay_Util", "getErrorMessageForDisplay", "fetchGatewaySessionsForInstance", "response", "listGatewaySessions", "instanceId", "CCAP_OcGatewaySessionList_Util", "buildGatewaySessionsFetch", "loadGatewaySessions", "fetchResult", "listItems", "length", "rawSessions", "firstSessionKeys", "join", "loadSessionDetail", "isSilent", "getSession", "errorMessage", "Error", "message", "loadGatewaySessionHistory", "getGatewaySessionHistory", "rawResponse", "rawKeys", "Array", "isArray", "_rawKeys", "history", "messages", "parseGatewayHistory", "gatewayMessageCount", "messageCount", "firstMessageKeys", "_firstMessageKeys", "listKey", "allocateConsoleListKey", "timestamp", "toISOString", "session", "promptCount", "toolCallCount", "isArchived", "runtime", "isLive", "runtimeStatus", "outputBufferLength", "computeGatewayHistoryFingerprint", "startChatPolling", "loadSessionEvents", "getSessionEvents", "eventType", "limit", "latest", "events", "updateLastKnownSequence", "event", "pushConsoleMessageFromEvent", "createSession", "result", "String", "sendPrompt", "content", "sendGatewayPrompt", "reconnectSession", "stopExecution", "terminateSession", "setSessionArchived", "updateSessionConfig", "currentDetail", "updatedSession", "__spreadValues", "mode", "reasoningEffort", "openclawAgentName", "__spreadProps", "setActiveSessionId", "previousId", "clearLiveOutput", "globalThis", "crypto", "randomUUID", "trimmedText", "trim", "expandableContent", "rawData", "current", "CHAT_POLL_INTERVAL_MS", "second", "DETAIL_POLL_INTERVAL_MS", "setInterval", "pollChatHistory", "sid", "clearInterval", "last", "idPart", "id", "messageId", "tsPart", "extractGatewayChatMessageTimestamp", "body", "extractTextFromMessage", "sliceMax", "contentSlice", "slice", "fingerprint", "run", "toolResultMap", "Map", "toolCallIds", "msg", "rawContent", "block", "btype", "toolId", "push", "toolUseId", "tool_use_id", "extractTextFromContentBlock", "toolCallIdIndex", "role", "resultText", "blockType", "_block", "_message", "contentBlockCount", "toolName", "name", "toolInput", "input", "arguments", "pairedResult", "get", "JSON", "stringify", "_pairedResultLength", "some", "m", "resultContent", "map", "rc", "thinking", "fallbackContent", "newEvents", "sinceSequence", "currentEvents", "DyFM_Log", "warn", "sequence", "eventName", "payload", "handleStatusUpdate", "handleOutputChunk", "handleSessionEvent", "handleListUpdate", "handleAssembledMessage", "handleAssembledMessageUpdate", "error", "statusMessage", "updated", "s", "showError", "outputType", "eventItem", "data", "_payload", "usage", "usageObj", "inputSummary", "summarizeToolInput", "toolText", "output", "substring", "connectionState", "state", "json", "raw", "CCAP_OcGatewayTimestamp_Util", "extractTimestamp", "GATEWAY_CHAT_MESSAGE_TIMESTAMP_FIELD_NAMES", "getMessages", "hasMore", "loadOlderAssembledMessages", "minSequence", "reduce", "min", "beforeSequence", "msgData", "messageKey", "updateData", "update", "updateRec", "idx", "findIndex", "bodyText", "toolResult", "toolStatus", "headerStatusDot", "next", "factory", "\u0275fac", "providedIn"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{j as s}from"./chunk-2VC36Y3F.js";var r="ccap-personaSoulDraft";function p(){try{let o=localStorage.getItem(r);if(!o)return null;let n=s.tryParseStrict({text:o,contextLabel:"CCAP_PersonaDraft_localStorage"});if(!n.ok)return null;let e=n.value;if(typeof e!="object"||e===null)return null;let t=Object.fromEntries(Object.entries(e)),a=typeof t.name=="string"?t.name:"",c=typeof t.personality=="string"?t.personality:"",i=typeof t.conversation_style=="string"?t.conversation_style:"",l=typeof t.work_style=="string"?t.work_style:"",f=typeof t.mission=="string"?t.mission:"",y=typeof t.avoid=="string"?t.avoid:"";return{name:a,personality:c,conversation_style:i,work_style:l,mission:f,avoid:y}}catch{return null}}function g(o){try{localStorage.setItem(r,JSON.stringify(o))}catch{}}function u(){try{localStorage.removeItem(r)}catch{}}var m={get:p,save:g,clear:u};export{m as a};
2
- //# sourceMappingURL=chunk-H4KPNX6Y.js.map
1
+ import{j as s}from"./chunk-ZTB2RW6R.js";var r="ccap-personaSoulDraft";function p(){try{let o=localStorage.getItem(r);if(!o)return null;let n=s.tryParseStrict({text:o,contextLabel:"CCAP_PersonaDraft_localStorage"});if(!n.ok)return null;let e=n.value;if(typeof e!="object"||e===null)return null;let t=Object.fromEntries(Object.entries(e)),a=typeof t.name=="string"?t.name:"",c=typeof t.personality=="string"?t.personality:"",i=typeof t.conversation_style=="string"?t.conversation_style:"",l=typeof t.work_style=="string"?t.work_style:"",f=typeof t.mission=="string"?t.mission:"",y=typeof t.avoid=="string"?t.avoid:"";return{name:a,personality:c,conversation_style:i,work_style:l,mission:f,avoid:y}}catch{return null}}function g(o){try{localStorage.setItem(r,JSON.stringify(o))}catch{}}function u(){try{localStorage.removeItem(r)}catch{}}var m={get:p,save:g,clear:u};export{m as a};
2
+ //# sourceMappingURL=chunk-C2ZXKTHA.js.map
@@ -1,2 +1,2 @@
1
- import{a as h}from"./chunk-EDPWSLEJ.js";import{I as c,p as _}from"./chunk-QUNT2WPJ.js";import{C as a,aa as r,h as u,k as n,p as o,xb as f,y as l}from"./chunk-TBMJSIBB.js";var p=u(_());var $=6e4,y=(()=>{class i{api_AS=a(h);instancePresenceMap_$=r(new Map);intervalHandle=void 0;lastRefreshAt_$=r(null);startPeriodicRefresh(){this.intervalHandle===void 0&&(this.refreshNow(),this.intervalHandle=setInterval(()=>{this.refreshNow()},$))}stopPeriodicRefresh(){this.intervalHandle!==void 0&&(clearInterval(this.intervalHandle),this.intervalHandle=void 0)}refreshNow(){return n(this,null,function*(){try{let t=yield this.api_AS.getPresence(),e=new Map;for(let s of t.list??[])s.instanceKey&&e.set(s.instanceKey,s);this.instancePresenceMap_$.set(e),this.lastRefreshAt_$.set(new Date().toISOString())}catch(t){p.DyFM_Log.warn(`[CCAP] ExS_InstancePresence_DataService refresh failed (non-fatal): ${t instanceof Error?t.message:String(t)}`)}})}getPresence(t){let e=this.instancePresenceMap_$().get(t);return e||{instanceKey:t,presence:"unknown",wsConnected:!1,reason:"presence map not loaded yet"}}ngOnDestroy(){this.stopPeriodicRefresh()}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var g=5e3,P=18,v=5e3,L=(()=>{class i{versionInfo_$=r(null);loading_$=r(!1);loadError_$=r(null);lastLoadedAt_$=r(null);triggering_$=r(!1);triggerResult_$=r(null);triggerError_$=r(null);pollingPostUpdate_$=r(!1);triggerSucceeded_$=r(null);triggerTimedOut_$=r(!1);http=a(f);pollTimer=null;loadVersionInfo(){return n(this,null,function*(){this.loading_$.set(!0),this.loadError_$.set(null);try{let t=`${c.api.baseUrl}/server/health/version-info`,e=yield o(this.http.get(t));this.versionInfo_$.set(e),this.lastLoadedAt_$.set(new Date)}catch(t){let e=t instanceof Error?t.message:String(t);this.loadError_$.set(e),this.versionInfo_$.set(null)}finally{this.loading_$.set(!1)}})}triggerUpdate(t){return n(this,null,function*(){this.cancelPostUpdatePolling(),this.triggerSucceeded_$.set(null),this.triggerTimedOut_$.set(!1),this.triggering_$.set(!0),this.triggerError_$.set(null),this.triggerResult_$.set(null);try{let e=`${c.api.baseUrl}/server/health/trigger-update`,s=yield o(this.http.post(e,{force:t===!0}));this.triggerResult_$.set(s),s.status==="started"&&s.currentVersion&&this.startPostUpdatePolling(s.currentVersion)}catch(e){let s=e instanceof Error?e.message:String(e);this.triggerError_$.set(s)}finally{this.triggering_$.set(!1)}})}startPostUpdatePolling(t){this.pollingPostUpdate_$.set(!0);let e=0,s=()=>n(this,null,function*(){e+=1;let d=yield this.pollHealthPid();if(d&&d!==t){this.triggerSucceeded_$.set({oldVersion:t,newVersion:d,detectedAtMs:Date.now()}),this.pollingPostUpdate_$.set(!1),this.pollTimer=null,setTimeout(()=>{typeof window<"u"&&window?.location&&window.location.reload()},v);return}if(e>=P){this.triggerTimedOut_$.set(!0),this.pollingPostUpdate_$.set(!1),this.pollTimer=null;return}this.pollTimer=setTimeout(()=>{s()},g)});this.pollTimer=setTimeout(()=>{s()},g)}cancelPostUpdatePolling(){this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.pollingPostUpdate_$.set(!1)}pollHealthPid(){return n(this,null,function*(){try{let t=`${c.api.baseUrl}/server/health/pid`,e=yield o(this.http.get(t));return typeof e?.ccapVersion=="string"?e.ccapVersion:null}catch{return null}})}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();export{y as a,L as b};
2
- //# sourceMappingURL=chunk-44B4MFA2.js.map
1
+ import{a as h}from"./chunk-4O4UDIWG.js";import{I as c,p as _}from"./chunk-Y3DARUXQ.js";import{C as a,aa as r,h as u,k as n,p as o,xb as f,y as l}from"./chunk-TBMJSIBB.js";var p=u(_());var $=6e4,y=(()=>{class i{api_AS=a(h);instancePresenceMap_$=r(new Map);intervalHandle=void 0;lastRefreshAt_$=r(null);startPeriodicRefresh(){this.intervalHandle===void 0&&(this.refreshNow(),this.intervalHandle=setInterval(()=>{this.refreshNow()},$))}stopPeriodicRefresh(){this.intervalHandle!==void 0&&(clearInterval(this.intervalHandle),this.intervalHandle=void 0)}refreshNow(){return n(this,null,function*(){try{let t=yield this.api_AS.getPresence(),e=new Map;for(let s of t.list??[])s.instanceKey&&e.set(s.instanceKey,s);this.instancePresenceMap_$.set(e),this.lastRefreshAt_$.set(new Date().toISOString())}catch(t){p.DyFM_Log.warn(`[CCAP] ExS_InstancePresence_DataService refresh failed (non-fatal): ${t instanceof Error?t.message:String(t)}`)}})}getPresence(t){let e=this.instancePresenceMap_$().get(t);return e||{instanceKey:t,presence:"unknown",wsConnected:!1,reason:"presence map not loaded yet"}}ngOnDestroy(){this.stopPeriodicRefresh()}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var g=5e3,P=18,v=5e3,L=(()=>{class i{versionInfo_$=r(null);loading_$=r(!1);loadError_$=r(null);lastLoadedAt_$=r(null);triggering_$=r(!1);triggerResult_$=r(null);triggerError_$=r(null);pollingPostUpdate_$=r(!1);triggerSucceeded_$=r(null);triggerTimedOut_$=r(!1);http=a(f);pollTimer=null;loadVersionInfo(){return n(this,null,function*(){this.loading_$.set(!0),this.loadError_$.set(null);try{let t=`${c.api.baseUrl}/server/health/version-info`,e=yield o(this.http.get(t));this.versionInfo_$.set(e),this.lastLoadedAt_$.set(new Date)}catch(t){let e=t instanceof Error?t.message:String(t);this.loadError_$.set(e),this.versionInfo_$.set(null)}finally{this.loading_$.set(!1)}})}triggerUpdate(t){return n(this,null,function*(){this.cancelPostUpdatePolling(),this.triggerSucceeded_$.set(null),this.triggerTimedOut_$.set(!1),this.triggering_$.set(!0),this.triggerError_$.set(null),this.triggerResult_$.set(null);try{let e=`${c.api.baseUrl}/server/health/trigger-update`,s=yield o(this.http.post(e,{force:t===!0}));this.triggerResult_$.set(s),s.status==="started"&&s.currentVersion&&this.startPostUpdatePolling(s.currentVersion)}catch(e){let s=e instanceof Error?e.message:String(e);this.triggerError_$.set(s)}finally{this.triggering_$.set(!1)}})}startPostUpdatePolling(t){this.pollingPostUpdate_$.set(!0);let e=0,s=()=>n(this,null,function*(){e+=1;let d=yield this.pollHealthPid();if(d&&d!==t){this.triggerSucceeded_$.set({oldVersion:t,newVersion:d,detectedAtMs:Date.now()}),this.pollingPostUpdate_$.set(!1),this.pollTimer=null,setTimeout(()=>{typeof window<"u"&&window?.location&&window.location.reload()},v);return}if(e>=P){this.triggerTimedOut_$.set(!0),this.pollingPostUpdate_$.set(!1),this.pollTimer=null;return}this.pollTimer=setTimeout(()=>{s()},g)});this.pollTimer=setTimeout(()=>{s()},g)}cancelPostUpdatePolling(){this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.pollingPostUpdate_$.set(!1)}pollHealthPid(){return n(this,null,function*(){try{let t=`${c.api.baseUrl}/server/health/pid`,e=yield o(this.http.get(t));return typeof e?.ccapVersion=="string"?e.ccapVersion:null}catch{return null}})}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();export{y as a,L as b};
2
+ //# sourceMappingURL=chunk-CAUXU2ZC.js.map
@@ -1,2 +1,2 @@
1
- import{k as F}from"./chunk-2VC36Y3F.js";import{D as h,Fa as _,Ga as C,Ha as T,J as x,K as u,T as E,Ta as L,U as l,Ua as k,Z as a,da as c,ga as S,la as d,ma as f,oa as v,pa as g,qa as o,ra as r,sa as p,ua as y,ub as R,va as b,wa as i,xa as M,ya as w}from"./chunk-TBMJSIBB.js";var I=["*","*"],D=()=>[];function j(t,n){if(t&1){let e=y();o(0,"div",2)(1,"button",3),b("click",function(){x(e);let m=i(3);return u(m.handleRetry())}),_(2," \xDAjrapr\xF3b\xE1l\xE1s "),r()()}}function V(t,n){if(t&1&&(o(0,"div"),p(1,"app-ccap-error-display",1),c(2,j,3,0,"div",2),r()),t&2){let e=i(2);a(),S("error",e.error())("sourceLabelOverride",e.errorSourceLabel()),a(),d(e.showRetry()?2:-1)}}function A(t,n){t&1&&(o(0,"div",6),p(1,"div",9)(2,"div",10),r())}function P(t,n){if(t&1&&(o(0,"div",4),v(1,A,3,0,"div",6,f),o(3,"div",7),p(4,"span",8),_(5),r()()),t&2){let e=i(3);a(),g(k(1,D).constructor(e.skeletonRows())),a(4),T(" ",e.loadingMessage()," ")}}function B(t,n){if(t&1&&(o(0,"p",5),_(1),r()),t&2){let e=i(3);a(),C(e.loadingMessage())}}function O(t,n){if(t&1&&c(0,P,6,2,"div",4)(1,B,2,1,"p",5),t&2){let e=i(2);d(e.showSkeleton()?0:1)}}function N(t,n){if(t&1&&(o(0,"p",0),_(1),r()),t&2){let e=i(2);a(),C(e.emptyMessage())}}function q(t,n){t&1&&w(0)}function z(t,n){if(t&1&&c(0,V,3,3,"div")(1,O,2,1)(2,N,2,1,"p",0)(3,q,1,0),t&2){let e=i();d(e.error()?0:e.isLoading()?1:e.isEmpty()?2:3)}}function G(t,n){t&1&&(o(0,"div",6),p(1,"div",9)(2,"div",10),r())}function H(t,n){if(t&1&&(o(0,"div",4),v(1,G,3,0,"div",6,f),o(3,"div",7),p(4,"span",8),_(5),r()()),t&2){let e=i(3);a(),g(k(1,D).constructor(e.skeletonRows())),a(4),T(" ",e.loadingMessage()," ")}}function J(t,n){if(t&1&&(o(0,"p",5),_(1),r()),t&2){let e=i(3);a(),C(e.loadingMessage())}}function K(t,n){if(t&1&&c(0,H,6,2,"div",4)(1,J,2,1,"p",5),t&2){let e=i(2);d(e.showSkeleton()?0:1)}}function Q(t,n){if(t&1){let e=y();o(0,"div",2)(1,"button",3),b("click",function(){x(e);let m=i(3);return u(m.handleRetry())}),_(2," \xDAjrapr\xF3b\xE1l\xE1s "),r()()}}function U(t,n){if(t&1&&(o(0,"div"),p(1,"app-ccap-error-display",1),c(2,Q,3,0,"div",2),r()),t&2){let e=i(2);a(),S("error",e.error())("sourceLabelOverride",e.errorSourceLabel()),a(),d(e.showRetry()?2:-1)}}function W(t,n){if(t&1&&(o(0,"p",0),_(1),r()),t&2){let e=i(2);a(),C(e.emptyMessage())}}function X(t,n){t&1&&w(0,1)}function Y(t,n){if(t&1&&c(0,K,2,1)(1,U,3,3,"div")(2,W,2,1,"p",0)(3,X,1,0),t&2){let e=i();d(e.isLoading()?0:e.error()?1:e.isEmpty()?2:3)}}var ot=(()=>{class t{isLoading=l(!1);error=l(null);isEmpty=l(!1);errorSourceLabel=l("");emptyMessage=l("Nincs megjelen\xEDthet\u0151 elem.");loadingMessage=l("Bet\xF6lt\xE9s\u2026");skeletonRows=l(2);showSkeleton=l(!1);showRetry=l(!0);errorTakesPrecedence=l(!1);retry=E();handleRetry(){this.retry.emit()}static \u0275fac=function(s){return new(s||t)};static \u0275cmp=h({type:t,selectors:[["app-s-content-state"]],hostAttrs:[1,"block"],inputs:{isLoading:[1,"isLoading"],error:[1,"error"],isEmpty:[1,"isEmpty"],errorSourceLabel:[1,"errorSourceLabel"],emptyMessage:[1,"emptyMessage"],loadingMessage:[1,"loadingMessage"],skeletonRows:[1,"skeletonRows"],showSkeleton:[1,"showSkeleton"],showRetry:[1,"showRetry"],errorTakesPrecedence:[1,"errorTakesPrecedence"]},outputs:{retry:"retry"},standalone:!0,features:[L],ngContentSelectors:I,decls:2,vars:1,consts:[[1,"text-neutral-500","py-4"],[1,"mb-3","block",3,"error","sourceLabelOverride"],[1,"text-center"],["type","button",1,"mt-1","px-3","py-1.5","text-sm","border","border-neonCyan","rounded-md","bg-transparent","text-neutral-200","hover:bg-neutral-800","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[1,"flex","flex-col","gap-2","py-4"],[1,"text-neutral-400"],[1,"px-4","py-3","border","border-neonDefault","rounded-lg","animate-pulse"],[1,"flex","items-center","gap-2","text-neutral-500","text-sm"],[1,"inline-block","w-2","h-2","rounded-full","bg-ccapAccent","animate-pulse"],[1,"h-4","w-3/4","bg-neutral-600","rounded","mb-2"],[1,"h-3","w-1/2","bg-neutral-700","rounded"]],template:function(s,m){s&1&&(M(I),c(0,z,4,1)(1,Y,4,1)),s&2&&d(m.errorTakesPrecedence()?0:1)},dependencies:[R,F],encapsulation:2})}return t})();export{ot as a};
2
- //# sourceMappingURL=chunk-U5G7I3PM.js.map
1
+ import{k as F}from"./chunk-ZTB2RW6R.js";import{D as h,Fa as _,Ga as C,Ha as T,J as x,K as u,T as E,Ta as L,U as l,Ua as k,Z as a,da as c,ga as S,la as d,ma as f,oa as v,pa as g,qa as o,ra as r,sa as p,ua as y,ub as R,va as b,wa as i,xa as M,ya as w}from"./chunk-TBMJSIBB.js";var I=["*","*"],D=()=>[];function j(t,n){if(t&1){let e=y();o(0,"div",2)(1,"button",3),b("click",function(){x(e);let m=i(3);return u(m.handleRetry())}),_(2," \xDAjrapr\xF3b\xE1l\xE1s "),r()()}}function V(t,n){if(t&1&&(o(0,"div"),p(1,"app-ccap-error-display",1),c(2,j,3,0,"div",2),r()),t&2){let e=i(2);a(),S("error",e.error())("sourceLabelOverride",e.errorSourceLabel()),a(),d(e.showRetry()?2:-1)}}function A(t,n){t&1&&(o(0,"div",6),p(1,"div",9)(2,"div",10),r())}function P(t,n){if(t&1&&(o(0,"div",4),v(1,A,3,0,"div",6,f),o(3,"div",7),p(4,"span",8),_(5),r()()),t&2){let e=i(3);a(),g(k(1,D).constructor(e.skeletonRows())),a(4),T(" ",e.loadingMessage()," ")}}function B(t,n){if(t&1&&(o(0,"p",5),_(1),r()),t&2){let e=i(3);a(),C(e.loadingMessage())}}function O(t,n){if(t&1&&c(0,P,6,2,"div",4)(1,B,2,1,"p",5),t&2){let e=i(2);d(e.showSkeleton()?0:1)}}function N(t,n){if(t&1&&(o(0,"p",0),_(1),r()),t&2){let e=i(2);a(),C(e.emptyMessage())}}function q(t,n){t&1&&w(0)}function z(t,n){if(t&1&&c(0,V,3,3,"div")(1,O,2,1)(2,N,2,1,"p",0)(3,q,1,0),t&2){let e=i();d(e.error()?0:e.isLoading()?1:e.isEmpty()?2:3)}}function G(t,n){t&1&&(o(0,"div",6),p(1,"div",9)(2,"div",10),r())}function H(t,n){if(t&1&&(o(0,"div",4),v(1,G,3,0,"div",6,f),o(3,"div",7),p(4,"span",8),_(5),r()()),t&2){let e=i(3);a(),g(k(1,D).constructor(e.skeletonRows())),a(4),T(" ",e.loadingMessage()," ")}}function J(t,n){if(t&1&&(o(0,"p",5),_(1),r()),t&2){let e=i(3);a(),C(e.loadingMessage())}}function K(t,n){if(t&1&&c(0,H,6,2,"div",4)(1,J,2,1,"p",5),t&2){let e=i(2);d(e.showSkeleton()?0:1)}}function Q(t,n){if(t&1){let e=y();o(0,"div",2)(1,"button",3),b("click",function(){x(e);let m=i(3);return u(m.handleRetry())}),_(2," \xDAjrapr\xF3b\xE1l\xE1s "),r()()}}function U(t,n){if(t&1&&(o(0,"div"),p(1,"app-ccap-error-display",1),c(2,Q,3,0,"div",2),r()),t&2){let e=i(2);a(),S("error",e.error())("sourceLabelOverride",e.errorSourceLabel()),a(),d(e.showRetry()?2:-1)}}function W(t,n){if(t&1&&(o(0,"p",0),_(1),r()),t&2){let e=i(2);a(),C(e.emptyMessage())}}function X(t,n){t&1&&w(0,1)}function Y(t,n){if(t&1&&c(0,K,2,1)(1,U,3,3,"div")(2,W,2,1,"p",0)(3,X,1,0),t&2){let e=i();d(e.isLoading()?0:e.error()?1:e.isEmpty()?2:3)}}var ot=(()=>{class t{isLoading=l(!1);error=l(null);isEmpty=l(!1);errorSourceLabel=l("");emptyMessage=l("Nincs megjelen\xEDthet\u0151 elem.");loadingMessage=l("Bet\xF6lt\xE9s\u2026");skeletonRows=l(2);showSkeleton=l(!1);showRetry=l(!0);errorTakesPrecedence=l(!1);retry=E();handleRetry(){this.retry.emit()}static \u0275fac=function(s){return new(s||t)};static \u0275cmp=h({type:t,selectors:[["app-s-content-state"]],hostAttrs:[1,"block"],inputs:{isLoading:[1,"isLoading"],error:[1,"error"],isEmpty:[1,"isEmpty"],errorSourceLabel:[1,"errorSourceLabel"],emptyMessage:[1,"emptyMessage"],loadingMessage:[1,"loadingMessage"],skeletonRows:[1,"skeletonRows"],showSkeleton:[1,"showSkeleton"],showRetry:[1,"showRetry"],errorTakesPrecedence:[1,"errorTakesPrecedence"]},outputs:{retry:"retry"},standalone:!0,features:[L],ngContentSelectors:I,decls:2,vars:1,consts:[[1,"text-neutral-500","py-4"],[1,"mb-3","block",3,"error","sourceLabelOverride"],[1,"text-center"],["type","button",1,"mt-1","px-3","py-1.5","text-sm","border","border-neonCyan","rounded-md","bg-transparent","text-neutral-200","hover:bg-neutral-800","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[1,"flex","flex-col","gap-2","py-4"],[1,"text-neutral-400"],[1,"px-4","py-3","border","border-neonDefault","rounded-lg","animate-pulse"],[1,"flex","items-center","gap-2","text-neutral-500","text-sm"],[1,"inline-block","w-2","h-2","rounded-full","bg-ccapAccent","animate-pulse"],[1,"h-4","w-3/4","bg-neutral-600","rounded","mb-2"],[1,"h-3","w-1/2","bg-neutral-700","rounded"]],template:function(s,m){s&1&&(M(I),c(0,z,4,1)(1,Y,4,1)),s&2&&d(m.errorTakesPrecedence()?0:1)},dependencies:[R,F],encapsulation:2})}return t})();export{ot as a};
2
+ //# sourceMappingURL=chunk-CBMKN4SJ.js.map
@@ -1,2 +1,2 @@
1
- import{b as S}from"./chunk-EDPWSLEJ.js";import{C as o,aa as l,hb as s,k as a,y as c}from"./chunk-TBMJSIBB.js";var n="pei:selectedCcapId",$=(()=>{class i{instanceRegistry_DS=o(S);selectedCcapId_$=l("");activeCcapId_$=s(()=>{let e=this.selectedCcapId_$();return e||(this.instanceRegistry_DS.current_$()?.instanceKey??"")});isLocalSelected_$=s(()=>{let e=this.instanceRegistry_DS.current_$()?.instanceKey??"",t=this.activeCcapId_$();return!t||!e||t===e});instanceList_$=s(()=>this.instanceRegistry_DS.list_$());localInstanceKey_$=s(()=>this.instanceRegistry_DS.current_$()?.instanceKey??"");initializePromise=null;ensureInitialized(){return this.initializePromise||(this.initializePromise=this.initialize()),this.initializePromise}initialize(){return a(this,null,function*(){!this.instanceRegistry_DS.current_$()&&!this.instanceRegistry_DS.currentLoading_$()&&(yield this.instanceRegistry_DS.loadCurrent()),!this.instanceRegistry_DS.list_$().length&&!this.instanceRegistry_DS.listLoading_$()&&(yield this.instanceRegistry_DS.loadList()),this.restoreFromSessionStorage(),this.validateRestoredSelection()})}selectInstance(e){this.selectedCcapId_$.set(e),this.persistToSessionStorage(e)}restoreFromSessionStorage(){try{let e=sessionStorage.getItem(n);e&&this.selectedCcapId_$.set(e)}catch{}}validateRestoredSelection(){let e=this.selectedCcapId_$();if(!e)return;let t=this.instanceRegistry_DS.current_$()?.instanceKey??"";if(t&&e===t)return;let r=this.instanceRegistry_DS.list_$();r.length&&r.some(_=>_.instanceKey===e)||t&&(this.selectedCcapId_$.set(""),this.clearSessionStorage())}persistToSessionStorage(e){try{sessionStorage.setItem(n,e)}catch{}}clearSessionStorage(){try{sessionStorage.removeItem(n)}catch{}}static \u0275fac=function(t){return new(t||i)};static \u0275prov=c({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();export{$ as a};
2
- //# sourceMappingURL=chunk-V3MC6IHV.js.map
1
+ import{b as S}from"./chunk-4O4UDIWG.js";import{C as o,aa as l,hb as s,k as a,y as c}from"./chunk-TBMJSIBB.js";var n="pei:selectedCcapId",$=(()=>{class i{instanceRegistry_DS=o(S);selectedCcapId_$=l("");activeCcapId_$=s(()=>{let e=this.selectedCcapId_$();return e||(this.instanceRegistry_DS.current_$()?.instanceKey??"")});isLocalSelected_$=s(()=>{let e=this.instanceRegistry_DS.current_$()?.instanceKey??"",t=this.activeCcapId_$();return!t||!e||t===e});instanceList_$=s(()=>this.instanceRegistry_DS.list_$());localInstanceKey_$=s(()=>this.instanceRegistry_DS.current_$()?.instanceKey??"");initializePromise=null;ensureInitialized(){return this.initializePromise||(this.initializePromise=this.initialize()),this.initializePromise}initialize(){return a(this,null,function*(){!this.instanceRegistry_DS.current_$()&&!this.instanceRegistry_DS.currentLoading_$()&&(yield this.instanceRegistry_DS.loadCurrent()),!this.instanceRegistry_DS.list_$().length&&!this.instanceRegistry_DS.listLoading_$()&&(yield this.instanceRegistry_DS.loadList()),this.restoreFromSessionStorage(),this.validateRestoredSelection()})}selectInstance(e){this.selectedCcapId_$.set(e),this.persistToSessionStorage(e)}restoreFromSessionStorage(){try{let e=sessionStorage.getItem(n);e&&this.selectedCcapId_$.set(e)}catch{}}validateRestoredSelection(){let e=this.selectedCcapId_$();if(!e)return;let t=this.instanceRegistry_DS.current_$()?.instanceKey??"";if(t&&e===t)return;let r=this.instanceRegistry_DS.list_$();r.length&&r.some(_=>_.instanceKey===e)||t&&(this.selectedCcapId_$.set(""),this.clearSessionStorage())}persistToSessionStorage(e){try{sessionStorage.setItem(n,e)}catch{}}clearSessionStorage(){try{sessionStorage.removeItem(n)}catch{}}static \u0275fac=function(t){return new(t||i)};static \u0275prov=c({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();export{$ as a};
2
+ //# sourceMappingURL=chunk-CF3BLCVD.js.map
@@ -1,2 +1,2 @@
1
- import{h as f,i as A}from"./chunk-ODUTF4DP.js";import{C as E,a as l,aa as i,b as u,k as d,y as _}from"./chunk-TBMJSIBB.js";var m=class o{static buildAnnotationIndex(e){let r=new Map;for(let t of e)t.errorCode&&t.errorCode.length>0&&r.set(t.errorCode,t);return r}static classify(e,r){let t=e.errorCode;if(!t)return{classification:"UNFIXED"};let s=r.get(t);if(!s||!s.fixedInVersion)return{classification:"UNFIXED"};let a=o.parseVersion(s.fixedInVersion),n=o.extractMaxVersion(e.versions);return!a||!n?{classification:"UNFIXED"}:{classification:o.compareVersions(n,a)<0?"STALE-BUILD":"REGRESSION",fixedInVersion:s.fixedInVersion,fixedInCycle:s.fixedInCycle,summary:s.summary}}static classifyAll(e,r){let t=o.buildAnnotationIndex(r);return e.map(s=>u(l({},s),{fixAnnotation:o.classify(s,t)}))}static parseVersion(e){let r=e.match(/(\d+)\.(\d+)\.(\d+)/);return r?[parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10)]:null}static extractMaxVersion(e){if(!e||!e.length)return null;let r=null;for(let t of e){let s=o.parseVersion(t);s!=null&&(r==null||o.compareVersions(s,r)>0)&&(r=s)}return r}static compareVersions(e,r){for(let t=0;t<3;t++){let s=e[t]??0,a=r[t]??0;if(s!==a)return s<a?-1:1}return 0}};var p=class{static sortCcapErrorListItemsNewestFirst(e){let r=[...e];return r.sort((t,s)=>{let a=$(t),n=$(s);if(n!==a)return n-a;let c=t._id??"";return(s._id??"").localeCompare(c)}),r}};function $(o){let e=o.lastOccurrenceAt??o.timestamp;if(!e||typeof e!="string"||e.trim().length===0)return 0;let r=Date.parse(e);return Number.isFinite(r)?r:0}var S=(()=>{class o{errors_$=i([]);errorsTotalCount_$=i(0);errorsLoading_$=i(!1);errorsLoadError_$=i(null);errorsLoadErrorRaw_$=i(null);lastRefreshedAt_$=i(null);hideStaleBuild_$=i(!0);fixAnnotations_$=i([]);errors_AS=E(A);loadErrors(){return d(this,null,function*(){this.errorsLoading_$.set(!0),this.errorsLoadError_$.set(null),this.errorsLoadErrorRaw_$.set(null);try{let r=yield this.errors_AS.listErrors(),t=r.errors??[],s=[];try{s=yield this.errors_AS.listFixAnnotations()}catch{s=[]}this.fixAnnotations_$.set(s);let a=m.classifyAll(t,s);this.errors_$.set(p.sortCcapErrorListItemsNewestFirst(a)),this.errorsTotalCount_$.set(r.total),this.lastRefreshedAt_$.set(new Date)}catch(r){this.errorsLoadErrorRaw_$.set(r);let t=f.getErrorMessageForDisplay(r);this.errorsLoadError_$.set(t),this.errors_$.set([]),this.errorsTotalCount_$.set(0)}finally{this.errorsLoading_$.set(!1)}})}clearAll(){return d(this,null,function*(){try{yield this.errors_AS.deleteAllErrors(),yield this.loadErrors()}catch(r){this.errorsLoadErrorRaw_$.set(r);let t=f.getErrorMessageForDisplay(r);this.errorsLoadError_$.set(t)}})}clearOne(r){return d(this,null,function*(){try{yield this.errors_AS.deleteError(r),this.errors_$.update(t=>t.filter(s=>s._id!==r)),this.errorsTotalCount_$.update(t=>Math.max(0,t-1))}catch(t){this.errorsLoadErrorRaw_$.set(t);let s=f.getErrorMessageForDisplay(t);this.errorsLoadError_$.set(s)}})}setPmUserMark(r,t){return d(this,null,function*(){try{let s=yield this.errors_AS.setPmUserMark(r,t),a=s.pmUserMarkedAt!=null&&s.pmUserMarkedAt.trim().length>0?s.pmUserMarkedAt.trim():void 0;this.errors_$.update(n=>n.map(c=>{if(c._id!==r)return c;if(a!=null)return u(l({},c),{pmUserMarkedAt:a});let h=l({},c);return delete h.pmUserMarkedAt,h}))}catch(s){this.errorsLoadErrorRaw_$.set(s);let a=f.getErrorMessageForDisplay(s);this.errorsLoadError_$.set(a)}})}static \u0275fac=function(t){return new(t||o)};static \u0275prov=_({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();export{S as a};
2
- //# sourceMappingURL=chunk-BR2OEH55.js.map
1
+ import{h as f,i as A}from"./chunk-KNTOPF7C.js";import{C as E,a as l,aa as i,b as u,k as d,y as _}from"./chunk-TBMJSIBB.js";var m=class o{static buildAnnotationIndex(e){let r=new Map;for(let t of e)t.errorCode&&t.errorCode.length>0&&r.set(t.errorCode,t);return r}static classify(e,r){let t=e.errorCode;if(!t)return{classification:"UNFIXED"};let s=r.get(t);if(!s||!s.fixedInVersion)return{classification:"UNFIXED"};let a=o.parseVersion(s.fixedInVersion),n=o.extractMaxVersion(e.versions);return!a||!n?{classification:"UNFIXED"}:{classification:o.compareVersions(n,a)<0?"STALE-BUILD":"REGRESSION",fixedInVersion:s.fixedInVersion,fixedInCycle:s.fixedInCycle,summary:s.summary}}static classifyAll(e,r){let t=o.buildAnnotationIndex(r);return e.map(s=>u(l({},s),{fixAnnotation:o.classify(s,t)}))}static parseVersion(e){let r=e.match(/(\d+)\.(\d+)\.(\d+)/);return r?[parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10)]:null}static extractMaxVersion(e){if(!e||!e.length)return null;let r=null;for(let t of e){let s=o.parseVersion(t);s!=null&&(r==null||o.compareVersions(s,r)>0)&&(r=s)}return r}static compareVersions(e,r){for(let t=0;t<3;t++){let s=e[t]??0,a=r[t]??0;if(s!==a)return s<a?-1:1}return 0}};var p=class{static sortCcapErrorListItemsNewestFirst(e){let r=[...e];return r.sort((t,s)=>{let a=$(t),n=$(s);if(n!==a)return n-a;let c=t._id??"";return(s._id??"").localeCompare(c)}),r}};function $(o){let e=o.lastOccurrenceAt??o.timestamp;if(!e||typeof e!="string"||e.trim().length===0)return 0;let r=Date.parse(e);return Number.isFinite(r)?r:0}var S=(()=>{class o{errors_$=i([]);errorsTotalCount_$=i(0);errorsLoading_$=i(!1);errorsLoadError_$=i(null);errorsLoadErrorRaw_$=i(null);lastRefreshedAt_$=i(null);hideStaleBuild_$=i(!0);fixAnnotations_$=i([]);errors_AS=E(A);loadErrors(){return d(this,null,function*(){this.errorsLoading_$.set(!0),this.errorsLoadError_$.set(null),this.errorsLoadErrorRaw_$.set(null);try{let r=yield this.errors_AS.listErrors(),t=r.errors??[],s=[];try{s=yield this.errors_AS.listFixAnnotations()}catch{s=[]}this.fixAnnotations_$.set(s);let a=m.classifyAll(t,s);this.errors_$.set(p.sortCcapErrorListItemsNewestFirst(a)),this.errorsTotalCount_$.set(r.total),this.lastRefreshedAt_$.set(new Date)}catch(r){this.errorsLoadErrorRaw_$.set(r);let t=f.getErrorMessageForDisplay(r);this.errorsLoadError_$.set(t),this.errors_$.set([]),this.errorsTotalCount_$.set(0)}finally{this.errorsLoading_$.set(!1)}})}clearAll(){return d(this,null,function*(){try{yield this.errors_AS.deleteAllErrors(),yield this.loadErrors()}catch(r){this.errorsLoadErrorRaw_$.set(r);let t=f.getErrorMessageForDisplay(r);this.errorsLoadError_$.set(t)}})}clearOne(r){return d(this,null,function*(){try{yield this.errors_AS.deleteError(r),this.errors_$.update(t=>t.filter(s=>s._id!==r)),this.errorsTotalCount_$.update(t=>Math.max(0,t-1))}catch(t){this.errorsLoadErrorRaw_$.set(t);let s=f.getErrorMessageForDisplay(t);this.errorsLoadError_$.set(s)}})}setPmUserMark(r,t){return d(this,null,function*(){try{let s=yield this.errors_AS.setPmUserMark(r,t),a=s.pmUserMarkedAt!=null&&s.pmUserMarkedAt.trim().length>0?s.pmUserMarkedAt.trim():void 0;this.errors_$.update(n=>n.map(c=>{if(c._id!==r)return c;if(a!=null)return u(l({},c),{pmUserMarkedAt:a});let h=l({},c);return delete h.pmUserMarkedAt,h}))}catch(s){this.errorsLoadErrorRaw_$.set(s);let a=f.getErrorMessageForDisplay(s);this.errorsLoadError_$.set(a)}})}static \u0275fac=function(t){return new(t||o)};static \u0275prov=_({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();export{S as a};
2
+ //# sourceMappingURL=chunk-CIO2T2KX.js.map
@@ -1,2 +1,2 @@
1
- import{e as $}from"./chunk-ADOCMVHI.js";import{I as h,p as S}from"./chunk-QUNT2WPJ.js";import{C as u,aa as a,h as C,k as m,p as c,xb as y,y as _}from"./chunk-TBMJSIBB.js";var f=C(S());var T=(()=>{class n{baseUrl=`${h.api.baseUrl}/terminals`;http=u(y);getTerminals(){return c(this.http.get(this.baseUrl))}startTerminal(t){return c(this.http.post(`${this.baseUrl}/start`,{path:t.path},{headers:{"Content-Type":"application/json"}}))}runCommand(t,e){return c(this.http.post(`${this.baseUrl}/${encodeURIComponent(t)}/command`,{action:e.action,command:e.command,code:e.code},{headers:{"Content-Type":"application/json"}}))}deleteTerminal(t){return c(this.http.delete(`${this.baseUrl}/${encodeURIComponent(t)}`))}closeTerminal(t){return c(this.http.post(`${this.baseUrl}/${encodeURIComponent(t)}/close`,{},{headers:{"Content-Type":"application/json"}}))}static \u0275fac=function(e){return new(e||n)};static \u0275prov=_({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var R="terminal:list",A="terminal:list:result",q="terminal:start",b="terminal:start:result",p="terminal:attach",N="terminal:command-result",M="terminal:command-output",k="terminal:command-stdin";function E(n){if(n==null||typeof n!="object")return null;let s=n,t=typeof s.terminalId=="string"?s.terminalId:"";if(!t.trim())return null;let e=s.type,r=e==="exec"||e==="cc-runner"||e==="ca-runner"?e:void 0;return{_id:typeof s._id=="string"?s._id:void 0,terminalId:t.trim(),path:typeof s.path=="string"?s.path:void 0,status:typeof s.status=="string"?s.status:void 0,__created:typeof s.__created=="string"?s.__created:void 0,__lastModified:typeof s.__lastModified=="string"?s.__lastModified:void 0,type:r,sessionId:typeof s.sessionId=="string"?s.sessionId:void 0,command:typeof s.command=="string"?s.command:void 0}}var B=(()=>{class n{terminals_$=a([]);terminalsLoading_$=a(!1);terminalsLoadError_$=a(null);selectedTerminalId_$=a("");commandResults_$=a([]);startLoading_$=a(!1);startError_$=a(null);runCommandLoading_$=a(!1);runCommandError_$=a(null);interactiveRequestId_$=a(null);interactiveOutput_$=a("");eventSubscription=null;terminal_AS=u(T);socket_CS=u($);constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(t=>{if(t.event===A){let r=(Array.isArray(t.payload.terminals)?t.payload.terminals:[]).map(i=>E(i)).filter(i=>i!==null);this.terminals_$.set(r),this.terminalsLoading_$.set(!1),t.payload.error!==void 0&&t.payload.error!==null&&this.terminalsLoadError_$.set(t.payload.error)}else if(t.event===b){if(this.startLoading_$.set(!1),t.payload.error!==void 0&&t.payload.error!==null){this.startError_$.set(t.payload.error);return}this.startError_$.set(null);let e=typeof t.payload.terminalId=="string"?t.payload.terminalId:"",r=typeof t.payload.path=="string"?t.payload.path:"";e&&(this.terminals_$.update(i=>i.some(l=>l.terminalId===e)?i:[{terminalId:e,path:r,status:t.payload.status},...i]),this.selectedTerminalId_$.set(e),this.socket_CS.emit(p,{terminalId:e}),this.commandResults_$.set([]),this.clearInteractiveState())}else if(t.event===N){if((typeof t.payload.terminalId=="string"?t.payload.terminalId:"")!==this.selectedTerminalId_$())return;let r=t.payload.interactive===!0,i=t.payload.interactiveEnd===!0,o=typeof t.payload.exitCode=="number"?t.payload.exitCode:void 0;if(r){let d=typeof t.payload.requestId=="string"?t.payload.requestId:"";this.interactiveRequestId_$.set(d||null),this.interactiveOutput_$.set("");return}if(i){let d=this.interactiveOutput_$();this.interactiveRequestId_$.set(null),this.interactiveOutput_$.set("");let g=o!==void 0?`Session ended. Exit code: ${o}`:"Session ended.";this.commandResults_$.update(I=>[...d.trim().length>0?[...I,{output:d.trim(),success:!0}]:I,{output:g,success:!0,interactiveEnd:!0,exitCode:o}]);return}let l={requestId:typeof t.payload.requestId=="string"?t.payload.requestId:void 0,output:typeof t.payload.output=="string"?t.payload.output:"",success:t.payload.success===!0,error:typeof t.payload.error=="string"?t.payload.error:void 0};this.commandResults_$.update(d=>[...d,l])}else if(t.event===M){let e=typeof t.payload.terminalId=="string"?t.payload.terminalId.trim():"",r=typeof t.payload.requestId=="string"?String(t.payload.requestId).trim():"",i=typeof t.payload.chunk=="string"?t.payload.chunk:"",o=(this.interactiveRequestId_$()??"").trim(),l=(this.selectedTerminalId_$()??"").trim();if(o.length===0||r!==o){h.production||f.DyFM_Log.info("CCAP_Terminal | command-output kisz\u0171rve: requestId mismatch",{requestId:r,currentRequestId:o});return}if(e.length>0&&l.length>0&&e!==l){h.production||f.DyFM_Log.info("CCAP_Terminal | command-output kisz\u0171rve: terminalId mismatch",{terminalId:e,selectedId:l});return}this.interactiveOutput_$.update(d=>d+i)}})}requestTerminalListViaSocket(){this.terminalsLoadError_$.set(null),this.terminalsLoading_$.set(!0),this.socket_CS.emit(R,{})}loadTerminalsRest(){return m(this,null,function*(){this.terminalsLoadError_$.set(null),this.terminalsLoading_$.set(!0);try{let t=yield this.terminal_AS.getTerminals(),r=(Array.isArray(t?.terminals)?t.terminals:[]).map(i=>E(i)).filter(i=>i!==null);this.terminals_$.set(r)}catch(t){this.terminalsLoadError_$.set(t)}finally{this.terminalsLoading_$.set(!1)}})}startTerminalRest(t){return m(this,null,function*(){this.startError_$.set(null),this.startLoading_$.set(!0);try{let e=yield this.terminal_AS.startTerminal(t);this.startError_$.set(null),e.terminalId&&(this.terminals_$.update(r=>r.some(o=>o.terminalId===e.terminalId)?r:[{terminalId:e.terminalId,path:e.path,status:e.status},...r]),this.selectedTerminalId_$.set(e.terminalId),this.socket_CS.emit(p,{terminalId:e.terminalId}),this.commandResults_$.set([]),this.clearInteractiveState())}catch(e){this.startError_$.set(e)}finally{this.startLoading_$.set(!1)}})}startTerminalViaSocket(t){this.startError_$.set(null),this.startLoading_$.set(!0),this.socket_CS.emit(q,{path:t.path})}sendStdin(t){let e=this.selectedTerminalId_$(),r=this.interactiveRequestId_$();!e||!r||this.socket_CS.emit(k,{terminalId:e,requestId:r,data:typeof t=="string"?t:""})}clearInteractiveState(){this.interactiveRequestId_$.set(null),this.interactiveOutput_$.set("")}attachToTerminal(t){this.selectedTerminalId_$.set(t),this.socket_CS.emit(p,{terminalId:t}),this.commandResults_$.set([]),this.clearInteractiveState()}deleteTerminal(t){return m(this,null,function*(){let e=(t??"").trim();if(e){this.runCommandError_$.set(null);try{yield this.terminal_AS.deleteTerminal(e),this.terminals_$.update(r=>r.filter(i=>(i.terminalId??"")!==e)),this.selectedTerminalId_$()===e&&(this.selectedTerminalId_$.set(""),this.clearInteractiveState())}catch(r){this.runCommandError_$.set(r)}}})}closeTerminal(t){return m(this,null,function*(){let e=(t??"").trim();if(e){this.runCommandError_$.set(null);try{yield this.terminal_AS.closeTerminal(e),this.selectedTerminalId_$()===e&&this.clearInteractiveState(),yield this.loadTerminalsRest()}catch(r){this.runCommandError_$.set(r)}}})}runCommand(t){return m(this,null,function*(){let e=this.selectedTerminalId_$();if(!e){this.runCommandError_$.set(new Error("No terminal selected"));return}this.runCommandError_$.set(null),this.runCommandLoading_$.set(!0);try{let r=yield this.terminal_AS.runCommand(e,t);this.runCommandError_$.set(null),r.interactive===!0&&typeof r.requestId=="string"?(this.interactiveRequestId_$.set(r.requestId),this.interactiveOutput_$.set("")):this.commandResults_$.update(i=>[...i,{output:r.output,success:r.success,error:r.error}])}catch(r){this.runCommandError_$.set(r)}finally{this.runCommandLoading_$.set(!1)}})}ngOnDestroy(){this.eventSubscription&&(this.eventSubscription.unsubscribe(),this.eventSubscription=null)}static \u0275fac=function(e){return new(e||n)};static \u0275prov=_({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{B as a};
2
- //# sourceMappingURL=chunk-VVP5QPE2.js.map
1
+ import{e as $}from"./chunk-QHZI4F2F.js";import{I as h,p as S}from"./chunk-Y3DARUXQ.js";import{C as u,aa as a,h as C,k as m,p as c,xb as y,y as _}from"./chunk-TBMJSIBB.js";var f=C(S());var T=(()=>{class n{baseUrl=`${h.api.baseUrl}/terminals`;http=u(y);getTerminals(){return c(this.http.get(this.baseUrl))}startTerminal(t){return c(this.http.post(`${this.baseUrl}/start`,{path:t.path},{headers:{"Content-Type":"application/json"}}))}runCommand(t,e){return c(this.http.post(`${this.baseUrl}/${encodeURIComponent(t)}/command`,{action:e.action,command:e.command,code:e.code},{headers:{"Content-Type":"application/json"}}))}deleteTerminal(t){return c(this.http.delete(`${this.baseUrl}/${encodeURIComponent(t)}`))}closeTerminal(t){return c(this.http.post(`${this.baseUrl}/${encodeURIComponent(t)}/close`,{},{headers:{"Content-Type":"application/json"}}))}static \u0275fac=function(e){return new(e||n)};static \u0275prov=_({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var R="terminal:list",A="terminal:list:result",q="terminal:start",b="terminal:start:result",p="terminal:attach",N="terminal:command-result",M="terminal:command-output",k="terminal:command-stdin";function E(n){if(n==null||typeof n!="object")return null;let s=n,t=typeof s.terminalId=="string"?s.terminalId:"";if(!t.trim())return null;let e=s.type,r=e==="exec"||e==="cc-runner"||e==="ca-runner"?e:void 0;return{_id:typeof s._id=="string"?s._id:void 0,terminalId:t.trim(),path:typeof s.path=="string"?s.path:void 0,status:typeof s.status=="string"?s.status:void 0,__created:typeof s.__created=="string"?s.__created:void 0,__lastModified:typeof s.__lastModified=="string"?s.__lastModified:void 0,type:r,sessionId:typeof s.sessionId=="string"?s.sessionId:void 0,command:typeof s.command=="string"?s.command:void 0}}var B=(()=>{class n{terminals_$=a([]);terminalsLoading_$=a(!1);terminalsLoadError_$=a(null);selectedTerminalId_$=a("");commandResults_$=a([]);startLoading_$=a(!1);startError_$=a(null);runCommandLoading_$=a(!1);runCommandError_$=a(null);interactiveRequestId_$=a(null);interactiveOutput_$=a("");eventSubscription=null;terminal_AS=u(T);socket_CS=u($);constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(t=>{if(t.event===A){let r=(Array.isArray(t.payload.terminals)?t.payload.terminals:[]).map(i=>E(i)).filter(i=>i!==null);this.terminals_$.set(r),this.terminalsLoading_$.set(!1),t.payload.error!==void 0&&t.payload.error!==null&&this.terminalsLoadError_$.set(t.payload.error)}else if(t.event===b){if(this.startLoading_$.set(!1),t.payload.error!==void 0&&t.payload.error!==null){this.startError_$.set(t.payload.error);return}this.startError_$.set(null);let e=typeof t.payload.terminalId=="string"?t.payload.terminalId:"",r=typeof t.payload.path=="string"?t.payload.path:"";e&&(this.terminals_$.update(i=>i.some(l=>l.terminalId===e)?i:[{terminalId:e,path:r,status:t.payload.status},...i]),this.selectedTerminalId_$.set(e),this.socket_CS.emit(p,{terminalId:e}),this.commandResults_$.set([]),this.clearInteractiveState())}else if(t.event===N){if((typeof t.payload.terminalId=="string"?t.payload.terminalId:"")!==this.selectedTerminalId_$())return;let r=t.payload.interactive===!0,i=t.payload.interactiveEnd===!0,o=typeof t.payload.exitCode=="number"?t.payload.exitCode:void 0;if(r){let d=typeof t.payload.requestId=="string"?t.payload.requestId:"";this.interactiveRequestId_$.set(d||null),this.interactiveOutput_$.set("");return}if(i){let d=this.interactiveOutput_$();this.interactiveRequestId_$.set(null),this.interactiveOutput_$.set("");let g=o!==void 0?`Session ended. Exit code: ${o}`:"Session ended.";this.commandResults_$.update(I=>[...d.trim().length>0?[...I,{output:d.trim(),success:!0}]:I,{output:g,success:!0,interactiveEnd:!0,exitCode:o}]);return}let l={requestId:typeof t.payload.requestId=="string"?t.payload.requestId:void 0,output:typeof t.payload.output=="string"?t.payload.output:"",success:t.payload.success===!0,error:typeof t.payload.error=="string"?t.payload.error:void 0};this.commandResults_$.update(d=>[...d,l])}else if(t.event===M){let e=typeof t.payload.terminalId=="string"?t.payload.terminalId.trim():"",r=typeof t.payload.requestId=="string"?String(t.payload.requestId).trim():"",i=typeof t.payload.chunk=="string"?t.payload.chunk:"",o=(this.interactiveRequestId_$()??"").trim(),l=(this.selectedTerminalId_$()??"").trim();if(o.length===0||r!==o){h.production||f.DyFM_Log.info("CCAP_Terminal | command-output kisz\u0171rve: requestId mismatch",{requestId:r,currentRequestId:o});return}if(e.length>0&&l.length>0&&e!==l){h.production||f.DyFM_Log.info("CCAP_Terminal | command-output kisz\u0171rve: terminalId mismatch",{terminalId:e,selectedId:l});return}this.interactiveOutput_$.update(d=>d+i)}})}requestTerminalListViaSocket(){this.terminalsLoadError_$.set(null),this.terminalsLoading_$.set(!0),this.socket_CS.emit(R,{})}loadTerminalsRest(){return m(this,null,function*(){this.terminalsLoadError_$.set(null),this.terminalsLoading_$.set(!0);try{let t=yield this.terminal_AS.getTerminals(),r=(Array.isArray(t?.terminals)?t.terminals:[]).map(i=>E(i)).filter(i=>i!==null);this.terminals_$.set(r)}catch(t){this.terminalsLoadError_$.set(t)}finally{this.terminalsLoading_$.set(!1)}})}startTerminalRest(t){return m(this,null,function*(){this.startError_$.set(null),this.startLoading_$.set(!0);try{let e=yield this.terminal_AS.startTerminal(t);this.startError_$.set(null),e.terminalId&&(this.terminals_$.update(r=>r.some(o=>o.terminalId===e.terminalId)?r:[{terminalId:e.terminalId,path:e.path,status:e.status},...r]),this.selectedTerminalId_$.set(e.terminalId),this.socket_CS.emit(p,{terminalId:e.terminalId}),this.commandResults_$.set([]),this.clearInteractiveState())}catch(e){this.startError_$.set(e)}finally{this.startLoading_$.set(!1)}})}startTerminalViaSocket(t){this.startError_$.set(null),this.startLoading_$.set(!0),this.socket_CS.emit(q,{path:t.path})}sendStdin(t){let e=this.selectedTerminalId_$(),r=this.interactiveRequestId_$();!e||!r||this.socket_CS.emit(k,{terminalId:e,requestId:r,data:typeof t=="string"?t:""})}clearInteractiveState(){this.interactiveRequestId_$.set(null),this.interactiveOutput_$.set("")}attachToTerminal(t){this.selectedTerminalId_$.set(t),this.socket_CS.emit(p,{terminalId:t}),this.commandResults_$.set([]),this.clearInteractiveState()}deleteTerminal(t){return m(this,null,function*(){let e=(t??"").trim();if(e){this.runCommandError_$.set(null);try{yield this.terminal_AS.deleteTerminal(e),this.terminals_$.update(r=>r.filter(i=>(i.terminalId??"")!==e)),this.selectedTerminalId_$()===e&&(this.selectedTerminalId_$.set(""),this.clearInteractiveState())}catch(r){this.runCommandError_$.set(r)}}})}closeTerminal(t){return m(this,null,function*(){let e=(t??"").trim();if(e){this.runCommandError_$.set(null);try{yield this.terminal_AS.closeTerminal(e),this.selectedTerminalId_$()===e&&this.clearInteractiveState(),yield this.loadTerminalsRest()}catch(r){this.runCommandError_$.set(r)}}})}runCommand(t){return m(this,null,function*(){let e=this.selectedTerminalId_$();if(!e){this.runCommandError_$.set(new Error("No terminal selected"));return}this.runCommandError_$.set(null),this.runCommandLoading_$.set(!0);try{let r=yield this.terminal_AS.runCommand(e,t);this.runCommandError_$.set(null),r.interactive===!0&&typeof r.requestId=="string"?(this.interactiveRequestId_$.set(r.requestId),this.interactiveOutput_$.set("")):this.commandResults_$.update(i=>[...i,{output:r.output,success:r.success,error:r.error}])}catch(r){this.runCommandError_$.set(r)}finally{this.runCommandLoading_$.set(!1)}})}ngOnDestroy(){this.eventSubscription&&(this.eventSubscription.unsubscribe(),this.eventSubscription=null)}static \u0275fac=function(e){return new(e||n)};static \u0275prov=_({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();export{B as a};
2
+ //# sourceMappingURL=chunk-CUA2OS6E.js.map
@@ -1,2 +1,2 @@
1
- import{b as a}from"./chunk-V2FE4UOS.js";var f=class{static extract(t){if(t.toolName)return t.toolName;if(t.rawData){let s=t.rawData.name??t.rawData.tool_name??t.rawData.last_tool_name;if(typeof s=="string")return s}let o=t.bodyText.indexOf(":");return o>0?t.bodyText.substring(0,o).trim():t.bodyText.trim()}};var b=class e{static DEFAULT_GROUPABLE_TOOLS=new Set(["Read","Bash","Grep","Glob"]);static DEFAULT_MIN_GROUP_SIZE=2;static groupSubAgentItems(t,o){let s=new Map;for(let r=0;r<t.length;r++){let n=t[r];if(n.kind===a.tool&&n.toolName==="Agent"){let i=e.resolveAgentId(n);i&&s.set(i,{item:n,index:r})}}if(!s.size)return t;let c=new Map,d=new Set;for(let r=0;r<t.length;r++){let n=t[r];if(n.parentAgentId&&s.has(n.parentAgentId)){let i=c.get(n.parentAgentId)??[];i.push(n),c.set(n.parentAgentId,i),d.add(r)}}let l=[];for(let r=0;r<t.length;r++){if(d.has(r))continue;let n=t[r];if(n.kind===a.tool&&n.toolName==="Agent"){let i=e.resolveAgentId(n),p=c.get(i)??[],g=[n,...p],I=e.buildSubAgentLabel(n),A=e.extractSubagentType(n),y=e.groupConsecutiveToolItems(g,o);l.push({listKey:e.newListKey(),kind:a.subAgentGroup,bodyText:I,groupItems:y,groupToolName:A||"Agent",rawData:n.rawData})}else l.push(n)}return l}static groupConsecutiveToolItems(t,o){let s=o?.groupableTools??e.DEFAULT_GROUPABLE_TOOLS,c=o?.minGroupSize??e.DEFAULT_MIN_GROUP_SIZE,d=[],l=[],r="",n=()=>{if(!l.length)return;let i=l.filter(p=>p.kind===a.tool).length;i>=c?d.push({listKey:e.newListKey(),kind:a.toolGroup,bodyText:`${r} \xD7 ${i}`,groupItems:l,groupToolName:r}):d.push(...l),l=[],r=""};for(let i of t){if(i.kind===a.tool){let p=f.extract(i);if(s.has(p)){r&&r!==p&&n(),r=p,l.push(i);continue}}if(i.kind===a.toolResult&&l.length){l.push(i);continue}n(),d.push(i)}return n(),d}static resolveAgentId(t){return t.toolCallId?t.toolCallId:t.rawData&&typeof t.rawData.id=="string"?t.rawData.id:""}static extractSubagentType(t){let o=t.rawData?.input;if(!o||typeof o!="object")return"";let s=o.subagent_type;return typeof s=="string"?s:""}static extractDescription(t){let o=t.rawData?.input;if(!o||typeof o!="object")return"";let s=o.description;return typeof s=="string"?s:""}static buildSubAgentLabel(t){let o=e.extractSubagentType(t),s=e.extractDescription(t);return o?`${o}: ${s||"..."}`:s||"Sub-agent"}static newListKey(){return globalThis.crypto.randomUUID()}};var u=function(e){return e.user="user",e.assistant="assistant",e.tool="tool",e.toolResult="tool-result",e.status="status",e.error="error",e.info="info",e.result="result",e.thinking="thinking",e.statusUpdate="status-update",e}(u||{});var h=class e{static fromAssembledMessage(t,o){let s=e.mapRoleToKind(t.messageRole),c=t.toolResult?{text:t.toolResult.text,expandableContent:t.toolResult.expandableContent,rawData:t.toolResult.rawData,isError:t.toolResult.isError}:void 0,d=t.messageRole===u.tool&&t.toolName==="Edit"&&!!t.expandableContent;return{listKey:t.messageKey,kind:s,bodyText:t.bodyText,timestampIso:t.timestamp,toolName:t.toolName,expandableContent:t.expandableContent,pairedResult:c,rawData:t.rawData,subtype:t.subtype,isUserAligned:t.isUserAligned,headerStatusDot:t.headerStatusDot==="error"?"error":void 0,flags:{showCopy:!0,showRawInfo:!0,useEditDiffForExpandable:d},tts:e.buildTts(t,o),toolCallId:t.toolCallId,parentAgentId:t.parentAgentId}}static buildTts(t,o){if(!(!o||!(t.messageRole===u.user||t.messageRole===u.assistant)||!t.bodyText.trim().length))return{messageKey:t.messageKey,sessionId:o.sessionId,role:t.messageRole,content:t.bodyText,timestampIso:t.timestamp,hasTtsAudio:o.cachedKeys.has(t.messageKey)}}static mapRoleToKind(t){switch(t){case u.user:return a.userPrompt;case u.assistant:return a.assistant;case u.tool:return a.tool;case u.toolResult:return a.toolResult;case u.status:return a.status;case u.error:return a.error;case u.info:return a.info;case u.result:return a.result;case u.thinking:return a.thinking;case u.statusUpdate:return a.statusUpdate;default:return a.info}}};export{b as a,h as b};
2
- //# sourceMappingURL=chunk-HVEG7TDX.js.map
1
+ import{b as a}from"./chunk-5E5W3DFK.js";var f=class{static extract(t){if(t.toolName)return t.toolName;if(t.rawData){let s=t.rawData.name??t.rawData.tool_name??t.rawData.last_tool_name;if(typeof s=="string")return s}let o=t.bodyText.indexOf(":");return o>0?t.bodyText.substring(0,o).trim():t.bodyText.trim()}};var b=class e{static DEFAULT_GROUPABLE_TOOLS=new Set(["Read","Bash","Grep","Glob"]);static DEFAULT_MIN_GROUP_SIZE=2;static groupSubAgentItems(t,o){let s=new Map;for(let r=0;r<t.length;r++){let n=t[r];if(n.kind===a.tool&&n.toolName==="Agent"){let i=e.resolveAgentId(n);i&&s.set(i,{item:n,index:r})}}if(!s.size)return t;let c=new Map,d=new Set;for(let r=0;r<t.length;r++){let n=t[r];if(n.parentAgentId&&s.has(n.parentAgentId)){let i=c.get(n.parentAgentId)??[];i.push(n),c.set(n.parentAgentId,i),d.add(r)}}let l=[];for(let r=0;r<t.length;r++){if(d.has(r))continue;let n=t[r];if(n.kind===a.tool&&n.toolName==="Agent"){let i=e.resolveAgentId(n),p=c.get(i)??[],g=[n,...p],I=e.buildSubAgentLabel(n),A=e.extractSubagentType(n),y=e.groupConsecutiveToolItems(g,o);l.push({listKey:e.newListKey(),kind:a.subAgentGroup,bodyText:I,groupItems:y,groupToolName:A||"Agent",rawData:n.rawData})}else l.push(n)}return l}static groupConsecutiveToolItems(t,o){let s=o?.groupableTools??e.DEFAULT_GROUPABLE_TOOLS,c=o?.minGroupSize??e.DEFAULT_MIN_GROUP_SIZE,d=[],l=[],r="",n=()=>{if(!l.length)return;let i=l.filter(p=>p.kind===a.tool).length;i>=c?d.push({listKey:e.newListKey(),kind:a.toolGroup,bodyText:`${r} \xD7 ${i}`,groupItems:l,groupToolName:r}):d.push(...l),l=[],r=""};for(let i of t){if(i.kind===a.tool){let p=f.extract(i);if(s.has(p)){r&&r!==p&&n(),r=p,l.push(i);continue}}if(i.kind===a.toolResult&&l.length){l.push(i);continue}n(),d.push(i)}return n(),d}static resolveAgentId(t){return t.toolCallId?t.toolCallId:t.rawData&&typeof t.rawData.id=="string"?t.rawData.id:""}static extractSubagentType(t){let o=t.rawData?.input;if(!o||typeof o!="object")return"";let s=o.subagent_type;return typeof s=="string"?s:""}static extractDescription(t){let o=t.rawData?.input;if(!o||typeof o!="object")return"";let s=o.description;return typeof s=="string"?s:""}static buildSubAgentLabel(t){let o=e.extractSubagentType(t),s=e.extractDescription(t);return o?`${o}: ${s||"..."}`:s||"Sub-agent"}static newListKey(){return globalThis.crypto.randomUUID()}};var u=function(e){return e.user="user",e.assistant="assistant",e.tool="tool",e.toolResult="tool-result",e.status="status",e.error="error",e.info="info",e.result="result",e.thinking="thinking",e.statusUpdate="status-update",e}(u||{});var h=class e{static fromAssembledMessage(t,o){let s=e.mapRoleToKind(t.messageRole),c=t.toolResult?{text:t.toolResult.text,expandableContent:t.toolResult.expandableContent,rawData:t.toolResult.rawData,isError:t.toolResult.isError}:void 0,d=t.messageRole===u.tool&&t.toolName==="Edit"&&!!t.expandableContent;return{listKey:t.messageKey,kind:s,bodyText:t.bodyText,timestampIso:t.timestamp,toolName:t.toolName,expandableContent:t.expandableContent,pairedResult:c,rawData:t.rawData,subtype:t.subtype,isUserAligned:t.isUserAligned,headerStatusDot:t.headerStatusDot==="error"?"error":void 0,flags:{showCopy:!0,showRawInfo:!0,useEditDiffForExpandable:d},tts:e.buildTts(t,o),toolCallId:t.toolCallId,parentAgentId:t.parentAgentId}}static buildTts(t,o){if(!(!o||!(t.messageRole===u.user||t.messageRole===u.assistant)||!t.bodyText.trim().length))return{messageKey:t.messageKey,sessionId:o.sessionId,role:t.messageRole,content:t.bodyText,timestampIso:t.timestamp,hasTtsAudio:o.cachedKeys.has(t.messageKey)}}static mapRoleToKind(t){switch(t){case u.user:return a.userPrompt;case u.assistant:return a.assistant;case u.tool:return a.tool;case u.toolResult:return a.toolResult;case u.status:return a.status;case u.error:return a.error;case u.info:return a.info;case u.result:return a.result;case u.thinking:return a.thinking;case u.statusUpdate:return a.statusUpdate;default:return a.info}}};export{b as a,h as b};
2
+ //# sourceMappingURL=chunk-DB33SOJ3.js.map