@futdevpro/ccap 1.1.3002 → 1.1.3013

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 (188) hide show
  1. package/client-dist/{agent-instances.module-VLGX2Z7Z.js → agent-instances.module-SZDIKSIR.js} +2 -2
  2. package/client-dist/ca.module-JYSD4TBY.js +5 -0
  3. package/client-dist/ca.module-JYSD4TBY.js.map +7 -0
  4. package/client-dist/{cc-usage-dashboard.component-D6CNJHB5.js → cc-usage-dashboard.component-O4VDGFYY.js} +2 -2
  5. package/client-dist/{cc.module-T3NJWMZ5.js → cc.module-HHIOLYUZ.js} +4 -4
  6. package/client-dist/cc.module-HHIOLYUZ.js.map +7 -0
  7. package/client-dist/{chunk-7VUQTBJ2.js → chunk-2BZ4R623.js} +2 -2
  8. package/client-dist/{chunk-YWW2VAZR.js → chunk-2V2O2JAL.js} +2 -2
  9. package/client-dist/{chunk-3SYXOECP.js → chunk-3KB6O77F.js} +2 -2
  10. package/client-dist/{chunk-PTS77H25.js → chunk-4ZEPJMCK.js} +2 -2
  11. package/client-dist/{chunk-64K7CP3A.js → chunk-5ATMD4SY.js} +2 -2
  12. package/client-dist/{chunk-W3HNVMKS.js → chunk-5GTIJO5T.js} +2 -2
  13. package/client-dist/{chunk-PVLRUWUC.js → chunk-5UADYWSA.js} +2 -2
  14. package/client-dist/{chunk-36LPXL3M.js → chunk-5Z43LN5U.js} +2 -2
  15. package/client-dist/{chunk-3JQ2UHMM.js → chunk-6HMRYXOI.js} +2 -2
  16. package/client-dist/{chunk-6227S2CN.js → chunk-6JLLWGQF.js} +2 -2
  17. package/client-dist/{chunk-EGZ2ZMS3.js → chunk-72Z4K7WC.js} +2 -2
  18. package/client-dist/{chunk-O6IRGFCX.js → chunk-7FGU7NN2.js} +2 -2
  19. package/client-dist/{chunk-SJTW4HLQ.js → chunk-A6TWPSUA.js} +2 -2
  20. package/client-dist/{chunk-2IYGO6RM.js → chunk-APYQ4B27.js} +2 -2
  21. package/client-dist/{chunk-SAC7F2CB.js → chunk-AVH4FZ6Z.js} +2 -2
  22. package/client-dist/{chunk-FOL6X3TR.js → chunk-B24YBK2I.js} +2 -2
  23. package/client-dist/{chunk-5HYEA5IO.js → chunk-BGD62M7R.js} +2 -2
  24. package/client-dist/{chunk-5DUG67IY.js → chunk-BKR6H3SJ.js} +2 -2
  25. package/client-dist/{chunk-OVU6SA42.js → chunk-BWW75POL.js} +2 -2
  26. package/client-dist/{chunk-WNQYZI4D.js → chunk-DC4EFEQU.js} +2 -2
  27. package/client-dist/{chunk-SJ6KKDJT.js → chunk-EEOSB2P7.js} +2 -2
  28. package/client-dist/{chunk-W7OH67K2.js → chunk-EVREGV4D.js} +2 -2
  29. package/client-dist/{chunk-S46BSLUB.js → chunk-FD6QRJ7H.js} +2 -2
  30. package/client-dist/{chunk-JLF2BDJU.js → chunk-G5CYHOH4.js} +2 -2
  31. package/client-dist/{chunk-2ZTUWDCN.js → chunk-GB5ESWPG.js} +2 -2
  32. package/client-dist/{chunk-SBJAWWHF.js → chunk-GERQQL7M.js} +2 -2
  33. package/client-dist/{chunk-SBJAWWHF.js.map → chunk-GERQQL7M.js.map} +3 -3
  34. package/client-dist/{chunk-ZZ7RWOLH.js → chunk-GHUVIUFQ.js} +2 -2
  35. package/client-dist/{chunk-7YT7BGBD.js → chunk-GKKG77XM.js} +2 -2
  36. package/client-dist/{chunk-ZZRTMXBT.js → chunk-GPAB3FYW.js} +2 -2
  37. package/client-dist/chunk-GWFZKTPN.js +4 -0
  38. package/client-dist/{chunk-OXEKAYMY.js.map → chunk-GWFZKTPN.js.map} +3 -3
  39. package/client-dist/{chunk-TIJCR5DW.js → chunk-HHHXXHAW.js} +2 -2
  40. package/client-dist/{chunk-TIJCR5DW.js.map → chunk-HHHXXHAW.js.map} +1 -1
  41. package/client-dist/{chunk-NCOPOED7.js → chunk-HK42XXL4.js} +2 -2
  42. package/client-dist/{chunk-VQSRIIPK.js → chunk-KB4N3NQJ.js} +2 -2
  43. package/client-dist/{chunk-7SCYMYZG.js → chunk-KM4V4ZQZ.js} +2 -2
  44. package/client-dist/{chunk-XKS3GVP3.js → chunk-KYW5YFHW.js} +2 -2
  45. package/client-dist/{chunk-QXIUTGNM.js → chunk-LUJCXLWT.js} +2 -2
  46. package/client-dist/{chunk-3LPBF4AU.js → chunk-M5ZAOY2Y.js} +2 -2
  47. package/client-dist/{chunk-TNGH7PJP.js → chunk-MJJNEYN2.js} +2 -2
  48. package/client-dist/{chunk-IGWJMU5B.js → chunk-NEGX5HML.js} +2 -2
  49. package/client-dist/{chunk-KHVPVWG7.js → chunk-NGFX2IRI.js} +2 -2
  50. package/client-dist/{chunk-E6DWNZNG.js → chunk-NH77DCAE.js} +2 -2
  51. package/client-dist/{chunk-CN76LOPU.js → chunk-NLYXP47X.js} +2 -2
  52. package/client-dist/chunk-P3IBAIKH.js +18 -0
  53. package/client-dist/chunk-P3IBAIKH.js.map +7 -0
  54. package/client-dist/{chunk-FID2RUXN.js → chunk-PBI4ECTK.js} +2 -2
  55. package/client-dist/{chunk-I4V3JDZC.js → chunk-QF6DLZ66.js} +2 -2
  56. package/client-dist/{chunk-ZLCRMQAK.js → chunk-QFD5FURA.js} +2 -2
  57. package/client-dist/{chunk-AQD6DEHR.js → chunk-QGUF3JAC.js} +2 -2
  58. package/client-dist/{chunk-IUCQWZ34.js → chunk-RKWECXJW.js} +2 -2
  59. package/client-dist/{chunk-ZW4M7CJ2.js → chunk-THHGTIDJ.js} +2 -2
  60. package/client-dist/{chunk-4AVVQGND.js → chunk-TZIBF6RE.js} +2 -2
  61. package/client-dist/{chunk-A3RMSX34.js → chunk-WI4NEQOH.js} +2 -2
  62. package/client-dist/{chunk-GNWPRBF5.js → chunk-X2RTRMJW.js} +2 -2
  63. package/client-dist/{chunk-DPXSAO23.js → chunk-X4RAIC74.js} +2 -2
  64. package/client-dist/{chunk-7MZ4N75F.js → chunk-XJDLUP33.js} +2 -2
  65. package/client-dist/{chunk-ZPE6HI3H.js → chunk-YR6NTERF.js} +2 -2
  66. package/client-dist/{chunk-P7Z33WJF.js → chunk-ZTXRLQE6.js} +2 -2
  67. package/client-dist/{consultant.module-J2JDO2WS.js → consultant.module-UR6QVGHX.js} +2 -2
  68. package/client-dist/{crd.module-SCW4OTC2.js → crd.module-VBL7AIQU.js} +2 -2
  69. package/client-dist/{dashboard.module-F55QGGVH.js → dashboard.module-NM4D5NW3.js} +2 -2
  70. package/client-dist/{do.module-7FRBSMAA.js → do.module-IILFMQ4A.js} +2 -2
  71. package/client-dist/{document-library.module-B6VXHRG7.js → document-library.module-2DB3MQAW.js} +2 -2
  72. package/client-dist/{embedding-eval.module-NPC3TEIO.js → embedding-eval.module-WSWE67IJ.js} +2 -2
  73. package/client-dist/{embedding-registry.module-LIVVEPZY.js → embedding-registry.module-SG3ZJKPN.js} +2 -2
  74. package/client-dist/{err.module-YOIHNORT.js → err.module-ALQB32AB.js} +2 -2
  75. package/client-dist/{feedback.module-V5KVPNYZ.js → feedback.module-Y2YSFOAJ.js} +2 -2
  76. package/client-dist/{host-runtime-mcp.module-PHWXY4PV.js → host-runtime-mcp.module-YZ6D6IOC.js} +2 -2
  77. package/client-dist/index.html +2 -2
  78. package/client-dist/{live-dev-pipeline.module-NGFZQDD3.js → live-dev-pipeline.module-2IEAOW5B.js} +2 -2
  79. package/client-dist/{logs.module-U22RMCHY.js → logs.module-6654WNYH.js} +2 -2
  80. package/client-dist/{main-E47XWCXH.js → main-P264JJGJ.js} +3 -3
  81. package/client-dist/{master-control-remote-poc.module-EBA63OMO.js → master-control-remote-poc.module-CKHW6KMI.js} +2 -2
  82. package/client-dist/{mobile-app.module-SRY6NVNR.js → mobile-app.module-LLBTOC54.js} +2 -2
  83. package/client-dist/{model-registry.module-UTATZZJR.js → model-registry.module-MLQXILLQ.js} +2 -2
  84. package/client-dist/oc.module-IBQUD7B7.js +3 -0
  85. package/client-dist/oc.module-IBQUD7B7.js.map +7 -0
  86. package/client-dist/{orc.module-MKANMSGC.js → orc.module-EHJZJMOJ.js} +2 -2
  87. package/client-dist/{project-management.module-4LL5UVW5.js → project-management.module-QW2OUHID.js} +2 -2
  88. package/client-dist/project-source-routed.module-ZRIGHKPE.js +2 -0
  89. package/client-dist/{scheduler.module-COHLY6ZF.js → scheduler.module-3ZZRNJUV.js} +2 -2
  90. package/client-dist/{session.module-JQCXS6ZJ.js → session.module-N6ITSDGW.js} +9 -9
  91. package/client-dist/session.module-N6ITSDGW.js.map +7 -0
  92. package/client-dist/{set.module-PUU5N4MJ.js → set.module-DQOBFJCH.js} +2 -2
  93. package/client-dist/{setup.module-HPV5JS3I.js → setup.module-R2TZA42H.js} +2 -2
  94. package/client-dist/{styles-XKQ3MDLE.css → styles-ETK3TL2N.css} +2 -2
  95. package/client-dist/{styles-XKQ3MDLE.css.map → styles-ETK3TL2N.css.map} +1 -1
  96. package/client-dist/{terminals.module-VIWV443T.js → terminals.module-4NZBPA65.js} +2 -2
  97. package/client-dist/{voice-notes-poc.module-ZNRSQ6XH.js → voice-notes-poc.module-UZUWDFZD.js} +2 -2
  98. package/client-dist/{wfs.module-CIG5GOVA.js → wfs.module-4GKFJ5LB.js} +2 -2
  99. package/package.json +1 -1
  100. package/client-dist/ca.module-FMCAOMOB.js +0 -5
  101. package/client-dist/ca.module-FMCAOMOB.js.map +0 -7
  102. package/client-dist/cc.module-T3NJWMZ5.js.map +0 -7
  103. package/client-dist/chunk-DB44BUNE.js +0 -18
  104. package/client-dist/chunk-DB44BUNE.js.map +0 -7
  105. package/client-dist/chunk-OXEKAYMY.js +0 -4
  106. package/client-dist/oc.module-SVMLBM6T.js +0 -3
  107. package/client-dist/oc.module-SVMLBM6T.js.map +0 -7
  108. package/client-dist/project-source-routed.module-DSUCIWHV.js +0 -2
  109. package/client-dist/session.module-JQCXS6ZJ.js.map +0 -7
  110. /package/client-dist/{agent-instances.module-VLGX2Z7Z.js.map → agent-instances.module-SZDIKSIR.js.map} +0 -0
  111. /package/client-dist/{cc-usage-dashboard.component-D6CNJHB5.js.map → cc-usage-dashboard.component-O4VDGFYY.js.map} +0 -0
  112. /package/client-dist/{chunk-7VUQTBJ2.js.map → chunk-2BZ4R623.js.map} +0 -0
  113. /package/client-dist/{chunk-YWW2VAZR.js.map → chunk-2V2O2JAL.js.map} +0 -0
  114. /package/client-dist/{chunk-3SYXOECP.js.map → chunk-3KB6O77F.js.map} +0 -0
  115. /package/client-dist/{chunk-PTS77H25.js.map → chunk-4ZEPJMCK.js.map} +0 -0
  116. /package/client-dist/{chunk-64K7CP3A.js.map → chunk-5ATMD4SY.js.map} +0 -0
  117. /package/client-dist/{chunk-W3HNVMKS.js.map → chunk-5GTIJO5T.js.map} +0 -0
  118. /package/client-dist/{chunk-PVLRUWUC.js.map → chunk-5UADYWSA.js.map} +0 -0
  119. /package/client-dist/{chunk-36LPXL3M.js.map → chunk-5Z43LN5U.js.map} +0 -0
  120. /package/client-dist/{chunk-3JQ2UHMM.js.map → chunk-6HMRYXOI.js.map} +0 -0
  121. /package/client-dist/{chunk-6227S2CN.js.map → chunk-6JLLWGQF.js.map} +0 -0
  122. /package/client-dist/{chunk-EGZ2ZMS3.js.map → chunk-72Z4K7WC.js.map} +0 -0
  123. /package/client-dist/{chunk-O6IRGFCX.js.map → chunk-7FGU7NN2.js.map} +0 -0
  124. /package/client-dist/{chunk-SJTW4HLQ.js.map → chunk-A6TWPSUA.js.map} +0 -0
  125. /package/client-dist/{chunk-2IYGO6RM.js.map → chunk-APYQ4B27.js.map} +0 -0
  126. /package/client-dist/{chunk-SAC7F2CB.js.map → chunk-AVH4FZ6Z.js.map} +0 -0
  127. /package/client-dist/{chunk-FOL6X3TR.js.map → chunk-B24YBK2I.js.map} +0 -0
  128. /package/client-dist/{chunk-5HYEA5IO.js.map → chunk-BGD62M7R.js.map} +0 -0
  129. /package/client-dist/{chunk-5DUG67IY.js.map → chunk-BKR6H3SJ.js.map} +0 -0
  130. /package/client-dist/{chunk-OVU6SA42.js.map → chunk-BWW75POL.js.map} +0 -0
  131. /package/client-dist/{chunk-WNQYZI4D.js.map → chunk-DC4EFEQU.js.map} +0 -0
  132. /package/client-dist/{chunk-SJ6KKDJT.js.map → chunk-EEOSB2P7.js.map} +0 -0
  133. /package/client-dist/{chunk-W7OH67K2.js.map → chunk-EVREGV4D.js.map} +0 -0
  134. /package/client-dist/{chunk-S46BSLUB.js.map → chunk-FD6QRJ7H.js.map} +0 -0
  135. /package/client-dist/{chunk-JLF2BDJU.js.map → chunk-G5CYHOH4.js.map} +0 -0
  136. /package/client-dist/{chunk-2ZTUWDCN.js.map → chunk-GB5ESWPG.js.map} +0 -0
  137. /package/client-dist/{chunk-ZZ7RWOLH.js.map → chunk-GHUVIUFQ.js.map} +0 -0
  138. /package/client-dist/{chunk-7YT7BGBD.js.map → chunk-GKKG77XM.js.map} +0 -0
  139. /package/client-dist/{chunk-ZZRTMXBT.js.map → chunk-GPAB3FYW.js.map} +0 -0
  140. /package/client-dist/{chunk-NCOPOED7.js.map → chunk-HK42XXL4.js.map} +0 -0
  141. /package/client-dist/{chunk-VQSRIIPK.js.map → chunk-KB4N3NQJ.js.map} +0 -0
  142. /package/client-dist/{chunk-7SCYMYZG.js.map → chunk-KM4V4ZQZ.js.map} +0 -0
  143. /package/client-dist/{chunk-XKS3GVP3.js.map → chunk-KYW5YFHW.js.map} +0 -0
  144. /package/client-dist/{chunk-QXIUTGNM.js.map → chunk-LUJCXLWT.js.map} +0 -0
  145. /package/client-dist/{chunk-3LPBF4AU.js.map → chunk-M5ZAOY2Y.js.map} +0 -0
  146. /package/client-dist/{chunk-TNGH7PJP.js.map → chunk-MJJNEYN2.js.map} +0 -0
  147. /package/client-dist/{chunk-IGWJMU5B.js.map → chunk-NEGX5HML.js.map} +0 -0
  148. /package/client-dist/{chunk-KHVPVWG7.js.map → chunk-NGFX2IRI.js.map} +0 -0
  149. /package/client-dist/{chunk-E6DWNZNG.js.map → chunk-NH77DCAE.js.map} +0 -0
  150. /package/client-dist/{chunk-CN76LOPU.js.map → chunk-NLYXP47X.js.map} +0 -0
  151. /package/client-dist/{chunk-FID2RUXN.js.map → chunk-PBI4ECTK.js.map} +0 -0
  152. /package/client-dist/{chunk-I4V3JDZC.js.map → chunk-QF6DLZ66.js.map} +0 -0
  153. /package/client-dist/{chunk-ZLCRMQAK.js.map → chunk-QFD5FURA.js.map} +0 -0
  154. /package/client-dist/{chunk-AQD6DEHR.js.map → chunk-QGUF3JAC.js.map} +0 -0
  155. /package/client-dist/{chunk-IUCQWZ34.js.map → chunk-RKWECXJW.js.map} +0 -0
  156. /package/client-dist/{chunk-ZW4M7CJ2.js.map → chunk-THHGTIDJ.js.map} +0 -0
  157. /package/client-dist/{chunk-4AVVQGND.js.map → chunk-TZIBF6RE.js.map} +0 -0
  158. /package/client-dist/{chunk-A3RMSX34.js.map → chunk-WI4NEQOH.js.map} +0 -0
  159. /package/client-dist/{chunk-GNWPRBF5.js.map → chunk-X2RTRMJW.js.map} +0 -0
  160. /package/client-dist/{chunk-DPXSAO23.js.map → chunk-X4RAIC74.js.map} +0 -0
  161. /package/client-dist/{chunk-7MZ4N75F.js.map → chunk-XJDLUP33.js.map} +0 -0
  162. /package/client-dist/{chunk-ZPE6HI3H.js.map → chunk-YR6NTERF.js.map} +0 -0
  163. /package/client-dist/{chunk-P7Z33WJF.js.map → chunk-ZTXRLQE6.js.map} +0 -0
  164. /package/client-dist/{consultant.module-J2JDO2WS.js.map → consultant.module-UR6QVGHX.js.map} +0 -0
  165. /package/client-dist/{crd.module-SCW4OTC2.js.map → crd.module-VBL7AIQU.js.map} +0 -0
  166. /package/client-dist/{dashboard.module-F55QGGVH.js.map → dashboard.module-NM4D5NW3.js.map} +0 -0
  167. /package/client-dist/{do.module-7FRBSMAA.js.map → do.module-IILFMQ4A.js.map} +0 -0
  168. /package/client-dist/{document-library.module-B6VXHRG7.js.map → document-library.module-2DB3MQAW.js.map} +0 -0
  169. /package/client-dist/{embedding-eval.module-NPC3TEIO.js.map → embedding-eval.module-WSWE67IJ.js.map} +0 -0
  170. /package/client-dist/{embedding-registry.module-LIVVEPZY.js.map → embedding-registry.module-SG3ZJKPN.js.map} +0 -0
  171. /package/client-dist/{err.module-YOIHNORT.js.map → err.module-ALQB32AB.js.map} +0 -0
  172. /package/client-dist/{feedback.module-V5KVPNYZ.js.map → feedback.module-Y2YSFOAJ.js.map} +0 -0
  173. /package/client-dist/{host-runtime-mcp.module-PHWXY4PV.js.map → host-runtime-mcp.module-YZ6D6IOC.js.map} +0 -0
  174. /package/client-dist/{live-dev-pipeline.module-NGFZQDD3.js.map → live-dev-pipeline.module-2IEAOW5B.js.map} +0 -0
  175. /package/client-dist/{logs.module-U22RMCHY.js.map → logs.module-6654WNYH.js.map} +0 -0
  176. /package/client-dist/{main-E47XWCXH.js.map → main-P264JJGJ.js.map} +0 -0
  177. /package/client-dist/{master-control-remote-poc.module-EBA63OMO.js.map → master-control-remote-poc.module-CKHW6KMI.js.map} +0 -0
  178. /package/client-dist/{mobile-app.module-SRY6NVNR.js.map → mobile-app.module-LLBTOC54.js.map} +0 -0
  179. /package/client-dist/{model-registry.module-UTATZZJR.js.map → model-registry.module-MLQXILLQ.js.map} +0 -0
  180. /package/client-dist/{orc.module-MKANMSGC.js.map → orc.module-EHJZJMOJ.js.map} +0 -0
  181. /package/client-dist/{project-management.module-4LL5UVW5.js.map → project-management.module-QW2OUHID.js.map} +0 -0
  182. /package/client-dist/{project-source-routed.module-DSUCIWHV.js.map → project-source-routed.module-ZRIGHKPE.js.map} +0 -0
  183. /package/client-dist/{scheduler.module-COHLY6ZF.js.map → scheduler.module-3ZZRNJUV.js.map} +0 -0
  184. /package/client-dist/{set.module-PUU5N4MJ.js.map → set.module-DQOBFJCH.js.map} +0 -0
  185. /package/client-dist/{setup.module-HPV5JS3I.js.map → setup.module-R2TZA42H.js.map} +0 -0
  186. /package/client-dist/{terminals.module-VIWV443T.js.map → terminals.module-4NZBPA65.js.map} +0 -0
  187. /package/client-dist/{voice-notes-poc.module-ZNRSQ6XH.js.map → voice-notes-poc.module-UZUWDFZD.js.map} +0 -0
  188. /package/client-dist/{wfs.module-CIG5GOVA.js.map → wfs.module-4GKFJ5LB.js.map} +0 -0
@@ -1,18 +0,0 @@
1
- import{a as ge}from"./chunk-5DUG67IY.js";import{a as Se,b as he}from"./chunk-O6IRGFCX.js";import{a as ue,b as me}from"./chunk-AQD6DEHR.js";import{a as xe,b as J}from"./chunk-L44637OO.js";import{a as pe}from"./chunk-2IYGO6RM.js";import{b as ce}from"./chunk-SJ6KKDJT.js";import{d as _e}from"./chunk-ZZ7RWOLH.js";import{d as W,h as fe}from"./chunk-W7OH67K2.js";import{a as de}from"./chunk-FLAJXIYW.js";import{f as ie,i as oe,n as ae,o as re,p as se,v as le}from"./chunk-EO4DNTT4.js";import{p as Te}from"./chunk-TIJCR5DW.js";import{$a as V,C as v,D as y,Fa as s,Ga as k,Ha as f,Ia as ee,J as h,K as C,L as I,M as Q,Q as X,T as q,Ta as b,U as O,Ua as T,Va as te,Z as r,aa as $,ab as ne,bb as j,da as m,fa as D,ga as p,h as $e,hb as g,ia as M,k as G,la as u,mb as P,na as Z,oa as R,pa as F,pb as N,qa as a,ra as o,sa as S,ua as E,ub as B,va as _,wa as c,y as U}from"./chunk-TBMJSIBB.js";var ve=$e(Te());var Y=(()=>{class t{static SESSION_LIMIT_TYPE="five_hour";static WEEKLY_LIMIT_TYPE="seven_day";static formatResetText(e){if(!e?.resetsAt)return"";let i=new Date(e.resetsAt*1e3),n=new Date,l=i.getTime()-n.getTime();if(l<=0)return"expired";let x=Math.floor(l/6e4),w=Math.floor(x/60),A=x%60;return w>0?`${w}h ${A}m`:`${A}m`}static formatResetTextPrecise(e){if(!e?.resetsAt)return"";let i=new Date(e.resetsAt*1e3),n=new Date,l=Math.floor((i.getTime()-n.getTime())/1e3);if(l<=0)return"expired";let x=Math.floor(l/86400),w=Math.floor(l%86400/3600),A=Math.floor(l%3600/60),Ie=l%60,H=[];return x&&H.push(`${x}d`),(x||w)&&H.push(`${w}h`),(x||w||A)&&H.push(`${A}m`),H.push(`${Ie}s`),H.join(" ")}static computeUtilizationPercent(e){if(!e)return 0;let i=typeof e.utilization=="number"?e.utilization:0,n=Math.max(0,Math.min(1,i));return Math.round(n*100)}static computeThresholdPercent(e){if(!e)return 0;let i=typeof e.surpassedThreshold=="number"?e.surpassedThreshold:0,n=Math.max(0,Math.min(1,i));return Math.round(n*100)}static isOverThreshold(e){if(!e)return!1;let i=typeof e.utilization=="number"?e.utilization:0,n=typeof e.surpassedThreshold=="number"?e.surpassedThreshold:1;return i>=n&&n>0}static formatLimitScopeLabel(e){return e?.rateLimitType?e.rateLimitType===t.SESSION_LIMIT_TYPE?"Session":e.rateLimitType===t.WEEKLY_LIMIT_TYPE?"Weekly":e.rateLimitType:""}}return t})();function Me(t,d){if(t&1&&(a(0,"div",0)(1,"span",1),s(2," Rate limit "),o(),a(3,"span",2),s(4,"Scope"),o(),a(5,"span",3),s(6),o(),a(7,"span",2),s(8,"St\xE1tusz"),o(),a(9,"span",3),s(10),o(),a(11,"span",2),s(12,"Utilization"),o(),a(13,"span",4),s(14),o(),a(15,"span",2),s(16,"Reset"),o(),a(17,"span",4),s(18),o(),a(19,"span",2),s(20,"Utols\xF3 \xE9szlel\xE9s"),o(),a(21,"span",5),s(22),V(23,"date"),o()()),t&2){let e=d,i=c();r(6),k(i.limitScopeLabel_$()||"\u2014"),r(3),M("text-neonRed",e.status==="limited")("text-yellow-400",e.status==="allowed_warning")("text-neutral-300",e.status==="allowed"),r(),f(" ",e.status||"\u2014"," "),r(4),f("",i.utilizationPercent_$(),"%"),r(4),k(i.resetText_$()||"\u2014"),r(4),f(" ",j(23,11,e.receivedAt,"yyyy-MM-dd HH:mm:ss")||"\u2014"," ")}}var ye=(()=>{class t{claudeCode_AS=v(ue);_ccapId="";set ccapId(e){this._ccapId=e?.trim()??"",this.refreshRateLimitState()}get ccapId(){return this._ccapId}rateLimitInfo_$=$(null);utilizationPercent_$=g(()=>Y.computeUtilizationPercent(this.rateLimitInfo_$()));resetText_$=g(()=>Y.formatResetText(this.rateLimitInfo_$()));limitScopeLabel_$=g(()=>Y.formatLimitScopeLabel(this.rateLimitInfo_$()));refreshRateLimitState(){if(!this._ccapId){this.rateLimitInfo_$.set(null);return}this.claudeCode_AS.getRateLimitState({ccapId:this._ccapId}).then(e=>{let i=me.mapServerItemsToClientInfo(e.items);this.rateLimitInfo_$.set(i)}).catch(e=>{ve.DyFM_Log.warn(`s-cc-rate-limit-info | rate-limit fetch failed | ccapId: ${this._ccapId} | err: ${String(e)}`),this.rateLimitInfo_$.set(null)})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-cc-rate-limit-info"]],inputs:{ccapId:"ccapId"},standalone:!0,features:[b],decls:1,vars:1,consts:[[1,"grid","grid-cols-[minmax(8rem,auto)_1fr]","gap-x-3","gap-y-2","text-xs","text-neutral-200"],[1,"col-span-2","text-[11px]","uppercase","tracking-wider","text-neutral-500"],[1,"text-neutral-500","shrink-0"],[1,"whitespace-nowrap"],[1,"whitespace-nowrap","font-mono"],[1,"font-mono","text-[11px]","whitespace-nowrap"]],template:function(i,n){if(i&1&&m(0,Me,24,14,"div",0),i&2){let l;u((l=n.rateLimitInfo_$())?0:-1,l)}},dependencies:[B,N],encapsulation:2})}return t})();function Oe(t,d){if(t&1&&(a(0,"span",1),s(1,"Instance presence"),o(),a(2,"span",4),S(3,"app-s-instance-presence-badge",8),o()),t&2){let e=d;r(3),p("presence",e.presence)("lastHeartbeatAt",e.lastHeartbeatAt)("wsConnected",e.wsConnected)}}function De(t,d){if(t&1&&(a(0,"span",9),s(1,"Run / tev\xE9kenys\xE9g"),o(),a(2,"span",10)(3,"span",11),s(4),o(),a(5,"span",12),s(6),o()(),a(7,"span",1),s(8,"Utols\xF3 aktivit\xE1s"),o(),a(9,"span",13),s(10),V(11,"date"),o(),a(12,"span",1),s(13,"Utols\xF3 \xFCzenet"),o(),a(14,"span",14),s(15),o()),t&2){let e=d;r(4),k(e.activeRunPhase||"\u2014"),r(2),k(e.activitySummary||"\u2014"),r(4),f(" ",j(11,4,e.lastActivityAt,"yyyy-MM-dd HH:mm:ss")||"\u2014"," "),r(5),k(e.lastMessage||"\u2014")}}var be=(()=>{class t{row;presence=void 0;static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-instance-detail-view"]],inputs:{row:"row",presence:"presence"},standalone:!0,features:[b],decls:43,vars:18,consts:[[1,"grid","grid-cols-[minmax(8rem,auto)_1fr]","gap-x-3","gap-y-2","text-xs","text-neutral-200"],[1,"text-neutral-500","shrink-0"],[1,"font-mono","break-all"],[1,"break-all"],[1,"whitespace-nowrap"],[1,"font-mono","whitespace-nowrap"],[1,"mt-2","pt-2","border-t","border-neutral-800"],[3,"ccapId"],[3,"presence","lastHeartbeatAt","wsConnected"],[1,"text-neutral-500","shrink-0","self-start","pt-0.5"],[1,"break-words"],[1,"font-mono","text-[11px]","text-neutral-400","block"],[1,"text-neutral-300"],[1,"font-mono","text-[11px]","whitespace-nowrap"],[1,"break-words","text-neutral-300"]],template:function(i,n){if(i&1&&(a(0,"div",0)(1,"span",1),s(2,"instanceKey"),o(),a(3,"span",2),s(4),o(),a(5,"span",1),s(6,"N\xE9v"),o(),a(7,"span",3),s(8),o(),a(9,"span",1),s(10,"St\xE1tusz"),o(),a(11,"span",4),s(12),o(),m(13,Oe,4,3),a(14,"span",1),s(15,"Session presence"),o(),a(16,"span",4),s(17),o(),m(18,De,16,7),a(19,"span",1),s(20,"MAC"),o(),a(21,"span",2),s(22),o(),a(23,"span",1),s(24,"Install path"),o(),a(25,"span",2),s(26),o(),a(27,"span",1),s(28,"hostName"),o(),a(29,"span",3),s(30),o(),a(31,"span",1),s(32,"registry __created"),o(),a(33,"span",5),s(34),V(35,"date"),o(),a(36,"span",1),s(37,"registry __updated"),o(),a(38,"span",5),s(39),V(40,"date"),o()(),a(41,"div",6),S(42,"app-s-cc-rate-limit-info",7),o()),i&2){let l,x;r(4),k(n.row.registry.instanceKey||"\u2014"),r(4),k((n.row.instanceData==null||n.row.instanceData.name==null?null:n.row.instanceData.name.trim())||"\u2014"),r(4),k((n.row.instanceData==null?null:n.row.instanceData.status)||"\u2014"),r(),u((l=n.presence)?13:-1,l),r(4),f(" ",(n.row.instanceData==null||n.row.instanceData.sessionStatuses==null||n.row.instanceData.sessionStatuses[0]==null?null:n.row.instanceData.sessionStatuses[0].presence)||"\u2014"," "),r(),u((x=n.row.instanceData==null||n.row.instanceData.sessionStatuses==null?null:n.row.instanceData.sessionStatuses[0])?18:-1,x),r(4),k(n.row.registry.primaryMacAddress||"\u2014"),r(4),k(n.row.registry.installLocationPath||"\u2014"),r(4),k(n.row.registry.hostName||"\u2014"),r(4),f(" ",j(35,12,n.row.registry.__created,"yyyy-MM-dd HH:mm:ss")||"\u2014"," "),r(5),f(" ",j(40,15,n.row.registry.__updated,"yyyy-MM-dd HH:mm:ss")||"\u2014"," "),r(3),p("ccapId",n.row.registry.instanceKey||"")}},dependencies:[B,N,ye,J],encapsulation:2})}return t})();var Ae=(t,d)=>d.instanceKey,Re=t=>({"bg-ccapAccent/10":t});function Fe(t,d){if(t&1&&S(0,"app-s-instance-presence-badge",5),t&2){let e=d;p("presence",e.presence)("lastHeartbeatAt",e.lastHeartbeatAt)("wsConnected",e.wsConnected)("showLabel",!1)}}function Ve(t,d){t&1&&(a(0,"span",6),s(1,"(local)"),o())}function Le(t,d){t&1&&S(0,"span",7)}function ze(t,d){if(t&1){let e=E();a(0,"div",2)(1,"button",4),_("click",function(){let n,l=h(e).$implicit,x=c();return C(x.handleSelectInstance((n=l.instanceKey)!==null&&n!==void 0?n:""))}),m(2,Fe,1,4,"app-s-instance-presence-badge",5),s(3),m(4,Ve,2,0,"span",6)(5,Le,1,0,"span",7),o(),a(6,"button",8),_("click",function(){let n,l=h(e).$implicit,x=c();return C(x.handleInfoClick((n=l.instanceKey)!==null&&n!==void 0?n:""))}),s(7," i "),o()()}if(t&2){let e,i=d.$implicit,n=c();r(),M("border-ccapAccent",n.isSelected(i))("text-ccapAccent",n.isSelected(i))("border-neonDefault",!n.isSelected(i))("text-neutral-400",!n.isSelected(i))("hover:text-neutral-200",!n.isSelected(i))("hover:border-neutral-500",!n.isSelected(i)),p("ngClass",te(17,Re,n.isSelected(i))),r(),u((e=n.getPresenceForRow(i))?2:-1,e),r(),f(" ",n.getDisplayLabel(i)," "),r(),u(n.isLocal(i)?4:-1),r(),u(n.getActiveSessionForRow(i)?5:-1)}}function je(t,d){t&1&&(a(0,"span",3),s(1,"loading..."),o())}var we=(()=>{class t{peiContext_DS=v(pe);presenceMap=new Map;activeSessionMap=new Map;infoRequested=new X;instances_$=g(()=>this.peiContext_DS.instanceList_$());selectedCcapId_$=g(()=>this.peiContext_DS.activeCcapId_$());localKey_$=g(()=>this.peiContext_DS.localInstanceKey_$());ngOnInit(){this.peiContext_DS.initialize()}handleSelectInstance(e){this.peiContext_DS.selectInstance(e)}handleInfoClick(e){this.infoRequested.emit({instanceKey:e})}getDisplayLabel(e){let i=e.hostName??"",n=(e.instanceKey??"").slice(-6);return i?`${i} (${n})`:n||"?"}isSelected(e){return(e.instanceKey??"")===this.selectedCcapId_$()}isLocal(e){return(e.instanceKey??"")===this.localKey_$()}getPresenceForRow(e){let i=e.instanceKey??"";return i?this.presenceMap.get(i)??null:null}getActiveSessionForRow(e){let i=e.instanceKey??"";return i?this.activeSessionMap.get(i)===!0:!1}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-instance-selector"]],hostAttrs:[1,"block"],inputs:{presenceMap:"presenceMap",activeSessionMap:"activeSessionMap"},outputs:{infoRequested:"infoRequested"},standalone:!0,features:[b],decls:6,vars:1,consts:[[1,"flex","gap-1","flex-wrap","items-center"],[1,"text-[10px]","text-neutral-500","mr-1","uppercase","tracking-wider"],[1,"flex","items-center","gap-0.5","group"],[1,"text-[10px]","text-neutral-600","italic"],[1,"px-2","py-0.5","text-[11px]","rounded-full","border","transition-colors","flex","items-center","gap-1",3,"click","ngClass"],[3,"presence","lastHeartbeatAt","wsConnected","showLabel"],[1,"ml-0.5","text-[9px]","text-neutral-500"],["title","Akt\xEDv session fut ezen az instance-en","aria-label","Akt\xEDv session fut ezen az instance-en","data-testid","s-instance-active-session-dot",1,"inline-block","w-1.5","h-1.5","rounded-full","bg-yellow-400","animate-pulse","shrink-0"],["type","button","title","Instance details","aria-label","Show instance details","data-testid","s-instance-selector-info-btn",1,"text-[11px]","leading-none","w-4","h-4","rounded-full","border","border-neutral-700","text-neutral-500","hover:text-ccapAccent","hover:border-ccapAccent","transition-colors","flex","items-center","justify-center",3,"click"]],template:function(i,n){i&1&&(a(0,"div",0)(1,"span",1),s(2,"Instance:"),o(),R(3,ze,8,19,"div",2,Ae),m(5,je,2,0,"span",3),o()),i&2&&(r(3),F(n.instances_$()),r(2),u(n.instances_$().length?-1:5))},dependencies:[B,P,J],encapsulation:2})}return t})();function Pe(t,d){if(t&1&&S(0,"app-s-instance-detail-view",3),t&2){let e=c(2);p("row",d)("presence",e.getPresenceForSelectedRow())}}function Be(t,d){if(t&1){let e=E();a(0,"app-s-modal",2),_("closed",function(){h(e);let n=c();return C(n.handleModalClosed())}),m(1,Pe,1,2,"app-s-instance-detail-view",3),o()}if(t&2){let e,i=c();p("isOpen",!0)("title",i.modalTitle_$())("maxWidth","lg"),r(),u((e=i.selectedRow_$())?1:-1,e)}}var Ut=(()=>{class t{instanceRegistry_DS=v(ce);runtimeInstances_DS=v(_e);presenceMap=new Map;activeSessionMap=new Map;selectedInstanceKey_$=$(null);viewRows_$=g(()=>xe.buildViewRows(this.instanceRegistry_DS.list_$(),this.runtimeInstances_DS.ccapInstanceList_$()));selectedRow_$=g(()=>{let e=this.selectedInstanceKey_$();return e?this.viewRows_$().find(i=>(i.registry.instanceKey??"")===e)??null:null});isModalOpen_$=g(()=>this.selectedRow_$()!==null);modalTitle_$=g(()=>{let e=this.selectedRow_$();if(!e)return"";let i=e.registry.hostName??"",n=e.registry.instanceKey??"";return i?`Instance \u2014 ${i}`:`Instance \u2014 ${n.slice(-6)||"?"}`});handleInfoRequested(e){this.selectedInstanceKey_$.set(e.instanceKey)}getPresenceForSelectedRow(){let e=this.selectedRow_$();if(!e)return;let i=e.registry.instanceKey??"";if(i)return this.presenceMap.get(i)}handleModalClosed(){this.selectedInstanceKey_$.set(null)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-instance-chip-row-with-info"]],hostAttrs:[1,"block"],inputs:{presenceMap:"presenceMap",activeSessionMap:"activeSessionMap"},standalone:!0,features:[b],decls:2,vars:3,consts:[[3,"infoRequested","presenceMap","activeSessionMap"],[3,"isOpen","title","maxWidth"],[3,"closed","isOpen","title","maxWidth"],[3,"row","presence"]],template:function(i,n){i&1&&(a(0,"app-s-instance-selector",0),_("infoRequested",function(x){return n.handleInfoRequested(x)}),o(),m(1,Be,2,4,"app-s-modal",1)),i&2&&(p("presenceMap",n.presenceMap)("activeSessionMap",n.activeSessionMap),r(),u(n.isModalOpen_$()?1:-1))},dependencies:[B,we,de,be],encapsulation:2})}return t})();var K=(()=>{class t{currentlyOpenId_$=$(null);isOpen(e){return g(()=>this.currentlyOpenId_$()===e)}setOpen(e){this.currentlyOpenId_$.set(e)}toggle(e){this.currentlyOpenId_$()===e?this.currentlyOpenId_$.set(null):this.currentlyOpenId_$.set(e)}static \u0275fac=function(i){return new(i||t)};static \u0275prov=U({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var z=function(t){return t.schedule="schedule",t.quickcast="quickcast",t.coordinator="coordinator",t.quickSettings="quick-settings",t}(z||{});var Ee=(t,d)=>d._id,Ke=()=>["border-neonAmber/60","text-neonAmber","shadow-neon-glow-orange","hover:border-neonAmber","hover:bg-neonAmber/10"],Ne=()=>["border-neutral-700","text-neutral-600"];function He(t,d){if(t&1&&(a(0,"span",4),s(1),o()),t&2){let e=c();r(),f(" ",e.sessionJobs_$().length>9?"9+":e.sessionJobs_$().length," ")}}function Ge(t,d){if(t&1&&(a(0,"span",17),s(1),V(2,"date"),o()),t&2){let e=c().$implicit;r(),f(" ",j(2,1,e.nextDueAt,"yyyy-MM-dd HH:mm")," ")}}function Qe(t,d){t&1&&(a(0,"span",18),s(1,"\u2014"),o())}function qe(t,d){if(t&1&&(a(0,"span",21),s(1),o()),t&2){let e=d.$implicit,i=c(5);p("ngClass",i.getExecutionBadgeClass(e.status))("title",i.buildExecutionBadgeTooltip(e)),r(),f(" ",i.getExecutionBadgeLabel(e.status)," ")}}function Je(t,d){if(t&1&&(a(0,"div",19)(1,"span",20),s(2,"Trigger-ek:"),o(),R(3,qe,2,3,"span",21,Ee),o()),t&2){let e=c();r(3),F(e)}}function Ye(t,d){t&1&&m(0,Je,5,0,"div",19),t&2&&u(d.length>0?0:-1)}function We(t,d){if(t&1){let e=E();a(0,"div",9)(1,"div",6)(2,"div",10)(3,"span",11),s(4),o(),a(5,"span",12),s(6),V(7,"schSchedulePresetLabel"),o()(),a(8,"button",13),_("click",function(){let n=h(e).$implicit,l=c(2);return C(l.handleTriggerNow(n))}),I(),a(9,"svg",14),S(10,"path",15),o()()(),Q(),a(11,"div",16)(12,"span"),s(13,"K\xF6vetkez\u0151:"),o(),m(14,Ge,3,4,"span",17)(15,Qe,2,0,"span",18),o(),m(16,Ye,1,1),o()}if(t&2){let e,i,n,l,x,w=d.$implicit,A=c(2);r(3),p("title",(e=w.name)!==null&&e!==void 0?e:""),r(),f(" ",((i=w.name)!==null&&i!==void 0?i:"").trim()||"Unnamed schedule"," "),r(2),f(" ",ne(7,7,w.schedule)," "),r(2),p("disabled",A.busyJobIds_$().has((n=w._id)!==null&&n!==void 0?n:""))("title",A.busyJobIds_$().has((l=w._id)!==null&&l!==void 0?l:"")?"Ind\xEDt\xE1s folyamatban\u2026":"Most futtatni (Trigger Now)"),r(6),u(w.nextDueAt?14:15),r(2),u((x=A.getRecentExecutions(w))?16:-1,x)}}function Ue(t,d){if(t&1){let e=E();a(0,"div",5)(1,"div",6)(2,"span",7),s(3),o(),a(4,"button",8),_("click",function(){h(e);let n=c();return C(n.handleToggle())}),s(5," \xD7 "),o()(),R(6,We,17,9,"div",9,Ee),o()}if(t&2){let e=c();r(3),f(" Schedule (",e.sessionJobs_$().length,") "),r(3),F(e.sessionJobs_$())}}var pn=(()=>{class t{sessionId=O.required();scheduledJobs_DS=v(Se);overlayCoordinator_CS=v(K);OVERLAY_ID=z.schedule;isOpen_$=this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);busyJobIds_$=$(new Set);sessionJobs_$=g(()=>{let e=(this.sessionId()??"").trim();return e?this.scheduledJobs_DS.jobs_$().filter(n=>n.enabled===!1?!1:(n.target?.payload?.sessionId??"").trim()===e):[]});hasSchedule_$=g(()=>this.sessionJobs_$().length>0);ngOnInit(){this.scheduledJobs_DS.jobs_$().length===0&&this.scheduledJobs_DS.loadAll()}handleToggle(){this.overlayCoordinator_CS.toggle(this.OVERLAY_ID)}handleTriggerNow(e){return G(this,null,function*(){let i=(e._id??"").trim();if(i&&!this.busyJobIds_$().has(i)){this.busyJobIds_$.update(n=>{let l=new Set(n);return l.add(i),l});try{yield this.scheduledJobs_DS.triggerNow({jobId:i,reason:"session-overlay-manual"})}finally{this.busyJobIds_$.update(n=>{let l=new Set(n);return l.delete(i),l})}}})}getRecentExecutions(e){let i=e._id??"";return i?this.scheduledJobs_DS.recentExecutions_$().get(i)??[]:[]}getExecutionBadgeClass(e){switch(e){case"triggered":return"bg-emerald-500/20 text-emerald-400";case"completed":return"bg-sky-500/20 text-sky-400";case"skipped":return"bg-neutral-600/30 text-neutral-400";case"failed":return"bg-red-500/20 text-red-400";case"cancelled":return"bg-amber-500/20 text-amber-400";case"dry-run":return"bg-purple-500/20 text-purple-400";default:return"bg-neutral-700/40 text-neutral-500"}}getExecutionBadgeLabel(e){switch(e){case"triggered":return"OK";case"completed":return"Done";case"skipped":return"Skip";case"failed":return"Fail";case"cancelled":return"Cancel";case"dry-run":return"Dry";default:return"?"}}buildExecutionBadgeTooltip(e){let i=[];return e.scheduledAt&&(i.push(new Date(e.scheduledAt).toISOString().slice(0,16).replace("T"," ")),i.push(" \u2014 ")),i.push(e.status??"?"),e.skipReason&&i.push(` (${e.skipReason})`),e.status==="failed"&&e.errorDetails?.message&&i.push(`: ${e.errorDetails.message}`),i.join("")}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-session-schedule-overlay"]],hostAttrs:[1,"absolute","bottom-4","left-0","z-30","pointer-events-none"],inputs:{sessionId:[1,"sessionId"]},standalone:!0,features:[b],decls:6,vars:12,consts:[[1,"flex","items-end","gap-2","pointer-events-auto"],["type","button","aria-label","Schedule",1,"relative","flex","items-center","justify-center","h-8","w-7","bg-neutral-900","border-2","border-l-0","rounded-r-lg","transition-all","duration-200","ease-out","disabled:cursor-not-allowed",3,"click","disabled","title","ngClass"],["fill","none","stroke","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-4","h-4"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d",`M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5
2
- a2 2 0 00-2 2v12a2 2 0 002 2z`],["aria-hidden","true",1,"absolute","-top-1","-right-1","min-w-[14px]","h-[14px]","px-[2px]","bg-neonCyan","text-neutral-900","rounded-full","text-[9px]","font-mono","font-bold","leading-[14px]","text-center","shadow-neon-glow-cyan"],[1,"bg-neutral-900","border-2","border-neonAmber/60","rounded-lg","p-3","flex","flex-col","gap-2","min-w-[16rem]","max-w-xs","shadow-neon-glow-orange"],[1,"flex","items-center","justify-between","gap-2"],[1,"text-[10px]","uppercase","tracking-wider","text-neonAmber","font-mono"],["type","button","title","Bez\xE1r\xE1s","aria-label","Schedule panel bez\xE1r\xE1sa",1,"text-neutral-400","hover:text-neonAmber","leading-none","px-1","transition-colors",3,"click"],[1,"flex","flex-col","gap-1","border-t","border-neutral-800","pt-2","first:border-t-0","first:pt-0"],[1,"flex","flex-col","min-w-0"],[1,"text-sm","text-neutral-100","truncate",3,"title"],[1,"text-[10px]","text-neutral-500","font-mono"],["type","button","aria-label","Trigger now",1,"shrink-0","flex","items-center","justify-center","w-7","h-7","rounded-full","bg-neutral-900","border-2","border-neonAmber/60","text-neonAmber","hover:border-neonAmber","hover:bg-neonAmber/10","hover:shadow-neon-glow-orange","disabled:opacity-40","disabled:cursor-not-allowed","transition-all",3,"click","disabled","title"],["fill","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-3.5","h-3.5"],["d","M8 5v14l11-7z"],["title","K\xF6vetkez\u0151 \xFCtemezett fut\xE1s id\u0151pontja",1,"text-[10px]","text-neutral-500","flex","items-center","gap-1"],[1,"text-emerald-400","font-medium"],[1,"text-neutral-300"],[1,"flex","items-center","gap-1","flex-wrap"],[1,"text-[10px]","text-neutral-500"],[1,"inline-flex","items-center","px-1.5","py-0.5","text-[10px]","rounded",3,"ngClass","title"]],template:function(i,n){i&1&&(a(0,"div",0)(1,"button",1),_("click",function(){return n.handleToggle()}),I(),a(2,"svg",2),S(3,"path",3),o(),m(4,He,2,1,"span",4),o(),m(5,Ue,8,1,"div",5),o()),i&2&&(r(),M("-translate-x-2",!n.isOpen_$())("translate-x-2",n.isOpen_$()),p("disabled",!n.hasSchedule_$())("title",n.hasSchedule_$()?n.isOpen_$()?"Schedule panel bez\xE1r\xE1sa":"Schedule megjelen\xEDt\xE9se ("+n.sessionJobs_$().length+" job)":"Nincs schedule ehhez a sessionh\xF6z")("ngClass",n.hasSchedule_$()?T(10,Ke):T(11,Ne)),D("aria-expanded",n.isOpen_$()),r(3),u(n.hasSchedule_$()&&n.sessionJobs_$().length>1?4:-1),r(),u(n.isOpen_$()?5:-1))},dependencies:[P,N,he],encapsulation:2})}return t})();function Xe(t,d){if(t&1){let e=E();a(0,"button",10),_("click",function(){let n=h(e).$implicit,l=c(2);return C(l.handleAction(n))}),s(1),o()}if(t&2){let e=d.$implicit,i=c(2);p("disabled",i.pendingAction_$()===e),r(),f(" ",i.pendingAction_$()===e?"Sending\u2026":e," ")}}function Ze(t,d){if(t&1){let e=E();a(0,"div",4)(1,"div",5)(2,"span",6),s(3," QuickCast "),o(),a(4,"button",7),_("click",function(){h(e);let n=c();return C(n.handleToggle())}),s(5," \xD7 "),o()(),a(6,"div",8),R(7,Xe,2,2,"button",9,Z),o()()}if(t&2){let e=c();r(7),F(e.actions())}}var gn=(()=>{class t{actions=O(["Go","Continue","OK","Proceed","implement","Review Very Very Carefully","Ensure Documentations","tervezd meg nagyon alaposan \xE9s fejleszd le","Hogy \xE1llunk most?","itt vagy?"]);actionSelected=q();overlayCoordinator_CS=v(K);OVERLAY_ID=z.quickcast;isOpen_$=this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);pendingAction_$=$(null);handleToggle(){this.overlayCoordinator_CS.toggle(this.OVERLAY_ID)}handleAction(e){this.pendingAction_$()===null&&(this.pendingAction_$.set(e),this.actionSelected.emit(e),setTimeout(()=>{this.pendingAction_$()===e&&this.pendingAction_$.set(null)},800))}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-session-quickcast-overlay"]],hostAttrs:[1,"absolute","bottom-16","left-0","z-30","pointer-events-none"],inputs:{actions:[1,"actions"]},outputs:{actionSelected:"actionSelected"},standalone:!0,features:[b],decls:5,vars:7,consts:[[1,"flex","items-end","gap-2","pointer-events-auto"],["type","button","aria-label","QuickCast",1,"flex","items-center","justify-center","h-8","w-7","bg-neutral-900","border-2","border-l-0","border-neonCyan/60","rounded-r-lg","text-neonCyan","shadow-neon-glow-cyan","hover:border-neonCyan","hover:bg-neonCyan/10","transition-all","duration-200","ease-out",3,"click","title"],["fill","none","stroke","currentColor","viewBox","0 0 24 24","aria-hidden","true",1,"w-4","h-4"],["stroke-linecap","round","stroke-linejoin","round","stroke-width","2","d","M13 10V3L4 14h7v7l9-11h-7z"],[1,"bg-neutral-900","border-2","border-neonCyan/60","rounded-md","p-1.5","flex","flex-col","gap-1","min-w-[8rem]","max-w-[13rem]","shadow-neon-glow-cyan"],[1,"flex","items-center","justify-between","gap-1"],[1,"text-[10px]","uppercase","tracking-wider","text-neonCyan","font-mono","leading-none"],["type","button","title","Bez\xE1r\xE1s","aria-label","QuickCast panel bez\xE1r\xE1sa",1,"text-neutral-400","hover:text-neonCyan","leading-none","text-xs","px-1","transition-colors",3,"click"],[1,"flex","flex-col","gap-1"],["type","button",1,"px-1.5","py-0.5","rounded","border-2","border-neonCyan/60","text-neonCyan","text-[11px]","font-medium","hover:border-neonCyan","hover:bg-neonCyan/10","hover:shadow-neon-glow-cyan","disabled:opacity-40","disabled:cursor-not-allowed","transition-all","leading-tight",3,"disabled"],["type","button",1,"px-1.5","py-0.5","rounded","border-2","border-neonCyan/60","text-neonCyan","text-[11px]","font-medium","hover:border-neonCyan","hover:bg-neonCyan/10","hover:shadow-neon-glow-cyan","disabled:opacity-40","disabled:cursor-not-allowed","transition-all","leading-tight",3,"click","disabled"]],template:function(i,n){i&1&&(a(0,"div",0)(1,"button",1),_("click",function(){return n.handleToggle()}),I(),a(2,"svg",2),S(3,"path",3),o()(),m(4,Ze,9,0,"div",4),o()),i&2&&(r(),M("-translate-x-2",!n.isOpen_$())("translate-x-2",n.isOpen_$()),p("title",n.isOpen_$()?"QuickCast bez\xE1r\xE1sa":"QuickCast megnyit\xE1sa"),D("aria-expanded",n.isOpen_$()),r(3),u(n.isOpen_$()?4:-1))},encapsulation:2})}return t})();var et=(t,d)=>d.provider+":::"+d.modelName,tt=()=>["border-neonPurple/60","text-neonPurple","shadow-[0_0_10px_rgba(168,85,247,0.4)]","hover:border-neonPurple","hover:bg-neonPurple/10"],nt=()=>["border-neutral-700","text-neutral-500","hover:border-neutral-500","hover:bg-neutral-800/50"],it=()=>["border-neonPurple/60","shadow-[0_0_10px_rgba(168,85,247,0.4)]"],ot=()=>["border-neutral-700"],at=()=>["text-neonPurple"],rt=()=>["text-neutral-400"];function st(t,d){if(t&1&&(a(0,"div",10)(1,"span",11),s(2,"provider"),o(),a(3,"span",14),s(4),o()()),t&2){let e=c();r(3),p("title",e.providerName),r(),f(" ",e.providerName," ")}}function lt(t,d){if(t&1&&(a(0,"div",10)(1,"span",11),s(2,"model"),o(),a(3,"span",14),s(4),o()()),t&2){let e=c();r(3),p("title",e.model),r(),k(e.model)}}function dt(t,d){if(t&1&&(a(0,"div",10)(1,"span",11),s(2,"workflow"),o(),a(3,"span",14),s(4),o()()),t&2){let e=c();r(3),p("title",e.workflowId),r(),f(" ",e.workflowId," ")}}function ct(t,d){if(t&1){let e=E();a(0,"div",9)(1,"div",10)(2,"span",11),s(3,"status"),o(),a(4,"span",12),s(5),o()(),m(6,st,5,2,"div",10)(7,lt,5,2,"div",10)(8,dt,5,2,"div",10),o(),a(9,"button",13),_("click",function(){h(e);let n=c(2);return C(n.handleStop())}),s(10),o()}if(t&2){let e=d,i=c(2);r(5),k(e.status),r(),u(e.providerName?6:-1),r(),u(e.model?7:-1),r(),u(e.workflowId?8:-1),r(),p("disabled",i.isBusy_$()),r(),f(" ",i.isBusy_$()?"Stopping\u2026":"Stop"," ")}}function pt(t,d){if(t&1&&(a(0,"option",18),s(1),o()),t&2){let e=d.$implicit;p("value",e.provider+":::"+e.modelName),r(),ee(" ",e.provider," / ",e.modelName," ")}}function ut(t,d){if(t&1){let e=E();a(0,"span",15),s(1," Nincs assigned coordinator \u2014 v\xE1lassz modellt \xE9s kattints az Assign-ra. "),o(),a(2,"select",16),_("ngModelChange",function(n){h(e);let l=c(2);return C(l.selectedModelKey_$.set(n))}),a(3,"option",17),s(4,"\u2014 v\xE1lassz modellt \u2014"),o(),R(5,pt,2,3,"option",18,et),o(),a(7,"button",13),_("click",function(){h(e);let n=c(2);return C(n.handleAssign())}),s(8),o()}if(t&2){let e=c(2);r(2),p("ngModel",e.selectedModelKey_$()),r(3),F(e.modelOptions_$()),r(2),p("disabled",!e.selectedModelKey_$()||e.isBusy_$()),r(),f(" ",e.isBusy_$()?"Assigning\u2026":"Assign"," ")}}function mt(t,d){if(t&1){let e=E();a(0,"div",5)(1,"div",6)(2,"span",7),s(3," Coordinator "),o(),a(4,"button",8),_("click",function(){h(e);let n=c();return C(n.handleToggle())}),s(5," \xD7 "),o()(),m(6,ct,11,6)(7,ut,9,3),o()}if(t&2){let e,i=c();p("ngClass",i.isAssigned_$()?T(3,it):T(4,ot)),r(2),p("ngClass",i.isAssigned_$()?T(5,at):T(6,rt)),r(4),u((e=i.assignedCoordinator_$())?6:7,e)}}var Tn=(()=>{class t{sessionId=O.required();coordinator_DS=v(ge);registrySsot_CS=v(fe);overlayCoordinator_CS=v(K);OVERLAY_ID=z.coordinator;isOpen_$=this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);isBusy_$=$(!1);selectedModelKey_$=$("");modelOptions_$=g(()=>this.registrySsot_CS.enabledLlmModels_$());assignedCoordinator_$=g(()=>{let e=(this.sessionId()??"").trim();return!e||!this.coordinator_DS.coordinatedSessionIds_$().has(e)?null:this.coordinator_DS.globalCoordinatorsList_$().find(l=>{let x=(l.sessionId??"").trim(),w=(l.status??"").trim().toLowerCase();return x===e&&w!=="stopped"&&w!=="completed"})??null});isAssigned_$=g(()=>this.assignedCoordinator_$()!==null);ngOnInit(){this.coordinator_DS.globalCoordinatorsList_$().length===0&&this.coordinator_DS.loadAllCoordinatorsForManagementPage(),this.registrySsot_CS.ensureLoaded("llm")}handleToggle(){this.overlayCoordinator_CS.toggle(this.OVERLAY_ID)}handleAssign(){return G(this,null,function*(){let e=(this.sessionId()??"").trim(),i=this.selectedModelKey_$().trim();if(!e||!i||this.isBusy_$())return;let n=i.split(":::");if(n.length!==2)return;let l=n[0],x=n[1];if(!(!l||!x)){this.isBusy_$.set(!0);try{yield this.coordinator_DS.startCoordinator({sessionId:e,providerName:l,model:x}),this.coordinator_DS.loadAllCoordinatorsForManagementPage()}finally{this.isBusy_$.set(!1)}}})}handleStop(){return G(this,null,function*(){let e=(this.sessionId()??"").trim();if(!(!e||this.isBusy_$())){this.isBusy_$.set(!0);try{yield this.coordinator_DS.stopCoordinator(e),this.coordinator_DS.loadAllCoordinatorsForManagementPage()}finally{this.isBusy_$.set(!1)}}})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-session-coordinator-overlay"]],hostAttrs:[1,"absolute","bottom-28","left-0","z-30","pointer-events-none"],inputs:{sessionId:[1,"sessionId"]},standalone:!0,features:[b],decls:6,vars:10,consts:[[1,"flex","items-end","gap-2","pointer-events-auto"],["type","button","aria-label","Coordinator",1,"relative","flex","items-center","justify-center","h-8","w-7","bg-neutral-900","border-2","border-l-0","rounded-r-lg","transition-all","duration-200","ease-out",3,"click","title","ngClass"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-4","h-4"],["cx","12","cy","12","r","10"],["points","16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"],[1,"bg-neutral-900","border-2","rounded-lg","p-3","flex","flex-col","gap-2","min-w-[16rem]","max-w-xs",3,"ngClass"],[1,"flex","items-center","justify-between","gap-2"],[1,"text-[10px]","uppercase","tracking-wider","font-mono",3,"ngClass"],["type","button","title","Bez\xE1r\xE1s","aria-label","Coordinator panel bez\xE1r\xE1sa",1,"text-neutral-400","hover:text-neonPurple","leading-none","px-1","transition-colors",3,"click"],[1,"flex","flex-col","gap-1","text-xs"],[1,"flex","justify-between","gap-2"],[1,"text-neutral-500","font-mono","text-[10px]"],[1,"text-neutral-100"],["type","button",1,"self-end","px-2","py-1","rounded","border-2","border-neonPurple/60","text-neonPurple","text-xs","font-medium","hover:bg-neonPurple/10","hover:shadow-[0_0_10px_rgba(168,85,247,0.4)]","disabled:opacity-40","disabled:cursor-not-allowed","transition-all",3,"click","disabled"],[1,"text-neutral-100","truncate",3,"title"],[1,"text-[11px]","text-neutral-400"],[1,"bg-neutral-900","border","border-neutral-700","rounded","px-2","py-1","text-xs","text-neutral-100","focus:outline-none","focus:border-neonPurple/60",3,"ngModelChange","ngModel"],["value","","disabled",""],[3,"value"]],template:function(i,n){if(i&1&&(a(0,"div",0)(1,"button",1),_("click",function(){return n.handleToggle()}),I(),a(2,"svg",2),S(3,"circle",3)(4,"polygon",4),o()(),m(5,mt,8,7,"div",5),o()),i&2){let l;r(),M("-translate-x-2",!n.isOpen_$())("translate-x-2",n.isOpen_$()),p("title",n.isAssigned_$()?n.isOpen_$()?"Coordinator panel bez\xE1r\xE1sa":"Coordinator: "+((l=(l=n.assignedCoordinator_$())==null?null:l.status)!==null&&l!==void 0?l:""):n.isOpen_$()?"Coordinator panel bez\xE1r\xE1sa":"Nincs coordinator \u2014 assign-ol\xE1shoz kattints")("ngClass",n.isAssigned_$()?T(8,tt):T(9,nt)),D("aria-expanded",n.isOpen_$()),r(4),u(n.isOpen_$()?5:-1)}},dependencies:[P,le,re,se,ae,ie,oe],encapsulation:2})}return t})();var _t=()=>["border-neonCyan/60","text-neonCyan","shadow-neon-glow-cyan","hover:border-neonCyan","hover:bg-neonCyan/10"],ft=()=>["border-neutral-700","text-neutral-500","hover:border-neutral-500","hover:text-neutral-300"];function xt(t,d){t&1&&(I(),a(0,"svg",1),S(1,"polygon",2)(2,"path",3)(3,"path",4),o())}function St(t,d){t&1&&(I(),a(0,"svg",1),S(1,"polygon",2)(2,"line",5)(3,"line",6),o())}var ke=(()=>{class t{sessionId=O.required();isEnabled_$=$(!1);ngOnInit(){this.refreshEnabledFromStorage()}refreshEnabledFromStorage(){this.isEnabled_$.set(W.isEnabled(this.sessionId()))}handleToggle(){W.toggle(this.sessionId()),this.refreshEnabledFromStorage()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-auto-read-tts-toggle"]],inputs:{sessionId:[1,"sessionId"]},standalone:!0,features:[b],decls:3,vars:6,consts:[["type","button",1,"relative","flex","items-center","justify-center","h-8","w-8","bg-neutral-900","border-2","rounded-md","transition-all","duration-200","ease-out",3,"click","title","ngClass"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-4","h-4"],["points","11 5 6 9 2 9 2 15 6 15 11 19 11 5"],["d","M15.54 8.46a5 5 0 0 1 0 7.07"],["d","M19.07 4.93a10 10 0 0 1 0 14.14"],["x1","23","y1","9","x2","17","y2","15"],["x1","17","y1","9","x2","23","y2","15"]],template:function(i,n){i&1&&(a(0,"button",0),_("click",function(){return n.handleToggle()}),m(1,xt,4,0,":svg:svg",1)(2,St,4,0,":svg:svg",1),o()),i&2&&(p("title",n.isEnabled_$()?"Auto-read assistant: ON (\xFAj asszisztens \xFCzenetek automatikusan felolvas\xE1sra ker\xFClnek). Klikk: kikapcsol\xE1s.":"Auto-read assistant: OFF. Klikk: bekapcsol\xE1s (csak az ezut\xE1n \xE9rkez\u0151 \xFCzenetek olvas\xF3dnak fel).")("ngClass",n.isEnabled_$()?T(4,_t):T(5,ft)),D("aria-pressed",n.isEnabled_$()),r(),u(n.isEnabled_$()?1:2))},dependencies:[P],encapsulation:2})}return t})();function gt(t,d){if(t&1){let e=E();a(0,"button",26),_("click",function(){h(e);let n=c(2);return C(n.handleRestartRunnerClick())}),a(1,"span",13),I(),a(2,"svg",14),S(3,"path",27)(4,"path",28)(5,"path",29)(6,"path",30),o(),s(7," Restart Terminal Runner "),o()()}}function ht(t,d){if(t&1){let e=E();a(0,"div",5)(1,"div",6)(2,"span",7),s(3," Quick Settings "),o(),a(4,"button",8),_("click",function(){h(e);let n=c();return C(n.handleToggle())}),s(5," \xD7 "),o()(),a(6,"p",9),s(7," Plan-state v1 \u2014 minden funkci\xF3 "),a(8,"span",10),s(9,"disabled"),o(),s(10,"; bek\xF6t\xE9s Plans Feature Set keret\xE9ben k\xF6vetkezik (`2026-05-06-session-quick-settings-feature-set-plan.md`). "),o(),m(11,gt,8,0,"button",11),a(12,"div",12)(13,"span",13),I(),a(14,"svg",14),S(15,"path",15)(16,"path",16)(17,"path",17),o(),s(18," Auto-Read Assistant TTS "),o(),Q(),S(19,"app-s-auto-read-tts-toggle",18),o(),a(20,"button",19)(21,"span",13),I(),a(22,"svg",20),S(23,"rect",21)(24,"path",22)(25,"path",23)(26,"path",24),o(),s(27," Always-On Intelligent Voice Input "),o(),Q(),a(28,"span",25),s(29,"soon"),o()()()}if(t&2){let e=c();r(11),u(e.showRestartRunner()?11:-1),r(8),p("sessionId",e.sessionId())}}var Kn=(()=>{class t{sessionId=O.required();showRestartRunner=O(!1);restartRunnerClicked=q();overlayCoordinator_CS=v(K);OVERLAY_ID=z.quickSettings;isOpen_$=this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);handleToggle(){this.overlayCoordinator_CS.toggle(this.OVERLAY_ID)}handleRestartRunnerClick(){this.restartRunnerClicked.emit(),this.overlayCoordinator_CS.setOpen(null)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=y({type:t,selectors:[["app-s-session-quick-settings-overlay"]],hostAttrs:[1,"absolute","bottom-40","left-0","z-30","pointer-events-none"],inputs:{sessionId:[1,"sessionId"],showRestartRunner:[1,"showRestartRunner"]},outputs:{restartRunnerClicked:"restartRunnerClicked"},standalone:!0,features:[b],decls:6,vars:7,consts:[[1,"flex","items-end","gap-2","pointer-events-auto"],["type","button","aria-label","Session Quick Settings",1,"relative","flex","items-center","justify-center","h-8","w-7","bg-neutral-900","border-2","border-l-0","border-neonGreen/60","rounded-r-lg","text-neonGreen","shadow-[0_0_10px_rgba(0,255,136,0.35)]","hover:border-neonGreen","hover:bg-neonGreen/10","transition-all","duration-200","ease-out",3,"click","title"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-4","h-4"],["cx","12","cy","12","r","3"],["d",`M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0
3
- l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2
4
- 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06
5
- a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82
6
- 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09
7
- A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83
8
- 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3
9
- a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33
10
- l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82
11
- V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09
12
- a1.65 1.65 0 0 0-1.51 1z`],[1,"bg-neutral-900","border-2","border-neonGreen/60","rounded-lg","p-3","flex","flex-col","gap-2","min-w-[18rem]","max-w-sm","shadow-[0_0_12px_rgba(0,255,136,0.3)]"],[1,"flex","items-center","justify-between","gap-2"],[1,"text-[10px]","uppercase","tracking-wider","text-neonGreen","font-mono"],["type","button","title","Bez\xE1r\xE1s","aria-label","Quick Settings panel bez\xE1r\xE1sa",1,"text-neutral-400","hover:text-neonGreen","leading-none","px-1","transition-colors",3,"click"],[1,"text-[10px]","text-neutral-400","leading-snug"],[1,"text-neonGreen"],["type","button","title","Aktu\xE1lis CC session terminal runner kill + respawn. \xDAj termin\xE1l ablak ny\xEDlik a friss npm-build-tel; runner version-mismatch vagy no-ACK-fire hib\xE1k gyors fixje a session-b\u0151l, dashboard-ra navig\xE1l\xE1s n\xE9lk\xFCl.",1,"flex","items-center","justify-between","gap-2","px-2","py-1.5","rounded","border-2","border-neonGreen/40","text-neutral-300","text-xs","bg-neutral-900/50","hover:bg-neonGreen/10","hover:border-neonGreen","cursor-pointer","transition-colors"],[1,"flex","items-center","justify-between","gap-2","px-2","py-1.5","rounded","border-2","border-neonGreen/40","text-neutral-300","text-xs","bg-neutral-900/50"],[1,"flex","items-center","gap-2"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-4","h-4","shrink-0","text-neonGreen/70"],["d","M11 5L6 9H2v6h4l5 4V5z"],["d","M15.54 8.46a5 5 0 0 1 0 7.07"],["d","M19.07 4.93a10 10 0 0 1 0 14.14"],[3,"sessionId"],["type","button","disabled","","title",`[Plan v1] Intelligens always-on hangbemenet \u2014 a r\xE9gi continuous-listening
13
- metodika alapj\xE1n: VAD (volume gate) + speech-boundary chunking, csendszakasz ut\xE1n
14
- auto-send egyetlen \xFCzenetk\xE9nt, opcion\xE1lis chime hangjelz\xE9s a trigger-n\xE9l.
15
- Spec: __specifications/poc/voice-input-continuous-and-mobile.md (REQ-VIM-CONT-002,
16
- REQ-VIM-SEND-001). Hi\xE1nyz\xF3 r\xE9szek: per-segment \u2192 cycle-akkumul\xE1ci\xF3, silence-detect
17
- \u2192 auto-send, cseng\u0151 hang. Nagyobb implement\xE1ci\xF3s csomag \u2014 Plan dokumentum r\xE9szletez.`,1,"flex","items-center","justify-between","gap-2","px-2","py-1.5","rounded","border-2","border-neutral-700","text-neutral-500","text-xs","bg-neutral-900/50","cursor-not-allowed","transition-colors"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-4","h-4","shrink-0"],["x","9","y","3","width","6","height","12","rx","3"],["d","M19 11a7 7 0 0 1-14 0"],["d","M12 18v3"],["d","M8 21h8"],[1,"text-[9px]","uppercase","tracking-wider","text-neutral-600","font-mono"],["type","button","title","Aktu\xE1lis CC session terminal runner kill + respawn. \xDAj termin\xE1l ablak ny\xEDlik a friss npm-build-tel; runner version-mismatch vagy no-ACK-fire hib\xE1k gyors fixje a session-b\u0151l, dashboard-ra navig\xE1l\xE1s n\xE9lk\xFCl.",1,"flex","items-center","justify-between","gap-2","px-2","py-1.5","rounded","border-2","border-neonGreen/40","text-neutral-300","text-xs","bg-neutral-900/50","hover:bg-neonGreen/10","hover:border-neonGreen","cursor-pointer","transition-colors",3,"click"],["d","M3 12a9 9 0 0 1 15.5-6.3L21 8"],["d","M21 3v5h-5"],["d","M21 12a9 9 0 0 1-15.5 6.3L3 16"],["d","M3 21v-5h5"]],template:function(i,n){i&1&&(a(0,"div",0)(1,"button",1),_("click",function(){return n.handleToggle()}),I(),a(2,"svg",2),S(3,"circle",3)(4,"path",4),o()(),m(5,ht,30,2,"div",5),o()),i&2&&(r(),M("-translate-x-2",!n.isOpen_$())("translate-x-2",n.isOpen_$()),p("title",n.isOpen_$()?"Session Quick Settings panel bez\xE1r\xE1sa":"Session Quick Settings \u2014 hamarosan: Restart Runner, Auto-Read TTS, Intelligent Voice Input. Plan dokumentum k\xE9szen, implement\xE1ci\xF3 folyamatban."),D("aria-expanded",n.isOpen_$()),r(4),u(n.isOpen_$()?5:-1))},dependencies:[ke],encapsulation:2})}return t})();export{Y as a,Ut as b,pn as c,gn as d,Tn as e,Kn as f};
18
- //# sourceMappingURL=chunk-DB44BUNE.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/_modules/shared/_components/s-cc-rate-limit-info/s-cc-rate-limit-info.component.ts", "src/app/_modules/shared/_components/s-cc-rate-limit-info/s-cc-rate-limit-info.component.html", "src/app/_modules/external-sessions/_modules/claude-code/_collections/cc-rate-limit-display.util.ts", "src/app/_modules/shared/_components/s-instance-detail-view/s-instance-detail-view.component.ts", "src/app/_modules/shared/_components/s-instance-detail-view/s-instance-detail-view.component.html", "src/app/_modules/shared/_components/s-instance-selector/s-instance-selector.component.ts", "src/app/_modules/shared/_components/s-instance-selector/s-instance-selector.component.html", "src/app/_modules/shared/_components/s-instance-chip-row-with-info/s-instance-chip-row-with-info.component.ts", "src/app/_modules/shared/_components/s-instance-chip-row-with-info/s-instance-chip-row-with-info.component.html", "src/app/_modules/shared/_services/control-services/s-session-overlay-coordinator.control-service.ts", "src/app/_modules/shared/_collections/consts/s-session-overlay-id.type-enum.ts", "src/app/_modules/shared/_components/session-ui/s-session-schedule-overlay/s-session-schedule-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-schedule-overlay/s-session-schedule-overlay.component.html", "src/app/_modules/shared/_components/session-ui/s-session-quickcast-overlay/s-session-quickcast-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-quickcast-overlay/s-session-quickcast-overlay.component.html", "src/app/_modules/shared/_components/session-ui/s-session-coordinator-overlay/s-session-coordinator-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-coordinator-overlay/s-session-coordinator-overlay.component.html", "src/app/_modules/shared/_components/session-ui/s-auto-read-tts-toggle/s-auto-read-tts-toggle.component.ts", "src/app/_modules/shared/_components/session-ui/s-auto-read-tts-toggle/s-auto-read-tts-toggle.component.html", "src/app/_modules/shared/_components/session-ui/s-session-quick-settings-overlay/s-session-quick-settings-overlay.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-quick-settings-overlay/s-session-quick-settings-overlay.component.html"],
4
- "sourcesContent": ["import { Component, computed, inject, Input, Signal, signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DyFM_Log } from '@futdevpro/fsm-dynamo';\n\nimport { CcSessionRateLimitInfo_Interface }\n from '../../../external-sessions/_modules/claude-code/_services/cc.data-service.interface';\nimport { CC_RateLimitDisplay_Util }\n from '../../../external-sessions/_modules/claude-code/_collections/cc-rate-limit-display.util';\nimport { CC_RateLimitStateMapper_Util }\n from '../../../external-sessions/_modules/claude-code/_collections/cc-rate-limit-state-mapper.util';\nimport { CC_RateLimitStateServerItem_Response }\n from '../../../external-sessions/_modules/claude-code/_models/interfaces/cc-rate-limit-state-server-item.interface';\nimport { ClaudeCode_ApiService }\n from '../../../external-sessions/_modules/claude-code/_services/claude-code.api-service';\n\n/**\n * REQ-CC-USAGE-001 Slice 1 (cycle 258) — shared CC Session rate-limit info component.\n *\n * Egyetlen forrásból mutatja a per-CCAP-instance rate-limit állapotot, amit korábban\n * a `S_InstanceDetailView_Component` belső blokkja kezelt. A komponens elérhető\n * minden CC Sessions felületről (settings instance popup, session detail metadata,\n * dashboard popup), egyetlen prezentációval — REQ-CC-USAGE-001 fő architecture\n * decision: ne legyen duplikált rate-limit-fetch + display logika.\n *\n * Inputs:\n * - `ccapId` (required) — a célzott CCAP instance kulcsa. Ha üres / undefined,\n * silent skip (nincs blokk).\n *\n * Internal state:\n * - `rateLimitInfo_$` — perzisztált állapot a `GET /cc-session/rate-limit-state/:ccapId`-ról.\n * - Computed signal-ok a CC_RateLimitDisplay_Util formatter-jeiből.\n *\n * Hibakezelés: silent-fail a fetch hibájára (DyFM_Log.warn diagnosztikához), a komponens\n * üres marad — analóg az eredeti `S_InstanceDetailView_Component` viselkedéssel.\n */\n@Component({\n selector: 'app-s-cc-rate-limit-info',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './s-cc-rate-limit-info.component.html',\n})\n/** S_CcRateLimitInfo_Component class — REQ-CC-USAGE-001 Slice 1. */\nexport class S_CcRateLimitInfo_Component {\n\n readonly claudeCode_AS: ClaudeCode_ApiService = inject(ClaudeCode_ApiService);\n\n private _ccapId: string = '';\n\n /** A célzott CCAP instance kulcsa (`ccapId`). Üres → nincs fetch, blokk rejtve. */\n @Input({ required: true })\n set ccapId(value: string) {\n this._ccapId = value?.trim() ?? '';\n this.refreshRateLimitState();\n }\n get ccapId(): string {\n return this._ccapId;\n }\n\n /**\n * Perzisztált rate-limit állapot. `null` ha nincs adat / fetch hibázott.\n */\n readonly rateLimitInfo_$: WritableSignal<CcSessionRateLimitInfo_Interface | null> =\n signal<CcSessionRateLimitInfo_Interface | null>(null);\n\n /** Utilization százalék (computed a rateLimitInfo_$-ból). */\n readonly utilizationPercent_$: Signal<number> = computed((): number => {\n return CC_RateLimitDisplay_Util.computeUtilizationPercent(this.rateLimitInfo_$());\n });\n\n /** Reset countdown szöveg (pl. \"2h 15m\" / \"expired\"). */\n readonly resetText_$: Signal<string> = computed((): string => {\n return CC_RateLimitDisplay_Util.formatResetText(this.rateLimitInfo_$());\n });\n\n /** Limit scope címke (\"Session\" / \"Weekly\" / raw). */\n readonly limitScopeLabel_$: Signal<string> = computed((): string => {\n return CC_RateLimitDisplay_Util.formatLimitScopeLabel(this.rateLimitInfo_$());\n });\n\n /**\n * Rate-limit state frissítése a jelenlegi `ccapId`-hez. Üres kulcs → ürítés.\n * Hibakezelés: silent-fail (DyFM_Log.warn) — a UI üres marad, nincs popup-blokk.\n */\n private refreshRateLimitState(): void {\n if (!this._ccapId) {\n this.rateLimitInfo_$.set(null);\n return;\n }\n\n this.claudeCode_AS.getRateLimitState({ ccapId: this._ccapId })\n .then((result: { items: CC_RateLimitStateServerItem_Response[] }): void => {\n const info: CcSessionRateLimitInfo_Interface | null =\n CC_RateLimitStateMapper_Util.mapServerItemsToClientInfo(result.items);\n this.rateLimitInfo_$.set(info);\n })\n .catch((err: unknown): void => {\n DyFM_Log.warn(\n `s-cc-rate-limit-info | rate-limit fetch failed | ccapId: ${this._ccapId} | err: ${String(err)}`,\n );\n this.rateLimitInfo_$.set(null);\n });\n }\n}\n", "<!-- REQ-CC-USAGE-001 Slice 1: shared CC Session rate-limit info display.\n Csak akkor renderel, ha a szerver tartott fenn rate-limit state-et az adott ccapId-re. -->\n@if (rateLimitInfo_$(); as rl) {\n <div class=\"grid grid-cols-[minmax(8rem,auto)_1fr] gap-x-3 gap-y-2 text-xs text-neutral-200\">\n <span\n class=\"col-span-2 text-[11px] uppercase tracking-wider text-neutral-500\">\n Rate limit\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Scope</span>\n <span class=\"whitespace-nowrap\">{{ limitScopeLabel_$() || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Státusz</span>\n <span\n class=\"whitespace-nowrap\"\n [class.text-neonRed]=\"rl.status === 'limited'\"\n [class.text-yellow-400]=\"rl.status === 'allowed_warning'\"\n [class.text-neutral-300]=\"rl.status === 'allowed'\">\n {{ rl.status || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utilization</span>\n <span class=\"whitespace-nowrap font-mono\">{{ utilizationPercent_$() }}%</span>\n\n <span class=\"text-neutral-500 shrink-0\">Reset</span>\n <span class=\"whitespace-nowrap font-mono\">{{ resetText_$() || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó észlelés</span>\n <span class=\"font-mono text-[11px] whitespace-nowrap\">\n {{ (rl.receivedAt | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n </div>\n}\n", "import { CcSessionRateLimitInfo_Interface } from '../_services/cc.data-service.interface';\n\n/**\n * CC Session rate limit UI segédmetódusok.\n * Közös képlettár a metadata popover, az Agent Update status-update sáv és a top banner számára.\n * A `utilization` és `surpassedThreshold` az új rate_limit_event payload mezőiből jön (0..1).\n */\nexport class CC_RateLimitDisplay_Util {\n\n /** Session (per-conversation) limit azonosítója a rate_limit_event.rateLimitType mezőben. */\n static readonly SESSION_LIMIT_TYPE: string = 'five_hour';\n\n /** Weekly (7 napos) limit azonosítója a rate_limit_event.rateLimitType mezőben. */\n static readonly WEEKLY_LIMIT_TYPE: string = 'seven_day';\n\n /**\n * Relatív reset szöveg (rövid forma: \"2h 15m\" / \"8m\" / \"expired\").\n * A metadata gomb és a status-update pirula használja.\n */\n static formatResetText(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.resetsAt) {\n return '';\n }\n const resetDate: Date = new Date(info.resetsAt * 1000);\n const now: Date = new Date();\n const diffMs: number = resetDate.getTime() - now.getTime();\n if (diffMs <= 0) {\n return 'expired';\n }\n const diffMin: number = Math.floor(diffMs / 60000);\n const hours: number = Math.floor(diffMin / 60);\n const mins: number = diffMin % 60;\n return hours > 0 ? `${hours}h ${mins}m` : `${mins}m`;\n }\n\n /**\n * Pontos reset szöveg napok/órák/percek/másodperc bontásban (pl. \"6d 11h 45m 12s\").\n * A top banner használja — a user kérte, hogy pontosan lássa, mikor ér véget a limit.\n */\n static formatResetTextPrecise(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.resetsAt) {\n return '';\n }\n const resetDate: Date = new Date(info.resetsAt * 1000);\n const now: Date = new Date();\n const diffSec: number = Math.floor((resetDate.getTime() - now.getTime()) / 1000);\n if (diffSec <= 0) {\n return 'expired';\n }\n const days: number = Math.floor(diffSec / 86400);\n const hours: number = Math.floor((diffSec % 86400) / 3600);\n const mins: number = Math.floor((diffSec % 3600) / 60);\n const secs: number = diffSec % 60;\n const parts: string[] = [];\n if (days) {\n parts.push(`${days}d`);\n }\n if (days || hours) {\n parts.push(`${hours}h`);\n }\n if (days || hours || mins) {\n parts.push(`${mins}m`);\n }\n parts.push(`${secs}s`);\n return parts.join(' ');\n }\n\n /**\n * Utilization százalék (0..100, egész szám).\n * Közvetlenül a payload `utilization` mezőjéből (0..1) — nem becslés, hanem a CLI által jelentett érték.\n */\n static computeUtilizationPercent(info: CcSessionRateLimitInfo_Interface | null): number {\n if (!info) {\n return 0;\n }\n const raw: number = typeof info.utilization === 'number' ? info.utilization : 0;\n const clamped: number = Math.max(0, Math.min(1, raw));\n return Math.round(clamped * 100);\n }\n\n /**\n * Threshold százalék (0..100, egész szám).\n * A küszöb, ami felett warning/limited státusz aktiválódik.\n */\n static computeThresholdPercent(info: CcSessionRateLimitInfo_Interface | null): number {\n if (!info) {\n return 0;\n }\n const raw: number = typeof info.surpassedThreshold === 'number' ? info.surpassedThreshold : 0;\n const clamped: number = Math.max(0, Math.min(1, raw));\n return Math.round(clamped * 100);\n }\n\n /**\n * Igaz, ha a jelenlegi utilization átlépte a threshold-ot (warning banner triggere).\n */\n static isOverThreshold(info: CcSessionRateLimitInfo_Interface | null): boolean {\n if (!info) {\n return false;\n }\n const util: number = typeof info.utilization === 'number' ? info.utilization : 0;\n const thr: number = typeof info.surpassedThreshold === 'number' ? info.surpassedThreshold : 1;\n return util >= thr && thr > 0;\n }\n\n /**\n * Limit scope emberbarát címke — \"Session\" (five_hour) vagy \"Weekly\" (seven_day) vagy a nyers érték.\n * A user kérte, hogy a banner egyértelműen jelezze, melyik limitről van szó.\n */\n static formatLimitScopeLabel(info: CcSessionRateLimitInfo_Interface | null): string {\n if (!info?.rateLimitType) {\n return '';\n }\n if (info.rateLimitType === CC_RateLimitDisplay_Util.SESSION_LIMIT_TYPE) {\n return 'Session';\n }\n if (info.rateLimitType === CC_RateLimitDisplay_Util.WEEKLY_LIMIT_TYPE) {\n return 'Weekly';\n }\n return info.rateLimitType;\n }\n}\n", "import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { Set_InstanceRegistryViewRow_Interface }\n from '../../../config/_modules/settings/_models/interfaces/set-instance-registry-view-row.interface';\nimport { S_CcRateLimitInfo_Component } from '../s-cc-rate-limit-info/s-cc-rate-limit-info.component';\nimport { S_InstancePresenceBadge_Component } from '../s-instance-presence-badge/s-instance-presence-badge.component';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\n\n/**\n * REQ-UI-INST-001 Slice 1 + REQ-CC-RATE-002 part (a) — megosztott instance detail view.\n *\n * Egy registry ViewRow mezőit jeleníti meg label/value grid-ben. Read-only view.\n * Cél: (a) a Settings táblázat sor-kibontásaként, és (b) a chip-info popup\n * tartalmaként — ugyanaz a layout / SSOT (REQ-UI-INST-001).\n *\n * **REQ-CC-RATE-002 part (a)** + **REQ-CC-USAGE-001 Slice 1 (cycle 258)**:\n * a rate-limit blokk delegálva van a `S_CcRateLimitInfo_Component`-re — egyetlen\n * forrás ezen logikának, így minden CC Sessions felület ugyanazt a komponenst\n * használja. A korábbi belső fetch + signal-állítás logika átkerült az új komponensbe.\n *\n * Template date formázás: Angular built-in `date` pipe — nincs metódushívás (CLAUDE.md).\n */\n@Component({\n selector: 'app-s-instance-detail-view',\n standalone: true,\n imports: [CommonModule, S_CcRateLimitInfo_Component, S_InstancePresenceBadge_Component],\n templateUrl: './s-instance-detail-view.component.html',\n})\n/** S_InstanceDetailView_Component class. */\nexport class S_InstanceDetailView_Component {\n\n /** A megjelenítendő ViewRow (registry + opcionális instanceData). */\n @Input({ required: true })\n row!: Set_InstanceRegistryViewRow_Interface;\n\n /**\n * REQ-INST-STATE-001 Slice 5b (cycle 695) — opcionális presence info a\n * detail-view badge-éhez. Parent-injection pattern (lásd s-instance-selector\n * jsdoc): a SZÜLŐ-komponens szolgáltatja a presence-info-t, így a detail-view\n * NEM inject-eli a `ExS_InstancePresence_DataService`-t (HttpClient chain\n * elkerülés). Ha undefined → nincs badge sor (backward-compatible).\n */\n @Input()\n presence: EXS_InstancePresenceInfo_ClientInterface | undefined = undefined;\n}\n", "<!-- REQ-UI-INST-001 Slice 1: instance detail SSOT view — label/value grid -->\n<div class=\"grid grid-cols-[minmax(8rem,auto)_1fr] gap-x-3 gap-y-2 text-xs text-neutral-200\">\n\n <!-- Registry basics -->\n <span class=\"text-neutral-500 shrink-0\">instanceKey</span>\n <span class=\"font-mono break-all\">{{ row.registry.instanceKey || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Név</span>\n <span class=\"break-all\">{{ (row.instanceData?.name?.trim()) || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Státusz</span>\n <span class=\"whitespace-nowrap\">{{ row.instanceData?.status || '—' }}</span>\n\n <!-- REQ-INST-STATE-001 Slice 5b (cycle 695): instance presence badge — csak\n akkor jelenik meg, ha a szülő szolgáltatott `presence` Input-ot\n (parent-injection pattern). -->\n @if (presence; as p) {\n <span class=\"text-neutral-500 shrink-0\">Instance presence</span>\n <span class=\"whitespace-nowrap\">\n <app-s-instance-presence-badge\n [presence]=\"p.presence\"\n [lastHeartbeatAt]=\"p.lastHeartbeatAt\"\n [wsConnected]=\"p.wsConnected\"\n />\n </span>\n }\n\n <span class=\"text-neutral-500 shrink-0\">Session presence</span>\n <span class=\"whitespace-nowrap\">\n {{ row.instanceData?.sessionStatuses?.[0]?.presence || '—' }}\n </span>\n\n <!-- Aktivitás / run -->\n @if (row.instanceData?.sessionStatuses?.[0]; as ss) {\n <span class=\"text-neutral-500 shrink-0 self-start pt-0.5\">Run / tevékenység</span>\n <span class=\"break-words\">\n <span class=\"font-mono text-[11px] text-neutral-400 block\">{{ ss.activeRunPhase || '—' }}</span>\n <span class=\"text-neutral-300\">{{ ss.activitySummary || '—' }}</span>\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó aktivitás</span>\n <span class=\"font-mono text-[11px] whitespace-nowrap\">\n {{ (ss.lastActivityAt | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">Utolsó üzenet</span>\n <span class=\"break-words text-neutral-300\">{{ ss.lastMessage || '—' }}</span>\n }\n\n <!-- Hardware / hoszt / telepítés -->\n <span class=\"text-neutral-500 shrink-0\">MAC</span>\n <span class=\"font-mono break-all\">{{ row.registry.primaryMacAddress || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">Install path</span>\n <span class=\"font-mono break-all\">{{ row.registry.installLocationPath || '—' }}</span>\n\n <span class=\"text-neutral-500 shrink-0\">hostName</span>\n <span class=\"break-all\">{{ row.registry.hostName || '—' }}</span>\n\n <!-- Registry metadata (DyFM_Metadata) -->\n <span class=\"text-neutral-500 shrink-0\">registry __created</span>\n <span class=\"font-mono whitespace-nowrap\">\n {{ (row.registry.__created | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n <span class=\"text-neutral-500 shrink-0\">registry __updated</span>\n <span class=\"font-mono whitespace-nowrap\">\n {{ (row.registry.__updated | date:'yyyy-MM-dd HH:mm:ss') || '—' }}\n </span>\n\n\n</div>\n\n<!-- REQ-CC-RATE-002 part (a) + REQ-CC-USAGE-001 Slice 1 (cycle 258): rate-limit blokk\n a megosztott s-cc-rate-limit-info komponensben. A registry instanceKey-ből\n fetch-eli + render-eli, csak akkor látszik, ha a szerver tartott fenn state-et. -->\n<div class=\"mt-2 pt-2 border-t border-neutral-800\">\n <app-s-cc-rate-limit-info [ccapId]=\"row.registry.instanceKey || ''\" />\n</div>\n", "import { Component, computed, EventEmitter, inject, Input, OnInit, Output, Signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\nimport { ExS_InstanceRegistryRow_Response } from '../../../external-sessions/_services/exs-instance-registry-row.interface';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\nimport { S_InstancePresenceBadge_Component } from '../s-instance-presence-badge/s-instance-presence-badge.component';\n\n/**\n * Instance-szelektor pill/dropdown: a session listák tetején jelenik meg,\n * lehetővé téve a felhasználó számára, hogy másik CCAP instance session-jeit kezelje.\n * A kiválasztott ccapId a `ExS_InstanceContext_DataService.selectedCcapId_$` signal-ba kerül.\n * Standalone component — bármelyik modul importálhatja.\n * REQ-PEI-016 §15.3.\n */\n@Component({\n selector: 'app-s-instance-selector',\n standalone: true,\n imports: [CommonModule, S_InstancePresenceBadge_Component],\n templateUrl: './s-instance-selector.component.html',\n host: { class: 'block' },\n})\n/** S_InstanceSelector_Component class. */\nexport class S_InstanceSelector_Component implements OnInit {\n\n readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * REQ-INST-STATE-001 Slice 5b (cycle 695) — opcionális presence map a chip\n * badge-ekhez. Parent-injection pattern: a selector NEM inject-eli a\n * `ExS_InstancePresence_DataService`-t (mert az HttpClient injection chain-t\n * von vele, ami 63 spec-ben tört volna). Helyette a SZÜLŐ-komponens\n * gondoskodik a presence map szolgáltatásáról:\n *\n * ```html\n * <app-s-instance-selector [presenceMap]=\"presence_DS.instancePresenceMap_$()\" />\n * ```\n *\n * Ha nincs megadva (default empty Map) → nincs badge a chip-eken\n * (backward-compatible meglévő használókkal).\n */\n @Input()\n presenceMap: Map<string, EXS_InstancePresenceInfo_ClientInterface> = new Map();\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2 (USER-INPUT_4 2. tétel) — Slice 1\n * plumbing: parent-injection map a chip-szintű \"van aktív session\" sárga\n * dot indikátorhoz. Kulcs az `instanceKey`, érték `true`, ha az adott\n * instance-en legalább egy CC / CCAP / CA / OC session running-like\n * státuszban van. Default empty Map → no dot → backward-compat.\n *\n * A selector NEM származtatja saját maga a flag-et, mert az session-\n * lista DS-ek injektálása ugyanazt a HttpClient cascade failure-t okozná,\n * mint cycle 695-ben a presence_DS-szel. A parent-komponens (pl. cc-\n * dashboard, ses-list, set-agent) felel a map összerakásáért és átadásáért.\n */\n @Input()\n activeSessionMap: Map<string, boolean> = new Map();\n\n /**\n * Info ikon klikk event — REQ-UI-INST-001 Slice 3.\n * A szülő komponens ezt fogja használni, hogy a megadott instance-hez popup-ot nyisson\n * a megosztott S_InstanceDetailView_Component tartalmával (Slice 4 composite wrapper).\n */\n @Output() infoRequested: EventEmitter<{ instanceKey: string }> =\n new EventEmitter<{ instanceKey: string }>();\n\n /**\n * Instance lista pill-ekhez: registry-ből, online/offline jelzéssel.\n */\n readonly instances_$: Signal<ExS_InstanceRegistryRow_Response[]> = computed(\n (): ExS_InstanceRegistryRow_Response[] => this.peiContext_DS.instanceList_$(),\n );\n\n /**\n * Aktuálisan kiválasztott ccapId.\n */\n readonly selectedCcapId_$: Signal<string> = computed(\n (): string => this.peiContext_DS.activeCcapId_$(),\n );\n\n /**\n * Lokális instance key (a „saját\" instance kiemeléshez).\n */\n readonly localKey_$: Signal<string> = computed(\n (): string => this.peiContext_DS.localInstanceKey_$(),\n );\n\n ngOnInit(): void {\n void this.peiContext_DS.initialize();\n }\n\n /**\n * Instance pill kattintás handler.\n */\n handleSelectInstance(ccapId: string): void {\n this.peiContext_DS.selectInstance(ccapId);\n }\n\n /**\n * Info ikon klikk handler — REQ-UI-INST-001 Slice 3.\n * Nem változtat selectedCcapId-t; csak a `infoRequested` Output-ot emittálja,\n * hogy a szülő egy popup-ban megjelenítse a megadott instance registry-detail-jét.\n */\n handleInfoClick(instanceKey: string): void {\n this.infoRequested.emit({ instanceKey: instanceKey });\n }\n\n /**\n * Instance megjelenítési név: hostName (utolsó 6 karakter az instanceKey-ből).\n */\n getDisplayLabel(row: ExS_InstanceRegistryRow_Response): string {\n const host: string = row.hostName ?? '';\n const keySuffix: string = (row.instanceKey ?? '').slice(-6);\n if (host) {\n return `${host} (${keySuffix})`;\n }\n return keySuffix || '?';\n }\n\n /**\n * Instance az aktuálisan kiválasztott-e.\n */\n isSelected(row: ExS_InstanceRegistryRow_Response): boolean {\n return (row.instanceKey ?? '') === this.selectedCcapId_$();\n }\n\n /**\n * Instance a lokális-e (saját szerver).\n */\n isLocal(row: ExS_InstanceRegistryRow_Response): boolean {\n return (row.instanceKey ?? '') === this.localKey_$();\n }\n\n /**\n * REQ-INST-STATE-001 Slice 5b: presence info lekérése a map-ből.\n * Ha az instanceKey nincs a map-ben (parent nem szolgáltatott vagy még\n * nem refresh-elt), `null`-t ad vissza — a template ekkor nem rendel\n * badge-t. Ez backward-compatible: a meglévő használók empty map-pel\n * → null → no badge → változatlan render.\n */\n getPresenceForRow(row: ExS_InstanceRegistryRow_Response): EXS_InstancePresenceInfo_ClientInterface | null {\n const key: string = row.instanceKey ?? '';\n if (!key) {\n return null;\n }\n return this.presenceMap.get(key) ?? null;\n }\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2: active-session flag lekérése a\n * map-ből. Üres key vagy nincs entry → false (no dot). Backward-compat:\n * meglévő használók empty map-pel → minden row false → változatlan render.\n */\n getActiveSessionForRow(row: ExS_InstanceRegistryRow_Response): boolean {\n const key: string = row.instanceKey ?? '';\n if (!key) {\n return false;\n }\n return this.activeSessionMap.get(key) === true;\n }\n}\n", "<!-- Instance-szelektor pill sor (REQ-PEI-016 §15.3) -->\n<div class=\"flex gap-1 flex-wrap items-center\">\n <span class=\"text-[10px] text-neutral-500 mr-1 uppercase tracking-wider\">Instance:</span>\n\n @for (instance of instances_$(); track instance.instanceKey) {\n <!-- Chip + info icon csoport — REQ-UI-INST-001 Slice 3. Két külön <button>,\n mert a HTML nem engedi a button-in-button-t. REQ-INST-STATE-001\n Slice 5b (cycle 695): presence dot a chip előtt, ha a parent\n szolgáltatott `presenceMap`-et. -->\n <div class=\"flex items-center gap-0.5 group\">\n <button\n class=\"px-2 py-0.5 text-[11px] rounded-full border transition-colors flex items-center gap-1\"\n [class.border-ccapAccent]=\"isSelected(instance)\"\n [class.text-ccapAccent]=\"isSelected(instance)\"\n [ngClass]=\"{'bg-ccapAccent/10': isSelected(instance)}\"\n [class.border-neonDefault]=\"!isSelected(instance)\"\n [class.text-neutral-400]=\"!isSelected(instance)\"\n [class.hover:text-neutral-200]=\"!isSelected(instance)\"\n [class.hover:border-neutral-500]=\"!isSelected(instance)\"\n (click)=\"handleSelectInstance(instance.instanceKey ?? '')\">\n @if (getPresenceForRow(instance); as p) {\n <app-s-instance-presence-badge\n [presence]=\"p.presence\"\n [lastHeartbeatAt]=\"p.lastHeartbeatAt\"\n [wsConnected]=\"p.wsConnected\"\n [showLabel]=\"false\"\n />\n }\n {{ getDisplayLabel(instance) }}\n @if (isLocal(instance)) {\n <span class=\"ml-0.5 text-[9px] text-neutral-500\">(local)</span>\n }\n @if (getActiveSessionForRow(instance)) {\n <!-- REQ-UI-INST-CHIP-INDICATORS-001 part 2: sárga spinning dot,\n ha az adott instance-en aktív session fut. -->\n <span class=\"inline-block w-1.5 h-1.5 rounded-full bg-yellow-400 animate-pulse shrink-0\"\n title=\"Aktív session fut ezen az instance-en\"\n aria-label=\"Aktív session fut ezen az instance-en\"\n data-testid=\"s-instance-active-session-dot\"></span>\n }\n </button>\n <button\n type=\"button\"\n class=\"text-[11px] leading-none w-4 h-4 rounded-full border border-neutral-700 text-neutral-500 hover:text-ccapAccent hover:border-ccapAccent transition-colors flex items-center justify-center\"\n title=\"Instance details\"\n aria-label=\"Show instance details\"\n data-testid=\"s-instance-selector-info-btn\"\n (click)=\"handleInfoClick(instance.instanceKey ?? '')\">\n i\n </button>\n </div>\n }\n\n @if (!instances_$().length) {\n <span class=\"text-[10px] text-neutral-600 italic\">loading...</span>\n }\n</div>\n", "import { Component, computed, inject, Input, signal, Signal, WritableSignal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ExS_InstanceRegistry_DataService } from '../../../external-sessions/_services/exs-instance-registry.data-service';\nimport { ExS_RuntimeInstances_DataService } from '../../../external-sessions/_services/data-services/exs-runtime-instances.data-service';\nimport { EXS_InstancePresenceInfo_ClientInterface } from '../../../external-sessions/_services/data-services/exs-instance-presence-info.interface';\nimport { Set_InstanceRegistryViewRows_Util } from '../../../config/_modules/settings/_collections/set-instance-registry-view-rows.util';\nimport { Set_InstanceRegistryViewRow_Interface } from '../../../config/_modules/settings/_models/interfaces/set-instance-registry-view-row.interface';\nimport { S_InstanceDetailView_Component } from '../s-instance-detail-view/s-instance-detail-view.component';\nimport { S_InstanceSelector_Component } from '../s-instance-selector/s-instance-selector.component';\nimport { S_Modal_Component } from '../s-modal/s-modal.component';\n\n/**\n * REQ-UI-INST-001 Slice 4 — composite wrapper: instance chip-sor + info-popup host.\n *\n * A komponens magában tartja az info-popup state-et (`selectedInstanceKey_$`),\n * fog-adja a gyerek `S_InstanceSelector_Component` `infoRequested` eventjét, és\n * a kiválasztott instance-hez a Settings-beli SSOT ViewRow-t (`Set_InstanceRegistryViewRow_Interface`)\n * betölti a megosztott `S_InstanceDetailView_Component`-be egy `s-modal` popup-ban.\n *\n * A chip-sor main click-je (instance select) változatlanul a `S_InstanceSelector_Component`\n * belsejében marad — ez a wrapper csak a popup-ot adja hozzá. A parent komponensek\n * (`ses-list`, `cc-dashboard`, `ca-dashboard`, `oc-dashboard`, `set-agent`) Slice 5-ben állnak át\n * erre a wrapperre.\n */\n@Component({\n selector: 'app-s-instance-chip-row-with-info',\n standalone: true,\n imports: [\n CommonModule,\n S_InstanceSelector_Component,\n S_Modal_Component,\n S_InstanceDetailView_Component,\n ],\n templateUrl: './s-instance-chip-row-with-info.component.html',\n host: { class: 'block' },\n})\n/** S_InstanceChipRowWithInfo_Component class. */\nexport class S_InstanceChipRowWithInfo_Component {\n\n readonly instanceRegistry_DS: ExS_InstanceRegistry_DataService =\n inject(ExS_InstanceRegistry_DataService);\n\n readonly runtimeInstances_DS: ExS_RuntimeInstances_DataService =\n inject(ExS_RuntimeInstances_DataService);\n\n /**\n * REQ-INST-STATE-001 Slice 5b consumer wire-up + REQ-UI-INST-CHIP-INDICATORS-001\n * (cycle 706, USER-INPUT_4 user-prio): a parent komponens szolgáltathatja a\n * presence map-et, amit a wrapper továbbítja a selector + detail-view\n * gyerekkomponenseknek. Default empty Map → no badge → backward-compat\n * a 19+ consumer-spec-tel.\n *\n * A wrapper NEM inject-eli a presence_DS-t, mert az HttpClient injection\n * chain failure-t okozna a downstream specekben (cycle 698 tanulság).\n * A consumer (parent) felel a presence_DS injection-ért és a presenceMap\n * átadásáért.\n */\n @Input()\n presenceMap: Map<string, EXS_InstancePresenceInfo_ClientInterface> = new Map();\n\n /**\n * REQ-UI-INST-CHIP-INDICATORS-001 part 2 (USER-INPUT_4 2. tétel) — Slice 1:\n * parent-injection map a chip-szintű \"van aktív session\" sárga dot\n * indikátorhoz. A wrapper csak átengedi a selector gyerekkomponensnek;\n * a tényleges aggregálást a parent (cc-dashboard / ses-list / set-agent)\n * felel össze a session lista DS-ek alapján. Default empty Map → no dot.\n */\n @Input()\n activeSessionMap: Map<string, boolean> = new Map();\n\n /**\n * A popup-hoz kiválasztott instance key (null = zárt modal).\n */\n readonly selectedInstanceKey_$: WritableSignal<string | null> =\n signal<string | null>(null);\n\n /**\n * Registry + instance_data join ViewRow lista (SSOT: Set_InstanceRegistryViewRows_Util).\n * Ugyanaz az adatforrás, mint a Settings → Instances táblázat.\n */\n readonly viewRows_$: Signal<Set_InstanceRegistryViewRow_Interface[]> = computed(\n (): Set_InstanceRegistryViewRow_Interface[] =>\n Set_InstanceRegistryViewRows_Util.buildViewRows(\n this.instanceRegistry_DS.list_$(),\n this.runtimeInstances_DS.ccapInstanceList_$(),\n ),\n );\n\n /**\n * A kiválasztott instance-hez tartozó ViewRow, vagy null ha nincs egyezés.\n */\n readonly selectedRow_$: Signal<Set_InstanceRegistryViewRow_Interface | null> = computed(\n (): Set_InstanceRegistryViewRow_Interface | null => {\n const key: string | null = this.selectedInstanceKey_$();\n if (!key) {\n return null;\n }\n return this.viewRows_$().find(\n (row: Set_InstanceRegistryViewRow_Interface): boolean =>\n (row.registry.instanceKey ?? '') === key,\n ) ?? null;\n },\n );\n\n /**\n * Modal nyitva akkor és csak akkor, ha van kiválasztott ViewRow.\n */\n readonly isModalOpen_$: Signal<boolean> = computed(\n (): boolean => this.selectedRow_$() !== null,\n );\n\n /**\n * Modal cím — instance hostName vagy instanceKey-suffix.\n */\n readonly modalTitle_$: Signal<string> = computed((): string => {\n const row: Set_InstanceRegistryViewRow_Interface | null = this.selectedRow_$();\n if (!row) {\n return '';\n }\n const host: string = row.registry.hostName ?? '';\n const key: string = row.registry.instanceKey ?? '';\n if (host) {\n return `Instance — ${host}`;\n }\n return `Instance — ${key.slice(-6) || '?'}`;\n });\n\n /**\n * Gyerek chip-sor `infoRequested` handler — megnyitja a popup-ot.\n */\n handleInfoRequested(event: { instanceKey: string }): void {\n this.selectedInstanceKey_$.set(event.instanceKey);\n }\n\n /**\n * REQ-INST-STATE-001 Slice 5b: a kiválasztott row presence info-ja a\n * detail-view számára. Cached lookup a presenceMap-ből; ha nincs entry\n * → undefined (detail-view template @if nem render-eli az \"Instance\n * presence\" sort).\n */\n getPresenceForSelectedRow(): EXS_InstancePresenceInfo_ClientInterface | undefined {\n const row: Set_InstanceRegistryViewRow_Interface | null = this.selectedRow_$();\n if (!row) {\n return undefined;\n }\n const key: string = row.registry.instanceKey ?? '';\n if (!key) {\n return undefined;\n }\n return this.presenceMap.get(key);\n }\n\n /**\n * Modal close handler — bezárja a popup-ot (X / Escape / backdrop).\n */\n handleModalClosed(): void {\n this.selectedInstanceKey_$.set(null);\n }\n}\n", "<!-- REQ-UI-INST-001 Slice 4: instance chip-sor + info popup host (composite wrapper).\n REQ-INST-STATE-001 Slice 5b consumer + REQ-UI-INST-CHIP-INDICATORS-001\n (cycle 706 part 1 + cycle 709 part 2): presenceMap = chip presence dot-ok\n (zöld/sárga/szürke); activeSessionMap = sárga spinning \"aktív session\"\n dot. Mindkettő parent-injection (default empty Map → no dot). -->\n<app-s-instance-selector\n [presenceMap]=\"presenceMap\"\n [activeSessionMap]=\"activeSessionMap\"\n (infoRequested)=\"handleInfoRequested($event)\" />\n\n@if (isModalOpen_$()) {\n <app-s-modal\n [isOpen]=\"true\"\n [title]=\"modalTitle_$()\"\n [maxWidth]=\"'lg'\"\n (closed)=\"handleModalClosed()\">\n @if (selectedRow_$(); as row) {\n <app-s-instance-detail-view\n [row]=\"row\"\n [presence]=\"getPresenceForSelectedRow()\" />\n }\n </app-s-modal>\n}\n", "import { computed, Injectable, Signal, signal, WritableSignal } from '@angular/core';\n\n/**\n * Session overlay coordinator — single SSOT a chat oszlop bal-alsó stack\n * \"belógó\" tab-overlay-jeinek nyitott állapotára (Schedule / QuickCast /\n * Coordinator / Quick Settings).\n *\n * Cél: ha az egyik overlay panel nyitva van és a user megnyit egy másikat,\n * az előző automatikusan bezáródjon — ne legyen több nyitott panel egyszerre,\n * mert a stack-ben fizikailag fednék egymást.\n *\n * Megvalósítás: egyetlen `currentlyOpenId_$` writable signal tartja a jelenleg\n * nyitott overlay azonosítóját (vagy `null` ha mind zárt). Minden overlay\n * komponens egy `isOpen(id)` computed-en keresztül olvassa, hogy ő nyitva\n * van-e — `setOpen(id)` hívás a saját azonosítójával nyit, `null`-lal zár.\n */\n@Injectable({ providedIn: 'root' })\n/** S_SessionOverlayCoordinator_ControlService class. */\nexport class S_SessionOverlayCoordinator_ControlService {\n\n /**\n * A jelenleg nyitott overlay azonosítója (vagy `null` ha mind zárt).\n * A komponensek olvassák `isOpen(id)`-n keresztül; írást a `setOpen(id)`\n * tesz, ami atomikusan vált át — a korábban nyitott overlay automatikusan\n * bezáródik, mert már nem ő az aktív id.\n */\n private readonly currentlyOpenId_$: WritableSignal<string | null> = signal<string | null>(null);\n\n /**\n * Computed: az adott `id`-jú overlay nyitva van-e jelenleg.\n * Egy overlay komponens ezt használja a panel render-gating-hez.\n */\n isOpen(id: string): Signal<boolean> {\n return computed((): boolean => this.currentlyOpenId_$() === id);\n }\n\n /**\n * Új aktív overlay beállítása (vagy `null` az összes zárásához). Ha a `id`\n * már aktív, a hívás idempotens. Ha más `id` volt aktív, az automatikusan\n * \"bezáródik\" (nem ő a `currentlyOpenId_$` értéke többé).\n */\n setOpen(id: string | null): void {\n this.currentlyOpenId_$.set(id);\n }\n\n /**\n * Toggle: ha az adott `id` jelenleg nyitva van → zárás (`null`-ra állít),\n * különben megnyitás (a `id`-re állít, lezárva ezzel az esetleges másikat).\n * Az overlay komponensek `handleToggle()` metódusa ezt hívja.\n */\n toggle(id: string): void {\n if (this.currentlyOpenId_$() === id) {\n this.currentlyOpenId_$.set(null);\n } else {\n this.currentlyOpenId_$.set(id);\n }\n }\n}\n", "/**\n * Session overlay identifier type — `S_SessionOverlayCoordinator_ControlService`\n * használja, hogy a négy bal-alsó \"belógó\" overlay (Schedule / QuickCast /\n * Coordinator / Quick Settings) közül egyszerre csak egy lehessen nyitva.\n */\nexport enum S_SessionOverlayId_Type {\n schedule = 'schedule',\n quickcast = 'quickcast',\n coordinator = 'coordinator',\n quickSettings = 'quick-settings',\n}\n", "import { Component, computed, inject, input, InputSignal, OnInit, signal, Signal, WritableSignal } from '@angular/core';\nimport { DatePipe, NgClass } from '@angular/common';\n\nimport { SCH_Execution_Response, SCH_Job_Response } from '../../../../scheduler/_models/interfaces/sch-job.interface';\nimport { SCH_ScheduledJobs_DataService } from '../../../../scheduler/_services/data-services/sch-scheduled-jobs.data-service';\nimport { SCH_SchedulePresetLabel_Pipe } from '../../../../scheduler/_pipes/sch-schedule-preset-label.pipe';\nimport { S_SessionOverlayCoordinator_ControlService } from '../../../_services/control-services/s-session-overlay-coordinator.control-service';\nimport { S_SessionOverlayId_Type } from '../../../_collections/consts/s-session-overlay-id.type-enum';\n\n/**\n * Session schedule floating overlay — bal alul \"belógó\" gomb a chat oszlop fölött.\n *\n * A tab-gomb mindig látszik. Aktív állapot (van enabled scheduled job a sessionhöz):\n * neon amber (sárga) border + glow, kattintható, panel kinyitható. Inaktív (nincs schedule):\n * szürke border, nem világít, `disabled` — kattintásra nem nyílik panel.\n * Klikk aktív gombon: a gomb beljebb csúszik, jobbra kinyit egy panel, amin a session-höz\n * tartozó job(-ok) mellett `Trigger Now` gomb található.\n *\n * A komponens self-loading: ha `jobs_$()` üres (a user még nem járt a Schedule\n * felületen), `loadAll()`-t hív induláskor — így a kis indikátor mindig megjelenik\n * ott, ahol kell, függetlenül attól, hogy más dashboard-ot előbb látott-e a user.\n *\n * Slot-tartalom: a `[sChatColumnOverlay]` slotba projektálódik a shared\n * `S_SessionChatColumnLayout_Component`-ben — a host `absolute bottom-4 left-0`\n * a teljes chat oszlop relative ankerére települ.\n */\n@Component({\n selector: 'app-s-session-schedule-overlay',\n standalone: true,\n imports: [NgClass, DatePipe, SCH_SchedulePresetLabel_Pipe],\n templateUrl: './s-session-schedule-overlay.component.html',\n host: { class: 'absolute bottom-4 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionScheduleOverlay_Component class. */\nexport class S_SessionScheduleOverlay_Component implements OnInit {\n\n /** A session ID, amihez a scheduled job-okat keressük (target.payload.sessionId match). */\n readonly sessionId: InputSignal<string> = input.required<string>();\n\n private readonly scheduledJobs_DS: SCH_ScheduledJobs_DataService =\n inject(SCH_ScheduledJobs_DataService);\n private readonly overlayCoordinator_CS: S_SessionOverlayCoordinator_ControlService =\n inject(S_SessionOverlayCoordinator_ControlService);\n\n /** Saját overlay-azonosító — a koordinátor service ezt használja a single-open policy-hoz. */\n private readonly OVERLAY_ID: string = S_SessionOverlayId_Type.schedule;\n\n /**\n * Panel nyitva van-e — a koordinátor service-en keresztül, hogy egyszerre csak\n * egy bal-alsó overlay panel lehessen nyitva. Másik overlay nyitása auto-zárja\n * ezt (a `currentlyOpenId_$` már nem ezé az overlay-é).\n */\n readonly isOpen_$: Signal<boolean> = this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);\n\n /** Per-job folyamatban-lévő trigger flagek — disable + label-csere a gombon. */\n readonly busyJobIds_$: WritableSignal<Set<string>> = signal<Set<string>>(new Set<string>());\n\n /**\n * A jelenlegi sessionId-hoz tartozó aktív (enabled) scheduled job-ok.\n * Üres lista esetén az overlay teljesen elrejti magát.\n */\n readonly sessionJobs_$: Signal<SCH_Job_Response[]> = computed(\n (): SCH_Job_Response[] => {\n const sid: string = (this.sessionId() ?? '').trim();\n if (!sid) {\n return [];\n }\n const all: SCH_Job_Response[] = this.scheduledJobs_DS.jobs_$();\n return all.filter(\n (job: SCH_Job_Response): boolean => {\n if (job.enabled === false) {\n return false;\n }\n const jobSid: string = (job.target?.payload?.sessionId ?? '').trim();\n return jobSid === sid;\n },\n );\n },\n );\n\n /** Van-e legalább 1 job — render-gate; ha nincs, semmit nem mutat az overlay. */\n readonly hasSchedule_$: Signal<boolean> = computed(\n (): boolean => this.sessionJobs_$().length > 0,\n );\n\n ngOnInit(): void {\n // Self-load: ha a scheduler list még üres, lekérjük (best-effort, nem blokkolja a UI-t).\n if (this.scheduledJobs_DS.jobs_$().length === 0) {\n void this.scheduledJobs_DS.loadAll();\n }\n }\n\n /** Tab-gomb klikk — koordinátor toggle (auto-zárja ha másik overlay nyitva volt). */\n handleToggle(): void {\n this.overlayCoordinator_CS.toggle(this.OVERLAY_ID);\n }\n\n /**\n * `Trigger Now` klikk: scheduledJobs_DS.triggerNow hívás a job _id-jával.\n * A gomb a hívás idejére disabled (busy set), siker/hiba után visszakapcsol.\n */\n async handleTriggerNow(job: SCH_Job_Response): Promise<void> {\n const jobId: string = (job._id ?? '').trim();\n if (!jobId) {\n return;\n }\n if (this.busyJobIds_$().has(jobId)) {\n return;\n }\n this.busyJobIds_$.update((prev: Set<string>): Set<string> => {\n const next: Set<string> = new Set<string>(prev);\n next.add(jobId);\n return next;\n });\n try {\n await this.scheduledJobs_DS.triggerNow({ jobId: jobId, reason: 'session-overlay-manual' });\n } finally {\n this.busyJobIds_$.update((prev: Set<string>): Set<string> => {\n const next: Set<string> = new Set<string>(prev);\n next.delete(jobId);\n return next;\n });\n }\n }\n\n /**\n * Per-job utolsó N execution a data-service cache-ből — a sch-job-list kártya\n * mintáját követi, hogy az overlay panel ugyanazt a recent-trigger info-t mutassa.\n */\n getRecentExecutions(job: SCH_Job_Response): SCH_Execution_Response[] {\n const jobId: string = job._id ?? '';\n if (!jobId) {\n return [];\n }\n return this.scheduledJobs_DS.recentExecutions_$().get(jobId) ?? [];\n }\n\n /** Execution státusz → badge CSS class (parity a sch-job-list-tel). */\n getExecutionBadgeClass(status?: string): string {\n switch (status) {\n case 'triggered': return 'bg-emerald-500/20 text-emerald-400';\n case 'completed': return 'bg-sky-500/20 text-sky-400';\n case 'skipped': return 'bg-neutral-600/30 text-neutral-400';\n case 'failed': return 'bg-red-500/20 text-red-400';\n case 'cancelled': return 'bg-amber-500/20 text-amber-400';\n case 'dry-run': return 'bg-purple-500/20 text-purple-400';\n default: return 'bg-neutral-700/40 text-neutral-500';\n }\n }\n\n /** Execution státusz → rövid badge label (parity a sch-job-list-tel). */\n getExecutionBadgeLabel(status?: string): string {\n switch (status) {\n case 'triggered': return 'OK';\n case 'completed': return 'Done';\n case 'skipped': return 'Skip';\n case 'failed': return 'Fail';\n case 'cancelled': return 'Cancel';\n case 'dry-run': return 'Dry';\n default: return '?';\n }\n }\n\n /**\n * Tooltip sor az execution badge-hez (REQ-SCH-FAIL-001):\n * `<ISO date> — <status>` + opcionálisan `(skipReason)` skip ághoz +\n * `: <errorDetails.message>` failed ághoz, hogy a user lássa MIÉRT bukott el.\n */\n buildExecutionBadgeTooltip(exec: SCH_Execution_Response): string {\n const parts: string[] = [];\n if (exec.scheduledAt) {\n parts.push(new Date(exec.scheduledAt).toISOString().slice(0, 16).replace('T', ' '));\n parts.push(' — ');\n }\n parts.push(exec.status ?? '?');\n if (exec.skipReason) {\n parts.push(` (${exec.skipReason})`);\n }\n if (exec.status === 'failed' && exec.errorDetails?.message) {\n parts.push(`: ${exec.errorDetails.message}`);\n }\n return parts.join('');\n }\n}\n", "<div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-tab.\n Aktív (van schedule): neon cyan + shadow-glow, kattintható.\n Inaktív (nincs schedule): szürke + nem világít, `disabled` — kattintásra nem nyílik panel. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [disabled]=\"!hasSchedule_$()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"Schedule\"\n [title]=\"!hasSchedule_$()\n ? 'Nincs schedule ehhez a sessionhöz'\n : (isOpen_$() ? 'Schedule panel bezárása' : 'Schedule megjelenítése (' + sessionJobs_$().length + ' job)')\"\n class=\"relative flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 rounded-r-lg\n transition-all duration-200 ease-out\n disabled:cursor-not-allowed\"\n [ngClass]=\"hasSchedule_$()\n ? ['border-neonAmber/60', 'text-neonAmber', 'shadow-neon-glow-orange',\n 'hover:border-neonAmber', 'hover:bg-neonAmber/10']\n : ['border-neutral-700', 'text-neutral-600']\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5\n a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n @if (hasSchedule_$() && sessionJobs_$().length > 1) {\n <span aria-hidden=\"true\"\n class=\"absolute -top-1 -right-1 min-w-[14px] h-[14px] px-[2px]\n bg-neonCyan text-neutral-900 rounded-full text-[9px]\n font-mono font-bold leading-[14px] text-center\n shadow-neon-glow-cyan\">\n {{ sessionJobs_$().length > 9 ? '9+' : sessionJobs_$().length }}\n </span>\n }\n </button>\n\n <!-- Slide-out panel: csak nyitva renderelünk, hogy zárt állapotban semmi\n interaktív elem ne lógjon a chat fölé. -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 border-neonAmber/60 rounded-lg p-3\n flex flex-col gap-2 min-w-[16rem] max-w-xs\n shadow-neon-glow-orange\">\n\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-[10px] uppercase tracking-wider text-neonAmber font-mono\">\n Schedule ({{ sessionJobs_$().length }})\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"Schedule panel bezárása\"\n class=\"text-neutral-400 hover:text-neonAmber leading-none px-1 transition-colors\">\n ×\n </button>\n </div>\n\n @for (job of sessionJobs_$(); track job._id) {\n <div class=\"flex flex-col gap-1 border-t border-neutral-800\n pt-2 first:border-t-0 first:pt-0\">\n\n <!-- Felső sor: név + frequency pipe + Trigger Now ikon-gomb. -->\n <div class=\"flex items-center justify-between gap-2\">\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm text-neutral-100 truncate\" [title]=\"job.name ?? ''\">\n {{ (job.name ?? '').trim() || 'Unnamed schedule' }}\n </span>\n <!-- Frequency: ugyanaz a pipe mint a sch-job-list kártya. -->\n <span class=\"text-[10px] text-neutral-500 font-mono\">\n {{ job.schedule | schSchedulePresetLabel }}\n </span>\n </div>\n <!-- Trigger Now ikon-gomb: play / \"▶\" SVG. -->\n <button type=\"button\"\n (click)=\"handleTriggerNow(job)\"\n [disabled]=\"busyJobIds_$().has(job._id ?? '')\"\n aria-label=\"Trigger now\"\n [title]=\"busyJobIds_$().has(job._id ?? '') ? 'Indítás folyamatban…' : 'Most futtatni (Trigger Now)'\"\n class=\"shrink-0 flex items-center justify-center w-7 h-7 rounded-full\n bg-neutral-900 border-2 border-neonAmber/60 text-neonAmber\n hover:border-neonAmber hover:bg-neonAmber/10 hover:shadow-neon-glow-orange\n disabled:opacity-40 disabled:cursor-not-allowed\n transition-all\">\n <svg class=\"w-3.5 h-3.5\" fill=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path d=\"M8 5v14l11-7z\" />\n </svg>\n </button>\n </div>\n\n <!-- Következő ütemezett futás (parity a sch-job-list-tel: emerald, ugyanaz a date format). -->\n <div class=\"text-[10px] text-neutral-500 flex items-center gap-1\"\n title=\"Következő ütemezett futás időpontja\">\n <span>Következő:</span>\n @if (job.nextDueAt) {\n <span class=\"text-emerald-400 font-medium\">\n {{ job.nextDueAt | date:'yyyy-MM-dd HH:mm' }}\n </span>\n } @else {\n <span class=\"text-neutral-300\">—</span>\n }\n </div>\n\n <!-- Utolsó execution-ök badge-soros — ugyanaz a státusz-mapping mint a sch-job-list-en. -->\n @if (getRecentExecutions(job); as execs) {\n @if (execs.length > 0) {\n <div class=\"flex items-center gap-1 flex-wrap\">\n <span class=\"text-[10px] text-neutral-500\">Trigger-ek:</span>\n @for (exec of execs; track exec._id) {\n <span class=\"inline-flex items-center px-1.5 py-0.5 text-[10px] rounded\"\n [ngClass]=\"getExecutionBadgeClass(exec.status)\"\n [title]=\"buildExecutionBadgeTooltip(exec)\">\n {{ getExecutionBadgeLabel(exec.status) }}\n </span>\n }\n </div>\n }\n }\n\n </div>\n }\n\n </div>\n }\n\n</div>\n", "import {\n Component,\n inject,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\n\nimport { S_SessionOverlayCoordinator_ControlService } from '../../../_services/control-services/s-session-overlay-coordinator.control-service';\nimport { S_SessionOverlayId_Type } from '../../../_collections/consts/s-session-overlay-id.type-enum';\n\n/**\n * QuickCast floating overlay — bal alul \"belógó\" gomb a Schedule overlay fölött.\n *\n * Default állapot: kis villám-ikon tab a bal szélen. Klikk → a gomb beljebb csúszik\n * és jobbra kinyit egy panel, amin néhány rövid akciógomb található (Go, Continue,\n * OK, Proceed). Bármelyik gombra kattintva a komponens a `actionSelected` output-on\n * emittálja a kiválasztott szöveget — a parent maga küldi el a session-be (így a\n * komponens nem köti magát a CCAP `Session_DataService`-hez, működni tud későbbi\n * OC / CA / CC bekötéssel is).\n *\n * Duplikátum-védelem: az utolsó klikk után 800ms-ig minden további klikk no-op\n * (in-component throttle), miközben az adott gomb `pending` állapotban látszódik.\n *\n * Slot: `[sChatColumnOverlay]` — a shared `S_SessionChatColumnLayout_Component`\n * relative ankerére települ; host class `absolute bottom-16 left-0` → a Schedule\n * overlay (bottom-4) fölött jelenik meg.\n */\n@Component({\n selector: 'app-s-session-quickcast-overlay',\n standalone: true,\n templateUrl: './s-session-quickcast-overlay.component.html',\n host: { class: 'absolute bottom-16 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionQuickCast_Overlay_Component class. */\nexport class S_SessionQuickCast_Overlay_Component {\n\n /** Akciógomb-feliratok (egyben a session-be küldött szöveg).\n * REQ-UI-QUICKCAST-PRESETS-STATUS-PRESENCE-001 (cycle 901): 2 új preset —\n * 'Hogy állunk most?' (status-szummázás kérés) + 'itt vagy?' (presence-check). */\n readonly actions: InputSignal<string[]> = input<string[]>([\n 'Go',\n 'Continue',\n 'OK',\n 'Proceed',\n 'implement',\n 'Review Very Very Carefully',\n 'Ensure Documentations',\n 'tervezd meg nagyon alaposan és fejleszd le',\n 'Hogy állunk most?',\n 'itt vagy?',\n ]);\n\n /** Egy akciógomb klikk → a parent kapja a szöveget és küldi a session-be. */\n readonly actionSelected: OutputEmitterRef<string> = output<string>();\n\n private readonly overlayCoordinator_CS: S_SessionOverlayCoordinator_ControlService =\n inject(S_SessionOverlayCoordinator_ControlService);\n\n /** Saját overlay-azonosító — single-open policy a többi tab-overlay-jel együtt. */\n private readonly OVERLAY_ID: string = S_SessionOverlayId_Type.quickcast;\n\n /**\n * Panel nyitva van-e — a koordinátor service-en keresztül, hogy egyszerre csak\n * egy bal-alsó overlay panel lehessen nyitva (másik nyitása auto-zárja).\n */\n readonly isOpen_$: Signal<boolean> = this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);\n\n /**\n * Az utoljára kattintott akció (vagy null) — duplikátum-védelmi cooldown alatt.\n * Csak az adott akciógomb látszódik disabled / pending-ben, a többi kattintható.\n */\n readonly pendingAction_$: WritableSignal<string | null> = signal<string | null>(null);\n\n /** Tab-gomb klikk — koordinátor toggle (auto-zárja ha másik overlay nyitva volt). */\n handleToggle(): void {\n this.overlayCoordinator_CS.toggle(this.OVERLAY_ID);\n }\n\n /**\n * Akció gomb klikk: throttle ha már fut egy másik akció (800ms cooldown), különben\n * pending-be teszi az adott akciót, kibocsátja a parent-nek és időzítve nullázza.\n */\n handleAction(action: string): void {\n if (this.pendingAction_$() !== null) {\n return;\n }\n this.pendingAction_$.set(action);\n this.actionSelected.emit(action);\n setTimeout((): void => {\n if (this.pendingAction_$() === action) {\n this.pendingAction_$.set(null);\n }\n }, 800);\n }\n}\n", "<div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-gomb. Closed: -translate-x-2 (jobban balra tucked).\n Open: translate-x-2. Neon cyan stílus a Send/Queue/Stop minta szerint. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"QuickCast\"\n [title]=\"isOpen_$() ? 'QuickCast bezárása' : 'QuickCast megnyitása'\"\n class=\"flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 border-neonCyan/60 rounded-r-lg text-neonCyan\n shadow-neon-glow-cyan\n hover:border-neonCyan hover:bg-neonCyan/10\n transition-all duration-200 ease-out\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n </button>\n\n <!-- Slide-out panel: csak nyitva renderelünk; akciógombok kompakt egy-oszlopos listában. -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 border-neonCyan/60 rounded-md p-1.5\n flex flex-col gap-1 min-w-[8rem] max-w-[13rem]\n shadow-neon-glow-cyan\">\n\n <div class=\"flex items-center justify-between gap-1\">\n <span class=\"text-[10px] uppercase tracking-wider text-neonCyan font-mono leading-none\">\n QuickCast\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"QuickCast panel bezárása\"\n class=\"text-neutral-400 hover:text-neonCyan leading-none text-xs px-1 transition-colors\">\n ×\n </button>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n @for (action of actions(); track action) {\n <button type=\"button\"\n (click)=\"handleAction(action)\"\n [disabled]=\"pendingAction_$() === action\"\n class=\"px-1.5 py-0.5 rounded border-2 border-neonCyan/60 text-neonCyan\n text-[11px] font-medium\n hover:border-neonCyan hover:bg-neonCyan/10 hover:shadow-neon-glow-cyan\n disabled:opacity-40 disabled:cursor-not-allowed\n transition-all leading-tight\">\n {{ pendingAction_$() === action ? 'Sending…' : action }}\n </button>\n }\n </div>\n\n </div>\n }\n\n</div>\n", "import { Component, computed, inject, input, InputSignal, OnInit, signal, Signal, WritableSignal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgClass } from '@angular/common';\n\nimport { CCAP_CoordinatorSession_Response } from '../../../../../_models/interfaces/coordinator/ccap-coordinator-session.interface';\nimport { Coordinator_DataService } from '../../../../coordinator/_services/coordinator.data-service';\nimport { AIS_RegistrySsot_ControlService } from '../../../../ai-systems/_services/ais-registry-ssot.control-service';\nimport { MRg_ListItem_Response } from '../../../../ai-systems/_modules/model-registry/_services/mrg-list-item.interface';\nimport { S_SessionOverlayCoordinator_ControlService } from '../../../_services/control-services/s-session-overlay-coordinator.control-service';\nimport { S_SessionOverlayId_Type } from '../../../_collections/consts/s-session-overlay-id.type-enum';\n\n/**\n * Session coordinator floating overlay — bal alul \"belógó\" gomb a QuickCast fölött.\n *\n * A tab-gomb mindig látszik. Aktív állapot (van coordinator a sessionhöz, status nem\n * `stopped`/`completed`): neon purple border + glow. Inaktív állapot (nincs assigned\n * coordinator): szürke border, nem világít — DE továbbra is kattintható, hogy a user\n * a panelen keresztül assign-olhasson koordinátort.\n *\n * Panel — assigned ágon: provider / model / status info + Stop gomb (unassign).\n * Panel — nem assigned ágon: model dropdown + Assign gomb (`startCoordinator`).\n *\n * A komponens self-loading: ngOnInit-ben ha `globalCoordinatorsList_$` üres, hív\n * `loadAllCoordinatorsForManagementPage()`-t; az AIS registry LLM listáját is biztosítja\n * (`ensureLoaded('llm')`), hogy a dropdown azonnal feltöltődjön.\n *\n * Slot-tartalom: a `[sChatColumnOverlay]` slotba projektálódik a shared\n * `S_SessionChatColumnLayout_Component`-ben — host `absolute bottom-28 left-0`,\n * a Schedule (bottom-4) és QuickCast (bottom-16) overlay-ek FÖLÖTT.\n */\n@Component({\n selector: 'app-s-session-coordinator-overlay',\n standalone: true,\n imports: [NgClass, FormsModule],\n templateUrl: './s-session-coordinator-overlay.component.html',\n host: { class: 'absolute bottom-28 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionCoordinator_Overlay_Component class. */\nexport class S_SessionCoordinator_Overlay_Component implements OnInit {\n\n /** A session ID, amihez a coordinator-t keressük / assign-oljuk. */\n readonly sessionId: InputSignal<string> = input.required<string>();\n\n private readonly coordinator_DS: Coordinator_DataService = inject(Coordinator_DataService);\n private readonly registrySsot_CS: AIS_RegistrySsot_ControlService = inject(AIS_RegistrySsot_ControlService);\n private readonly overlayCoordinator_CS: S_SessionOverlayCoordinator_ControlService =\n inject(S_SessionOverlayCoordinator_ControlService);\n\n /** Saját overlay-azonosító — single-open policy a többi tab-overlay-jel együtt. */\n private readonly OVERLAY_ID: string = S_SessionOverlayId_Type.coordinator;\n\n /**\n * Panel nyitva van-e — a koordinátor service-en keresztül, hogy egyszerre csak\n * egy bal-alsó overlay panel lehessen nyitva (másik nyitása auto-zárja).\n */\n readonly isOpen_$: Signal<boolean> = this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);\n\n /** Assign / stop hívás folyamatban — gomb disabled + felirat-csere. */\n readonly isBusy_$: WritableSignal<boolean> = signal<boolean>(false);\n\n /** Model dropdown kiválasztott értéke (`provider:::modelName` composite key). */\n readonly selectedModelKey_$: WritableSignal<string> = signal<string>('');\n\n /** AIS registry enabled LLM modellek a dropdown-hoz. */\n readonly modelOptions_$: Signal<MRg_ListItem_Response[]> = computed(\n (): MRg_ListItem_Response[] => this.registrySsot_CS.enabledLlmModels_$(),\n );\n\n /**\n * A jelenlegi sessionId-hoz tartozó assigned (aktív) coordinator (vagy null).\n * Tükrözi a `coordinatedSessionIds_$` set döntését — `stopped`/`completed` kizárva.\n */\n readonly assignedCoordinator_$: Signal<CCAP_CoordinatorSession_Response | null> = computed(\n (): CCAP_CoordinatorSession_Response | null => {\n const sid: string = (this.sessionId() ?? '').trim();\n if (!sid) {\n return null;\n }\n const ids: Set<string> = this.coordinator_DS.coordinatedSessionIds_$();\n if (!ids.has(sid)) {\n return null;\n }\n const list: CCAP_CoordinatorSession_Response[] = this.coordinator_DS.globalCoordinatorsList_$();\n return list.find((c: CCAP_CoordinatorSession_Response): boolean => {\n const csid: string = (c.sessionId ?? '').trim();\n const status: string = (c.status ?? '').trim().toLowerCase();\n return csid === sid && status !== 'stopped' && status !== 'completed';\n }) ?? null;\n },\n );\n\n /** Van-e aktív coordinator — tab-gomb és panel-mód váltó. */\n readonly isAssigned_$: Signal<boolean> = computed(\n (): boolean => this.assignedCoordinator_$() !== null,\n );\n\n ngOnInit(): void {\n // Self-load: ha üres a coordinator lista, induló fetch.\n if (this.coordinator_DS.globalCoordinatorsList_$().length === 0) {\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n }\n // Assign-panel-hez kell a model dropdown adat.\n this.registrySsot_CS.ensureLoaded('llm');\n }\n\n /** Tab-gomb klikk — koordinátor toggle (auto-zárja ha másik overlay nyitva volt). */\n handleToggle(): void {\n this.overlayCoordinator_CS.toggle(this.OVERLAY_ID);\n }\n\n /**\n * Assign — a kiválasztott modellt használja `startCoordinator` paramként.\n * A `selectedModelKey_$` formátuma `provider:::modelName`.\n */\n async handleAssign(): Promise<void> {\n const sid: string = (this.sessionId() ?? '').trim();\n const key: string = this.selectedModelKey_$().trim();\n if (!sid || !key || this.isBusy_$()) {\n return;\n }\n const parts: string[] = key.split(':::');\n if (parts.length !== 2) {\n return;\n }\n const providerName: string = parts[0];\n const model: string = parts[1];\n if (!providerName || !model) {\n return;\n }\n this.isBusy_$.set(true);\n try {\n await this.coordinator_DS.startCoordinator({\n sessionId: sid,\n providerName: providerName,\n model: model,\n });\n // Sikeres assign → a globális lista frissítése, hogy a coordinatedSessionIds_$\n // tükrözze az új koordinátort (a startCoordinator a coordinator_$-t állítja, de\n // a globalCoordinatorsList_$-t nem).\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n } finally {\n this.isBusy_$.set(false);\n }\n }\n\n /**\n * Stop — leállítja az assigned coordinator-t (`stopCoordinator`), majd frissíti\n * a globális listát hogy az UI inactive állapotba váltson.\n */\n async handleStop(): Promise<void> {\n const sid: string = (this.sessionId() ?? '').trim();\n if (!sid || this.isBusy_$()) {\n return;\n }\n this.isBusy_$.set(true);\n try {\n await this.coordinator_DS.stopCoordinator(sid);\n void this.coordinator_DS.loadAllCoordinatorsForManagementPage();\n } finally {\n this.isBusy_$.set(false);\n }\n }\n}\n", "<div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" ikon-tab.\n Aktív (assigned coordinator): neon purple + glow.\n Inaktív (nincs assigned): szürke, nem világít — DE továbbra is kattintható, hogy\n a panelből assign-olhasson koordinátort a user. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"Coordinator\"\n [title]=\"isAssigned_$()\n ? (isOpen_$() ? 'Coordinator panel bezárása' : 'Coordinator: ' + (assignedCoordinator_$()?.status ?? ''))\n : (isOpen_$() ? 'Coordinator panel bezárása' : 'Nincs coordinator — assign-oláshoz kattints')\"\n class=\"relative flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 rounded-r-lg\n transition-all duration-200 ease-out\"\n [ngClass]=\"isAssigned_$()\n ? ['border-neonPurple/60', 'text-neonPurple', 'shadow-[0_0_10px_rgba(168,85,247,0.4)]',\n 'hover:border-neonPurple', 'hover:bg-neonPurple/10']\n : ['border-neutral-700', 'text-neutral-500',\n 'hover:border-neutral-500', 'hover:bg-neutral-800/50']\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polygon points=\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\" />\n </svg>\n </button>\n\n <!-- Slide-out panel. Két mód: assigned (info + Stop) vagy nem assigned (assign UI). -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 rounded-lg p-3\n flex flex-col gap-2 min-w-[16rem] max-w-xs\"\n [ngClass]=\"isAssigned_$()\n ? ['border-neonPurple/60', 'shadow-[0_0_10px_rgba(168,85,247,0.4)]']\n : ['border-neutral-700']\">\n\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-[10px] uppercase tracking-wider font-mono\"\n [ngClass]=\"isAssigned_$() ? ['text-neonPurple'] : ['text-neutral-400']\">\n Coordinator\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"Coordinator panel bezárása\"\n class=\"text-neutral-400 hover:text-neonPurple leading-none px-1 transition-colors\">\n ×\n </button>\n </div>\n\n @if (assignedCoordinator_$(); as coord) {\n <!-- Assigned ág: info + Stop -->\n <div class=\"flex flex-col gap-1 text-xs\">\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">status</span>\n <span class=\"text-neutral-100\">{{ coord.status }}</span>\n </div>\n @if (coord.providerName) {\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">provider</span>\n <span class=\"text-neutral-100 truncate\" [title]=\"coord.providerName\">\n {{ coord.providerName }}\n </span>\n </div>\n }\n @if (coord.model) {\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">model</span>\n <span class=\"text-neutral-100 truncate\" [title]=\"coord.model\">{{ coord.model }}</span>\n </div>\n }\n @if (coord.workflowId) {\n <div class=\"flex justify-between gap-2\">\n <span class=\"text-neutral-500 font-mono text-[10px]\">workflow</span>\n <span class=\"text-neutral-100 truncate\" [title]=\"coord.workflowId\">\n {{ coord.workflowId }}\n </span>\n </div>\n }\n </div>\n <button type=\"button\"\n (click)=\"handleStop()\"\n [disabled]=\"isBusy_$()\"\n class=\"self-end px-2 py-1 rounded border-2 border-neonPurple/60 text-neonPurple\n text-xs font-medium hover:bg-neonPurple/10 hover:shadow-[0_0_10px_rgba(168,85,247,0.4)]\n disabled:opacity-40 disabled:cursor-not-allowed transition-all\">\n {{ isBusy_$() ? 'Stopping…' : 'Stop' }}\n </button>\n } @else {\n <!-- Assign ág: model dropdown + Assign gomb -->\n <span class=\"text-[11px] text-neutral-400\">\n Nincs assigned coordinator — válassz modellt és kattints az Assign-ra.\n </span>\n <select [ngModel]=\"selectedModelKey_$()\"\n (ngModelChange)=\"selectedModelKey_$.set($event)\"\n class=\"bg-neutral-900 border border-neutral-700 rounded px-2 py-1 text-xs\n text-neutral-100 focus:outline-none focus:border-neonPurple/60\">\n <option value=\"\" disabled>— válassz modellt —</option>\n @for (m of modelOptions_$(); track m.provider + ':::' + m.modelName) {\n <option [value]=\"m.provider + ':::' + m.modelName\">\n {{ m.provider }} / {{ m.modelName }}\n </option>\n }\n </select>\n <button type=\"button\"\n (click)=\"handleAssign()\"\n [disabled]=\"!selectedModelKey_$() || isBusy_$()\"\n class=\"self-end px-2 py-1 rounded border-2 border-neonPurple/60 text-neonPurple\n text-xs font-medium hover:bg-neonPurple/10 hover:shadow-[0_0_10px_rgba(168,85,247,0.4)]\n disabled:opacity-40 disabled:cursor-not-allowed transition-all\">\n {{ isBusy_$() ? 'Assigning…' : 'Assign' }}\n </button>\n }\n\n </div>\n }\n\n</div>\n", "import { Component, input, InputSignal, signal, WritableSignal } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nimport { Shr_AutoReadTtsStorage_Util } from '../../../_collections/utils/storage/shr-auto-read-tts-storage.util';\n\n/**\n * REQ-UI-AUTO-READ-ASSISTANT-001 (cycle 813) — auto-read TTS toggle.\n *\n * Per-session ki/be kapcsoló kis ikon-gomb az asszisztens üzenetek automatikus\n * felolvasásához. ON: a friss assistant bubble-ek automatikusan playelődnek\n * (`s-agent-console-message-bubble` autoReadEffect-en keresztül), a session-history\n * NEM (timestamp-check a `Shr_AutoReadTtsStorage_Util.shouldAutoPlay`-ben). OFF:\n * csak a manuális TTS gomb működik.\n *\n * A storage shared namespace (`ccap-autoReadAssistantTts:<sessionId>`), így a\n * komponens scope-tudás nélkül használható mind CC, mind CCAP session-eken.\n *\n * Vizuál: hangerő-ikon, ON-állapotban neon cyan + glow, OFF-állapotban neutral\n * (egységes mintázat a Schedule / QuickCast overlay-ekkel, cycle 805/806).\n */\n@Component({\n selector: 'app-s-auto-read-tts-toggle',\n standalone: true,\n imports: [NgClass],\n templateUrl: './s-auto-read-tts-toggle.component.html',\n})\n/** S_AutoReadTtsToggle_Component class. */\nexport class S_AutoReadTtsToggle_Component {\n\n /** A session ID-ja, amelyhez a toggle tartozik. */\n readonly sessionId: InputSignal<string> = input.required<string>();\n\n /** Aktuális ON/OFF állapot — a render reaktivitásához. */\n readonly isEnabled_$: WritableSignal<boolean> = signal<boolean>(false);\n\n ngOnInit(): void {\n this.refreshEnabledFromStorage();\n }\n\n /** Sync a localStorage tényleges állapotával (init + post-toggle). */\n private refreshEnabledFromStorage(): void {\n this.isEnabled_$.set(Shr_AutoReadTtsStorage_Util.isEnabled(this.sessionId()));\n }\n\n /** Klikk handler — toggle + signal frissítés. */\n handleToggle(): void {\n Shr_AutoReadTtsStorage_Util.toggle(this.sessionId());\n this.refreshEnabledFromStorage();\n }\n}\n", "<button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-pressed]=\"isEnabled_$()\"\n [title]=\"isEnabled_$()\n ? 'Auto-read assistant: ON (új asszisztens üzenetek automatikusan felolvasásra kerülnek). Klikk: kikapcsolás.'\n : 'Auto-read assistant: OFF. Klikk: bekapcsolás (csak az ezután érkező üzenetek olvasódnak fel).'\"\n class=\"relative flex items-center justify-center h-8 w-8 bg-neutral-900\n border-2 rounded-md\n transition-all duration-200 ease-out\"\n [ngClass]=\"isEnabled_$()\n ? ['border-neonCyan/60', 'text-neonCyan', 'shadow-neon-glow-cyan',\n 'hover:border-neonCyan', 'hover:bg-neonCyan/10']\n : ['border-neutral-700', 'text-neutral-500',\n 'hover:border-neutral-500', 'hover:text-neutral-300']\">\n @if (isEnabled_$()) {\n <!-- Volume-on icon (auto-read ON) -->\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" />\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\" />\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\" />\n </svg>\n } @else {\n <!-- Volume-off icon (auto-read OFF) -->\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\" />\n <line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\" />\n <line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\" />\n </svg>\n }\n</button>\n", "import { Component, inject, input, InputSignal, output, OutputEmitterRef, Signal } from '@angular/core';\n\nimport { S_AutoReadTtsToggle_Component } from '../s-auto-read-tts-toggle/s-auto-read-tts-toggle.component';\nimport { S_SessionOverlayCoordinator_ControlService } from '../../../_services/control-services/s-session-overlay-coordinator.control-service';\nimport { S_SessionOverlayId_Type } from '../../../_collections/consts/s-session-overlay-id.type-enum';\n\n/**\n * Session Quick Settings floating overlay — bal alul \"belógó\" gomb a Coordinator fölött.\n *\n * Cycle 814: sub-feature 2 (Auto-Read TTS toggle) bekötve a panelba.\n * Cycle 815: sub-feature 1 (Restart Runner) bekötve `restartRunnerClicked` event-en\n * keresztül; CC-only — CCAP/SES kontextusban a parent `[showRestartRunner]=\"false\"`-tal\n * elrejti (a CC-console kötelezően true-ra állítja és a `claudeCode_DS.restartRunner`\n * data-service hívást végzi a handler-ben).\n *\n * Sub-feature 3 (Intelligent Voice Input) továbbra is disabled stub.\n *\n * A részletes plan: `__documentations/devs/2026-05/2026-05-06/\n * 2026-05-06-session-quick-settings-feature-set-plan.md`.\n *\n * Slot: `[sChatColumnOverlay]` — host `absolute bottom-40 left-0`\n * (Schedule bottom-4, QuickCast bottom-16, Coordinator bottom-28 fölött).\n * Szín: neon green a többi overlay-tól (cyan / purple / amber) megkülönböztetésre.\n */\n@Component({\n selector: 'app-s-session-quick-settings-overlay',\n standalone: true,\n imports: [S_AutoReadTtsToggle_Component],\n templateUrl: './s-session-quick-settings-overlay.component.html',\n host: { class: 'absolute bottom-40 left-0 z-30 pointer-events-none' },\n})\n/** S_SessionQuickSettings_Overlay_Component class. */\nexport class S_SessionQuickSettings_Overlay_Component {\n\n /** A session ID — a S_AutoReadTtsToggle_Component használja, és későbbi feature-ekhez. */\n readonly sessionId: InputSignal<string> = input.required<string>();\n\n /**\n * Cycle 815 — Restart Runner gomb láthatósága. CC sessions: true (van terminal runner).\n * CCAP / OC / CA sessions: false (nincs runner-fogalom). Default false (CCAP-safe).\n */\n readonly showRestartRunner: InputSignal<boolean> = input<boolean>(false);\n\n /** Cycle 815 — Restart Runner klikk a parent felé (data-service hívás kívül). */\n readonly restartRunnerClicked: OutputEmitterRef<void> = output<void>();\n\n private readonly overlayCoordinator_CS: S_SessionOverlayCoordinator_ControlService =\n inject(S_SessionOverlayCoordinator_ControlService);\n\n /** Saját overlay-azonosító — single-open policy a többi tab-overlay-jel együtt. */\n private readonly OVERLAY_ID: string = S_SessionOverlayId_Type.quickSettings;\n\n /**\n * Panel nyitva van-e — a koordinátor service-en keresztül, hogy egyszerre csak\n * egy bal-alsó overlay panel lehessen nyitva (másik nyitása auto-zárja).\n */\n readonly isOpen_$: Signal<boolean> = this.overlayCoordinator_CS.isOpen(this.OVERLAY_ID);\n\n /** Tab-gomb klikk — koordinátor toggle (auto-zárja ha másik overlay nyitva volt). */\n handleToggle(): void {\n this.overlayCoordinator_CS.toggle(this.OVERLAY_ID);\n }\n\n /** Cycle 815 — Restart Runner gomb klikk → parent emit. Panelt zárjuk a UX miatt. */\n handleRestartRunnerClick(): void {\n this.restartRunnerClicked.emit();\n this.overlayCoordinator_CS.setOpen(null);\n }\n}\n", "<div class=\"flex items-end gap-2 pointer-events-auto\">\n\n <!-- Bal szélen \"belógó\" cog ikon-tab. Stub v1: maga a tab kattintható (nyitja a\n panelt), de a panelban minden funkció disabled, plan-doc-ra mutat tooltip. -->\n <button type=\"button\"\n (click)=\"handleToggle()\"\n [attr.aria-expanded]=\"isOpen_$()\"\n aria-label=\"Session Quick Settings\"\n [title]=\"isOpen_$()\n ? 'Session Quick Settings panel bezárása'\n : 'Session Quick Settings — hamarosan: Restart Runner, Auto-Read TTS, Intelligent Voice Input. Plan dokumentum készen, implementáció folyamatban.'\"\n class=\"relative flex items-center justify-center h-8 w-7 bg-neutral-900\n border-2 border-l-0 border-neonGreen/60 rounded-r-lg text-neonGreen\n shadow-[0_0_10px_rgba(0,255,136,0.35)]\n hover:border-neonGreen hover:bg-neonGreen/10\n transition-all duration-200 ease-out\"\n [class.-translate-x-2]=\"!isOpen_$()\"\n [class.translate-x-2]=\"isOpen_$()\">\n <!-- Settings (cog) icon -->\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0\n l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2\n 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06\n a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82\n 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09\n A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83\n 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3\n a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33\n l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82\n V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09\n a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n\n <!-- Slide-out panel: stub v1 — minden sor disabled, descriptive tooltip a plan-ra hivatkozik. -->\n @if (isOpen_$()) {\n <div class=\"bg-neutral-900 border-2 border-neonGreen/60 rounded-lg p-3\n flex flex-col gap-2 min-w-[18rem] max-w-sm\n shadow-[0_0_12px_rgba(0,255,136,0.3)]\">\n\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-[10px] uppercase tracking-wider text-neonGreen font-mono\">\n Quick Settings\n </span>\n <button type=\"button\"\n (click)=\"handleToggle()\"\n title=\"Bezárás\"\n aria-label=\"Quick Settings panel bezárása\"\n class=\"text-neutral-400 hover:text-neonGreen leading-none px-1 transition-colors\">\n ×\n </button>\n </div>\n\n <p class=\"text-[10px] text-neutral-400 leading-snug\">\n Plan-state v1 — minden funkció <span class=\"text-neonGreen\">disabled</span>;\n bekötés Plans Feature Set keretében következik\n (`2026-05-06-session-quick-settings-feature-set-plan.md`).\n </p>\n\n <!-- Sub-feature 1: Restart Runner (cycle 815 — bekötve, CC-only).\n CCAP / OC / CA sessions: showRestartRunner=false (a parent NEM rendereli a sort).\n CC sessions: showRestartRunner=true → klikk → restartRunnerClicked emit → parent\n hívja `claudeCode_DS.restartRunner({sessionId})`-t. Backend: cycle 784. -->\n @if (showRestartRunner()) {\n <button type=\"button\"\n (click)=\"handleRestartRunnerClick()\"\n title=\"Aktuális CC session terminal runner kill + respawn. Új terminál ablak nyílik a friss npm-build-tel; runner version-mismatch vagy no-ACK-fire hibák gyors fixje a session-ből, dashboard-ra navigálás nélkül.\"\n class=\"flex items-center justify-between gap-2 px-2 py-1.5 rounded\n border-2 border-neonGreen/40 text-neutral-300 text-xs\n bg-neutral-900/50 hover:bg-neonGreen/10 hover:border-neonGreen\n cursor-pointer transition-colors\">\n <span class=\"flex items-center gap-2\">\n <svg class=\"w-4 h-4 shrink-0 text-neonGreen/70\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M3 12a9 9 0 0 1 15.5-6.3L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-15.5 6.3L3 16\" />\n <path d=\"M3 21v-5h5\" />\n </svg>\n Restart Terminal Runner\n </span>\n </button>\n }\n\n <!-- Sub-feature 2: Auto-Read TTS toggle (cycle 814 — bekötve REQ-UI-AUTO-READ-ASSISTANT-001).\n A toggle-gomb a `Shr_AutoReadTtsStorage_Util.toggle(sessionId)`-re fut. ON-ban a\n friss (toggle-utáni) assistant bubble-ek auto-play-elődnek a bubble autoReadEffect-en. -->\n <div class=\"flex items-center justify-between gap-2 px-2 py-1.5 rounded\n border-2 border-neonGreen/40 text-neutral-300 text-xs\n bg-neutral-900/50\">\n <span class=\"flex items-center gap-2\">\n <svg class=\"w-4 h-4 shrink-0 text-neonGreen/70\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M11 5L6 9H2v6h4l5 4V5z\" />\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\" />\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\" />\n </svg>\n Auto-Read Assistant TTS\n </span>\n <app-s-auto-read-tts-toggle [sessionId]=\"sessionId()\" />\n </div>\n\n <!-- Sub-feature 3: Intelligent always-on voice input -->\n <button type=\"button\"\n disabled\n title=\"[Plan v1] Intelligens always-on hangbemenet — a régi continuous-listening\nmetodika alapján: VAD (volume gate) + speech-boundary chunking, csendszakasz után\nauto-send egyetlen üzenetként, opcionális chime hangjelzés a trigger-nél.\nSpec: __specifications/poc/voice-input-continuous-and-mobile.md (REQ-VIM-CONT-002,\nREQ-VIM-SEND-001). Hiányzó részek: per-segment → cycle-akkumuláció, silence-detect\n→ auto-send, csengő hang. Nagyobb implementációs csomag — Plan dokumentum részletez.\"\n class=\"flex items-center justify-between gap-2 px-2 py-1.5 rounded\n border-2 border-neutral-700 text-neutral-500 text-xs\n bg-neutral-900/50 cursor-not-allowed\n transition-colors\">\n <span class=\"flex items-center gap-2\">\n <svg class=\"w-4 h-4 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <rect x=\"9\" y=\"3\" width=\"6\" height=\"12\" rx=\"3\" />\n <path d=\"M19 11a7 7 0 0 1-14 0\" />\n <path d=\"M12 18v3\" />\n <path d=\"M8 21h8\" />\n </svg>\n Always-On Intelligent Voice Input\n </span>\n <span class=\"text-[9px] uppercase tracking-wider text-neutral-600 font-mono\">soon</span>\n </button>\n\n </div>\n }\n\n</div>\n"],
5
- "mappings": "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",
6
- "names": ["import_fsm_dynamo", "CC_RateLimitDisplay_Util", "SESSION_LIMIT_TYPE", "WEEKLY_LIMIT_TYPE", "formatResetText", "info", "resetsAt", "resetDate", "Date", "now", "diffMs", "getTime", "diffMin", "Math", "floor", "hours", "mins", "formatResetTextPrecise", "diffSec", "days", "secs", "parts", "push", "join", "computeUtilizationPercent", "raw", "utilization", "clamped", "max", "min", "round", "computeThresholdPercent", "surpassedThreshold", "isOverThreshold", "util", "thr", "formatLimitScopeLabel", "rateLimitType", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate", "ctx_r1", "limitScopeLabel_$", "\u0275\u0275classProp", "rl_r1", "status", "\u0275\u0275textInterpolate1", "utilizationPercent_$", "resetText_$", "\u0275\u0275pipeBind2", "receivedAt", "S_CcRateLimitInfo_Component", "claudeCode_AS", "inject", "ClaudeCode_ApiService", "_ccapId", "ccapId", "value", "trim", "refreshRateLimitState", "rateLimitInfo_$", "signal", "computed", "CC_RateLimitDisplay_Util", "computeUtilizationPercent", "formatResetText", "formatLimitScopeLabel", "set", "getRateLimitState", "then", "result", "info", "CC_RateLimitStateMapper_Util", "mapServerItemsToClientInfo", "items", "catch", "err", "DyFM_Log", "warn", "String", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_CcRateLimitInfo_Component_Conditional_0_Template", "\u0275\u0275conditional", "tmp_0_0", "CommonModule", "DatePipe", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275element", "\u0275\u0275advance", "\u0275\u0275property", "p_r1", "presence", "lastHeartbeatAt", "wsConnected", "\u0275\u0275textInterpolate", "ss_r2", "activeRunPhase", "activitySummary", "\u0275\u0275textInterpolate1", "\u0275\u0275pipeBind2", "lastActivityAt", "lastMessage", "S_InstanceDetailView_Component", "row", "undefined", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_InstanceDetailView_Component_Conditional_13_Template", "S_InstanceDetailView_Component_Conditional_18_Template", "registry", "instanceKey", "instanceData", "name", "trim", "status", "\u0275\u0275conditional", "tmp_3_0", "sessionStatuses", "tmp_5_0", "primaryMacAddress", "installLocationPath", "hostName", "__created", "__updated", "CommonModule", "DatePipe", "S_CcRateLimitInfo_Component", "S_InstancePresenceBadge_Component", "encapsulation", "\u0275\u0275element", "\u0275\u0275property", "p_r4", "presence", "lastHeartbeatAt", "wsConnected", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "tmp_11_0", "instance_r2", "\u0275\u0275restoreView", "_r1", "$implicit", "ctx_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleSelectInstance", "instanceKey", "undefined", "\u0275\u0275template", "S_InstanceSelector_Component_For_4_Conditional_2_Template", "S_InstanceSelector_Component_For_4_Conditional_4_Template", "S_InstanceSelector_Component_For_4_Conditional_5_Template", "handleInfoClick", "\u0275\u0275advance", "\u0275\u0275classProp", "isSelected", "\u0275\u0275pureFunction1", "_c0", "\u0275\u0275conditional", "tmp_17_0", "getPresenceForRow", "\u0275\u0275textInterpolate1", "getDisplayLabel", "isLocal", "getActiveSessionForRow", "S_InstanceSelector_Component", "peiContext_DS", "inject", "ExS_InstanceContext_DataService", "presenceMap", "Map", "activeSessionMap", "infoRequested", "EventEmitter", "instances_$", "computed", "instanceList_$", "selectedCcapId_$", "activeCcapId_$", "localKey_$", "localInstanceKey_$", "ngOnInit", "initialize", "ccapId", "selectInstance", "emit", "row", "host", "hostName", "keySuffix", "slice", "key", "get", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275repeaterCreate", "S_InstanceSelector_Component_For_4_Template", "_forTrack0", "S_InstanceSelector_Component_Conditional_5_Template", "\u0275\u0275repeater", "length", "CommonModule", "NgClass", "S_InstancePresenceBadge_Component", "encapsulation", "\u0275\u0275element", "\u0275\u0275property", "ctx", "ctx_r1", "getPresenceForSelectedRow", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleModalClosed", "\u0275\u0275template", "S_InstanceChipRowWithInfo_Component_Conditional_1_Conditional_1_Template", "\u0275\u0275elementEnd", "modalTitle_$", "\u0275\u0275advance", "\u0275\u0275conditional", "tmp_4_0", "selectedRow_$", "S_InstanceChipRowWithInfo_Component", "instanceRegistry_DS", "inject", "ExS_InstanceRegistry_DataService", "runtimeInstances_DS", "ExS_RuntimeInstances_DataService", "presenceMap", "Map", "activeSessionMap", "selectedInstanceKey_$", "signal", "viewRows_$", "computed", "Set_InstanceRegistryViewRows_Util", "buildViewRows", "list_$", "ccapInstanceList_$", "key", "find", "row", "registry", "instanceKey", "isModalOpen_$", "host", "hostName", "slice", "handleInfoRequested", "event", "set", "get", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "$event", "S_InstanceChipRowWithInfo_Component_Conditional_1_Template", "CommonModule", "S_InstanceSelector_Component", "S_Modal_Component", "S_InstanceDetailView_Component", "encapsulation", "S_SessionOverlayCoordinator_ControlService", "currentlyOpenId_$", "signal", "isOpen", "id", "computed", "setOpen", "set", "toggle", "factory", "\u0275fac", "providedIn", "S_SessionOverlayId_Type", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "sessionJobs_$", "length", "\u0275\u0275pipeBind2", "job_r4", "nextDueAt", "\u0275\u0275property", "getExecutionBadgeClass", "exec_r5", "status", "buildExecutionBadgeTooltip", "getExecutionBadgeLabel", "\u0275\u0275repeaterCreate", "S_SessionScheduleOverlay_Component_Conditional_5_For_7_Conditional_16_Conditional_0_For_4_Template", "_forTrack0", "\u0275\u0275repeater", "execs_r6", "\u0275\u0275template", "S_SessionScheduleOverlay_Component_Conditional_5_For_7_Conditional_16_Conditional_0_Template", "\u0275\u0275conditional", "ctx", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleTriggerNow", "\u0275\u0275element", "S_SessionScheduleOverlay_Component_Conditional_5_For_7_Conditional_14_Template", "S_SessionScheduleOverlay_Component_Conditional_5_For_7_Conditional_15_Template", "S_SessionScheduleOverlay_Component_Conditional_5_For_7_Conditional_16_Template", "tmp_11_0", "name", "undefined", "tmp_12_0", "trim", "\u0275\u0275pipeBind1", "schedule", "busyJobIds_$", "has", "tmp_14_0", "_id", "tmp_15_0", "tmp_17_0", "getRecentExecutions", "_r2", "handleToggle", "S_SessionScheduleOverlay_Component_Conditional_5_For_7_Template", "S_SessionScheduleOverlay_Component", "sessionId", "input", "required", "scheduledJobs_DS", "inject", "SCH_ScheduledJobs_DataService", "overlayCoordinator_CS", "S_SessionOverlayCoordinator_ControlService", "OVERLAY_ID", "S_SessionOverlayId_Type", "isOpen_$", "isOpen", "signal", "Set", "computed", "sid", "jobs_$", "filter", "job", "enabled", "target", "payload", "hasSchedule_$", "ngOnInit", "loadAll", "toggle", "__async", "jobId", "update", "prev", "next", "add", "triggerNow", "reason", "delete", "recentExecutions_$", "get", "exec", "parts", "scheduledAt", "push", "Date", "toISOString", "slice", "replace", "skipReason", "errorDetails", "message", "join", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "S_SessionScheduleOverlay_Component_Conditional_4_Template", "S_SessionScheduleOverlay_Component_Conditional_5_Template", "\u0275\u0275classProp", "\u0275\u0275pureFunction0", "_c0", "_c1", "NgClass", "DatePipe", "SCH_SchedulePresetLabel_Pipe", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275listener", "action_r4", "\u0275\u0275restoreView", "_r3", "$implicit", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleAction", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "pendingAction_$", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "_r1", "handleToggle", "\u0275\u0275repeaterCreate", "S_SessionQuickCast_Overlay_Component_Conditional_4_For_8_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275repeater", "actions", "S_SessionQuickCast_Overlay_Component", "input", "actionSelected", "output", "overlayCoordinator_CS", "inject", "S_SessionOverlayCoordinator_ControlService", "OVERLAY_ID", "S_SessionOverlayId_Type", "quickcast", "isOpen_$", "isOpen", "signal", "toggle", "action", "set", "emit", "setTimeout", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "\u0275\u0275template", "S_SessionQuickCast_Overlay_Component_Conditional_4_Template", "\u0275\u0275classProp", "\u0275\u0275conditional", "$item", "modelName", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275property", "coord_r4", "providerName", "\u0275\u0275textInterpolate1", "model", "\u0275\u0275textInterpolate", "workflowId", "\u0275\u0275template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Conditional_6_Template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Conditional_7_Template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Conditional_8_Template", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleStop", "status", "\u0275\u0275conditional", "isBusy_$", "m_r6", "provider", "\u0275\u0275textInterpolate2", "$event", "_r5", "selectedModelKey_$", "set", "\u0275\u0275repeaterCreate", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_7_For_6_Template", "_forTrack0", "handleAssign", "\u0275\u0275repeater", "modelOptions_$", "_r1", "handleToggle", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_6_Template", "S_SessionCoordinator_Overlay_Component_Conditional_5_Conditional_7_Template", "isAssigned_$", "\u0275\u0275pureFunction0", "_c2", "_c3", "_c4", "_c5", "tmp_3_0", "assignedCoordinator_$", "S_SessionCoordinator_Overlay_Component", "sessionId", "input", "required", "coordinator_DS", "inject", "Coordinator_DataService", "registrySsot_CS", "AIS_RegistrySsot_ControlService", "overlayCoordinator_CS", "S_SessionOverlayCoordinator_ControlService", "OVERLAY_ID", "S_SessionOverlayId_Type", "coordinator", "isOpen_$", "isOpen", "signal", "computed", "enabledLlmModels_$", "sid", "trim", "coordinatedSessionIds_$", "has", "globalCoordinatorsList_$", "find", "c", "csid", "toLowerCase", "ngOnInit", "length", "loadAllCoordinatorsForManagementPage", "ensureLoaded", "toggle", "__async", "key", "parts", "split", "startCoordinator", "stopCoordinator", "selectors", "hostAttrs", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275element", "S_SessionCoordinator_Overlay_Component_Conditional_5_Template", "\u0275\u0275classProp", "tmp_2_0", "undefined", "_c0", "_c1", "NgClass", "FormsModule", "NgSelectOption", "\u0275NgSelectMultipleOption", "SelectControlValueAccessor", "NgControlStatus", "NgModel", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275elementEnd", "S_AutoReadTtsToggle_Component", "sessionId", "input", "required", "isEnabled_$", "signal", "ngOnInit", "refreshEnabledFromStorage", "set", "Shr_AutoReadTtsStorage_Util", "isEnabled", "handleToggle", "toggle", "selectors", "inputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275listener", "\u0275\u0275template", "S_AutoReadTtsToggle_Component_Conditional_1_Template", "S_AutoReadTtsToggle_Component_Conditional_2_Template", "\u0275\u0275property", "\u0275\u0275pureFunction0", "_c0", "_c1", "\u0275\u0275advance", "\u0275\u0275conditional", "NgClass", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleRestartRunnerClick", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275text", "_r1", "handleToggle", "\u0275\u0275template", "S_SessionQuickSettings_Overlay_Component_Conditional_5_Conditional_11_Template", "\u0275\u0275advance", "\u0275\u0275conditional", "showRestartRunner", "\u0275\u0275property", "sessionId", "S_SessionQuickSettings_Overlay_Component", "input", "required", "restartRunnerClicked", "output", "overlayCoordinator_CS", "inject", "S_SessionOverlayCoordinator_ControlService", "OVERLAY_ID", "S_SessionOverlayId_Type", "quickSettings", "isOpen_$", "isOpen", "toggle", "emit", "setOpen", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "S_SessionQuickSettings_Overlay_Component_Conditional_5_Template", "\u0275\u0275classProp", "S_AutoReadTtsToggle_Component", "encapsulation"]
7
- }
@@ -1,4 +0,0 @@
1
- import{a as K,b as J,c as X}from"./chunk-ZPE6HI3H.js";import{c as U,f as H,i as N,v as O}from"./chunk-EO4DNTT4.js";import{f as Q}from"./chunk-GNWPRBF5.js";import{$a as F,C as E,D as x,Fa as m,Ha as y,J as $,K as v,L as b,T as g,Ta as A,U as d,Z as a,aa as r,ab as z,da as w,ga as f,ha as W,hb as L,ia as j,ja as D,k as n,la as h,mb as B,oa as G,pa as q,qa as c,ra as u,sa as P,ua as R,ub as V,va as S,wa as p,y as T}from"./chunk-TBMJSIBB.js";var I=class s{static normalizeNewlines(l){return l.replace(/\r\n/g,`
2
- `).replace(/\r/g,`
3
- `)}static sha256HexOfNormalized(l){return n(this,null,function*(){let e=s.normalizeNewlines(l),i=new TextEncoder().encode(e),o=yield crypto.subtle.digest("SHA-256",i),_=new Uint8Array(o),C="";for(let k=0;k<_.length;k+=1)C+=_[k].toString(16).padStart(2,"0");return C})}};var Y=(()=>{class s{projects_$=r([]);projectsLoading_$=r(!1);projectsError_$=r(null);projectsLoadedOnce_$=r(!1);activeProject_$=r(null);activeProjectComputedCcapHost_$=r(!1);activeProjectLoading_$=r(!1);activeProjectError_$=r(null);userRequests_$=r([]);userRequestsLoading_$=r(!1);userRequestsError_$=r(null);discoveredProjects_$=r([]);discoveryLoading_$=r(!1);discoveryError_$=r(null);gitStatusLoading_$=r(!1);gitStatusError_$=r(null);syncLoading_$=r(!1);syncError_$=r(null);lastSyncResult_$=r(null);fileContents_$=r(null);fileContentLoading_$=r(!1);fileContentError_$=r(null);testErrorReportsClearing_$=r(!1);agentReports_$=r([]);agentReportsLoading_$=r(!1);agentReportsError_$=r(null);activeAgentReport_$=r(null);activeAgentReportLoading_$=r(!1);activeAgentReportError_$=r(null);reviewsMeta_$=r([]);reviewsMetaLoading_$=r(!1);reviewsMetaError_$=r(null);reviewResult_$=r(null);reviewsRunning_$=r(!1);reviewsRunError_$=r(null);userInputWizardSuggestLoading_$=r(!1);userInputWizardSuggestError_$=r(null);userInputWizardFinalizeLoading_$=r(!1);userInputWizardFinalizeError_$=r(null);userInputWizardLastLlmSystemPrompt_$=r(null);userInputWizardLastLlmUserMessage_$=r(null);groups_$=r([]);groupsLoading_$=r(!1);groupsError_$=r(null);activeGroup_$=r(null);groupFiles_$=r(null);groupFilesLoading_$=r(!1);groupFilesError_$=r(null);crossInstanceProjects_$=r([]);crossInstanceLoading_$=r(!1);crossInstanceError_$=r(null);currentCcapId_$=r(null);cloneLoading_$=r(!1);cloneError_$=r(null);pm_AS=E(Q);loadProjects(){return n(this,null,function*(){this.projectsLoading_$.set(!0),this.projectsError_$.set(null);try{let e=yield this.pm_AS.listProjects();this.projects_$.set(e.projects),this.projectsLoadedOnce_$.set(!0)}catch(e){this.projectsError_$.set(e)}finally{this.projectsLoading_$.set(!1)}})}loadProject(e){return n(this,null,function*(){this.activeProjectLoading_$.set(!0),this.activeProjectError_$.set(null);try{let t=yield this.pm_AS.getProject(e);this.activeProject_$.set(t.project),this.activeProjectComputedCcapHost_$.set(t.computedCcapRevisionedHost)}catch(t){this.activeProjectError_$.set(t)}finally{this.activeProjectLoading_$.set(!1)}})}createProject(e){return n(this,null,function*(){let t=yield this.pm_AS.createProject(e);return yield this.loadProjects(),t.project})}updateProject(e,t){return n(this,null,function*(){let i=yield this.pm_AS.updateProject(e,t);this.activeProject_$.set(i.project),this.activeProjectComputedCcapHost_$.set(i.computedCcapRevisionedHost),this.projects_$.update(o=>o.map(_=>_._id===e?i.project:_))})}archiveProject(e){return n(this,null,function*(){yield this.pm_AS.archiveProject(e),yield this.loadProjects(),this.activeProject_$()?._id===e&&(this.activeProject_$.set(null),this.activeProjectComputedCcapHost_$.set(!1))})}loadGroups(){return n(this,null,function*(){this.groupsLoading_$.set(!0),this.groupsError_$.set(null);try{let e=yield this.pm_AS.listGroups();this.groups_$.set(e.groups)}catch(e){this.groupsError_$.set(e)}finally{this.groupsLoading_$.set(!1)}})}createGroup(e){return n(this,null,function*(){yield this.pm_AS.createGroup(e),yield this.loadGroups()})}archiveGroup(e){return n(this,null,function*(){yield this.pm_AS.archiveGroup(e),this.activeGroup_$()?._id===e&&this.activeGroup_$.set(null),yield this.loadGroups()})}selectGroup(e){this.activeGroup_$.set(e)}loadGroupFiles(e){return n(this,null,function*(){this.groupFilesLoading_$.set(!0),this.groupFilesError_$.set(null);try{let t=yield this.pm_AS.getGroupFiles(e);this.groupFiles_$.set(t)}catch(t){this.groupFilesError_$.set(t)}finally{this.groupFilesLoading_$.set(!1)}})}loadCrossInstanceProjects(){return n(this,null,function*(){this.crossInstanceLoading_$.set(!0),this.crossInstanceError_$.set(null);try{let e=yield this.pm_AS.listAllProjectsAcrossInstances();this.crossInstanceProjects_$.set(e.projects),this.currentCcapId_$.set(e.currentCcapId)}catch(e){this.crossInstanceError_$.set(e)}finally{this.crossInstanceLoading_$.set(!1)}})}cloneProject(e){return n(this,null,function*(){this.cloneLoading_$.set(!0),this.cloneError_$.set(null);try{yield this.pm_AS.cloneProject({sourceProjectId:e.sourceProjectId,targetParentDir:e.targetParentDir,repoName:e.repoName}),yield this.loadProjects()}catch(t){this.cloneError_$.set(t)}finally{this.cloneLoading_$.set(!1)}})}cloneGroup(e){return n(this,null,function*(){this.cloneLoading_$.set(!0),this.cloneError_$.set(null);try{yield this.pm_AS.cloneGroup({sourceGroupId:e.sourceGroupId,targetParentDir:e.targetParentDir}),yield this.loadProjects(),yield this.loadGroups()}catch(t){this.cloneError_$.set(t)}finally{this.cloneLoading_$.set(!1)}})}discoverProjects(e){return n(this,null,function*(){this.discoveryLoading_$.set(!0),this.discoveryError_$.set(null),this.discoveredProjects_$.set([]);try{let t=yield this.pm_AS.discoverProjects(e);this.discoveredProjects_$.set(t.discoveredProjects)}catch(t){this.discoveryError_$.set(t)}finally{this.discoveryLoading_$.set(!1)}})}createDiscoveredProjects(e){return n(this,null,function*(){for(let t of e){let i={name:t.name,localPath:t.localPath,description:t.description,githubRepoUrl:t.githubRepoUrl,isActive:!0};yield this.pm_AS.createProject(i)}yield this.loadProjects()})}clearDiscovery(){this.discoveredProjects_$.set([]),this.discoveryError_$.set(null),this.discoveryLoading_$.set(!1)}refreshGitStatus(e){return n(this,null,function*(){this.gitStatusLoading_$.set(!0),this.gitStatusError_$.set(null);try{let t=yield this.pm_AS.refreshGitStatus(e);this.activeProject_$.set(t.project);try{let i=yield this.pm_AS.getProject(e);this.activeProjectComputedCcapHost_$.set(i.computedCcapRevisionedHost)}catch{}this.projects_$.update(i=>i.map(o=>o._id===e?t.project:o))}catch(t){this.gitStatusError_$.set(t)}finally{this.gitStatusLoading_$.set(!1)}})}syncProject(e){return n(this,null,function*(){this.syncLoading_$.set(!0),this.syncError_$.set(null),this.lastSyncResult_$.set(null);try{let t=yield this.pm_AS.syncProject(e);this.lastSyncResult_$.set(t.syncResult),this.activeProject_$.set(t.project);try{let i=yield this.pm_AS.getProject(e);this.activeProjectComputedCcapHost_$.set(i.computedCcapRevisionedHost)}catch{}this.projects_$.update(i=>i.map(o=>o._id===e?t.project:o))}catch(t){this.syncError_$.set(t)}finally{this.syncLoading_$.set(!1)}})}syncAllProjects(){return n(this,null,function*(){this.syncLoading_$.set(!0),this.syncError_$.set(null);try{yield this.pm_AS.syncAllProjects(),yield this.loadProjects()}catch(e){this.syncError_$.set(e)}finally{this.syncLoading_$.set(!1)}})}loadAllFileContents(e){return n(this,null,function*(){this.fileContentLoading_$.set(!0),this.fileContentError_$.set(null);try{let t=yield this.pm_AS.getAllFileContents(e);this.fileContents_$.set(t.files)}catch(t){this.fileContentError_$.set(t)}finally{this.fileContentLoading_$.set(!1)}})}clearTestErrorReportsAndRefresh(e){return n(this,null,function*(){this.testErrorReportsClearing_$.set(!0);try{yield this.pm_AS.clearTestErrorReports(e),yield this.loadAllFileContents(e)}finally{this.testErrorReportsClearing_$.set(!1)}})}getBugsPathResolve(e){return n(this,null,function*(){return this.pm_AS.getBugsPathResolve(e)})}appendBugsFromErrorsAndRefreshFiles(e,t){return n(this,null,function*(){let i=yield this.pm_AS.appendBugsFromErrors(e,t);return yield this.loadAllFileContents(e),i})}appendSingleBugFromErrorAndRefreshFiles(e,t,i){return n(this,null,function*(){let o=yield this.pm_AS.appendSingleBugFromError(e,t,i);return yield this.loadAllFileContents(e),o})}createManualBugAndRefresh(e,t){return n(this,null,function*(){let i=yield this.pm_AS.createManualBug(e,t);return yield this.loadAllFileContents(e),yield this.loadUserRequests(e),i})}loadUserRequests(e){return n(this,null,function*(){this.userRequestsLoading_$.set(!0),this.userRequestsError_$.set(null);try{let t=yield this.pm_AS.listUserRequests(e);this.userRequests_$.set(t.userRequests)}catch(t){this.userRequestsError_$.set(t)}finally{this.userRequestsLoading_$.set(!1)}})}createUserRequest(e,t){return n(this,null,function*(){yield this.pm_AS.createUserRequest(e,t),yield this.loadUserRequests(e)})}updateUserRequest(e,t,i){return n(this,null,function*(){let o=yield this.pm_AS.updateUserRequest(e,t,i);this.userRequests_$.update(_=>_.map(C=>C._id===t?o.userRequest:C))})}suggestUserInputFormat(e,t){return n(this,null,function*(){this.userInputWizardSuggestLoading_$.set(!0),this.userInputWizardSuggestError_$.set(null),this.userInputWizardLastLlmSystemPrompt_$.set(null),this.userInputWizardLastLlmUserMessage_$.set(null);try{let i=yield this.pm_AS.suggestUserInputFormat(e,t);return this.userInputWizardLastLlmSystemPrompt_$.set(i.llmSystemPrompt??null),this.userInputWizardLastLlmUserMessage_$.set(i.llmUserMessage??null),i}catch(i){throw this.userInputWizardSuggestError_$.set(i),i}finally{this.userInputWizardSuggestLoading_$.set(!1)}})}mutateControlFileEntryAndRefresh(e,t,i){return n(this,null,function*(){let o=i.priorRawFingerprintSha256?.trim(),_=o!=null&&o.length>0?o:yield I.sha256HexOfNormalized(i.priorRawBlock),C={mode:i.mode,priorRawBlock:i.priorRawBlock,priorRawFingerprintSha256:_,newRawBlock:i.newRawBlock,bugsFileAbsolutePath:i.bugsFileAbsolutePath},k=yield this.pm_AS.mutateControlFileEntry(e,t,C);return yield this.loadAllFileContents(e),k})}finalizeUserInputWizard(e,t){return n(this,null,function*(){this.userInputWizardFinalizeLoading_$.set(!0),this.userInputWizardFinalizeError_$.set(null);try{let i=yield this.pm_AS.finalizeUserInput(e,t);return yield this.loadUserRequests(e),yield this.loadAllFileContents(e),i}catch(i){throw this.userInputWizardFinalizeError_$.set(i),i}finally{this.userInputWizardFinalizeLoading_$.set(!1)}})}loadReviewsMeta(e){return n(this,null,function*(){this.reviewsMetaLoading_$.set(!0),this.reviewsMetaError_$.set(null);try{let t=yield this.pm_AS.getReviewsMeta(e);this.reviewsMeta_$.set(t.reviewsMeta)}catch(t){this.reviewsMetaError_$.set(t)}finally{this.reviewsMetaLoading_$.set(!1)}})}runProjectReviews(e,t){return n(this,null,function*(){this.reviewsRunning_$.set(!0),this.reviewsRunError_$.set(null),this.reviewResult_$.set(null);try{let i=yield this.pm_AS.runProjectReviews(e,t);this.reviewResult_$.set(i.reviewResult)}catch(i){this.reviewsRunError_$.set(i)}finally{this.reviewsRunning_$.set(!1)}})}loadAgentReports(e){return n(this,null,function*(){this.agentReportsLoading_$.set(!0),this.agentReportsError_$.set(null);try{let t=yield this.pm_AS.listAgentReports(e);this.agentReports_$.set(t.reports)}catch(t){this.agentReportsError_$.set(t)}finally{this.agentReportsLoading_$.set(!1)}})}loadAgentReport(e,t){return n(this,null,function*(){this.activeAgentReportLoading_$.set(!0),this.activeAgentReportError_$.set(null);try{let i=yield this.pm_AS.getAgentReportContent(e,t);this.activeAgentReport_$.set(i)}catch(i){this.activeAgentReport_$.set(null),this.activeAgentReportError_$.set(i)}finally{this.activeAgentReportLoading_$.set(!1)}})}clearActiveAgentReport(){this.activeAgentReport_$.set(null),this.activeAgentReportError_$.set(null)}static \u0275fac=function(t){return new(t||s)};static \u0275prov=T({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();function te(s,l){if(s&1&&(c(0,"span",0),m(1),u()),s&2){let e=l;f("title",e),a(),y(" ",e," ")}}var Z=(()=>{class s{workspacePath=d(void 0);pm_DS=E(Y);projectName_$=L(()=>{let e=this.workspacePath();if(!e)return null;let t=s.normalizePath(e);return t?this.pm_DS.projects_$().find(_=>!!_.localPath&&s.normalizePath(_.localPath)===t)?.name??null:null});constructor(){!this.pm_DS.projectsLoadedOnce_$()&&!this.pm_DS.projectsLoading_$()&&!this.pm_DS.projectsError_$()&&this.pm_DS.loadProjects()}static normalizePath(e){let t=e.trim().toLowerCase().replace(/\\/g,"/");for(;t.endsWith("/")&&t.length>1;)t=t.slice(0,-1);return t}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=x({type:s,selectors:[["app-s-project-badge"]],hostAttrs:[1,"ml-auto"],hostVars:2,hostBindings:function(t,i){t&2&&W("display",i.projectName_$()?"inline-flex":"none")},inputs:{workspacePath:[1,"workspacePath"]},standalone:!0,features:[A],decls:1,vars:1,consts:[[1,"text-[9px]","px-1","py-0.5","rounded","bg-sky-500/20","text-sky-300","border","border-sky-500/30","shrink-0","truncate","max-w-[140px]",3,"title"]],template:function(t,i){if(t&1&&w(0,te,2,2,"span",0),t&2){let o;h((o=i.projectName_$())?0:-1,o)}},encapsulation:2})}return s})();function ie(s,l){s&1&&P(0,"span",4)}function se(s,l){if(s&1&&P(0,"app-s-project-badge",7),s&2){let e=p();f("workspacePath",e.view().workspacePath)}}function re(s,l){s&1&&(c(0,"span",8),m(1," archived "),u())}function oe(s,l){if(s&1){let e=R();c(0,"button",13),S("click",function(i){$(e);let o=p();return v(o.handleScheduleIndicatorClick(i))}),b(),c(1,"svg",14),P(2,"rect",15)(3,"line",16)(4,"line",17)(5,"line",18),u()()}if(s&2){let e=p();j("ml-auto",!e.view().workspacePath)}}function ne(s,l){if(s&1){let e=R();c(0,"button",19),S("click",function(i){$(e);let o=p();return v(o.handleCoordinatorIndicatorClick(i))}),b(),c(1,"svg",14),P(2,"circle",20)(3,"polygon",21),u()()}if(s&2){let e=p();j("ml-auto",!e.view().workspacePath&&!e.view().hasSchedule)}}function ae(s,l){if(s&1&&(c(0,"div",11),m(1),u()),s&2){let e=p();a(),y(" ",e.view().workspacePath," ")}}function le(s,l){if(s&1&&(c(0,"div",12)(1,"span",22),m(2),u()()),s&2){let e=p();a(2),y(" ",e.view().promptCount," prompts ")}}var ee=(()=>{class s{view=d.required();isActive=d(!1);showWorkspacePath=d(!1);showPromptCount=d(!1);selected=g();contextMenu=g();scheduleIndicatorClicked=g();coordinatorIndicatorClicked=g();handleSelect(){this.selected.emit(this.view().id)}handleContextMenu(e){e.preventDefault(),e.stopPropagation(),this.contextMenu.emit({event:e,id:this.view().id})}handleScheduleIndicatorClick(e){e.stopPropagation(),this.scheduleIndicatorClicked.emit(this.view().id)}handleCoordinatorIndicatorClick(e){e.stopPropagation(),this.coordinatorIndicatorClicked.emit(this.view().id)}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=x({type:s,selectors:[["app-s-session-list-row"]],hostAttrs:[1,"block"],inputs:{view:[1,"view"],isActive:[1,"isActive"],showWorkspacePath:[1,"showWorkspacePath"],showPromptCount:[1,"showPromptCount"]},outputs:{selected:"selected",contextMenu:"contextMenu",scheduleIndicatorClicked:"scheduleIndicatorClicked",coordinatorIndicatorClicked:"coordinatorIndicatorClicked"},standalone:!0,features:[A],decls:17,vars:20,consts:[[1,"px-2","py-1.5","border-b","cursor-pointer","transition-colors",3,"click","contextmenu"],[1,"flex","items-center","gap-1.5"],[1,"relative","w-3.5","h-3.5","shrink-0","flex","items-center","justify-center",3,"title"],[1,"w-1.5","h-1.5","rounded-full",3,"ngClass"],[1,"absolute","inset-0","rounded-full","border","border-transparent","border-t-yellow-400","animate-spin"],[1,"text-xs","text-neutral-200","font-medium","truncate","shrink-1","min-w-0"],[1,"text-[10px]","text-neutral-400","shrink-0",3,"title"],[3,"workspacePath"],[1,"text-[8px]","px-0.5","rounded","bg-amber-500/15","text-amber-500","shrink-0"],["type","button","title","Ehhez a session-h\xF6z tartozik schedule \u2014 kattints a r\xE9szletek\xE9rt","aria-label","Schedule attached \u2014 open popup",1,"shrink-0","text-neonCyan/80","hover:text-neonCyan","focus:outline-none","focus:ring-1","focus:ring-neonCyan/60","rounded","p-0.5",3,"ml-auto"],["type","button","title","Ehhez a session-h\xF6z tartozik koordin\xE1tor \u2014 kattints a r\xE9szletek\xE9rt","aria-label","Coordinator attached \u2014 open popup",1,"shrink-0","text-neonAmber/80","hover:text-neonAmber","focus:outline-none","focus:ring-1","focus:ring-neonAmber/60","rounded","p-0.5",3,"ml-auto"],[1,"text-[10px]","text-neutral-500","truncate","mt-0.5","ml-5"],[1,"flex","items-center","gap-2","mt-0.5","ml-5"],["type","button","title","Ehhez a session-h\xF6z tartozik schedule \u2014 kattints a r\xE9szletek\xE9rt","aria-label","Schedule attached \u2014 open popup",1,"shrink-0","text-neonCyan/80","hover:text-neonCyan","focus:outline-none","focus:ring-1","focus:ring-neonCyan/60","rounded","p-0.5",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-3","h-3"],["x","3","y","4","width","18","height","18","rx","2","ry","2"],["x1","16","y1","2","x2","16","y2","6"],["x1","8","y1","2","x2","8","y2","6"],["x1","3","y1","10","x2","21","y2","10"],["type","button","title","Ehhez a session-h\xF6z tartozik koordin\xE1tor \u2014 kattints a r\xE9szletek\xE9rt","aria-label","Coordinator attached \u2014 open popup",1,"shrink-0","text-neonAmber/80","hover:text-neonAmber","focus:outline-none","focus:ring-1","focus:ring-neonAmber/60","rounded","p-0.5",3,"click"],["cx","12","cy","12","r","10"],["points","16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"],[1,"text-[10px]","text-neutral-600"]],template:function(t,i){if(t&1&&(c(0,"div",0),S("click",function(){return i.handleSelect()})("contextmenu",function(_){return i.handleContextMenu(_)}),c(1,"div",1)(2,"span",2),P(3,"span",3),w(4,ie,1,0,"span",4),u(),c(5,"span",5),m(6),u(),c(7,"span",6),F(8,"sAbsoluteTime"),m(9),F(10,"sTimeAgo"),u(),w(11,se,1,1,"app-s-project-badge",7)(12,re,2,0,"span",8)(13,oe,6,2,"button",9)(14,ne,4,2,"button",10),u(),w(15,ae,2,1,"div",11)(16,le,3,1,"div",12),u()),t&2){let o;D(i.isActive()?"border-l-2 border-l-ccapAccent border-b-neutral-700/30 bg-neutral-800/80":"border-l-2 border-l-transparent border-b-neutral-700/30 hover:bg-neutral-800/60"),j("opacity-50",i.view().isArchived),a(2),f("title",i.view().status),a(),f("ngClass",i.view().statusColorClass),a(),h(i.view().isRunning?4:-1),a(2),y(" ",i.view().label," "),a(),f("title",z(8,16,(o=i.view().lastActivityAt)!==null&&o!==void 0?o:"")),a(2),y(" ",i.view().lastActivityAt?z(10,18,i.view().lastActivityAt):"\u2014"," "),a(2),h(i.view().workspacePath?11:-1),a(),h(i.view().isArchived?12:-1),a(),h(i.view().hasSchedule?13:-1),a(),h(i.view().hasCoordinator?14:-1),a(),h(i.showWorkspacePath()&&i.view().workspacePath?15:-1),a(),h(i.showPromptCount()&&i.view().promptCount?16:-1)}},dependencies:[B,J,X,Z],encapsulation:2})}return s})();var ce=(s,l)=>l.id;function ue(s,l){if(s&1){let e=R();c(0,"div",1)(1,"input",5),S("ngModelChange",function(i){$(e);let o=p();return v(o.searchQuery_$.set(i))}),u()()}if(s&2){let e=p();a(),f("placeholder",e.searchPlaceholder())("ngModel",e.searchQuery_$())}}function pe(s,l){if(s&1){let e=R();c(0,"app-s-session-list-row",6),S("selected",function(i){$(e);let o=p();return v(o.handleRowSelect(i))})("contextMenu",function(i){$(e);let o=p();return v(o.handleRowContextMenu(i))})("scheduleIndicatorClicked",function(i){$(e);let o=p();return v(o.handleRowScheduleIndicatorClick(i))})("coordinatorIndicatorClicked",function(i){$(e);let o=p();return v(o.handleRowCoordinatorIndicatorClick(i))}),u()}if(s&2){let e=l.$implicit,t=p();f("view",e)("isActive",e.id===t.activeId())("showWorkspacePath",t.showWorkspacePath())("showPromptCount",t.showPromptCount())}}function de(s,l){s&1&&m(0," Nincs tal\xE1lat. ")}function _e(s,l){s&1&&m(0," \xDCres lista. ")}function he(s,l){if(s&1&&(c(0,"span",4),w(1,de,1,0)(2,_e,1,0),u()),s&2){let e=p();a(),h(e.searchQuery_$().trim().length>0?1:2)}}var qe=(()=>{class s{kind=d.required();rows=d([]);activeId=d("");showWorkspacePath=d(!1);showPromptCount=d(!1);searchPlaceholder=d("Keres\xE9s...");hideSearch=d(!1);selected=g();contextMenu=g();scheduleIndicatorClicked=g();coordinatorIndicatorClicked=g();searchQuery_$=r("");filteredRows_$=L(()=>{let e=this.rows();if(this.hideSearch())return e;let t=this.searchQuery_$();return t.trim().length===0?e:e.filter(i=>K.includesText(i.label,t))});handleRowSelect(e){this.selected.emit(e)}handleRowContextMenu(e){this.contextMenu.emit(e)}handleRowScheduleIndicatorClick(e){this.scheduleIndicatorClicked.emit(e)}handleRowCoordinatorIndicatorClick(e){this.coordinatorIndicatorClicked.emit(e)}static \u0275fac=function(t){return new(t||s)};static \u0275cmp=x({type:s,selectors:[["app-s-session-select"]],hostAttrs:[1,"block"],inputs:{kind:[1,"kind"],rows:[1,"rows"],activeId:[1,"activeId"],showWorkspacePath:[1,"showWorkspacePath"],showPromptCount:[1,"showPromptCount"],searchPlaceholder:[1,"searchPlaceholder"],hideSearch:[1,"hideSearch"]},outputs:{selected:"selected",contextMenu:"contextMenu",scheduleIndicatorClicked:"scheduleIndicatorClicked",coordinatorIndicatorClicked:"coordinatorIndicatorClicked"},standalone:!0,features:[A],decls:6,vars:2,consts:[[1,"flex","flex-col","gap-2"],[1,"px-2","pt-2"],[1,"flex","flex-col","gap-1","px-2","pb-2"],[3,"view","isActive","showWorkspacePath","showPromptCount"],[1,"text-[11px]","text-neutral-500","italic","px-1","py-2"],["type","text","data-testid","s-session-select-search",1,"w-full","px-2","py-1","text-xs","rounded","border","border-neonDefault","bg-neutral-900","text-neutral-200","placeholder-neutral-500","focus:outline-none","focus:border-ccapAccent",3,"ngModelChange","placeholder","ngModel"],[3,"selected","contextMenu","scheduleIndicatorClicked","coordinatorIndicatorClicked","view","isActive","showWorkspacePath","showPromptCount"]],template:function(t,i){t&1&&(c(0,"div",0),w(1,ue,2,2,"div",1),c(2,"div",2),G(3,pe,1,4,"app-s-session-list-row",3,ce),w(5,he,3,1,"span",4),u()()),t&2&&(a(),h(i.hideSearch()?-1:1),a(2),q(i.filteredRows_$()),a(2),h(i.filteredRows_$().length===0?5:-1))},dependencies:[V,O,U,H,N,ee],encapsulation:2})}return s})();export{Y as a,ee as b,qe as c};
4
- //# sourceMappingURL=chunk-OXEKAYMY.js.map