@futdevpro/ccap 1.1.2991 → 1.1.2995

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 (178) hide show
  1. package/client-dist/{agent-instances.module-ASSAAKKC.js → agent-instances.module-Y2KBMNCK.js} +2 -2
  2. package/client-dist/{ca.module-FQEAVDRQ.js → ca.module-THNXAPI2.js} +2 -2
  3. package/client-dist/{cc-usage-dashboard.component-DPGBTA2M.js → cc-usage-dashboard.component-XQTSJYNO.js} +2 -2
  4. package/client-dist/{cc.module-ESZ3GA6T.js → cc.module-SBU4LUC2.js} +2 -2
  5. package/client-dist/{chunk-KOSYBRVL.js → chunk-2JZ3QUN7.js} +2 -2
  6. package/client-dist/{chunk-Q55FNLZU.js → chunk-2L25BDDH.js} +2 -2
  7. package/client-dist/{chunk-46BB2C2N.js → chunk-3BN32RX3.js} +2 -2
  8. package/client-dist/{chunk-2ZOXLQSN.js → chunk-3F4AEMEH.js} +2 -2
  9. package/client-dist/{chunk-PIGUQR6E.js → chunk-4EQNFMWU.js} +2 -2
  10. package/client-dist/{chunk-OZICNOZU.js → chunk-4YCGUCIE.js} +2 -2
  11. package/client-dist/{chunk-BWVKRPGK.js → chunk-54JIUO7K.js} +2 -2
  12. package/client-dist/{chunk-GRFDOP4I.js → chunk-54KKC54L.js} +2 -2
  13. package/client-dist/{chunk-ZJB5YCWZ.js → chunk-73ZQF6FQ.js} +2 -2
  14. package/client-dist/{chunk-CACTWVFX.js → chunk-ACH3Z3TA.js} +2 -2
  15. package/client-dist/{chunk-OGISLAJH.js → chunk-AJATGXNX.js} +2 -2
  16. package/client-dist/{chunk-6X3S3YZW.js → chunk-ASRYRN2I.js} +2 -2
  17. package/client-dist/{chunk-KNFPDRDO.js → chunk-BLA4WJEG.js} +2 -2
  18. package/client-dist/{chunk-4N76KH34.js → chunk-BZVOKLVZ.js} +2 -2
  19. package/client-dist/{chunk-U4ONAI5W.js → chunk-C7CAW6PK.js} +2 -2
  20. package/client-dist/{chunk-5LQP4B22.js → chunk-CL5GKNF3.js} +2 -2
  21. package/client-dist/{chunk-HAB4OFER.js → chunk-CSNFLERX.js} +2 -2
  22. package/client-dist/{chunk-5S62XNCE.js → chunk-G5G7ZRTT.js} +2 -2
  23. package/client-dist/{chunk-R6FVXIG4.js → chunk-GUJJP3HP.js} +2 -2
  24. package/client-dist/{chunk-QKWY3HDK.js → chunk-HB7GOR7P.js} +2 -2
  25. package/client-dist/{chunk-WRWUBGVD.js → chunk-HL5RGNNL.js} +2 -2
  26. package/client-dist/{chunk-ZHSPATAR.js → chunk-IBAMIAIM.js} +2 -2
  27. package/client-dist/{chunk-7ORL7SUZ.js → chunk-IDWKG7BQ.js} +2 -2
  28. package/client-dist/{chunk-73QZZEIR.js → chunk-IES67WDC.js} +2 -2
  29. package/client-dist/{chunk-WAXX4LS2.js → chunk-JDJZC55L.js} +2 -2
  30. package/client-dist/{chunk-D64BCEOM.js → chunk-KD7WNBCA.js} +2 -2
  31. package/client-dist/{chunk-N4W36PDR.js → chunk-KJJKC27U.js} +2 -2
  32. package/client-dist/{chunk-SLJL7HAM.js → chunk-LGMUHF7N.js} +2 -2
  33. package/client-dist/{chunk-SLJL7HAM.js.map → chunk-LGMUHF7N.js.map} +1 -1
  34. package/client-dist/{chunk-Y23QJJM2.js → chunk-LR3E2GDS.js} +2 -2
  35. package/client-dist/{chunk-HIVJSBJ2.js → chunk-MKV4EKJ3.js} +2 -2
  36. package/client-dist/{chunk-AZEHMI5K.js → chunk-OF2Q6Y2J.js} +2 -2
  37. package/client-dist/{chunk-J7PMNF2L.js → chunk-OPKRH2ZF.js} +2 -2
  38. package/client-dist/{chunk-MRGVT4XV.js → chunk-OTEHKHH6.js} +2 -2
  39. package/client-dist/{chunk-FUQVSO4Q.js → chunk-P47C3DF2.js} +2 -2
  40. package/client-dist/{chunk-MR56NI7A.js → chunk-PXOCZHXA.js} +2 -2
  41. package/client-dist/{chunk-KUSGEZL3.js → chunk-Q6DP4BK2.js} +2 -2
  42. package/client-dist/{chunk-AYLNYCQP.js → chunk-SQFFII5G.js} +2 -2
  43. package/client-dist/{chunk-IY2SVG7N.js → chunk-SSVNU5XX.js} +2 -2
  44. package/client-dist/chunk-TIFSV5V7.js +4 -0
  45. package/client-dist/{chunk-EBFOZCAQ.js.map → chunk-TIFSV5V7.js.map} +3 -3
  46. package/client-dist/{chunk-OXVOMMBV.js → chunk-TUOCYFPY.js} +2 -2
  47. package/client-dist/{chunk-AIHBM5CY.js → chunk-UVND3MT4.js} +2 -2
  48. package/client-dist/{chunk-SSPNTZSH.js → chunk-UWRJP62D.js} +2 -2
  49. package/client-dist/{chunk-KG6O3QAE.js → chunk-VBPR247V.js} +2 -2
  50. package/client-dist/{chunk-2BYRRF5C.js → chunk-VRLA24M4.js} +2 -2
  51. package/client-dist/{chunk-CQTE7MVB.js → chunk-VS2SOEHH.js} +2 -2
  52. package/client-dist/{chunk-HIWI7F6V.js → chunk-VUVGA3PU.js} +2 -2
  53. package/client-dist/{chunk-BWO52PSV.js → chunk-WFP5T7CK.js} +2 -2
  54. package/client-dist/{chunk-T7ZRLQXF.js → chunk-WPK3COA5.js} +2 -2
  55. package/client-dist/{chunk-53T46BVF.js → chunk-WS5IPV7J.js} +2 -2
  56. package/client-dist/{chunk-4CBJKDZ2.js → chunk-X3XME6YM.js} +2 -2
  57. package/client-dist/{chunk-YF6FPXGN.js → chunk-XD65U2AA.js} +2 -2
  58. package/client-dist/{chunk-UKNYZRZO.js → chunk-Y5E6NMMF.js} +2 -2
  59. package/client-dist/{chunk-HNWVEC7W.js → chunk-YBDAZFC6.js} +2 -2
  60. package/client-dist/{chunk-W6IEQCQJ.js → chunk-YFVC52RF.js} +2 -2
  61. package/client-dist/{chunk-SLEHKZ5E.js → chunk-YULSJ6Q7.js} +2 -2
  62. package/client-dist/{chunk-UDN3ODZX.js → chunk-Z2O72EKW.js} +2 -2
  63. package/client-dist/{consultant.module-DJAKTGHS.js → consultant.module-Z5HEVFX6.js} +2 -2
  64. package/client-dist/{crd.module-VTQBXMCI.js → crd.module-V47NZMPB.js} +2 -2
  65. package/client-dist/{dashboard.module-DGKE2VYI.js → dashboard.module-CTYD32XL.js} +2 -2
  66. package/client-dist/{do.module-KGRN6IOF.js → do.module-CXAUW7J5.js} +2 -2
  67. package/client-dist/{document-library.module-5LMFIPBI.js → document-library.module-BWG5WRSR.js} +2 -2
  68. package/client-dist/{embedding-eval.module-N7KMH6CA.js → embedding-eval.module-UW3ATVS4.js} +2 -2
  69. package/client-dist/{embedding-registry.module-AJCYMMVZ.js → embedding-registry.module-EUHSKBTW.js} +2 -2
  70. package/client-dist/{err.module-5CMF4JOM.js → err.module-TVAU67PY.js} +2 -2
  71. package/client-dist/{feedback.module-VVZFEQAG.js → feedback.module-QMTGBHSW.js} +2 -2
  72. package/client-dist/{host-runtime-mcp.module-JQ56G3CY.js → host-runtime-mcp.module-MGFIHPEU.js} +2 -2
  73. package/client-dist/index.html +1 -1
  74. package/client-dist/{live-dev-pipeline.module-RKRE5PDR.js → live-dev-pipeline.module-234JPLHL.js} +2 -2
  75. package/client-dist/{logs.module-NL3BXKAF.js → logs.module-AJKP66C3.js} +2 -2
  76. package/client-dist/{main-PZ2IVIAS.js → main-RCR3UPER.js} +3 -3
  77. package/client-dist/{master-control-remote-poc.module-MJZ62DLT.js → master-control-remote-poc.module-MJHRVAJV.js} +2 -2
  78. package/client-dist/{mobile-app.module-DBJ3DMMR.js → mobile-app.module-BGY5OBR4.js} +2 -2
  79. package/client-dist/{model-registry.module-B2TGZ2VL.js → model-registry.module-7QY63GF2.js} +2 -2
  80. package/client-dist/{oc.module-PWLDGAT5.js → oc.module-DCGI6UB3.js} +2 -2
  81. package/client-dist/{orc.module-Y3MWFFPS.js → orc.module-BGIHVCKN.js} +2 -2
  82. package/client-dist/{project-management.module-RR7JTB6M.js → project-management.module-75PSVWLM.js} +2 -2
  83. package/client-dist/project-source-routed.module-UK5YELZX.js +2 -0
  84. package/client-dist/{scheduler.module-6RXR7D74.js → scheduler.module-4CBGNYNZ.js} +2 -2
  85. package/client-dist/{session.module-T7FY2G3C.js → session.module-BBRWFWYW.js} +2 -2
  86. package/client-dist/{set.module-DJWUUFKY.js → set.module-JXC6IB4D.js} +2 -2
  87. package/client-dist/{setup.module-5JVR766S.js → setup.module-VWNDXFJR.js} +2 -2
  88. package/client-dist/{terminals.module-KAVYIGUH.js → terminals.module-SJJ5FS3B.js} +2 -2
  89. package/client-dist/{voice-notes-poc.module-G52JZIUB.js → voice-notes-poc.module-H5JKVBK7.js} +2 -2
  90. package/client-dist/{wfs.module-JFVPSM33.js → wfs.module-IR6D4R6Q.js} +2 -2
  91. package/package.json +1 -1
  92. package/client-dist/chunk-EBFOZCAQ.js +0 -4
  93. package/client-dist/project-source-routed.module-TDZK7ADV.js +0 -2
  94. /package/client-dist/{agent-instances.module-ASSAAKKC.js.map → agent-instances.module-Y2KBMNCK.js.map} +0 -0
  95. /package/client-dist/{ca.module-FQEAVDRQ.js.map → ca.module-THNXAPI2.js.map} +0 -0
  96. /package/client-dist/{cc-usage-dashboard.component-DPGBTA2M.js.map → cc-usage-dashboard.component-XQTSJYNO.js.map} +0 -0
  97. /package/client-dist/{cc.module-ESZ3GA6T.js.map → cc.module-SBU4LUC2.js.map} +0 -0
  98. /package/client-dist/{chunk-KOSYBRVL.js.map → chunk-2JZ3QUN7.js.map} +0 -0
  99. /package/client-dist/{chunk-Q55FNLZU.js.map → chunk-2L25BDDH.js.map} +0 -0
  100. /package/client-dist/{chunk-46BB2C2N.js.map → chunk-3BN32RX3.js.map} +0 -0
  101. /package/client-dist/{chunk-2ZOXLQSN.js.map → chunk-3F4AEMEH.js.map} +0 -0
  102. /package/client-dist/{chunk-PIGUQR6E.js.map → chunk-4EQNFMWU.js.map} +0 -0
  103. /package/client-dist/{chunk-OZICNOZU.js.map → chunk-4YCGUCIE.js.map} +0 -0
  104. /package/client-dist/{chunk-BWVKRPGK.js.map → chunk-54JIUO7K.js.map} +0 -0
  105. /package/client-dist/{chunk-GRFDOP4I.js.map → chunk-54KKC54L.js.map} +0 -0
  106. /package/client-dist/{chunk-ZJB5YCWZ.js.map → chunk-73ZQF6FQ.js.map} +0 -0
  107. /package/client-dist/{chunk-CACTWVFX.js.map → chunk-ACH3Z3TA.js.map} +0 -0
  108. /package/client-dist/{chunk-OGISLAJH.js.map → chunk-AJATGXNX.js.map} +0 -0
  109. /package/client-dist/{chunk-6X3S3YZW.js.map → chunk-ASRYRN2I.js.map} +0 -0
  110. /package/client-dist/{chunk-KNFPDRDO.js.map → chunk-BLA4WJEG.js.map} +0 -0
  111. /package/client-dist/{chunk-4N76KH34.js.map → chunk-BZVOKLVZ.js.map} +0 -0
  112. /package/client-dist/{chunk-U4ONAI5W.js.map → chunk-C7CAW6PK.js.map} +0 -0
  113. /package/client-dist/{chunk-5LQP4B22.js.map → chunk-CL5GKNF3.js.map} +0 -0
  114. /package/client-dist/{chunk-HAB4OFER.js.map → chunk-CSNFLERX.js.map} +0 -0
  115. /package/client-dist/{chunk-5S62XNCE.js.map → chunk-G5G7ZRTT.js.map} +0 -0
  116. /package/client-dist/{chunk-R6FVXIG4.js.map → chunk-GUJJP3HP.js.map} +0 -0
  117. /package/client-dist/{chunk-QKWY3HDK.js.map → chunk-HB7GOR7P.js.map} +0 -0
  118. /package/client-dist/{chunk-WRWUBGVD.js.map → chunk-HL5RGNNL.js.map} +0 -0
  119. /package/client-dist/{chunk-ZHSPATAR.js.map → chunk-IBAMIAIM.js.map} +0 -0
  120. /package/client-dist/{chunk-7ORL7SUZ.js.map → chunk-IDWKG7BQ.js.map} +0 -0
  121. /package/client-dist/{chunk-73QZZEIR.js.map → chunk-IES67WDC.js.map} +0 -0
  122. /package/client-dist/{chunk-WAXX4LS2.js.map → chunk-JDJZC55L.js.map} +0 -0
  123. /package/client-dist/{chunk-D64BCEOM.js.map → chunk-KD7WNBCA.js.map} +0 -0
  124. /package/client-dist/{chunk-N4W36PDR.js.map → chunk-KJJKC27U.js.map} +0 -0
  125. /package/client-dist/{chunk-Y23QJJM2.js.map → chunk-LR3E2GDS.js.map} +0 -0
  126. /package/client-dist/{chunk-HIVJSBJ2.js.map → chunk-MKV4EKJ3.js.map} +0 -0
  127. /package/client-dist/{chunk-AZEHMI5K.js.map → chunk-OF2Q6Y2J.js.map} +0 -0
  128. /package/client-dist/{chunk-J7PMNF2L.js.map → chunk-OPKRH2ZF.js.map} +0 -0
  129. /package/client-dist/{chunk-MRGVT4XV.js.map → chunk-OTEHKHH6.js.map} +0 -0
  130. /package/client-dist/{chunk-FUQVSO4Q.js.map → chunk-P47C3DF2.js.map} +0 -0
  131. /package/client-dist/{chunk-MR56NI7A.js.map → chunk-PXOCZHXA.js.map} +0 -0
  132. /package/client-dist/{chunk-KUSGEZL3.js.map → chunk-Q6DP4BK2.js.map} +0 -0
  133. /package/client-dist/{chunk-AYLNYCQP.js.map → chunk-SQFFII5G.js.map} +0 -0
  134. /package/client-dist/{chunk-IY2SVG7N.js.map → chunk-SSVNU5XX.js.map} +0 -0
  135. /package/client-dist/{chunk-OXVOMMBV.js.map → chunk-TUOCYFPY.js.map} +0 -0
  136. /package/client-dist/{chunk-AIHBM5CY.js.map → chunk-UVND3MT4.js.map} +0 -0
  137. /package/client-dist/{chunk-SSPNTZSH.js.map → chunk-UWRJP62D.js.map} +0 -0
  138. /package/client-dist/{chunk-KG6O3QAE.js.map → chunk-VBPR247V.js.map} +0 -0
  139. /package/client-dist/{chunk-2BYRRF5C.js.map → chunk-VRLA24M4.js.map} +0 -0
  140. /package/client-dist/{chunk-CQTE7MVB.js.map → chunk-VS2SOEHH.js.map} +0 -0
  141. /package/client-dist/{chunk-HIWI7F6V.js.map → chunk-VUVGA3PU.js.map} +0 -0
  142. /package/client-dist/{chunk-BWO52PSV.js.map → chunk-WFP5T7CK.js.map} +0 -0
  143. /package/client-dist/{chunk-T7ZRLQXF.js.map → chunk-WPK3COA5.js.map} +0 -0
  144. /package/client-dist/{chunk-53T46BVF.js.map → chunk-WS5IPV7J.js.map} +0 -0
  145. /package/client-dist/{chunk-4CBJKDZ2.js.map → chunk-X3XME6YM.js.map} +0 -0
  146. /package/client-dist/{chunk-YF6FPXGN.js.map → chunk-XD65U2AA.js.map} +0 -0
  147. /package/client-dist/{chunk-UKNYZRZO.js.map → chunk-Y5E6NMMF.js.map} +0 -0
  148. /package/client-dist/{chunk-HNWVEC7W.js.map → chunk-YBDAZFC6.js.map} +0 -0
  149. /package/client-dist/{chunk-W6IEQCQJ.js.map → chunk-YFVC52RF.js.map} +0 -0
  150. /package/client-dist/{chunk-SLEHKZ5E.js.map → chunk-YULSJ6Q7.js.map} +0 -0
  151. /package/client-dist/{chunk-UDN3ODZX.js.map → chunk-Z2O72EKW.js.map} +0 -0
  152. /package/client-dist/{consultant.module-DJAKTGHS.js.map → consultant.module-Z5HEVFX6.js.map} +0 -0
  153. /package/client-dist/{crd.module-VTQBXMCI.js.map → crd.module-V47NZMPB.js.map} +0 -0
  154. /package/client-dist/{dashboard.module-DGKE2VYI.js.map → dashboard.module-CTYD32XL.js.map} +0 -0
  155. /package/client-dist/{do.module-KGRN6IOF.js.map → do.module-CXAUW7J5.js.map} +0 -0
  156. /package/client-dist/{document-library.module-5LMFIPBI.js.map → document-library.module-BWG5WRSR.js.map} +0 -0
  157. /package/client-dist/{embedding-eval.module-N7KMH6CA.js.map → embedding-eval.module-UW3ATVS4.js.map} +0 -0
  158. /package/client-dist/{embedding-registry.module-AJCYMMVZ.js.map → embedding-registry.module-EUHSKBTW.js.map} +0 -0
  159. /package/client-dist/{err.module-5CMF4JOM.js.map → err.module-TVAU67PY.js.map} +0 -0
  160. /package/client-dist/{feedback.module-VVZFEQAG.js.map → feedback.module-QMTGBHSW.js.map} +0 -0
  161. /package/client-dist/{host-runtime-mcp.module-JQ56G3CY.js.map → host-runtime-mcp.module-MGFIHPEU.js.map} +0 -0
  162. /package/client-dist/{live-dev-pipeline.module-RKRE5PDR.js.map → live-dev-pipeline.module-234JPLHL.js.map} +0 -0
  163. /package/client-dist/{logs.module-NL3BXKAF.js.map → logs.module-AJKP66C3.js.map} +0 -0
  164. /package/client-dist/{main-PZ2IVIAS.js.map → main-RCR3UPER.js.map} +0 -0
  165. /package/client-dist/{master-control-remote-poc.module-MJZ62DLT.js.map → master-control-remote-poc.module-MJHRVAJV.js.map} +0 -0
  166. /package/client-dist/{mobile-app.module-DBJ3DMMR.js.map → mobile-app.module-BGY5OBR4.js.map} +0 -0
  167. /package/client-dist/{model-registry.module-B2TGZ2VL.js.map → model-registry.module-7QY63GF2.js.map} +0 -0
  168. /package/client-dist/{oc.module-PWLDGAT5.js.map → oc.module-DCGI6UB3.js.map} +0 -0
  169. /package/client-dist/{orc.module-Y3MWFFPS.js.map → orc.module-BGIHVCKN.js.map} +0 -0
  170. /package/client-dist/{project-management.module-RR7JTB6M.js.map → project-management.module-75PSVWLM.js.map} +0 -0
  171. /package/client-dist/{project-source-routed.module-TDZK7ADV.js.map → project-source-routed.module-UK5YELZX.js.map} +0 -0
  172. /package/client-dist/{scheduler.module-6RXR7D74.js.map → scheduler.module-4CBGNYNZ.js.map} +0 -0
  173. /package/client-dist/{session.module-T7FY2G3C.js.map → session.module-BBRWFWYW.js.map} +0 -0
  174. /package/client-dist/{set.module-DJWUUFKY.js.map → set.module-JXC6IB4D.js.map} +0 -0
  175. /package/client-dist/{setup.module-5JVR766S.js.map → setup.module-VWNDXFJR.js.map} +0 -0
  176. /package/client-dist/{terminals.module-KAVYIGUH.js.map → terminals.module-SJJ5FS3B.js.map} +0 -0
  177. /package/client-dist/{voice-notes-poc.module-G52JZIUB.js.map → voice-notes-poc.module-H5JKVBK7.js.map} +0 -0
  178. /package/client-dist/{wfs.module-JFVPSM33.js.map → wfs.module-IR6D4R6Q.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["src/app/_modules/project-management/_collections/utils/pm-sha256-fingerprint.util.ts", "src/app/_modules/project-management/_services/data-services/project-management.data-service.ts", "src/app/_modules/shared/_components/s-project-badge/s-project-badge.component.ts", "src/app/_modules/shared/_components/s-project-badge/s-project-badge.component.html", "src/app/_modules/shared/_components/session-ui/s-session-list-row/s-session-list-row.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-list-row/s-session-list-row.component.html", "src/app/_modules/shared/_components/session-ui/s-session-select/s-session-select.component.ts", "src/app/_modules/shared/_components/session-ui/s-session-select/s-session-select.component.html"],
4
- "sourcesContent": ["/**\n * PM entry-mutation: prior blokk SHA-256 fingerprint (UTF-8, LF normalizált) — szerver PM_ControlEntryMutation_Util egyeztetéshez.\n */\nexport class PM_Sha256Fingerprint_Util {\n\n /**\n * Sorvégek normalizálása LF-re (szerver `normalizeNewlines` egyezése).\n */\n static normalizeNewlines(text: string): string {\n return text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n }\n\n /**\n * SHA-256 hex digest UTF-8 byte-okra a normalizált szövegből.\n */\n static async sha256HexOfNormalized(text: string): Promise<string> {\n const normalized: string = PM_Sha256Fingerprint_Util.normalizeNewlines(text);\n const encoder: TextEncoder = new TextEncoder();\n const data: Uint8Array = encoder.encode(normalized);\n const digest: ArrayBuffer = await crypto.subtle.digest('SHA-256', data);\n const bytes: Uint8Array = new Uint8Array(digest);\n let hex: string = '';\n for (let i: number = 0; i < bytes.length; i += 1) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n }\n}\n", "import { inject, Injectable, signal } from '@angular/core';\n\nimport { DT_DeveloperReviewMeta_Response } from '../../../../_models/server-index';\nimport { DT_DeveloperRun_Response } from '../../../../_models/server-index';\nimport { PM_AllFileContents_Response } from '../../../../_models/server-index';\nimport {\n PM_AppendBugsFromErrors_Request,\n PM_AppendBugsFromErrors_Response,\n PM_AppendSingleBugFromError_Response,\n PM_BugsPathResolution_Response,\n PM_CreateUserRequestHttpBody_Request,\n PM_ManualBugCreate_Request,\n PM_ManualBugCreate_Response,\n} from '../../../../_models/server-index';\nimport { PM_DiscoveredProject_Response } from '../../../../_models/server-index';\nimport {\n PM_AgentReport_Interface,\n PM_AgentReportContent_Response,\n} from '../../../../_models/server-index';\nimport {\n PM_GetProject_Response,\n PM_ListProjects_Response,\n} from '../../../../_models/server-index';\nimport { PM_ } from '../../../../_models/server-index';\nimport { PM_SyncResult_Response } from '../../../../_models/server-index';\nimport { PM_UserRequest } from '../../../../_models/server-index';\nimport { PM_Response } from '../../../../_models/server-index';\nimport { PM_UserRequest_Response } from '../../../../_models/server-index';\nimport {\n PM_ControlEntryMutation_Request,\n PM_ControlEntryMutation_Response,\n PM_UserInputFinalize_Request,\n PM_UserInputFinalize_Response,\n PM_UserInputSuggestFormat_Request,\n PM_UserInputSuggestFormat_Response,\n} from '../../../../_models/server-index';\nimport { PM_ControlFileType_Type } from '../../../../_models/server-index';\nimport { PM_Group_DataModel } from '../../../../_models/server-index';\nimport { PM_GroupFiles_Response } from '../../../../_models/server-index';\nimport { ProjectManagement_ApiService } from '../project-management.api-service';\nimport { PM_Sha256Fingerprint_Util } from '../../_collections/utils/pm-sha256-fingerprint.util';\n\n/**\n * Project Management data service (SSOT).\n * Projektek és user request-ek kliens-oldali állapotkezelése.\n */\n@Injectable({ providedIn: 'root' })\nexport class ProjectManagement_DataService {\n\n /** Projektek listája. */\n readonly projects_$ = signal<PM_[]>([]);\n\n /** Betöltés folyamatban (projekt lista). */\n readonly projectsLoading_$ = signal<boolean>(false);\n\n /** Projekt lista betöltési hiba (null = nincs). */\n readonly projectsError_$ = signal<unknown | null>(null);\n\n /**\n * Első sikeres projekt-lista betöltés megtörtént-e (lazy-load guard).\n * Olyan komponensek használják, amelyek opcionálisan tudnak projektekre hivatkozni\n * (pl. project-név badge session listákon), de nem akarnak minden újrarenderelésnél\n * újra fetch-elni, és nem akarják a \"0 projekt\" esetet folyamatosan újrapróbálni.\n */\n readonly projectsLoadedOnce_$ = signal<boolean>(false);\n\n /** Aktuálisan megnyitott projekt. */\n readonly activeProject_$ = signal<PM_ | null>(null);\n\n /**\n * Szerver által számolt flag: a projekt git/GitHub URL alapján CCAP Revisioned host-e\n * (error → BUGS.md bridge).\n */\n readonly activeProjectComputedCcapHost_$ = signal<boolean>(false);\n\n /** Aktív projekt betöltés folyamatban. */\n readonly activeProjectLoading_$ = signal<boolean>(false);\n\n /** Aktív projekt betöltési hiba (null = nincs). */\n readonly activeProjectError_$ = signal<unknown | null>(null);\n\n /** Aktív projekt user request-jeinek listája. */\n readonly userRequests_$ = signal<PM_UserRequest[]>([]);\n\n /** User request lista betöltés folyamatban. */\n readonly userRequestsLoading_$ = signal<boolean>(false);\n\n /** User request lista betöltési hiba (null = nincs). */\n readonly userRequestsError_$ = signal<unknown | null>(null);\n\n /** Felfedezett projektek listája (utolsó scan eredménye). */\n readonly discoveredProjects_$ = signal<PM_DiscoveredProject_Response[]>([]);\n\n /** Discovery scan folyamatban. */\n readonly discoveryLoading_$ = signal<boolean>(false);\n\n /** Discovery scan hiba (null = nincs). */\n readonly discoveryError_$ = signal<unknown | null>(null);\n\n /** Git status refresh folyamatban. */\n readonly gitStatusLoading_$ = signal<boolean>(false);\n\n /** Git status refresh hiba (null = nincs). */\n readonly gitStatusError_$ = signal<unknown | null>(null);\n\n /** Sync folyamatban (egy projektre vagy sync-all). */\n readonly syncLoading_$ = signal<boolean>(false);\n\n /** Sync hiba (null = nincs). */\n readonly syncError_$ = signal<unknown | null>(null);\n\n /** Utolsó sync eredménye (egy projektre). */\n readonly lastSyncResult_$ = signal<PM_SyncResult_Response | null>(null);\n\n /** Kontroll fájlok parse-olt tartalma (minden fájl egyben). */\n readonly fileContents_$ = signal<PM_AllFileContents_Response | null>(null);\n\n /** Kontroll fájl betöltés folyamatban. */\n readonly fileContentLoading_$ = signal<boolean>(false);\n\n /** Kontroll fájl betöltési hiba. */\n readonly fileContentError_$ = signal<unknown | null>(null);\n\n /** Test error reports fájl Clear művelet alatt. */\n readonly testErrorReportsClearing_$ = signal<boolean>(false);\n\n // ─── Agent Reports (REQ-PM-AGT-001 Slice 4) ────────────────────────\n\n /** `__agent/reports/**` lista-betöltés eredménye (descending dátum). */\n readonly agentReports_$ = signal<PM_AgentReport_Interface[]>([]);\n\n /** Agent reports lista-betöltés folyamatban. */\n readonly agentReportsLoading_$ = signal<boolean>(false);\n\n /** Agent reports lista-betöltési hiba. */\n readonly agentReportsError_$ = signal<unknown | null>(null);\n\n /** Aktuálisan megnyitott riport tartalma (detail). */\n readonly activeAgentReport_$ = signal<PM_AgentReportContent_Response | null>(null);\n\n /** Detail-betöltés folyamatban. */\n readonly activeAgentReportLoading_$ = signal<boolean>(false);\n\n /** Detail-betöltési hiba. */\n readonly activeAgentReportError_$ = signal<unknown | null>(null);\n\n /** Elérhető review-k metaadata. */\n readonly reviewsMeta_$ = signal<DT_DeveloperReviewMeta_Response[]>([]);\n\n /** Review meta betöltés folyamatban. */\n readonly reviewsMetaLoading_$ = signal<boolean>(false);\n\n /** Review meta betöltési hiba. */\n readonly reviewsMetaError_$ = signal<unknown | null>(null);\n\n /** Utolsó review futtatás eredménye. */\n readonly reviewResult_$ = signal<DT_DeveloperRun_Response | null>(null);\n\n /** Review futtatás folyamatban. */\n readonly reviewsRunning_$ = signal<boolean>(false);\n\n /** Review futtatási hiba. */\n readonly reviewsRunError_$ = signal<unknown | null>(null);\n\n /** USER-INPUT wizard suggest folyamatban. */\n readonly userInputWizardSuggestLoading_$ = signal<boolean>(false);\n\n /** USER-INPUT wizard suggest hiba. */\n readonly userInputWizardSuggestError_$ = signal<unknown | null>(null);\n\n /** USER-INPUT wizard finalize folyamatban. */\n readonly userInputWizardFinalizeLoading_$ = signal<boolean>(false);\n\n /** USER-INPUT wizard finalize hiba. */\n readonly userInputWizardFinalizeError_$ = signal<unknown | null>(null);\n\n /** Utolsó USER-INPUT suggest LLM system prompt (transzparencia). */\n readonly userInputWizardLastLlmSystemPrompt_$ = signal<string | null>(null);\n\n /** Utolsó USER-INPUT suggest LLM user message (transzparencia). */\n readonly userInputWizardLastLlmUserMessage_$ = signal<string | null>(null);\n\n // --- Project Groups ---\n\n /** Projekt csoportok listája. */\n readonly groups_$ = signal<PM_Group_DataModel[]>([]);\n\n /** Csoport lista betöltés folyamatban. */\n readonly groupsLoading_$ = signal<boolean>(false);\n\n /** Csoport lista betöltési hiba. */\n readonly groupsError_$ = signal<unknown | null>(null);\n\n /** Kiválasztott csoport (szűrőként működik a projekt listán). */\n readonly activeGroup_$ = signal<PM_Group_DataModel | null>(null);\n\n /** Group extra fájlok (live scan eredménye). */\n readonly groupFiles_$ = signal<PM_GroupFiles_Response | null>(null);\n\n /** Group file lista betöltés folyamatban. */\n readonly groupFilesLoading_$ = signal<boolean>(false);\n\n /** Group file lista betöltési hiba. */\n readonly groupFilesError_$ = signal<unknown | null>(null);\n\n // --- Cross-Instance ---\n\n /** Cross-instance: összes instanc összes projektje. */\n readonly crossInstanceProjects_$ = signal<PM_[]>([]);\n\n /** Cross-instance: betöltés folyamatban. */\n readonly crossInstanceLoading_$ = signal<boolean>(false);\n\n /** Cross-instance: hiba. */\n readonly crossInstanceError_$ = signal<unknown | null>(null);\n\n /** Cross-instance: saját instanc ccapId-ja. */\n readonly currentCcapId_$ = signal<string | null>(null);\n\n /** Cross-instance: klónozás folyamatban. */\n readonly cloneLoading_$ = signal<boolean>(false);\n\n /** Cross-instance: klónozási hiba. */\n readonly cloneError_$ = signal<unknown | null>(null);\n\n private readonly pm_AS: ProjectManagement_ApiService =\n inject(ProjectManagement_ApiService);\n\n /**\n * Projektek listájának betöltése a szerverről.\n */\n async loadProjects(): Promise<void> {\n this.projectsLoading_$.set(true);\n this.projectsError_$.set(null);\n try {\n const result: PM_ListProjects_Response = await this.pm_AS.listProjects();\n this.projects_$.set(result.projects);\n this.projectsLoadedOnce_$.set(true);\n } catch (err: unknown) {\n this.projectsError_$.set(err);\n } finally {\n this.projectsLoading_$.set(false);\n }\n }\n\n /**\n * Egy projekt betöltése ID alapján (aktív projekt).\n */\n async loadProject(projectId: string): Promise<void> {\n this.activeProjectLoading_$.set(true);\n this.activeProjectError_$.set(null);\n try {\n const result: PM_GetProject_Response = await this.pm_AS.getProject(projectId);\n this.activeProject_$.set(result.project);\n this.activeProjectComputedCcapHost_$.set(result.computedCcapRevisionedHost);\n } catch (err: unknown) {\n this.activeProjectError_$.set(err);\n } finally {\n this.activeProjectLoading_$.set(false);\n }\n }\n\n /**\n * Új projekt létrehozása, majd lista frissítése.\n */\n async createProject(payload: PM_Response): Promise<PM_> {\n const result: { project: PM_ } = await this.pm_AS.createProject(payload);\n await this.loadProjects();\n return result.project;\n }\n\n /**\n * Projekt frissítése, majd aktív projekt state frissítése.\n */\n async updateProject(projectId: string, payload: Partial<PM_Response>): Promise<void> {\n const result: PM_GetProject_Response = await this.pm_AS.updateProject(projectId, payload);\n this.activeProject_$.set(result.project);\n this.activeProjectComputedCcapHost_$.set(result.computedCcapRevisionedHost);\n this.projects_$.update(\n (list: PM_[]): PM_[] =>\n list.map(\n (p: PM_): PM_ =>\n p._id === projectId ? result.project : p,\n ),\n );\n }\n\n /**\n * Projekt archiválása, majd lista frissítése.\n */\n async archiveProject(projectId: string): Promise<void> {\n await this.pm_AS.archiveProject(projectId);\n await this.loadProjects();\n if (this.activeProject_$()?._id === projectId) {\n this.activeProject_$.set(null);\n this.activeProjectComputedCcapHost_$.set(false);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Project Groups\n // ---------------------------------------------------------------------------\n\n /** Projekt csoportok betöltése. */\n async loadGroups(): Promise<void> {\n this.groupsLoading_$.set(true);\n this.groupsError_$.set(null);\n try {\n const result: { groups: PM_Group_DataModel[] } = await this.pm_AS.listGroups();\n this.groups_$.set(result.groups);\n } catch (err: unknown) {\n this.groupsError_$.set(err);\n } finally {\n this.groupsLoading_$.set(false);\n }\n }\n\n /** Új csoport létrehozása, majd lista frissítése. */\n async createGroup(payload: { name: string; scanPath: string; description?: string }): Promise<void> {\n await this.pm_AS.createGroup(payload);\n await this.loadGroups();\n }\n\n /** Csoport archiválása, majd lista frissítése. */\n async archiveGroup(groupId: string): Promise<void> {\n await this.pm_AS.archiveGroup(groupId);\n if (this.activeGroup_$()?._id === groupId) {\n this.activeGroup_$.set(null);\n }\n await this.loadGroups();\n }\n\n /** Csoport kiválasztása (szűrőként működik a projekt listán) vagy szűrő törlése. */\n selectGroup(group: PM_Group_DataModel | null): void {\n this.activeGroup_$.set(group);\n }\n\n /** Group extra fájlok betöltése (live scan a szerveren). */\n async loadGroupFiles(groupId: string): Promise<void> {\n this.groupFilesLoading_$.set(true);\n this.groupFilesError_$.set(null);\n try {\n const result: PM_GroupFiles_Response = await this.pm_AS.getGroupFiles(groupId);\n this.groupFiles_$.set(result);\n } catch (err: unknown) {\n this.groupFilesError_$.set(err);\n } finally {\n this.groupFilesLoading_$.set(false);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Cross-Instance\n // ---------------------------------------------------------------------------\n\n /** Összes instanc összes projektjének betöltése. */\n async loadCrossInstanceProjects(): Promise<void> {\n this.crossInstanceLoading_$.set(true);\n this.crossInstanceError_$.set(null);\n try {\n const result: { projects: PM_[]; currentCcapId: string | null } =\n await this.pm_AS.listAllProjectsAcrossInstances();\n this.crossInstanceProjects_$.set(result.projects);\n this.currentCcapId_$.set(result.currentCcapId);\n } catch (err: unknown) {\n this.crossInstanceError_$.set(err);\n } finally {\n this.crossInstanceLoading_$.set(false);\n }\n }\n\n /** Projekt klónozása a saját instancra. */\n async cloneProject(params: {\n sourceProjectId: string;\n targetParentDir: string;\n repoName?: string;\n }): Promise<void> {\n this.cloneLoading_$.set(true);\n this.cloneError_$.set(null);\n try {\n await this.pm_AS.cloneProject({\n sourceProjectId: params.sourceProjectId,\n targetParentDir: params.targetParentDir,\n repoName: params.repoName,\n });\n // Frissítjük a saját projekt listát a klónozott projekt megjelenéséhez.\n await this.loadProjects();\n } catch (err: unknown) {\n this.cloneError_$.set(err);\n } finally {\n this.cloneLoading_$.set(false);\n }\n }\n\n /** Group klónozása a saját instancra. */\n async cloneGroup(params: {\n sourceGroupId: string;\n targetParentDir: string;\n }): Promise<void> {\n this.cloneLoading_$.set(true);\n this.cloneError_$.set(null);\n try {\n await this.pm_AS.cloneGroup({\n sourceGroupId: params.sourceGroupId,\n targetParentDir: params.targetParentDir,\n });\n // Frissítjük mind a projekt, mind a csoport listát.\n await this.loadProjects();\n await this.loadGroups();\n } catch (err: unknown) {\n this.cloneError_$.set(err);\n } finally {\n this.cloneLoading_$.set(false);\n }\n }\n\n /**\n * Workspace scan: projektek felfedezése a megadott útvonal alatt.\n */\n async discoverProjects(scanPath: string): Promise<void> {\n this.discoveryLoading_$.set(true);\n this.discoveryError_$.set(null);\n this.discoveredProjects_$.set([]);\n try {\n const result: { discoveredProjects: PM_DiscoveredProject_Response[] } =\n await this.pm_AS.discoverProjects(scanPath);\n this.discoveredProjects_$.set(result.discoveredProjects);\n } catch (err: unknown) {\n this.discoveryError_$.set(err);\n } finally {\n this.discoveryLoading_$.set(false);\n }\n }\n\n /**\n * Felfedezett projektek batch létrehozása (a wizard által kiválasztott projektek).\n * A létrehozás után újratölti a projekt listát.\n */\n async createDiscoveredProjects(\n projects: PM_DiscoveredProject_Response[],\n ): Promise<void> {\n for (const discovered of projects) {\n const payload: PM_Response = {\n name: discovered.name,\n localPath: discovered.localPath,\n description: discovered.description,\n githubRepoUrl: discovered.githubRepoUrl,\n isActive: true,\n };\n await this.pm_AS.createProject(payload);\n }\n await this.loadProjects();\n }\n\n /**\n * Discovery state törlése (wizard bezárásakor).\n */\n clearDiscovery(): void {\n this.discoveredProjects_$.set([]);\n this.discoveryError_$.set(null);\n this.discoveryLoading_$.set(false);\n }\n\n /**\n * Git állapot gyors frissítése (csak git, nem teljes sync).\n * Frissíti az aktív projektet és a projekt listát.\n */\n async refreshGitStatus(projectId: string): Promise<void> {\n this.gitStatusLoading_$.set(true);\n this.gitStatusError_$.set(null);\n try {\n const result: { project: PM_ } =\n await this.pm_AS.refreshGitStatus(projectId);\n this.activeProject_$.set(result.project);\n try {\n const hostDetail: PM_GetProject_Response = await this.pm_AS.getProject(projectId);\n this.activeProjectComputedCcapHost_$.set(hostDetail.computedCcapRevisionedHost);\n } catch {\n // Host flag változatlan marad, ha a detail GET hibázik.\n }\n // Frissítjük a projekt listában is.\n this.projects_$.update(\n (list: PM_[]): PM_[] =>\n list.map(\n (p: PM_): PM_ =>\n p._id === projectId ? result.project : p,\n ),\n );\n } catch (err: unknown) {\n this.gitStatusError_$.set(err);\n } finally {\n this.gitStatusLoading_$.set(false);\n }\n }\n\n /**\n * Lightweight sync egy projektre. Frissíti az aktív projektet és a projekt listát.\n */\n async syncProject(projectId: string): Promise<void> {\n this.syncLoading_$.set(true);\n this.syncError_$.set(null);\n this.lastSyncResult_$.set(null);\n try {\n const result: { project: PM_; syncResult: PM_SyncResult_Response } =\n await this.pm_AS.syncProject(projectId);\n this.lastSyncResult_$.set(result.syncResult);\n this.activeProject_$.set(result.project);\n try {\n const hostDetail: PM_GetProject_Response = await this.pm_AS.getProject(projectId);\n this.activeProjectComputedCcapHost_$.set(hostDetail.computedCcapRevisionedHost);\n } catch {\n // Host flag változatlan marad, ha a detail GET hibázik.\n }\n // Frissítjük a projekt listában is.\n this.projects_$.update(\n (list: PM_[]): PM_[] =>\n list.map(\n (p: PM_): PM_ =>\n p._id === projectId ? result.project : p,\n ),\n );\n } catch (err: unknown) {\n this.syncError_$.set(err);\n } finally {\n this.syncLoading_$.set(false);\n }\n }\n\n /**\n * Lightweight sync minden aktív projektre. Frissíti a teljes projekt listát.\n */\n async syncAllProjects(): Promise<void> {\n this.syncLoading_$.set(true);\n this.syncError_$.set(null);\n try {\n await this.pm_AS.syncAllProjects();\n await this.loadProjects();\n } catch (err: unknown) {\n this.syncError_$.set(err);\n } finally {\n this.syncLoading_$.set(false);\n }\n }\n\n /**\n * Minden kontroll fájl betöltése az aktív projekthez.\n */\n async loadAllFileContents(projectId: string): Promise<void> {\n this.fileContentLoading_$.set(true);\n this.fileContentError_$.set(null);\n try {\n const result: { files: PM_AllFileContents_Response } =\n await this.pm_AS.getAllFileContents(projectId);\n this.fileContents_$.set(result.files);\n } catch (err: unknown) {\n this.fileContentError_$.set(err);\n } finally {\n this.fileContentLoading_$.set(false);\n }\n }\n\n /**\n * TEST-ERROR-REPORTS.json ürítése a szerveren, majd file sync újratöltés.\n */\n async clearTestErrorReportsAndRefresh(projectId: string): Promise<void> {\n this.testErrorReportsClearing_$.set(true);\n try {\n await this.pm_AS.clearTestErrorReports(projectId);\n await this.loadAllFileContents(projectId);\n } finally {\n this.testErrorReportsClearing_$.set(false);\n }\n }\n\n /**\n * BUGS.md path feloldás (jelöltek, ambiguitás) — UI választáshoz.\n */\n async getBugsPathResolve(projectId: string): Promise<PM_BugsPathResolution_Response> {\n return this.pm_AS.getBugsPathResolve(projectId);\n }\n\n /**\n * Központi error tábla → BUGS.md append; siker után fájl tartalom frissítése.\n */\n async appendBugsFromErrorsAndRefreshFiles(\n projectId: string,\n body?: PM_AppendBugsFromErrors_Request,\n ): Promise<PM_AppendBugsFromErrors_Response> {\n const result: PM_AppendBugsFromErrors_Response =\n await this.pm_AS.appendBugsFromErrors(projectId, body);\n await this.loadAllFileContents(projectId);\n return result;\n }\n\n /**\n * Egy központi error → BUGS.md; utána fájl tartalom frissítése.\n */\n async appendSingleBugFromErrorAndRefreshFiles(\n projectId: string,\n ccapErrorId: string,\n body?: PM_AppendBugsFromErrors_Request,\n ): Promise<PM_AppendSingleBugFromError_Response> {\n const result: PM_AppendSingleBugFromError_Response =\n await this.pm_AS.appendSingleBugFromError(projectId, ccapErrorId, body);\n await this.loadAllFileContents(projectId);\n return result;\n }\n\n /**\n * Kézi bug: BUGS.md + user request; utána kontroll fájlok és user request lista frissítése.\n */\n async createManualBugAndRefresh(\n projectId: string,\n body: PM_ManualBugCreate_Request,\n ): Promise<PM_ManualBugCreate_Response> {\n const result: PM_ManualBugCreate_Response =\n await this.pm_AS.createManualBug(projectId, body);\n await this.loadAllFileContents(projectId);\n await this.loadUserRequests(projectId);\n return result;\n }\n\n /**\n * User request-ek betöltése az aktív projekthez.\n */\n async loadUserRequests(projectId: string): Promise<void> {\n this.userRequestsLoading_$.set(true);\n this.userRequestsError_$.set(null);\n try {\n const result: { userRequests: PM_UserRequest[] } =\n await this.pm_AS.listUserRequests(projectId);\n this.userRequests_$.set(result.userRequests);\n } catch (err: unknown) {\n this.userRequestsError_$.set(err);\n } finally {\n this.userRequestsLoading_$.set(false);\n }\n }\n\n /**\n * Új user request létrehozása, majd lista frissítése.\n */\n async createUserRequest(\n projectId: string,\n payload: PM_CreateUserRequestHttpBody_Request,\n ): Promise<void> {\n await this.pm_AS.createUserRequest(projectId, payload);\n await this.loadUserRequests(projectId);\n }\n\n /**\n * User request frissítése, majd lista frissítése.\n */\n async updateUserRequest(\n projectId: string,\n requestId: string,\n payload: Partial<PM_UserRequest_Response>,\n ): Promise<void> {\n const result: { userRequest: PM_UserRequest } =\n await this.pm_AS.updateUserRequest(projectId, requestId, payload);\n this.userRequests_$.update(\n (list: PM_UserRequest[]): PM_UserRequest[] =>\n list.map(\n (r: PM_UserRequest): PM_UserRequest =>\n r._id === requestId ? result.userRequest : r,\n ),\n );\n }\n\n /**\n * USER-INPUT wizard: LLM suggest (egyetlen hívás).\n */\n async suggestUserInputFormat(\n projectId: string,\n body: PM_UserInputSuggestFormat_Request,\n ): Promise<PM_UserInputSuggestFormat_Response> {\n this.userInputWizardSuggestLoading_$.set(true);\n this.userInputWizardSuggestError_$.set(null);\n this.userInputWizardLastLlmSystemPrompt_$.set(null);\n this.userInputWizardLastLlmUserMessage_$.set(null);\n try {\n const result: PM_UserInputSuggestFormat_Response =\n await this.pm_AS.suggestUserInputFormat(projectId, body);\n this.userInputWizardLastLlmSystemPrompt_$.set(result.llmSystemPrompt ?? null);\n this.userInputWizardLastLlmUserMessage_$.set(result.llmUserMessage ?? null);\n return result;\n } catch (err: unknown) {\n this.userInputWizardSuggestError_$.set(err);\n throw err;\n } finally {\n this.userInputWizardSuggestLoading_$.set(false);\n }\n }\n\n /**\n * Kontroll entry mutáció után teljes file sync újratöltés.\n * Ha `priorRawFingerprintSha256` hiányzik, a DS számolja LF-normalizált prior blokk SHA-256-ját.\n */\n async mutateControlFileEntryAndRefresh(\n projectId: string,\n fileType: PM_ControlFileType_Type,\n body: Omit<PM_ControlEntryMutation_Request, 'priorRawFingerprintSha256'> & {\n priorRawFingerprintSha256?: string;\n },\n ): Promise<PM_ControlEntryMutation_Response> {\n const trimmedFp: string | undefined = body.priorRawFingerprintSha256?.trim();\n const priorFingerprint: string =\n trimmedFp != null && trimmedFp.length > 0\n ? trimmedFp\n : await PM_Sha256Fingerprint_Util.sha256HexOfNormalized(body.priorRawBlock);\n const fullBody: PM_ControlEntryMutation_Request = {\n mode: body.mode,\n priorRawBlock: body.priorRawBlock,\n priorRawFingerprintSha256: priorFingerprint,\n newRawBlock: body.newRawBlock,\n bugsFileAbsolutePath: body.bugsFileAbsolutePath,\n };\n const result: PM_ControlEntryMutation_Response =\n await this.pm_AS.mutateControlFileEntry(projectId, fileType, fullBody);\n await this.loadAllFileContents(projectId);\n return result;\n }\n\n /**\n * USER-INPUT wizard: USER-INPUT.md + DB véglegesítés, majd lista és fájl frissítés.\n */\n async finalizeUserInputWizard(\n projectId: string,\n body: PM_UserInputFinalize_Request,\n ): Promise<PM_UserInputFinalize_Response> {\n this.userInputWizardFinalizeLoading_$.set(true);\n this.userInputWizardFinalizeError_$.set(null);\n try {\n const result: PM_UserInputFinalize_Response =\n await this.pm_AS.finalizeUserInput(projectId, body);\n await this.loadUserRequests(projectId);\n await this.loadAllFileContents(projectId);\n return result;\n } catch (err: unknown) {\n this.userInputWizardFinalizeError_$.set(err);\n throw err;\n } finally {\n this.userInputWizardFinalizeLoading_$.set(false);\n }\n }\n\n // ─── Reviews ───────────────────────────────────────────────────────────────\n\n /**\n * Developer review metaadatok betöltése.\n */\n async loadReviewsMeta(projectId: string): Promise<void> {\n this.reviewsMetaLoading_$.set(true);\n this.reviewsMetaError_$.set(null);\n try {\n const result: { reviewsMeta: DT_DeveloperReviewMeta_Response[] } =\n await this.pm_AS.getReviewsMeta(projectId);\n this.reviewsMeta_$.set(result.reviewsMeta);\n } catch (err: unknown) {\n this.reviewsMetaError_$.set(err);\n } finally {\n this.reviewsMetaLoading_$.set(false);\n }\n }\n\n /**\n * Developer review-ok futtatása a projekt localPath-ján.\n */\n async runProjectReviews(projectId: string, reviewIds?: string[]): Promise<void> {\n this.reviewsRunning_$.set(true);\n this.reviewsRunError_$.set(null);\n this.reviewResult_$.set(null);\n try {\n const result: { reviewResult: DT_DeveloperRun_Response } =\n await this.pm_AS.runProjectReviews(projectId, reviewIds);\n this.reviewResult_$.set(result.reviewResult);\n } catch (err: unknown) {\n this.reviewsRunError_$.set(err);\n } finally {\n this.reviewsRunning_$.set(false);\n }\n }\n\n // ─── Agent Reports (REQ-PM-AGT-001 Slice 4) ────────────────────────\n\n /**\n * Agent riportok listájának betöltése a projekthez.\n * A szerver descending dátum-rendben adja vissza a fájlokat; itt csak továbbítjuk.\n */\n async loadAgentReports(projectId: string): Promise<void> {\n this.agentReportsLoading_$.set(true);\n this.agentReportsError_$.set(null);\n try {\n const result = await this.pm_AS.listAgentReports(projectId);\n this.agentReports_$.set(result.reports);\n } catch (err: unknown) {\n this.agentReportsError_$.set(err);\n } finally {\n this.agentReportsLoading_$.set(false);\n }\n }\n\n /**\n * Egy riport teljes tartalmának betöltése relPath alapján (path-traversal védelem\n * szerver-oldalon). Sikertelenség esetén `activeAgentReport_$` kiürül, hiba a\n * `activeAgentReportError_$`-re kerül.\n */\n async loadAgentReport(projectId: string, relPath: string): Promise<void> {\n this.activeAgentReportLoading_$.set(true);\n this.activeAgentReportError_$.set(null);\n try {\n const result = await this.pm_AS.getAgentReportContent(projectId, relPath);\n this.activeAgentReport_$.set(result);\n } catch (err: unknown) {\n this.activeAgentReport_$.set(null);\n this.activeAgentReportError_$.set(err);\n } finally {\n this.activeAgentReportLoading_$.set(false);\n }\n }\n\n /** Aktív riport kiürítése (vissza-gomb a detailből). */\n clearActiveAgentReport(): void {\n this.activeAgentReport_$.set(null);\n this.activeAgentReportError_$.set(null);\n }\n}\n", "import { Component, computed, inject, input } from '@angular/core';\n\nimport { PM_ } from '../../../../_models/server-index';\nimport { ProjectManagement_DataService } from '../../../project-management/_services/data-services/project-management.data-service';\n\n/**\n * Projekt-név badge: ha a megadott workspace path alapján van találat\n * a betöltött projekt listában (`PM_.localPath`), akkor egy kis pilulát\n * rajzol a projekt nevével. Match nélkül a host elem `display: none`,\n * így a parent flex konténerben `gap` extra rés sem keletkezik.\n *\n * Path matching: normalizált — lowercase (Windows case-insensitivity),\n * backslash → slash egységesítés, trailing slash eltávolítása.\n *\n * Projekt lista lazy-load: első badge példány triggereli a `loadProjects()`-et,\n * ha a service-en még nem futott le sikeresen és nincs folyamatban / hiba.\n */\n@Component({\n selector: 'app-s-project-badge',\n standalone: true,\n templateUrl: './s-project-badge.component.html',\n host: {\n 'class': 'ml-auto',\n '[style.display]': 'projectName_$() ? \"inline-flex\" : \"none\"',\n },\n})\n/** S_ProjectBadge_Component class. */\nexport class S_ProjectBadge_Component {\n\n /** Session workspace path — ez alapján keressük a projektet. */\n readonly workspacePath = input<string | undefined>(undefined);\n\n private readonly pm_DS: ProjectManagement_DataService =\n inject(ProjectManagement_DataService);\n\n /** A workspace path-hez illeszkedő projekt neve — vagy null, ha nincs match. */\n readonly projectName_$ = computed((): string | null => {\n const wp: string | undefined = this.workspacePath();\n if (!wp) {\n return null;\n }\n const normWp: string = S_ProjectBadge_Component.normalizePath(wp);\n if (!normWp) {\n return null;\n }\n const list: PM_[] = this.pm_DS.projects_$();\n const match: PM_ | undefined = list.find(\n (p: PM_): boolean =>\n !!p.localPath &&\n S_ProjectBadge_Component.normalizePath(p.localPath) === normWp,\n );\n return match?.name ?? null;\n });\n\n constructor() {\n // Lazy-load: első felbukkanáskor indítjuk a projekt listát — csak akkor,\n // ha még sosem töltődött be sikeresen, nincs éppen folyamatban,\n // és az előző próbálkozás nem ért hibába (különben minden új badge példány\n // újraindítana egy olyan request-et ami úgyis hibázni fog).\n if (\n !this.pm_DS.projectsLoadedOnce_$() &&\n !this.pm_DS.projectsLoading_$() &&\n !this.pm_DS.projectsError_$()\n ) {\n void this.pm_DS.loadProjects();\n }\n }\n\n /**\n * Path normalizáció: trim, lowercase (Windows case-insensitivity),\n * backslash → slash, trailing slash eltávolítása.\n */\n private static normalizePath(path: string): string {\n let normalized: string = path.trim().toLowerCase().replace(/\\\\/g, '/');\n while (normalized.endsWith('/') && normalized.length > 1) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n }\n}\n", "@if (projectName_$(); as name) {\n <span\n class=\"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]\"\n [title]=\"name\">\n {{ name }}\n </span>\n}\n", "import { Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nimport { S_AbsoluteTime_Pipe } from '../../../_pipes/s-absolute-time.pipe';\nimport { S_TimeAgo_Pipe } from '../../../_pipes/s-time-ago.pipe';\nimport { S_ProjectBadge_Component } from '../../s-project-badge/s-project-badge.component';\nimport { S_SessionListRowView_Interface } from '../../../_models/interfaces/s-session-list-row-view.interface';\n\n/**\n * Shared external session lista sor komponens.\n * Egységes megjelenítés CC, OC, CA session listákhoz:\n * státusz dot (spinning ha futó), label, timestamp, projekt badge, archived badge.\n *\n * A context menu és a műveletek a parent dashboard-ban maradnak — ez a komponens\n * csak a `contextMenu` output-on keresztül jelzi a jobb klikk eseményt.\n */\n@Component({\n selector: 'app-s-session-list-row',\n standalone: true,\n imports: [NgClass, S_AbsoluteTime_Pipe, S_TimeAgo_Pipe, S_ProjectBadge_Component],\n templateUrl: './s-session-list-row.component.html',\n host: { class: 'block' },\n})\n/** S_SessionListRow_Component class. */\nexport class S_SessionListRow_Component {\n\n /** Normalizált session view adat. */\n readonly view: InputSignal<S_SessionListRowView_Interface> =\n input.required<S_SessionListRowView_Interface>();\n\n /** Kijelölt (aktív) sor. */\n readonly isActive: InputSignal<boolean> = input<boolean>(false);\n\n /** Workspace path sor megjelenítése (OC, CA használja). */\n readonly showWorkspacePath: InputSignal<boolean> = input<boolean>(false);\n\n /** Prompt count megjelenítése (OC, CA használja). */\n readonly showPromptCount: InputSignal<boolean> = input<boolean>(false);\n\n /** Session kiválasztás (kattintás). */\n readonly selected: OutputEmitterRef<string> = output<string>();\n\n /** Jobb klikk context menu — pozíció + session id átadása a parent-nek. */\n readonly contextMenu: OutputEmitterRef<{ event: MouseEvent; id: string }> =\n output<{ event: MouseEvent; id: string }>();\n\n /**\n * REQ-SCH-IND-CLICK-001 (cycle 201): a schedule-indicator badge kattintásakor\n * jelez a parent-nek (sessionId) — a parent dashboard nyitja meg a popup-ot.\n * Csak akkor emittál, ha a `view().hasSchedule` true (a badge látható).\n */\n readonly scheduleIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /**\n * REQ-SES-CRD-IND-001 Slice 3 (cycle 202): a coordinator-indicator badge\n * kattintásakor jelez a parent-nek (sessionId) — a parent dashboard nyitja meg a popup-ot.\n * Csak akkor emittál, ha a `view().hasCoordinator` true (a badge látható).\n */\n readonly coordinatorIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /** Kattintás kezelése — session kiválasztás. */\n handleSelect(): void {\n this.selected.emit(this.view().id);\n }\n\n /** Jobb klikk kezelése — context menu jelzés a parent-nek. */\n handleContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.contextMenu.emit({ event: event, id: this.view().id });\n }\n\n /**\n * Schedule-indicator kattintás — propagáció megállítása (ne válassza ki a sort),\n * majd sessionId emit a parent-nek.\n */\n handleScheduleIndicatorClick(event: MouseEvent): void {\n event.stopPropagation();\n this.scheduleIndicatorClicked.emit(this.view().id);\n }\n\n /**\n * Coordinator-indicator kattintás — propagáció megállítása + sessionId emit\n * (REQ-SES-CRD-IND-001 Slice 3).\n */\n handleCoordinatorIndicatorClick(event: MouseEvent): void {\n event.stopPropagation();\n this.coordinatorIndicatorClicked.emit(this.view().id);\n }\n}\n", "<div\n class=\"px-2 py-1.5 border-b cursor-pointer transition-colors\"\n [class]=\"isActive()\n ? 'border-l-2 border-l-ccapAccent border-b-neutral-700/30 bg-neutral-800/80'\n : 'border-l-2 border-l-transparent border-b-neutral-700/30 hover:bg-neutral-800/60'\"\n [class.opacity-50]=\"view().isArchived\"\n (click)=\"handleSelect()\"\n (contextmenu)=\"handleContextMenu($event)\">\n\n <!-- Fő sor: status dot, label, timestamp, projekt badge, archived -->\n <div class=\"flex items-center gap-1.5\">\n <!-- Státusz dot + spinning indikátor -->\n <span class=\"relative w-3.5 h-3.5 shrink-0 flex items-center justify-center\" [title]=\"view().status\">\n <span class=\"w-1.5 h-1.5 rounded-full\" [ngClass]=\"view().statusColorClass\"></span>\n @if (view().isRunning) {\n <span class=\"absolute inset-0 rounded-full border border-transparent border-t-yellow-400 animate-spin\"></span>\n }\n </span>\n\n <!-- Label -->\n <span class=\"text-xs text-neutral-200 font-medium truncate shrink-1 min-w-0\">\n {{ view().label }}\n </span>\n\n <!-- Last activity — REQ-SES-EVT-TS-002 cycle 473: text-neutral-400 + [title] absolute time. -->\n <span class=\"text-[10px] text-neutral-400 shrink-0\"\n [title]=\"(view().lastActivityAt ?? '') | sAbsoluteTime\">\n {{ view().lastActivityAt ? (view().lastActivityAt | sTimeAgo) : '—' }}\n </span>\n\n <!-- Projekt badge -->\n @if (view().workspacePath) {\n <app-s-project-badge [workspacePath]=\"view().workspacePath!\" />\n }\n\n <!-- Archived badge -->\n @if (view().isArchived) {\n <span class=\"text-[8px] px-0.5 rounded bg-amber-500/15 text-amber-500 shrink-0\">\n archived\n </span>\n }\n\n <!-- Schedule-indicator: REQ-SES-SCH-IND-001 (cycle 176-178) — calendar ikon, ha a session-höz aktív schedule.\n REQ-SCH-IND-CLICK-001 (cycle 201): kattintható → popup a job + execution infókkal a parent dashboardon.\n A button stopPropagation-t végez, így a sor select handler-e nem fut le. -->\n @if (view().hasSchedule) {\n <button type=\"button\"\n class=\"shrink-0 text-neonCyan/80 hover:text-neonCyan focus:outline-none focus:ring-1 focus:ring-neonCyan/60 rounded p-0.5\"\n title=\"Ehhez a session-höz tartozik schedule — kattints a részletekért\"\n aria-label=\"Schedule attached — open popup\"\n (click)=\"handleScheduleIndicatorClick($event)\">\n <svg class=\"w-3 h-3\" 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=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </button>\n }\n\n <!-- Coordinator-indicator: REQ-SES-CRD-IND-001 (cycle 190) — compass ikon neonAmber.\n REQ-SES-CRD-IND-001 Slice 3 (cycle 202): kattintható → popup koordinátor infókkal. -->\n @if (view().hasCoordinator) {\n <button type=\"button\"\n class=\"shrink-0 text-neonAmber/80 hover:text-neonAmber focus:outline-none focus:ring-1 focus:ring-neonAmber/60 rounded p-0.5\"\n title=\"Ehhez a session-höz tartozik koordinátor — kattints a részletekért\"\n aria-label=\"Coordinator attached — open popup\"\n (click)=\"handleCoordinatorIndicatorClick($event)\">\n <svg class=\"w-3 h-3\" 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 </div>\n\n <!-- Workspace path sor (opcionális) -->\n @if (showWorkspacePath() && view().workspacePath) {\n <div class=\"text-[10px] text-neutral-500 truncate mt-0.5 ml-5\">\n {{ view().workspacePath }}\n </div>\n }\n\n <!-- Prompt count + stats sor (opcionális) -->\n @if (showPromptCount() && view().promptCount) {\n <div class=\"flex items-center gap-2 mt-0.5 ml-5\">\n <span class=\"text-[10px] text-neutral-600\">\n {{ view().promptCount }} prompts\n </span>\n </div>\n }\n</div>\n", "import {\n Component,\n computed,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { CCAP_TextSearch_Util } from '../../../../../_collections/utils/ccap-text-search.util';\nimport { S_SessionListRowView_Interface }\n from '../../../_models/interfaces/s-session-list-row-view.interface';\nimport { S_SessionListRow_Component } from '../s-session-list-row/s-session-list-row.component';\n\n/**\n * REQ-UI-SSEL-001 Slice 1 — megosztott session-picker wrapper.\n *\n * Egyetlen SSOT komponens session-lista renderelésre: beépített accent-insensitive\n * keresővel (`CCAP_TextSearch_Util`), `S_SessionListRow_Component`-tel sor-render-re,\n * és event-alapú kiválasztás / context-menu handover a parent-nek.\n *\n * **Session-kind** input (`ccap` / `cc` / `ca` / `oc`) informatív — nem változtat a\n * render logikán, de a parent dashboardok és a Quick Input send-dropdown ugyanazt a\n * wrapper-t tudják használni, típus-szerinti külön dashboard-logika nélkül.\n *\n * **Scope**: ez a Slice csak a SKELETON-t adja — a kiegészítő szűrők (status filter,\n * project filter, archive toggle) a következő slice-okban kerülnek be flag-alapon.\n * Lásd: `__documentations/plans/2026-04-24/2026-04-24-req-ui-ssel-001-session-select-unification.plan.md`.\n */\n@Component({\n selector: 'app-s-session-select',\n standalone: true,\n imports: [CommonModule, FormsModule, S_SessionListRow_Component],\n templateUrl: './s-session-select.component.html',\n host: { class: 'block' },\n})\n/** S_SessionSelect_Component class. */\nexport class S_SessionSelect_Component {\n\n /** Session típus — parent-beli data source jelölés. Jelenleg render-logikát nem vezérel. */\n readonly kind: InputSignal<'ccap' | 'cc' | 'ca' | 'oc'> =\n input.required<'ccap' | 'cc' | 'ca' | 'oc'>();\n\n /** Megjelenítendő sorok (normalizált `S_SessionListRowView_Interface` alakban). */\n readonly rows: InputSignal<S_SessionListRowView_Interface[]> =\n input<S_SessionListRowView_Interface[]>([]);\n\n /** Aktívan kiválasztott session azonosítója (highlight-hoz). */\n readonly activeId: InputSignal<string> = input<string>('');\n\n /** Workspace path megjelenítése a soron (OC / CA használja). */\n readonly showWorkspacePath: InputSignal<boolean> = input<boolean>(false);\n\n /** Prompt count megjelenítése a soron (OC / CA használja). */\n readonly showPromptCount: InputSignal<boolean> = input<boolean>(false);\n\n /** Search input placeholder. */\n readonly searchPlaceholder: InputSignal<string> = input<string>('Keresés...');\n\n /**\n * Ha `true`: nincs belső keresősáv és a `filteredRows_$` a nyers `rows()`-t adja vissza —\n * a parent maga szűr (pl. ses-list, ami a name + goal + intent mezőkön keres, nem csak label-en).\n */\n readonly hideSearch: InputSignal<boolean> = input<boolean>(false);\n\n /** Session kiválasztás event (kattintás). */\n readonly selected: OutputEmitterRef<string> = output<string>();\n\n /** Jobb klikk context menu event — pozíció + session id. */\n readonly contextMenu: OutputEmitterRef<{ event: MouseEvent; id: string }> =\n output<{ event: MouseEvent; id: string }>();\n\n /** REQ-SCH-IND-CLICK-001 (cycle 201): schedule-indicator kattintás proxy a row-tól a parent-ig. */\n readonly scheduleIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /** REQ-SES-CRD-IND-001 Slice 3 (cycle 202): coordinator-indicator kattintás proxy. */\n readonly coordinatorIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /** Search query — accent-insensitive szűrés label-re. */\n readonly searchQuery_$: WritableSignal<string> = signal<string>('');\n\n /**\n * Szűrt sorok — accent/case-insensitive match a session label-re.\n * Üres query → minden sort átenged. `hideSearch=true` esetén nincs belső szűrés\n * (a parent maga szűri a listát, a wrapper csak renderelő).\n */\n readonly filteredRows_$: Signal<S_SessionListRowView_Interface[]> = computed(\n (): S_SessionListRowView_Interface[] => {\n const allRows: S_SessionListRowView_Interface[] = this.rows();\n if (this.hideSearch()) {\n return allRows;\n }\n const query: string = this.searchQuery_$();\n if (query.trim().length === 0) {\n return allRows;\n }\n return allRows.filter(\n (row: S_SessionListRowView_Interface): boolean =>\n CCAP_TextSearch_Util.includesText(row.label, query),\n );\n },\n );\n\n /** Select event továbbítása a parent-nek. */\n handleRowSelect(id: string): void {\n this.selected.emit(id);\n }\n\n /** Context-menu event továbbítása. */\n handleRowContextMenu(payload: { event: MouseEvent; id: string }): void {\n this.contextMenu.emit(payload);\n }\n\n /** Schedule-indicator click event továbbítása. */\n handleRowScheduleIndicatorClick(sessionId: string): void {\n this.scheduleIndicatorClicked.emit(sessionId);\n }\n\n /** Coordinator-indicator click event továbbítása (REQ-SES-CRD-IND-001 Slice 3). */\n handleRowCoordinatorIndicatorClick(sessionId: string): void {\n this.coordinatorIndicatorClicked.emit(sessionId);\n }\n}\n", "<!-- REQ-UI-SSEL-001 Slice 1: shared session picker — search bar + row list -->\n<div class=\"flex flex-col gap-2\">\n\n <!-- Search bar (csak ha `hideSearch` nem aktív — parent-driven szűrésnél a parent\n maga tart keresőmezőt, a wrapper csak renderelő). -->\n @if (!hideSearch()) {\n <div class=\"px-2 pt-2\">\n <input\n type=\"text\"\n class=\"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\"\n [placeholder]=\"searchPlaceholder()\"\n [ngModel]=\"searchQuery_$()\"\n (ngModelChange)=\"searchQuery_$.set($event)\"\n data-testid=\"s-session-select-search\" />\n </div>\n }\n\n <!-- Row list -->\n <div class=\"flex flex-col gap-1 px-2 pb-2\">\n @for (row of filteredRows_$(); track row.id) {\n <app-s-session-list-row\n [view]=\"row\"\n [isActive]=\"row.id === activeId()\"\n [showWorkspacePath]=\"showWorkspacePath()\"\n [showPromptCount]=\"showPromptCount()\"\n (selected)=\"handleRowSelect($event)\"\n (contextMenu)=\"handleRowContextMenu($event)\"\n (scheduleIndicatorClicked)=\"handleRowScheduleIndicatorClick($event)\"\n (coordinatorIndicatorClicked)=\"handleRowCoordinatorIndicatorClick($event)\" />\n }\n\n @if (filteredRows_$().length === 0) {\n <span class=\"text-[11px] text-neutral-500 italic px-1 py-2\">\n @if (searchQuery_$().trim().length > 0) {\n Nincs találat.\n } @else {\n Üres lista.\n }\n </span>\n }\n </div>\n\n</div>\n"],
5
- "mappings": "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",
6
- "names": ["PM_Sha256Fingerprint_Util", "normalizeNewlines", "text", "replace", "sha256HexOfNormalized", "__async", "normalized", "data", "TextEncoder", "encode", "digest", "crypto", "subtle", "bytes", "Uint8Array", "hex", "i", "length", "toString", "padStart", "ProjectManagement_DataService", "projects_$", "signal", "projectsLoading_$", "projectsError_$", "projectsLoadedOnce_$", "activeProject_$", "activeProjectComputedCcapHost_$", "activeProjectLoading_$", "activeProjectError_$", "userRequests_$", "userRequestsLoading_$", "userRequestsError_$", "discoveredProjects_$", "discoveryLoading_$", "discoveryError_$", "gitStatusLoading_$", "gitStatusError_$", "syncLoading_$", "syncError_$", "lastSyncResult_$", "fileContents_$", "fileContentLoading_$", "fileContentError_$", "testErrorReportsClearing_$", "agentReports_$", "agentReportsLoading_$", "agentReportsError_$", "activeAgentReport_$", "activeAgentReportLoading_$", "activeAgentReportError_$", "reviewsMeta_$", "reviewsMetaLoading_$", "reviewsMetaError_$", "reviewResult_$", "reviewsRunning_$", "reviewsRunError_$", "userInputWizardSuggestLoading_$", "userInputWizardSuggestError_$", "userInputWizardFinalizeLoading_$", "userInputWizardFinalizeError_$", "userInputWizardLastLlmSystemPrompt_$", "userInputWizardLastLlmUserMessage_$", "groups_$", "groupsLoading_$", "groupsError_$", "activeGroup_$", "groupFiles_$", "groupFilesLoading_$", "groupFilesError_$", "crossInstanceProjects_$", "crossInstanceLoading_$", "crossInstanceError_$", "currentCcapId_$", "cloneLoading_$", "cloneError_$", "pm_AS", "inject", "ProjectManagement_ApiService", "loadProjects", "__async", "set", "result", "listProjects", "projects", "err", "loadProject", "projectId", "getProject", "project", "computedCcapRevisionedHost", "createProject", "payload", "updateProject", "update", "list", "map", "p", "_id", "archiveProject", "loadGroups", "listGroups", "groups", "createGroup", "archiveGroup", "groupId", "selectGroup", "group", "loadGroupFiles", "getGroupFiles", "loadCrossInstanceProjects", "listAllProjectsAcrossInstances", "currentCcapId", "cloneProject", "params", "sourceProjectId", "targetParentDir", "repoName", "cloneGroup", "sourceGroupId", "discoverProjects", "scanPath", "discoveredProjects", "createDiscoveredProjects", "discovered", "name", "localPath", "description", "githubRepoUrl", "isActive", "clearDiscovery", "refreshGitStatus", "hostDetail", "syncProject", "syncResult", "syncAllProjects", "loadAllFileContents", "getAllFileContents", "files", "clearTestErrorReportsAndRefresh", "clearTestErrorReports", "getBugsPathResolve", "appendBugsFromErrorsAndRefreshFiles", "body", "appendBugsFromErrors", "appendSingleBugFromErrorAndRefreshFiles", "ccapErrorId", "appendSingleBugFromError", "createManualBugAndRefresh", "createManualBug", "loadUserRequests", "listUserRequests", "userRequests", "createUserRequest", "updateUserRequest", "requestId", "r", "userRequest", "suggestUserInputFormat", "llmSystemPrompt", "llmUserMessage", "mutateControlFileEntryAndRefresh", "fileType", "trimmedFp", "priorRawFingerprintSha256", "trim", "priorFingerprint", "length", "PM_Sha256Fingerprint_Util", "sha256HexOfNormalized", "priorRawBlock", "fullBody", "mode", "newRawBlock", "bugsFileAbsolutePath", "mutateControlFileEntry", "finalizeUserInputWizard", "finalizeUserInput", "loadReviewsMeta", "getReviewsMeta", "reviewsMeta", "runProjectReviews", "reviewIds", "reviewResult", "loadAgentReports", "listAgentReports", "reports", "loadAgentReport", "relPath", "getAgentReportContent", "clearActiveAgentReport", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "name_r1", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "S_ProjectBadge_Component", "workspacePath", "input", "undefined", "pm_DS", "inject", "ProjectManagement_DataService", "projectName_$", "computed", "wp", "normWp", "normalizePath", "projects_$", "find", "p", "localPath", "name", "constructor", "projectsLoadedOnce_$", "projectsLoading_$", "projectsError_$", "loadProjects", "path", "normalized", "trim", "toLowerCase", "replace", "endsWith", "length", "slice", "selectors", "hostAttrs", "hostVars", "hostBindings", "rf", "ctx", "\u0275\u0275styleProp", "\u0275\u0275template", "S_ProjectBadge_Component_Conditional_0_Template", "\u0275\u0275conditional", "tmp_0_0", "\u0275\u0275element", "\u0275\u0275property", "ctx_r0", "view", "workspacePath", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleScheduleIndicatorClick", "_r3", "handleCoordinatorIndicatorClick", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "promptCount", "S_SessionListRow_Component", "input", "required", "isActive", "showWorkspacePath", "showPromptCount", "selected", "output", "contextMenu", "scheduleIndicatorClicked", "coordinatorIndicatorClicked", "handleSelect", "emit", "id", "handleContextMenu", "event", "preventDefault", "stopPropagation", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_SessionListRow_Component_Conditional_4_Template", "S_SessionListRow_Component_Conditional_11_Template", "S_SessionListRow_Component_Conditional_12_Template", "S_SessionListRow_Component_Conditional_13_Template", "S_SessionListRow_Component_Conditional_14_Template", "S_SessionListRow_Component_Conditional_15_Template", "S_SessionListRow_Component_Conditional_16_Template", "\u0275\u0275classMap", "\u0275\u0275classProp", "isArchived", "status", "statusColorClass", "\u0275\u0275conditional", "isRunning", "label", "\u0275\u0275pipeBind1", "tmp_6_0", "lastActivityAt", "undefined", "hasSchedule", "hasCoordinator", "NgClass", "S_AbsoluteTime_Pipe", "S_TimeAgo_Pipe", "S_ProjectBadge_Component", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "searchQuery_$", "set", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275property", "searchPlaceholder", "_r3", "handleRowSelect", "handleRowContextMenu", "handleRowScheduleIndicatorClick", "handleRowCoordinatorIndicatorClick", "row_r4", "id", "activeId", "showWorkspacePath", "showPromptCount", "\u0275\u0275text", "\u0275\u0275template", "S_SessionSelect_Component_Conditional_5_Conditional_1_Template", "S_SessionSelect_Component_Conditional_5_Conditional_2_Template", "\u0275\u0275conditional", "trim", "length", "S_SessionSelect_Component", "kind", "input", "required", "rows", "hideSearch", "selected", "output", "contextMenu", "scheduleIndicatorClicked", "coordinatorIndicatorClicked", "signal", "filteredRows_$", "computed", "allRows", "query", "filter", "row", "CCAP_TextSearch_Util", "includesText", "label", "emit", "payload", "sessionId", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "S_SessionSelect_Component_Conditional_1_Template", "\u0275\u0275repeaterCreate", "S_SessionSelect_Component_For_4_Template", "_forTrack0", "S_SessionSelect_Component_Conditional_5_Template", "\u0275\u0275repeater", "CommonModule", "FormsModule", "DefaultValueAccessor", "NgControlStatus", "NgModel", "S_SessionListRow_Component", "encapsulation"]
4
+ "sourcesContent": ["/**\n * PM entry-mutation: prior blokk SHA-256 fingerprint (UTF-8, LF normalizált) — szerver PM_ControlEntryMutation_Util egyeztetéshez.\n */\nexport class PM_Sha256Fingerprint_Util {\n\n /**\n * Sorvégek normalizálása LF-re (szerver `normalizeNewlines` egyezése).\n */\n static normalizeNewlines(text: string): string {\n return text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n }\n\n /**\n * SHA-256 hex digest UTF-8 byte-okra a normalizált szövegből.\n */\n static async sha256HexOfNormalized(text: string): Promise<string> {\n const normalized: string = PM_Sha256Fingerprint_Util.normalizeNewlines(text);\n const encoder: TextEncoder = new TextEncoder();\n const data: Uint8Array = encoder.encode(normalized);\n const digest: ArrayBuffer = await crypto.subtle.digest('SHA-256', data);\n const bytes: Uint8Array = new Uint8Array(digest);\n let hex: string = '';\n for (let i: number = 0; i < bytes.length; i += 1) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n }\n}\n", "import { inject, Injectable, signal } from '@angular/core';\n\nimport { DT_DeveloperReviewMeta_Response } from '../../../../_models/server-index';\nimport { DT_DeveloperRun_Response } from '../../../../_models/server-index';\nimport { PM_AllFileContents_Response } from '../../../../_models/server-index';\nimport {\n PM_AppendBugsFromErrors_Request,\n PM_AppendBugsFromErrors_Response,\n PM_AppendSingleBugFromError_Response,\n PM_BugsPathResolution_Response,\n PM_CreateUserRequestHttpBody_Request,\n PM_ManualBugCreate_Request,\n PM_ManualBugCreate_Response,\n} from '../../../../_models/server-index';\nimport { PM_DiscoveredProject_Response } from '../../../../_models/server-index';\nimport {\n PM_AgentReport_Interface,\n PM_AgentReportContent_Response,\n} from '../../../../_models/server-index';\nimport {\n PM_GetProject_Response,\n PM_ListProjects_Response,\n} from '../../../../_models/server-index';\nimport { PM_ } from '../../../../_models/server-index';\nimport { PM_SyncResult_Response } from '../../../../_models/server-index';\nimport { PM_UserRequest } from '../../../../_models/server-index';\nimport { PM_Response } from '../../../../_models/server-index';\nimport { PM_UserRequest_Response } from '../../../../_models/server-index';\nimport {\n PM_ControlEntryMutation_Request,\n PM_ControlEntryMutation_Response,\n PM_UserInputFinalize_Request,\n PM_UserInputFinalize_Response,\n PM_UserInputSuggestFormat_Request,\n PM_UserInputSuggestFormat_Response,\n} from '../../../../_models/server-index';\nimport { PM_ControlFileType_Type } from '../../../../_models/server-index';\nimport { PM_Group_DataModel } from '../../../../_models/server-index';\nimport { PM_GroupFiles_Response } from '../../../../_models/server-index';\nimport { ProjectManagement_ApiService } from '../project-management.api-service';\nimport { PM_Sha256Fingerprint_Util } from '../../_collections/utils/pm-sha256-fingerprint.util';\n\n/**\n * Project Management data service (SSOT).\n * Projektek és user request-ek kliens-oldali állapotkezelése.\n */\n@Injectable({ providedIn: 'root' })\nexport class ProjectManagement_DataService {\n\n /** Projektek listája. */\n readonly projects_$ = signal<PM_[]>([]);\n\n /** Betöltés folyamatban (projekt lista). */\n readonly projectsLoading_$ = signal<boolean>(false);\n\n /** Projekt lista betöltési hiba (null = nincs). */\n readonly projectsError_$ = signal<unknown | null>(null);\n\n /**\n * Első sikeres projekt-lista betöltés megtörtént-e (lazy-load guard).\n * Olyan komponensek használják, amelyek opcionálisan tudnak projektekre hivatkozni\n * (pl. project-név badge session listákon), de nem akarnak minden újrarenderelésnél\n * újra fetch-elni, és nem akarják a \"0 projekt\" esetet folyamatosan újrapróbálni.\n */\n readonly projectsLoadedOnce_$ = signal<boolean>(false);\n\n /** Aktuálisan megnyitott projekt. */\n readonly activeProject_$ = signal<PM_ | null>(null);\n\n /**\n * Szerver által számolt flag: a projekt git/GitHub URL alapján CCAP Revisioned host-e\n * (error → BUGS.md bridge).\n */\n readonly activeProjectComputedCcapHost_$ = signal<boolean>(false);\n\n /** Aktív projekt betöltés folyamatban. */\n readonly activeProjectLoading_$ = signal<boolean>(false);\n\n /** Aktív projekt betöltési hiba (null = nincs). */\n readonly activeProjectError_$ = signal<unknown | null>(null);\n\n /** Aktív projekt user request-jeinek listája. */\n readonly userRequests_$ = signal<PM_UserRequest[]>([]);\n\n /** User request lista betöltés folyamatban. */\n readonly userRequestsLoading_$ = signal<boolean>(false);\n\n /** User request lista betöltési hiba (null = nincs). */\n readonly userRequestsError_$ = signal<unknown | null>(null);\n\n /** Felfedezett projektek listája (utolsó scan eredménye). */\n readonly discoveredProjects_$ = signal<PM_DiscoveredProject_Response[]>([]);\n\n /** Discovery scan folyamatban. */\n readonly discoveryLoading_$ = signal<boolean>(false);\n\n /** Discovery scan hiba (null = nincs). */\n readonly discoveryError_$ = signal<unknown | null>(null);\n\n /** Git status refresh folyamatban. */\n readonly gitStatusLoading_$ = signal<boolean>(false);\n\n /** Git status refresh hiba (null = nincs). */\n readonly gitStatusError_$ = signal<unknown | null>(null);\n\n /** Sync folyamatban (egy projektre vagy sync-all). */\n readonly syncLoading_$ = signal<boolean>(false);\n\n /** Sync hiba (null = nincs). */\n readonly syncError_$ = signal<unknown | null>(null);\n\n /** Utolsó sync eredménye (egy projektre). */\n readonly lastSyncResult_$ = signal<PM_SyncResult_Response | null>(null);\n\n /** Kontroll fájlok parse-olt tartalma (minden fájl egyben). */\n readonly fileContents_$ = signal<PM_AllFileContents_Response | null>(null);\n\n /** Kontroll fájl betöltés folyamatban. */\n readonly fileContentLoading_$ = signal<boolean>(false);\n\n /** Kontroll fájl betöltési hiba. */\n readonly fileContentError_$ = signal<unknown | null>(null);\n\n /** Test error reports fájl Clear művelet alatt. */\n readonly testErrorReportsClearing_$ = signal<boolean>(false);\n\n // ─── Agent Reports (REQ-PM-AGT-001 Slice 4) ────────────────────────\n\n /** `__agent/reports/**` lista-betöltés eredménye (descending dátum). */\n readonly agentReports_$ = signal<PM_AgentReport_Interface[]>([]);\n\n /** Agent reports lista-betöltés folyamatban. */\n readonly agentReportsLoading_$ = signal<boolean>(false);\n\n /** Agent reports lista-betöltési hiba. */\n readonly agentReportsError_$ = signal<unknown | null>(null);\n\n /** Aktuálisan megnyitott riport tartalma (detail). */\n readonly activeAgentReport_$ = signal<PM_AgentReportContent_Response | null>(null);\n\n /** Detail-betöltés folyamatban. */\n readonly activeAgentReportLoading_$ = signal<boolean>(false);\n\n /** Detail-betöltési hiba. */\n readonly activeAgentReportError_$ = signal<unknown | null>(null);\n\n /** Elérhető review-k metaadata. */\n readonly reviewsMeta_$ = signal<DT_DeveloperReviewMeta_Response[]>([]);\n\n /** Review meta betöltés folyamatban. */\n readonly reviewsMetaLoading_$ = signal<boolean>(false);\n\n /** Review meta betöltési hiba. */\n readonly reviewsMetaError_$ = signal<unknown | null>(null);\n\n /** Utolsó review futtatás eredménye. */\n readonly reviewResult_$ = signal<DT_DeveloperRun_Response | null>(null);\n\n /** Review futtatás folyamatban. */\n readonly reviewsRunning_$ = signal<boolean>(false);\n\n /** Review futtatási hiba. */\n readonly reviewsRunError_$ = signal<unknown | null>(null);\n\n /** USER-INPUT wizard suggest folyamatban. */\n readonly userInputWizardSuggestLoading_$ = signal<boolean>(false);\n\n /** USER-INPUT wizard suggest hiba. */\n readonly userInputWizardSuggestError_$ = signal<unknown | null>(null);\n\n /** USER-INPUT wizard finalize folyamatban. */\n readonly userInputWizardFinalizeLoading_$ = signal<boolean>(false);\n\n /** USER-INPUT wizard finalize hiba. */\n readonly userInputWizardFinalizeError_$ = signal<unknown | null>(null);\n\n /** Utolsó USER-INPUT suggest LLM system prompt (transzparencia). */\n readonly userInputWizardLastLlmSystemPrompt_$ = signal<string | null>(null);\n\n /** Utolsó USER-INPUT suggest LLM user message (transzparencia). */\n readonly userInputWizardLastLlmUserMessage_$ = signal<string | null>(null);\n\n // --- Project Groups ---\n\n /** Projekt csoportok listája. */\n readonly groups_$ = signal<PM_Group_DataModel[]>([]);\n\n /** Csoport lista betöltés folyamatban. */\n readonly groupsLoading_$ = signal<boolean>(false);\n\n /** Csoport lista betöltési hiba. */\n readonly groupsError_$ = signal<unknown | null>(null);\n\n /** Kiválasztott csoport (szűrőként működik a projekt listán). */\n readonly activeGroup_$ = signal<PM_Group_DataModel | null>(null);\n\n /** Group extra fájlok (live scan eredménye). */\n readonly groupFiles_$ = signal<PM_GroupFiles_Response | null>(null);\n\n /** Group file lista betöltés folyamatban. */\n readonly groupFilesLoading_$ = signal<boolean>(false);\n\n /** Group file lista betöltési hiba. */\n readonly groupFilesError_$ = signal<unknown | null>(null);\n\n // --- Cross-Instance ---\n\n /** Cross-instance: összes instanc összes projektje. */\n readonly crossInstanceProjects_$ = signal<PM_[]>([]);\n\n /** Cross-instance: betöltés folyamatban. */\n readonly crossInstanceLoading_$ = signal<boolean>(false);\n\n /** Cross-instance: hiba. */\n readonly crossInstanceError_$ = signal<unknown | null>(null);\n\n /** Cross-instance: saját instanc ccapId-ja. */\n readonly currentCcapId_$ = signal<string | null>(null);\n\n /** Cross-instance: klónozás folyamatban. */\n readonly cloneLoading_$ = signal<boolean>(false);\n\n /** Cross-instance: klónozási hiba. */\n readonly cloneError_$ = signal<unknown | null>(null);\n\n private readonly pm_AS: ProjectManagement_ApiService =\n inject(ProjectManagement_ApiService);\n\n /**\n * Projektek listájának betöltése a szerverről.\n */\n async loadProjects(): Promise<void> {\n this.projectsLoading_$.set(true);\n this.projectsError_$.set(null);\n try {\n const result: PM_ListProjects_Response = await this.pm_AS.listProjects();\n this.projects_$.set(result.projects);\n this.projectsLoadedOnce_$.set(true);\n } catch (err: unknown) {\n this.projectsError_$.set(err);\n } finally {\n this.projectsLoading_$.set(false);\n }\n }\n\n /**\n * Egy projekt betöltése ID alapján (aktív projekt).\n */\n async loadProject(projectId: string): Promise<void> {\n this.activeProjectLoading_$.set(true);\n this.activeProjectError_$.set(null);\n try {\n const result: PM_GetProject_Response = await this.pm_AS.getProject(projectId);\n this.activeProject_$.set(result.project);\n this.activeProjectComputedCcapHost_$.set(result.computedCcapRevisionedHost);\n } catch (err: unknown) {\n this.activeProjectError_$.set(err);\n } finally {\n this.activeProjectLoading_$.set(false);\n }\n }\n\n /**\n * Új projekt létrehozása, majd lista frissítése.\n */\n async createProject(payload: PM_Response): Promise<PM_> {\n const result: { project: PM_ } = await this.pm_AS.createProject(payload);\n await this.loadProjects();\n return result.project;\n }\n\n /**\n * Projekt frissítése, majd aktív projekt state frissítése.\n */\n async updateProject(projectId: string, payload: Partial<PM_Response>): Promise<void> {\n const result: PM_GetProject_Response = await this.pm_AS.updateProject(projectId, payload);\n this.activeProject_$.set(result.project);\n this.activeProjectComputedCcapHost_$.set(result.computedCcapRevisionedHost);\n this.projects_$.update(\n (list: PM_[]): PM_[] =>\n list.map(\n (p: PM_): PM_ =>\n p._id === projectId ? result.project : p,\n ),\n );\n }\n\n /**\n * Projekt archiválása, majd lista frissítése.\n */\n async archiveProject(projectId: string): Promise<void> {\n await this.pm_AS.archiveProject(projectId);\n await this.loadProjects();\n if (this.activeProject_$()?._id === projectId) {\n this.activeProject_$.set(null);\n this.activeProjectComputedCcapHost_$.set(false);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Project Groups\n // ---------------------------------------------------------------------------\n\n /** Projekt csoportok betöltése. */\n async loadGroups(): Promise<void> {\n this.groupsLoading_$.set(true);\n this.groupsError_$.set(null);\n try {\n const result: { groups: PM_Group_DataModel[] } = await this.pm_AS.listGroups();\n this.groups_$.set(result.groups);\n } catch (err: unknown) {\n this.groupsError_$.set(err);\n } finally {\n this.groupsLoading_$.set(false);\n }\n }\n\n /** Új csoport létrehozása, majd lista frissítése. */\n async createGroup(payload: { name: string; scanPath: string; description?: string }): Promise<void> {\n await this.pm_AS.createGroup(payload);\n await this.loadGroups();\n }\n\n /** Csoport archiválása, majd lista frissítése. */\n async archiveGroup(groupId: string): Promise<void> {\n await this.pm_AS.archiveGroup(groupId);\n if (this.activeGroup_$()?._id === groupId) {\n this.activeGroup_$.set(null);\n }\n await this.loadGroups();\n }\n\n /** Csoport kiválasztása (szűrőként működik a projekt listán) vagy szűrő törlése. */\n selectGroup(group: PM_Group_DataModel | null): void {\n this.activeGroup_$.set(group);\n }\n\n /** Group extra fájlok betöltése (live scan a szerveren). */\n async loadGroupFiles(groupId: string): Promise<void> {\n this.groupFilesLoading_$.set(true);\n this.groupFilesError_$.set(null);\n try {\n const result: PM_GroupFiles_Response = await this.pm_AS.getGroupFiles(groupId);\n this.groupFiles_$.set(result);\n } catch (err: unknown) {\n this.groupFilesError_$.set(err);\n } finally {\n this.groupFilesLoading_$.set(false);\n }\n }\n\n // ---------------------------------------------------------------------------\n // Cross-Instance\n // ---------------------------------------------------------------------------\n\n /** Összes instanc összes projektjének betöltése. */\n async loadCrossInstanceProjects(): Promise<void> {\n this.crossInstanceLoading_$.set(true);\n this.crossInstanceError_$.set(null);\n try {\n const result: { projects: PM_[]; currentCcapId: string | null } =\n await this.pm_AS.listAllProjectsAcrossInstances();\n this.crossInstanceProjects_$.set(result.projects);\n this.currentCcapId_$.set(result.currentCcapId);\n } catch (err: unknown) {\n this.crossInstanceError_$.set(err);\n } finally {\n this.crossInstanceLoading_$.set(false);\n }\n }\n\n /** Projekt klónozása a saját instancra. */\n async cloneProject(params: {\n sourceProjectId: string;\n targetParentDir: string;\n repoName?: string;\n }): Promise<void> {\n this.cloneLoading_$.set(true);\n this.cloneError_$.set(null);\n try {\n await this.pm_AS.cloneProject({\n sourceProjectId: params.sourceProjectId,\n targetParentDir: params.targetParentDir,\n repoName: params.repoName,\n });\n // Frissítjük a saját projekt listát a klónozott projekt megjelenéséhez.\n await this.loadProjects();\n } catch (err: unknown) {\n this.cloneError_$.set(err);\n } finally {\n this.cloneLoading_$.set(false);\n }\n }\n\n /** Group klónozása a saját instancra. */\n async cloneGroup(params: {\n sourceGroupId: string;\n targetParentDir: string;\n }): Promise<void> {\n this.cloneLoading_$.set(true);\n this.cloneError_$.set(null);\n try {\n await this.pm_AS.cloneGroup({\n sourceGroupId: params.sourceGroupId,\n targetParentDir: params.targetParentDir,\n });\n // Frissítjük mind a projekt, mind a csoport listát.\n await this.loadProjects();\n await this.loadGroups();\n } catch (err: unknown) {\n this.cloneError_$.set(err);\n } finally {\n this.cloneLoading_$.set(false);\n }\n }\n\n /**\n * Workspace scan: projektek felfedezése a megadott útvonal alatt.\n */\n async discoverProjects(scanPath: string): Promise<void> {\n this.discoveryLoading_$.set(true);\n this.discoveryError_$.set(null);\n this.discoveredProjects_$.set([]);\n try {\n const result: { discoveredProjects: PM_DiscoveredProject_Response[] } =\n await this.pm_AS.discoverProjects(scanPath);\n this.discoveredProjects_$.set(result.discoveredProjects);\n } catch (err: unknown) {\n this.discoveryError_$.set(err);\n } finally {\n this.discoveryLoading_$.set(false);\n }\n }\n\n /**\n * Felfedezett projektek batch létrehozása (a wizard által kiválasztott projektek).\n * A létrehozás után újratölti a projekt listát.\n */\n async createDiscoveredProjects(\n projects: PM_DiscoveredProject_Response[],\n ): Promise<void> {\n for (const discovered of projects) {\n const payload: PM_Response = {\n name: discovered.name,\n localPath: discovered.localPath,\n description: discovered.description,\n githubRepoUrl: discovered.githubRepoUrl,\n isActive: true,\n };\n await this.pm_AS.createProject(payload);\n }\n await this.loadProjects();\n }\n\n /**\n * Discovery state törlése (wizard bezárásakor).\n */\n clearDiscovery(): void {\n this.discoveredProjects_$.set([]);\n this.discoveryError_$.set(null);\n this.discoveryLoading_$.set(false);\n }\n\n /**\n * Git állapot gyors frissítése (csak git, nem teljes sync).\n * Frissíti az aktív projektet és a projekt listát.\n */\n async refreshGitStatus(projectId: string): Promise<void> {\n this.gitStatusLoading_$.set(true);\n this.gitStatusError_$.set(null);\n try {\n const result: { project: PM_ } =\n await this.pm_AS.refreshGitStatus(projectId);\n this.activeProject_$.set(result.project);\n try {\n const hostDetail: PM_GetProject_Response = await this.pm_AS.getProject(projectId);\n this.activeProjectComputedCcapHost_$.set(hostDetail.computedCcapRevisionedHost);\n } catch {\n // Host flag változatlan marad, ha a detail GET hibázik.\n }\n // Frissítjük a projekt listában is.\n this.projects_$.update(\n (list: PM_[]): PM_[] =>\n list.map(\n (p: PM_): PM_ =>\n p._id === projectId ? result.project : p,\n ),\n );\n } catch (err: unknown) {\n this.gitStatusError_$.set(err);\n } finally {\n this.gitStatusLoading_$.set(false);\n }\n }\n\n /**\n * Lightweight sync egy projektre. Frissíti az aktív projektet és a projekt listát.\n */\n async syncProject(projectId: string): Promise<void> {\n this.syncLoading_$.set(true);\n this.syncError_$.set(null);\n this.lastSyncResult_$.set(null);\n try {\n const result: { project: PM_; syncResult: PM_SyncResult_Response } =\n await this.pm_AS.syncProject(projectId);\n this.lastSyncResult_$.set(result.syncResult);\n this.activeProject_$.set(result.project);\n try {\n const hostDetail: PM_GetProject_Response = await this.pm_AS.getProject(projectId);\n this.activeProjectComputedCcapHost_$.set(hostDetail.computedCcapRevisionedHost);\n } catch {\n // Host flag változatlan marad, ha a detail GET hibázik.\n }\n // Frissítjük a projekt listában is.\n this.projects_$.update(\n (list: PM_[]): PM_[] =>\n list.map(\n (p: PM_): PM_ =>\n p._id === projectId ? result.project : p,\n ),\n );\n } catch (err: unknown) {\n this.syncError_$.set(err);\n } finally {\n this.syncLoading_$.set(false);\n }\n }\n\n /**\n * Lightweight sync minden aktív projektre. Frissíti a teljes projekt listát.\n */\n async syncAllProjects(): Promise<void> {\n this.syncLoading_$.set(true);\n this.syncError_$.set(null);\n try {\n await this.pm_AS.syncAllProjects();\n await this.loadProjects();\n } catch (err: unknown) {\n this.syncError_$.set(err);\n } finally {\n this.syncLoading_$.set(false);\n }\n }\n\n /**\n * Minden kontroll fájl betöltése az aktív projekthez.\n */\n async loadAllFileContents(projectId: string): Promise<void> {\n this.fileContentLoading_$.set(true);\n this.fileContentError_$.set(null);\n try {\n const result: { files: PM_AllFileContents_Response } =\n await this.pm_AS.getAllFileContents(projectId);\n this.fileContents_$.set(result.files);\n } catch (err: unknown) {\n this.fileContentError_$.set(err);\n } finally {\n this.fileContentLoading_$.set(false);\n }\n }\n\n /**\n * TEST-ERROR-REPORTS.json ürítése a szerveren, majd file sync újratöltés.\n */\n async clearTestErrorReportsAndRefresh(projectId: string): Promise<void> {\n this.testErrorReportsClearing_$.set(true);\n try {\n await this.pm_AS.clearTestErrorReports(projectId);\n await this.loadAllFileContents(projectId);\n } finally {\n this.testErrorReportsClearing_$.set(false);\n }\n }\n\n /**\n * BUGS.md path feloldás (jelöltek, ambiguitás) — UI választáshoz.\n */\n async getBugsPathResolve(projectId: string): Promise<PM_BugsPathResolution_Response> {\n return this.pm_AS.getBugsPathResolve(projectId);\n }\n\n /**\n * Központi error tábla → BUGS.md append; siker után fájl tartalom frissítése.\n */\n async appendBugsFromErrorsAndRefreshFiles(\n projectId: string,\n body?: PM_AppendBugsFromErrors_Request,\n ): Promise<PM_AppendBugsFromErrors_Response> {\n const result: PM_AppendBugsFromErrors_Response =\n await this.pm_AS.appendBugsFromErrors(projectId, body);\n await this.loadAllFileContents(projectId);\n return result;\n }\n\n /**\n * Egy központi error → BUGS.md; utána fájl tartalom frissítése.\n */\n async appendSingleBugFromErrorAndRefreshFiles(\n projectId: string,\n ccapErrorId: string,\n body?: PM_AppendBugsFromErrors_Request,\n ): Promise<PM_AppendSingleBugFromError_Response> {\n const result: PM_AppendSingleBugFromError_Response =\n await this.pm_AS.appendSingleBugFromError(projectId, ccapErrorId, body);\n await this.loadAllFileContents(projectId);\n return result;\n }\n\n /**\n * Kézi bug: BUGS.md + user request; utána kontroll fájlok és user request lista frissítése.\n */\n async createManualBugAndRefresh(\n projectId: string,\n body: PM_ManualBugCreate_Request,\n ): Promise<PM_ManualBugCreate_Response> {\n const result: PM_ManualBugCreate_Response =\n await this.pm_AS.createManualBug(projectId, body);\n await this.loadAllFileContents(projectId);\n await this.loadUserRequests(projectId);\n return result;\n }\n\n /**\n * User request-ek betöltése az aktív projekthez.\n */\n async loadUserRequests(projectId: string): Promise<void> {\n this.userRequestsLoading_$.set(true);\n this.userRequestsError_$.set(null);\n try {\n const result: { userRequests: PM_UserRequest[] } =\n await this.pm_AS.listUserRequests(projectId);\n this.userRequests_$.set(result.userRequests);\n } catch (err: unknown) {\n this.userRequestsError_$.set(err);\n } finally {\n this.userRequestsLoading_$.set(false);\n }\n }\n\n /**\n * Új user request létrehozása, majd lista frissítése.\n */\n async createUserRequest(\n projectId: string,\n payload: PM_CreateUserRequestHttpBody_Request,\n ): Promise<void> {\n await this.pm_AS.createUserRequest(projectId, payload);\n await this.loadUserRequests(projectId);\n }\n\n /**\n * User request frissítése, majd lista frissítése.\n */\n async updateUserRequest(\n projectId: string,\n requestId: string,\n payload: Partial<PM_UserRequest_Response>,\n ): Promise<void> {\n const result: { userRequest: PM_UserRequest } =\n await this.pm_AS.updateUserRequest(projectId, requestId, payload);\n this.userRequests_$.update(\n (list: PM_UserRequest[]): PM_UserRequest[] =>\n list.map(\n (r: PM_UserRequest): PM_UserRequest =>\n r._id === requestId ? result.userRequest : r,\n ),\n );\n }\n\n /**\n * USER-INPUT wizard: LLM suggest (egyetlen hívás).\n */\n async suggestUserInputFormat(\n projectId: string,\n body: PM_UserInputSuggestFormat_Request,\n ): Promise<PM_UserInputSuggestFormat_Response> {\n this.userInputWizardSuggestLoading_$.set(true);\n this.userInputWizardSuggestError_$.set(null);\n this.userInputWizardLastLlmSystemPrompt_$.set(null);\n this.userInputWizardLastLlmUserMessage_$.set(null);\n try {\n const result: PM_UserInputSuggestFormat_Response =\n await this.pm_AS.suggestUserInputFormat(projectId, body);\n this.userInputWizardLastLlmSystemPrompt_$.set(result.llmSystemPrompt ?? null);\n this.userInputWizardLastLlmUserMessage_$.set(result.llmUserMessage ?? null);\n return result;\n } catch (err: unknown) {\n this.userInputWizardSuggestError_$.set(err);\n throw err;\n } finally {\n this.userInputWizardSuggestLoading_$.set(false);\n }\n }\n\n /**\n * Kontroll entry mutáció után teljes file sync újratöltés.\n * Ha `priorRawFingerprintSha256` hiányzik, a DS számolja LF-normalizált prior blokk SHA-256-ját.\n */\n async mutateControlFileEntryAndRefresh(\n projectId: string,\n fileType: PM_ControlFileType_Type,\n body: Omit<PM_ControlEntryMutation_Request, 'priorRawFingerprintSha256'> & {\n priorRawFingerprintSha256?: string;\n },\n ): Promise<PM_ControlEntryMutation_Response> {\n const trimmedFp: string | undefined = body.priorRawFingerprintSha256?.trim();\n const priorFingerprint: string =\n trimmedFp != null && trimmedFp.length > 0\n ? trimmedFp\n : await PM_Sha256Fingerprint_Util.sha256HexOfNormalized(body.priorRawBlock);\n const fullBody: PM_ControlEntryMutation_Request = {\n mode: body.mode,\n priorRawBlock: body.priorRawBlock,\n priorRawFingerprintSha256: priorFingerprint,\n newRawBlock: body.newRawBlock,\n bugsFileAbsolutePath: body.bugsFileAbsolutePath,\n };\n const result: PM_ControlEntryMutation_Response =\n await this.pm_AS.mutateControlFileEntry(projectId, fileType, fullBody);\n await this.loadAllFileContents(projectId);\n return result;\n }\n\n /**\n * USER-INPUT wizard: USER-INPUT.md + DB véglegesítés, majd lista és fájl frissítés.\n */\n async finalizeUserInputWizard(\n projectId: string,\n body: PM_UserInputFinalize_Request,\n ): Promise<PM_UserInputFinalize_Response> {\n this.userInputWizardFinalizeLoading_$.set(true);\n this.userInputWizardFinalizeError_$.set(null);\n try {\n const result: PM_UserInputFinalize_Response =\n await this.pm_AS.finalizeUserInput(projectId, body);\n await this.loadUserRequests(projectId);\n await this.loadAllFileContents(projectId);\n return result;\n } catch (err: unknown) {\n this.userInputWizardFinalizeError_$.set(err);\n throw err;\n } finally {\n this.userInputWizardFinalizeLoading_$.set(false);\n }\n }\n\n // ─── Reviews ───────────────────────────────────────────────────────────────\n\n /**\n * Developer review metaadatok betöltése.\n */\n async loadReviewsMeta(projectId: string): Promise<void> {\n this.reviewsMetaLoading_$.set(true);\n this.reviewsMetaError_$.set(null);\n try {\n const result: { reviewsMeta: DT_DeveloperReviewMeta_Response[] } =\n await this.pm_AS.getReviewsMeta(projectId);\n this.reviewsMeta_$.set(result.reviewsMeta);\n } catch (err: unknown) {\n this.reviewsMetaError_$.set(err);\n } finally {\n this.reviewsMetaLoading_$.set(false);\n }\n }\n\n /**\n * Developer review-ok futtatása a projekt localPath-ján.\n */\n async runProjectReviews(projectId: string, reviewIds?: string[]): Promise<void> {\n this.reviewsRunning_$.set(true);\n this.reviewsRunError_$.set(null);\n this.reviewResult_$.set(null);\n try {\n const result: { reviewResult: DT_DeveloperRun_Response } =\n await this.pm_AS.runProjectReviews(projectId, reviewIds);\n this.reviewResult_$.set(result.reviewResult);\n } catch (err: unknown) {\n this.reviewsRunError_$.set(err);\n } finally {\n this.reviewsRunning_$.set(false);\n }\n }\n\n // ─── Agent Reports (REQ-PM-AGT-001 Slice 4) ────────────────────────\n\n /**\n * Agent riportok listájának betöltése a projekthez.\n * A szerver descending dátum-rendben adja vissza a fájlokat; itt csak továbbítjuk.\n */\n async loadAgentReports(projectId: string): Promise<void> {\n this.agentReportsLoading_$.set(true);\n this.agentReportsError_$.set(null);\n try {\n const result = await this.pm_AS.listAgentReports(projectId);\n this.agentReports_$.set(result.reports);\n } catch (err: unknown) {\n this.agentReportsError_$.set(err);\n } finally {\n this.agentReportsLoading_$.set(false);\n }\n }\n\n /**\n * Egy riport teljes tartalmának betöltése relPath alapján (path-traversal védelem\n * szerver-oldalon). Sikertelenség esetén `activeAgentReport_$` kiürül, hiba a\n * `activeAgentReportError_$`-re kerül.\n */\n async loadAgentReport(projectId: string, relPath: string): Promise<void> {\n this.activeAgentReportLoading_$.set(true);\n this.activeAgentReportError_$.set(null);\n try {\n const result = await this.pm_AS.getAgentReportContent(projectId, relPath);\n this.activeAgentReport_$.set(result);\n } catch (err: unknown) {\n this.activeAgentReport_$.set(null);\n this.activeAgentReportError_$.set(err);\n } finally {\n this.activeAgentReportLoading_$.set(false);\n }\n }\n\n /** Aktív riport kiürítése (vissza-gomb a detailből). */\n clearActiveAgentReport(): void {\n this.activeAgentReport_$.set(null);\n this.activeAgentReportError_$.set(null);\n }\n}\n", "import { Component, computed, inject, input } from '@angular/core';\n\nimport { PM_ } from '../../../../_models/server-index';\nimport { ProjectManagement_DataService } from '../../../project-management/_services/data-services/project-management.data-service';\n\n/**\n * Projekt-név badge: ha a megadott workspace path alapján van találat\n * a betöltött projekt listában (`PM_.localPath`), akkor egy kis pilulát\n * rajzol a projekt nevével. Match nélkül a host elem `display: none`,\n * így a parent flex konténerben `gap` extra rés sem keletkezik.\n *\n * Path matching: normalizált — lowercase (Windows case-insensitivity),\n * backslash → slash egységesítés, trailing slash eltávolítása.\n *\n * Projekt lista lazy-load: első badge példány triggereli a `loadProjects()`-et,\n * ha a service-en még nem futott le sikeresen és nincs folyamatban / hiba.\n */\n@Component({\n selector: 'app-s-project-badge',\n standalone: true,\n templateUrl: './s-project-badge.component.html',\n host: {\n 'class': 'ml-auto',\n '[style.display]': 'projectName_$() ? \"inline-flex\" : \"none\"',\n },\n})\n/** S_ProjectBadge_Component class. */\nexport class S_ProjectBadge_Component {\n\n /** Session workspace path — ez alapján keressük a projektet. */\n readonly workspacePath = input<string | undefined>(undefined);\n\n private readonly pm_DS: ProjectManagement_DataService =\n inject(ProjectManagement_DataService);\n\n /** A workspace path-hez illeszkedő projekt neve — vagy null, ha nincs match. */\n readonly projectName_$ = computed((): string | null => {\n const wp: string | undefined = this.workspacePath();\n if (!wp) {\n return null;\n }\n const normWp: string = S_ProjectBadge_Component.normalizePath(wp);\n if (!normWp) {\n return null;\n }\n const list: PM_[] = this.pm_DS.projects_$();\n const match: PM_ | undefined = list.find(\n (p: PM_): boolean =>\n !!p.localPath &&\n S_ProjectBadge_Component.normalizePath(p.localPath) === normWp,\n );\n return match?.name ?? null;\n });\n\n constructor() {\n // Lazy-load: első felbukkanáskor indítjuk a projekt listát — csak akkor,\n // ha még sosem töltődött be sikeresen, nincs éppen folyamatban,\n // és az előző próbálkozás nem ért hibába (különben minden új badge példány\n // újraindítana egy olyan request-et ami úgyis hibázni fog).\n if (\n !this.pm_DS.projectsLoadedOnce_$() &&\n !this.pm_DS.projectsLoading_$() &&\n !this.pm_DS.projectsError_$()\n ) {\n void this.pm_DS.loadProjects();\n }\n }\n\n /**\n * Path normalizáció: trim, lowercase (Windows case-insensitivity),\n * backslash → slash, trailing slash eltávolítása.\n */\n private static normalizePath(path: string): string {\n let normalized: string = path.trim().toLowerCase().replace(/\\\\/g, '/');\n while (normalized.endsWith('/') && normalized.length > 1) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n }\n}\n", "@if (projectName_$(); as name) {\n <span\n class=\"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]\"\n [title]=\"name\">\n {{ name }}\n </span>\n}\n", "import { Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\nimport { S_AbsoluteTime_Pipe } from '../../../_pipes/s-absolute-time.pipe';\nimport { S_TimeAgo_Pipe } from '../../../_pipes/s-time-ago.pipe';\nimport { S_ProjectBadge_Component } from '../../s-project-badge/s-project-badge.component';\nimport { S_SessionListRowView_Interface } from '../../../_models/interfaces/s-session-list-row-view.interface';\n\n/**\n * Shared external session lista sor komponens.\n * Egységes megjelenítés CC, OC, CA session listákhoz:\n * státusz dot (spinning ha futó), label, timestamp, projekt badge, archived badge.\n *\n * A context menu és a műveletek a parent dashboard-ban maradnak — ez a komponens\n * csak a `contextMenu` output-on keresztül jelzi a jobb klikk eseményt.\n */\n@Component({\n selector: 'app-s-session-list-row',\n standalone: true,\n imports: [NgClass, S_AbsoluteTime_Pipe, S_TimeAgo_Pipe, S_ProjectBadge_Component],\n templateUrl: './s-session-list-row.component.html',\n host: { class: 'block' },\n})\n/** S_SessionListRow_Component class. */\nexport class S_SessionListRow_Component {\n\n /** Normalizált session view adat. */\n readonly view: InputSignal<S_SessionListRowView_Interface> =\n input.required<S_SessionListRowView_Interface>();\n\n /** Kijelölt (aktív) sor. */\n readonly isActive: InputSignal<boolean> = input<boolean>(false);\n\n /** Workspace path sor megjelenítése (OC, CA használja). */\n readonly showWorkspacePath: InputSignal<boolean> = input<boolean>(false);\n\n /** Prompt count megjelenítése (OC, CA használja). */\n readonly showPromptCount: InputSignal<boolean> = input<boolean>(false);\n\n /** Session kiválasztás (kattintás). */\n readonly selected: OutputEmitterRef<string> = output<string>();\n\n /** Jobb klikk context menu — pozíció + session id átadása a parent-nek. */\n readonly contextMenu: OutputEmitterRef<{ event: MouseEvent; id: string }> =\n output<{ event: MouseEvent; id: string }>();\n\n /**\n * REQ-SCH-IND-CLICK-001 (cycle 201): a schedule-indicator badge kattintásakor\n * jelez a parent-nek (sessionId) — a parent dashboard nyitja meg a popup-ot.\n * Csak akkor emittál, ha a `view().hasSchedule` true (a badge látható).\n */\n readonly scheduleIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /**\n * REQ-SES-CRD-IND-001 Slice 3 (cycle 202): a coordinator-indicator badge\n * kattintásakor jelez a parent-nek (sessionId) — a parent dashboard nyitja meg a popup-ot.\n * Csak akkor emittál, ha a `view().hasCoordinator` true (a badge látható).\n */\n readonly coordinatorIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /** Kattintás kezelése — session kiválasztás. */\n handleSelect(): void {\n this.selected.emit(this.view().id);\n }\n\n /** Jobb klikk kezelése — context menu jelzés a parent-nek. */\n handleContextMenu(event: MouseEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.contextMenu.emit({ event: event, id: this.view().id });\n }\n\n /**\n * Schedule-indicator kattintás — propagáció megállítása (ne válassza ki a sort),\n * majd sessionId emit a parent-nek.\n */\n handleScheduleIndicatorClick(event: MouseEvent): void {\n event.stopPropagation();\n this.scheduleIndicatorClicked.emit(this.view().id);\n }\n\n /**\n * Coordinator-indicator kattintás — propagáció megállítása + sessionId emit\n * (REQ-SES-CRD-IND-001 Slice 3).\n */\n handleCoordinatorIndicatorClick(event: MouseEvent): void {\n event.stopPropagation();\n this.coordinatorIndicatorClicked.emit(this.view().id);\n }\n}\n", "<div\n class=\"px-2 py-1.5 border-b cursor-pointer transition-colors\"\n [class]=\"isActive()\n ? 'border-l-2 border-l-ccapAccent border-b-neutral-700/30 bg-neutral-800/80'\n : 'border-l-2 border-l-transparent border-b-neutral-700/30 hover:bg-neutral-800/60'\"\n [class.opacity-50]=\"view().isArchived\"\n (click)=\"handleSelect()\"\n (contextmenu)=\"handleContextMenu($event)\">\n\n <!-- Fő sor: status dot, label, timestamp, projekt badge, archived -->\n <div class=\"flex items-center gap-1.5\">\n <!-- Státusz dot + spinning indikátor -->\n <span class=\"relative w-3.5 h-3.5 shrink-0 flex items-center justify-center\" [title]=\"view().status\">\n <span class=\"w-1.5 h-1.5 rounded-full\" [ngClass]=\"view().statusColorClass\"></span>\n @if (view().isRunning) {\n <span class=\"absolute inset-0 rounded-full border border-transparent border-t-yellow-400 animate-spin\"></span>\n }\n </span>\n\n <!-- Label -->\n <span class=\"text-xs text-neutral-200 font-medium truncate shrink-1 min-w-0\">\n {{ view().label }}\n </span>\n\n <!-- Last activity — REQ-SES-EVT-TS-002 cycle 473: text-neutral-400 + [title] absolute time. -->\n <span class=\"text-[10px] text-neutral-400 shrink-0\"\n [title]=\"(view().lastActivityAt ?? '') | sAbsoluteTime\">\n {{ view().lastActivityAt ? (view().lastActivityAt | sTimeAgo) : '—' }}\n </span>\n\n <!-- Projekt badge -->\n @if (view().workspacePath) {\n <app-s-project-badge [workspacePath]=\"view().workspacePath!\" />\n }\n\n <!-- Archived badge -->\n @if (view().isArchived) {\n <span class=\"text-[8px] px-0.5 rounded bg-amber-500/15 text-amber-500 shrink-0\">\n archived\n </span>\n }\n\n <!-- Schedule-indicator: REQ-SES-SCH-IND-001 (cycle 176-178) — calendar ikon, ha a session-höz aktív schedule.\n REQ-SCH-IND-CLICK-001 (cycle 201): kattintható → popup a job + execution infókkal a parent dashboardon.\n A button stopPropagation-t végez, így a sor select handler-e nem fut le.\n BUG-UI-SES-LIST-SCHED-ICON-LAYOUT-001 (cycle 900): `ml-auto` ha NINCS project-badge — különben\n az ikon rácsúszik a session-name-re, mert a project-badge `ml-auto`-ja adta eddig a space-between-et. -->\n @if (view().hasSchedule) {\n <button type=\"button\"\n class=\"shrink-0 text-neonCyan/80 hover:text-neonCyan focus:outline-none focus:ring-1 focus:ring-neonCyan/60 rounded p-0.5\"\n [class.ml-auto]=\"!view().workspacePath\"\n title=\"Ehhez a session-höz tartozik schedule — kattints a részletekért\"\n aria-label=\"Schedule attached — open popup\"\n (click)=\"handleScheduleIndicatorClick($event)\">\n <svg class=\"w-3 h-3\" 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=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n </button>\n }\n\n <!-- Coordinator-indicator: REQ-SES-CRD-IND-001 (cycle 190) — compass ikon neonAmber.\n REQ-SES-CRD-IND-001 Slice 3 (cycle 202): kattintható → popup koordinátor infókkal.\n BUG-UI-SES-LIST-SCHED-ICON-LAYOUT-001 (cycle 900): `ml-auto` ha NINCS project-badge ÉS NINCS\n schedule-indicator előtte (akkor ő az első indikátor a name után). -->\n @if (view().hasCoordinator) {\n <button type=\"button\"\n class=\"shrink-0 text-neonAmber/80 hover:text-neonAmber focus:outline-none focus:ring-1 focus:ring-neonAmber/60 rounded p-0.5\"\n [class.ml-auto]=\"!view().workspacePath && !view().hasSchedule\"\n title=\"Ehhez a session-höz tartozik koordinátor — kattints a részletekért\"\n aria-label=\"Coordinator attached — open popup\"\n (click)=\"handleCoordinatorIndicatorClick($event)\">\n <svg class=\"w-3 h-3\" 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 </div>\n\n <!-- Workspace path sor (opcionális) -->\n @if (showWorkspacePath() && view().workspacePath) {\n <div class=\"text-[10px] text-neutral-500 truncate mt-0.5 ml-5\">\n {{ view().workspacePath }}\n </div>\n }\n\n <!-- Prompt count + stats sor (opcionális) -->\n @if (showPromptCount() && view().promptCount) {\n <div class=\"flex items-center gap-2 mt-0.5 ml-5\">\n <span class=\"text-[10px] text-neutral-600\">\n {{ view().promptCount }} prompts\n </span>\n </div>\n }\n</div>\n", "import {\n Component,\n computed,\n input,\n InputSignal,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { CCAP_TextSearch_Util } from '../../../../../_collections/utils/ccap-text-search.util';\nimport { S_SessionListRowView_Interface }\n from '../../../_models/interfaces/s-session-list-row-view.interface';\nimport { S_SessionListRow_Component } from '../s-session-list-row/s-session-list-row.component';\n\n/**\n * REQ-UI-SSEL-001 Slice 1 — megosztott session-picker wrapper.\n *\n * Egyetlen SSOT komponens session-lista renderelésre: beépített accent-insensitive\n * keresővel (`CCAP_TextSearch_Util`), `S_SessionListRow_Component`-tel sor-render-re,\n * és event-alapú kiválasztás / context-menu handover a parent-nek.\n *\n * **Session-kind** input (`ccap` / `cc` / `ca` / `oc`) informatív — nem változtat a\n * render logikán, de a parent dashboardok és a Quick Input send-dropdown ugyanazt a\n * wrapper-t tudják használni, típus-szerinti külön dashboard-logika nélkül.\n *\n * **Scope**: ez a Slice csak a SKELETON-t adja — a kiegészítő szűrők (status filter,\n * project filter, archive toggle) a következő slice-okban kerülnek be flag-alapon.\n * Lásd: `__documentations/plans/2026-04-24/2026-04-24-req-ui-ssel-001-session-select-unification.plan.md`.\n */\n@Component({\n selector: 'app-s-session-select',\n standalone: true,\n imports: [CommonModule, FormsModule, S_SessionListRow_Component],\n templateUrl: './s-session-select.component.html',\n host: { class: 'block' },\n})\n/** S_SessionSelect_Component class. */\nexport class S_SessionSelect_Component {\n\n /** Session típus — parent-beli data source jelölés. Jelenleg render-logikát nem vezérel. */\n readonly kind: InputSignal<'ccap' | 'cc' | 'ca' | 'oc'> =\n input.required<'ccap' | 'cc' | 'ca' | 'oc'>();\n\n /** Megjelenítendő sorok (normalizált `S_SessionListRowView_Interface` alakban). */\n readonly rows: InputSignal<S_SessionListRowView_Interface[]> =\n input<S_SessionListRowView_Interface[]>([]);\n\n /** Aktívan kiválasztott session azonosítója (highlight-hoz). */\n readonly activeId: InputSignal<string> = input<string>('');\n\n /** Workspace path megjelenítése a soron (OC / CA használja). */\n readonly showWorkspacePath: InputSignal<boolean> = input<boolean>(false);\n\n /** Prompt count megjelenítése a soron (OC / CA használja). */\n readonly showPromptCount: InputSignal<boolean> = input<boolean>(false);\n\n /** Search input placeholder. */\n readonly searchPlaceholder: InputSignal<string> = input<string>('Keresés...');\n\n /**\n * Ha `true`: nincs belső keresősáv és a `filteredRows_$` a nyers `rows()`-t adja vissza —\n * a parent maga szűr (pl. ses-list, ami a name + goal + intent mezőkön keres, nem csak label-en).\n */\n readonly hideSearch: InputSignal<boolean> = input<boolean>(false);\n\n /** Session kiválasztás event (kattintás). */\n readonly selected: OutputEmitterRef<string> = output<string>();\n\n /** Jobb klikk context menu event — pozíció + session id. */\n readonly contextMenu: OutputEmitterRef<{ event: MouseEvent; id: string }> =\n output<{ event: MouseEvent; id: string }>();\n\n /** REQ-SCH-IND-CLICK-001 (cycle 201): schedule-indicator kattintás proxy a row-tól a parent-ig. */\n readonly scheduleIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /** REQ-SES-CRD-IND-001 Slice 3 (cycle 202): coordinator-indicator kattintás proxy. */\n readonly coordinatorIndicatorClicked: OutputEmitterRef<string> = output<string>();\n\n /** Search query — accent-insensitive szűrés label-re. */\n readonly searchQuery_$: WritableSignal<string> = signal<string>('');\n\n /**\n * Szűrt sorok — accent/case-insensitive match a session label-re.\n * Üres query → minden sort átenged. `hideSearch=true` esetén nincs belső szűrés\n * (a parent maga szűri a listát, a wrapper csak renderelő).\n */\n readonly filteredRows_$: Signal<S_SessionListRowView_Interface[]> = computed(\n (): S_SessionListRowView_Interface[] => {\n const allRows: S_SessionListRowView_Interface[] = this.rows();\n if (this.hideSearch()) {\n return allRows;\n }\n const query: string = this.searchQuery_$();\n if (query.trim().length === 0) {\n return allRows;\n }\n return allRows.filter(\n (row: S_SessionListRowView_Interface): boolean =>\n CCAP_TextSearch_Util.includesText(row.label, query),\n );\n },\n );\n\n /** Select event továbbítása a parent-nek. */\n handleRowSelect(id: string): void {\n this.selected.emit(id);\n }\n\n /** Context-menu event továbbítása. */\n handleRowContextMenu(payload: { event: MouseEvent; id: string }): void {\n this.contextMenu.emit(payload);\n }\n\n /** Schedule-indicator click event továbbítása. */\n handleRowScheduleIndicatorClick(sessionId: string): void {\n this.scheduleIndicatorClicked.emit(sessionId);\n }\n\n /** Coordinator-indicator click event továbbítása (REQ-SES-CRD-IND-001 Slice 3). */\n handleRowCoordinatorIndicatorClick(sessionId: string): void {\n this.coordinatorIndicatorClicked.emit(sessionId);\n }\n}\n", "<!-- REQ-UI-SSEL-001 Slice 1: shared session picker — search bar + row list -->\n<div class=\"flex flex-col gap-2\">\n\n <!-- Search bar (csak ha `hideSearch` nem aktív — parent-driven szűrésnél a parent\n maga tart keresőmezőt, a wrapper csak renderelő). -->\n @if (!hideSearch()) {\n <div class=\"px-2 pt-2\">\n <input\n type=\"text\"\n class=\"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\"\n [placeholder]=\"searchPlaceholder()\"\n [ngModel]=\"searchQuery_$()\"\n (ngModelChange)=\"searchQuery_$.set($event)\"\n data-testid=\"s-session-select-search\" />\n </div>\n }\n\n <!-- Row list -->\n <div class=\"flex flex-col gap-1 px-2 pb-2\">\n @for (row of filteredRows_$(); track row.id) {\n <app-s-session-list-row\n [view]=\"row\"\n [isActive]=\"row.id === activeId()\"\n [showWorkspacePath]=\"showWorkspacePath()\"\n [showPromptCount]=\"showPromptCount()\"\n (selected)=\"handleRowSelect($event)\"\n (contextMenu)=\"handleRowContextMenu($event)\"\n (scheduleIndicatorClicked)=\"handleRowScheduleIndicatorClick($event)\"\n (coordinatorIndicatorClicked)=\"handleRowCoordinatorIndicatorClick($event)\" />\n }\n\n @if (filteredRows_$().length === 0) {\n <span class=\"text-[11px] text-neutral-500 italic px-1 py-2\">\n @if (searchQuery_$().trim().length > 0) {\n Nincs találat.\n } @else {\n Üres lista.\n }\n </span>\n }\n </div>\n\n</div>\n"],
5
+ "mappings": "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",
6
+ "names": ["PM_Sha256Fingerprint_Util", "normalizeNewlines", "text", "replace", "sha256HexOfNormalized", "__async", "normalized", "data", "TextEncoder", "encode", "digest", "crypto", "subtle", "bytes", "Uint8Array", "hex", "i", "length", "toString", "padStart", "ProjectManagement_DataService", "projects_$", "signal", "projectsLoading_$", "projectsError_$", "projectsLoadedOnce_$", "activeProject_$", "activeProjectComputedCcapHost_$", "activeProjectLoading_$", "activeProjectError_$", "userRequests_$", "userRequestsLoading_$", "userRequestsError_$", "discoveredProjects_$", "discoveryLoading_$", "discoveryError_$", "gitStatusLoading_$", "gitStatusError_$", "syncLoading_$", "syncError_$", "lastSyncResult_$", "fileContents_$", "fileContentLoading_$", "fileContentError_$", "testErrorReportsClearing_$", "agentReports_$", "agentReportsLoading_$", "agentReportsError_$", "activeAgentReport_$", "activeAgentReportLoading_$", "activeAgentReportError_$", "reviewsMeta_$", "reviewsMetaLoading_$", "reviewsMetaError_$", "reviewResult_$", "reviewsRunning_$", "reviewsRunError_$", "userInputWizardSuggestLoading_$", "userInputWizardSuggestError_$", "userInputWizardFinalizeLoading_$", "userInputWizardFinalizeError_$", "userInputWizardLastLlmSystemPrompt_$", "userInputWizardLastLlmUserMessage_$", "groups_$", "groupsLoading_$", "groupsError_$", "activeGroup_$", "groupFiles_$", "groupFilesLoading_$", "groupFilesError_$", "crossInstanceProjects_$", "crossInstanceLoading_$", "crossInstanceError_$", "currentCcapId_$", "cloneLoading_$", "cloneError_$", "pm_AS", "inject", "ProjectManagement_ApiService", "loadProjects", "__async", "set", "result", "listProjects", "projects", "err", "loadProject", "projectId", "getProject", "project", "computedCcapRevisionedHost", "createProject", "payload", "updateProject", "update", "list", "map", "p", "_id", "archiveProject", "loadGroups", "listGroups", "groups", "createGroup", "archiveGroup", "groupId", "selectGroup", "group", "loadGroupFiles", "getGroupFiles", "loadCrossInstanceProjects", "listAllProjectsAcrossInstances", "currentCcapId", "cloneProject", "params", "sourceProjectId", "targetParentDir", "repoName", "cloneGroup", "sourceGroupId", "discoverProjects", "scanPath", "discoveredProjects", "createDiscoveredProjects", "discovered", "name", "localPath", "description", "githubRepoUrl", "isActive", "clearDiscovery", "refreshGitStatus", "hostDetail", "syncProject", "syncResult", "syncAllProjects", "loadAllFileContents", "getAllFileContents", "files", "clearTestErrorReportsAndRefresh", "clearTestErrorReports", "getBugsPathResolve", "appendBugsFromErrorsAndRefreshFiles", "body", "appendBugsFromErrors", "appendSingleBugFromErrorAndRefreshFiles", "ccapErrorId", "appendSingleBugFromError", "createManualBugAndRefresh", "createManualBug", "loadUserRequests", "listUserRequests", "userRequests", "createUserRequest", "updateUserRequest", "requestId", "r", "userRequest", "suggestUserInputFormat", "llmSystemPrompt", "llmUserMessage", "mutateControlFileEntryAndRefresh", "fileType", "trimmedFp", "priorRawFingerprintSha256", "trim", "priorFingerprint", "length", "PM_Sha256Fingerprint_Util", "sha256HexOfNormalized", "priorRawBlock", "fullBody", "mode", "newRawBlock", "bugsFileAbsolutePath", "mutateControlFileEntry", "finalizeUserInputWizard", "finalizeUserInput", "loadReviewsMeta", "getReviewsMeta", "reviewsMeta", "runProjectReviews", "reviewIds", "reviewResult", "loadAgentReports", "listAgentReports", "reports", "loadAgentReport", "relPath", "getAgentReportContent", "clearActiveAgentReport", "factory", "\u0275fac", "providedIn", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275property", "name_r1", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "S_ProjectBadge_Component", "workspacePath", "input", "undefined", "pm_DS", "inject", "ProjectManagement_DataService", "projectName_$", "computed", "wp", "normWp", "normalizePath", "projects_$", "find", "p", "localPath", "name", "constructor", "projectsLoadedOnce_$", "projectsLoading_$", "projectsError_$", "loadProjects", "path", "normalized", "trim", "toLowerCase", "replace", "endsWith", "length", "slice", "selectors", "hostAttrs", "hostVars", "hostBindings", "rf", "ctx", "\u0275\u0275styleProp", "\u0275\u0275template", "S_ProjectBadge_Component_Conditional_0_Template", "\u0275\u0275conditional", "tmp_0_0", "\u0275\u0275element", "\u0275\u0275property", "ctx_r0", "view", "workspacePath", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r2", "\u0275\u0275nextContext", "\u0275\u0275resetView", "handleScheduleIndicatorClick", "\u0275\u0275classProp", "_r3", "handleCoordinatorIndicatorClick", "hasSchedule", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "promptCount", "S_SessionListRow_Component", "input", "required", "isActive", "showWorkspacePath", "showPromptCount", "selected", "output", "contextMenu", "scheduleIndicatorClicked", "coordinatorIndicatorClicked", "handleSelect", "emit", "id", "handleContextMenu", "event", "preventDefault", "stopPropagation", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275template", "S_SessionListRow_Component_Conditional_4_Template", "S_SessionListRow_Component_Conditional_11_Template", "S_SessionListRow_Component_Conditional_12_Template", "S_SessionListRow_Component_Conditional_13_Template", "S_SessionListRow_Component_Conditional_14_Template", "S_SessionListRow_Component_Conditional_15_Template", "S_SessionListRow_Component_Conditional_16_Template", "\u0275\u0275classMap", "isArchived", "status", "statusColorClass", "\u0275\u0275conditional", "isRunning", "label", "\u0275\u0275pipeBind1", "tmp_6_0", "lastActivityAt", "undefined", "hasCoordinator", "NgClass", "S_AbsoluteTime_Pipe", "S_TimeAgo_Pipe", "S_ProjectBadge_Component", "encapsulation", "\u0275\u0275elementStart", "\u0275\u0275listener", "$event", "\u0275\u0275restoreView", "_r1", "ctx_r1", "\u0275\u0275nextContext", "\u0275\u0275resetView", "searchQuery_$", "set", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275property", "searchPlaceholder", "_r3", "handleRowSelect", "handleRowContextMenu", "handleRowScheduleIndicatorClick", "handleRowCoordinatorIndicatorClick", "row_r4", "id", "activeId", "showWorkspacePath", "showPromptCount", "\u0275\u0275text", "\u0275\u0275template", "S_SessionSelect_Component_Conditional_5_Conditional_1_Template", "S_SessionSelect_Component_Conditional_5_Conditional_2_Template", "\u0275\u0275conditional", "trim", "length", "S_SessionSelect_Component", "kind", "input", "required", "rows", "hideSearch", "selected", "output", "contextMenu", "scheduleIndicatorClicked", "coordinatorIndicatorClicked", "signal", "filteredRows_$", "computed", "allRows", "query", "filter", "row", "CCAP_TextSearch_Util", "includesText", "label", "emit", "payload", "sessionId", "selectors", "hostAttrs", "inputs", "outputs", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "ctx", "S_SessionSelect_Component_Conditional_1_Template", "\u0275\u0275repeaterCreate", "S_SessionSelect_Component_For_4_Template", "_forTrack0", "S_SessionSelect_Component_Conditional_5_Template", "\u0275\u0275repeater", "CommonModule", "FormsModule", "DefaultValueAccessor", "NgControlStatus", "NgModel", "S_SessionListRow_Component", "encapsulation"]
7
7
  }
@@ -1,3 +1,3 @@
1
- import{a as R,b as O}from"./chunk-ZHSPATAR.js";import{a as q}from"./chunk-UDN3ODZX.js";import{a as g}from"./chunk-UFBTR2BG.js";import{a as U}from"./chunk-U4ONAI5W.js";import{e as P}from"./chunk-HAB4OFER.js";import{h as y,j as L}from"./chunk-Q55FNLZU.js";import{p as D}from"./chunk-SLJL7HAM.js";import{C as v,R as T,a as h,aa as p,b as f,h as E,k as d,y as A}from"./chunk-TBMJSIBB.js";var S=E(D());var _=class u{static compareAsc(C,e){let s=(C.sequence??0)-(e.sequence??0);if(s!==0)return s;let n=typeof C.timestamp=="string"?C.timestamp:"",t=typeof e.timestamp=="string"?e.timestamp:"",o=n.localeCompare(t);if(o!==0)return o;let i=typeof C.messageKey=="string"?C.messageKey:"",r=typeof e.messageKey=="string"?e.messageKey:"";return i.localeCompare(r)}static sortAsc(C){return[...C].sort(u.compareAsc)}};var M=E(D());var x=(()=>{class u{parent;agentToolUseIds=new Set;activeSubAgentId="";toolUseIdToName=new Map;init(e){this.parent=e}resetTrackingState(){this.toolUseIdToName.clear(),this.agentToolUseIds.clear(),this.activeSubAgentId=""}handleSocketEvent(e,s){let n=e.event,t=e.payload;try{let o=typeof t.ccapId=="string"?t.ccapId:"";if(n!=="cc:rate-limit-update"&&n!=="ext-session-msg:message"&&n!=="ext-session-msg:update"&&o&&s.selectedCcapId&&o!==s.selectedCcapId){M.DyFM_Log.info(`CCAP_CcSession_DS | socket event dropped by instance filter | event: ${n} | eventCcapId: ${o} | selectedCcapId: ${s.selectedCcapId}`);return}switch(n){case"cc-session:status":this.handleStatusUpdate(t);break;case"cc-session:output":this.handleOutputChunk(t);break;case"cc-session:event":this.handleSessionEvent(t);break;case"cc-session:list-update":this.handleListUpdate(t);break;case"cc-session:session-update":this.handleSessionItemUpdate(t);break;case"agent-events":this.handleAgentEvent(t);break;case"ext-session-msg:message":this.handleAssembledMessage(t);break;case"ext-session-msg:update":this.handleAssembledMessageUpdate(t);break;case"cc:rate-limit-update":this.handleRateLimitBroadcast(t);break}}catch(o){let i=o instanceof Error?o.message:String(o);M.DyFM_Log.error(`CCAP_CcSession_DS | socket event error | event: ${n}`,o),s.globalErrorShowError(o instanceof Error?o:new Error(`CC Session socket event processing failed: ${n} \u2014 ${i}`),"cc-session-socket-event")}}pushConsoleMessageFromEvent(e,s,n){let t=e.data;switch(e.eventType){case"response-chunk":{this.pushResponseChunkBlocks(t);break}case"tool-call-start":{let o=t.name??t.tool_name??"unknown",i=typeof t.id=="string"?t.id:"";i&&this.toolUseIdToName.set(i,o),o==="Agent"&&i&&this.agentToolUseIds.add(i);let r=t.input,a=r?u.summarizeToolInput(r):"",l=a?`${o}: ${a}`:o,c=o==="Edit"?u.buildEditExpandableContent(r):void 0,m=o==="Agent"?"":this.activeSubAgentId;this.parent.pushConsoleMessage({type:"tool",text:l,expandableContent:c,rawData:t,parentAgentId:m||void 0});break}case"tool-call-end":{let o=t.content??t.output,i=typeof o=="string"?o:"",r=i.length>200?i.substring(0,200)+"\u2026":i;if(r){let a=i.length>200?i:void 0;this.parent.pushConsoleMessage({type:"tool-result",text:r,expandableContent:a,rawData:t,parentAgentId:this.activeSubAgentId||void 0})}break}case"response-complete":{this.activeSubAgentId="";let o=t.cost_usd,i=typeof o=="number"?` ($${o.toFixed(4)})`:"",r=typeof t.model=="string"?` \xB7 ${t.model}`:"";this.parent.pushConsoleMessage({type:"result",text:`Response complete${r}${i}`,rawData:t,expandableContent:JSON.stringify(t,null,2)}),this.accumulateUsage(t);break}case"prompt-sent":{let o=typeof t.content=="string"?t.content:"";o&&(this.parent.consoleMessages_$().some(a=>a.type==="prompt"&&a.text===o.trim())||this.parent.pushConsoleMessage({type:"prompt",text:o,rawData:t,expandableContent:JSON.stringify(t,null,2)}));break}case"status-change":{let o=typeof t.from=="string"?t.from:"",i=typeof t.to=="string"?t.to:"";if(i){let r=typeof t.statusMessage=="string"?t.statusMessage:void 0,a=o?`${o} \u2192 ${i}`:i,l=r?`${a} \u2014 ${r}`:a;this.parent.pushConsoleMessage({type:"status",text:l,isStatus:!0,rawData:t,expandableContent:JSON.stringify(t,null,2)})}break}case"config-change":{let o=t.update,i=o&&typeof o=="object"?Object.keys(o).join(", "):"unknown";this.parent.pushConsoleMessage({type:"info",text:`Config updated: ${i}`,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"error":{let o=typeof t.message=="string"?t.message:"Unknown error";this.parent.pushConsoleMessage({type:"error",text:o,rawData:t,expandableContent:JSON.stringify(t,null,2)}),s&&n(new Error(`CC Session error: ${o}`),"cc-session-event");break}case"usage-update":{this.accumulateUsage(t);break}case"cli-chunk":{this.handleCliChunkEvent(t);break}case"runner-overflow":{let i=`Runner buffer overflow: ${typeof t.droppedCount=="number"?t.droppedCount:0} output items lost during server disconnect`;this.parent.pushConsoleMessage({type:"error",text:i,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"interrupted-prompt":{let o=typeof t.reason=="string"?t.reason:"",i=typeof t.lastPrompt=="string"?t.lastPrompt:"",r=i.length>80?i.substring(0,80)+"\u2026":i,a=r?`Prompt interrupted (${o}): "${r}"`:`Prompt interrupted${o?" ("+o+")":""}`;this.parent.pushConsoleMessage({type:"status",text:a,isStatus:!0,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"session-init":{let o=typeof t.model=="string"?t.model:"",i=typeof t.claudeCodeVersion=="string"?t.claudeCodeVersion:"",r=typeof t.permissionMode=="string"?t.permissionMode:"",a=[];o&&a.push(o),r&&a.push(r),i&&a.push(`v${i}`);let l=a.length>0?`CLI init: ${a.join(" \xB7 ")}`:"CLI initialized",c=JSON.stringify(t,null,2);this.parent.pushConsoleMessage({type:"info",text:l,rawData:t,expandableContent:c});break}case"config-mismatch":{let o=t.mismatches,i=Array.isArray(o)?o.map(r=>`${r.field}: requested "${r.requested}" \u2192 actual "${r.actual}"`).join(", "):"unknown mismatch";this.parent.pushConsoleMessage({type:"error",text:`Config mismatch: ${i}`,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"cli-args-record":{let o=typeof t.model=="string"?t.model:"default",i=typeof t.reasoningEffort=="string"?t.reasoningEffort:"default",r=typeof t.mode=="string"?t.mode:"normal",a=typeof t.permissionPolicy=="string"?t.permissionPolicy:"default",l=`CLI spawn: model=${o} \xB7 effort=${i} \xB7 mode=${r} \xB7 permission=${a}`;this.parent.pushConsoleMessage({type:"info",text:l,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"stdout-line":case"stderr-line":break;default:{let o=e.eventType;this.parent.pushConsoleMessage({type:"raw",text:o,rawData:t});break}}}handleStatusUpdate(e){let s=e.sessionId??"",n=e.status??"",t=e.statusMessage;this.parent.lastStatusUpdate_$.set({sessionId:s,status:n,statusMessage:t});let i=this.parent.sessions_$().map(a=>a.sessionId===s?f(h({},a),{status:n,statusMessage:t}):a);this.parent.sessions_$.set(i);let r=this.parent.selectedSession_$();if(r?.session.sessionId===s){let a=u.isLiveCcSessionStatus(n);this.parent.selectedSession_$.set(f(h({},r),{session:f(h({},r.session),{status:n,statusMessage:t}),runtime:f(h({},r.runtime),{isLive:a,runtimeStatus:n})}))}if(n==="errored"){let a=(t??"").trim();if(a.startsWith("Auto-recovery: terminal runner dropped silently")||a.startsWith("Exit code:"))M.DyFM_Log.warn(`CCAP_CcSession | user-task-fail diagnostic (NOT recorded to /errors) | sessionId: ${s} | statusMessage: ${a}`);else{let c=t?`CC Session error (${s}): ${t}`:`CC Session error (${s}): session entered errored state`;this.parent.showGlobalError(new Error(c),"cc-session-status")}}this.parent.evaluateSessionEventsPolling()}handleOutputChunk(e){let s=e.sessionId??"";if(s&&s!==this.parent.activeSessionId_$())return;let n=e.content??"",t=e.type??"stdout",o=this.parent.liveOutput_$(),i=n.split(`
1
+ import{a as R,b as O}from"./chunk-IBAMIAIM.js";import{a as q}from"./chunk-Z2O72EKW.js";import{a as g}from"./chunk-UFBTR2BG.js";import{a as U}from"./chunk-C7CAW6PK.js";import{e as P}from"./chunk-CSNFLERX.js";import{h as y,j as L}from"./chunk-2L25BDDH.js";import{p as D}from"./chunk-LGMUHF7N.js";import{C as v,R as T,a as h,aa as p,b as f,h as E,k as d,y as A}from"./chunk-TBMJSIBB.js";var S=E(D());var _=class u{static compareAsc(C,e){let s=(C.sequence??0)-(e.sequence??0);if(s!==0)return s;let n=typeof C.timestamp=="string"?C.timestamp:"",t=typeof e.timestamp=="string"?e.timestamp:"",o=n.localeCompare(t);if(o!==0)return o;let i=typeof C.messageKey=="string"?C.messageKey:"",r=typeof e.messageKey=="string"?e.messageKey:"";return i.localeCompare(r)}static sortAsc(C){return[...C].sort(u.compareAsc)}};var M=E(D());var x=(()=>{class u{parent;agentToolUseIds=new Set;activeSubAgentId="";toolUseIdToName=new Map;init(e){this.parent=e}resetTrackingState(){this.toolUseIdToName.clear(),this.agentToolUseIds.clear(),this.activeSubAgentId=""}handleSocketEvent(e,s){let n=e.event,t=e.payload;try{let o=typeof t.ccapId=="string"?t.ccapId:"";if(n!=="cc:rate-limit-update"&&n!=="ext-session-msg:message"&&n!=="ext-session-msg:update"&&o&&s.selectedCcapId&&o!==s.selectedCcapId){M.DyFM_Log.info(`CCAP_CcSession_DS | socket event dropped by instance filter | event: ${n} | eventCcapId: ${o} | selectedCcapId: ${s.selectedCcapId}`);return}switch(n){case"cc-session:status":this.handleStatusUpdate(t);break;case"cc-session:output":this.handleOutputChunk(t);break;case"cc-session:event":this.handleSessionEvent(t);break;case"cc-session:list-update":this.handleListUpdate(t);break;case"cc-session:session-update":this.handleSessionItemUpdate(t);break;case"agent-events":this.handleAgentEvent(t);break;case"ext-session-msg:message":this.handleAssembledMessage(t);break;case"ext-session-msg:update":this.handleAssembledMessageUpdate(t);break;case"cc:rate-limit-update":this.handleRateLimitBroadcast(t);break}}catch(o){let i=o instanceof Error?o.message:String(o);M.DyFM_Log.error(`CCAP_CcSession_DS | socket event error | event: ${n}`,o),s.globalErrorShowError(o instanceof Error?o:new Error(`CC Session socket event processing failed: ${n} \u2014 ${i}`),"cc-session-socket-event")}}pushConsoleMessageFromEvent(e,s,n){let t=e.data;switch(e.eventType){case"response-chunk":{this.pushResponseChunkBlocks(t);break}case"tool-call-start":{let o=t.name??t.tool_name??"unknown",i=typeof t.id=="string"?t.id:"";i&&this.toolUseIdToName.set(i,o),o==="Agent"&&i&&this.agentToolUseIds.add(i);let r=t.input,a=r?u.summarizeToolInput(r):"",l=a?`${o}: ${a}`:o,c=o==="Edit"?u.buildEditExpandableContent(r):void 0,m=o==="Agent"?"":this.activeSubAgentId;this.parent.pushConsoleMessage({type:"tool",text:l,expandableContent:c,rawData:t,parentAgentId:m||void 0});break}case"tool-call-end":{let o=t.content??t.output,i=typeof o=="string"?o:"",r=i.length>200?i.substring(0,200)+"\u2026":i;if(r){let a=i.length>200?i:void 0;this.parent.pushConsoleMessage({type:"tool-result",text:r,expandableContent:a,rawData:t,parentAgentId:this.activeSubAgentId||void 0})}break}case"response-complete":{this.activeSubAgentId="";let o=t.cost_usd,i=typeof o=="number"?` ($${o.toFixed(4)})`:"",r=typeof t.model=="string"?` \xB7 ${t.model}`:"";this.parent.pushConsoleMessage({type:"result",text:`Response complete${r}${i}`,rawData:t,expandableContent:JSON.stringify(t,null,2)}),this.accumulateUsage(t);break}case"prompt-sent":{let o=typeof t.content=="string"?t.content:"";o&&(this.parent.consoleMessages_$().some(a=>a.type==="prompt"&&a.text===o.trim())||this.parent.pushConsoleMessage({type:"prompt",text:o,rawData:t,expandableContent:JSON.stringify(t,null,2)}));break}case"status-change":{let o=typeof t.from=="string"?t.from:"",i=typeof t.to=="string"?t.to:"";if(i){let r=typeof t.statusMessage=="string"?t.statusMessage:void 0,a=o?`${o} \u2192 ${i}`:i,l=r?`${a} \u2014 ${r}`:a;this.parent.pushConsoleMessage({type:"status",text:l,isStatus:!0,rawData:t,expandableContent:JSON.stringify(t,null,2)})}break}case"config-change":{let o=t.update,i=o&&typeof o=="object"?Object.keys(o).join(", "):"unknown";this.parent.pushConsoleMessage({type:"info",text:`Config updated: ${i}`,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"error":{let o=typeof t.message=="string"?t.message:"Unknown error";this.parent.pushConsoleMessage({type:"error",text:o,rawData:t,expandableContent:JSON.stringify(t,null,2)}),s&&n(new Error(`CC Session error: ${o}`),"cc-session-event");break}case"usage-update":{this.accumulateUsage(t);break}case"cli-chunk":{this.handleCliChunkEvent(t);break}case"runner-overflow":{let i=`Runner buffer overflow: ${typeof t.droppedCount=="number"?t.droppedCount:0} output items lost during server disconnect`;this.parent.pushConsoleMessage({type:"error",text:i,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"interrupted-prompt":{let o=typeof t.reason=="string"?t.reason:"",i=typeof t.lastPrompt=="string"?t.lastPrompt:"",r=i.length>80?i.substring(0,80)+"\u2026":i,a=r?`Prompt interrupted (${o}): "${r}"`:`Prompt interrupted${o?" ("+o+")":""}`;this.parent.pushConsoleMessage({type:"status",text:a,isStatus:!0,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"session-init":{let o=typeof t.model=="string"?t.model:"",i=typeof t.claudeCodeVersion=="string"?t.claudeCodeVersion:"",r=typeof t.permissionMode=="string"?t.permissionMode:"",a=[];o&&a.push(o),r&&a.push(r),i&&a.push(`v${i}`);let l=a.length>0?`CLI init: ${a.join(" \xB7 ")}`:"CLI initialized",c=JSON.stringify(t,null,2);this.parent.pushConsoleMessage({type:"info",text:l,rawData:t,expandableContent:c});break}case"config-mismatch":{let o=t.mismatches,i=Array.isArray(o)?o.map(r=>`${r.field}: requested "${r.requested}" \u2192 actual "${r.actual}"`).join(", "):"unknown mismatch";this.parent.pushConsoleMessage({type:"error",text:`Config mismatch: ${i}`,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"cli-args-record":{let o=typeof t.model=="string"?t.model:"default",i=typeof t.reasoningEffort=="string"?t.reasoningEffort:"default",r=typeof t.mode=="string"?t.mode:"normal",a=typeof t.permissionPolicy=="string"?t.permissionPolicy:"default",l=`CLI spawn: model=${o} \xB7 effort=${i} \xB7 mode=${r} \xB7 permission=${a}`;this.parent.pushConsoleMessage({type:"info",text:l,rawData:t,expandableContent:JSON.stringify(t,null,2)});break}case"stdout-line":case"stderr-line":break;default:{let o=e.eventType;this.parent.pushConsoleMessage({type:"raw",text:o,rawData:t});break}}}handleStatusUpdate(e){let s=e.sessionId??"",n=e.status??"",t=e.statusMessage;this.parent.lastStatusUpdate_$.set({sessionId:s,status:n,statusMessage:t});let i=this.parent.sessions_$().map(a=>a.sessionId===s?f(h({},a),{status:n,statusMessage:t}):a);this.parent.sessions_$.set(i);let r=this.parent.selectedSession_$();if(r?.session.sessionId===s){let a=u.isLiveCcSessionStatus(n);this.parent.selectedSession_$.set(f(h({},r),{session:f(h({},r.session),{status:n,statusMessage:t}),runtime:f(h({},r.runtime),{isLive:a,runtimeStatus:n})}))}if(n==="errored"){let a=(t??"").trim();if(a.startsWith("Auto-recovery: terminal runner dropped silently")||a.startsWith("Exit code:"))M.DyFM_Log.warn(`CCAP_CcSession | user-task-fail diagnostic (NOT recorded to /errors) | sessionId: ${s} | statusMessage: ${a}`);else{let c=t?`CC Session error (${s}): ${t}`:`CC Session error (${s}): session entered errored state`;this.parent.showGlobalError(new Error(c),"cc-session-status")}}this.parent.evaluateSessionEventsPolling()}handleOutputChunk(e){let s=e.sessionId??"";if(s&&s!==this.parent.activeSessionId_$())return;let n=e.content??"",t=e.type??"stdout",o=this.parent.liveOutput_$(),i=n.split(`
2
2
  `),r=3e3;if(t==="stderr"){let c=new Set(this.parent.liveStderrLines_$()),m=o.length;for(let b=0;b<i.length;b++)c.add(m+b);this.parent.liveStderrLines_$.set(c)}let l=[...o,...i];if(l.length>r){let c=l.length-r,m=l.slice(c),b=this.parent.liveStderrLines_$(),I=new Set;for(let w of b){let $=w-c;$>=0&&I.add($)}this.parent.liveStderrLines_$.set(I),this.parent.liveOutput_$.set(m)}else this.parent.liveOutput_$.set(l)}handleSessionEvent(e){let s=e.sessionId??"";if(s&&s!==this.parent.activeSessionId_$())return;let n=e.event??{},t={sessionId:s,eventType:n.eventType??"",timestamp:n.timestamp??"",data:n.data??{},sequence:n.sequence??0,eventSource:typeof n.eventSource=="string"?n.eventSource:void 0};if(t.sequence<=this.parent.getLastKnownEventSequence())return;this.parent.setLastKnownEventSequence(t.sequence);let o=this.parent.selectedSessionEvents_$();this.parent.selectedSessionEvents_$.set([...o,t]),this.pushConsoleMessageFromEvent(t,!0,(i,r)=>{this.parent.showGlobalError(i,r)})}handleAgentEvent(e){let s=typeof e.phase=="string"?e.phase:void 0;if(s)switch(s){case g.runInitialization:this.parent.pushConsoleMessage({type:"status",text:"RUN initialization",isStatus:!0});break;case g.analyze:this.parent.pushConsoleMessage({type:"status",text:"Analyzing incoming message",isStatus:!0});break;case g.analyzeResult:{let n=typeof e.runIntent=="string"?e.runIntent:"";n&&this.parent.pushConsoleMessage({type:"run-intent",text:n,isStatus:!1});break}case g.assemble:this.parent.pushConsoleMessage({type:"status",text:"Refreshing Context",isStatus:!0});break;case g.executionStart:this.parent.pushConsoleMessage({type:"status",text:"Starting Agent",isStatus:!0});break;case g.llmAgenticLoop:this.parent.pushConsoleMessage({type:"status",text:"Selecting next move",isStatus:!0});break;case g.agenticLoopIteration:{let n=typeof e.action=="string"?e.action:"",t=typeof e.tool=="string"?e.tool:"",o=typeof e.intent=="string"?e.intent:"",i=[];n&&i.push(n),t&&i.push(t),o&&i.push(o);let r=i.join(" \xB7 ");r&&this.parent.pushConsoleMessage({type:"iteration",text:r,isStatus:!1});break}case g.llmToolDescription:this.parent.pushConsoleMessage({type:"status",text:"Assembling tool inputs",isStatus:!0});break;case g.llmToolErrorRetry:this.parent.pushConsoleMessage({type:"status",text:"Figuring out what's wrong",isStatus:!0});break;case g.toolErrorRetry:this.parent.pushConsoleMessage({type:"status",text:"Trying to fix inputs",isStatus:!0});break;case g.executionEnd:this.parent.pushConsoleMessage({type:"status",text:"Finishing run",isStatus:!0});break;case g.finalization:case g.llmRunFinalization:this.parent.pushConsoleMessage({type:"status",text:"Gathering what we've done",isStatus:!0});break;case g.postFinalization:this.parent.pushConsoleMessage({type:"status",text:"Memorizing stuff",isStatus:!0});break;case g.runFlowComplete:this.parent.pushConsoleMessage({type:"status",text:"Getting back to user",isStatus:!0});break}}handleRateLimitBroadcast(e){let s=e.rate_limit_info;if(!s||typeof s!="object")return;let n=s,t={status:typeof n.status=="string"?n.status:"",resetsAt:typeof n.resetsAt=="number"?n.resetsAt:0,rateLimitType:typeof n.rateLimitType=="string"?n.rateLimitType:"",utilization:typeof n.utilization=="number"?n.utilization:0,surpassedThreshold:typeof n.surpassedThreshold=="number"?n.surpassedThreshold:0,isUsingOverage:n.isUsingOverage===!0,receivedAt:new Date().toISOString()};this.parent.rateLimitInfo_$.set(t)}handleListUpdate(e){let s=e.sessions??[],o=[...this.parent.sessions_$().some(i=>i.isArchived===!0)?s:s.filter(i=>!i.isArchived)].sort((i,r)=>{let a=i.lastActivityAt?new Date(i.lastActivityAt).getTime():0;return(r.lastActivityAt?new Date(r.lastActivityAt).getTime():0)-a});this.parent.sessions_$.set(o),this.mergeActiveSessionDetail(s)}handleSessionItemUpdate(e){let s=typeof e.sessionId=="string"?e.sessionId:"";if(!s)return;let n=typeof e.update=="object"&&e.update!==null?e.update:{},o=this.parent.sessions_$().map(r=>r.sessionId!==s?r:u.applySessionFieldUpdate(r,n));this.parent.sessions_$.set(o);let i=this.parent.selectedSession_$();i?.session.sessionId===s&&this.parent.selectedSession_$.set(f(h({},i),{session:u.applySessionFieldUpdate(i.session,n)}))}static applySessionFieldUpdate(e,s){let n=h({},e);return typeof s.toolCallCountIncrement=="number"&&(n.toolCallCount=(n.toolCallCount??0)+s.toolCallCountIncrement),typeof s.promptCountIncrement=="number"&&(n.promptCount=(n.promptCount??0)+s.promptCountIncrement),typeof s.inputTokensIncrement=="number"&&(n.inputTokensTotal=(n.inputTokensTotal??0)+s.inputTokensIncrement),typeof s.outputTokensIncrement=="number"&&(n.outputTokensTotal=(n.outputTokensTotal??0)+s.outputTokensIncrement),typeof s.costUsdIncrement=="number"&&(n.costUsdTotal=(n.costUsdTotal??0)+s.costUsdIncrement),typeof s.status=="string"&&(n.status=s.status),(typeof s.statusMessage=="string"||s.statusMessage===void 0)&&(n.statusMessage=s.statusMessage),typeof s.lastActivityAt=="string"&&(n.lastActivityAt=s.lastActivityAt),typeof s.lastPrompt=="string"&&(n.lastPrompt=s.lastPrompt),typeof s.activeModel=="string"&&(n.activeModel=s.activeModel),n}mergeActiveSessionDetail(e){let s=this.parent.activeSessionId_$();if(!s)return;let n=this.parent.selectedSession_$();if(!n)return;let t=e.find(o=>o.sessionId===s);t&&this.parent.selectedSession_$.set(f(h({},n),{session:h(h({},n.session),t)}))}handleAssembledMessage(e){let s=typeof e.sessionId=="string"?e.sessionId:"",n=this.parent.activeSessionId_$();if(!s||s!==n)return;let t=e.message;if(!t||typeof t!="object"){M.DyFM_Log.warn("CCAP_CcSession_DS | handleAssembledMessage dropped: invalid message payload",{sessionId:s,payloadKeys:Object.keys(e)});return}let o=t,i=this.parent.assembledMessages_$(),r=typeof o.messageKey=="string"?o.messageKey:"";r&&i.some(a=>a.messageKey===r)||this.parent.assembledMessages_$.set(_.sortAsc([...i,o]))}handleAssembledMessageUpdate(e){let s=typeof e.sessionId=="string"?e.sessionId:"";if(!s||s!==this.parent.activeSessionId_$())return;let n=typeof e.messageKey=="string"?e.messageKey:"";if(!n)return;let t=e.update;if(!t||typeof t!="object")return;let o=t,i=this.parent.assembledMessages_$(),r=i.findIndex(c=>c.messageKey===n);if(r<0)return;let a=h({},i[r]);typeof o.bodyText=="string"&&(a.bodyText=o.bodyText),o.toolResult!==void 0&&(a.toolResult=o.toolResult),typeof o.toolStatus=="string"&&(a.toolStatus=o.toolStatus),o.headerStatusDot!==void 0&&(a.headerStatusDot=typeof o.headerStatusDot=="string"?o.headerStatusDot:void 0);let l=[...i];l[r]=a,this.parent.assembledMessages_$.set(l)}handleCliChunkEvent(e){let s=typeof e.type=="string"?e.type:"";if(s==="rate_limit_event"){let n=e.rate_limit_info;if(n&&typeof n=="object"){let t=n,o={status:typeof t.status=="string"?t.status:"",resetsAt:typeof t.resetsAt=="number"?t.resetsAt:0,rateLimitType:typeof t.rateLimitType=="string"?t.rateLimitType:"",utilization:typeof t.utilization=="number"?t.utilization:0,surpassedThreshold:typeof t.surpassedThreshold=="number"?t.surpassedThreshold:0,isUsingOverage:t.isUsingOverage===!0,receivedAt:new Date().toISOString()};this.parent.rateLimitInfo_$.set(o)}return}if(s==="system"){this.handleCliChunkSystemEvent(e);return}this.handleCliChunkToolResults(e)||this.parent.pushConsoleMessage({type:"raw",text:s||"cli-chunk",rawData:e})}handleCliChunkSystemEvent(e){let s=typeof e.subtype=="string"?e.subtype:"",n=typeof e.description=="string"?e.description:u.buildSystemEventBrief({subtype:s,data:e}),t=typeof e.tool_use_id=="string"?e.tool_use_id:"";t&&this.agentToolUseIds.has(t)&&(this.activeSubAgentId=t);let o=t&&this.agentToolUseIds.has(t)?t:this.activeSubAgentId||void 0,i=typeof e.last_tool_name=="string"?e.last_tool_name:"";if(s==="task_progress"&&i){this.parent.pushConsoleMessage({type:"tool",text:`${i}: ${n}`,isStatus:!1,rawData:e,parentAgentId:o});return}this.parent.pushConsoleMessage({type:"status-update",text:n,subtype:s,isStatus:!1,rawData:e,parentAgentId:o})}pushResponseChunkBlocks(e){let s=e.message,n=s&&typeof s=="object"?s.content:e.content;if(Array.isArray(n)){for(let t of n){if(!t||typeof t!="object")continue;let o=t,i=typeof o.type=="string"?o.type:"";if(i==="text"){let r=typeof o.text=="string"?o.text:"";r&&(this.activeSubAgentId="",this.parent.pushConsoleMessage({type:"assistant",text:r,rawData:e}))}else if(i==="tool_use")this.handleResponseChunkToolUse(o,e);else if(i==="tool_result")this.handleResponseChunkToolResult(o);else if(i==="thinking"){let r=typeof o.thinking=="string"?o.thinking:"";r&&this.parent.pushConsoleMessage({type:"thinking",text:r,rawData:o,parentAgentId:this.activeSubAgentId||void 0})}else i&&this.parent.pushConsoleMessage({type:"raw",text:i,rawData:o})}return}if(typeof n=="string"&&n){this.parent.pushConsoleMessage({type:"assistant",text:n,rawData:e});return}this.parent.pushConsoleMessage({type:"raw",text:"response-chunk",rawData:e})}handleResponseChunkToolUse(e,s){let n=typeof e.name=="string"?e.name:"unknown",t=typeof e.id=="string"?e.id:"";t&&this.toolUseIdToName.set(t,n),n==="Agent"&&t&&this.agentToolUseIds.add(t);let o=e.input,i=o?u.summarizeToolInput(o):"",r=i?`${n}: ${i}`:n,a=n==="Edit"?u.buildEditExpandableContent(o):void 0,l=n==="Agent"?"":this.activeSubAgentId;this.parent.pushConsoleMessage({type:"tool",text:r,expandableContent:a,rawData:e,parentAgentId:l||void 0})}handleResponseChunkToolResult(e){let s=typeof e.tool_use_id=="string"?e.tool_use_id:"",n=s&&this.agentToolUseIds.has(s)?s:this.activeSubAgentId||"",t=e.content??e.output,o=typeof t=="string"?t:"",i=o.length>200?o.substring(0,200)+"\u2026":o||"tool_result";this.parent.pushConsoleMessage({type:"tool-result",text:i,expandableContent:o.length>200?o:void 0,rawData:e,parentAgentId:n||void 0})}handleCliChunkToolResults(e){if((typeof e.type=="string"?e.type:"")!=="user")return!1;let n=e.message,t=n&&typeof n=="object"?n.content:null;if(!Array.isArray(t))return!1;let o=typeof e.parent_tool_use_id=="string"?e.parent_tool_use_id:"",i=!1;for(let r of t){if(!r||typeof r!="object")continue;let a=r,l=typeof a.type=="string"?a.type:"";if(l==="tool_result"){let c=typeof a.tool_use_id=="string"?a.tool_use_id:"",m=c?this.toolUseIdToName.get(c)??"":"",b=a.content,I=typeof b=="string"?b:"",w=a.is_error===!0,$=m?`${m}: `:"",k=I.length>200?I.substring(0,200)+"\u2026":I||"tool result",F=w?`${$}ERROR \u2014 ${k}`:`${$}${k}`;this.parent.pushConsoleMessage({type:"tool-result",text:F,expandableContent:I.length>200?I:void 0,rawData:f(h({},a),{parent_tool_use_id:o||void 0}),parentAgentId:o||void 0}),i=!0}else if(l==="text"&&o){let c=typeof a.text=="string"?a.text:"";if(c){let m=c.length>200?c.substring(0,200)+"\u2026":c;this.parent.pushConsoleMessage({type:"tool-result",text:m,expandableContent:c.length>200?c:void 0,rawData:{tool_use_id:o,type:"sub-agent-prompt",text:c},parentAgentId:o}),i=!0}}}return i}static isLiveCcSessionStatus(e){return e==="running"||e==="waiting-input"||e==="starting"}static buildSystemEventBrief(e){switch(e.subtype){case"init":{let s=typeof e.data.cwd=="string"?e.data.cwd:"",n=typeof e.data.model=="string"?e.data.model:"",t=["init"];return s&&t.push(s),n&&t.push(n),t.join(" \xB7 ")}case"task_updated":{let s=e.data.patch,n=s&&typeof s=="object"&&typeof s.status=="string"?s.status:"";return n?`task ${n}`:"task updated"}case"task_notification":{let s=typeof e.data.status=="string"?e.data.status:"";return s?`task ${s}`:"task notification"}default:return e.subtype||"system"}}static buildEditExpandableContent(e){if(!e||typeof e!="object")return;let s=e,n=s.old_string,t=s.new_string;if(typeof n!="string"||typeof t!="string")return;let o=500,i=n.length>o?n.substring(0,o)+"\u2026":n,r=t.length>o?t.substring(0,o)+"\u2026":t;return JSON.stringify({old:i,new:r})}static summarizeToolInput(e){if(typeof e=="string")return e.length>120?e.substring(0,120)+"\u2026":e;if(e&&typeof e=="object"){let s=e,n=s.file_path??s.path,t=s.command,o=s.pattern;if(typeof n=="string")return n;if(typeof t=="string")return t.length>120?t.substring(0,120)+"\u2026":t;if(typeof o=="string")return o}return""}accumulateUsage(e){let s=e.usage,n=typeof e.cost_usd=="number"?e.cost_usd:0,t=0,o=0;if(s&&typeof s=="object"){let r=s;t=typeof r.input_tokens=="number"?r.input_tokens:typeof r.promptTokens=="number"?r.promptTokens:0,o=typeof r.output_tokens=="number"?r.output_tokens:typeof r.completionTokens=="number"?r.completionTokens:0}let i=this.parent.sessionUsage_$();this.parent.sessionUsage_$.set({promptTokens:i.promptTokens+t,completionTokens:i.completionTokens+o,totalTokens:i.totalTokens+t+o,costUsd:i.costUsd+n})}static \u0275fac=function(s){return new(s||u)};static \u0275prov=A({token:u,factory:u.\u0275fac,providedIn:"root"})}return u})();var ne=(()=>{class u{sessions_$=p([]);sessionsLoading_$=p(!1);sessionsLoadError_$=p(null);selectedSession_$=p(null);selectedSessionLoading_$=p(!1);selectedSessionEvents_$=p([]);liveOutput_$=p([]);liveStderrLines_$=p(new Set);consoleMessages_$=p([]);assembledMessages_$=p([]);assembledMessagesHasMore_$=p(!1);isLoadingOlderMessages_$=p(!1);assembledMessagesLoaded_$=p(!1);lastStatusUpdate_$=p(null);sessionUsage_$=p({promptTokens:0,completionTokens:0,totalTokens:0,costUsd:0});rateLimitInfo_$=p(null);activeSessionId_$=p("");ccSession_AS=v(R);extSessionMsg_AS=v(q);globalError_CS=v(L);socket_CS=v(P);ngZone=v(T);peiContext_DS=v(U);socketEventHandler_CS=v(x);eventSubscription=null;reconnectSubscription=null;lastKnownEventSequence=-1;static SESSION_EVENTS_POLL_INTERVAL_MS=5*S.second;sessionEventsPollHandle=null;isSessionEventsPollInFlight=!1;constructor(){this.socketEventHandler_CS.init(this),this.eventSubscription=this.socket_CS.event$.subscribe(e=>{this.ngZone.run(()=>{this.socketEventHandler_CS.handleSocketEvent(e,{selectedCcapId:this.peiContext_DS.activeCcapId_$(),globalErrorShowError:(s,n)=>{this.globalError_CS.showError(s,n)}})})}),this.reconnectSubscription=this.socket_CS.connected$.subscribe(e=>{if(!e)return;let s=this.activeSessionId_$();s&&(this.socket_CS.emit("cc-session:subscribe",{sessionId:s}),this.loadAssembledMessages({sessionId:s}).catch(()=>{}),this.loadSessionDetail({sessionId:s}).catch(()=>{})),this.loadSessions().catch(()=>{}),this.backfillMissedEvents()})}ngOnDestroy(){this.stopSessionEventsPolling(),this.eventSubscription&&(this.eventSubscription.unsubscribe(),this.eventSubscription=null),this.reconnectSubscription&&(this.reconnectSubscription.unsubscribe(),this.reconnectSubscription=null)}showGlobalError(e,s){this.globalError_CS.showError(e,s)}getLastKnownEventSequence(){return this.lastKnownEventSequence}setLastKnownEventSequence(e){this.lastKnownEventSequence=e}evaluateSessionEventsPolling(){let e=this.activeSessionId_$(),s=this.resolveActiveSessionStatusForEventsPolling();!!(e&&this.lastKnownEventSequence>=0&&s!=null&&x.isLiveCcSessionStatus(s))?this.ensureSessionEventsPollingStarted():this.stopSessionEventsPolling()}loadSessions(e){return d(this,null,function*(){this.sessionsLoading_$.set(!0),this.sessionsLoadError_$.set(null);try{let n=[...(yield this.ccSession_AS.listSessions({status:e?.status,workspacePath:e?.workspacePath,includeArchived:e?.includeArchived})).sessions].sort((t,o)=>{let i=t.lastActivityAt?new Date(t.lastActivityAt).getTime():0;return(o.lastActivityAt?new Date(o.lastActivityAt).getTime():0)-i});this.sessions_$.set(n)}catch(s){this.sessionsLoadError_$.set(s)}finally{this.sessionsLoading_$.set(!1)}})}loadPersistedRateLimitState(e){return d(this,null,function*(){let s=e.ccapId?.trim()??"";if(s)try{let n=yield this.ccSession_AS.getRateLimitState({ccapId:s});this.mergePersistedRateLimitState(n.items)}catch(n){S.DyFM_Log.warn(`ClaudeCode_DS | loadPersistedRateLimitState failed (non-blocking) | ccapId: ${s} | ${n instanceof Error?n.message:String(n)}`)}})}mergePersistedRateLimitState(e){if(this.rateLimitInfo_$()!==null)return;let s=O.mapServerItemsToClientInfo(e);s!==null&&this.rateLimitInfo_$.set(s)}loadSessionDetail(e){return d(this,null,function*(){this.selectedSessionLoading_$.set(!0);try{let s=yield this.ccSession_AS.getSession({sessionId:e.sessionId}),n=this.activeSessionId_$();if(n&&n!==e.sessionId){S.DyFM_Log.info(`CCAP_CcSession_DS | loadSessionDetail stale response \u2014 discarded | requestedSessionId: ${e.sessionId} | currentActiveSessionId: ${n}`);return}this.selectedSession_$.set(s)}catch(s){let n=this.activeSessionId_$();if(n&&n!==e.sessionId)return;this.selectedSession_$.set(null);let t=s instanceof Error?s.message:"Failed to load session details";this.pushConsoleMessage({type:"error",text:`Load session failed: ${t}`})}finally{this.selectedSessionLoading_$.set(!1),this.evaluateSessionEventsPolling()}})}loadSessionEvents(e){return d(this,null,function*(){try{let s=yield this.ccSession_AS.getSessionEvents({sessionId:e.sessionId,eventType:e.eventType,limit:e.limit??500,latest:!0}),n=this.activeSessionId_$();if(n&&n!==e.sessionId){S.DyFM_Log.info(`CCAP_CcSession_DS | loadSessionEvents stale response \u2014 discarded | requestedSessionId: ${e.sessionId} | currentActiveSessionId: ${n}`);return}this.selectedSessionEvents_$.set(s.events),this.updateLastKnownSequence(s.events);for(let t of s.events)this.socketEventHandler_CS.pushConsoleMessageFromEvent(t,!1,(o,i)=>{this.globalError_CS.showError(o,i)});this.loadAssembledMessages({sessionId:e.sessionId}).catch(()=>{})}catch{let n=this.activeSessionId_$();if(n&&n!==e.sessionId)return;this.selectedSessionEvents_$.set([])}finally{this.evaluateSessionEventsPolling()}})}createSession(e){return d(this,null,function*(){try{let s=yield this.ccSession_AS.createSession(e),n=String(s.session.sessionId||"");return yield this.loadSessions(),n}catch(s){throw this.pushConsoleMessage({type:"error",text:`Create session failed: ${y.getErrorMessageForDisplay(s)}`}),s}})}sendPrompt(e){return d(this,null,function*(){let s=e.attachments?.filter(n=>n.isImage&&!!n.base64).map(n=>`data:${n.mimeType};base64,${n.base64}`);this.pushConsoleMessage({type:"prompt",text:e.content,imageDataUrls:s?.length?s:void 0});try{let n=yield this.ccSession_AS.sendPrompt(e);n.relayed&&(n.targetOnline?this.pushConsoleMessage({type:"info",text:`Prompt relayed to remote instance (task: ${n.taskId?.substring(0,8)}\u2026)`}):this.pushConsoleMessage({type:"error",text:`\u26A0 A t\xE1voli instance jelenleg offline \u2014 a prompt queue-ban v\xE1rakozik (task: ${n.taskId?.substring(0,8)}\u2026) \xE9s csak akkor k\xE9zbes\xEDt\u0151dik, ha a target instance online lesz. Ellen\u0151rizd, hogy mindk\xE9t instance fut, \xE9s a Settings \u2192 Cluster sharedSecret azonos.`})),this.evaluateSessionEventsPolling()}catch(n){throw this.pushConsoleMessage({type:"error",text:`Send failed: ${y.getErrorMessageForDisplay(n)}`}),this.globalError_CS.showError(n,"CC Session sendPrompt"),n}})}forkSession(e){return d(this,null,function*(){try{let s=yield this.ccSession_AS.forkSession({sessionId:e.sessionId,label:e.label}),n=String(s.session.sessionId||"");return yield this.loadSessions(),n}catch(s){throw this.pushConsoleMessage({type:"error",text:`Fork session failed: ${y.getErrorMessageForDisplay(s)}`}),s}})}resumeSession(e){return d(this,null,function*(){try{let s=yield this.ccSession_AS.resumeSession(e);s.relayed&&this.pushConsoleMessage({type:"info",text:s.targetOnline?"Resume relayed to remote instance":"Resume queued for offline remote instance"}),yield this.loadSessions()}catch(s){throw this.pushConsoleMessage({type:"error",text:`Resume failed: ${y.getErrorMessageForDisplay(s)}`}),s}})}stopExecution(e){return d(this,null,function*(){try{let s=yield this.ccSession_AS.stopExecution(e);if(s.relayed){this.pushSystemAssembledMessage({sessionId:e.sessionId,text:s.targetOnline?"Stop execution relayed to remote instance":"Stop execution queued for offline remote instance",role:"info"});return}let n=s.message||"Execution stopped";this.pushSystemAssembledMessage({sessionId:e.sessionId,text:n,role:"info"})}catch(s){throw this.pushSystemAssembledMessage({sessionId:e.sessionId,text:`Stop execution failed: ${y.getErrorMessageForDisplay(s)}`,role:"error"}),s}})}terminateSession(e){return d(this,null,function*(){try{let s=yield this.ccSession_AS.terminateSession(e);s.relayed?this.pushSystemAssembledMessage({sessionId:e.sessionId,text:s.targetOnline?"Terminate relayed to remote instance":"Terminate queued for offline remote instance",role:"info"}):this.pushSystemAssembledMessage({sessionId:e.sessionId,text:"Session terminated",role:"status"}),yield this.loadSessions()}catch(s){throw this.pushSystemAssembledMessage({sessionId:e.sessionId,text:`Terminate failed: ${y.getErrorMessageForDisplay(s)}`,role:"error"}),s}})}restartRunner(e){return d(this,null,function*(){try{let s=yield this.ccSession_AS.restartRunner(e);this.pushSystemAssembledMessage({sessionId:e.sessionId,text:`Runner restarted (new terminalId: ${s.newTerminalId.slice(0,8)}\u2026). New terminal window should open shortly.`,role:"info"})}catch(s){throw this.pushSystemAssembledMessage({sessionId:e.sessionId,text:`Runner restart failed: ${y.getErrorMessageForDisplay(s)}`,role:"error"}),s}})}setSessionArchived(e){return d(this,null,function*(){try{yield this.ccSession_AS.setSessionArchived(e),yield this.loadSessions()}catch(s){throw this.pushConsoleMessage({type:"error",text:`Archive failed: ${y.getErrorMessageForDisplay(s)}`}),s}})}updateSessionConfig(e){return d(this,null,function*(){try{yield this.ccSession_AS.updateSessionConfig(e);let s=this.selectedSession_$();if(s?.session.sessionId===e.sessionId){let n=h({},s.session);e.label!=null&&(n.label=e.label),e.mode!=null&&(n.mode=e.mode),e.permissionPolicy!=null&&(n.permissionPolicy=e.permissionPolicy),e.reasoningEffort!=null&&(n.reasoningEffort=e.reasoningEffort),e.model!=null&&(n.model=e.model),e.isDebugMode!=null&&(n.isDebugMode=e.isDebugMode),this.selectedSession_$.set(f(h({},s),{session:n}))}if(e.label!=null){let n=this.sessions_$(),t=n.findIndex(o=>o.sessionId===e.sessionId);if(t>=0){let o=[...n];o[t]=f(h({},o[t]),{label:e.label}),this.sessions_$.set(o)}}}catch(s){throw this.pushConsoleMessage({type:"error",text:`Config update failed: ${y.getErrorMessageForDisplay(s)}`}),s}})}setActiveSessionId(e){let s=this.activeSessionId_$();s!==e&&this.stopSessionEventsPolling(),s&&s!==e&&this.socket_CS.emit("cc-session:unsubscribe",{sessionId:s}),this.activeSessionId_$.set(e),e&&this.socket_CS.emit("cc-session:subscribe",{sessionId:e})}clearLiveOutput(){this.stopSessionEventsPolling(),this.liveOutput_$.set([]),this.liveStderrLines_$.set(new Set),this.consoleMessages_$.set([]),this.assembledMessages_$.set([]),this.assembledMessagesHasMore_$.set(!1),this.isLoadingOlderMessages_$.set(!1),this.assembledMessagesLoaded_$.set(!1),this.selectedSession_$.set(null),this.selectedSessionEvents_$.set([]),this.lastStatusUpdate_$.set(null),this.sessionUsage_$.set({promptTokens:0,completionTokens:0,totalTokens:0,costUsd:0}),this.lastKnownEventSequence=-1,this.socketEventHandler_CS.resetTrackingState()}pushConsoleMessage(e){let s=e.type==="assistant"||e.type==="prompt"?e.text.trim():e.text,n={listKey:e.listKey??this.allocateConsoleListKey(),type:e.type,text:s,timestamp:e.timestamp??new Date().toISOString(),isStatus:e.isStatus??!1,expandableContent:e.expandableContent,rawData:e.rawData,subtype:e.subtype,parentAgentId:e.parentAgentId,imageDataUrls:e.imageDataUrls},t=this.consoleMessages_$();this.consoleMessages_$.set([...t,n])}loadAssembledMessages(e){return d(this,null,function*(){try{let s=yield this.extSessionMsg_AS.getMessages({sessionId:e.sessionId,latest:!0}),n=this.activeSessionId_$();if(n&&n!==e.sessionId){S.DyFM_Log.info(`CCAP_CcSession_DS | loadAssembledMessages stale \u2014 discarded | requestedSessionId: ${e.sessionId} | currentActiveSessionId: ${n} | restMessageCount: ${s.messages.length}`);return}let t=this.assembledMessages_$(),o=new Set(s.messages.map(r=>r.messageKey).filter(r=>typeof r=="string"&&r.length>0)),i=t.filter(r=>!o.has(r.messageKey));this.assembledMessages_$.set(_.sortAsc([...s.messages,...i])),this.assembledMessagesHasMore_$.set(s.hasMore)}catch(s){S.DyFM_Log.error(`CCAP_CcSession_DS | loadAssembledMessages failed | sessionId: ${e.sessionId}`,s)}finally{this.assembledMessagesLoaded_$.set(!0)}})}loadOlderAssembledMessages(e){return d(this,null,function*(){if(this.isLoadingOlderMessages_$()||!this.assembledMessagesHasMore_$())return;let s=this.assembledMessages_$();if(!s.length)return;let n=s.reduce((t,o)=>(o.sequence??0)<t?o.sequence??0:t,s[0].sequence??0);this.isLoadingOlderMessages_$.set(!0);try{let t=yield this.extSessionMsg_AS.getMessages({sessionId:e.sessionId,beforeSequence:n,limit:e.limit??50});t.messages.length&&this.assembledMessages_$.set(_.sortAsc([...t.messages,...s])),this.assembledMessagesHasMore_$.set(t.hasMore)}catch(t){S.DyFM_Log.error(`CCAP_CcSession_DS | loadOlderAssembledMessages failed | sessionId: ${e.sessionId}`,t)}finally{this.isLoadingOlderMessages_$.set(!1)}})}pushSystemAssembledMessage(e){let s=this.assembledMessages_$(),n=s.length?s.reduce((o,i)=>(i.sequence??0)>o?i.sequence??0:o,0):0,t={messageKey:`sys-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,sessionId:e.sessionId,sessionType:"cc",messageRole:e.role,bodyText:e.text,timestamp:new Date().toISOString(),sequence:n+1};this.assembledMessages_$.set(_.sortAsc([...s,t])),this.pushConsoleMessage({type:e.role==="error"?"error":e.role==="status"?"status":"info",text:e.text,isStatus:e.role==="status"})}allocateConsoleListKey(){return globalThis.crypto.randomUUID()}pullEventsSinceLastKnownSequence(e){return d(this,null,function*(){let s=this.activeSessionId_$();if(!(!s||this.lastKnownEventSequence<0))try{let t=(yield this.ccSession_AS.getSessionEvents({sessionId:s,sinceSequence:this.lastKnownEventSequence})).events;if(!t.length)return;this.ngZone.run(()=>{let o=this.activeSessionId_$();if(o!==s){S.DyFM_Log.info(`CCAP_CcSession_DS | pull(${e}) stale \u2014 discarded | requestedSessionId: ${s} | currentActiveSessionId: ${o} | newEventCount: ${t.length}`);return}let i=this.selectedSessionEvents_$();this.selectedSessionEvents_$.set([...i,...t]);for(let r of t)this.socketEventHandler_CS.pushConsoleMessageFromEvent(r,!0,(a,l)=>{this.globalError_CS.showError(a,l)});this.updateLastKnownSequence(t)})}catch(n){let t=e==="poll"?"session events poll failed":"backfill failed";S.DyFM_Log.warn(`CCAP_CcSession_DS | ${t}`,n)}})}backfillMissedEvents(){return d(this,null,function*(){yield this.pullEventsSinceLastKnownSequence("backfill")})}updateLastKnownSequence(e){for(let s of e)s.sequence>this.lastKnownEventSequence&&(this.lastKnownEventSequence=s.sequence)}resolveActiveSessionStatusForEventsPolling(){let e=this.activeSessionId_$();if(!e)return null;let s=this.selectedSession_$();if(s?.session.sessionId===e)return s.session.status;let n=this.lastStatusUpdate_$();return n?.sessionId===e?n.status:this.sessions_$().find(o=>o.sessionId===e)?.status??null}ensureSessionEventsPollingStarted(){this.sessionEventsPollHandle===null&&(this.sessionEventsPollHandle=setInterval(()=>{this.onSessionEventsPollTick()},u.SESSION_EVENTS_POLL_INTERVAL_MS))}stopSessionEventsPolling(){this.sessionEventsPollHandle!==null&&(clearInterval(this.sessionEventsPollHandle),this.sessionEventsPollHandle=null),this.isSessionEventsPollInFlight=!1}onSessionEventsPollTick(){return d(this,null,function*(){if(!this.isSessionEventsPollInFlight){this.isSessionEventsPollInFlight=!0;try{yield this.pullEventsSinceLastKnownSequence("poll");let e=this.activeSessionId_$();e&&(yield this.loadAssembledMessages({sessionId:e}))}finally{this.isSessionEventsPollInFlight=!1}}})}static \u0275fac=function(s){return new(s||u)};static \u0275prov=A({token:u,factory:u.\u0275fac,providedIn:"root"})}return u})();export{ne as a};
3
- //# sourceMappingURL=chunk-OXVOMMBV.js.map
3
+ //# sourceMappingURL=chunk-TUOCYFPY.js.map
@@ -1,2 +1,2 @@
1
- import{I as p}from"./chunk-SLJL7HAM.js";import{C as l,G as h,aa as a,hb as b,k as i,p as o,xb as d,y as n}from"./chunk-TBMJSIBB.js";var g=(()=>{class r{http=l(d);baseUrl=`${p.api.baseUrl}/sch`;listJobs(){return o(this.http.get(`${this.baseUrl}/jobs`))}getJob(e){return o(this.http.get(`${this.baseUrl}/jobs/${e}`))}createJob(e){return o(this.http.post(`${this.baseUrl}/jobs`,e))}updateJob(e,t){return o(this.http.patch(`${this.baseUrl}/jobs/${e}`,t))}deleteJob(e){return o(this.http.delete(`${this.baseUrl}/jobs/${e}`))}enableJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/enable`,{}))}disableJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/disable`,{}))}pauseJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/pause`,{}))}resumeJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/resume`,{}))}triggerNow(e){let t=[];e.bypass&&t.push("bypass=true"),e.forcePolicy&&t.push(`forcePolicy=${encodeURIComponent(e.forcePolicy)}`),e.dryRun&&t.push("dryRun=true");let s=t.length?`?${t.join("&")}`:"";return o(this.http.post(`${this.baseUrl}/jobs/${e.jobId}/trigger-now${s}`,{reason:e.reason}))}listExecutions(e){let t=[];e.jobId&&t.push(`jobId=${encodeURIComponent(e.jobId)}`),e.status&&t.push(`status=${encodeURIComponent(e.status)}`),e.targetSessionId&&t.push(`targetSessionId=${encodeURIComponent(e.targetSessionId)}`),e.from&&t.push(`from=${encodeURIComponent(e.from)}`),e.to&&t.push(`to=${encodeURIComponent(e.to)}`);let s=t.length?`?${t.join("&")}`:"";return o(this.http.get(`${this.baseUrl}/executions${s}`))}getExecution(e){return o(this.http.get(`${this.baseUrl}/executions/${e}`))}getDefaults(){return o(this.http.get(`${this.baseUrl}/defaults`))}applyDefaults(){return o(this.http.post(`${this.baseUrl}/defaults/apply`,{}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=n({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var F=(()=>{class r{jobs_AS=l(g);jobs_$=a([]);recentExecutions_$=a(new Map);isLoading_$=a(!1);errorMessage_$=a(null);scheduledSessionIds_$=b(()=>{let e=new Set;for(let t of this.jobs_$()){if(t.enabled===!1)continue;let s=t.target?.payload?.sessionId?.trim();s&&e.add(s)}return e});loadAll(){return i(this,null,function*(){this.isLoading_$.set(!0),this.errorMessage_$.set(null);try{let t=(yield this.jobs_AS.listJobs()).jobs??[];this.jobs_$.set(t),this.loadRecentExecutionsForJobs(t)}catch(e){this.errorMessage_$.set(e?.message??"Failed to load scheduler jobs")}finally{this.isLoading_$.set(!1)}})}loadRecentExecutionsForJobs(e){return i(this,null,function*(){let t=new Map;try{let $=(yield this.jobs_AS.listExecutions({})).executions??[];for(let j of e){let c=j._id??"";if(!c)continue;let y=$.filter(u=>u.jobId===c).sort((u,m)=>(m.scheduledAt??"").localeCompare(u.scheduledAt??"")).slice(0,10);t.set(c,y)}}catch{}this.recentExecutions_$.set(t)})}getJob(e){return i(this,null,function*(){try{return(yield this.jobs_AS.getJob(e)).job}catch(t){return this.errorMessage_$.set(t?.message??"Failed to load job"),null}})}create(e){return i(this,null,function*(){try{let t=yield this.jobs_AS.createJob(e);return yield this.loadAll(),t.job}catch(t){return this.errorMessage_$.set(t?.message??"Failed to create job"),null}})}update(e,t){return i(this,null,function*(){try{let s=yield this.jobs_AS.updateJob(e,t);return yield this.loadAll(),s.job}catch(s){return this.errorMessage_$.set(s?.message??"Failed to update job"),null}})}remove(e){return i(this,null,function*(){try{let t=yield this.jobs_AS.deleteJob(e);return yield this.loadAll(),t.deleted}catch(t){return this.errorMessage_$.set(t?.message??"Failed to delete job"),!1}})}toggleEnabled(e,t){return i(this,null,function*(){try{t?yield this.jobs_AS.enableJob(e):yield this.jobs_AS.disableJob(e),yield this.loadAll()}catch(s){this.errorMessage_$.set(s?.message??"Failed to toggle enabled state")}})}togglePaused(e,t){return i(this,null,function*(){try{t?yield this.jobs_AS.pauseJob(e):yield this.jobs_AS.resumeJob(e),yield this.loadAll()}catch(s){this.errorMessage_$.set(s?.message??"Failed to toggle paused state")}})}triggerNow(e){return i(this,null,function*(){try{return(yield this.jobs_AS.triggerNow(e)).triggered}catch(t){return this.errorMessage_$.set(t?.message??"Failed to trigger job"),!1}})}listExecutions(e){return i(this,null,function*(){try{return(yield this.jobs_AS.listExecutions({jobId:e.jobId})).executions??[]}catch(t){return this.errorMessage_$.set(t?.message??"Failed to load executions"),[]}})}getDefaults(){return i(this,null,function*(){try{return(yield this.jobs_AS.getDefaults()).defaults}catch(e){return this.errorMessage_$.set(e?.message??"Failed to load defaults"),null}})}static \u0275fac=function(t){return new(t||r)};static \u0275prov=n({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var E=(()=>{class r{transform(e){if(!e||!e.preset)return"\u2014";let t=e.preset,s=e.intervalValue;if(s===void 0||!isFinite(s))return t;switch(t){case"every-n-minutes":return`every ${s} minutes`;case"every-n-hours":return`every ${s} hours`;case"every-n-days":return`every ${s} days`;case"windowed-interval":return`every ${s} min (window)`;default:return t}}static \u0275fac=function(t){return new(t||r)};static \u0275pipe=h({name:"schSchedulePresetLabel",type:r,pure:!0,standalone:!0})}return r})();export{F as a,E as b};
2
- //# sourceMappingURL=chunk-AIHBM5CY.js.map
1
+ import{I as p}from"./chunk-LGMUHF7N.js";import{C as l,G as h,aa as a,hb as b,k as i,p as o,xb as d,y as n}from"./chunk-TBMJSIBB.js";var g=(()=>{class r{http=l(d);baseUrl=`${p.api.baseUrl}/sch`;listJobs(){return o(this.http.get(`${this.baseUrl}/jobs`))}getJob(e){return o(this.http.get(`${this.baseUrl}/jobs/${e}`))}createJob(e){return o(this.http.post(`${this.baseUrl}/jobs`,e))}updateJob(e,t){return o(this.http.patch(`${this.baseUrl}/jobs/${e}`,t))}deleteJob(e){return o(this.http.delete(`${this.baseUrl}/jobs/${e}`))}enableJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/enable`,{}))}disableJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/disable`,{}))}pauseJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/pause`,{}))}resumeJob(e){return o(this.http.post(`${this.baseUrl}/jobs/${e}/resume`,{}))}triggerNow(e){let t=[];e.bypass&&t.push("bypass=true"),e.forcePolicy&&t.push(`forcePolicy=${encodeURIComponent(e.forcePolicy)}`),e.dryRun&&t.push("dryRun=true");let s=t.length?`?${t.join("&")}`:"";return o(this.http.post(`${this.baseUrl}/jobs/${e.jobId}/trigger-now${s}`,{reason:e.reason}))}listExecutions(e){let t=[];e.jobId&&t.push(`jobId=${encodeURIComponent(e.jobId)}`),e.status&&t.push(`status=${encodeURIComponent(e.status)}`),e.targetSessionId&&t.push(`targetSessionId=${encodeURIComponent(e.targetSessionId)}`),e.from&&t.push(`from=${encodeURIComponent(e.from)}`),e.to&&t.push(`to=${encodeURIComponent(e.to)}`);let s=t.length?`?${t.join("&")}`:"";return o(this.http.get(`${this.baseUrl}/executions${s}`))}getExecution(e){return o(this.http.get(`${this.baseUrl}/executions/${e}`))}getDefaults(){return o(this.http.get(`${this.baseUrl}/defaults`))}applyDefaults(){return o(this.http.post(`${this.baseUrl}/defaults/apply`,{}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=n({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var F=(()=>{class r{jobs_AS=l(g);jobs_$=a([]);recentExecutions_$=a(new Map);isLoading_$=a(!1);errorMessage_$=a(null);scheduledSessionIds_$=b(()=>{let e=new Set;for(let t of this.jobs_$()){if(t.enabled===!1)continue;let s=t.target?.payload?.sessionId?.trim();s&&e.add(s)}return e});loadAll(){return i(this,null,function*(){this.isLoading_$.set(!0),this.errorMessage_$.set(null);try{let t=(yield this.jobs_AS.listJobs()).jobs??[];this.jobs_$.set(t),this.loadRecentExecutionsForJobs(t)}catch(e){this.errorMessage_$.set(e?.message??"Failed to load scheduler jobs")}finally{this.isLoading_$.set(!1)}})}loadRecentExecutionsForJobs(e){return i(this,null,function*(){let t=new Map;try{let $=(yield this.jobs_AS.listExecutions({})).executions??[];for(let j of e){let c=j._id??"";if(!c)continue;let y=$.filter(u=>u.jobId===c).sort((u,m)=>(m.scheduledAt??"").localeCompare(u.scheduledAt??"")).slice(0,10);t.set(c,y)}}catch{}this.recentExecutions_$.set(t)})}getJob(e){return i(this,null,function*(){try{return(yield this.jobs_AS.getJob(e)).job}catch(t){return this.errorMessage_$.set(t?.message??"Failed to load job"),null}})}create(e){return i(this,null,function*(){try{let t=yield this.jobs_AS.createJob(e);return yield this.loadAll(),t.job}catch(t){return this.errorMessage_$.set(t?.message??"Failed to create job"),null}})}update(e,t){return i(this,null,function*(){try{let s=yield this.jobs_AS.updateJob(e,t);return yield this.loadAll(),s.job}catch(s){return this.errorMessage_$.set(s?.message??"Failed to update job"),null}})}remove(e){return i(this,null,function*(){try{let t=yield this.jobs_AS.deleteJob(e);return yield this.loadAll(),t.deleted}catch(t){return this.errorMessage_$.set(t?.message??"Failed to delete job"),!1}})}toggleEnabled(e,t){return i(this,null,function*(){try{t?yield this.jobs_AS.enableJob(e):yield this.jobs_AS.disableJob(e),yield this.loadAll()}catch(s){this.errorMessage_$.set(s?.message??"Failed to toggle enabled state")}})}togglePaused(e,t){return i(this,null,function*(){try{t?yield this.jobs_AS.pauseJob(e):yield this.jobs_AS.resumeJob(e),yield this.loadAll()}catch(s){this.errorMessage_$.set(s?.message??"Failed to toggle paused state")}})}triggerNow(e){return i(this,null,function*(){try{return(yield this.jobs_AS.triggerNow(e)).triggered}catch(t){return this.errorMessage_$.set(t?.message??"Failed to trigger job"),!1}})}listExecutions(e){return i(this,null,function*(){try{return(yield this.jobs_AS.listExecutions({jobId:e.jobId})).executions??[]}catch(t){return this.errorMessage_$.set(t?.message??"Failed to load executions"),[]}})}getDefaults(){return i(this,null,function*(){try{return(yield this.jobs_AS.getDefaults()).defaults}catch(e){return this.errorMessage_$.set(e?.message??"Failed to load defaults"),null}})}static \u0275fac=function(t){return new(t||r)};static \u0275prov=n({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var E=(()=>{class r{transform(e){if(!e||!e.preset)return"\u2014";let t=e.preset,s=e.intervalValue;if(s===void 0||!isFinite(s))return t;switch(t){case"every-n-minutes":return`every ${s} minutes`;case"every-n-hours":return`every ${s} hours`;case"every-n-days":return`every ${s} days`;case"windowed-interval":return`every ${s} min (window)`;default:return t}}static \u0275fac=function(t){return new(t||r)};static \u0275pipe=h({name:"schSchedulePresetLabel",type:r,pure:!0,standalone:!0})}return r})();export{F as a,E as b};
2
+ //# sourceMappingURL=chunk-UVND3MT4.js.map